Compare commits

..

3 Commits

Author SHA1 Message Date
Claude
0ec06fcef5
test(e2e): measure the workspace panel width after its transition settles
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KxoSHAyzMXvdtwcDJZcn57
2026-10-05 19:15:25 +00:00
Claude
ed640ecc0b
Merge remote-tracking branch 'origin/main' into claude/voice-picker-carousel-426nfu 2026-10-05 19:15:06 +00:00
cynarAI
b2fb517286
Simplify the memory settings: what is remembered first, provider setup under Advanced (#164)
The memory pane opened with an untranslated provider description, a
provider picker, a scope toggle and API key fields, and pushed what the
agents actually remember to the bottom. Most people never connect a
semantic-recall provider, so that setup now sits behind a collapsed
Advanced disclosure (open while a provider is connected), and the
remembered documents come first.

- Drop the provider descriptions, the "Shared documents" heading and
  the per-document revision label.
- Replace the Isolated/Shared toggle pair with one "Share between bots"
  switch.
- Remove the unused standalone dialog mode of the memory pane.
- German: call the section "Gedächtnis" so it no longer reads like
  reminders ("Erinnerungen").


Claude-Session: https://claude.ai/code/session_01LWzKXyE6uDmmmzuod4oXNQ

Co-authored-by: Claude <noreply@anthropic.com>
2026-10-05 20:30:30 +02:00
16 changed files with 176 additions and 383 deletions

View File

@ -35,8 +35,9 @@ test("the bot's screen opens beside the chat while it works and steps back after
"src",
SCREEN_URL,
);
// The live screen gets more room than a settings panel.
expect((await sidePanel.boundingBox())!.width).toBeGreaterThan(400);
// The live screen gets more room than a settings panel. The panel widens
// over a CSS transition, so measure once it has settled.
await expect.poll(async () => (await sidePanel.boundingBox())?.width ?? 0).toBeGreaterThan(400);
await captureScreenshot(page, testInfo, "workspace-screen-beside-chat");
// Once the work is done the conversation gets its full width back.

View File

@ -23,7 +23,6 @@ test("memory and skills are readable and editable in the app", async ({ page },
await openUserSettings(page, "memory");
await expect(page.getByLabel("Close memory settings")).toBeVisible();
const spaceDocs = page.getByTestId("space-memory-documents");
await expect(spaceDocs.getByText("Shared documents")).toBeVisible();
const memoryRow = spaceDocs.getByRole("button", { name: /MEMORY\.md/ });
await expect(memoryRow).toBeVisible();
await memoryRow.click();
@ -51,7 +50,7 @@ test("memory and skills are readable and editable in the app", async ({ page },
} finally {
releaseSave();
}
await expect(spaceDocs.getByText("rev 2")).toBeVisible();
await expect(docEditor).toHaveCount(0);
// The save persisted: reopen the document and find the marker.
await memoryRow.click();
@ -103,7 +102,7 @@ test("memory and skills are readable and editable in the app", async ({ page },
await botMemory.getByRole("button", { name: "Save", exact: true }).scrollIntoViewIfNeeded();
await captureScreenshot(page, testInfo, "80-knowledge-bot-memory");
await botMemory.getByRole("button", { name: "Save", exact: true }).click();
await expect(botMemory.getByText("rev 2")).toBeVisible();
await expect(botDocEditor).toHaveCount(0);
expect(
await rpc<MemoryDocument[]>(page, "memory/list", {
botId: activeBotId(page),

View File

@ -39,7 +39,12 @@ test("settings shell is two-pane and deep-links Models Memory Voice Usage", asyn
await expect(settings.getByRole("heading", { name: "Memory", exact: true })).toBeVisible();
await expect(settings.getByTestId("memory-settings")).toBeVisible();
const memory = settings.getByTestId("memory-settings");
await expect(memory.getByTestId("space-memory-list")).toBeVisible();
await expect(memory.getByLabel("Provider")).toBeHidden();
await captureScreenshot(page, testInfo, "settings-shell-memory");
await memory.getByText("Advanced", { exact: true }).click();
await expect(memory.getByLabel("Provider")).toBeVisible();
await expect(memory.getByRole("switch", { name: "Share between bots" })).toBeVisible();
await memory.getByLabel("Provider").selectOption("serenity");
await expect(memory.getByLabel("MCP endpoint")).toBeVisible();
await expect(memory.getByLabel("Bearer token")).toBeVisible();

View File

@ -490,6 +490,7 @@ msgstr "Adresse"
#: src/components/MediaSettings.tsx
#: src/pages/AccountSettingsOverlay.tsx
#: src/pages/McpServersOverlay.tsx
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/ModelSettingsOverlay.tsx
#: src/pages/PluginsOverlay.tsx
#: src/pages/RoutineSchedule.tsx
@ -1210,10 +1211,9 @@ msgstr "Integrationseinstellungen schließen"
msgid "Close MCP servers"
msgstr "MCP-Server schließen"
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/SettingsOverlay.tsx
msgid "Close memory settings"
msgstr "Erinnerungseinstellungen schließen"
msgstr "Gedächtnis-Einstellungen schließen"
#: src/pages/MessagingSettingsOverlay.tsx
msgid "Close messaging settings"
@ -1390,7 +1390,6 @@ msgstr "Treg verbinden"
#: src/components/integrations/IntegrationSetup.tsx
#: src/pages/McpOAuthCallback.tsx
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/ModelSettingsOverlay.tsx
#: src/pages/shell/message-cards.tsx
msgid "Connected"
@ -1999,10 +1998,6 @@ msgstr "Standard"
msgid "Default ({0})"
msgstr "Standard ({0})"
#: src/pages/MemorySettingsOverlay.tsx
msgid "Default scope"
msgstr "Standardbereich"
#: src/components/UserProfileSettings.tsx
#: src/pages/BotContextMenu.tsx
#: src/pages/KnowledgeSection.tsx
@ -2857,7 +2852,6 @@ msgstr "Intervalleinheit"
msgid "Iris"
msgstr "Iris"
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/shell/bot-panel.tsx
msgid "Isolated"
msgstr "Isoliert"
@ -2996,7 +2990,7 @@ msgstr "Integrationen werden geladen…"
#: src/pages/MemorySettingsOverlay.tsx
msgid "Loading memory settings…"
msgstr "Erinnerungseinstellungen werden geladen…"
msgstr "Gedächtnis wird geladen…"
#: src/pages/ModelSettingsOverlay.tsx
msgid "Loading model catalog…"
@ -3102,10 +3096,6 @@ msgstr "MCP-Server verwalten"
msgid "Manage messaging settings"
msgstr "Messaging-Einstellungen verwalten"
#: src/pages/MemorySettingsOverlay.tsx
msgid "Manage the Space semantic memory provider."
msgstr "Verwalte den Anbieter für semantische Erinnerungen des Arbeitsbereichs."
#: src/pages/PluginsOverlay.tsx
msgid "Manual"
msgstr "Manuell"
@ -3165,10 +3155,9 @@ msgid "Members (pick {GROUP_MEMBER_MIN}–{GROUP_MEMBER_MAX})"
msgstr "Mitglieder ({GROUP_MEMBER_MIN}–{GROUP_MEMBER_MAX} auswählen)"
#: src/pages/KnowledgeSection.tsx
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/SettingsOverlay.tsx
msgid "Memory"
msgstr "Erinnerungen"
msgstr "Gedächtnis"
#: src/pages/shell/bot-panel.tsx
msgid "Memory scope"
@ -4273,11 +4262,6 @@ msgstr "Bildschirm erneut laden"
msgid "Return to Rakazo"
msgstr "Zurück zu Rakazo"
#. placeholder {0}: doc.revision
#: src/pages/KnowledgeSection.tsx
msgid "rev {0}"
msgstr "Rev. {0}"
#: src/pages/MessagingSettingsOverlay.tsx
msgid "Revoke"
msgstr "Widerrufen"
@ -4562,11 +4546,14 @@ msgstr "Form"
msgid "Shape {0}"
msgstr "Form {0}"
#: src/pages/MemorySettingsOverlay.tsx
msgid "Share between bots"
msgstr "Zwischen Bots teilen"
#: src/lib/voice-persona-copy.ts
msgid "Share what you're imagining — or tell me one thing to refine."
msgstr "Erzähl, was dir vorschwebt — oder nenn mir eine Sache, die ich verfeinern soll."
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/shell/bot-panel.tsx
msgid "Shared"
msgstr "Geteilt"
@ -4575,10 +4562,6 @@ msgstr "Geteilt"
msgid "Shared chat with 2-6 bots. They all reply in the same thread."
msgstr "Gemeinsamer Chat mit 2–6 Bots. Alle antworten im selben Thread."
#: src/pages/KnowledgeSection.tsx
msgid "Shared documents"
msgstr "Geteilte Dokumente"
#: src/lib/voice-persona-copy.ts
msgid "Sharing the draft…"
msgstr "Teile den Entwurf…"

View File

@ -490,6 +490,7 @@ msgstr "Address"
#: src/components/MediaSettings.tsx
#: src/pages/AccountSettingsOverlay.tsx
#: src/pages/McpServersOverlay.tsx
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/ModelSettingsOverlay.tsx
#: src/pages/PluginsOverlay.tsx
#: src/pages/RoutineSchedule.tsx
@ -1210,7 +1211,6 @@ msgstr "Close integrations settings"
msgid "Close MCP servers"
msgstr "Close MCP servers"
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/SettingsOverlay.tsx
msgid "Close memory settings"
msgstr "Close memory settings"
@ -1390,7 +1390,6 @@ msgstr "Connect Treg"
#: src/components/integrations/IntegrationSetup.tsx
#: src/pages/McpOAuthCallback.tsx
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/ModelSettingsOverlay.tsx
#: src/pages/shell/message-cards.tsx
msgid "Connected"
@ -1999,10 +1998,6 @@ msgstr "Default"
msgid "Default ({0})"
msgstr "Default ({0})"
#: src/pages/MemorySettingsOverlay.tsx
msgid "Default scope"
msgstr "Default scope"
#: src/components/UserProfileSettings.tsx
#: src/pages/BotContextMenu.tsx
#: src/pages/KnowledgeSection.tsx
@ -2857,7 +2852,6 @@ msgstr "Interval unit"
msgid "Iris"
msgstr "Iris"
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/shell/bot-panel.tsx
msgid "Isolated"
msgstr "Isolated"
@ -3102,10 +3096,6 @@ msgstr "Manage MCP servers"
msgid "Manage messaging settings"
msgstr "Manage messaging settings"
#: src/pages/MemorySettingsOverlay.tsx
msgid "Manage the Space semantic memory provider."
msgstr "Manage the Space semantic memory provider."
#: src/pages/PluginsOverlay.tsx
msgid "Manual"
msgstr "Manual"
@ -3165,7 +3155,6 @@ msgid "Members (pick {GROUP_MEMBER_MIN}–{GROUP_MEMBER_MAX})"
msgstr "Members (pick {GROUP_MEMBER_MIN}–{GROUP_MEMBER_MAX})"
#: src/pages/KnowledgeSection.tsx
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/SettingsOverlay.tsx
msgid "Memory"
msgstr "Memory"
@ -4273,11 +4262,6 @@ msgstr "Retry screen"
msgid "Return to Rakazo"
msgstr "Return to Rakazo"
#. placeholder {0}: doc.revision
#: src/pages/KnowledgeSection.tsx
msgid "rev {0}"
msgstr "rev {0}"
#: src/pages/MessagingSettingsOverlay.tsx
msgid "Revoke"
msgstr "Revoke"
@ -4562,11 +4546,14 @@ msgstr "Shape"
msgid "Shape {0}"
msgstr "Shape {0}"
#: src/pages/MemorySettingsOverlay.tsx
msgid "Share between bots"
msgstr "Share between bots"
#: src/lib/voice-persona-copy.ts
msgid "Share what you're imagining — or tell me one thing to refine."
msgstr "Share what you're imagining — or tell me one thing to refine."
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/shell/bot-panel.tsx
msgid "Shared"
msgstr "Shared"
@ -4575,10 +4562,6 @@ msgstr "Shared"
msgid "Shared chat with 2-6 bots. They all reply in the same thread."
msgstr "Shared chat with 2-6 bots. They all reply in the same thread."
#: src/pages/KnowledgeSection.tsx
msgid "Shared documents"
msgstr "Shared documents"
#: src/lib/voice-persona-copy.ts
msgid "Sharing the draft…"
msgstr "Sharing the draft…"

View File

@ -490,6 +490,7 @@ msgstr ""
#: src/components/MediaSettings.tsx
#: src/pages/AccountSettingsOverlay.tsx
#: src/pages/McpServersOverlay.tsx
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/ModelSettingsOverlay.tsx
#: src/pages/PluginsOverlay.tsx
#: src/pages/RoutineSchedule.tsx
@ -1210,7 +1211,6 @@ msgstr ""
msgid "Close MCP servers"
msgstr "Cerrar servidores MCP"
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/SettingsOverlay.tsx
msgid "Close memory settings"
msgstr "Cerrar configuración de memoria"
@ -1390,7 +1390,6 @@ msgstr "Conectar Treg"
#: src/components/integrations/IntegrationSetup.tsx
#: src/pages/McpOAuthCallback.tsx
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/ModelSettingsOverlay.tsx
#: src/pages/shell/message-cards.tsx
msgid "Connected"
@ -1999,10 +1998,6 @@ msgstr "Predeterminado"
msgid "Default ({0})"
msgstr "Predeterminado ({0})"
#: src/pages/MemorySettingsOverlay.tsx
msgid "Default scope"
msgstr "Alcance predeterminado"
#: src/components/UserProfileSettings.tsx
#: src/pages/BotContextMenu.tsx
#: src/pages/KnowledgeSection.tsx
@ -2857,7 +2852,6 @@ msgstr "Unidad del intervalo"
msgid "Iris"
msgstr ""
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/shell/bot-panel.tsx
msgid "Isolated"
msgstr "Aislado"
@ -3102,10 +3096,6 @@ msgstr "Gestionar servidores MCP"
msgid "Manage messaging settings"
msgstr "Administrar configuración de mensajería"
#: src/pages/MemorySettingsOverlay.tsx
msgid "Manage the Space semantic memory provider."
msgstr "Administra el proveedor de memoria semántica del Space."
#: src/pages/PluginsOverlay.tsx
msgid "Manual"
msgstr ""
@ -3165,7 +3155,6 @@ msgid "Members (pick {GROUP_MEMBER_MIN}–{GROUP_MEMBER_MAX})"
msgstr "Miembros (elige {GROUP_MEMBER_MIN}–{GROUP_MEMBER_MAX})"
#: src/pages/KnowledgeSection.tsx
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/SettingsOverlay.tsx
msgid "Memory"
msgstr "Memoria"
@ -4273,11 +4262,6 @@ msgstr "Reintentar pantalla"
msgid "Return to Rakazo"
msgstr "Volver a Rakazo"
#. placeholder {0}: doc.revision
#: src/pages/KnowledgeSection.tsx
msgid "rev {0}"
msgstr "rev. {0}"
#: src/pages/MessagingSettingsOverlay.tsx
msgid "Revoke"
msgstr "Revocar"
@ -4562,11 +4546,14 @@ msgstr "Forma"
msgid "Shape {0}"
msgstr ""
#: src/pages/MemorySettingsOverlay.tsx
msgid "Share between bots"
msgstr ""
#: src/lib/voice-persona-copy.ts
msgid "Share what you're imagining — or tell me one thing to refine."
msgstr ""
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/shell/bot-panel.tsx
msgid "Shared"
msgstr "Compartido"
@ -4575,10 +4562,6 @@ msgstr "Compartido"
msgid "Shared chat with 2-6 bots. They all reply in the same thread."
msgstr ""
#: src/pages/KnowledgeSection.tsx
msgid "Shared documents"
msgstr "Documentos compartidos"
#: src/lib/voice-persona-copy.ts
msgid "Sharing the draft…"
msgstr ""

View File

@ -490,6 +490,7 @@ msgstr ""
#: src/components/MediaSettings.tsx
#: src/pages/AccountSettingsOverlay.tsx
#: src/pages/McpServersOverlay.tsx
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/ModelSettingsOverlay.tsx
#: src/pages/PluginsOverlay.tsx
#: src/pages/RoutineSchedule.tsx
@ -1210,7 +1211,6 @@ msgstr ""
msgid "Close MCP servers"
msgstr "MCP सर्वर बंद करें"
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/SettingsOverlay.tsx
msgid "Close memory settings"
msgstr "मेमोरी सेटिंग्स बंद करें"
@ -1390,7 +1390,6 @@ msgstr "Treg कनेक्ट करें"
#: src/components/integrations/IntegrationSetup.tsx
#: src/pages/McpOAuthCallback.tsx
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/ModelSettingsOverlay.tsx
#: src/pages/shell/message-cards.tsx
msgid "Connected"
@ -1999,10 +1998,6 @@ msgstr "डिफ़ॉल्ट"
msgid "Default ({0})"
msgstr "डिफ़ॉल्ट ({0})"
#: src/pages/MemorySettingsOverlay.tsx
msgid "Default scope"
msgstr "डिफ़ॉल्ट स्कोप"
#: src/components/UserProfileSettings.tsx
#: src/pages/BotContextMenu.tsx
#: src/pages/KnowledgeSection.tsx
@ -2857,7 +2852,6 @@ msgstr "अंतराल इकाई"
msgid "Iris"
msgstr ""
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/shell/bot-panel.tsx
msgid "Isolated"
msgstr "पृथक"
@ -3102,10 +3096,6 @@ msgstr "MCP सर्वर प्रबंधित करें"
msgid "Manage messaging settings"
msgstr ""
#: src/pages/MemorySettingsOverlay.tsx
msgid "Manage the Space semantic memory provider."
msgstr "वर्कस्पेस के सिमेंटिक मेमोरी प्रोवाइडर को प्रबंधित करें।"
#: src/pages/PluginsOverlay.tsx
msgid "Manual"
msgstr ""
@ -3165,7 +3155,6 @@ msgid "Members (pick {GROUP_MEMBER_MIN}–{GROUP_MEMBER_MAX})"
msgstr "सदस्य ({GROUP_MEMBER_MIN}–{GROUP_MEMBER_MAX} चुनें)"
#: src/pages/KnowledgeSection.tsx
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/SettingsOverlay.tsx
msgid "Memory"
msgstr "मेमोरी"
@ -4273,11 +4262,6 @@ msgstr ""
msgid "Return to Rakazo"
msgstr "Rakazo पर लौटें"
#. placeholder {0}: doc.revision
#: src/pages/KnowledgeSection.tsx
msgid "rev {0}"
msgstr "रिवीज़न {0}"
#: src/pages/MessagingSettingsOverlay.tsx
msgid "Revoke"
msgstr ""
@ -4562,11 +4546,14 @@ msgstr "आकार"
msgid "Shape {0}"
msgstr ""
#: src/pages/MemorySettingsOverlay.tsx
msgid "Share between bots"
msgstr ""
#: src/lib/voice-persona-copy.ts
msgid "Share what you're imagining — or tell me one thing to refine."
msgstr ""
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/shell/bot-panel.tsx
msgid "Shared"
msgstr "साझा"
@ -4575,10 +4562,6 @@ msgstr "साझा"
msgid "Shared chat with 2-6 bots. They all reply in the same thread."
msgstr ""
#: src/pages/KnowledgeSection.tsx
msgid "Shared documents"
msgstr "साझा दस्तावेज़"
#: src/lib/voice-persona-copy.ts
msgid "Sharing the draft…"
msgstr ""

View File

@ -490,6 +490,7 @@ msgstr ""
#: src/components/MediaSettings.tsx
#: src/pages/AccountSettingsOverlay.tsx
#: src/pages/McpServersOverlay.tsx
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/ModelSettingsOverlay.tsx
#: src/pages/PluginsOverlay.tsx
#: src/pages/RoutineSchedule.tsx
@ -1210,7 +1211,6 @@ msgstr ""
msgid "Close MCP servers"
msgstr "MCP 서버 설정 닫기"
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/SettingsOverlay.tsx
msgid "Close memory settings"
msgstr "기억 설정 닫기"
@ -1390,7 +1390,6 @@ msgstr "Treg 연결"
#: src/components/integrations/IntegrationSetup.tsx
#: src/pages/McpOAuthCallback.tsx
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/ModelSettingsOverlay.tsx
#: src/pages/shell/message-cards.tsx
msgid "Connected"
@ -1999,10 +1998,6 @@ msgstr "기본값"
msgid "Default ({0})"
msgstr "기본값 ({0})"
#: src/pages/MemorySettingsOverlay.tsx
msgid "Default scope"
msgstr "기본 기억 범위"
#: src/components/UserProfileSettings.tsx
#: src/pages/BotContextMenu.tsx
#: src/pages/KnowledgeSection.tsx
@ -2857,7 +2852,6 @@ msgstr "간격 단위"
msgid "Iris"
msgstr ""
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/shell/bot-panel.tsx
msgid "Isolated"
msgstr "이 Bot만 사용"
@ -3102,10 +3096,6 @@ msgstr "MCP 서버 관리"
msgid "Manage messaging settings"
msgstr "메시징 설정 관리"
#: src/pages/MemorySettingsOverlay.tsx
msgid "Manage the Space semantic memory provider."
msgstr "작업공간에서 사용할 장기 기억 서비스를 관리합니다."
#: src/pages/PluginsOverlay.tsx
msgid "Manual"
msgstr ""
@ -3165,7 +3155,6 @@ msgid "Members (pick {GROUP_MEMBER_MIN}–{GROUP_MEMBER_MAX})"
msgstr "참여 Bot ({GROUP_MEMBER_MIN}~{GROUP_MEMBER_MAX}개 선택)"
#: src/pages/KnowledgeSection.tsx
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/SettingsOverlay.tsx
msgid "Memory"
msgstr "기억"
@ -4273,11 +4262,6 @@ msgstr ""
msgid "Return to Rakazo"
msgstr "Rakazo로 돌아가기"
#. placeholder {0}: doc.revision
#: src/pages/KnowledgeSection.tsx
msgid "rev {0}"
msgstr "리비전 {0}"
#: src/pages/MessagingSettingsOverlay.tsx
msgid "Revoke"
msgstr "연결 해제"
@ -4562,11 +4546,14 @@ msgstr "모양"
msgid "Shape {0}"
msgstr ""
#: src/pages/MemorySettingsOverlay.tsx
msgid "Share between bots"
msgstr ""
#: src/lib/voice-persona-copy.ts
msgid "Share what you're imagining — or tell me one thing to refine."
msgstr ""
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/shell/bot-panel.tsx
msgid "Shared"
msgstr "함께 사용"
@ -4575,10 +4562,6 @@ msgstr "함께 사용"
msgid "Shared chat with 2-6 bots. They all reply in the same thread."
msgstr ""
#: src/pages/KnowledgeSection.tsx
msgid "Shared documents"
msgstr "공유 문서"
#: src/lib/voice-persona-copy.ts
msgid "Sharing the draft…"
msgstr ""

View File

@ -490,6 +490,7 @@ msgstr ""
#: src/components/MediaSettings.tsx
#: src/pages/AccountSettingsOverlay.tsx
#: src/pages/McpServersOverlay.tsx
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/ModelSettingsOverlay.tsx
#: src/pages/PluginsOverlay.tsx
#: src/pages/RoutineSchedule.tsx
@ -1210,7 +1211,6 @@ msgstr ""
msgid "Close MCP servers"
msgstr "Fechar servidores MCP"
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/SettingsOverlay.tsx
msgid "Close memory settings"
msgstr "Fechar configurações de memória"
@ -1390,7 +1390,6 @@ msgstr "Conectar Treg"
#: src/components/integrations/IntegrationSetup.tsx
#: src/pages/McpOAuthCallback.tsx
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/ModelSettingsOverlay.tsx
#: src/pages/shell/message-cards.tsx
msgid "Connected"
@ -1999,10 +1998,6 @@ msgstr "Padrão"
msgid "Default ({0})"
msgstr "Padrão ({0})"
#: src/pages/MemorySettingsOverlay.tsx
msgid "Default scope"
msgstr "Escopo padrão"
#: src/components/UserProfileSettings.tsx
#: src/pages/BotContextMenu.tsx
#: src/pages/KnowledgeSection.tsx
@ -2857,7 +2852,6 @@ msgstr "Unidade do intervalo:"
msgid "Iris"
msgstr ""
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/shell/bot-panel.tsx
msgid "Isolated"
msgstr "Isolado"
@ -3102,10 +3096,6 @@ msgstr "Gerenciar servidores MCP"
msgid "Manage messaging settings"
msgstr ""
#: src/pages/MemorySettingsOverlay.tsx
msgid "Manage the Space semantic memory provider."
msgstr "Gerencie o provedor de memória semântica do espaço de trabalho."
#: src/pages/PluginsOverlay.tsx
msgid "Manual"
msgstr ""
@ -3165,7 +3155,6 @@ msgid "Members (pick {GROUP_MEMBER_MIN}–{GROUP_MEMBER_MAX})"
msgstr "Membros (escolha {GROUP_MEMBER_MIN}–{GROUP_MEMBER_MAX})"
#: src/pages/KnowledgeSection.tsx
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/SettingsOverlay.tsx
msgid "Memory"
msgstr "Memória"
@ -4273,11 +4262,6 @@ msgstr ""
msgid "Return to Rakazo"
msgstr "Retorno a Rakazo"
#. placeholder {0}: doc.revision
#: src/pages/KnowledgeSection.tsx
msgid "rev {0}"
msgstr "rev {0}"
#: src/pages/MessagingSettingsOverlay.tsx
msgid "Revoke"
msgstr ""
@ -4562,11 +4546,14 @@ msgstr "Forma"
msgid "Shape {0}"
msgstr ""
#: src/pages/MemorySettingsOverlay.tsx
msgid "Share between bots"
msgstr ""
#: src/lib/voice-persona-copy.ts
msgid "Share what you're imagining — or tell me one thing to refine."
msgstr ""
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/shell/bot-panel.tsx
msgid "Shared"
msgstr "Compartilhado"
@ -4575,10 +4562,6 @@ msgstr "Compartilhado"
msgid "Shared chat with 2-6 bots. They all reply in the same thread."
msgstr ""
#: src/pages/KnowledgeSection.tsx
msgid "Shared documents"
msgstr "Documentos compartilhados"
#: src/lib/voice-persona-copy.ts
msgid "Sharing the draft…"
msgstr ""

View File

@ -490,6 +490,7 @@ msgstr ""
#: src/components/MediaSettings.tsx
#: src/pages/AccountSettingsOverlay.tsx
#: src/pages/McpServersOverlay.tsx
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/ModelSettingsOverlay.tsx
#: src/pages/PluginsOverlay.tsx
#: src/pages/RoutineSchedule.tsx
@ -1210,7 +1211,6 @@ msgstr ""
msgid "Close MCP servers"
msgstr "Закрыть серверы MCP"
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/SettingsOverlay.tsx
msgid "Close memory settings"
msgstr "Закрыть настройки памяти"
@ -1390,7 +1390,6 @@ msgstr "Подключить Treg"
#: src/components/integrations/IntegrationSetup.tsx
#: src/pages/McpOAuthCallback.tsx
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/ModelSettingsOverlay.tsx
#: src/pages/shell/message-cards.tsx
msgid "Connected"
@ -1999,10 +1998,6 @@ msgstr ""
msgid "Default ({0})"
msgstr "По умолчанию ({0})"
#: src/pages/MemorySettingsOverlay.tsx
msgid "Default scope"
msgstr "Область действия по умолчанию"
#: src/components/UserProfileSettings.tsx
#: src/pages/BotContextMenu.tsx
#: src/pages/KnowledgeSection.tsx
@ -2857,7 +2852,6 @@ msgstr "Единица интервала"
msgid "Iris"
msgstr ""
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/shell/bot-panel.tsx
msgid "Isolated"
msgstr "изолированный"
@ -3102,10 +3096,6 @@ msgstr "Управление серверами MCP"
msgid "Manage messaging settings"
msgstr "Управление настройками обмена сообщениями"
#: src/pages/MemorySettingsOverlay.tsx
msgid "Manage the Space semantic memory provider."
msgstr "Управляйте провайдером семантической памяти Space."
#: src/pages/PluginsOverlay.tsx
msgid "Manual"
msgstr "Вручную"
@ -3165,7 +3155,6 @@ msgid "Members (pick {GROUP_MEMBER_MIN}–{GROUP_MEMBER_MAX})"
msgstr "Участники (выберите {GROUP_MEMBER_MIN}–{GROUP_MEMBER_MAX})"
#: src/pages/KnowledgeSection.tsx
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/SettingsOverlay.tsx
msgid "Memory"
msgstr "Память"
@ -4273,11 +4262,6 @@ msgstr "Повторить загрузку экрана"
msgid "Return to Rakazo"
msgstr "Вернуться в Rakazo"
#. placeholder {0}: doc.revision
#: src/pages/KnowledgeSection.tsx
msgid "rev {0}"
msgstr "версия {0}"
#: src/pages/MessagingSettingsOverlay.tsx
msgid "Revoke"
msgstr "Отозвать"
@ -4562,11 +4546,14 @@ msgstr "Форма"
msgid "Shape {0}"
msgstr ""
#: src/pages/MemorySettingsOverlay.tsx
msgid "Share between bots"
msgstr ""
#: src/lib/voice-persona-copy.ts
msgid "Share what you're imagining — or tell me one thing to refine."
msgstr ""
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/shell/bot-panel.tsx
msgid "Shared"
msgstr "Общий"
@ -4575,10 +4562,6 @@ msgstr "Общий"
msgid "Shared chat with 2-6 bots. They all reply in the same thread."
msgstr "Общий чат с 2-6 ботами. Все отвечают в одной ветке."
#: src/pages/KnowledgeSection.tsx
msgid "Shared documents"
msgstr "Общие документы"
#: src/lib/voice-persona-copy.ts
msgid "Sharing the draft…"
msgstr ""

View File

@ -490,6 +490,7 @@ msgstr ""
#: src/components/MediaSettings.tsx
#: src/pages/AccountSettingsOverlay.tsx
#: src/pages/McpServersOverlay.tsx
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/ModelSettingsOverlay.tsx
#: src/pages/PluginsOverlay.tsx
#: src/pages/RoutineSchedule.tsx
@ -1210,7 +1211,6 @@ msgstr ""
msgid "Close MCP servers"
msgstr "MCP sunucularını kapat"
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/SettingsOverlay.tsx
msgid "Close memory settings"
msgstr "Hafıza ayarlarını kapat"
@ -1390,7 +1390,6 @@ msgstr "Treg'i bağla"
#: src/components/integrations/IntegrationSetup.tsx
#: src/pages/McpOAuthCallback.tsx
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/ModelSettingsOverlay.tsx
#: src/pages/shell/message-cards.tsx
msgid "Connected"
@ -1999,10 +1998,6 @@ msgstr "Varsayılan"
msgid "Default ({0})"
msgstr "Varsayılan ({0})"
#: src/pages/MemorySettingsOverlay.tsx
msgid "Default scope"
msgstr "Varsayılan kapsam"
#: src/components/UserProfileSettings.tsx
#: src/pages/BotContextMenu.tsx
#: src/pages/KnowledgeSection.tsx
@ -2857,7 +2852,6 @@ msgstr "Aralık birimi"
msgid "Iris"
msgstr ""
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/shell/bot-panel.tsx
msgid "Isolated"
msgstr "Yalıtılmış"
@ -3102,10 +3096,6 @@ msgstr "MCP sunucularını yönet"
msgid "Manage messaging settings"
msgstr ""
#: src/pages/MemorySettingsOverlay.tsx
msgid "Manage the Space semantic memory provider."
msgstr "Çalışma alanının semantik hafıza sağlayıcısını yönet."
#: src/pages/PluginsOverlay.tsx
msgid "Manual"
msgstr ""
@ -3165,7 +3155,6 @@ msgid "Members (pick {GROUP_MEMBER_MIN}–{GROUP_MEMBER_MAX})"
msgstr "Üyeler ({GROUP_MEMBER_MIN}–{GROUP_MEMBER_MAX} seç)"
#: src/pages/KnowledgeSection.tsx
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/SettingsOverlay.tsx
msgid "Memory"
msgstr "Hafıza"
@ -4273,11 +4262,6 @@ msgstr ""
msgid "Return to Rakazo"
msgstr "Rakazo'ya dön"
#. placeholder {0}: doc.revision
#: src/pages/KnowledgeSection.tsx
msgid "rev {0}"
msgstr "rev {0}"
#: src/pages/MessagingSettingsOverlay.tsx
msgid "Revoke"
msgstr "İptal et"
@ -4562,11 +4546,14 @@ msgstr "Şekil"
msgid "Shape {0}"
msgstr ""
#: src/pages/MemorySettingsOverlay.tsx
msgid "Share between bots"
msgstr ""
#: src/lib/voice-persona-copy.ts
msgid "Share what you're imagining — or tell me one thing to refine."
msgstr ""
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/shell/bot-panel.tsx
msgid "Shared"
msgstr "Ortak"
@ -4575,10 +4562,6 @@ msgstr "Ortak"
msgid "Shared chat with 2-6 bots. They all reply in the same thread."
msgstr ""
#: src/pages/KnowledgeSection.tsx
msgid "Shared documents"
msgstr "Paylaşılan belgeler"
#: src/lib/voice-persona-copy.ts
msgid "Sharing the draft…"
msgstr ""

View File

@ -490,6 +490,7 @@ msgstr ""
#: src/components/MediaSettings.tsx
#: src/pages/AccountSettingsOverlay.tsx
#: src/pages/McpServersOverlay.tsx
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/ModelSettingsOverlay.tsx
#: src/pages/PluginsOverlay.tsx
#: src/pages/RoutineSchedule.tsx
@ -1210,7 +1211,6 @@ msgstr ""
msgid "Close MCP servers"
msgstr "关闭 MCP 服务器"
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/SettingsOverlay.tsx
msgid "Close memory settings"
msgstr "关闭记忆设置"
@ -1390,7 +1390,6 @@ msgstr "连接 Treg"
#: src/components/integrations/IntegrationSetup.tsx
#: src/pages/McpOAuthCallback.tsx
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/ModelSettingsOverlay.tsx
#: src/pages/shell/message-cards.tsx
msgid "Connected"
@ -1999,10 +1998,6 @@ msgstr "默认"
msgid "Default ({0})"
msgstr "默认({0})"
#: src/pages/MemorySettingsOverlay.tsx
msgid "Default scope"
msgstr "默认范围"
#: src/components/UserProfileSettings.tsx
#: src/pages/BotContextMenu.tsx
#: src/pages/KnowledgeSection.tsx
@ -2857,7 +2852,6 @@ msgstr "间隔单位"
msgid "Iris"
msgstr ""
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/shell/bot-panel.tsx
msgid "Isolated"
msgstr "隔离"
@ -3102,10 +3096,6 @@ msgstr "管理 MCP 服务器"
msgid "Manage messaging settings"
msgstr "管理消息设置"
#: src/pages/MemorySettingsOverlay.tsx
msgid "Manage the Space semantic memory provider."
msgstr "管理工作区语义记忆提供方。"
#: src/pages/PluginsOverlay.tsx
msgid "Manual"
msgstr ""
@ -3165,7 +3155,6 @@ msgid "Members (pick {GROUP_MEMBER_MIN}–{GROUP_MEMBER_MAX})"
msgstr "成员(选择 {GROUP_MEMBER_MIN}–{GROUP_MEMBER_MAX} 个)"
#: src/pages/KnowledgeSection.tsx
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/SettingsOverlay.tsx
msgid "Memory"
msgstr "记忆"
@ -4273,11 +4262,6 @@ msgstr ""
msgid "Return to Rakazo"
msgstr "返回 Rakazo"
#. placeholder {0}: doc.revision
#: src/pages/KnowledgeSection.tsx
msgid "rev {0}"
msgstr "版本 {0}"
#: src/pages/MessagingSettingsOverlay.tsx
msgid "Revoke"
msgstr "撤销"
@ -4562,11 +4546,14 @@ msgstr "形状"
msgid "Shape {0}"
msgstr ""
#: src/pages/MemorySettingsOverlay.tsx
msgid "Share between bots"
msgstr ""
#: src/lib/voice-persona-copy.ts
msgid "Share what you're imagining — or tell me one thing to refine."
msgstr ""
#: src/pages/MemorySettingsOverlay.tsx
#: src/pages/shell/bot-panel.tsx
msgid "Shared"
msgstr "共享"
@ -4575,10 +4562,6 @@ msgstr "共享"
msgid "Shared chat with 2-6 bots. They all reply in the same thread."
msgstr ""
#: src/pages/KnowledgeSection.tsx
msgid "Shared documents"
msgstr "共享文档"
#: src/lib/voice-persona-copy.ts
msgid "Sharing the draft…"
msgstr ""

View File

@ -58,13 +58,10 @@ export function KnowledgeSection({
);
}
/** The space's shared memory documents, mounted in the Memory settings overlay. */
/** The space's shared memory documents, mounted in the Memory settings. */
export function SpaceMemorySection() {
return (
<div className="mt-6" data-testid="space-memory-documents">
<div className="mb-2 text-ui-body-sm uppercase tracking-[0.08em] text-muted-foreground">
<Trans>Shared documents</Trans>
</div>
<div data-testid="space-memory-documents">
<MemoryDocumentList
load={() => rpc.memory.list({ scope: "user" })}
exportFilename="space-memory.md"
@ -172,13 +169,8 @@ function MemoryDocumentList({
onClick={() => (openId === doc.id ? setOpenId(null) : openDoc(doc))}
className={rowClass(openId === doc.id)}
>
<span className="flex w-full items-baseline justify-between gap-3">
<span className="min-w-0 truncate text-ui-body text-foreground" dir="auto">
{doc.path}
</span>
<span className="shrink-0 text-ui-body-sm text-muted-foreground">
<Trans>rev {doc.revision}</Trans>
</span>
<span className="min-w-0 truncate text-ui-body text-foreground" dir="auto">
{doc.path}
</span>
</Button>
{openId === doc.id ? (

View File

@ -2,18 +2,12 @@ import { Trans, useLingui } from "@lingui/react/macro";
import type { SpaceMemoryConfig } from "@rakazo/contracts";
import {
Button,
Dialog,
DialogClose,
DialogContent,
DialogDescription,
DialogTitle,
Field,
FieldLabel,
NativeSelect,
NativeSelectOption,
Toggle,
Switch,
} from "@rakazo/ui-web";
import { XIcon } from "lucide-react";
import { useEffect, useId, useState } from "react";
import { rpc } from "../lib/rpc";
import { SpaceMemorySection } from "./KnowledgeSection";
@ -24,48 +18,44 @@ import {
memoryProviderSettings,
} from "./memory-providers/registry";
function ScopePicker({
type MemoryScope = "isolated" | "shared";
function SharedScopeSwitch({
value,
disabled,
onChange,
}: {
value: "isolated" | "shared";
value: MemoryScope;
disabled: boolean;
onChange: (scope: "isolated" | "shared") => void;
onChange: (scope: MemoryScope) => void;
}) {
const labelId = useId();
return (
<div className="text-ui-body text-muted-foreground">
<Trans>Default scope</Trans>
<div className="mt-2 flex gap-2">
{(["isolated", "shared"] as const).map((option) => (
<Toggle
key={option}
variant="outline"
pressed={value === option}
disabled={disabled}
onPressedChange={() => onChange(option)}
className="flex-1 font-normal text-muted-foreground aria-pressed:text-foreground"
>
{option === "isolated" ? <Trans>Isolated</Trans> : <Trans>Shared</Trans>}
</Toggle>
))}
</div>
<div className="flex items-center justify-between gap-4">
<span id={labelId} className="text-ui-body text-foreground">
<Trans>Share between bots</Trans>
</span>
<Switch
aria-labelledby={labelId}
checked={value === "shared"}
disabled={disabled}
onCheckedChange={(checked) => onChange(checked ? "shared" : "isolated")}
/>
</div>
);
}
/**
* What the agents remember first; the optional semantic-recall provider stays
* behind Advanced because most people never need it.
*/
export function MemorySettingsOverlay({
onClose,
config,
onConfigChange,
embedded = false,
onBusyChange,
}: {
onClose: () => void;
config: SpaceMemoryConfig | null | undefined;
onConfigChange: (config: SpaceMemoryConfig | null) => void;
/** Render panel body only for the shared Settings shell. */
embedded?: boolean;
onBusyChange?: (busy: boolean) => void;
}) {
const { t } = useLingui();
@ -74,7 +64,7 @@ export function MemorySettingsOverlay({
const [selectedProvider, setSelectedProvider] = useState(
config?.provider ?? defaultRegistration.id,
);
const [defaultScope, setDefaultScope] = useState<"isolated" | "shared">(
const [defaultScope, setDefaultScope] = useState<MemoryScope>(
config?.defaultMemoryScope ?? "isolated",
);
const [pending, setPending] = useState<"connect" | "disconnect" | "scope" | null>(null);
@ -136,7 +126,7 @@ export function MemorySettingsOverlay({
}
}
async function updateDefaultScope(scope: "isolated" | "shared") {
async function updateDefaultScope(scope: MemoryScope) {
if (scope === defaultScope) return;
setError(null);
markPending("scope");
@ -150,132 +140,97 @@ export function MemorySettingsOverlay({
}
}
const body = (
<>
{!embedded ? (
<div className="flex items-start justify-between px-6 pt-6 sm:px-8 sm:pt-7">
<div>
<DialogTitle className="text-2xl font-medium text-foreground">
<Trans>Memory</Trans>
</DialogTitle>
<DialogDescription className="mt-1 text-ui-body text-muted-foreground/70">
{registration?.description ?? (
<Trans>Manage the Space semantic memory provider.</Trans>
)}
</DialogDescription>
</div>
<DialogClose
aria-label={t`Close memory settings`}
disabled={busy}
render={<Button variant="ghost" size="icon-sm" />}
>
<XIcon />
</DialogClose>
</div>
) : (
<p className="px-6 pt-1 text-ui-body text-muted-foreground/70 sm:px-8">
{registration?.description ?? <Trans>Manage the Space semantic memory provider.</Trans>}
</p>
)}
<div className="rk-scroll min-h-0 flex-1 overflow-y-auto px-6 py-6 sm:px-8">
{error ? <p className="mb-4 text-sm text-destructive">{error}</p> : null}
{config === undefined ? (
<p className="text-sm text-muted-foreground">
<Trans>Loading memory settings…</Trans>
</p>
) : config ? (
<div className="rounded-xl border border-border px-4 py-3">
<div className="text-ui-body-sm uppercase tracking-[0.08em] text-muted-foreground/80">
<Trans>Connected</Trans>
</div>
<div className="mt-1 text-ui-body text-foreground">
{registration?.connectedLabel(config) ?? config.provider}
</div>
<div className="mt-3">
<ScopePicker
value={defaultScope}
disabled={busy}
onChange={(scope) => void updateDefaultScope(scope)}
/>
</div>
<Button
type="button"
variant="outline"
size="sm"
disabled={busy}
onClick={() => void disconnect()}
className="mt-3"
>
{pending === "disconnect" ? <Trans>Disconnecting…</Trans> : <Trans>Disconnect</Trans>}
</Button>
</div>
) : registration ? (
<>
{MEMORY_PROVIDER_SETTINGS.length > 1 ? (
<Field className="mb-4">
<FieldLabel htmlFor={providerSelectId}>
<Trans>Provider</Trans>
</FieldLabel>
<NativeSelect
id={providerSelectId}
className="w-full"
value={selectedProvider}
disabled={busy}
onChange={(event) => setSelectedProvider(event.target.value)}
>
{MEMORY_PROVIDER_SETTINGS.map((entry) => (
<NativeSelectOption key={entry.id} value={entry.id}>
{entry.name}
</NativeSelectOption>
))}
</NativeSelect>
</Field>
) : null}
<div className="mb-4">
<ScopePicker value={defaultScope} disabled={busy} onChange={setDefaultScope} />
</div>
<registration.SettingsForm busy={busy} onConnect={connect} />
</>
) : (
<p className="text-sm text-destructive">
<Trans>The selected memory provider is not available in this build.</Trans>
</p>
)}
<SpaceMemorySection />
</div>
</>
);
if (embedded) {
return (
<div data-testid="memory-settings" className="flex min-h-0 flex-1 flex-col overflow-hidden">
{body}
</div>
);
}
return (
<Dialog
open
onOpenChange={(open, details) => {
if (open) return;
if (busy) {
details.cancel();
return;
}
onClose();
}}
>
<DialogContent
showCloseButton={false}
className="flex max-h-[min(760px,calc(100%-2rem))] w-[560px] flex-col gap-0 overflow-hidden rounded-2xl p-0 sm:max-h-[min(760px,calc(100%-5rem))] sm:max-w-[calc(100%-5rem)]"
>
{body}
</DialogContent>
</Dialog>
<div data-testid="memory-settings" className="flex min-h-0 flex-1 flex-col overflow-hidden">
<div className="rk-scroll min-h-0 flex-1 overflow-y-auto overscroll-contain px-6 pb-6 pt-5 sm:px-8 sm:pb-8">
<SpaceMemorySection />
<details data-testid="memory-advanced" className="group mt-8" open={Boolean(config)}>
<summary className="flex cursor-pointer list-none items-center justify-between gap-3 text-ui-body text-muted-foreground">
<span>
<Trans>Advanced</Trans>
</span>
<span aria-hidden="true" className="transition-transform group-open:rotate-90">
›
</span>
</summary>
<div className="mt-4">
{error ? <p className="mb-4 text-sm text-destructive">{error}</p> : null}
{config === undefined ? (
<p className="text-sm text-muted-foreground">
<Trans>Loading memory settings…</Trans>
</p>
) : config ? (
<div className="rounded-xl border border-border px-4 py-3">
<div className="flex items-center justify-between gap-3">
<span className="min-w-0 truncate text-ui-body text-foreground">
{registration?.connectedLabel(config) ?? config.provider}
</span>
<Button
type="button"
variant="outline"
size="sm"
disabled={busy}
onClick={() => void disconnect()}
>
{pending === "disconnect" ? (
<Trans>Disconnecting…</Trans>
) : (
<Trans>Disconnect</Trans>
)}
</Button>
</div>
<div className="mt-3">
<SharedScopeSwitch
value={defaultScope}
disabled={busy}
onChange={(scope) => void updateDefaultScope(scope)}
/>
</div>
</div>
) : registration ? (
<>
{MEMORY_PROVIDER_SETTINGS.length > 1 ? (
<Field className="mb-4">
<FieldLabel htmlFor={providerSelectId}>
<Trans>Provider</Trans>
</FieldLabel>
<NativeSelect
id={providerSelectId}
className="w-full"
value={selectedProvider}
disabled={busy}
onChange={(event) => setSelectedProvider(event.target.value)}
>
{MEMORY_PROVIDER_SETTINGS.map((entry) => (
<NativeSelectOption key={entry.id} value={entry.id}>
{entry.name}
</NativeSelectOption>
))}
</NativeSelect>
</Field>
) : null}
<div className="mb-4">
<SharedScopeSwitch
value={defaultScope}
disabled={busy}
onChange={setDefaultScope}
/>
</div>
<registration.SettingsForm busy={busy} onConnect={connect} />
</>
) : (
<p className="text-sm text-destructive">
<Trans>The selected memory provider is not available in this build.</Trans>
</p>
)}
</div>
</details>
</div>
</div>
);
}

View File

@ -257,8 +257,6 @@ export function SettingsOverlay({
) : null}
{section === "memory" ? (
<MemorySettingsOverlay
embedded
onClose={requestClose}
config={memoryConfig}
onConfigChange={onMemoryConfigChange}
onBusyChange={setMemoryBusy}

View File

@ -17,7 +17,6 @@ export interface MemoryProviderSettingsFormProps {
export interface MemoryProviderSettingsRegistration {
id: string;
name: string;
description: string;
SettingsForm: ComponentType<MemoryProviderSettingsFormProps>;
connectedLabel: (config: SpaceMemoryConfig) => string;
}
@ -26,7 +25,6 @@ export const MEMORY_PROVIDER_SETTINGS: readonly MemoryProviderSettingsRegistrati
{
id: "supermemory",
name: "Supermemory",
description: "Add semantic recall alongside native MEMORY.md memory.",
SettingsForm: SupermemorySettingsForm,
connectedLabel: (config) =>
config.settings.mode === "cloud" ? "Supermemory Cloud" : `Local · ${config.settings.baseUrl}`,
@ -34,7 +32,6 @@ export const MEMORY_PROVIDER_SETTINGS: readonly MemoryProviderSettingsRegistrati
{
id: "serenity",
name: "Serenity",
description: "Self-hosted Serenity brain for durable memory.",
SettingsForm: SerenitySettingsForm,
connectedLabel: (config) => {
const label = config.settings.brainLabel?.trim();
@ -46,7 +43,6 @@ export const MEMORY_PROVIDER_SETTINGS: readonly MemoryProviderSettingsRegistrati
{
id: "builtin",
name: "Built-in",
description: "Semantic recall stored on this server.",
SettingsForm: BuiltinSettingsForm,
connectedLabel: (config) =>
`Built-in · ${config.settings.model ?? ""} · ${config.settings.baseUrl ?? ""}`,