@geminilight/mindos 0.6.61 → 0.6.65
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_standalone/.antigravity/mcp_config.json +14 -0
- package/_standalone/.mindos-build-version +1 -1
- package/_standalone/.next/BUILD_ID +1 -1
- package/_standalone/.next/app-path-routes-manifest.json +23 -23
- package/_standalone/.next/build-manifest.json +2 -2
- package/_standalone/.next/cache/.previewinfo +1 -1
- package/_standalone/.next/cache/.rscinfo +1 -1
- package/_standalone/.next/cache/config.json +3 -3
- package/_standalone/.next/prerender-manifest.json +3 -3
- package/_standalone/.next/server/app/.well-known/agent-card.json/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/_global-error.html +2 -2
- package/_standalone/.next/server/app/_global-error.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/_standalone/.next/server/app/_not-found/page.js +1 -1
- package/_standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/agents/[agentKey]/page.js +1 -1
- package/_standalone/.next/server/app/agents/[agentKey]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/agents/[agentKey]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/agents/page.js +1 -1
- package/_standalone/.next/server/app/agents/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/agents/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/delegations/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/discover/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/config/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/detect/route.js +1 -1
- package/_standalone/.next/server/app/api/acp/detect/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/install/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/registry/route.js +1 -1
- package/_standalone/.next/server/app/api/acp/registry/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/session/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/agent-activity/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/agents/copy-skill/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/agents/copy-skill/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/agents/custom/detect/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/agents/custom/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/ask/route.js +53 -47
- package/_standalone/.next/server/app/api/ask/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/ask/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/ask-sessions/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/auth/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/backlinks/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/backlinks/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/bootstrap/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/bootstrap/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/changes/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/changes/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/export/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/export/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/extract-pdf/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/file/import/route.js +1 -1
- package/_standalone/.next/server/app/api/file/import/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/file/import/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/file/raw/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/file/raw/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/file/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/file/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/files/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/git/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/graph/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/graph/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/inbox/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/init/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/agents/route.js +1 -1
- package/_standalone/.next/server/app/api/mcp/agents/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/mcp/agents/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/install/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/install-skill/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/restart/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/uninstall/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/monitoring/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/recent-files/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/search/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/list-models/route.js +1 -1
- package/_standalone/.next/server/app/api/settings/list-models/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/reset-token/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/route.js +1 -1
- package/_standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/test-key/route.js +1 -1
- package/_standalone/.next/server/app/api/settings/test-key/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/check-path/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/check-port/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/generate-token/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/ls/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/route.js +1 -1
- package/_standalone/.next/server/app/api/setup/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/skills/route.js +1 -1
- package/_standalone/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/sync/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/tree-version/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/workflows/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/changes/page.js +1 -1
- package/_standalone/.next/server/app/changes/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/changes/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/echo/[segment]/page.js +2 -2
- package/_standalone/.next/server/app/echo/[segment]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/echo/page.js +1 -1
- package/_standalone/.next/server/app/echo/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/echo/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/explore/page.js +1 -1
- package/_standalone/.next/server/app/explore/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/explore/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/help/page.js +1 -1
- package/_standalone/.next/server/app/help/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/inbox/history/page.js +1 -1
- package/_standalone/.next/server/app/inbox/history/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/inbox/history/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/login/page.js +1 -1
- package/_standalone/.next/server/app/login/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/page.js +1 -1
- package/_standalone/.next/server/app/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/setup/page.js +2 -2
- package/_standalone/.next/server/app/setup/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/trash/page.js +3 -3
- package/_standalone/.next/server/app/trash/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/trash/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/view/[...path]/page.js +2 -2
- package/_standalone/.next/server/app/view/[...path]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/view/[...path]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/wiki/page.js +1 -1
- package/_standalone/.next/server/app/wiki/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/wiki/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app-paths-manifest.json +23 -23
- package/_standalone/.next/server/chunks/122.js +222 -0
- package/_standalone/.next/server/chunks/1550.js +1 -1
- package/_standalone/.next/server/chunks/1750.js +1 -1
- package/_standalone/.next/server/chunks/3113.js +52 -0
- package/_standalone/.next/server/chunks/6539.js +1 -1
- package/_standalone/.next/server/chunks/8388.js +3 -3
- package/_standalone/.next/server/chunks/953.js +3 -3
- package/_standalone/.next/server/pages/500.html +2 -2
- package/_standalone/.next/server/server-reference-manifest.js +1 -1
- package/_standalone/.next/server/server-reference-manifest.json +1 -1
- package/_standalone/.next/static/chunks/1001-99da82ec8d8c136f.js +1 -0
- package/_standalone/.next/static/chunks/1088-77544af0a50cb7a4.js +1 -0
- package/_standalone/.next/static/chunks/1467-87dde7eed498806f.js +1 -0
- package/_standalone/.next/static/chunks/5149-4d828886dda479fa.js +1 -0
- package/_standalone/.next/static/chunks/5581-c671163a2fe1b312.js +29 -0
- package/_standalone/.next/static/chunks/{7266-bb7be1128eccd48e.js → 5718-3837c3210a0e175f.js} +2 -2
- package/_standalone/.next/static/chunks/6636-53238eff89503f03.js +6 -0
- package/_standalone/.next/static/chunks/6757-1c1a89720fdda8f0.js +1 -0
- package/_standalone/.next/static/chunks/7129-20e9d2463a9da646.js +1 -0
- package/_standalone/.next/static/chunks/7294-cac25d97869afadc.js +1 -0
- package/_standalone/.next/static/chunks/8225-21e5cebc3731ddf0.js +1 -0
- package/_standalone/.next/static/chunks/8520-b51810e66293ceb8.js +22 -0
- package/_standalone/.next/static/chunks/9207-dc9c31b351a2ed78.js +1 -0
- package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-2f5cf97e03dc1cc9.js +1 -0
- package/_standalone/.next/static/chunks/app/agents/page-50eac58d511dcc6e.js +1 -0
- package/_standalone/.next/static/chunks/app/echo/[segment]/page-2a00f4686adf3885.js +11 -0
- package/_standalone/.next/static/chunks/app/layout-2cb7a6602d2e5d5f.js +168 -0
- package/_standalone/.next/static/chunks/app/{page-6a1f8d21c12b829e.js → page-5ab911b2226f6ff7.js} +1 -1
- package/_standalone/.next/static/chunks/app/setup/page-907b7c57fad2292b.js +1 -0
- package/_standalone/.next/static/chunks/app/trash/page-11a511b065ea84c2.js +1 -0
- package/_standalone/.next/static/chunks/app/view/[...path]/page-26e47dd4c533a58c.js +12 -0
- package/_standalone/.next/static/chunks/app/wiki/page-dce495b9048022fb.js +1 -0
- package/_standalone/.next/static/css/67e7918f5ed7d147.css +1 -0
- package/_standalone/.next/trace +65 -65
- package/_standalone/__tests__/acp/registry.test.ts +30 -20
- package/_standalone/__tests__/api/ask-attachments.test.ts +194 -0
- package/_standalone/__tests__/api/mcp-install.test.ts +49 -2
- package/_standalone/__tests__/api/settings.test.ts +16 -12
- package/_standalone/__tests__/api/setup.test.ts +11 -9
- package/_standalone/__tests__/api/test-key.test.ts +0 -10
- package/_standalone/__tests__/components/UpdateToast.test.ts +344 -0
- package/_standalone/__tests__/core/context.test.ts +48 -426
- package/_standalone/__tests__/lib/pi-skills.test.ts +4 -4
- package/_standalone/__tests__/lib/settings-ai-client.test.ts +32 -12
- package/_standalone/__tests__/setup.ts +5 -5
- package/_standalone/app/globals.css +4 -4
- package/_standalone/components/ActivityBar.tsx +17 -6
- package/_standalone/components/Panel.tsx +24 -6
- package/_standalone/components/SidebarLayout.tsx +36 -8
- package/_standalone/components/agents/AgentsMcpSection.tsx +2 -2
- package/_standalone/components/agents/AgentsOverviewSection.tsx +5 -1
- package/_standalone/components/agents/AgentsPanelA2aTab.tsx +173 -113
- package/_standalone/components/agents/AgentsSkillsSection.tsx +2 -2
- package/_standalone/components/ask/AskContent.tsx +83 -44
- package/_standalone/components/ask/AskHeader.tsx +8 -1
- package/_standalone/components/ask/MessageList.tsx +37 -3
- package/_standalone/components/ask/ProviderModelCapsule.tsx +444 -174
- package/_standalone/components/home/InboxSection.tsx +25 -25
- package/_standalone/components/settings/AiTab.tsx +353 -298
- package/_standalone/components/settings/CustomProviderFields.tsx +121 -0
- package/_standalone/components/settings/CustomProvidersCard.tsx +154 -0
- package/_standalone/components/settings/KnowledgeTab.tsx +6 -20
- package/_standalone/components/settings/McpAgentInstall.tsx +7 -2
- package/_standalone/components/settings/Primitives.tsx +48 -104
- package/_standalone/components/settings/ProviderModal.tsx +87 -0
- package/_standalone/components/settings/SettingsContent.tsx +2 -5
- package/_standalone/components/settings/TestButton.tsx +64 -0
- package/_standalone/components/settings/types.ts +3 -9
- package/_standalone/components/settings/useCustomProviderForm.ts +132 -0
- package/_standalone/components/setup/StepAI.tsx +12 -5
- package/_standalone/components/shared/ModelInput.tsx +220 -0
- package/_standalone/components/shared/ProviderSelect.tsx +126 -36
- package/_standalone/hooks/useAskChat.ts +100 -13
- package/_standalone/hooks/useAskPanel.ts +17 -1
- package/_standalone/lib/settings-ai-client.ts +17 -8
- package/_standalone/tsconfig.tsbuildinfo +1 -1
- package/app/.antigravity/mcp_config.json +14 -0
- package/app/app/api/ask/route.ts +154 -45
- package/app/app/api/mcp/agents/route.ts +3 -3
- package/app/app/api/settings/list-models/route.ts +36 -9
- package/app/app/api/settings/route.ts +14 -42
- package/app/app/api/settings/test-key/route.ts +78 -2
- package/app/app/api/setup/route.ts +36 -18
- package/app/app/api/skills/route.ts +1 -1
- package/app/app/globals.css +4 -4
- package/app/app/layout.tsx +5 -3
- package/app/app/view/[...path]/page.tsx +5 -0
- package/app/components/ActivityBar.tsx +17 -6
- package/app/components/HomeContent.tsx +11 -0
- package/app/components/InboxView.tsx +656 -0
- package/app/components/Panel.tsx +24 -6
- package/app/components/SidebarLayout.tsx +36 -8
- package/app/components/UpdateToast.tsx +255 -0
- package/app/components/agents/AgentDetailContent.tsx +8 -8
- package/app/components/agents/AgentsMcpSection.tsx +2 -2
- package/app/components/agents/AgentsOverviewSection.tsx +5 -1
- package/app/components/agents/AgentsPanelA2aTab.tsx +173 -113
- package/app/components/agents/AgentsSkillsSection.tsx +2 -2
- package/app/components/ask/AskContent.tsx +83 -44
- package/app/components/ask/AskHeader.tsx +8 -1
- package/app/components/ask/MessageList.tsx +37 -3
- package/app/components/ask/ProviderModelCapsule.tsx +444 -174
- package/app/components/home/InboxSection.tsx +25 -25
- package/app/components/settings/AiTab.tsx +353 -298
- package/app/components/settings/CustomProviderFields.tsx +121 -0
- package/app/components/settings/CustomProvidersCard.tsx +154 -0
- package/app/components/settings/KnowledgeTab.tsx +6 -20
- package/app/components/settings/McpAgentInstall.tsx +7 -2
- package/app/components/settings/Primitives.tsx +48 -104
- package/app/components/settings/ProviderModal.tsx +87 -0
- package/app/components/settings/SettingsContent.tsx +2 -5
- package/app/components/settings/TestButton.tsx +64 -0
- package/app/components/settings/types.ts +3 -9
- package/app/components/settings/useCustomProviderForm.ts +132 -0
- package/app/components/setup/StepAI.tsx +12 -5
- package/app/components/shared/ModelInput.tsx +220 -0
- package/app/components/shared/ProviderSelect.tsx +126 -36
- package/app/hooks/useAskChat.ts +100 -13
- package/app/hooks/useAskPanel.ts +17 -1
- package/app/lib/acp/registry.ts +92 -10
- package/app/lib/agent/context.ts +65 -0
- package/app/lib/agent/providers.ts +25 -0
- package/app/lib/agent/tools.ts +1 -1
- package/app/lib/custom-endpoints.ts +160 -0
- package/app/lib/fs.ts +8 -1
- package/app/lib/i18n/modules/ai-chat.ts +6 -0
- package/app/lib/i18n/modules/knowledge.ts +16 -0
- package/app/lib/i18n/modules/onboarding.ts +4 -0
- package/app/lib/i18n/modules/settings.ts +88 -2
- package/app/lib/mcp-agents.ts +11 -0
- package/app/lib/pi-integration/skills.ts +16 -4
- package/app/lib/settings-ai-client.ts +17 -8
- package/app/lib/settings.ts +68 -72
- package/app/lib/types.ts +4 -0
- package/bin/lib/mcp-agents.js +11 -0
- package/bin/lib/mcp-install.js +71 -7
- package/package.json +1 -1
- package/_standalone/.next/server/chunks/530.js +0 -218
- package/_standalone/.next/server/chunks/8955.js +0 -52
- package/_standalone/.next/static/chunks/1369-7d0ac5d1564eed1e.js +0 -1
- package/_standalone/.next/static/chunks/3427-2e61a5df1f5e55fb.js +0 -1
- package/_standalone/.next/static/chunks/5581-0c700c20718bd916.js +0 -29
- package/_standalone/.next/static/chunks/6297-085daa21037d5f81.js +0 -1
- package/_standalone/.next/static/chunks/6636-9bbc90fb3b8731fe.js +0 -6
- package/_standalone/.next/static/chunks/7637-904b0a381dc3ec02.js +0 -1
- package/_standalone/.next/static/chunks/8520-76d1b05072178b43.js +0 -22
- package/_standalone/.next/static/chunks/8658-16ff58b75ae37fbb.js +0 -1
- package/_standalone/.next/static/chunks/9905-a19d379cb225246e.js +0 -1
- package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-0ea3571c8fbae823.js +0 -1
- package/_standalone/.next/static/chunks/app/agents/page-66858acbcd1d4bf8.js +0 -1
- package/_standalone/.next/static/chunks/app/echo/[segment]/page-bf5c290fa3ccff09.js +0 -11
- package/_standalone/.next/static/chunks/app/layout-a5d5925b47e87cc3.js +0 -164
- package/_standalone/.next/static/chunks/app/setup/page-821714e7477be46c.js +0 -1
- package/_standalone/.next/static/chunks/app/trash/page-40bc7316806acd62.js +0 -1
- package/_standalone/.next/static/chunks/app/view/[...path]/page-6fbb14b8f322d0f0.js +0 -12
- package/_standalone/.next/static/chunks/app/wiki/page-ba36eccf4fe62cfe.js +0 -1
- package/_standalone/.next/static/css/b57c4eb3cc88308b.css +0 -1
- package/_standalone/lib/agent/context.ts +0 -403
- /package/_standalone/.next/static/{5GmVArEG8OX03azKICsGq → eIlwbGas1iRGonlPyEwj7}/_buildManifest.js +0 -0
- /package/_standalone/.next/static/{5GmVArEG8OX03azKICsGq → eIlwbGas1iRGonlPyEwj7}/_ssgManifest.js +0 -0
package/app/lib/settings.ts
CHANGED
|
@@ -3,9 +3,13 @@ import path from 'path';
|
|
|
3
3
|
import os from 'os';
|
|
4
4
|
import { parseAcpAgentOverrides } from './acp/agent-descriptors';
|
|
5
5
|
import { type ProviderId, PROVIDER_PRESETS, isProviderId, getApiKeyFromEnv } from './agent/providers';
|
|
6
|
+
import { type Provider, parseProviders, findProvider, migrateProviders } from './custom-endpoints';
|
|
7
|
+
// Backward compat re-exports for files still importing from settings
|
|
8
|
+
export type { Provider };
|
|
6
9
|
|
|
7
10
|
const SETTINGS_PATH = path.join(os.homedir(), '.mindos', 'config.json');
|
|
8
11
|
|
|
12
|
+
/** @deprecated Use Provider from custom-endpoints.ts */
|
|
9
13
|
export interface ProviderConfig {
|
|
10
14
|
apiKey: string;
|
|
11
15
|
model: string;
|
|
@@ -13,8 +17,8 @@ export interface ProviderConfig {
|
|
|
13
17
|
}
|
|
14
18
|
|
|
15
19
|
export interface AiConfig {
|
|
16
|
-
|
|
17
|
-
providers:
|
|
20
|
+
activeProvider: string; // provider entry ID (p_*)
|
|
21
|
+
providers: Provider[]; // unified provider list
|
|
18
22
|
}
|
|
19
23
|
|
|
20
24
|
export interface AgentConfig {
|
|
@@ -60,15 +64,13 @@ export interface ServerSettings {
|
|
|
60
64
|
};
|
|
61
65
|
/** User-defined agents not built into MindOS. */
|
|
62
66
|
customAgents?: import('./custom-agents').CustomAgentDef[];
|
|
67
|
+
// customProviders is now merged into ai.providers — kept for migration only
|
|
63
68
|
}
|
|
64
69
|
|
|
65
70
|
const DEFAULTS: ServerSettings = {
|
|
66
71
|
ai: {
|
|
67
|
-
|
|
68
|
-
providers:
|
|
69
|
-
anthropic: { apiKey: '', model: 'claude-sonnet-4-6' },
|
|
70
|
-
openai: { apiKey: '', model: 'gpt-5.4', baseUrl: '' },
|
|
71
|
-
},
|
|
72
|
+
activeProvider: '',
|
|
73
|
+
providers: [],
|
|
72
74
|
},
|
|
73
75
|
mindRoot: '',
|
|
74
76
|
};
|
|
@@ -82,56 +84,27 @@ function str(obj: unknown, key: string, fallback: string): string {
|
|
|
82
84
|
return fallback;
|
|
83
85
|
}
|
|
84
86
|
|
|
85
|
-
/** Parse a provider config from unknown input, filling missing/invalid fields with defaults */
|
|
86
|
-
function parseProvider(raw: unknown, defaults: ProviderConfig): ProviderConfig {
|
|
87
|
-
return {
|
|
88
|
-
apiKey: str(raw, 'apiKey', defaults.apiKey),
|
|
89
|
-
model: str(raw, 'model', defaults.model),
|
|
90
|
-
...(defaults.baseUrl !== undefined
|
|
91
|
-
? { baseUrl: str(raw, 'baseUrl', defaults.baseUrl) }
|
|
92
|
-
: {}),
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
|
|
96
87
|
/** Migrate old flat ai structure to new providers dict, if needed */
|
|
97
88
|
function migrateAi(parsed: Record<string, unknown>): AiConfig {
|
|
98
89
|
const ai = parsed.ai as Record<string, unknown> | undefined;
|
|
99
90
|
if (!ai) return { ...DEFAULTS.ai };
|
|
100
91
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
const p = ai.providers as Record<string, unknown>;
|
|
107
|
-
const providers: Partial<Record<ProviderId, ProviderConfig>> = {};
|
|
108
|
-
for (const id of Object.keys(p)) {
|
|
109
|
-
if (!isProviderId(id)) continue;
|
|
110
|
-
const preset = PROVIDER_PRESETS[id];
|
|
111
|
-
const defaultCfg = DEFAULTS.ai.providers[id] ?? { apiKey: '', model: preset.defaultModel };
|
|
112
|
-
providers[id] = parseProvider(p[id], defaultCfg);
|
|
113
|
-
}
|
|
114
|
-
// Ensure at least anthropic and openai exist (backward compat)
|
|
115
|
-
if (!providers.anthropic) providers.anthropic = DEFAULTS.ai.providers.anthropic;
|
|
116
|
-
if (!providers.openai) providers.openai = DEFAULTS.ai.providers.openai;
|
|
117
|
-
return { provider, providers };
|
|
92
|
+
// ── New format: ai.providers is an array ──
|
|
93
|
+
if (Array.isArray(ai.providers)) {
|
|
94
|
+
const providers = parseProviders(ai.providers);
|
|
95
|
+
const activeProvider = typeof ai.activeProvider === 'string' ? ai.activeProvider : '';
|
|
96
|
+
return { activeProvider, providers };
|
|
118
97
|
}
|
|
119
98
|
|
|
120
|
-
// Old
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
providers:
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
apiKey: str(ai, 'openaiApiKey', ''),
|
|
130
|
-
model: str(ai, 'openaiModel', 'gpt-5.4'),
|
|
131
|
-
baseUrl: str(ai, 'openaiBaseUrl', ''),
|
|
132
|
-
},
|
|
133
|
-
},
|
|
134
|
-
};
|
|
99
|
+
// ── Old format: ai.providers is a dict (or missing) → auto-migrate ──
|
|
100
|
+
const migrated = migrateProviders(parsed);
|
|
101
|
+
if (migrated) {
|
|
102
|
+
return { activeProvider: migrated.activeProvider, providers: migrated.providers };
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// Very old flat format (anthropicApiKey etc.) — also handled by migrateProviders
|
|
106
|
+
// but if it returns null, fall through to defaults
|
|
107
|
+
return { ...DEFAULTS.ai };
|
|
135
108
|
}
|
|
136
109
|
|
|
137
110
|
/** Parse agent config from unknown input */
|
|
@@ -195,7 +168,12 @@ export function readSettings(): ServerSettings {
|
|
|
195
168
|
try {
|
|
196
169
|
const raw = fs.readFileSync(SETTINGS_PATH, 'utf-8');
|
|
197
170
|
const parsed = JSON.parse(raw) as Record<string, unknown>;
|
|
198
|
-
|
|
171
|
+
|
|
172
|
+
// Detect old format and check if migration is needed
|
|
173
|
+
const ai = parsed.ai as Record<string, unknown> | undefined;
|
|
174
|
+
const needsMigration = ai && !Array.isArray(ai.providers);
|
|
175
|
+
|
|
176
|
+
const settings: ServerSettings = {
|
|
199
177
|
ai: migrateAi(parsed),
|
|
200
178
|
agent: parseAgent(parsed.agent),
|
|
201
179
|
acpAgents: parseAcpAgentsField(parsed.acpAgents),
|
|
@@ -220,11 +198,18 @@ export function readSettings(): ServerSettings {
|
|
|
220
198
|
connectionMode: inferConnectionMode(parsed),
|
|
221
199
|
customAgents: Array.isArray(parsed.customAgents) ? parsed.customAgents as import('./custom-agents').CustomAgentDef[] : undefined,
|
|
222
200
|
};
|
|
201
|
+
|
|
202
|
+
// Auto-persist migrated config so migration only runs once
|
|
203
|
+
if (needsMigration) {
|
|
204
|
+
try { writeSettings(settings); } catch { /* best-effort */ }
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
return settings;
|
|
223
208
|
} catch {
|
|
224
209
|
// Config file missing or corrupt → force setup wizard
|
|
225
210
|
return {
|
|
226
211
|
...DEFAULTS,
|
|
227
|
-
ai: { ...DEFAULTS.ai, providers:
|
|
212
|
+
ai: { ...DEFAULTS.ai, providers: [] },
|
|
228
213
|
setupPending: true,
|
|
229
214
|
connectionMode: { cli: true, mcp: false },
|
|
230
215
|
};
|
|
@@ -250,6 +235,8 @@ export function writeSettings(settings: ServerSettings): void {
|
|
|
250
235
|
if (settings.baseUrlCompat !== undefined) merged.baseUrlCompat = settings.baseUrlCompat;
|
|
251
236
|
if (settings.connectionMode !== undefined) merged.connectionMode = settings.connectionMode;
|
|
252
237
|
if (settings.customAgents !== undefined) merged.customAgents = settings.customAgents;
|
|
238
|
+
// Remove legacy customProviders (now merged into ai.providers array)
|
|
239
|
+
delete merged.customProviders;
|
|
253
240
|
// setupPending: false/undefined → remove the field (cleanup); true → set it
|
|
254
241
|
if ('setupPending' in settings) {
|
|
255
242
|
if (settings.setupPending) merged.setupPending = true;
|
|
@@ -297,33 +284,42 @@ export function recordSkillInstall(agentKey: string, skillName: string, installP
|
|
|
297
284
|
|
|
298
285
|
/** Effective AI config — unified interface for all providers.
|
|
299
286
|
* Resolves: saved config → env var → preset default, in that priority order.
|
|
300
|
-
* When `providerOverride` is given, resolves that provider's config
|
|
301
|
-
export function effectiveAiConfig(providerOverride?:
|
|
287
|
+
* When `providerOverride` is given (a provider entry ID), resolves that provider's config. */
|
|
288
|
+
export function effectiveAiConfig(providerOverride?: string): {
|
|
302
289
|
provider: ProviderId;
|
|
303
290
|
apiKey: string;
|
|
304
291
|
model: string;
|
|
305
292
|
baseUrl: string;
|
|
306
293
|
} {
|
|
307
294
|
const s = readSettings();
|
|
295
|
+
|
|
296
|
+
// Find the provider entry
|
|
297
|
+
const targetId = providerOverride || s.ai.activeProvider;
|
|
298
|
+
const entry = targetId ? findProvider(s.ai.providers, targetId) : undefined;
|
|
299
|
+
|
|
300
|
+
if (entry) {
|
|
301
|
+
// Resolve from the unified provider entry
|
|
302
|
+
const preset = PROVIDER_PRESETS[entry.protocol];
|
|
303
|
+
const apiKey = entry.apiKey
|
|
304
|
+
|| getApiKeyFromEnv(entry.protocol)
|
|
305
|
+
|| preset?.apiKeyFallback
|
|
306
|
+
|| '';
|
|
307
|
+
const model = entry.model || preset?.defaultModel || '';
|
|
308
|
+
const baseUrl = entry.baseUrl || preset?.fixedBaseUrl || '';
|
|
309
|
+
return { provider: entry.protocol, apiKey, model, baseUrl };
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
// Fallback: no matching entry — try env var or default
|
|
308
313
|
const envProvider = process.env.AI_PROVIDER;
|
|
309
|
-
const
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|| preset.apiKeyFallback
|
|
319
|
-
|| '';
|
|
320
|
-
const model = provCfg.model
|
|
321
|
-
|| preset.defaultModel;
|
|
322
|
-
const baseUrl = provCfg.baseUrl
|
|
323
|
-
|| preset.fixedBaseUrl
|
|
324
|
-
|| '';
|
|
325
|
-
|
|
326
|
-
return { provider, apiKey, model, baseUrl };
|
|
314
|
+
const protocol: ProviderId = (envProvider && isProviderId(envProvider)) ? envProvider : 'anthropic';
|
|
315
|
+
const preset = PROVIDER_PRESETS[protocol] ?? PROVIDER_PRESETS.anthropic;
|
|
316
|
+
|
|
317
|
+
return {
|
|
318
|
+
provider: protocol,
|
|
319
|
+
apiKey: getApiKeyFromEnv(protocol) || preset.apiKeyFallback || '',
|
|
320
|
+
model: preset.defaultModel,
|
|
321
|
+
baseUrl: preset.fixedBaseUrl || '',
|
|
322
|
+
};
|
|
327
323
|
}
|
|
328
324
|
|
|
329
325
|
/** Effective MIND_ROOT — settings file can override, env var is fallback */
|
package/app/lib/types.ts
CHANGED
|
@@ -69,6 +69,10 @@ export interface Message {
|
|
|
69
69
|
images?: ImagePart[];
|
|
70
70
|
/** Skill name used for this user message (rendered as a capsule in the UI) */
|
|
71
71
|
skillName?: string;
|
|
72
|
+
/** KB file paths (@mentions) sent with this message */
|
|
73
|
+
attachedFiles?: string[];
|
|
74
|
+
/** Names of uploaded files (PDFs etc.) sent with this message */
|
|
75
|
+
uploadedFileNames?: string[];
|
|
72
76
|
}
|
|
73
77
|
|
|
74
78
|
export interface LocalAttachment {
|
package/bin/lib/mcp-agents.js
CHANGED
|
@@ -256,6 +256,16 @@ export const MCP_AGENTS = {
|
|
|
256
256
|
preferredTransport: 'stdio',
|
|
257
257
|
presenceDirs: ['~/.lingma/'],
|
|
258
258
|
},
|
|
259
|
+
'copaw': {
|
|
260
|
+
name: 'CoPaw',
|
|
261
|
+
project: null,
|
|
262
|
+
global: '~/.copaw/config.json',
|
|
263
|
+
key: 'mcp',
|
|
264
|
+
globalNestedKey: 'mcp.clients',
|
|
265
|
+
preferredTransport: 'stdio',
|
|
266
|
+
presenceCli: 'copaw',
|
|
267
|
+
presenceDirs: ['~/.copaw/'],
|
|
268
|
+
},
|
|
259
269
|
};
|
|
260
270
|
|
|
261
271
|
/**
|
|
@@ -286,6 +296,7 @@ export const SKILL_AGENT_REGISTRY = {
|
|
|
286
296
|
'qclaw': { mode: 'unsupported' },
|
|
287
297
|
'workbuddy': { mode: 'unsupported' },
|
|
288
298
|
'lingma': { mode: 'unsupported' },
|
|
299
|
+
'copaw': { mode: 'unsupported' },
|
|
289
300
|
};
|
|
290
301
|
|
|
291
302
|
export function detectAgentPresence(agentKey) {
|
package/bin/lib/mcp-install.js
CHANGED
|
@@ -7,6 +7,37 @@ import { parseJsonc } from './jsonc.js';
|
|
|
7
7
|
import { MCP_AGENTS, SKILL_AGENT_REGISTRY, detectAgentPresence } from './mcp-agents.js';
|
|
8
8
|
import { mergeTomlEntry } from './toml.js';
|
|
9
9
|
|
|
10
|
+
/**
|
|
11
|
+
* Walk a dot-separated path inside an object, creating intermediate {} as needed.
|
|
12
|
+
* Returns the leaf object so the caller can set keys on it.
|
|
13
|
+
* e.g. ensureNestedPath({}, 'mcp.clients') → creates obj.mcp.clients = {} and returns it.
|
|
14
|
+
*/
|
|
15
|
+
function ensureNestedPath(obj, dotPath) {
|
|
16
|
+
const parts = dotPath.split('.').filter(Boolean);
|
|
17
|
+
let current = obj;
|
|
18
|
+
for (const part of parts) {
|
|
19
|
+
if (!current[part] || typeof current[part] !== 'object') {
|
|
20
|
+
current[part] = {};
|
|
21
|
+
}
|
|
22
|
+
current = current[part];
|
|
23
|
+
}
|
|
24
|
+
return current;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Read-only walk of a dot-separated path. Returns null if any segment is missing.
|
|
29
|
+
*/
|
|
30
|
+
function readNestedPath(obj, dotPath) {
|
|
31
|
+
const parts = dotPath.split('.').filter(Boolean);
|
|
32
|
+
let current = obj;
|
|
33
|
+
for (const part of parts) {
|
|
34
|
+
if (!current || typeof current !== 'object') return null;
|
|
35
|
+
current = current[part];
|
|
36
|
+
}
|
|
37
|
+
if (!current || typeof current !== 'object') return null;
|
|
38
|
+
return current;
|
|
39
|
+
}
|
|
40
|
+
|
|
10
41
|
/**
|
|
11
42
|
* Recursively copy a directory using pure Node.js (cross-platform).
|
|
12
43
|
* Uses cpSync on Node >=16.7, falls back to manual walk otherwise.
|
|
@@ -24,9 +55,28 @@ function copyDirSync(src, dst) {
|
|
|
24
55
|
}
|
|
25
56
|
}
|
|
26
57
|
|
|
58
|
+
/**
|
|
59
|
+
* Determine active skill variant based on user's locale setting.
|
|
60
|
+
* Respects disabledSkills to detect if user prefers Chinese (mindos-zh).
|
|
61
|
+
*/
|
|
62
|
+
function getActiveSkillName() {
|
|
63
|
+
try {
|
|
64
|
+
const content = readFileSync(CONFIG_PATH, 'utf-8');
|
|
65
|
+
const config = parseJsonc(content);
|
|
66
|
+
// If 'mindos' is disabled, user prefers Chinese (mindos-zh)
|
|
67
|
+
if (config.disabledSkills?.includes('mindos')) {
|
|
68
|
+
return 'mindos-zh';
|
|
69
|
+
}
|
|
70
|
+
} catch {
|
|
71
|
+
// Fall back to English if settings can't be read
|
|
72
|
+
}
|
|
73
|
+
return 'mindos';
|
|
74
|
+
}
|
|
75
|
+
|
|
27
76
|
/**
|
|
28
77
|
* Auto-copy skill folder for agents with mode 'unsupported'.
|
|
29
78
|
* Called after MCP config is written. Best-effort, never throws.
|
|
79
|
+
* Respects user's locale setting (English mindos / Chinese mindos-zh).
|
|
30
80
|
*/
|
|
31
81
|
function autoInstallSkillForAgent(agentKey, skillName) {
|
|
32
82
|
const reg = SKILL_AGENT_REGISTRY[agentKey];
|
|
@@ -253,7 +303,14 @@ export async function mcpInstall() {
|
|
|
253
303
|
installed = content.includes(`[${agent.key}.mindos]`);
|
|
254
304
|
} else {
|
|
255
305
|
const config = parseJsonc(content);
|
|
256
|
-
|
|
306
|
+
// For agents with globalNestedKey (e.g. CoPaw: mcp.clients),
|
|
307
|
+
// check the nested path for mindos entry
|
|
308
|
+
if (agent.globalNestedKey) {
|
|
309
|
+
const nested = readNestedPath(config, agent.globalNestedKey);
|
|
310
|
+
if (nested?.mindos) installed = true;
|
|
311
|
+
} else {
|
|
312
|
+
if (config[agent.key]?.mindos) installed = true;
|
|
313
|
+
}
|
|
257
314
|
}
|
|
258
315
|
if (installed) break;
|
|
259
316
|
} catch {}
|
|
@@ -391,18 +448,25 @@ export async function mcpInstall() {
|
|
|
391
448
|
continue;
|
|
392
449
|
}
|
|
393
450
|
}
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
451
|
+
|
|
452
|
+
// For global scope with nested key (e.g. CoPaw: mcp.clients),
|
|
453
|
+
// write to the nested path instead of the flat key
|
|
454
|
+
const useNestedKey = isGlobal && agent.globalNestedKey;
|
|
455
|
+
const container = useNestedKey
|
|
456
|
+
? ensureNestedPath(config, agent.globalNestedKey)
|
|
457
|
+
: (() => { if (!config[agent.key]) config[agent.key] = {}; return config[agent.key]; })();
|
|
458
|
+
existed = !!container.mindos;
|
|
459
|
+
container.mindos = entry;
|
|
397
460
|
writeFileSync(absPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
|
|
398
461
|
}
|
|
399
462
|
|
|
400
463
|
console.log(`${green('✔')} ${existed ? 'Updated' : 'Installed'} MindOS MCP for ${bold(agent.name)} ${dim(`→ ${absPath}`)}`);
|
|
401
464
|
|
|
402
|
-
// Auto-copy skill for unsupported agents
|
|
403
|
-
const
|
|
465
|
+
// Auto-copy skill for unsupported agents, respecting user's locale setting
|
|
466
|
+
const activeSkill = getActiveSkillName();
|
|
467
|
+
const skillResult = autoInstallSkillForAgent(agentKey, activeSkill);
|
|
404
468
|
if (skillResult === 'copied') {
|
|
405
|
-
console.log(`${green('✔')} Copied MindOS Skill for ${bold(agent.name)}`);
|
|
469
|
+
console.log(`${green('✔')} Copied MindOS Skill (${activeSkill}) for ${bold(agent.name)}`);
|
|
406
470
|
}
|
|
407
471
|
}
|
|
408
472
|
|
package/package.json
CHANGED