@geminilight/mindos 0.6.39 → 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/README.md +31 -15
- package/README_zh.md +31 -15
- package/_standalone/.mindos-build-version +1 -1
- package/_standalone/.next/BUILD_ID +1 -1
- package/_standalone/.next/app-path-routes-manifest.json +19 -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 +68 -2
- package/_standalone/.next/routes-manifest.json +6 -0
- 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 +2 -2
- 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 +2 -2
- 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 +3 -3
- 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.js +1 -1
- package/_standalone/.next/server/app/api/acp/config/route.js.nft.json +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.js.nft.json +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.js +1 -1
- package/_standalone/.next/server/app/api/acp/session/route.js.nft.json +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.js +1 -1
- package/_standalone/.next/server/app/api/agent-activity/route.js.nft.json +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 +137 -99
- 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 +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 +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 +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 +3 -3
- 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 +2 -19
- 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 +1 -18
- 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 +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 +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 +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 +1 -0
- package/_standalone/.next/server/app/api/inbox/route.js.nft.json +1 -0
- package/_standalone/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -0
- package/_standalone/.next/server/app/api/init/route.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.js +1 -1
- package/_standalone/.next/server/app/api/mcp/install/route.js.nft.json +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.js.nft.json +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 +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 +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 +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.js.nft.json +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.js +1 -1
- package/_standalone/.next/server/app/api/settings/reset-token/route.js.nft.json +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.js.nft.json +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.js.nft.json +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 +2 -2
- package/_standalone/.next/server/app/api/skills/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/sync/route.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 +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.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 +2 -2
- 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 +2 -2
- 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 +6 -6
- 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 +2 -2
- 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 +3 -3
- 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 +2 -2
- 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 +3 -3
- 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 +4 -4
- 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 +19 -18
- package/_standalone/.next/server/chunks/1550.js +1 -1
- package/_standalone/.next/server/chunks/1750.js +1 -0
- package/_standalone/.next/server/chunks/{9414.js → 2190.js} +1 -1
- package/_standalone/.next/server/chunks/2536.js +52 -0
- package/_standalone/.next/server/chunks/5648.js +2 -0
- package/_standalone/.next/server/chunks/6539.js +1 -1
- package/_standalone/.next/server/chunks/8388.js +15 -0
- package/_standalone/.next/server/chunks/953.js +42 -2
- package/_standalone/.next/server/chunks/9539.js +219 -0
- package/_standalone/.next/server/functions-config-manifest.json +2 -1
- package/_standalone/.next/server/instrumentation.js +1 -1
- 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/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/Ij3PFh-a0zi5K_ANoSAW0/_buildManifest.js +1 -0
- package/_standalone/.next/static/chunks/1053-b70535785cc5aaee.js +29 -0
- package/_standalone/.next/static/chunks/1239.10a0710c2772ab34.js +1 -0
- package/_standalone/.next/static/chunks/{1814.e2da5460ded71d71.js → 1814.2ee1d03297c0bccd.js} +1 -1
- package/_standalone/.next/static/chunks/{1384-55276d40a9da4e88.js → 1880-c2a9e76201841c86.js} +2 -2
- package/_standalone/.next/static/chunks/{1a258343-030e4d6735874dd4.js → 1a258343-9803591e4aaee1f6.js} +1 -1
- package/_standalone/.next/static/chunks/2631.dc56e83472bde281.js +1 -0
- package/_standalone/.next/static/chunks/2872.045858d00bd8307f.js +8 -0
- package/_standalone/.next/static/chunks/2968.f10ccee9e7e2324d.js +2 -0
- package/_standalone/.next/static/chunks/3160-83a7e0b94414b3ac.js +1 -0
- package/_standalone/.next/static/chunks/3637.0541ac2d0ea7de1f.js +1 -0
- package/_standalone/.next/static/chunks/4033.6666700547b20141.js +1 -0
- package/_standalone/.next/static/chunks/4563-b2a2ce80aff845af.js +6 -0
- package/_standalone/.next/static/chunks/516.24ee058b1d4b1fed.js +8 -0
- package/_standalone/.next/static/chunks/5627.c4337d7289acb31f.js +1 -0
- package/_standalone/.next/static/chunks/5956.b445072b35915129.js +1 -0
- package/_standalone/.next/static/chunks/6357-c645842834c0d4cd.js +1 -0
- package/_standalone/.next/static/chunks/6826.7b7d94dd0fd83812.js +1 -0
- package/_standalone/.next/static/chunks/{8409-de5726a4a278d28f.js → 6926-4af497b83952fa87.js} +1 -1
- 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/7266-bb7be1128eccd48e.js +13 -0
- package/_standalone/.next/static/chunks/7753.63831cfc54a55fbb.js +1 -0
- package/_standalone/.next/static/chunks/862.9f526e964489e2e5.js +1 -0
- package/_standalone/.next/static/chunks/9300.118b8c840634383f.js +28 -0
- package/_standalone/.next/static/chunks/95247769.3b5caae1c1a76ce1.js +4 -0
- package/_standalone/.next/static/chunks/9602-423291fdb36396d1.js +1 -0
- package/_standalone/.next/static/chunks/app/.well-known/agent-card.json/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/_global-error/page-400c3c09b1540c14.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/api/a2a/agents/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/a2a/delegations/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/a2a/discover/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/a2a/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/config/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/detect/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/install/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/registry/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/session/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/agent-activity/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/ask/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/ask-sessions/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/auth/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/backlinks/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/bootstrap/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/changes/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/export/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/extract-pdf/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/file/import/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/file/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/files/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/git/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/graph/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/health/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/inbox/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/init/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/agents/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/install/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/restart/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/status/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/monitoring/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/recent-files/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/restart/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/search/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/settings/list-models/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/settings/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/settings/test-key/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/check-path/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/check-port/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/ls/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/skills/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/sync/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/tree-version/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/uninstall/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/update/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/update-check/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/update-status/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/workflows/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/changes/page-350992cf5091bc5b.js +1 -0
- package/_standalone/.next/static/chunks/app/echo/[segment]/page-addf014fcf23fad5.js +11 -0
- package/_standalone/.next/static/chunks/app/echo/page-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/explore/page-5eb2835e9e3ab4bb.js +4 -0
- package/_standalone/.next/static/chunks/app/help/page-2325d25b6846ca07.js +1 -0
- package/_standalone/.next/static/chunks/app/layout-42cdbce19f404567.js +186 -0
- package/_standalone/.next/static/chunks/app/login/page-24236460fa7c11d0.js +1 -0
- package/_standalone/.next/static/chunks/app/page-8c9643b649e01735.js +7 -0
- package/_standalone/.next/static/chunks/app/setup/page-d158b8cb533feb1e.js +1 -0
- package/_standalone/.next/static/chunks/app/trash/page-e9ab74ffeb96af41.js +1 -0
- package/_standalone/.next/static/chunks/app/view/[...path]/loading-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/view/[...path]/not-found-61474670d6bb6116.js +1 -0
- package/_standalone/.next/static/chunks/app/view/[...path]/page-764a69a1c8bd4eef.js +12 -0
- package/_standalone/.next/static/chunks/e71f6c19-4df85185bf989b49.js +1 -0
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/webpack-7b276daaa930d480.js +1 -0
- package/_standalone/.next/static/css/bc9179074eaf65ae.css +1 -0
- package/_standalone/.next/trace +63 -53
- package/_standalone/.next/types/routes.d.ts +2 -1
- package/_standalone/.next/types/validator.ts +9 -0
- package/_standalone/__tests__/agent/chat-mode.test.ts +103 -0
- package/_standalone/__tests__/agents/agents-content-dashboard.test.tsx +4 -3
- package/_standalone/__tests__/api/bootstrap.test.ts +0 -2
- package/_standalone/__tests__/api/file.test.ts +22 -1
- package/_standalone/__tests__/api/install-skill.test.ts +2 -2
- package/_standalone/__tests__/api/mcp-install.test.ts +32 -10
- package/_standalone/__tests__/api/setup.test.ts +2 -2
- package/_standalone/__tests__/api/test-key.test.ts +73 -147
- package/_standalone/__tests__/ask/ask-content-input-during-run.test.tsx +1 -1
- package/_standalone/__tests__/ask/mode-capsule.test.ts +95 -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/inbox.test.ts +250 -0
- package/_standalone/__tests__/core/skill-install-logic.test.ts +3 -3
- package/_standalone/__tests__/core/sync-status.test.ts +1 -1
- package/_standalone/__tests__/core/tools.test.ts +8 -6
- package/_standalone/__tests__/lib/echo-pages-visual-i18n.test.ts +2 -2
- package/_standalone/__tests__/lib/i18n-new-keys.test.ts +2 -2
- package/_standalone/__tests__/panels/agents-panel-hub.test.tsx +2 -2
- package/_standalone/__tests__/settings/activity-bar-update-badge.test.tsx +1 -1
- package/_standalone/__tests__/settings/settings-update-badge.test.tsx +1 -1
- package/_standalone/__tests__/settings/update-tab-availability-sync.test.tsx +1 -1
- package/_standalone/__tests__/settings/update-tab-browser.test.tsx +1 -1
- package/_standalone/__tests__/settings/update-tab-desktop.test.tsx +1 -1
- package/_standalone/__tests__/setup.ts +3 -5
- package/_standalone/app/globals.css +11 -1
- package/_standalone/components/ActivityBar.tsx +26 -10
- package/_standalone/components/AskFab.tsx +1 -1
- package/_standalone/components/AskModal.tsx +1 -1
- package/_standalone/components/Backlinks.tsx +1 -1
- package/_standalone/components/CreateSpaceModal.tsx +7 -55
- package/_standalone/components/EchoSpotlight.tsx +1 -1
- package/_standalone/components/ExportModal.tsx +1 -1
- package/_standalone/components/FileTree.tsx +66 -80
- package/_standalone/components/FindInPage.tsx +1 -1
- package/_standalone/components/GuideCard.tsx +1 -1
- package/_standalone/components/ImportModal.tsx +1 -1
- package/_standalone/components/KeyboardShortcuts.tsx +1 -1
- package/_standalone/components/MarkdownView.tsx +41 -16
- package/_standalone/components/OnboardingView.tsx +1 -1
- package/_standalone/components/OrganizeToast.tsx +1 -1
- package/_standalone/components/Panel.tsx +82 -4
- package/_standalone/components/QuickSuggestion.tsx +1 -1
- package/_standalone/components/RightAgentDetailPanel.tsx +2 -2
- package/_standalone/components/RightAskPanel.tsx +88 -22
- package/_standalone/components/SearchModal.tsx +1 -1
- package/_standalone/components/Sidebar.tsx +4 -4
- package/_standalone/components/SidebarLayout.tsx +52 -16
- package/_standalone/components/SpaceInitToast.tsx +1 -1
- package/_standalone/components/SyncStatusBar.tsx +2 -2
- package/_standalone/components/SystemPulse.tsx +12 -6
- package/_standalone/components/TableOfContents.tsx +86 -39
- package/_standalone/components/agents/AgentActivitySection.tsx +225 -0
- package/_standalone/components/agents/AgentsMcpSection.tsx +10 -16
- package/_standalone/components/agents/AgentsOverviewSection.tsx +28 -27
- package/_standalone/components/agents/AgentsPanelA2aTab.tsx +1 -1
- package/_standalone/components/agents/AgentsPanelSessionsTab.tsx +6 -1
- package/_standalone/components/agents/AgentsSkillsSection.tsx +1 -1
- package/_standalone/components/agents/DiscoverAgentModal.tsx +1 -1
- package/_standalone/components/agents/RecentActivityFeed.tsx +49 -88
- package/_standalone/components/agents/agent-activity-shared.tsx +110 -0
- package/_standalone/components/ask/AgentSelectorCapsule.tsx +1 -1
- package/_standalone/components/ask/AskContent.tsx +332 -486
- package/_standalone/components/ask/AskHeader.tsx +61 -0
- package/_standalone/components/ask/FileChip.tsx +9 -5
- package/_standalone/components/ask/MessageList.tsx +88 -21
- package/_standalone/components/ask/ModeCapsule.tsx +180 -0
- package/_standalone/components/ask/ProviderModelCapsule.tsx +284 -0
- package/_standalone/components/ask/SessionHistory.tsx +63 -10
- package/_standalone/components/ask/SessionTabBar.tsx +1 -1
- package/_standalone/components/ask/ThinkingBlock.tsx +1 -1
- package/_standalone/components/ask/ToolCallBlock.tsx +28 -24
- package/_standalone/components/changes/ChangesBanner.tsx +1 -1
- package/_standalone/components/echo/EchoInsightCollapsible.tsx +1 -1
- package/_standalone/components/echo/EchoSegmentNav.tsx +1 -1
- package/_standalone/components/home/InboxSection.tsx +268 -0
- package/_standalone/components/panels/AgentsPanel.tsx +3 -2
- package/_standalone/components/panels/AgentsPanelHubNav.tsx +2 -6
- package/_standalone/components/panels/DiscoverPanel.tsx +1 -1
- package/_standalone/components/panels/EchoPanel.tsx +1 -1
- package/_standalone/components/panels/EchoSidebarStats.tsx +1 -1
- package/_standalone/components/panels/ImportHistoryPanel.tsx +1 -1
- package/_standalone/components/panels/PanelHeader.tsx +1 -1
- package/_standalone/components/panels/PluginsPanel.tsx +1 -1
- package/_standalone/components/panels/SearchPanel.tsx +5 -2
- package/_standalone/components/panels/SyncPopover.tsx +1 -1
- package/_standalone/components/panels/WorkflowsPanel.tsx +1 -1
- package/_standalone/components/renderers/agent-inspector/AgentInspectorRenderer.tsx +18 -0
- package/_standalone/components/renderers/todo/TodoRenderer.tsx +489 -75
- package/_standalone/components/settings/AiTab.tsx +198 -127
- package/_standalone/components/settings/AppearanceTab.tsx +48 -50
- package/_standalone/components/settings/KnowledgeTab.tsx +92 -27
- package/_standalone/components/settings/McpAgentInstall.tsx +95 -28
- package/_standalone/components/settings/McpSkillsSection.tsx +2 -2
- package/_standalone/components/settings/McpTab.tsx +498 -216
- package/_standalone/components/settings/PluginsTab.tsx +1 -1
- package/_standalone/components/settings/SettingsContent.tsx +17 -8
- package/_standalone/components/settings/SyncTab.tsx +615 -230
- package/_standalone/components/settings/UninstallTab.tsx +1 -1
- package/_standalone/components/settings/UpdateTab.tsx +2 -2
- package/_standalone/components/settings/types.ts +7 -5
- package/_standalone/components/setup/StepAI.tsx +70 -49
- package/_standalone/components/setup/StepAgents.tsx +113 -47
- package/_standalone/components/setup/StepDots.tsx +1 -1
- package/_standalone/components/setup/StepReview.tsx +186 -31
- package/_standalone/components/setup/types.ts +17 -8
- package/_standalone/components/shared/ProviderSelect.tsx +134 -0
- package/_standalone/components/walkthrough/WalkthroughOverlay.tsx +2 -2
- package/_standalone/components/walkthrough/WalkthroughTooltip.tsx +2 -2
- package/_standalone/components/walkthrough/index.ts +1 -1
- package/_standalone/data/skills/mindos/SKILL.md +93 -93
- 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/hooks/useAcpDetection.ts +1 -1
- package/_standalone/hooks/useAskChat.ts +248 -0
- package/_standalone/hooks/useAskPanel.ts +24 -4
- package/_standalone/hooks/useAskSession.ts +15 -0
- package/_standalone/lib/acp/types.ts +1 -1
- package/_standalone/lib/api.ts +3 -1
- package/_standalone/lib/core/types.ts +2 -0
- package/_standalone/lib/i18n/modules/ai-chat.ts +35 -13
- package/_standalone/lib/i18n/modules/features.ts +5 -5
- package/_standalone/lib/i18n/modules/knowledge.ts +86 -2
- package/_standalone/lib/i18n/modules/navigation.ts +6 -2
- package/_standalone/lib/i18n/modules/onboarding.ts +69 -29
- package/_standalone/lib/i18n/modules/panels.ts +78 -29
- package/_standalone/lib/i18n/modules/settings.ts +280 -24
- package/_standalone/lib/inbox-upload.ts +93 -0
- package/_standalone/lib/mcp-snippets.ts +5 -1
- package/_standalone/lib/settings-ai-client.ts +13 -12
- package/_standalone/lib/space-ai-init.ts +66 -0
- package/_standalone/lib/stores/McpStoreInit.tsx +18 -0
- package/_standalone/lib/stores/WalkthroughInit.tsx +20 -0
- package/_standalone/lib/stores/locale-store.ts +55 -0
- package/_standalone/lib/stores/mcp-store.ts +156 -0
- package/_standalone/lib/stores/walkthrough-store.ts +118 -0
- package/_standalone/package-lock.json +40 -8
- package/_standalone/package.json +3 -1
- package/_standalone/tsconfig.json +1 -1
- package/_standalone/tsconfig.tsbuildinfo +1 -1
- package/app/app/api/acp/detect/route.ts +29 -20
- package/app/app/api/agent-activity/route.ts +1 -1
- package/app/app/api/ask/route.ts +105 -30
- package/app/app/api/ask-sessions/route.ts +1 -0
- package/app/app/api/bootstrap/route.ts +1 -3
- package/app/app/api/file/route.ts +34 -4
- package/app/app/api/inbox/route.ts +61 -0
- package/app/app/api/mcp/install/route.ts +2 -1
- package/app/app/api/mcp/status/route.ts +14 -6
- package/app/app/api/settings/list-models/route.ts +73 -53
- package/app/app/api/settings/route.ts +46 -55
- package/app/app/api/settings/test-key/route.ts +57 -114
- package/app/app/api/setup/route.ts +31 -21
- package/app/app/api/sync/route.ts +122 -12
- package/app/app/api/update-check/route.ts +2 -2
- package/app/app/globals.css +11 -1
- package/app/app/layout.tsx +2 -3
- package/app/app/login/page.tsx +1 -1
- package/app/app/view/[...path]/ViewPageClient.tsx +22 -37
- package/app/app/view/[...path]/not-found.tsx +1 -1
- package/app/components/ActivityBar.tsx +26 -10
- package/app/components/AskFab.tsx +1 -1
- package/app/components/AskModal.tsx +1 -1
- package/app/components/Backlinks.tsx +1 -1
- package/app/components/CreateSpaceModal.tsx +7 -55
- package/app/components/DirView.tsx +93 -11
- package/app/components/EchoSpotlight.tsx +1 -1
- package/app/components/ExportModal.tsx +1 -1
- package/app/components/FileTree.tsx +66 -80
- package/app/components/FindInPage.tsx +1 -1
- package/app/components/GuideCard.tsx +1 -1
- package/app/components/HomeContent.tsx +21 -14
- package/app/components/ImportModal.tsx +1 -1
- package/app/components/KeyboardShortcuts.tsx +1 -1
- package/app/components/MarkdownView.tsx +41 -16
- package/app/components/OnboardingView.tsx +1 -1
- package/app/components/OrganizeToast.tsx +1 -1
- package/app/components/Panel.tsx +82 -4
- package/app/components/QuickSuggestion.tsx +1 -1
- package/app/components/RightAgentDetailPanel.tsx +2 -2
- package/app/components/RightAskPanel.tsx +88 -22
- package/app/components/SearchModal.tsx +1 -1
- package/app/components/Sidebar.tsx +4 -4
- package/app/components/SidebarLayout.tsx +52 -16
- package/app/components/SpaceInitToast.tsx +1 -1
- package/app/components/SyncStatusBar.tsx +2 -2
- package/app/components/SystemPulse.tsx +12 -6
- package/app/components/TableOfContents.tsx +86 -39
- package/app/components/TrashPageClient.tsx +1 -1
- package/app/components/UpdateOverlay.tsx +2 -2
- package/app/components/agents/AgentActivitySection.tsx +225 -0
- package/app/components/agents/AgentDetailContent.tsx +234 -3
- package/app/components/agents/AgentsContentPage.tsx +13 -2
- package/app/components/agents/AgentsMcpSection.tsx +10 -16
- package/app/components/agents/AgentsOverviewSection.tsx +28 -27
- package/app/components/agents/AgentsPanelA2aTab.tsx +1 -1
- package/app/components/agents/AgentsPanelSessionsTab.tsx +6 -1
- package/app/components/agents/AgentsSkillsSection.tsx +1 -1
- package/app/components/agents/DiscoverAgentModal.tsx +1 -1
- package/app/components/agents/RecentActivityFeed.tsx +49 -88
- package/app/components/agents/agent-activity-shared.tsx +110 -0
- package/app/components/agents/agents-content-model.ts +2 -2
- package/app/components/ask/AgentSelectorCapsule.tsx +1 -1
- package/app/components/ask/AskContent.tsx +332 -486
- package/app/components/ask/AskHeader.tsx +61 -0
- package/app/components/ask/FileChip.tsx +9 -5
- package/app/components/ask/MessageList.tsx +88 -21
- package/app/components/ask/ModeCapsule.tsx +180 -0
- package/app/components/ask/ProviderModelCapsule.tsx +284 -0
- package/app/components/ask/SessionHistory.tsx +63 -10
- package/app/components/ask/SessionTabBar.tsx +1 -1
- package/app/components/ask/ThinkingBlock.tsx +1 -1
- package/app/components/ask/ToolCallBlock.tsx +28 -24
- package/app/components/changes/ChangesBanner.tsx +1 -1
- package/app/components/changes/ChangesContentPage.tsx +1 -1
- package/app/components/echo/EchoInsightCollapsible.tsx +1 -1
- package/app/components/echo/EchoSegmentNav.tsx +1 -1
- package/app/components/echo/EchoSegmentPageClient.tsx +1 -1
- package/app/components/explore/ExploreContent.tsx +1 -1
- package/app/components/help/HelpContent.tsx +2 -1
- package/app/components/home/InboxSection.tsx +268 -0
- package/app/components/panels/AgentsPanel.tsx +3 -2
- package/app/components/panels/AgentsPanelHubNav.tsx +2 -6
- package/app/components/panels/DiscoverPanel.tsx +1 -1
- package/app/components/panels/EchoPanel.tsx +1 -1
- package/app/components/panels/EchoSidebarStats.tsx +1 -1
- package/app/components/panels/ImportHistoryPanel.tsx +1 -1
- package/app/components/panels/PanelHeader.tsx +1 -1
- package/app/components/panels/PluginsPanel.tsx +1 -1
- package/app/components/panels/SearchPanel.tsx +5 -2
- package/app/components/panels/SyncPopover.tsx +1 -1
- package/app/components/panels/WorkflowsPanel.tsx +1 -1
- package/app/components/renderers/agent-inspector/AgentInspectorRenderer.tsx +18 -0
- package/app/components/renderers/todo/TodoRenderer.tsx +489 -75
- package/app/components/settings/AiTab.tsx +198 -127
- package/app/components/settings/AppearanceTab.tsx +48 -50
- package/app/components/settings/KnowledgeTab.tsx +92 -27
- package/app/components/settings/McpAgentInstall.tsx +95 -28
- package/app/components/settings/McpSkillsSection.tsx +2 -2
- package/app/components/settings/McpTab.tsx +498 -216
- package/app/components/settings/PluginsTab.tsx +1 -1
- package/app/components/settings/SettingsContent.tsx +17 -8
- package/app/components/settings/SyncTab.tsx +615 -230
- package/app/components/settings/UninstallTab.tsx +1 -1
- package/app/components/settings/UpdateTab.tsx +2 -2
- package/app/components/settings/types.ts +7 -5
- package/app/components/setup/StepAI.tsx +70 -49
- package/app/components/setup/StepAgents.tsx +113 -47
- package/app/components/setup/StepDots.tsx +1 -1
- package/app/components/setup/StepReview.tsx +186 -31
- package/app/components/setup/index.tsx +83 -48
- package/app/components/setup/types.ts +17 -8
- package/app/components/shared/ProviderSelect.tsx +134 -0
- package/app/components/walkthrough/WalkthroughOverlay.tsx +2 -2
- package/app/components/walkthrough/WalkthroughTooltip.tsx +2 -2
- package/app/components/walkthrough/index.ts +1 -1
- package/app/data/skills/mindos/SKILL.md +93 -93
- 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/hooks/useAcpDetection.ts +1 -1
- package/app/hooks/useAskChat.ts +248 -0
- package/app/hooks/useAskPanel.ts +24 -4
- package/app/hooks/useAskSession.ts +15 -0
- package/app/lib/acp/types.ts +1 -1
- package/app/lib/actions.ts +13 -0
- package/app/lib/agent/log.ts +2 -0
- package/app/lib/agent/model.ts +69 -81
- package/app/lib/agent/prompt.ts +27 -0
- package/app/lib/agent/providers.ts +299 -0
- package/app/lib/agent/tools.ts +26 -4
- package/app/lib/api.ts +3 -1
- package/app/lib/core/agent-audit-log.ts +7 -0
- package/app/lib/core/fs-ops.ts +9 -4
- package/app/lib/core/inbox.ts +181 -0
- package/app/lib/core/index.ts +4 -0
- package/app/lib/core/tree.ts +3 -0
- package/app/lib/core/types.ts +2 -0
- package/app/lib/fs.ts +20 -2
- package/app/lib/i18n/modules/ai-chat.ts +35 -13
- package/app/lib/i18n/modules/features.ts +5 -5
- package/app/lib/i18n/modules/knowledge.ts +86 -2
- package/app/lib/i18n/modules/navigation.ts +6 -2
- package/app/lib/i18n/modules/onboarding.ts +69 -29
- package/app/lib/i18n/modules/panels.ts +78 -29
- package/app/lib/i18n/modules/settings.ts +280 -24
- package/app/lib/inbox-upload.ts +93 -0
- package/app/lib/mcp-agents.ts +7 -9
- package/app/lib/mcp-snippets.ts +5 -1
- package/app/lib/settings-ai-client.ts +13 -12
- package/app/lib/settings.ts +48 -33
- package/app/lib/space-ai-init.ts +66 -0
- package/app/lib/stores/LocaleStoreInit.tsx +18 -0
- package/app/lib/stores/McpStoreInit.tsx +18 -0
- package/app/lib/stores/WalkthroughInit.tsx +20 -0
- package/app/lib/stores/locale-store.ts +55 -0
- package/app/lib/stores/mcp-store.ts +156 -0
- package/app/lib/stores/walkthrough-store.ts +118 -0
- package/app/lib/types.ts +20 -0
- package/app/package.json +3 -1
- package/app/tsconfig.json +1 -1
- package/bin/cli.js +168 -1385
- 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 +558 -40
- 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 +100 -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 +27 -8
- package/bin/lib/mcp-build.js +1 -1
- package/bin/lib/mcp-install.js +13 -4
- 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/bin/lib/sync.js +140 -34
- package/mcp/README.md +2 -2
- package/mcp/dist/index.cjs +43 -43
- package/mcp/package.json +1 -1
- package/mcp/src/index.ts +77 -61
- package/package.json +2 -2
- package/scripts/setup.js +183 -121
- package/skills/mindos/SKILL.md +93 -93
- package/skills/mindos/references/preference-capture.md +4 -4
- package/skills/mindos/references/write-supplement.md +2 -2
- package/skills/mindos-zh/SKILL.md +100 -104
- package/skills/mindos-zh/references/preference-capture.md +4 -4
- package/skills/mindos-zh/references/write-supplement.md +2 -2
- package/templates/empty/INSTRUCTION.md +0 -1
- package/templates/en/INSTRUCTION.md +0 -1
- package/templates/template-generation-skill.md +0 -1
- package/templates/zh/INSTRUCTION.md +0 -1
- package/_standalone/.next/server/chunks/1473.js +0 -52
- package/_standalone/.next/server/chunks/248.js +0 -15
- package/_standalone/.next/server/chunks/359.js +0 -2
- package/_standalone/.next/server/chunks/4931.js +0 -202
- package/_standalone/.next/server/chunks/7670.js +0 -1
- package/_standalone/.next/static/chunks/1038-ed04d6651ec92312.js +0 -1
- package/_standalone/.next/static/chunks/1263-6df1734e4273adb1.js +0 -25
- package/_standalone/.next/static/chunks/275-ebcaaedabe706903.js +0 -1
- package/_standalone/.next/static/chunks/3637.4bcd01a4db78b894.js +0 -1
- package/_standalone/.next/static/chunks/5637-b97c869adf70c82e.js +0 -1
- package/_standalone/.next/static/chunks/5681-a53362a1cd629dc6.js +0 -1
- package/_standalone/.next/static/chunks/9602-35ca17b688f1a4fe.js +0 -1
- package/_standalone/.next/static/chunks/9670-d59e4d45ed705f58.js +0 -6
- package/_standalone/.next/static/chunks/app/.well-known/agent-card.json/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/_global-error/page-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-519d4da1142db5ef.js +0 -1
- package/_standalone/.next/static/chunks/app/agents/page-b709cf3103321609.js +0 -5
- package/_standalone/.next/static/chunks/app/api/a2a/agents/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/a2a/delegations/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/a2a/discover/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/a2a/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/config/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/detect/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/install/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/registry/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/session/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/agent-activity/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/ask/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/ask-sessions/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/auth/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/backlinks/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/bootstrap/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/changes/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/export/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/extract-pdf/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/file/import/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/file/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/files/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/git/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/graph/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/health/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/init/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/agents/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/install/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/restart/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/status/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/monitoring/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/recent-files/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/restart/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/search/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/settings/list-models/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/settings/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/settings/test-key/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/check-path/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/check-port/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/ls/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/skills/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/sync/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/tree-version/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/uninstall/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/update/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/update-check/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/update-status/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/workflows/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/changes/page-def5210095f8698d.js +0 -1
- package/_standalone/.next/static/chunks/app/echo/[segment]/page-be28eff31b1a186e.js +0 -11
- package/_standalone/.next/static/chunks/app/echo/page-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/explore/page-e4b8098dca200389.js +0 -4
- package/_standalone/.next/static/chunks/app/help/page-d5e57d73d94bad19.js +0 -1
- package/_standalone/.next/static/chunks/app/layout-d91cdbe2ecf135e1.js +0 -173
- package/_standalone/.next/static/chunks/app/login/page-321875768b70938a.js +0 -1
- package/_standalone/.next/static/chunks/app/page-718fdf170428b43c.js +0 -7
- package/_standalone/.next/static/chunks/app/setup/page-01ab1f549d636057.js +0 -1
- package/_standalone/.next/static/chunks/app/trash/page-89b1430cc8a16f18.js +0 -1
- package/_standalone/.next/static/chunks/app/view/[...path]/loading-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/view/[...path]/not-found-f22c513bbc348cc8.js +0 -1
- package/_standalone/.next/static/chunks/app/view/[...path]/page-6e3dc47699a01de1.js +0 -12
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/webpack-3489a2b6c2882b0c.js +0 -1
- package/_standalone/.next/static/css/f16595bc58a16d5d.css +0 -1
- package/_standalone/.next/static/ushZ_NJ8rE3rG5hZfaYOX/_buildManifest.js +0 -1
- package/_standalone/components/walkthrough/WalkthroughProvider.tsx +0 -133
- package/_standalone/hooks/useMcpData.tsx +0 -169
- package/_standalone/lib/i18n-en.ts +0 -2
- package/_standalone/lib/i18n-zh.ts +0 -2
- package/_standalone/lib/types.ts +0 -70
- package/app/components/walkthrough/WalkthroughProvider.tsx +0 -133
- package/app/hooks/useMcpData.tsx +0 -169
- package/app/lib/LocaleContext.tsx +0 -60
- package/app/lib/i18n-en.ts +0 -2
- package/app/lib/i18n-zh.ts +0 -2
- /package/_standalone/.next/static/{ushZ_NJ8rE3rG5hZfaYOX → Ij3PFh-a0zi5K_ANoSAW0}/_ssgManifest.js +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export const dynamic = 'force-dynamic';
|
|
2
2
|
import { NextRequest, NextResponse } from 'next/server';
|
|
3
3
|
import { execSync, execFile } from 'child_process';
|
|
4
|
-
import { existsSync, readFileSync, writeFileSync } from 'fs';
|
|
4
|
+
import { existsSync, readFileSync, writeFileSync, unlinkSync } from 'fs';
|
|
5
5
|
import { join, resolve } from 'path';
|
|
6
6
|
import { homedir } from 'os';
|
|
7
7
|
|
|
@@ -64,9 +64,30 @@ export async function GET() {
|
|
|
64
64
|
return NextResponse.json({ enabled: false });
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
|
|
68
|
-
const
|
|
69
|
-
const
|
|
67
|
+
// Detect broken state: config says enabled but no git repo or no remote
|
|
68
|
+
const hasRepo = mindRoot && isGitRepo(mindRoot);
|
|
69
|
+
const remote = hasRepo ? getRemoteUrl(mindRoot) : null;
|
|
70
|
+
if (!hasRepo || !remote) {
|
|
71
|
+
return NextResponse.json({
|
|
72
|
+
enabled: true,
|
|
73
|
+
needsSetup: true,
|
|
74
|
+
provider: syncConfig.provider || 'git',
|
|
75
|
+
remote: remote || '(not configured)',
|
|
76
|
+
branch: 'main',
|
|
77
|
+
lastSync: null,
|
|
78
|
+
lastPull: null,
|
|
79
|
+
unpushed: '?',
|
|
80
|
+
conflicts: [],
|
|
81
|
+
lastError: !hasRepo
|
|
82
|
+
? 'Git repository not found in knowledge base directory. Please re-configure sync.'
|
|
83
|
+
: 'Remote not configured. Please re-configure sync.',
|
|
84
|
+
autoCommitInterval: syncConfig.autoCommitInterval || 30,
|
|
85
|
+
autoPullInterval: syncConfig.autoPullInterval || 300,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const branch = getBranch(mindRoot);
|
|
90
|
+
const unpushed = getUnpushedCount(mindRoot);
|
|
70
91
|
|
|
71
92
|
return NextResponse.json({
|
|
72
93
|
enabled: true,
|
|
@@ -85,7 +106,7 @@ export async function GET() {
|
|
|
85
106
|
|
|
86
107
|
export async function POST(req: NextRequest) {
|
|
87
108
|
try {
|
|
88
|
-
const body = await req.json() as { action: string; remote?: string; branch?: string; token?: string };
|
|
109
|
+
const body = await req.json() as { action: string; remote?: string; branch?: string; token?: string; content?: string; autoCommitInterval?: number; autoPullInterval?: number };
|
|
89
110
|
const config = loadConfig();
|
|
90
111
|
const mindRoot = config.mindRoot;
|
|
91
112
|
|
|
@@ -107,18 +128,13 @@ export async function POST(req: NextRequest) {
|
|
|
107
128
|
return NextResponse.json({ error: 'Invalid remote URL — must be HTTPS or SSH format' }, { status: 400 });
|
|
108
129
|
}
|
|
109
130
|
|
|
110
|
-
// Check if sync is already configured
|
|
111
|
-
if (config.sync?.enabled && isGitRepo(mindRoot) && getRemoteUrl(mindRoot)) {
|
|
112
|
-
return NextResponse.json({ error: 'Sync already configured' }, { status: 400 });
|
|
113
|
-
}
|
|
114
|
-
|
|
115
131
|
const branch = body.branch?.trim() || 'main';
|
|
116
132
|
|
|
117
133
|
// Call CLI's sync init — pass clean remote + token separately (never embed token in URL)
|
|
118
134
|
try {
|
|
119
135
|
const args = ['sync', 'init', '--non-interactive', '--remote', remote, '--branch', branch];
|
|
120
136
|
if (body.token) args.push('--token', body.token);
|
|
121
|
-
await runCli(args,
|
|
137
|
+
await runCli(args, 120000); // git init + remote setup can take 60s+
|
|
122
138
|
return NextResponse.json({ success: true, message: 'Sync initialized' });
|
|
123
139
|
} catch (err: unknown) {
|
|
124
140
|
const errMsg = err instanceof Error ? err.message : String(err);
|
|
@@ -132,7 +148,7 @@ export async function POST(req: NextRequest) {
|
|
|
132
148
|
}
|
|
133
149
|
// Delegate to CLI for unified conflict handling
|
|
134
150
|
try {
|
|
135
|
-
await runCli(['sync', 'now'],
|
|
151
|
+
await runCli(['sync', 'now'], 120000); // pull + push can take 60s+
|
|
136
152
|
return NextResponse.json({ ok: true });
|
|
137
153
|
} catch (err: unknown) {
|
|
138
154
|
const errMsg = err instanceof Error ? err.message : String(err);
|
|
@@ -154,6 +170,100 @@ export async function POST(req: NextRequest) {
|
|
|
154
170
|
return NextResponse.json({ ok: true, enabled: false });
|
|
155
171
|
}
|
|
156
172
|
|
|
173
|
+
case 'reset': {
|
|
174
|
+
// Clear sync config so user can re-configure from scratch
|
|
175
|
+
delete config.sync;
|
|
176
|
+
saveConfig(config);
|
|
177
|
+
// Clear sync state
|
|
178
|
+
try { writeFileSync(SYNC_STATE_PATH, '{}', 'utf-8'); } catch {}
|
|
179
|
+
return NextResponse.json({ ok: true, enabled: false });
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
case 'gitignore-get': {
|
|
183
|
+
const gitignorePath = join(mindRoot, '.gitignore');
|
|
184
|
+
try {
|
|
185
|
+
const content = readFileSync(gitignorePath, 'utf-8');
|
|
186
|
+
return NextResponse.json({ content });
|
|
187
|
+
} catch {
|
|
188
|
+
return NextResponse.json({ content: '' });
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
case 'gitignore-save': {
|
|
193
|
+
if (typeof body.content !== 'string') {
|
|
194
|
+
return NextResponse.json({ error: 'Missing content' }, { status: 400 });
|
|
195
|
+
}
|
|
196
|
+
const gitignoreSavePath = join(mindRoot, '.gitignore');
|
|
197
|
+
writeFileSync(gitignoreSavePath, body.content, 'utf-8');
|
|
198
|
+
return NextResponse.json({ ok: true });
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
case 'resolve-conflict': {
|
|
202
|
+
// Resolve a single conflict: keep-local (default) or keep-remote
|
|
203
|
+
const file = body.remote; // reuse field: relative path of conflict file
|
|
204
|
+
const strategy = body.branch ?? 'keep-local'; // reuse field
|
|
205
|
+
if (!file || typeof file !== 'string') {
|
|
206
|
+
return NextResponse.json({ error: 'Missing file path' }, { status: 400 });
|
|
207
|
+
}
|
|
208
|
+
const conflictPath = join(mindRoot, file + '.sync-conflict');
|
|
209
|
+
const originalPath = join(mindRoot, file);
|
|
210
|
+
try {
|
|
211
|
+
if (strategy === 'keep-remote' && existsSync(conflictPath)) {
|
|
212
|
+
// Replace local with remote version
|
|
213
|
+
const remoteContent = readFileSync(conflictPath, 'utf-8');
|
|
214
|
+
writeFileSync(originalPath, remoteContent, 'utf-8');
|
|
215
|
+
}
|
|
216
|
+
// Clean up .sync-conflict file
|
|
217
|
+
if (existsSync(conflictPath)) {
|
|
218
|
+
unlinkSync(conflictPath);
|
|
219
|
+
}
|
|
220
|
+
// Remove this conflict from sync state
|
|
221
|
+
const state = loadSyncState();
|
|
222
|
+
if (state.conflicts) {
|
|
223
|
+
state.conflicts = state.conflicts.filter((c: { file: string }) => c.file !== file);
|
|
224
|
+
writeFileSync(SYNC_STATE_PATH, JSON.stringify(state, null, 2) + '\n', 'utf-8');
|
|
225
|
+
}
|
|
226
|
+
return NextResponse.json({ ok: true });
|
|
227
|
+
} catch (e) {
|
|
228
|
+
return NextResponse.json({ error: (e as Error).message }, { status: 500 });
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
case 'conflict-preview': {
|
|
233
|
+
const file = body.remote;
|
|
234
|
+
if (!file || typeof file !== 'string') {
|
|
235
|
+
return NextResponse.json({ error: 'Missing file path' }, { status: 400 });
|
|
236
|
+
}
|
|
237
|
+
const localPath = join(mindRoot, file);
|
|
238
|
+
const remotePath = join(mindRoot, file + '.sync-conflict');
|
|
239
|
+
const local = existsSync(localPath) ? readFileSync(localPath, 'utf-8') : '';
|
|
240
|
+
const remote = existsSync(remotePath) ? readFileSync(remotePath, 'utf-8') : '';
|
|
241
|
+
return NextResponse.json({ local, remote });
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
case 'update-intervals': {
|
|
245
|
+
const commitInterval = typeof body.autoCommitInterval === 'number' ? body.autoCommitInterval : undefined;
|
|
246
|
+
const pullInterval = typeof body.autoPullInterval === 'number' ? body.autoPullInterval : undefined;
|
|
247
|
+
if (commitInterval === undefined && pullInterval === undefined) {
|
|
248
|
+
return NextResponse.json({ error: 'At least one interval must be provided' }, { status: 400 });
|
|
249
|
+
}
|
|
250
|
+
if (commitInterval !== undefined && (commitInterval < 10 || commitInterval > 300)) {
|
|
251
|
+
return NextResponse.json({ error: 'autoCommitInterval must be between 10 and 300 seconds' }, { status: 400 });
|
|
252
|
+
}
|
|
253
|
+
if (pullInterval !== undefined && (pullInterval < 60 || pullInterval > 3600)) {
|
|
254
|
+
return NextResponse.json({ error: 'autoPullInterval must be between 60 and 3600 seconds' }, { status: 400 });
|
|
255
|
+
}
|
|
256
|
+
const fullConfig = loadConfig();
|
|
257
|
+
if (!fullConfig.sync) fullConfig.sync = {};
|
|
258
|
+
if (commitInterval !== undefined) fullConfig.sync.autoCommitInterval = commitInterval;
|
|
259
|
+
if (pullInterval !== undefined) fullConfig.sync.autoPullInterval = pullInterval;
|
|
260
|
+
writeFileSync(CONFIG_PATH, JSON.stringify(fullConfig, null, 2) + '\n', 'utf-8');
|
|
261
|
+
return NextResponse.json({
|
|
262
|
+
autoCommitInterval: fullConfig.sync.autoCommitInterval || 30,
|
|
263
|
+
autoPullInterval: fullConfig.sync.autoPullInterval || 300,
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
|
|
157
267
|
default:
|
|
158
268
|
return NextResponse.json({ error: `Unknown action: ${body.action}` }, { status: 400 });
|
|
159
269
|
}
|
|
@@ -32,8 +32,8 @@ export async function GET() {
|
|
|
32
32
|
for (const url of REGISTRIES) {
|
|
33
33
|
try {
|
|
34
34
|
const res = await fetch(url, {
|
|
35
|
-
signal: AbortSignal.timeout(
|
|
36
|
-
next: { revalidate:
|
|
35
|
+
signal: AbortSignal.timeout(2000),
|
|
36
|
+
next: { revalidate: 3600 }, // 1-hour ISR cache (reduce network calls)
|
|
37
37
|
});
|
|
38
38
|
if (res.ok) {
|
|
39
39
|
const data = await res.json();
|
package/app/app/globals.css
CHANGED
|
@@ -139,9 +139,19 @@ body {
|
|
|
139
139
|
.font-display { font-family: 'IBM Plex Mono', var(--font-ibm-plex-mono), monospace; }
|
|
140
140
|
|
|
141
141
|
/* Content width — controlled by Settings > Appearance */
|
|
142
|
-
:root { --content-width: 780px; }
|
|
142
|
+
:root { --content-width: 780px; --toc-width: 0px; }
|
|
143
143
|
.content-width { max-width: var(--content-width-override, var(--content-width)); margin-left: auto; margin-right: auto; }
|
|
144
144
|
|
|
145
|
+
/* TOC offset — only on xl screens where TOC is visible.
|
|
146
|
+
--toc-width is set by TableOfContents.tsx (212px when expanded, 0px when collapsed).
|
|
147
|
+
Applied as padding-right on #main-content so content-width's margin:auto
|
|
148
|
+
centers within the remaining space (not overlapping the fixed TOC).
|
|
149
|
+
Note: SidebarLayout also sets padding-right via inline style with !important
|
|
150
|
+
for Ask panel; the TOC offset is added via --toc-extra-right there. */
|
|
151
|
+
@media (min-width: 1280px) {
|
|
152
|
+
:root { --toc-extra-right: var(--toc-width, 0px); }
|
|
153
|
+
}
|
|
154
|
+
|
|
145
155
|
::-webkit-scrollbar { width: 5px; height: 5px; }
|
|
146
156
|
::-webkit-scrollbar-track { background: transparent; }
|
|
147
157
|
::-webkit-scrollbar-thumb { background: var(--border); border-radius: 99px; }
|
package/app/app/layout.tsx
CHANGED
|
@@ -4,7 +4,7 @@ import './globals.css';
|
|
|
4
4
|
import { getFileTree } from '@/lib/fs';
|
|
5
5
|
import ShellLayout from '@/components/ShellLayout';
|
|
6
6
|
import { TooltipProvider } from '@/components/ui/tooltip';
|
|
7
|
-
import
|
|
7
|
+
import LocaleStoreInit from '@/lib/stores/LocaleStoreInit';
|
|
8
8
|
import ErrorBoundary from '@/components/ErrorBoundary';
|
|
9
9
|
import Toaster from '@/components/ui/Toaster';
|
|
10
10
|
import RegisterSW from './register-sw';
|
|
@@ -106,7 +106,7 @@ export default async function RootLayout({
|
|
|
106
106
|
className={`${geistSans.variable} ${geistMono.variable} ${ibmPlexMono.variable} ${ibmPlexSans.variable} ${lora.variable} antialiased bg-background text-foreground`}
|
|
107
107
|
suppressHydrationWarning
|
|
108
108
|
>
|
|
109
|
-
<
|
|
109
|
+
<LocaleStoreInit ssrLocale={ssrLocale} />
|
|
110
110
|
<TooltipProvider delay={300}>
|
|
111
111
|
<ErrorBoundary>
|
|
112
112
|
<ShellLayout fileTree={fileTree}>
|
|
@@ -117,7 +117,6 @@ export default async function RootLayout({
|
|
|
117
117
|
<Toaster />
|
|
118
118
|
<RegisterSW />
|
|
119
119
|
<UpdateOverlay />
|
|
120
|
-
</LocaleProvider>
|
|
121
120
|
</body>
|
|
122
121
|
</html>
|
|
123
122
|
);
|
package/app/app/login/page.tsx
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { useState, Suspense } from 'react';
|
|
4
4
|
import { useRouter, useSearchParams } from 'next/navigation';
|
|
5
5
|
import { Loader2, Lock } from 'lucide-react';
|
|
6
|
-
import { useLocale } from '@/lib/
|
|
6
|
+
import { useLocale } from '@/lib/stores/locale-store';
|
|
7
7
|
|
|
8
8
|
function LoginForm() {
|
|
9
9
|
const router = useRouter();
|
|
@@ -15,7 +15,7 @@ import TableOfContents from '@/components/TableOfContents';
|
|
|
15
15
|
import FindInPage from '@/components/FindInPage';
|
|
16
16
|
import { resolveRenderer, isRendererEnabled } from '@/lib/renderers/registry';
|
|
17
17
|
import { encodePath } from '@/lib/utils';
|
|
18
|
-
import { useLocale } from '@/lib/
|
|
18
|
+
import { useLocale } from '@/lib/stores/locale-store';
|
|
19
19
|
import DirPicker from '@/components/DirPicker';
|
|
20
20
|
import { renameFileAction, deleteFileAction, undoDeleteAction } from '@/lib/actions';
|
|
21
21
|
import { toast } from '@/lib/toast';
|
|
@@ -58,8 +58,8 @@ export default function ViewPageClient({
|
|
|
58
58
|
);
|
|
59
59
|
|
|
60
60
|
const [useRaw, setUseRaw] = useRendererState<boolean>('_raw', filePath, false);
|
|
61
|
-
//
|
|
62
|
-
const [graphMode, setGraphMode] =
|
|
61
|
+
// Graph mode — per-view, resets when navigating to a different file
|
|
62
|
+
const [graphMode, setGraphMode] = useState(false);
|
|
63
63
|
const router = useRouter();
|
|
64
64
|
const [editing, setEditing] = useState(initialEditing || content === '');
|
|
65
65
|
const [editContent, setEditContent] = useState(content);
|
|
@@ -167,7 +167,7 @@ export default function ViewPageClient({
|
|
|
167
167
|
setGraphMode(prev => !prev);
|
|
168
168
|
}, [setGraphMode]);
|
|
169
169
|
|
|
170
|
-
const effectiveGraphMode =
|
|
170
|
+
const effectiveGraphMode = graphMode;
|
|
171
171
|
|
|
172
172
|
// Resolve renderer: for md files, graph mode overrides normal resolution
|
|
173
173
|
const registryRenderer = resolveRenderer(filePath, extension);
|
|
@@ -354,7 +354,7 @@ export default function ViewPageClient({
|
|
|
354
354
|
<div className="flex flex-col min-h-screen">
|
|
355
355
|
{/* Top bar */}
|
|
356
356
|
<div className="sticky top-[52px] md:top-0 z-20 border-b border-border px-4 md:px-6 py-2.5" style={{ background: 'var(--background)' }}>
|
|
357
|
-
<div className="content-width
|
|
357
|
+
<div className="content-width flex items-center justify-between gap-2">
|
|
358
358
|
<div className="min-w-0 flex-1 flex items-center gap-1.5">
|
|
359
359
|
<button
|
|
360
360
|
onClick={() => router.back()}
|
|
@@ -383,22 +383,6 @@ export default function ViewPageClient({
|
|
|
383
383
|
<span className="text-xs text-error hidden sm:inline">{saveError}</span>
|
|
384
384
|
)}
|
|
385
385
|
|
|
386
|
-
{/* Graph toggle — only for md files, hidden when graph plugin is disabled */}
|
|
387
|
-
{extension === 'md' && !editing && !isDraft && isRendererEnabled('graph') && (
|
|
388
|
-
<button
|
|
389
|
-
onClick={handleToggleGraph}
|
|
390
|
-
className="flex items-center gap-1.5 px-3 py-1.5 rounded-md text-xs font-medium transition-colors font-display"
|
|
391
|
-
style={{
|
|
392
|
-
background: effectiveGraphMode ? `${'var(--amber)'}22` : 'var(--muted)',
|
|
393
|
-
color: effectiveGraphMode ? 'var(--amber)' : 'var(--muted-foreground)',
|
|
394
|
-
}}
|
|
395
|
-
title={effectiveGraphMode ? 'Switch to document view' : 'Switch to Wiki Graph'}
|
|
396
|
-
>
|
|
397
|
-
{effectiveGraphMode ? <FileText size={13} /> : <Share2 size={13} />}
|
|
398
|
-
<span className="hidden sm:inline">{effectiveGraphMode ? 'Doc' : 'Graph'}</span>
|
|
399
|
-
</button>
|
|
400
|
-
)}
|
|
401
|
-
|
|
402
386
|
{/* Renderer toggle — only shown when a custom renderer exists (excludes graph-mode override) */}
|
|
403
387
|
{registryRenderer && !editing && !isDraft && !graphRenderer && (
|
|
404
388
|
<button
|
|
@@ -463,20 +447,12 @@ export default function ViewPageClient({
|
|
|
463
447
|
>
|
|
464
448
|
<Star size={16} className={pinned ? 'fill-[var(--amber)] text-[var(--amber)]' : ''} />
|
|
465
449
|
</button>
|
|
466
|
-
<button
|
|
467
|
-
type="button"
|
|
468
|
-
onClick={() => setExportOpen(true)}
|
|
469
|
-
className="p-1.5 rounded-md text-muted-foreground hover:text-foreground hover:bg-muted transition-colors"
|
|
470
|
-
title={t.fileTree.export}
|
|
471
|
-
>
|
|
472
|
-
<Download size={16} />
|
|
473
|
-
</button>
|
|
474
450
|
<button
|
|
475
451
|
ref={moreRef}
|
|
476
452
|
type="button"
|
|
477
453
|
onClick={() => setMoreOpen(v => !v)}
|
|
478
454
|
className="p-1.5 rounded-md text-muted-foreground hover:text-foreground hover:bg-muted transition-colors"
|
|
479
|
-
title=
|
|
455
|
+
title={t.view?.more ?? 'More'}
|
|
480
456
|
>
|
|
481
457
|
<MoreHorizontal size={16} />
|
|
482
458
|
</button>
|
|
@@ -485,15 +461,24 @@ export default function ViewPageClient({
|
|
|
485
461
|
ref={moreMenuRef}
|
|
486
462
|
className="absolute right-0 top-full mt-1 z-50 min-w-[160px] rounded-lg border border-border bg-card shadow-lg py-1"
|
|
487
463
|
>
|
|
464
|
+
{extension === 'md' && !editing && !isDraft && isRendererEnabled('graph') && (
|
|
465
|
+
<button className="w-full flex items-center gap-2 px-3 py-2 text-sm text-foreground hover:bg-muted transition-colors text-left" onClick={() => { setMoreOpen(false); handleToggleGraph(); }}>
|
|
466
|
+
{effectiveGraphMode ? <FileText size={14} className="shrink-0" /> : <Share2 size={14} className="shrink-0" />}
|
|
467
|
+
{effectiveGraphMode ? (t.view?.switchToDoc ?? 'Document view') : (t.view?.switchToGraph ?? 'Wiki Graph')}
|
|
468
|
+
</button>
|
|
469
|
+
)}
|
|
470
|
+
<button className="w-full flex items-center gap-2 px-3 py-2 text-sm text-foreground hover:bg-muted transition-colors text-left" onClick={() => { setMoreOpen(false); setExportOpen(true); }}>
|
|
471
|
+
<Download size={14} className="shrink-0" /> {t.fileTree?.export ?? 'Export'}
|
|
472
|
+
</button>
|
|
488
473
|
<button className="w-full flex items-center gap-2 px-3 py-2 text-sm text-foreground hover:bg-muted transition-colors text-left" onClick={handleCopyPath}>
|
|
489
|
-
<Copy size={14} className="shrink-0" /> Copy Path
|
|
474
|
+
<Copy size={14} className="shrink-0" /> {t.view?.copyPath ?? t.fileTree?.copyPath ?? 'Copy Path'}
|
|
490
475
|
</button>
|
|
491
476
|
<button className="w-full flex items-center gap-2 px-3 py-2 text-sm text-foreground hover:bg-muted transition-colors text-left" onClick={handleStartRename}>
|
|
492
|
-
<Pencil size={14} className="shrink-0" /> Rename
|
|
477
|
+
<Pencil size={14} className="shrink-0" /> {t.view?.rename ?? 'Rename'}
|
|
493
478
|
</button>
|
|
494
479
|
<div className="my-1 border-t border-border/50" />
|
|
495
480
|
<button className="w-full flex items-center gap-2 px-3 py-2 text-sm text-error hover:bg-error/10 transition-colors text-left" onClick={() => { setMoreOpen(false); setShowDeleteConfirm(true); }}>
|
|
496
|
-
<Trash2 size={14} className="shrink-0" /> Delete
|
|
481
|
+
<Trash2 size={14} className="shrink-0" /> {t.view?.delete ?? 'Delete'}
|
|
497
482
|
</button>
|
|
498
483
|
</div>
|
|
499
484
|
)}
|
|
@@ -506,7 +491,7 @@ export default function ViewPageClient({
|
|
|
506
491
|
{/* Content */}
|
|
507
492
|
<div className="flex-1 px-4 md:px-6 py-6 md:py-8">
|
|
508
493
|
{editing ? (
|
|
509
|
-
<div className="content-width
|
|
494
|
+
<div className="content-width">
|
|
510
495
|
{isDraft && showSaveAs && (
|
|
511
496
|
<div className="mb-3 rounded-lg border border-border bg-card p-3 flex flex-col gap-2">
|
|
512
497
|
<div>
|
|
@@ -553,7 +538,7 @@ export default function ViewPageClient({
|
|
|
553
538
|
)}
|
|
554
539
|
</div>
|
|
555
540
|
) : showRenderer && LazyComponent ? (
|
|
556
|
-
<div ref={contentRef} className="content-width
|
|
541
|
+
<div ref={contentRef} className="content-width">
|
|
557
542
|
{findOpen && <FindInPage containerRef={contentRef} onClose={() => setFindOpen(false)} />}
|
|
558
543
|
<Suspense fallback={<div className="flex items-center justify-center py-12"><Loader2 size={20} className="animate-spin text-muted-foreground" /></div>}>
|
|
559
544
|
<LazyComponent
|
|
@@ -566,7 +551,7 @@ export default function ViewPageClient({
|
|
|
566
551
|
<Backlinks filePath={filePath} />
|
|
567
552
|
</div>
|
|
568
553
|
) : (
|
|
569
|
-
<div ref={contentRef} className="content-width
|
|
554
|
+
<div ref={contentRef} className="content-width">
|
|
570
555
|
{findOpen && <FindInPage containerRef={contentRef} onClose={() => setFindOpen(false)} />}
|
|
571
556
|
{extension === 'csv' ? (
|
|
572
557
|
<CsvView
|
|
@@ -577,7 +562,7 @@ export default function ViewPageClient({
|
|
|
577
562
|
<JsonView content={savedContent} />
|
|
578
563
|
) : (
|
|
579
564
|
<>
|
|
580
|
-
<MarkdownView content={savedContent} highlightLines={changedLines} onDismissHighlight={() => setChangedLines([])} />
|
|
565
|
+
<MarkdownView content={savedContent} highlightLines={changedLines} onDismissHighlight={() => setChangedLines([])} emptyPlaceholder={t.view?.emptyNote} />
|
|
581
566
|
<TableOfContents content={savedContent} />
|
|
582
567
|
</>
|
|
583
568
|
)}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { usePathname, useRouter } from 'next/navigation';
|
|
4
4
|
import { FilePlus, Home, ArrowLeft } from 'lucide-react';
|
|
5
5
|
import { useState } from 'react';
|
|
6
|
-
import { useLocale } from '@/lib/
|
|
6
|
+
import { useLocale } from '@/lib/stores/locale-store';
|
|
7
7
|
import { encodePath } from '@/lib/utils';
|
|
8
8
|
|
|
9
9
|
export default function ViewNotFound() {
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
import { useRef, useCallback, useState, useEffect } from 'react';
|
|
4
4
|
import Link from 'next/link';
|
|
5
5
|
import { FolderTree, Search, Settings, RefreshCw, Bot, Compass, ChevronLeft, ChevronRight, Radio, Zap } from 'lucide-react';
|
|
6
|
-
import { useLocale } from '@/lib/
|
|
6
|
+
import { useLocale } from '@/lib/stores/locale-store';
|
|
7
7
|
import { DOT_COLORS, getStatusLevel } from './SyncStatusBar';
|
|
8
|
-
import type { SyncStatus } from './settings/
|
|
8
|
+
import type { SyncStatus } from './settings/types';
|
|
9
9
|
import Logo from './Logo';
|
|
10
10
|
|
|
11
11
|
export type PanelId = 'files' | 'search' | 'echo' | 'agents' | 'discover' | 'workflows';
|
|
@@ -118,7 +118,7 @@ export default function ActivityBar({
|
|
|
118
118
|
if (latest && latest !== dismissed) { setHasUpdate(true); }
|
|
119
119
|
const timer = setTimeout(async () => {
|
|
120
120
|
try {
|
|
121
|
-
const res = await fetch('/api/update-check');
|
|
121
|
+
const res = await fetch('/api/update-check', { signal: AbortSignal.timeout(5000) });
|
|
122
122
|
if (!res.ok) return;
|
|
123
123
|
const data = await res.json();
|
|
124
124
|
if (!data.hasUpdate) {
|
|
@@ -144,6 +144,22 @@ export default function ActivityBar({
|
|
|
144
144
|
};
|
|
145
145
|
}, []);
|
|
146
146
|
|
|
147
|
+
// Labs feature flags (Echo, Workflows) — read from localStorage, react to settings changes
|
|
148
|
+
const [labsEcho, setLabsEcho] = useState(() =>
|
|
149
|
+
typeof window !== 'undefined' ? localStorage.getItem('mindos:labs-echo') === '1' : false
|
|
150
|
+
);
|
|
151
|
+
const [labsWorkflows, setLabsWorkflows] = useState(() =>
|
|
152
|
+
typeof window !== 'undefined' ? localStorage.getItem('mindos:labs-workflows') === '1' : false
|
|
153
|
+
);
|
|
154
|
+
useEffect(() => {
|
|
155
|
+
const sync = () => {
|
|
156
|
+
setLabsEcho(localStorage.getItem('mindos:labs-echo') === '1');
|
|
157
|
+
setLabsWorkflows(localStorage.getItem('mindos:labs-workflows') === '1');
|
|
158
|
+
};
|
|
159
|
+
window.addEventListener('mindos:labs-changed', sync);
|
|
160
|
+
return () => window.removeEventListener('mindos:labs-changed', sync);
|
|
161
|
+
}, []);
|
|
162
|
+
|
|
147
163
|
/** Debounce rapid clicks (300ms) — shared across all Rail buttons */
|
|
148
164
|
const debounced = useCallback((fn: () => void) => {
|
|
149
165
|
const now = Date.now();
|
|
@@ -176,22 +192,22 @@ export default function ActivityBar({
|
|
|
176
192
|
>
|
|
177
193
|
{/* Content wrapper — overflow-hidden prevents text flash during width transitions */}
|
|
178
194
|
<div className="flex flex-col h-full w-full overflow-hidden">
|
|
179
|
-
{/* ── Top: Logo ── */}
|
|
195
|
+
{/* ── Top: Logo — h-[45px] aligns divider with PanelHeader h-[46px] border-b (both at y=45) ── */}
|
|
180
196
|
<Link
|
|
181
197
|
href="/"
|
|
182
|
-
className={`flex items-center ${expanded ? 'px-3 gap-2' : 'justify-center'} w-full
|
|
198
|
+
className={`flex items-center ${expanded ? 'px-3 gap-2' : 'justify-center'} w-full h-[45px] shrink-0 hover:opacity-80 transition-opacity`}
|
|
183
199
|
aria-label="MindOS Home"
|
|
184
200
|
>
|
|
185
201
|
<Logo id="rail" className="w-7 h-3.5 shrink-0" />
|
|
186
202
|
{expanded && <span className="text-sm font-semibold text-foreground font-display whitespace-nowrap">MindOS</span>}
|
|
187
203
|
</Link>
|
|
188
204
|
|
|
189
|
-
<div className={`${expanded ? 'mx-3' : 'mx-
|
|
205
|
+
<div className={`${expanded ? 'mx-3' : 'mx-2'} border-t border-border`} />
|
|
190
206
|
|
|
191
207
|
{/* ── Middle: Core panel toggles ── */}
|
|
192
208
|
<div className={`flex flex-col ${expanded ? 'px-1.5' : 'items-center'} gap-1 py-2`}>
|
|
193
209
|
<RailButton icon={<FolderTree size={18} />} label={t.sidebar.files} active={activePanel === 'files'} expanded={expanded} onClick={() => toggle('files')} walkthroughId="files-panel" />
|
|
194
|
-
<RailButton icon={<Radio size={18} />} label={t.sidebar.echo} active={activePanel === 'echo'} expanded={expanded} onClick={() => onEchoClick ? debounced(onEchoClick) : toggle('echo')} walkthroughId="echo-panel" />
|
|
210
|
+
{labsEcho && <RailButton icon={<Radio size={18} />} label={t.sidebar.echo} active={activePanel === 'echo'} expanded={expanded} onClick={() => onEchoClick ? debounced(onEchoClick) : toggle('echo')} walkthroughId="echo-panel" />}
|
|
195
211
|
<RailButton icon={<Search size={18} />} label={t.sidebar.searchTitle} shortcut="⌘K" active={activePanel === 'search'} expanded={expanded} onClick={() => toggle('search')} />
|
|
196
212
|
<RailButton
|
|
197
213
|
icon={<Bot size={18} />}
|
|
@@ -201,20 +217,20 @@ export default function ActivityBar({
|
|
|
201
217
|
onClick={() => onAgentsClick ? debounced(onAgentsClick) : toggle('agents')}
|
|
202
218
|
walkthroughId="agents-panel"
|
|
203
219
|
/>
|
|
204
|
-
<RailButton icon={<Zap size={18} />} label={t.sidebar.workflows ?? 'Flows'} active={activePanel === 'workflows'} expanded={expanded} onClick={() => onWorkflowsClick ? debounced(onWorkflowsClick) : toggle('workflows')} />
|
|
220
|
+
{labsWorkflows && <RailButton icon={<Zap size={18} />} label={t.sidebar.workflows ?? 'Flows'} active={activePanel === 'workflows'} expanded={expanded} onClick={() => onWorkflowsClick ? debounced(onWorkflowsClick) : toggle('workflows')} />}
|
|
205
221
|
</div>
|
|
206
222
|
|
|
207
223
|
{/* ── Spacer ── */}
|
|
208
224
|
<div className="flex-1" />
|
|
209
225
|
|
|
210
226
|
{/* ── Secondary: Explore ── */}
|
|
211
|
-
<div className={`${expanded ? 'mx-3' : 'mx-
|
|
227
|
+
<div className={`${expanded ? 'mx-3' : 'mx-2'} border-t border-border`} />
|
|
212
228
|
<div className={`flex flex-col ${expanded ? 'px-1.5' : 'items-center'} gap-1 py-2`}>
|
|
213
229
|
<RailButton icon={<Compass size={18} />} label={t.sidebar.discover} active={activePanel === 'discover'} expanded={expanded} onClick={() => onDiscoverClick ? debounced(onDiscoverClick) : toggle('discover')} />
|
|
214
230
|
</div>
|
|
215
231
|
|
|
216
232
|
{/* ── Bottom: Action buttons (not panel toggles) ── */}
|
|
217
|
-
<div className={`${expanded ? 'mx-3' : 'mx-
|
|
233
|
+
<div className={`${expanded ? 'mx-3' : 'mx-2'} border-t border-border`} />
|
|
218
234
|
<div className={`flex flex-col ${expanded ? 'px-1.5' : 'items-center'} gap-1 py-2`}>
|
|
219
235
|
<RailButton
|
|
220
236
|
icon={<Settings size={18} />}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { useEffect, useState } from 'react';
|
|
4
4
|
import Link from 'next/link';
|
|
5
5
|
import { Link as LinkIcon, FileText } from 'lucide-react';
|
|
6
|
-
import { useLocale } from '@/lib/
|
|
6
|
+
import { useLocale } from '@/lib/stores/locale-store';
|
|
7
7
|
import { apiFetch } from '@/lib/api';
|
|
8
8
|
import type { BacklinkItem } from '@/lib/types';
|
|
9
9
|
|
|
@@ -4,10 +4,10 @@ import { useState, useEffect, useMemo, useCallback, useRef } from 'react';
|
|
|
4
4
|
import { createPortal } from 'react-dom';
|
|
5
5
|
import { Folder, Loader2, X, Sparkles, AlertTriangle } from 'lucide-react';
|
|
6
6
|
import { useRouter } from 'next/navigation';
|
|
7
|
-
import { useLocale } from '@/lib/
|
|
7
|
+
import { useLocale } from '@/lib/stores/locale-store';
|
|
8
8
|
import { encodePath } from '@/lib/utils';
|
|
9
9
|
import { createSpaceAction } from '@/lib/actions';
|
|
10
|
-
import {
|
|
10
|
+
import { checkAiAvailable, triggerSpaceAiInit } from '@/lib/space-ai-init';
|
|
11
11
|
import DirPicker from './DirPicker';
|
|
12
12
|
|
|
13
13
|
/* ── Create Space Modal ── */
|
|
@@ -36,22 +36,12 @@ export default function CreateSpaceModal({ t, dirPaths }: { t: ReturnType<typeof
|
|
|
36
36
|
return () => window.removeEventListener('mindos:create-space', handler);
|
|
37
37
|
}, []);
|
|
38
38
|
|
|
39
|
-
// Check AI availability when modal opens
|
|
40
39
|
useEffect(() => {
|
|
41
40
|
if (!open || aiAvailable !== null) return;
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
const activeProvider = providers[provider as keyof typeof providers];
|
|
47
|
-
const hasKey = !!(activeProvider?.apiKey);
|
|
48
|
-
setAiAvailable(hasKey);
|
|
49
|
-
setUseAi(hasKey);
|
|
50
|
-
})
|
|
51
|
-
.catch(() => {
|
|
52
|
-
setAiAvailable(false);
|
|
53
|
-
setUseAi(false);
|
|
54
|
-
});
|
|
41
|
+
checkAiAvailable().then(ok => {
|
|
42
|
+
setAiAvailable(ok);
|
|
43
|
+
setUseAi(ok);
|
|
44
|
+
});
|
|
55
45
|
}, [open, aiAvailable]);
|
|
56
46
|
|
|
57
47
|
const close = useCallback(() => {
|
|
@@ -89,46 +79,8 @@ export default function CreateSpaceModal({ t, dirPaths }: { t: ReturnType<typeof
|
|
|
89
79
|
if (result.success) {
|
|
90
80
|
const createdPath = result.path ?? trimmed;
|
|
91
81
|
|
|
92
|
-
// If AI is enabled, trigger AI initialization in background
|
|
93
82
|
if (useAi && aiAvailable) {
|
|
94
|
-
|
|
95
|
-
const prompt = isZh
|
|
96
|
-
? `初始化新建的心智空间「${trimmed}」,路径为「${createdPath}/」。${description ? `描述:「${description}」。` : ''}两个文件均已存在模板,用 write_file 覆盖:\n1. 「${createdPath}/README.md」— 写入空间用途、结构概览、使用指南\n2. 「${createdPath}/INSTRUCTION.md」— 写入 AI Agent 在此空间中的行为规则和操作约定\n\n内容简洁实用,直接使用工具写入。`
|
|
97
|
-
: `Initialize the new Mind Space "${trimmed}" at "${createdPath}/". ${description ? `Description: "${description}". ` : ''}Both files already exist with templates — use write_file to overwrite:\n1. "${createdPath}/README.md" — write purpose, structure overview, usage guidelines\n2. "${createdPath}/INSTRUCTION.md" — write rules for AI agents operating in this space\n\nKeep content concise and actionable. Write files directly using tools.`;
|
|
98
|
-
|
|
99
|
-
window.dispatchEvent(new CustomEvent('mindos:ai-init', {
|
|
100
|
-
detail: { spaceName: trimmed, spacePath: createdPath, description, state: 'working' },
|
|
101
|
-
}));
|
|
102
|
-
|
|
103
|
-
// /api/ask returns SSE — use raw fetch and consume the stream
|
|
104
|
-
// so the server-side agent runs to completion.
|
|
105
|
-
fetch('/api/ask', {
|
|
106
|
-
method: 'POST',
|
|
107
|
-
headers: { 'Content-Type': 'application/json' },
|
|
108
|
-
body: JSON.stringify({
|
|
109
|
-
messages: [{ role: 'user', content: prompt }],
|
|
110
|
-
currentFile: createdPath + '/INSTRUCTION.md',
|
|
111
|
-
}),
|
|
112
|
-
}).then(async (res) => {
|
|
113
|
-
if (!res.ok || !res.body) throw new Error(`HTTP ${res.status}`);
|
|
114
|
-
const reader = res.body.getReader();
|
|
115
|
-
try {
|
|
116
|
-
while (true) {
|
|
117
|
-
const { done } = await reader.read();
|
|
118
|
-
if (done) break;
|
|
119
|
-
}
|
|
120
|
-
} finally {
|
|
121
|
-
reader.releaseLock();
|
|
122
|
-
}
|
|
123
|
-
window.dispatchEvent(new CustomEvent('mindos:ai-init', {
|
|
124
|
-
detail: { spacePath: createdPath, state: 'done' },
|
|
125
|
-
}));
|
|
126
|
-
window.dispatchEvent(new Event('mindos:files-changed'));
|
|
127
|
-
}).catch(() => {
|
|
128
|
-
window.dispatchEvent(new CustomEvent('mindos:ai-init', {
|
|
129
|
-
detail: { spacePath: createdPath, state: 'error' },
|
|
130
|
-
}));
|
|
131
|
-
});
|
|
83
|
+
triggerSpaceAiInit(trimmed, createdPath, description);
|
|
132
84
|
}
|
|
133
85
|
|
|
134
86
|
close();
|