From 9bb38c36d3d1268215fd1fabae4c78a013561ebf Mon Sep 17 00:00:00 2001 From: archipelago Date: Fri, 7 Aug 2026 06:28:51 -0400 Subject: [PATCH] fix(aiui): fabricated demo content is demo-build-only, fake credential scrubbed (S7) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Per operator decision 2026-08-07 (mock content is isolated to demo.archipelago-foundation.org, never in shipped code): the auto-seeded 'node-demo' conversation (invented balances, file listings, bitcoin.conf) no longer ships on nodes — a VITE_DEMO_CONTENT build flag (or dev) gates it, /seed, and the Guide 'Load Demo' button. The genuine onboarding guide still seeds everywhere. The fixture's bitcoin.conf rpcpassword is now unmistakably example-shaped: fake must never look like a real credential. Co-Authored-By: Claude --- .../src/__tests__/fixtures/nodeDemoPrompts.ts | 2 +- .../app/src/components/chat/ChatWindow.vue | 13 +++++++++++ .../app/src/components/chat/PromptPalette.vue | 6 ++++- aiui/packages/app/src/pages/GuidePage.vue | 6 +++-- aiui/packages/app/src/stores/chat.ts | 23 +++++++++++++------ aiui/packages/app/src/utils/demoContent.ts | 11 +++++++++ 6 files changed, 50 insertions(+), 11 deletions(-) create mode 100644 aiui/packages/app/src/utils/demoContent.ts diff --git a/aiui/packages/app/src/__tests__/fixtures/nodeDemoPrompts.ts b/aiui/packages/app/src/__tests__/fixtures/nodeDemoPrompts.ts index 7b3454b6..4a072de6 100644 --- a/aiui/packages/app/src/__tests__/fixtures/nodeDemoPrompts.ts +++ b/aiui/packages/app/src/__tests__/fixtures/nodeDemoPrompts.ts @@ -113,7 +113,7 @@ txindex=1 # RPC Settings rpcuser=archipelago -rpcpassword=archipelago123 +rpcpassword=EXAMPLE-ONLY-not-a-real-password rpcallowip=127.0.0.1 rpcbind=127.0.0.1 rpcport=8332 diff --git a/aiui/packages/app/src/components/chat/ChatWindow.vue b/aiui/packages/app/src/components/chat/ChatWindow.vue index d287a99d..e8f969ca 100644 --- a/aiui/packages/app/src/components/chat/ChatWindow.vue +++ b/aiui/packages/app/src/components/chat/ChatWindow.vue @@ -148,6 +148,7 @@ import { computed, ref, watch, nextTick } from 'vue' import { useVirtualizer } from '@tanstack/vue-virtual' import { useChatStore } from '@/stores/chat' +import { DEMO_CONTENT_ENABLED } from '@/utils/demoContent' import { useAI, streamWithModel } from '@/composables/useAI' import { useContentPanel } from '@/composables/useContentPanel' import { useComparisonMode } from '@/composables/useComparisonMode' @@ -354,6 +355,18 @@ async function handleSend(text: string, images: ImageAttachment[] = []) { } if (trimmed === '/seed') { + // Demo-site/dev only (S7): the seed showcase is fabricated example + // content and must not ship in the node build. + if (!DEMO_CONTENT_ENABLED) { + const convId = chatStore.activeConversationId + if (convId) { + chatStore.addMessage(convId, { + role: 'assistant', + content: 'The `/seed` showcase is only available in demo builds.', + }) + } + return + } await chatStore.loadSeedChats() // loadSeedChats already switches to the seed conversation // Collapse chat so user sees PromptIndex for quick picking diff --git a/aiui/packages/app/src/components/chat/PromptPalette.vue b/aiui/packages/app/src/components/chat/PromptPalette.vue index de447518..cb226cab 100644 --- a/aiui/packages/app/src/components/chat/PromptPalette.vue +++ b/aiui/packages/app/src/components/chat/PromptPalette.vue @@ -86,6 +86,7 @@