@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
package/app/lib/agent/tools.ts
CHANGED
|
@@ -4,7 +4,7 @@ import type { AgentTool, AgentToolResult } from '@mariozechner/pi-agent-core';
|
|
|
4
4
|
import {
|
|
5
5
|
searchFiles, getFileContent, getFileTree, getRecentlyModified,
|
|
6
6
|
saveFileContent, createFile, appendToFile, insertAfterHeading, updateSection,
|
|
7
|
-
|
|
7
|
+
moveToTrashFile, renameFile, moveFile, findBacklinks, gitLog, gitShowFile, appendCsvRow,
|
|
8
8
|
getMindRoot,
|
|
9
9
|
} from '@/lib/fs';
|
|
10
10
|
import { readSkillContentByName, scanSkillDirs } from '@/lib/pi-integration/skills';
|
|
@@ -239,6 +239,28 @@ export function getOrganizeTools(): AgentTool<any>[] {
|
|
|
239
239
|
return knowledgeBaseTools.filter(t => ORGANIZE_TOOL_NAMES.has(t.name));
|
|
240
240
|
}
|
|
241
241
|
|
|
242
|
+
/**
|
|
243
|
+
* Read-only tool set for Chat mode.
|
|
244
|
+
*
|
|
245
|
+
* Allows searching and reading the knowledge base + web access,
|
|
246
|
+
* but blocks all write operations. Extensible: add tool names here
|
|
247
|
+
* to grant more read-only capabilities to Chat mode.
|
|
248
|
+
*/
|
|
249
|
+
const CHAT_TOOL_NAMES = new Set([
|
|
250
|
+
'list_files',
|
|
251
|
+
'read_file',
|
|
252
|
+
'read_file_chunk',
|
|
253
|
+
'search',
|
|
254
|
+
'get_recent',
|
|
255
|
+
'get_backlinks',
|
|
256
|
+
'web_search',
|
|
257
|
+
'web_fetch',
|
|
258
|
+
]);
|
|
259
|
+
|
|
260
|
+
export function getChatTools(): AgentTool<any>[] {
|
|
261
|
+
return knowledgeBaseTools.filter(t => CHAT_TOOL_NAMES.has(t.name));
|
|
262
|
+
}
|
|
263
|
+
|
|
242
264
|
export async function getRequestScopedTools(): Promise<AgentTool<any>[]> {
|
|
243
265
|
const baseTools = [...knowledgeBaseTools, ...a2aTools, ...acpTools];
|
|
244
266
|
try {
|
|
@@ -685,11 +707,11 @@ export const knowledgeBaseTools: AgentTool<any>[] = [
|
|
|
685
707
|
{
|
|
686
708
|
name: 'delete_file',
|
|
687
709
|
label: 'Delete File',
|
|
688
|
-
description: '
|
|
710
|
+
description: 'Delete a file from the knowledge base. The file is moved to trash and can be recovered within 30 days.',
|
|
689
711
|
parameters: PathParam,
|
|
690
712
|
execute: safeExecute(async (_id, params: Static<typeof PathParam>) => {
|
|
691
|
-
|
|
692
|
-
return textResult(`
|
|
713
|
+
const meta = moveToTrashFile(params.path);
|
|
714
|
+
return textResult(`Moved to trash: ${params.path} (recoverable for 30 days, trashId: ${meta.id})`);
|
|
693
715
|
}),
|
|
694
716
|
},
|
|
695
717
|
|
package/app/lib/api.ts
CHANGED
|
@@ -36,7 +36,9 @@ export async function apiFetch<T>(url: string, opts: ApiFetchOptions = {}): Prom
|
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
if (timeout > 0 && controller) {
|
|
39
|
-
timeoutId = setTimeout(() =>
|
|
39
|
+
timeoutId = setTimeout(() => {
|
|
40
|
+
controller.abort(new Error(`Request timed out after ${Math.round(timeout / 1000)}s`));
|
|
41
|
+
}, timeout);
|
|
40
42
|
}
|
|
41
43
|
|
|
42
44
|
// Bridge caller-provided AbortSignal so both timeout and external cancel work.
|
|
@@ -9,6 +9,8 @@ export interface AgentAuditEvent {
|
|
|
9
9
|
result: 'ok' | 'error';
|
|
10
10
|
message?: string;
|
|
11
11
|
durationMs?: number;
|
|
12
|
+
/** Name of the agent that performed this operation (e.g. "claude-code", "cursor"). */
|
|
13
|
+
agentName?: string;
|
|
12
14
|
op?: 'append' | 'legacy_agent_audit_md_import' | 'legacy_agent_log_jsonl_import';
|
|
13
15
|
}
|
|
14
16
|
|
|
@@ -19,6 +21,8 @@ export interface AgentAuditInput {
|
|
|
19
21
|
result: 'ok' | 'error';
|
|
20
22
|
message?: string;
|
|
21
23
|
durationMs?: number;
|
|
24
|
+
/** Name of the agent that performed this operation. */
|
|
25
|
+
agentName?: string;
|
|
22
26
|
}
|
|
23
27
|
|
|
24
28
|
interface AgentAuditState {
|
|
@@ -111,6 +115,7 @@ interface LegacyAgentOp {
|
|
|
111
115
|
result?: 'ok' | 'error';
|
|
112
116
|
message?: string;
|
|
113
117
|
durationMs?: number;
|
|
118
|
+
agentName?: string;
|
|
114
119
|
}
|
|
115
120
|
|
|
116
121
|
function parseLegacyMdBlocks(raw: string): LegacyAgentOp[] {
|
|
@@ -253,6 +258,7 @@ export function appendAgentAuditEvent(mindRoot: string, input: AgentAuditInput):
|
|
|
253
258
|
result: input.result === 'error' ? 'error' : 'ok',
|
|
254
259
|
message: normalizeMessage(input.message),
|
|
255
260
|
durationMs: typeof input.durationMs === 'number' ? input.durationMs : undefined,
|
|
261
|
+
agentName: typeof input.agentName === 'string' && input.agentName.trim() ? input.agentName.trim() : undefined,
|
|
256
262
|
op: 'append',
|
|
257
263
|
};
|
|
258
264
|
state.events.unshift(event);
|
|
@@ -275,6 +281,7 @@ export function parseAgentAuditJsonLines(raw: string): AgentAuditInput[] {
|
|
|
275
281
|
result: entry.result === 'error' ? 'error' : 'ok',
|
|
276
282
|
message: normalizeMessage(entry.message),
|
|
277
283
|
durationMs: typeof entry.durationMs === 'number' ? entry.durationMs : undefined,
|
|
284
|
+
agentName: typeof entry.agentName === 'string' ? entry.agentName : undefined,
|
|
278
285
|
}));
|
|
279
286
|
}
|
|
280
287
|
|
package/app/lib/core/fs-ops.ts
CHANGED
|
@@ -38,11 +38,16 @@ export function writeFile(mindRoot: string, filePath: string, content: string):
|
|
|
38
38
|
*/
|
|
39
39
|
export function createFile(mindRoot: string, filePath: string, initialContent = ''): void {
|
|
40
40
|
const resolved = resolveSafe(mindRoot, filePath);
|
|
41
|
-
if (fs.existsSync(resolved)) {
|
|
42
|
-
throw new MindOSError(ErrorCodes.FILE_ALREADY_EXISTS, `File already exists: ${filePath}`, { filePath });
|
|
43
|
-
}
|
|
44
41
|
fs.mkdirSync(path.dirname(resolved), { recursive: true });
|
|
45
|
-
|
|
42
|
+
try {
|
|
43
|
+
// 'wx' flag: create exclusively — fails atomically if file already exists (no TOCTOU race)
|
|
44
|
+
fs.writeFileSync(resolved, initialContent, { encoding: 'utf-8', flag: 'wx' });
|
|
45
|
+
} catch (err: unknown) {
|
|
46
|
+
if (err instanceof Error && 'code' in err && (err as NodeJS.ErrnoException).code === 'EEXIST') {
|
|
47
|
+
throw new MindOSError(ErrorCodes.FILE_ALREADY_EXISTS, `File already exists: ${filePath}`, { filePath });
|
|
48
|
+
}
|
|
49
|
+
throw err;
|
|
50
|
+
}
|
|
46
51
|
}
|
|
47
52
|
|
|
48
53
|
/**
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { resolveSafe } from './security';
|
|
4
|
+
import { sanitizeFileName, convertToMarkdown, ALLOWED_IMPORT_EXTENSIONS } from './file-convert';
|
|
5
|
+
|
|
6
|
+
export const INBOX_DIR = 'Inbox';
|
|
7
|
+
const AGING_THRESHOLD_MS = 7 * 24 * 60 * 60 * 1000; // 7 days
|
|
8
|
+
|
|
9
|
+
const INBOX_INSTRUCTION = `# Inbox Instruction Set
|
|
10
|
+
|
|
11
|
+
## Goal
|
|
12
|
+
This is the **Inbox** — a staging area for unprocessed files.
|
|
13
|
+
Files here are waiting to be organized into the right location in the knowledge base.
|
|
14
|
+
|
|
15
|
+
## Rules
|
|
16
|
+
- New files dropped here should be preserved as-is until the user triggers organization.
|
|
17
|
+
- When organizing, analyze file content and move each file to the most appropriate Space/directory.
|
|
18
|
+
- If a file belongs to an existing topic, merge or append rather than creating duplicates.
|
|
19
|
+
- After organizing, the Inbox should be empty or contain only files that don't fit anywhere.
|
|
20
|
+
- Never delete files from Inbox — always move them to a better location.
|
|
21
|
+
|
|
22
|
+
## Boundary
|
|
23
|
+
- Root INSTRUCTION.md rules take precedence.
|
|
24
|
+
- This INSTRUCTION.md only applies to the Inbox directory.
|
|
25
|
+
`;
|
|
26
|
+
|
|
27
|
+
const INBOX_README = `# Inbox
|
|
28
|
+
|
|
29
|
+
Quick capture staging area. Drop files here and organize them later with AI.
|
|
30
|
+
|
|
31
|
+
## Usage
|
|
32
|
+
- Drag files onto the MindOS window to save them here instantly.
|
|
33
|
+
- Click "AI Organize" on the homepage to sort everything into the right place.
|
|
34
|
+
`;
|
|
35
|
+
|
|
36
|
+
export interface InboxFileInfo {
|
|
37
|
+
name: string;
|
|
38
|
+
path: string;
|
|
39
|
+
size: number;
|
|
40
|
+
modifiedAt: string;
|
|
41
|
+
isAging: boolean;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export interface InboxSaveResult {
|
|
45
|
+
saved: Array<{ original: string; path: string }>;
|
|
46
|
+
skipped: Array<{ name: string; reason: string }>;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export interface InboxSaveInput {
|
|
50
|
+
name: string;
|
|
51
|
+
content: string;
|
|
52
|
+
encoding?: 'text' | 'base64';
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Creates the Inbox space if it doesn't exist.
|
|
57
|
+
* Idempotent — safe to call multiple times concurrently.
|
|
58
|
+
*/
|
|
59
|
+
export function ensureInboxSpace(mindRoot: string): string {
|
|
60
|
+
const inboxDir = path.resolve(mindRoot, INBOX_DIR);
|
|
61
|
+
fs.mkdirSync(inboxDir, { recursive: true });
|
|
62
|
+
|
|
63
|
+
const instructionPath = path.join(inboxDir, 'INSTRUCTION.md');
|
|
64
|
+
if (!fs.existsSync(instructionPath)) {
|
|
65
|
+
fs.writeFileSync(instructionPath, INBOX_INSTRUCTION, 'utf-8');
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const readmePath = path.join(inboxDir, 'README.md');
|
|
69
|
+
if (!fs.existsSync(readmePath)) {
|
|
70
|
+
fs.writeFileSync(readmePath, INBOX_README, 'utf-8');
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return inboxDir;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Lists non-system files in the Inbox directory with metadata.
|
|
78
|
+
* Returns files sorted by modification time (newest first).
|
|
79
|
+
*/
|
|
80
|
+
export function listInboxFiles(mindRoot: string): InboxFileInfo[] {
|
|
81
|
+
const inboxDir = path.resolve(mindRoot, INBOX_DIR);
|
|
82
|
+
if (!fs.existsSync(inboxDir)) return [];
|
|
83
|
+
|
|
84
|
+
const entries = fs.readdirSync(inboxDir, { withFileTypes: true });
|
|
85
|
+
const now = Date.now();
|
|
86
|
+
const results: InboxFileInfo[] = [];
|
|
87
|
+
|
|
88
|
+
for (const entry of entries) {
|
|
89
|
+
if (!entry.isFile()) continue;
|
|
90
|
+
const lowerName = entry.name.toLowerCase();
|
|
91
|
+
if (lowerName === 'instruction.md' || lowerName === 'readme.md') continue;
|
|
92
|
+
if (entry.name.startsWith('.')) continue;
|
|
93
|
+
|
|
94
|
+
const filePath = path.join(inboxDir, entry.name);
|
|
95
|
+
try {
|
|
96
|
+
const stat = fs.statSync(filePath);
|
|
97
|
+
results.push({
|
|
98
|
+
name: entry.name,
|
|
99
|
+
path: `${INBOX_DIR}/${entry.name}`,
|
|
100
|
+
size: stat.size,
|
|
101
|
+
modifiedAt: stat.mtime.toISOString(),
|
|
102
|
+
isAging: now - stat.mtime.getTime() > AGING_THRESHOLD_MS,
|
|
103
|
+
});
|
|
104
|
+
} catch {
|
|
105
|
+
// file may have been deleted between readdir and stat
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
results.sort((a, b) => new Date(b.modifiedAt).getTime() - new Date(a.modifiedAt).getTime());
|
|
110
|
+
return results;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
function decodeContent(encoding: string | undefined, content: string): string {
|
|
114
|
+
if (encoding === 'base64') {
|
|
115
|
+
return Buffer.from(content, 'base64').toString('utf-8');
|
|
116
|
+
}
|
|
117
|
+
return content;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
function resolveUniqueName(inboxDir: string, targetName: string): string {
|
|
121
|
+
let resolved = path.join(inboxDir, targetName);
|
|
122
|
+
if (!fs.existsSync(resolved)) return targetName;
|
|
123
|
+
|
|
124
|
+
const ext = path.extname(targetName);
|
|
125
|
+
const stem = ext ? targetName.slice(0, -ext.length) : targetName;
|
|
126
|
+
let n = 1;
|
|
127
|
+
while (fs.existsSync(resolved)) {
|
|
128
|
+
const candidate = `${stem}-${n}${ext}`;
|
|
129
|
+
resolved = path.join(inboxDir, candidate);
|
|
130
|
+
if (!fs.existsSync(resolved)) return candidate;
|
|
131
|
+
n++;
|
|
132
|
+
}
|
|
133
|
+
return targetName;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Saves files to the Inbox directory.
|
|
138
|
+
* Handles format conversion (txt→md, html→md, etc.) and deduplication.
|
|
139
|
+
*/
|
|
140
|
+
export function saveToInbox(mindRoot: string, files: InboxSaveInput[]): InboxSaveResult {
|
|
141
|
+
const inboxDir = ensureInboxSpace(mindRoot);
|
|
142
|
+
const saved: InboxSaveResult['saved'] = [];
|
|
143
|
+
const skipped: InboxSaveResult['skipped'] = [];
|
|
144
|
+
|
|
145
|
+
for (const file of files) {
|
|
146
|
+
if (!file.name || typeof file.name !== 'string') {
|
|
147
|
+
skipped.push({ name: file.name || '(empty)', reason: 'Invalid file name' });
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
if (file.content == null || typeof file.content !== 'string') {
|
|
152
|
+
skipped.push({ name: file.name, reason: 'Missing or invalid content' });
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
const ext = path.extname(file.name).toLowerCase();
|
|
157
|
+
if (!ALLOWED_IMPORT_EXTENSIONS.has(ext)) {
|
|
158
|
+
skipped.push({ name: file.name, reason: `Unsupported format: ${ext}` });
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
try {
|
|
163
|
+
const sanitized = sanitizeFileName(file.name);
|
|
164
|
+
const raw = decodeContent(file.encoding, file.content);
|
|
165
|
+
const { content, targetName } = convertToMarkdown(sanitized, raw);
|
|
166
|
+
const uniqueName = resolveUniqueName(inboxDir, targetName);
|
|
167
|
+
|
|
168
|
+
// Security: resolve within mindRoot
|
|
169
|
+
const targetPath = `${INBOX_DIR}/${uniqueName}`;
|
|
170
|
+
resolveSafe(mindRoot, targetPath);
|
|
171
|
+
|
|
172
|
+
const absPath = path.join(inboxDir, uniqueName);
|
|
173
|
+
fs.writeFileSync(absPath, content, 'utf-8');
|
|
174
|
+
saved.push({ original: file.name, path: targetPath });
|
|
175
|
+
} catch (err) {
|
|
176
|
+
skipped.push({ name: file.name, reason: (err as Error).message });
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
return { saved, skipped };
|
|
181
|
+
}
|
package/app/lib/core/index.ts
CHANGED
|
@@ -68,6 +68,10 @@ export { createSpaceFilesystem, generateReadmeTemplate } from './create-space';
|
|
|
68
68
|
export { summarizeTopLevelSpaces } from './list-spaces';
|
|
69
69
|
export type { MindSpaceSummary } from './list-spaces';
|
|
70
70
|
|
|
71
|
+
// Inbox
|
|
72
|
+
export { INBOX_DIR, ensureInboxSpace, listInboxFiles, saveToInbox } from './inbox';
|
|
73
|
+
export type { InboxFileInfo, InboxSaveResult, InboxSaveInput } from './inbox';
|
|
74
|
+
|
|
71
75
|
// Content changes
|
|
72
76
|
export {
|
|
73
77
|
appendContentChange,
|
package/app/lib/core/tree.ts
CHANGED
|
@@ -5,6 +5,7 @@ import type { FileNode } from './types';
|
|
|
5
5
|
|
|
6
6
|
const DEFAULT_IGNORED_DIRS = new Set(['.git', 'node_modules', 'app', '.next', '.DS_Store', 'mcp']);
|
|
7
7
|
const DEFAULT_ALLOWED_EXTENSIONS = new Set(['.md', '.csv']);
|
|
8
|
+
const SYSTEM_FILES = new Set(['INSTRUCTION.md', 'README.md', 'CONFIG.json', 'CHANGELOG.md']);
|
|
8
9
|
|
|
9
10
|
export interface TreeOptions {
|
|
10
11
|
ignoredDirs?: Set<string>;
|
|
@@ -86,6 +87,7 @@ export function collectAllFiles(
|
|
|
86
87
|
if (ignoredDirs.has(entry.name)) continue;
|
|
87
88
|
files.push(...collectAllFiles(mindRoot, fullPath, opts));
|
|
88
89
|
} else if (entry.isFile()) {
|
|
90
|
+
if (dir === root && SYSTEM_FILES.has(entry.name)) continue;
|
|
89
91
|
const ext = path.extname(entry.name).toLowerCase();
|
|
90
92
|
if (allowedExtensions.has(ext)) {
|
|
91
93
|
files.push(path.relative(root, fullPath));
|
|
@@ -147,6 +149,7 @@ export async function collectAllFilesAsync(
|
|
|
147
149
|
if (ignoredDirs.has(entry.name)) continue;
|
|
148
150
|
subdirPromises.push(collectAllFilesAsync(mindRoot, fullPath, opts));
|
|
149
151
|
} else if (entry.isFile()) {
|
|
152
|
+
if (dir === root && SYSTEM_FILES.has(entry.name)) continue;
|
|
150
153
|
const ext = path.extname(entry.name).toLowerCase();
|
|
151
154
|
if (allowedExtensions.has(ext)) {
|
|
152
155
|
files.push(path.relative(root, fullPath));
|
package/app/lib/core/types.ts
CHANGED
package/app/lib/fs.ts
CHANGED
|
@@ -49,6 +49,7 @@ export function getMindRoot(): string {
|
|
|
49
49
|
|
|
50
50
|
const IGNORED_DIRS = new Set(['.git', 'node_modules', 'app', '.next', '.DS_Store']);
|
|
51
51
|
const ALLOWED_EXTENSIONS = new Set(['.md', '.csv', '.json']);
|
|
52
|
+
const SYSTEM_FILES = new Set(['INSTRUCTION.md', 'README.md', 'CONFIG.json', 'CHANGELOG.md']);
|
|
52
53
|
|
|
53
54
|
// ─── In-memory cache ──────────────────────────────────────────────────────────
|
|
54
55
|
|
|
@@ -231,10 +232,27 @@ function extractBodyLines(filePath: string, maxLines: number): string[] {
|
|
|
231
232
|
} catch { return []; }
|
|
232
233
|
}
|
|
233
234
|
|
|
235
|
+
const TEMPLATE_MARKERS = [
|
|
236
|
+
'Define local execution rules for this directory.',
|
|
237
|
+
'(your files here)',
|
|
238
|
+
'(Describe the purpose and usage of this space.)',
|
|
239
|
+
'(Add usage guidelines for this space.)',
|
|
240
|
+
];
|
|
241
|
+
|
|
242
|
+
function isTemplateContent(filePath: string): boolean {
|
|
243
|
+
try {
|
|
244
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
245
|
+
return TEMPLATE_MARKERS.some(m => content.includes(m));
|
|
246
|
+
} catch { return false; }
|
|
247
|
+
}
|
|
248
|
+
|
|
234
249
|
function buildSpacePreview(dirAbsPath: string) {
|
|
250
|
+
const instructionPath = path.join(dirAbsPath, 'INSTRUCTION.md');
|
|
251
|
+
const readmePath = path.join(dirAbsPath, 'README.md');
|
|
235
252
|
return {
|
|
236
|
-
instructionLines: extractBodyLines(
|
|
237
|
-
readmeLines: extractBodyLines(
|
|
253
|
+
instructionLines: extractBodyLines(instructionPath, SPACE_PREVIEW_MAX_LINES),
|
|
254
|
+
readmeLines: extractBodyLines(readmePath, SPACE_PREVIEW_MAX_LINES),
|
|
255
|
+
isTemplate: isTemplateContent(instructionPath) && isTemplateContent(readmePath),
|
|
238
256
|
};
|
|
239
257
|
}
|
|
240
258
|
|
|
@@ -5,7 +5,8 @@ export const aiChatEn = {
|
|
|
5
5
|
title: 'MindOS Agent',
|
|
6
6
|
fabLabel: 'Ask AI',
|
|
7
7
|
placeholder: 'Ask a question... @ files, / skills',
|
|
8
|
-
emptyPrompt: '
|
|
8
|
+
emptyPrompt: 'How can I help?',
|
|
9
|
+
emptyHint: 'Type @ to reference files · / to use skills',
|
|
9
10
|
send: 'send',
|
|
10
11
|
newlineHint: 'new line',
|
|
11
12
|
panelComposerResize: 'Drag up to enlarge the input area',
|
|
@@ -13,6 +14,8 @@ export const aiChatEn = {
|
|
|
13
14
|
panelComposerResetHint: 'Double-click to reset height',
|
|
14
15
|
panelComposerKeyboard: 'Arrow keys adjust height; Home/End min/max',
|
|
15
16
|
attachFile: 'Context',
|
|
17
|
+
attachFileLabel: 'Document',
|
|
18
|
+
attachImageLabel: 'Image',
|
|
16
19
|
uploadedFiles: 'Uploaded',
|
|
17
20
|
skillsHint: 'skills',
|
|
18
21
|
attachCurrent: 'attach current file',
|
|
@@ -30,15 +33,23 @@ export const aiChatEn = {
|
|
|
30
33
|
retry: 'Retry',
|
|
31
34
|
suggestions: [
|
|
32
35
|
'Summarize this document',
|
|
33
|
-
'
|
|
34
|
-
'
|
|
35
|
-
'
|
|
36
|
+
'Organize my recent notes',
|
|
37
|
+
'Find related notes',
|
|
38
|
+
'Draft a new note',
|
|
36
39
|
],
|
|
40
|
+
modeChat: 'Chat',
|
|
41
|
+
modeAgent: 'Agent',
|
|
42
|
+
modeChatHint: 'Can search / read KB · saves tokens',
|
|
43
|
+
modeAgentHint: 'Full tool access · can modify KB',
|
|
37
44
|
sessionHistory: 'Session History',
|
|
38
45
|
clearAll: 'Clear all',
|
|
39
46
|
confirmClear: 'Confirm clear?',
|
|
40
47
|
noSessions: 'No saved sessions.',
|
|
48
|
+
renameSession: 'Rename',
|
|
41
49
|
draftingHint: 'AI is still running — you can draft the next step now.',
|
|
50
|
+
providerCapsule: 'Switch model provider',
|
|
51
|
+
providerDefault: 'Default',
|
|
52
|
+
providerNoKey: 'No configured providers',
|
|
42
53
|
},
|
|
43
54
|
changes: {
|
|
44
55
|
unreadBanner: (n: number) => `${n} content change${n === 1 ? '' : 's'} unread`,
|
|
@@ -97,8 +108,8 @@ export const aiChatEn = {
|
|
|
97
108
|
sessionHistory: 'Session history',
|
|
98
109
|
newSession: 'New session',
|
|
99
110
|
attachFile: 'Attach local file',
|
|
100
|
-
maximizePanel: '
|
|
101
|
-
restorePanel: '
|
|
111
|
+
maximizePanel: 'Focus mode',
|
|
112
|
+
restorePanel: 'Exit focus',
|
|
102
113
|
dockToSide: 'Dock to side panel',
|
|
103
114
|
openAsPopup: 'Open as popup',
|
|
104
115
|
closePanel: 'Close',
|
|
@@ -112,7 +123,8 @@ export const aiChatZh = {
|
|
|
112
123
|
title: 'MindOS Agent',
|
|
113
124
|
fabLabel: 'AI 助手',
|
|
114
125
|
placeholder: '输入问题… @ 附加文件,/ 技能',
|
|
115
|
-
emptyPrompt: '
|
|
126
|
+
emptyPrompt: '有什么可以帮你?',
|
|
127
|
+
emptyHint: '输入 @ 引用文件 · / 使用技能',
|
|
116
128
|
send: '发送',
|
|
117
129
|
newlineHint: '换行',
|
|
118
130
|
panelComposerResize: '向上拖拽以拉高输入区',
|
|
@@ -120,6 +132,8 @@ export const aiChatZh = {
|
|
|
120
132
|
panelComposerResetHint: '双击恢复默认高度',
|
|
121
133
|
panelComposerKeyboard: '方向键调节高度;Home/End 最小或最大',
|
|
122
134
|
attachFile: '上下文',
|
|
135
|
+
attachFileLabel: '文档',
|
|
136
|
+
attachImageLabel: '图片',
|
|
123
137
|
uploadedFiles: '已上传',
|
|
124
138
|
skillsHint: '技能',
|
|
125
139
|
attachCurrent: '附加当前文件',
|
|
@@ -137,15 +151,23 @@ export const aiChatZh = {
|
|
|
137
151
|
retry: '重试',
|
|
138
152
|
suggestions: [
|
|
139
153
|
'总结这篇文档',
|
|
140
|
-
'
|
|
141
|
-
'
|
|
142
|
-
'
|
|
154
|
+
'整理最近的笔记',
|
|
155
|
+
'查找相关笔记',
|
|
156
|
+
'起草一篇新笔记',
|
|
143
157
|
],
|
|
158
|
+
modeChat: '对话',
|
|
159
|
+
modeAgent: 'Agent',
|
|
160
|
+
modeChatHint: '可搜索/阅读知识库 · 省 token',
|
|
161
|
+
modeAgentHint: '完整工具权限 · 可修改知识库',
|
|
144
162
|
sessionHistory: '对话历史',
|
|
145
163
|
clearAll: '清除全部',
|
|
146
164
|
confirmClear: '确认清除?',
|
|
147
165
|
noSessions: '暂无历史对话。',
|
|
166
|
+
renameSession: '重命名',
|
|
148
167
|
draftingHint: 'AI 仍在执行,你可以先输入下一步。',
|
|
168
|
+
providerCapsule: '切换模型服务商',
|
|
169
|
+
providerDefault: '默认',
|
|
170
|
+
providerNoKey: '暂无已配置的服务商',
|
|
149
171
|
},
|
|
150
172
|
changes: {
|
|
151
173
|
unreadBanner: (n: number) => `${n} 条内容变更未读`,
|
|
@@ -162,7 +184,7 @@ export const aiChatZh = {
|
|
|
162
184
|
filePath: '文件路径',
|
|
163
185
|
filePathPlaceholder: '例如:Projects/plan.md',
|
|
164
186
|
source: 'Agents(来源)',
|
|
165
|
-
operation: '
|
|
187
|
+
operation: '工具(操作)',
|
|
166
188
|
operationAll: '全部操作',
|
|
167
189
|
keyword: '关键词',
|
|
168
190
|
keywordPlaceholder: '摘要 / 操作 / 路径',
|
|
@@ -204,8 +226,8 @@ export const aiChatZh = {
|
|
|
204
226
|
sessionHistory: '会话历史',
|
|
205
227
|
newSession: '新会话',
|
|
206
228
|
attachFile: '附加本地文件',
|
|
207
|
-
maximizePanel: '
|
|
208
|
-
restorePanel: '
|
|
229
|
+
maximizePanel: '专注模式',
|
|
230
|
+
restorePanel: '退出专注',
|
|
209
231
|
dockToSide: '停靠到侧边栏',
|
|
210
232
|
openAsPopup: '弹窗模式',
|
|
211
233
|
closePanel: '关闭',
|
|
@@ -24,7 +24,7 @@ export const featuresEn = {
|
|
|
24
24
|
step2Title: 'Chat with AI',
|
|
25
25
|
step2Desc: 'Press ⌘/ (or Ctrl/) to open the AI panel. Ask anything about your knowledge base, or use @ to attach a specific file for context.',
|
|
26
26
|
step3Title: 'Connect your AI agents',
|
|
27
|
-
step3Desc: 'Go to Settings →
|
|
27
|
+
step3Desc: 'Go to Settings → Connections to connect external agents like Claude Code, Cursor, or Windsurf. Once connected, they can read and write your knowledge base directly.',
|
|
28
28
|
},
|
|
29
29
|
concepts: {
|
|
30
30
|
title: 'Core Concepts',
|
|
@@ -63,7 +63,7 @@ export const featuresEn = {
|
|
|
63
63
|
title: 'FAQ',
|
|
64
64
|
items: [
|
|
65
65
|
{ q: 'How do I change the language?', a: 'Go to Settings → Appearance → Language. You can switch between English and Chinese.' },
|
|
66
|
-
{ q: 'How do I connect an AI agent?', a: 'Go to Settings →
|
|
66
|
+
{ q: 'How do I connect an AI agent?', a: 'Go to Settings → Connections. MindOS auto-detects installed agents (Claude Code, Cursor, etc.) and lets you connect them with one click.' },
|
|
67
67
|
{ q: 'Where is my data stored?', a: 'All your data stays on your local machine as plain Markdown files. MindOS never uploads your data to any cloud service. You own everything.' },
|
|
68
68
|
{ q: 'How do I sync across devices?', a: 'Go to Settings → Sync. MindOS uses Git for cross-device sync. Enter your Git remote URL and access token to start syncing.' },
|
|
69
69
|
{ q: 'Can I use my own AI provider?', a: 'Yes! Go to Settings → AI. You can use OpenAI, Anthropic, Google, or any OpenAI-compatible API with a custom base URL.' },
|
|
@@ -96,11 +96,11 @@ export const featuresZh = {
|
|
|
96
96
|
quickStart: {
|
|
97
97
|
title: '快速开始',
|
|
98
98
|
step1Title: '浏览你的知识库',
|
|
99
|
-
step1Desc: '点击左侧边栏的"空间"图标来浏览你的文件。每个顶级文件夹是一个"空间"
|
|
99
|
+
step1Desc: '点击左侧边栏的"空间"图标来浏览你的文件。每个顶级文件夹是一个"空间"——比如个人档案、笔记或项目。',
|
|
100
100
|
step2Title: '和 AI 对话',
|
|
101
101
|
step2Desc: '按 ⌘/(或 Ctrl/)打开 AI 面板。询问任何关于知识库的问题,或使用 @ 附加特定文件作为上下文。',
|
|
102
102
|
step3Title: '连接你的 AI Agent',
|
|
103
|
-
step3Desc: '前往 设置 →
|
|
103
|
+
step3Desc: '前往 设置 → 连接 以连接外部 Agent,如 Claude Code、Cursor 或 Windsurf。连接后,它们可以直接读写你的知识库。',
|
|
104
104
|
},
|
|
105
105
|
concepts: {
|
|
106
106
|
title: '核心概念',
|
|
@@ -139,7 +139,7 @@ export const featuresZh = {
|
|
|
139
139
|
title: '常见问题',
|
|
140
140
|
items: [
|
|
141
141
|
{ q: '如何切换语言?', a: '前往 设置 → 外观 → 语言。支持中文和英文切换。' },
|
|
142
|
-
{ q: '如何连接 AI Agent?', a: '前往 设置 →
|
|
142
|
+
{ q: '如何连接 AI Agent?', a: '前往 设置 → 连接。MindOS 会自动检测已安装的 Agent(Claude Code、Cursor 等),一键即可连接。' },
|
|
143
143
|
{ q: '我的数据存储在哪里?', a: '所有数据以纯 Markdown 文件的形式存储在你的本地机器上。MindOS 不会将你的数据上传到任何云服务。数据完全由你掌控。' },
|
|
144
144
|
{ q: '如何跨设备同步?', a: '前往 设置 → 同步。MindOS 使用 Git 进行跨设备同步。输入 Git 远程仓库 URL 和访问令牌即可开始同步。' },
|
|
145
145
|
{ q: '可以使用自己的 AI 服务商吗?', a: '可以!前往 设置 → AI。支持 OpenAI、Anthropic、Google,或任何 OpenAI 兼容的 API(自定义 Base URL)。' },
|