@geminilight/mindos 0.6.40 → 0.6.41
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/.mindos-build-version +1 -1
- package/_standalone/.next/BUILD_ID +1 -1
- package/_standalone/.next/app-path-routes-manifest.json +18 -18
- package/_standalone/.next/build-manifest.json +3 -3
- 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/react-loadable-manifest.json +5 -1
- 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 +2 -2
- 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_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_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/ask/route.js +1 -1
- 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.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/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.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.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.js.nft.json +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.js +1 -1
- package/_standalone/.next/server/app/api/mcp/status/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_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.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_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_client-reference-manifest.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 +1 -1
- 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 +2 -2
- 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/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 +2 -2
- 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 +3 -3
- 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-paths-manifest.json +18 -18
- package/_standalone/.next/server/chunks/1550.js +1 -1
- package/_standalone/.next/server/chunks/2190.js +11 -0
- package/_standalone/.next/server/chunks/{6365.js → 2536.js} +2 -2
- package/_standalone/.next/server/chunks/5648.js +2 -0
- package/_standalone/.next/server/chunks/8388.js +1 -1
- package/_standalone/.next/server/chunks/953.js +1 -1
- package/_standalone/.next/server/chunks/9539.js +219 -0
- package/_standalone/.next/server/middleware-build-manifest.js +1 -1
- package/_standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/_standalone/.next/server/next-font-manifest.js +1 -1
- package/_standalone/.next/server/next-font-manifest.json +1 -1
- 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/1053-b70535785cc5aaee.js +29 -0
- package/_standalone/.next/static/chunks/{8663-de911d2d395622be.js → 1880-c2a9e76201841c86.js} +1 -1
- package/_standalone/.next/static/chunks/3637.0541ac2d0ea7de1f.js +1 -0
- package/_standalone/.next/static/chunks/4563-b2a2ce80aff845af.js +6 -0
- package/_standalone/.next/static/chunks/6981-3d7dcac2d12a5670.js +1 -0
- package/_standalone/.next/static/chunks/7144-5febf62f1a79fe64.js +1 -0
- package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-773071a99c4daac2.js +1 -0
- package/_standalone/.next/static/chunks/app/agents/page-6102a884b2cb3cfe.js +5 -0
- package/_standalone/.next/static/chunks/app/help/page-2325d25b6846ca07.js +1 -0
- package/_standalone/.next/static/chunks/app/{layout-9378c1c8d3e5761b.js → layout-42cdbce19f404567.js} +34 -34
- package/_standalone/.next/static/chunks/app/{page-9bae420fbbdc5fff.js → page-8c9643b649e01735.js} +1 -1
- package/_standalone/.next/static/chunks/app/setup/page-d158b8cb533feb1e.js +1 -0
- package/_standalone/.next/static/chunks/app/trash/{page-b61ef2d5cd4f8d73.js → page-e9ab74ffeb96af41.js} +1 -1
- package/_standalone/.next/static/chunks/app/view/[...path]/page-764a69a1c8bd4eef.js +12 -0
- package/_standalone/.next/static/chunks/{webpack-c28c55d0a6021a6b.js → webpack-7b276daaa930d480.js} +1 -1
- package/_standalone/.next/static/css/bc9179074eaf65ae.css +1 -0
- package/_standalone/.next/trace +63 -63
- package/_standalone/__tests__/api/mcp-install.test.ts +23 -0
- package/_standalone/__tests__/cli/agent-routing.test.ts +232 -0
- package/_standalone/__tests__/cli/file-subcommands.test.ts +379 -0
- package/_standalone/__tests__/core/tools.test.ts +3 -6
- package/_standalone/components/FileTree.tsx +3 -2
- package/_standalone/components/MarkdownView.tsx +30 -15
- package/_standalone/components/RightAskPanel.tsx +36 -6
- package/_standalone/components/Sidebar.tsx +3 -3
- package/_standalone/components/agents/AgentsMcpSection.tsx +3 -0
- package/_standalone/components/settings/McpAgentInstall.tsx +94 -27
- package/_standalone/components/settings/McpSkillsSection.tsx +1 -1
- package/_standalone/components/settings/McpTab.tsx +484 -340
- package/_standalone/components/settings/SettingsContent.tsx +12 -6
- package/_standalone/components/settings/types.ts +3 -0
- package/_standalone/components/setup/StepAgents.tsx +113 -47
- package/_standalone/components/setup/StepReview.tsx +14 -27
- package/_standalone/components/setup/types.ts +6 -0
- package/_standalone/data/skills/mindos/SKILL.md +92 -92
- package/_standalone/data/skills/mindos/references/write-supplement.md +119 -0
- package/_standalone/data/skills/mindos-zh/SKILL.md +100 -104
- package/_standalone/data/skills/mindos-zh/references/write-supplement.md +119 -0
- package/_standalone/lib/i18n/modules/features.ts +4 -4
- package/_standalone/lib/i18n/modules/knowledge.ts +4 -0
- package/_standalone/lib/i18n/modules/onboarding.ts +40 -30
- package/_standalone/lib/i18n/modules/settings.ts +78 -6
- package/_standalone/lib/mcp-snippets.ts +5 -1
- package/_standalone/tsconfig.tsbuildinfo +1 -1
- package/app/app/api/ask/route.ts +3 -2
- package/app/app/api/mcp/install/route.ts +2 -1
- package/app/app/api/mcp/status/route.ts +14 -6
- package/app/app/view/[...path]/ViewPageClient.tsx +12 -27
- package/app/components/FileTree.tsx +3 -2
- package/app/components/MarkdownView.tsx +30 -15
- package/app/components/RightAskPanel.tsx +36 -6
- package/app/components/Sidebar.tsx +3 -3
- package/app/components/agents/AgentsMcpSection.tsx +3 -0
- package/app/components/help/HelpContent.tsx +1 -0
- package/app/components/settings/McpAgentInstall.tsx +94 -27
- package/app/components/settings/McpSkillsSection.tsx +1 -1
- package/app/components/settings/McpTab.tsx +484 -340
- package/app/components/settings/SettingsContent.tsx +12 -6
- package/app/components/settings/types.ts +3 -0
- package/app/components/setup/StepAgents.tsx +113 -47
- package/app/components/setup/StepReview.tsx +14 -27
- package/app/components/setup/index.tsx +12 -11
- package/app/components/setup/types.ts +6 -0
- package/app/data/skills/mindos/SKILL.md +92 -92
- package/app/data/skills/mindos/references/write-supplement.md +119 -0
- package/app/data/skills/mindos-zh/SKILL.md +100 -104
- package/app/data/skills/mindos-zh/references/write-supplement.md +119 -0
- package/app/lib/fs.ts +0 -6
- package/app/lib/i18n/modules/features.ts +4 -4
- package/app/lib/i18n/modules/knowledge.ts +4 -0
- package/app/lib/i18n/modules/onboarding.ts +40 -30
- package/app/lib/i18n/modules/settings.ts +78 -6
- package/app/lib/mcp-agents.ts +1 -2
- package/app/lib/mcp-snippets.ts +5 -1
- package/app/lib/renderers/index.ts +2 -1
- package/bin/cli.js +168 -1404
- package/bin/commands/agent.js +156 -20
- package/bin/commands/api.js +14 -11
- package/bin/commands/ask.js +79 -68
- package/bin/commands/build.js +26 -0
- package/bin/commands/config.js +170 -0
- package/bin/commands/dev.js +58 -0
- package/bin/commands/doctor.js +205 -0
- package/bin/commands/file.js +551 -36
- package/bin/commands/gateway.js +42 -0
- package/bin/commands/init-skills.js +56 -0
- package/bin/commands/logs.js +32 -0
- package/bin/commands/mcp-cmd.js +57 -0
- package/bin/commands/onboard.js +25 -0
- package/bin/commands/open.js +41 -0
- package/bin/commands/restart.js +48 -0
- package/bin/commands/search.js +16 -14
- package/bin/commands/space.js +96 -25
- package/bin/commands/start.js +262 -0
- package/bin/commands/status.js +2 -2
- package/bin/commands/stop.js +14 -0
- package/bin/commands/sync-cmd.js +134 -0
- package/bin/commands/token.js +98 -0
- package/bin/commands/uninstall.js +154 -0
- package/bin/commands/update.js +286 -0
- package/bin/lib/build.js +1 -1
- package/bin/lib/colors.js +8 -7
- package/bin/lib/command.js +37 -96
- package/bin/lib/config.js +5 -0
- package/bin/lib/csv.js +19 -0
- package/bin/lib/jsonc.js +12 -0
- package/bin/lib/markdown.js +69 -0
- package/bin/lib/mcp-agents.js +1 -6
- package/bin/lib/mcp-build.js +1 -1
- package/bin/lib/mcp-install.js +2 -1
- package/bin/lib/one-shot.js +88 -0
- package/bin/lib/path-expand.js +9 -0
- package/bin/lib/remote.js +65 -0
- package/bin/lib/repl.js +167 -0
- package/bin/lib/{utils.js → shell.js} +10 -26
- package/bin/lib/skill-check.js +1 -1
- package/bin/lib/sse-stream.js +167 -0
- package/package.json +2 -2
- package/scripts/setup.js +182 -120
- package/skills/mindos/SKILL.md +92 -92
- package/skills/mindos-zh/SKILL.md +100 -104
- package/_standalone/.next/server/chunks/1955.js +0 -11
- package/_standalone/.next/server/chunks/3680.js +0 -1
- package/_standalone/.next/server/chunks/4497.js +0 -219
- package/_standalone/.next/server/chunks/5560.js +0 -2
- package/_standalone/.next/static/chunks/1053-0adaccc98a752a58.js +0 -29
- package/_standalone/.next/static/chunks/3637.f9a42cca59fd5bb5.js +0 -1
- package/_standalone/.next/static/chunks/4563-c2afaeacb241d1d0.js +0 -6
- package/_standalone/.next/static/chunks/6090-c98268ca726a68d3.js +0 -1
- package/_standalone/.next/static/chunks/9371-575600301da5d6bb.js +0 -1
- package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-3e08abb495ecd5fd.js +0 -1
- package/_standalone/.next/static/chunks/app/agents/page-e7e0f87ad3d765ac.js +0 -5
- package/_standalone/.next/static/chunks/app/help/page-3d0e1ceaa4abc243.js +0 -1
- package/_standalone/.next/static/chunks/app/setup/page-99ed3d1bb6b8f4ef.js +0 -1
- package/_standalone/.next/static/chunks/app/view/[...path]/page-44fa78cbea613a78.js +0 -12
- package/_standalone/.next/static/css/d300701f384db50d.css +0 -1
- package/_standalone/components/renderers/agent-inspector/manifest.ts +0 -16
- /package/_standalone/.next/static/{rZLs1krFuduixvcVNe6q3 → Ij3PFh-a0zi5K_ANoSAW0}/_buildManifest.js +0 -0
- /package/_standalone/.next/static/{rZLs1krFuduixvcVNe6q3 → Ij3PFh-a0zi5K_ANoSAW0}/_ssgManifest.js +0 -0
package/scripts/setup.js
CHANGED
|
@@ -55,8 +55,8 @@ const T = {
|
|
|
55
55
|
// step labels
|
|
56
56
|
step: { en: (n, total) => `Step ${n}/${total}`, zh: (n, total) => `步骤 ${n}/${total}` },
|
|
57
57
|
stepTitles: {
|
|
58
|
-
en: ['Knowledge Base', 'AI Provider', 'Ports', 'Auth Token', 'Web Password', 'Start Mode', 'Agent
|
|
59
|
-
zh: ['知识库', 'AI 服务商', '端口', 'Auth Token', 'Web 密码', '启动方式', 'Agent
|
|
58
|
+
en: ['Knowledge Base', 'AI Provider', 'Ports', 'Auth Token', 'Web Password', 'Start Mode', 'Connection Mode', 'Agent Connection'],
|
|
59
|
+
zh: ['知识库', 'AI 服务商', '端口', 'Auth Token', 'Web 密码', '启动方式', '连接模式', 'Agent 连接'],
|
|
60
60
|
},
|
|
61
61
|
|
|
62
62
|
// path
|
|
@@ -125,20 +125,16 @@ const T = {
|
|
|
125
125
|
syncSetup: { en: 'Set up cross-device sync via Git?', zh: '是否配置 Git 跨设备同步?' },
|
|
126
126
|
syncLater: { en: ' → Run `mindos sync init` anytime to set up sync later.', zh: ' → 随时运行 `mindos sync init` 配置同步。' },
|
|
127
127
|
|
|
128
|
-
//
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
skillInstalling: { en: (name) => `⏳ Installing Skill "${name}"...`, zh: (name) => `⏳ 正在安装 Skill "${name}"...` },
|
|
139
|
-
skillInstallOk: { en: (name) => ` ${c.green('✔')} Skill "${name}" installed`, zh: (name) => ` ${c.green('✔')} Skill "${name}" 已安装` },
|
|
140
|
-
skillInstallFail: { en: (name, msg) => ` ${c.red('✘')} Skill "${name}" failed: ${msg}`, zh: (name, msg) => ` ${c.red('✘')} Skill "${name}" 安装失败:${msg}` },
|
|
141
|
-
skillSkipped: { en: ' → No agents selected, skill install skipped.', zh: ' → 未选择 Agent,跳过 Skill 安装。' },
|
|
128
|
+
// mode selection step (Step 7)
|
|
129
|
+
modeSelectHint: { en: 'Connection mode (Space to toggle, Enter to confirm):', zh: '连接模式(空格切换,Enter 确认):' },
|
|
130
|
+
modeCli: { en: 'CLI Operate KB via command line', zh: 'CLI 通过命令行操作知识库' },
|
|
131
|
+
modeCliHint: { en: 'recommended, more token-efficient', zh: '推荐,更省 token' },
|
|
132
|
+
modeMcp: { en: 'MCP Connect via MCP protocol', zh: 'MCP 通过 MCP 协议连接' },
|
|
133
|
+
modeMcpHint: { en: 'optional, may consume more tokens', zh: '可选,可能消耗更多 token' },
|
|
134
|
+
modeNoneError: { en: 'Please select at least one mode.', zh: '请至少选择一种模式。' },
|
|
135
|
+
|
|
136
|
+
// agent config install (internal, Skill concept hidden from user)
|
|
137
|
+
skillInstallFail: { en: (name, msg) => ` ${c.red('✘')} Configuration failed: ${msg}`, zh: (name, msg) => ` ${c.red('✘')} 配置失败:${msg}` },
|
|
142
138
|
|
|
143
139
|
// restart prompts (re-onboard with config changes)
|
|
144
140
|
restartRequired: { en: 'Config changed. Service restart required.', zh: '配置已变更,需要重启服务。' },
|
|
@@ -151,14 +147,14 @@ const T = {
|
|
|
151
147
|
'─────────────────────────────────────────────',
|
|
152
148
|
'🚀 Setup complete! Start MindOS:\n',
|
|
153
149
|
` ${c.cyan(cmd)}`,
|
|
154
|
-
` ${c.dim('
|
|
150
|
+
` ${c.dim('Connection details and auth token will be shown on startup.')}\n`,
|
|
155
151
|
'─────────────────────────────────────────────',
|
|
156
152
|
],
|
|
157
153
|
zh: (cmd) => [
|
|
158
154
|
'─────────────────────────────────────────────',
|
|
159
155
|
'🚀 初始化完成!启动 MindOS:\n',
|
|
160
156
|
` ${c.cyan(cmd)}`,
|
|
161
|
-
` ${c.dim('
|
|
157
|
+
` ${c.dim('连接信息和 Auth token 将在启动后显示。')}\n`,
|
|
162
158
|
'─────────────────────────────────────────────',
|
|
163
159
|
],
|
|
164
160
|
},
|
|
@@ -217,7 +213,7 @@ const tf = (key, ...args) => {
|
|
|
217
213
|
|
|
218
214
|
// ── Step header ───────────────────────────────────────────────────────────────
|
|
219
215
|
|
|
220
|
-
const TOTAL_STEPS =
|
|
216
|
+
const TOTAL_STEPS = 8;
|
|
221
217
|
function stepHeader(n) {
|
|
222
218
|
const title = T.stepTitles[uiLang][n - 1] ?? T.stepTitles.en[n - 1];
|
|
223
219
|
const stepLabel = tf('step', n, TOTAL_STEPS);
|
|
@@ -598,10 +594,11 @@ function expandHomePath(p) {
|
|
|
598
594
|
return p.startsWith('~/') ? resolve(homedir(), p.slice(2)) : p;
|
|
599
595
|
}
|
|
600
596
|
|
|
601
|
-
/** Parse JSONC: JSON plus
|
|
597
|
+
/** Parse JSONC: JSON plus comments (e.g. VS Code configs). Returns {} for empty input. */
|
|
602
598
|
function parseJsonc(text) {
|
|
603
599
|
let stripped = text.replace(/\\"|"(?:\\"|[^"])*"|(\/\/.*$)/gm, (m, g) => g ? '' : m);
|
|
604
600
|
stripped = stripped.replace(/\/\*[\s\S]*?\*\//g, '');
|
|
601
|
+
if (!stripped.trim()) return {};
|
|
605
602
|
return JSON.parse(stripped);
|
|
606
603
|
}
|
|
607
604
|
|
|
@@ -622,14 +619,79 @@ function isAgentInstalled(agentKey) {
|
|
|
622
619
|
}
|
|
623
620
|
|
|
624
621
|
/**
|
|
625
|
-
* Step
|
|
626
|
-
*
|
|
627
|
-
|
|
622
|
+
* Step 7: mode selection — CLI (default-on) vs MCP (default-off).
|
|
623
|
+
* Returns { cli: boolean, mcp: boolean }.
|
|
624
|
+
*/
|
|
625
|
+
async function runModeSelect() {
|
|
626
|
+
const modes = [
|
|
627
|
+
{ key: 'cli', label: t('modeCli'), hint: t('modeCliHint'), preselect: true },
|
|
628
|
+
{ key: 'mcp', label: t('modeMcp'), hint: t('modeMcpHint'), preselect: false },
|
|
629
|
+
];
|
|
630
|
+
|
|
631
|
+
return new Promise((resolve) => {
|
|
632
|
+
let cursor = 0;
|
|
633
|
+
const chosen = new Set(modes.map((m, i) => m.preselect ? i : -1).filter(i => i >= 0));
|
|
634
|
+
|
|
635
|
+
const render = (first = false, errMsg = '') => {
|
|
636
|
+
if (!first) write(`\x1b[${modes.length + (errMsg ? 3 : 2)}A\x1b[J`);
|
|
637
|
+
write(`${c.bold(t('modeSelectHint'))}\n`);
|
|
638
|
+
for (let i = 0; i < modes.length; i++) {
|
|
639
|
+
const m = modes[i];
|
|
640
|
+
const check = chosen.has(i) ? c.green('✔') : c.dim('○');
|
|
641
|
+
const pointer = i === cursor ? c.cyan('❯') : ' ';
|
|
642
|
+
const label = i === cursor ? (chosen.has(i) ? c.green(m.label) : c.cyan(m.label)) : (chosen.has(i) ? c.green(m.label) : m.label);
|
|
643
|
+
write(` ${pointer} ${check} ${label} ${c.dim('(' + m.hint + ')')}\n`);
|
|
644
|
+
}
|
|
645
|
+
if (errMsg) {
|
|
646
|
+
write(` ${c.yellow('⚠ ' + errMsg)}\n`);
|
|
647
|
+
}
|
|
648
|
+
write(c.dim(` ${chosen.size} ${uiLang === 'zh' ? '已选' : 'selected'}\n`));
|
|
649
|
+
};
|
|
650
|
+
|
|
651
|
+
write('\n');
|
|
652
|
+
render(true);
|
|
653
|
+
|
|
654
|
+
process.stdin.setRawMode(true);
|
|
655
|
+
process.stdin.resume();
|
|
656
|
+
process.stdin.setEncoding('utf8');
|
|
657
|
+
|
|
658
|
+
const onKey = (key) => {
|
|
659
|
+
if (key === '\x03') { cleanup(); process.exit(1); }
|
|
660
|
+
if (key === `${ESC}[A`) { cursor = (cursor - 1 + modes.length) % modes.length; render(); }
|
|
661
|
+
else if (key === `${ESC}[B`) { cursor = (cursor + 1) % modes.length; render(); }
|
|
662
|
+
else if (key === ' ') {
|
|
663
|
+
if (chosen.has(cursor)) chosen.delete(cursor); else chosen.add(cursor);
|
|
664
|
+
render();
|
|
665
|
+
} else if (key === '\r' || key === '\n') {
|
|
666
|
+
if (chosen.size === 0) {
|
|
667
|
+
render(false, t('modeNoneError'));
|
|
668
|
+
return;
|
|
669
|
+
}
|
|
670
|
+
cleanup();
|
|
671
|
+
resolve({
|
|
672
|
+
cli: chosen.has(0),
|
|
673
|
+
mcp: chosen.has(1),
|
|
674
|
+
});
|
|
675
|
+
}
|
|
676
|
+
};
|
|
677
|
+
|
|
678
|
+
const cleanup = () => {
|
|
679
|
+
process.stdin.removeListener('data', onKey);
|
|
680
|
+
process.stdin.setRawMode(false);
|
|
681
|
+
process.stdin.pause();
|
|
682
|
+
};
|
|
683
|
+
|
|
684
|
+
process.stdin.on('data', onKey);
|
|
685
|
+
});
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
/**
|
|
689
|
+
* Agent multi-select UI — shared by both CLI-only and MCP modes.
|
|
690
|
+
* Returns array of selected agent keys.
|
|
628
691
|
*/
|
|
629
|
-
async function
|
|
692
|
+
async function runAgentSelect() {
|
|
630
693
|
const keys = Object.keys(MCP_AGENTS);
|
|
631
694
|
|
|
632
|
-
// Build options with installed/detected status shown as hint
|
|
633
695
|
const options = keys.map(k => {
|
|
634
696
|
const installed = isAgentInstalled(k);
|
|
635
697
|
const present = detectAgentPresence(k);
|
|
@@ -641,89 +703,82 @@ async function runMcpInstallStep(mcpPort, authToken) {
|
|
|
641
703
|
};
|
|
642
704
|
});
|
|
643
705
|
|
|
644
|
-
// Sort: configured > detected > not found (stable within each group)
|
|
645
706
|
options.sort((a, b) => {
|
|
646
707
|
const rank = (o) => o.hint.includes('configured') || o.hint.includes('已配置') ? 0 : o.preselect ? 1 : 2;
|
|
647
708
|
return rank(a) - rank(b);
|
|
648
709
|
});
|
|
649
710
|
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
write(c.dim(` ${chosen.size} ${uiLang === 'zh' ? '已选' : 'selected'}\n`));
|
|
667
|
-
};
|
|
711
|
+
const selected = await new Promise((resolveSelected) => {
|
|
712
|
+
let cursor = 0;
|
|
713
|
+
const chosen = new Set(options.map((o, i) => o.preselect ? i : -1).filter(i => i >= 0));
|
|
714
|
+
|
|
715
|
+
const render = (first = false) => {
|
|
716
|
+
if (!first) write(`\x1b[${options.length + 2}A\x1b[J`);
|
|
717
|
+
write(`${c.bold(uiLang === 'zh' ? '选择 Agent:' : 'Select agents:')} ${c.dim(uiLang === 'zh' ? '(↑↓ 移动 空格 切换 D 已检测 A 全选 Enter 确认)' : '(↑↓ move Space toggle D detected A all Enter confirm)')}\n`);
|
|
718
|
+
for (let i = 0; i < options.length; i++) {
|
|
719
|
+
const o = options[i];
|
|
720
|
+
const check = chosen.has(i) ? c.green('✔') : c.dim('○');
|
|
721
|
+
const pointer = i === cursor ? c.cyan('❯') : ' ';
|
|
722
|
+
const label = i === cursor ? (chosen.has(i) ? c.green(o.label) : c.cyan(o.label)) : (chosen.has(i) ? c.green(o.label) : o.label);
|
|
723
|
+
write(` ${pointer} ${check} ${label} ${c.dim('(' + o.hint + ')')}\n`);
|
|
724
|
+
}
|
|
725
|
+
write(c.dim(` ${chosen.size} ${uiLang === 'zh' ? '已选' : 'selected'}\n`));
|
|
726
|
+
};
|
|
668
727
|
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
};
|
|
728
|
+
write('\n');
|
|
729
|
+
render(true);
|
|
730
|
+
|
|
731
|
+
process.stdin.setRawMode(true);
|
|
732
|
+
process.stdin.resume();
|
|
733
|
+
process.stdin.setEncoding('utf8');
|
|
734
|
+
|
|
735
|
+
const onKey = (key) => {
|
|
736
|
+
if (key === '\x03') { cleanup(); process.exit(1); }
|
|
737
|
+
if (key === `${ESC}[A`) { cursor = (cursor - 1 + options.length) % options.length; render(); }
|
|
738
|
+
else if (key === `${ESC}[B`) { cursor = (cursor + 1) % options.length; render(); }
|
|
739
|
+
else if (key === ' ') {
|
|
740
|
+
if (chosen.has(cursor)) chosen.delete(cursor); else chosen.add(cursor);
|
|
741
|
+
render();
|
|
742
|
+
} else if (key === 'a' || key === 'A') {
|
|
743
|
+
if (chosen.size === options.length) chosen.clear();
|
|
744
|
+
else options.forEach((_, i) => chosen.add(i));
|
|
745
|
+
render();
|
|
746
|
+
} else if (key === 'd' || key === 'D') {
|
|
747
|
+
chosen.clear();
|
|
748
|
+
options.forEach((o, i) => { if (o.preselect) chosen.add(i); });
|
|
749
|
+
render();
|
|
750
|
+
} else if (key === '\r' || key === '\n') {
|
|
751
|
+
cleanup();
|
|
752
|
+
resolveSelected([...chosen].sort().map(i => options[i].value));
|
|
753
|
+
}
|
|
754
|
+
};
|
|
697
755
|
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
756
|
+
const cleanup = () => {
|
|
757
|
+
process.stdin.removeListener('data', onKey);
|
|
758
|
+
process.stdin.setRawMode(false);
|
|
759
|
+
process.stdin.pause();
|
|
760
|
+
};
|
|
703
761
|
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
})();
|
|
762
|
+
process.stdin.on('data', onKey);
|
|
763
|
+
});
|
|
707
764
|
|
|
708
765
|
if (selected.length === 0) {
|
|
709
|
-
write(c.dim(
|
|
710
|
-
return [];
|
|
766
|
+
write(c.dim(uiLang === 'zh' ? ' → 未选择 Agent。\n' : ' → No agents selected.\n'));
|
|
711
767
|
}
|
|
768
|
+
return selected;
|
|
769
|
+
}
|
|
712
770
|
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
771
|
+
/**
|
|
772
|
+
* Write MCP config into selected agents' config files.
|
|
773
|
+
* Agent selection is handled separately by runAgentSelect().
|
|
774
|
+
*/
|
|
775
|
+
function installMcpConfig(selected, mcpPort, authToken) {
|
|
716
776
|
const entry = { type: 'stdio', command: 'mindos', args: ['mcp'], env: { MCP_TRANSPORT: 'stdio' } };
|
|
717
|
-
let okCount = 0;
|
|
718
777
|
|
|
719
778
|
for (const agentKey of selected) {
|
|
720
779
|
const agent = MCP_AGENTS[agentKey];
|
|
721
|
-
// prefer global scope; fall back to project
|
|
722
780
|
const cfgPath = agent.global || agent.project;
|
|
723
|
-
if (!cfgPath)
|
|
724
|
-
write(tf('mcpInstallFail', agent.name, 'no config path') + '\n');
|
|
725
|
-
continue;
|
|
726
|
-
}
|
|
781
|
+
if (!cfgPath) continue;
|
|
727
782
|
const abs = expandHomePath(cfgPath);
|
|
728
783
|
try {
|
|
729
784
|
let config = {};
|
|
@@ -733,15 +788,8 @@ async function runMcpInstallStep(mcpPort, authToken) {
|
|
|
733
788
|
const dir = resolve(abs, '..');
|
|
734
789
|
if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
|
|
735
790
|
writeFileSync(abs, JSON.stringify(config, null, 2) + '\n', 'utf-8');
|
|
736
|
-
|
|
737
|
-
okCount++;
|
|
738
|
-
} catch (err) {
|
|
739
|
-
write(tf('mcpInstallFail', agent.name, String(err)) + '\n');
|
|
740
|
-
}
|
|
791
|
+
} catch { /* logged by caller via agent count */ }
|
|
741
792
|
}
|
|
742
|
-
|
|
743
|
-
console.log(`\n${c.green(tf('mcpInstallDone', okCount))}`);
|
|
744
|
-
return selected;
|
|
745
793
|
}
|
|
746
794
|
|
|
747
795
|
/* ── Skill auto-install ────────────────────────────────────────────────────── */
|
|
@@ -758,20 +806,15 @@ const SKILL_UNSUPPORTED = new Set([]);
|
|
|
758
806
|
* @param {string[]} selectedAgents - MCP agent keys from the multi-select step
|
|
759
807
|
*/
|
|
760
808
|
function runSkillInstallStep(template, selectedAgents) {
|
|
761
|
-
if (!selectedAgents || selectedAgents.length === 0)
|
|
762
|
-
write(c.dim(t('skillSkipped') + '\n'));
|
|
763
|
-
return;
|
|
764
|
-
}
|
|
809
|
+
if (!selectedAgents || selectedAgents.length === 0) return true;
|
|
765
810
|
|
|
766
811
|
const skillName = template === 'zh' ? 'mindos-zh' : 'mindos';
|
|
767
812
|
const localSource = resolve(ROOT, 'skills');
|
|
768
813
|
const githubSource = 'GeminiLight/MindOS';
|
|
769
814
|
|
|
770
|
-
// Filter to non-universal, skill-capable agents
|
|
771
815
|
const additionalAgents = selectedAgents
|
|
772
816
|
.flatMap((key) => {
|
|
773
817
|
if (SKILL_UNSUPPORTED.has(key)) return [];
|
|
774
|
-
// Keep backward-compatibility for non-MCP universal keys.
|
|
775
818
|
if (UNIVERSAL_AGENTS.has(key)) return [];
|
|
776
819
|
const reg = SKILL_AGENT_REGISTRY[key];
|
|
777
820
|
if (!reg) return [key];
|
|
@@ -780,18 +823,13 @@ function runSkillInstallStep(template, selectedAgents) {
|
|
|
780
823
|
return [reg.skillAgentName || key];
|
|
781
824
|
});
|
|
782
825
|
|
|
783
|
-
// Each agent needs its own -a flag (skills CLI does NOT accept comma-separated)
|
|
784
826
|
const agentFlags = additionalAgents.length > 0
|
|
785
827
|
? additionalAgents.map(a => `-a ${a}`).join(' ')
|
|
786
828
|
: '-a universal';
|
|
787
829
|
|
|
788
|
-
// Try GitHub source first, fall back to local path
|
|
789
830
|
const sources = [githubSource, localSource];
|
|
790
831
|
|
|
791
|
-
write(tf('skillInstalling', skillName) + '\n');
|
|
792
|
-
|
|
793
832
|
for (const source of sources) {
|
|
794
|
-
// Quote local paths for shell safety
|
|
795
833
|
const quotedSource = /[/\\]/.test(source) ? `"${source}"` : source;
|
|
796
834
|
const cmd = `npx skills add ${quotedSource} --skill ${skillName} ${agentFlags} -g -y`;
|
|
797
835
|
try {
|
|
@@ -801,12 +839,11 @@ function runSkillInstallStep(template, selectedAgents) {
|
|
|
801
839
|
env: { ...process.env, NODE_ENV: 'production' },
|
|
802
840
|
stdio: 'pipe',
|
|
803
841
|
});
|
|
804
|
-
|
|
805
|
-
return;
|
|
842
|
+
return true;
|
|
806
843
|
} catch { /* try next source */ }
|
|
807
844
|
}
|
|
808
845
|
|
|
809
|
-
|
|
846
|
+
return false;
|
|
810
847
|
}
|
|
811
848
|
|
|
812
849
|
// ── GUI Setup ─────────────────────────────────────────────────────────────────
|
|
@@ -1230,17 +1267,42 @@ async function main() {
|
|
|
1230
1267
|
// ── Skill rules are now built into SKILL.md — no install needed ──────────
|
|
1231
1268
|
// .mindos/user-preferences.md will be created on first preference capture or via `mindos init-skills`.
|
|
1232
1269
|
|
|
1233
|
-
// ── Step 7:
|
|
1270
|
+
// ── Step 7: Connection Mode ─────────────────────────────────────────────────
|
|
1234
1271
|
write('\n');
|
|
1235
1272
|
stepHeader(7);
|
|
1236
|
-
|
|
1273
|
+
const modes = await runModeSelect();
|
|
1237
1274
|
|
|
1238
|
-
|
|
1275
|
+
// ── Step 8: Agent Connection ────────────────────────────────────────────────
|
|
1276
|
+
write('\n');
|
|
1277
|
+
stepHeader(8);
|
|
1278
|
+
const selectedAgents = await runAgentSelect();
|
|
1239
1279
|
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
write('\n'
|
|
1243
|
-
|
|
1280
|
+
if (selectedAgents.length > 0) {
|
|
1281
|
+
const agentCount = selectedAgents.length;
|
|
1282
|
+
write('\n' + c.dim(uiLang === 'zh'
|
|
1283
|
+
? ` 正在为 ${agentCount} 个 Agent 配置连接…`
|
|
1284
|
+
: ` Configuring connection for ${agentCount} agent${agentCount > 1 ? 's' : ''}…`) + '\n');
|
|
1285
|
+
|
|
1286
|
+
if (modes.mcp) {
|
|
1287
|
+
installMcpConfig(selectedAgents, mcpPort, authToken);
|
|
1288
|
+
}
|
|
1289
|
+
const skillOk = runSkillInstallStep(selectedTemplate, selectedAgents);
|
|
1290
|
+
|
|
1291
|
+
if (skillOk) {
|
|
1292
|
+
write(c.green(uiLang === 'zh'
|
|
1293
|
+
? ` ✔ ${agentCount} 个 Agent 已配置完成\n`
|
|
1294
|
+
: ` ✔ ${agentCount} agent${agentCount > 1 ? 's' : ''} configured\n`));
|
|
1295
|
+
} else {
|
|
1296
|
+
write(c.yellow(uiLang === 'zh'
|
|
1297
|
+
? ` ⚠ ${agentCount} 个 Agent 配置部分完成,CLI 指令文档安装失败\n`
|
|
1298
|
+
: ` ⚠ ${agentCount} agent${agentCount > 1 ? 's' : ''} partially configured — CLI guide install failed\n`));
|
|
1299
|
+
}
|
|
1300
|
+
|
|
1301
|
+
if (!modes.mcp) {
|
|
1302
|
+
write(c.dim(uiLang === 'zh'
|
|
1303
|
+
? ' → 如需启用 MCP 模式,随时运行 `mindos mcp install`。\n'
|
|
1304
|
+
: ' → To enable MCP mode later, run `mindos mcp install`.\n'));
|
|
1305
|
+
}
|
|
1244
1306
|
}
|
|
1245
1307
|
|
|
1246
1308
|
// ── Sync setup (optional) ──────────────────────────────────────────────────
|