diff --git a/docs/screenshots/agent-integration.png b/docs/screenshots/agent-integration.png index 5137f11..731b184 100644 Binary files a/docs/screenshots/agent-integration.png and b/docs/screenshots/agent-integration.png differ diff --git a/docs/screenshots/bundles-storefronts.png b/docs/screenshots/bundles-storefronts.png index 99d2cf7..aa133db 100644 Binary files a/docs/screenshots/bundles-storefronts.png and b/docs/screenshots/bundles-storefronts.png differ diff --git a/docs/screenshots/catalog-overview.png b/docs/screenshots/catalog-overview.png index 4c37a6c..5f9969e 100644 Binary files a/docs/screenshots/catalog-overview.png and b/docs/screenshots/catalog-overview.png differ diff --git a/docs/screenshots/dynamic-transactions.png b/docs/screenshots/dynamic-transactions.png index 530ccac..927a2ba 100644 Binary files a/docs/screenshots/dynamic-transactions.png and b/docs/screenshots/dynamic-transactions.png differ diff --git a/docs/screenshots/icon-texture.png b/docs/screenshots/icon-texture.png index f045138..d42d295 100644 Binary files a/docs/screenshots/icon-texture.png and b/docs/screenshots/icon-texture.png differ diff --git a/docs/screenshots/moderation-guidance.png b/docs/screenshots/moderation-guidance.png index 7a31828..d80a6c6 100644 Binary files a/docs/screenshots/moderation-guidance.png and b/docs/screenshots/moderation-guidance.png differ diff --git a/docs/screenshots/offer-editor.png b/docs/screenshots/offer-editor.png index e3c3628..4f033cd 100644 Binary files a/docs/screenshots/offer-editor.png and b/docs/screenshots/offer-editor.png differ diff --git a/docs/screenshots/verse-integration.png b/docs/screenshots/verse-integration.png index 8d0d242..c729902 100644 Binary files a/docs/screenshots/verse-integration.png and b/docs/screenshots/verse-integration.png differ diff --git a/docs/showcase/README.md b/docs/showcase/README.md index c5059c9..082309e 100644 --- a/docs/showcase/README.md +++ b/docs/showcase/README.md @@ -1,4 +1,4 @@ -# UTM 4.3 showcase +# UTM 4.3.2 showcase The showcase fixture is deterministic and intentionally uses original, abstract vector icons. It demonstrates a believable UTM 4.3 catalog without relying on Fortnite or other third-party artwork: @@ -11,4 +11,4 @@ The showcase fixture is deterministic and intentionally uses original, abstract Use `showcase-project.json` as a review fixture or run `npm run showcase:fixture -- --output ` to create a disposable UEFN project with generated Verse and crisp PNG previews from the original SVG source icons. The generated project is disposable and is not committed. Native Content Browser acceptance still requires the icon adoption/import workflow. -The canonical 4.3 capture set is stored in [docs/screenshots](../screenshots/). Run `npm run showcase:capture` to regenerate the renderer-level PNGs from the disposable fixture. The capture uses an explicitly development-only healthy connection state and is not enabled in packaged/customer execution. +The canonical 4.3.2 capture set is stored in [docs/screenshots](../screenshots/). Run `npm run showcase:capture` to regenerate the renderer-level PNGs from the disposable fixture. The capture uses an explicitly development-only healthy connection state, seeds a disposable Codex Agent Skill installation for a stable Agent Integration view, and is not enabled in packaged/customer execution. diff --git a/scripts/capture-showcase.mjs b/scripts/capture-showcase.mjs index 92105b6..7cd0667 100644 --- a/scripts/capture-showcase.mjs +++ b/scripts/capture-showcase.mjs @@ -266,6 +266,7 @@ let cdp; try { const showcaseRuntimeRoot = path.join(root, 'docs', 'showcase', 'runtime'); const fixtureRoot = path.join(showcaseRuntimeRoot, 'Creator Commerce Demo'); + const showcaseAgentHome = path.join(showcaseStateRoot, 'agent-home'); fs.rmSync(showcaseRuntimeRoot, { recursive: true, force: true }); const fixtureCommand = process.platform === 'win32' ? [process.env.ComSpec ?? 'cmd.exe', ['/d', '/c', 'npm run showcase:fixture']] @@ -279,7 +280,7 @@ try { const electronPath = path.join(root, 'node_modules', 'electron', 'dist', 'electron.exe'); child = spawn(electronPath, [`--remote-debugging-port=${cdpPort}`, '.'], { cwd: root, - env: { ...process.env, APPDATA: showcaseStateRoot, LOCALAPPDATA: showcaseStateRoot, UEM_SHOWCASE_MODE: '1', UEM_SHOWCASE_STATE_ROOT: showcaseStateRoot, UEM_TEST_MODE: '1' }, + env: { ...process.env, APPDATA: showcaseStateRoot, LOCALAPPDATA: showcaseStateRoot, UEM_AGENT_HOME: showcaseAgentHome, UEM_SHOWCASE_MODE: '1', UEM_SHOWCASE_STATE_ROOT: showcaseStateRoot, UEM_TEST_MODE: '1' }, windowsHide: true, stdio: ['ignore', 'pipe', 'pipe'], }); @@ -302,6 +303,8 @@ try { const showcaseMcpPort = await freeLoopbackPort(); const agentConfigResult = await cdp.evaluate(`fetch('/api/agent-integration/config', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-UEM-Token': ${JSON.stringify(bridgeToken)} }, body: JSON.stringify({ port: ${showcaseMcpPort} }) }).then(async response => ({ status: response.status, body: await response.json() }))`, true); if (!agentConfigResult?.body?.success || !agentConfigResult.body.status?.running) throw new Error(`Showcase UTM MCP did not start: ${JSON.stringify(agentConfigResult)}`); + const agentSetupResult = await cdp.evaluate(`fetch('/api/agent-integration/setup', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-UEM-Token': ${JSON.stringify(bridgeToken)} }, body: JSON.stringify({ agent: 'codex' }) }).then(async response => ({ status: response.status, body: await response.json() }))`, true); + if (!agentSetupResult?.body?.success || !agentSetupResult.body.skill?.upToDate) throw new Error(`Showcase Codex Agent Skill setup did not complete: ${JSON.stringify(agentSetupResult)}`); await waitFor(cdp, "document.body.innerText.includes('This project is open and fully connected')", 'healthy connected state'); await capture(cdp, 'catalog-overview', { width: 1440, height: 980 }); diff --git a/tests/showcase-captures.test.ts b/tests/showcase-captures.test.ts index 6d85022..9cb0db6 100644 --- a/tests/showcase-captures.test.ts +++ b/tests/showcase-captures.test.ts @@ -75,6 +75,8 @@ test('showcase capture selects the deterministic creator project before opening const captureSource = read('scripts/capture-showcase.mjs'); assert.match(captureSource, /clickText\(cdp, 'Creator Commerce Demo', '#projects \.project'\)/); assert.match(captureSource, /fs\.rmSync\(showcaseRuntimeRoot, \{ recursive: true, force: true \}\)/); + assert.match(captureSource, /UEM_AGENT_HOME: showcaseAgentHome/); + assert.match(captureSource, /api\/agent-integration\/setup/); assert.match(captureSource, /verifyAgentModalLayout/); assert.match(captureSource, /125% scaling/); assert.match(captureSource, /150% scaling/);