diff --git a/README.md b/README.md index 044057e..cd9fcd5 100644 --- a/README.md +++ b/README.md @@ -320,7 +320,8 @@ Failed news, model list and release checks retry after 10 minutes. [Agent Guild: World](https://store.steampowered.com/app/5462970/Agent_Guild_World/) is a free, living 3D world for your AI coding agents, coming to Steam in November 2026: six worlds to roam with a free camera, your own characters and -companions from the Steam Workshop, a Guild Board for your notes and to-dos, +companions from [Agent Guild: Studio](https://github.com/oddessentials/agent-guild-studio) +or the Steam Workshop, a Guild Board for your notes and to-dos, and controller support, on Windows, macOS and Linux. [Wishlist it on Steam](https://store.steampowered.com/app/5462970/Agent_Guild_World/). diff --git a/src/mcp/server.mjs b/src/mcp/server.mjs index c42aa86..214a6a2 100644 --- a/src/mcp/server.mjs +++ b/src/mcp/server.mjs @@ -24,7 +24,7 @@ const HIDDEN = '[token hidden]'; // 64 bits of the known token; leave colors, short hashes and 12-digit session ids readable. const MIN_TOKEN_FRAGMENT = 16; -const CUSTOMIZE = 'To customize a Yard or the characters and companions of Agent Guild: World, or to install Grove Companion on the desktop, follow https://agentguild.oddessentials.ai/agents/.'; +const CUSTOMIZE = 'To customize a Yard, the characters and companions of a Yard or Agent Guild: World, or to install Grove Companion on the desktop, follow https://agentguild.oddessentials.ai/agents/.'; const INSTRUCTIONS = `Agent Guild runs coding agents (Claude Code, Codex CLI, Antigravity CLI, Grok Build, Docker Agent) and shells in real terminals on this computer, and opens them on every other screen. Use guild_status first, list_sessions to see the sessions, read_reply for the answer that ended a session's last turn, and read_screen for what its terminal shows now. diff --git a/tests/browser/companion.mjs b/tests/browser/companion.mjs index 398468a..f13291d 100644 --- a/tests/browser/companion.mjs +++ b/tests/browser/companion.mjs @@ -123,6 +123,7 @@ await withPage({ name: 'companion', instrumentation }, async ({ origin, navigate for (const [platform, visible] of [['linux', false], ['win32', true], ['darwin', true]]) { await evaluate(`changePlatform(${JSON.stringify(platform)})`); assert.equal(await evaluate('document.querySelector("#yard-install").checkVisibility()'), visible); + assert.equal(await evaluate('document.querySelector("#yard-world-get").hidden'), !visible); } await evaluate('document.documentElement.dataset.skin="guild"'); assert.equal(await evaluate('document.querySelector("#yard-install").checkVisibility()'), false); @@ -131,5 +132,5 @@ await withPage({ name: 'companion', instrumentation }, async ({ origin, navigate await click(); assert.equal(await evaluate('installRequests.length'), 1); assert.deepEqual(errors, []); - pass('the install control follows platform, skin and connection availability'); + pass('the install control follows platform, skin and connection availability, and Build a Yard follows platform'); }); diff --git a/tests/browser/layout.mjs b/tests/browser/layout.mjs index b1d0b5a..98bb74b 100644 --- a/tests/browser/layout.mjs +++ b/tests/browser/layout.mjs @@ -411,7 +411,7 @@ const checks = await withPage({ name: 'layout', instrumentation }, async ({ orig await evaluate('document.documentElement.dataset.skin="professional"'); await layoutReady(); assert.deepEqual([await visible('#yard-play'), await visible('#yard-play-solo'), await visible('#yard-play-arena')], [false, false, false], 'Professional shows only Builders'); - assert.deepEqual(await evaluate('(()=>{const a=document.querySelector("#yard-play-builders");return [a.href,a.target,a.rel,a.querySelector(".yard-play-sub").textContent]})()'), ['https://github.com/oddessentials/agent-guild-builders/releases/latest', '_blank', 'noopener noreferrer', 'Builders · for Windows']); + assert.deepEqual(await evaluate('(()=>{const a=document.querySelector("#yard-play-builders");return [a.href,a.target,a.rel,a.querySelector(".yard-play-sub").textContent]})()'), ['https://github.com/oddessentials/agent-guild-builders/releases/latest', '_blank', 'noopener noreferrer', 'Builders · Windows or macOS']); for (const [width, height] of [[1440, 900], [980, 800], [524, 800], [484, 800], [444, 800], [356, 800], [336, 640]]) { await size(width, height); await soloPlaced(`professional ${width}`, width, '#yard-play-builders', '.yard-play-builders'); diff --git a/tests/page-folders.test.mjs b/tests/page-folders.test.mjs index 25aad70..c2b1430 100644 --- a/tests/page-folders.test.mjs +++ b/tests/page-folders.test.mjs @@ -120,6 +120,11 @@ test('a first piece choice opens in World’s Workshop folder, later ones where later.context.chooseFolder('character', 'guild', 'anthropic'); await new Promise((resolve) => setImmediate(resolve)); assert.deepEqual(later.requests.map(([, route]) => route), ['/folders?path=%2Fwork%2Fspace&pieces=character']); + for (const [platform, studio] of [['linux', false], ['win32', true], ['darwin', true]]) { + later.context.state.platform = platform; + later.context.renderFolderBrowser(); + assert.equal(later.$('folder-status').textContent.includes('Agent Guild: Studio'), studio, platform); + } const plain = page({ answers: [listing] }); plain.context.chooseFolder('cwd'); await new Promise((resolve) => setImmediate(resolve)); diff --git a/web/app.js b/web/app.js index d9d666b..75e5843 100644 --- a/web/app.js +++ b/web/app.js @@ -1571,7 +1571,7 @@ function renderFolderBrowser() { : error ? error : !listing ? '' : listing.files?.length || listing.pieces?.length ? '' - : PIECE_FIELDS.includes(folderView.field) ? `No ${folderView.field === 'character' ? 'characters' : 'companions'} here or in the folders inside it. Steam keeps Workshop items in its library under steamapps › workshop › content › 5462970.` + : PIECE_FIELDS.includes(folderView.field) ? `No ${folderView.field === 'character' ? 'characters' : 'companions'} here or in the folders inside it.${['win32', 'darwin'].includes(state.platform) ? ' Make one with Agent Guild: Studio.' : ''} Steam keeps Workshop items in its library under steamapps › workshop › content › 5462970.` : !entries.length ? (folderView.field === 'world' ? 'No world files here.' : listing.entries.length ? 'No folders match.' : 'No folders here.') : listing.truncated ? `Showing the first ${listing.entries.length.toLocaleString()} folders.` : ''; status.classList.toggle('error', Boolean(error)); @@ -8084,7 +8084,7 @@ function connectEvents() { state.folderOpener = msg.folderOpener || null; state.platform = msg.platform || null; $('yard-install').hidden = !['win32', 'darwin'].includes(state.platform); - $('yard-world-get').hidden = state.platform !== 'win32'; + $('yard-world-get').hidden = !['win32', 'darwin'].includes(state.platform); state.yardWorlds = msg.yardWorlds ?? null; state.yardPieces = msg.yardPieces ?? null; state.remoteAccessUI?.setAvailable(msg.remoteAccess); diff --git a/web/index.html b/web/index.html index abbc905..ed1ee94 100644 --- a/web/index.html +++ b/web/index.html @@ -142,7 +142,7 @@

Start a session