@geminilight/mindos 0.6.38 → 0.6.40
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 +37 -9
- package/README_zh.md +37 -9
- package/_standalone/.mindos-build-version +1 -1
- package/_standalone/.next/BUILD_ID +1 -1
- package/_standalone/.next/app-path-routes-manifest.json +21 -20
- 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 -6
- 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 +133 -95
- 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_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 +21 -20
- package/_standalone/.next/server/chunks/1550.js +1 -1
- package/_standalone/.next/server/chunks/1750.js +1 -0
- package/_standalone/.next/server/chunks/1955.js +11 -0
- package/_standalone/.next/server/chunks/3680.js +1 -0
- package/_standalone/.next/server/chunks/4497.js +219 -0
- package/_standalone/.next/server/chunks/5560.js +2 -0
- package/_standalone/.next/server/chunks/6365.js +52 -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/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/next-font-manifest.js +1 -1
- package/_standalone/.next/server/next-font-manifest.json +1 -1
- package/_standalone/.next/server/pages/500.html +2 -2
- package/_standalone/.next/server/server-reference-manifest.js +1 -1
- package/_standalone/.next/server/server-reference-manifest.json +1 -1
- package/_standalone/.next/static/chunks/1053-0adaccc98a752a58.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/{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.4bcd01a4db78b894.js → 3637.f9a42cca59fd5bb5.js} +1 -1
- package/_standalone/.next/static/chunks/4033.6666700547b20141.js +1 -0
- package/_standalone/.next/static/chunks/4563-c2afaeacb241d1d0.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/6090-c98268ca726a68d3.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/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/{1384-55276d40a9da4e88.js → 8663-de911d2d395622be.js} +2 -2
- package/_standalone/.next/static/chunks/9300.118b8c840634383f.js +28 -0
- package/_standalone/.next/static/chunks/9371-575600301da5d6bb.js +1 -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-3e08abb495ecd5fd.js +1 -0
- package/_standalone/.next/static/chunks/app/agents/page-e7e0f87ad3d765ac.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-3d0e1ceaa4abc243.js +1 -0
- package/_standalone/.next/static/chunks/app/layout-9378c1c8d3e5761b.js +186 -0
- package/_standalone/.next/static/chunks/app/login/page-24236460fa7c11d0.js +1 -0
- package/_standalone/.next/static/chunks/app/page-9bae420fbbdc5fff.js +7 -0
- package/_standalone/.next/static/chunks/app/setup/page-99ed3d1bb6b8f4ef.js +1 -0
- package/_standalone/.next/static/chunks/app/trash/page-b61ef2d5cd4f8d73.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-44fa78cbea613a78.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-c28c55d0a6021a6b.js +1 -0
- package/_standalone/.next/static/css/d300701f384db50d.css +1 -0
- package/_standalone/.next/static/rZLs1krFuduixvcVNe6q3/_buildManifest.js +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 +9 -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__/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 +11 -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 +64 -79
- 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 +11 -1
- 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 +58 -22
- package/_standalone/components/SearchModal.tsx +1 -1
- package/_standalone/components/Sidebar.tsx +1 -1
- 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 +7 -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/agent-inspector/manifest.ts +16 -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 +1 -1
- package/_standalone/components/settings/McpSkillsSection.tsx +1 -1
- package/_standalone/components/settings/McpTab.tsx +145 -7
- package/_standalone/components/settings/PluginsTab.tsx +1 -1
- package/_standalone/components/settings/SettingsContent.tsx +5 -2
- package/_standalone/components/settings/SyncTab.tsx +615 -230
- package/_standalone/components/settings/UninstallTab.tsx +1 -1
- package/_standalone/components/settings/UpdateTab.tsx +373 -109
- package/_standalone/components/settings/types.ts +4 -5
- package/_standalone/components/setup/StepAI.tsx +70 -49
- package/_standalone/components/setup/StepDots.tsx +1 -1
- package/_standalone/components/setup/StepReview.tsx +176 -8
- package/_standalone/components/setup/types.ts +11 -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 +27 -12
- package/_standalone/data/skills/mindos-zh/SKILL.md +27 -12
- 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 +2 -2
- package/_standalone/lib/i18n/modules/knowledge.ts +82 -2
- package/_standalone/lib/i18n/modules/navigation.ts +6 -2
- package/_standalone/lib/i18n/modules/onboarding.ts +39 -9
- package/_standalone/lib/i18n/modules/panels.ts +78 -29
- package/_standalone/lib/i18n/modules/settings.ts +236 -20
- package/_standalone/lib/inbox-upload.ts +93 -0
- 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 +115 -31
- 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/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 +10 -10
- 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 +64 -79
- 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 +11 -1
- 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 +58 -22
- package/app/components/SearchModal.tsx +1 -1
- package/app/components/Sidebar.tsx +1 -1
- 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 +7 -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 +1 -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 +1 -1
- package/app/components/settings/McpSkillsSection.tsx +1 -1
- package/app/components/settings/McpTab.tsx +145 -7
- package/app/components/settings/PluginsTab.tsx +1 -1
- package/app/components/settings/SettingsContent.tsx +5 -2
- package/app/components/settings/SyncTab.tsx +615 -230
- package/app/components/settings/UninstallTab.tsx +1 -1
- package/app/components/settings/UpdateTab.tsx +373 -109
- package/app/components/settings/types.ts +4 -5
- package/app/components/setup/StepAI.tsx +70 -49
- package/app/components/setup/StepDots.tsx +1 -1
- package/app/components/setup/StepReview.tsx +176 -8
- package/app/components/setup/index.tsx +73 -39
- package/app/components/setup/types.ts +11 -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 +27 -12
- package/app/data/skills/mindos-zh/SKILL.md +27 -12
- 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 +26 -2
- package/app/lib/i18n/modules/ai-chat.ts +35 -13
- package/app/lib/i18n/modules/features.ts +2 -2
- package/app/lib/i18n/modules/knowledge.ts +82 -2
- package/app/lib/i18n/modules/navigation.ts +6 -2
- package/app/lib/i18n/modules/onboarding.ts +39 -9
- package/app/lib/i18n/modules/panels.ts +78 -29
- package/app/lib/i18n/modules/settings.ts +236 -20
- package/app/lib/inbox-upload.ts +93 -0
- package/app/lib/mcp-agents.ts +6 -7
- package/app/lib/renderers/index.ts +1 -2
- 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 +46 -27
- package/bin/commands/file.js +7 -4
- package/bin/commands/space.js +4 -0
- package/bin/lib/mcp-agents.js +26 -2
- package/bin/lib/mcp-install.js +11 -3
- 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 +1 -1
- package/scripts/build-runtime-archive.sh +113 -0
- package/scripts/setup.js +1 -1
- package/skills/mindos/SKILL.md +27 -12
- package/skills/mindos/references/preference-capture.md +4 -4
- package/skills/mindos/references/write-supplement.md +46 -4
- package/skills/mindos-zh/SKILL.md +27 -12
- package/skills/mindos-zh/references/preference-capture.md +4 -4
- package/skills/mindos-zh/references/write-supplement.md +47 -5
- 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/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/server/chunks/8407.js +0 -52
- package/_standalone/.next/server/chunks/9414.js +0 -11
- package/_standalone/.next/static/VAb8MoUUpoXjVJalRJogO/_buildManifest.js +0 -1
- package/_standalone/.next/static/chunks/1038-ed04d6651ec92312.js +0 -1
- package/_standalone/.next/static/chunks/1263-79beb8734dee7bbd.js +0 -25
- package/_standalone/.next/static/chunks/275-ebcaaedabe706903.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-aab90c2b4faf8d57.js +0 -173
- package/_standalone/.next/static/chunks/app/login/page-321875768b70938a.js +0 -1
- package/_standalone/.next/static/chunks/app/page-9a15cf85f0962c59.js +0 -7
- package/_standalone/.next/static/chunks/app/setup/page-01ab1f549d636057.js +0 -1
- package/_standalone/.next/static/chunks/app/trash/page-7df0139c6b0f87e0.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-35811d7e49e08157.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/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/{VAb8MoUUpoXjVJalRJogO → rZLs1krFuduixvcVNe6q3}/_ssgManifest.js +0 -0
package/mcp/package.json
CHANGED
|
@@ -10,12 +10,12 @@
|
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@modelcontextprotocol/sdk": "^1.25.0",
|
|
13
|
-
"tsx": "^4.19.0",
|
|
14
13
|
"zod": "^3.23.8"
|
|
15
14
|
},
|
|
16
15
|
"devDependencies": {
|
|
17
16
|
"@types/node": "^22",
|
|
18
17
|
"esbuild": "^0.25.0",
|
|
18
|
+
"tsx": "^4.19.0",
|
|
19
19
|
"typescript": "^5"
|
|
20
20
|
}
|
|
21
21
|
}
|
package/mcp/src/index.ts
CHANGED
|
@@ -30,31 +30,33 @@ const MCP_PORT = parseInt(process.env.MCP_PORT ?? "8781", 10);
|
|
|
30
30
|
const MCP_ENDPOINT = process.env.MCP_ENDPOINT ?? "/mcp";
|
|
31
31
|
const CHARACTER_LIMIT = 25_000;
|
|
32
32
|
|
|
33
|
-
function headers(): Record<string, string> {
|
|
33
|
+
function headers(agentName?: string): Record<string, string> {
|
|
34
34
|
const h: Record<string, string> = { "Content-Type": "application/json" };
|
|
35
35
|
if (AUTH_TOKEN) h["Authorization"] = `Bearer ${AUTH_TOKEN}`;
|
|
36
|
+
// Sanitize: strip control chars, limit to 100 chars
|
|
37
|
+
if (agentName) h["x-mindos-agent"] = agentName.replace(/[\x00-\x1f]/g, '').slice(0, 100);
|
|
36
38
|
return h;
|
|
37
39
|
}
|
|
38
40
|
|
|
39
41
|
// ─── HTTP helpers ────────────────────────────────────────────────────────────
|
|
40
42
|
|
|
41
|
-
async function get(path: string, params?: Record<string, string
|
|
43
|
+
async function get(path: string, params?: Record<string, string>, agentName?: string): Promise<Record<string, unknown>> {
|
|
42
44
|
const url = new URL(path, BASE_URL);
|
|
43
45
|
if (params) {
|
|
44
46
|
for (const [k, v] of Object.entries(params)) {
|
|
45
47
|
if (v !== undefined && v !== null) url.searchParams.set(k, v);
|
|
46
48
|
}
|
|
47
49
|
}
|
|
48
|
-
const res = await fetch(url.toString(), { headers: headers() });
|
|
50
|
+
const res = await fetch(url.toString(), { headers: headers(agentName) });
|
|
49
51
|
const json = await res.json() as Record<string, unknown>;
|
|
50
52
|
if (!res.ok) throw new Error((json.error as string) ?? `HTTP ${res.status}`);
|
|
51
53
|
return json;
|
|
52
54
|
}
|
|
53
55
|
|
|
54
|
-
async function post(path: string, body: Record<string, unknown
|
|
56
|
+
async function post(path: string, body: Record<string, unknown>, agentName?: string): Promise<Record<string, unknown>> {
|
|
55
57
|
const res = await fetch(new URL(path, BASE_URL).toString(), {
|
|
56
58
|
method: "POST",
|
|
57
|
-
headers: headers(),
|
|
59
|
+
headers: headers(agentName),
|
|
58
60
|
body: JSON.stringify(body),
|
|
59
61
|
});
|
|
60
62
|
const json = await res.json() as Record<string, unknown>;
|
|
@@ -77,14 +79,14 @@ function truncate(text: string, limit = CHARACTER_LIMIT): string {
|
|
|
77
79
|
|
|
78
80
|
// ─── Agent operation logging ────────────────────────────────────────────────
|
|
79
81
|
|
|
80
|
-
async function logOp(tool: string, params: Record<string, unknown>, result: 'ok' | 'error', message: string) {
|
|
82
|
+
async function logOp(tool: string, params: Record<string, unknown>, result: 'ok' | 'error', message: string, agentName?: string) {
|
|
81
83
|
try {
|
|
82
|
-
const entry = { ts: new Date().toISOString(), tool, params, result, message: message.slice(0, 200) };
|
|
84
|
+
const entry = { ts: new Date().toISOString(), tool, params, result, message: message.slice(0, 200), agentName: agentName || undefined };
|
|
83
85
|
const line = JSON.stringify(entry) + '\n';
|
|
84
86
|
// Append to .agent-log.json via the app API
|
|
85
87
|
await fetch(new URL("/api/file", BASE_URL).toString(), {
|
|
86
88
|
method: "POST",
|
|
87
|
-
headers: headers(),
|
|
89
|
+
headers: headers(agentName),
|
|
88
90
|
body: JSON.stringify({ op: "append_to_file", path: ".agent-log.json", content: line }),
|
|
89
91
|
}).catch(() => {});
|
|
90
92
|
} catch {
|
|
@@ -96,6 +98,17 @@ async function logOp(tool: string, params: Record<string, unknown>, result: 'ok'
|
|
|
96
98
|
|
|
97
99
|
function registerTools(server: McpServer) {
|
|
98
100
|
|
|
101
|
+
/** Get the MCP client name for this server session (e.g. "claude-code", "cursor"). */
|
|
102
|
+
function clientName(): string | undefined {
|
|
103
|
+
return server.server.getClientVersion()?.name || undefined;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Session-aware wrappers that auto-inject client identity into every API call
|
|
107
|
+
const _get = (path: string, params?: Record<string, string>) => get(path, params, clientName());
|
|
108
|
+
const _post = (path: string, body: Record<string, unknown>) => post(path, body, clientName());
|
|
109
|
+
const _logOp = (tool: string, params: Record<string, unknown>, result: 'ok' | 'error', msg: string) =>
|
|
110
|
+
logOp(tool, params, result, msg, clientName());
|
|
111
|
+
|
|
99
112
|
// ── mindos_list_files ───────────────────────────────────────────────────────
|
|
100
113
|
|
|
101
114
|
server.registerTool("mindos_list_files", {
|
|
@@ -107,11 +120,11 @@ server.registerTool("mindos_list_files", {
|
|
|
107
120
|
annotations: { readOnlyHint: true },
|
|
108
121
|
}, async ({ response_format }) => {
|
|
109
122
|
try {
|
|
110
|
-
const json = await
|
|
123
|
+
const json = await _get("/api/files", { format: response_format });
|
|
111
124
|
const result = typeof json.tree === "string" ? json.tree : JSON.stringify(json.tree ?? json, null, 2);
|
|
112
|
-
|
|
125
|
+
_logOp("mindos_list_files", { response_format }, "ok", `${result.length} chars`);
|
|
113
126
|
return ok(result);
|
|
114
|
-
} catch (e) {
|
|
127
|
+
} catch (e) { _logOp("mindos_list_files", { response_format }, "error", String(e)); return error(String(e)); }
|
|
115
128
|
});
|
|
116
129
|
|
|
117
130
|
// ── mindos_list_spaces ──────────────────────────────────────────────────────
|
|
@@ -126,20 +139,20 @@ server.registerTool("mindos_list_spaces", {
|
|
|
126
139
|
annotations: { readOnlyHint: true },
|
|
127
140
|
}, async ({ response_format }) => {
|
|
128
141
|
try {
|
|
129
|
-
const json = await
|
|
142
|
+
const json = await _get("/api/file", { op: "list_spaces" });
|
|
130
143
|
const spaces = json.spaces as Array<{ name: string; path: string; fileCount: number; description: string }>;
|
|
131
144
|
if (response_format === "json") {
|
|
132
|
-
|
|
145
|
+
_logOp("mindos_list_spaces", { response_format }, "ok", `${spaces?.length ?? 0} spaces`);
|
|
133
146
|
return ok(JSON.stringify({ spaces: spaces ?? [] }, null, 2));
|
|
134
147
|
}
|
|
135
148
|
const lines = (spaces ?? []).map(
|
|
136
149
|
(s) => `- **${s.name}** (\`${s.path}/\`) — ${s.fileCount} file(s)${s.description ? ` — ${s.description}` : ""}`,
|
|
137
150
|
);
|
|
138
151
|
const text = lines.length ? lines.join("\n") : "(no top-level spaces in tree)";
|
|
139
|
-
|
|
152
|
+
_logOp("mindos_list_spaces", { response_format }, "ok", `${spaces?.length ?? 0} spaces`);
|
|
140
153
|
return ok(text);
|
|
141
154
|
} catch (e) {
|
|
142
|
-
|
|
155
|
+
_logOp("mindos_list_spaces", { response_format }, "error", String(e));
|
|
143
156
|
return error(String(e));
|
|
144
157
|
}
|
|
145
158
|
});
|
|
@@ -157,16 +170,16 @@ server.registerTool("mindos_read_file", {
|
|
|
157
170
|
annotations: { readOnlyHint: true },
|
|
158
171
|
}, async ({ path, offset, limit }) => {
|
|
159
172
|
try {
|
|
160
|
-
const json = await
|
|
173
|
+
const json = await _get("/api/file", { path, op: "read_file" });
|
|
161
174
|
const content = json.content as string;
|
|
162
175
|
const slice = content.slice(offset, offset + limit);
|
|
163
176
|
const hasMore = offset + limit < content.length;
|
|
164
177
|
const header = hasMore
|
|
165
178
|
? `[Showing characters ${offset}–${offset + slice.length} of ${content.length}. Use offset=${offset + limit} for next page.]\n\n`
|
|
166
179
|
: offset > 0 ? `[Showing characters ${offset}–${offset + slice.length} of ${content.length}]\n\n` : "";
|
|
167
|
-
|
|
180
|
+
_logOp("mindos_read_file", { path }, "ok", `${content.length} chars`);
|
|
168
181
|
return ok(header + slice);
|
|
169
|
-
} catch (e) {
|
|
182
|
+
} catch (e) { _logOp("mindos_read_file", { path }, "error", String(e)); return error(String(e)); }
|
|
170
183
|
});
|
|
171
184
|
|
|
172
185
|
// ── mindos_write_file ───────────────────────────────────────────────────────
|
|
@@ -180,10 +193,10 @@ server.registerTool("mindos_write_file", {
|
|
|
180
193
|
}),
|
|
181
194
|
}, async ({ path, content }) => {
|
|
182
195
|
try {
|
|
183
|
-
await
|
|
184
|
-
|
|
196
|
+
await _post("/api/file", { op: "save_file", path, content });
|
|
197
|
+
_logOp("mindos_write_file", { path }, "ok", `Wrote ${content.length} chars`);
|
|
185
198
|
return ok(`Successfully wrote ${content.length} characters to "${path}"`);
|
|
186
|
-
} catch (e) {
|
|
199
|
+
} catch (e) { _logOp("mindos_write_file", { path }, "error", String(e)); return error(String(e)); }
|
|
187
200
|
});
|
|
188
201
|
|
|
189
202
|
// ── mindos_create_file ──────────────────────────────────────────────────────
|
|
@@ -197,10 +210,10 @@ server.registerTool("mindos_create_file", {
|
|
|
197
210
|
}),
|
|
198
211
|
}, async ({ path, content }) => {
|
|
199
212
|
try {
|
|
200
|
-
await
|
|
201
|
-
|
|
213
|
+
await _post("/api/file", { op: "create_file", path, content });
|
|
214
|
+
_logOp("mindos_create_file", { path }, "ok", `Created ${content.length} chars`);
|
|
202
215
|
return ok(`Created "${path}" (${content.length} characters)`);
|
|
203
|
-
} catch (e) {
|
|
216
|
+
} catch (e) { _logOp("mindos_create_file", { path }, "error", String(e)); return error(String(e)); }
|
|
204
217
|
});
|
|
205
218
|
|
|
206
219
|
// ── mindos_batch_create_files ────────────────────────────────────────────────
|
|
@@ -220,7 +233,7 @@ server.registerTool("mindos_batch_create_files", {
|
|
|
220
233
|
const errors: string[] = [];
|
|
221
234
|
for (const file of files) {
|
|
222
235
|
try {
|
|
223
|
-
await
|
|
236
|
+
await _post("/api/file", { op: "create_file", path: file.path, content: file.content });
|
|
224
237
|
created.push(file.path);
|
|
225
238
|
} catch (e) {
|
|
226
239
|
errors.push(`${file.path}: ${String(e)}`);
|
|
@@ -228,7 +241,7 @@ server.registerTool("mindos_batch_create_files", {
|
|
|
228
241
|
}
|
|
229
242
|
let msg = `Batch creation complete.\nCreated ${created.length} file(s): ${created.join(", ")}`;
|
|
230
243
|
if (errors.length > 0) msg += `\n\nFailed to create ${errors.length} file(s):\n${errors.join("\n")}`;
|
|
231
|
-
|
|
244
|
+
_logOp("mindos_batch_create_files", { count: files.length }, created.length === files.length ? "ok" : "error", msg.slice(0, 200));
|
|
232
245
|
return created.length === files.length ? ok(msg) : error(msg);
|
|
233
246
|
});
|
|
234
247
|
|
|
@@ -245,7 +258,7 @@ server.registerTool("mindos_create_space", {
|
|
|
245
258
|
}),
|
|
246
259
|
}, async ({ name, description, parent_path }) => {
|
|
247
260
|
try {
|
|
248
|
-
const json = await
|
|
261
|
+
const json = await _post("/api/file", {
|
|
249
262
|
op: "create_space",
|
|
250
263
|
path: "_",
|
|
251
264
|
name,
|
|
@@ -253,10 +266,10 @@ server.registerTool("mindos_create_space", {
|
|
|
253
266
|
parent_path,
|
|
254
267
|
});
|
|
255
268
|
const p = json.path as string;
|
|
256
|
-
|
|
269
|
+
_logOp("mindos_create_space", { name, parent_path }, "ok", p);
|
|
257
270
|
return ok(`Created Mind Space at "${p}"`);
|
|
258
271
|
} catch (e) {
|
|
259
|
-
|
|
272
|
+
_logOp("mindos_create_space", { name, parent_path }, "error", String(e));
|
|
260
273
|
return error(String(e));
|
|
261
274
|
}
|
|
262
275
|
});
|
|
@@ -273,11 +286,11 @@ server.registerTool("mindos_rename_space", {
|
|
|
273
286
|
}),
|
|
274
287
|
}, async ({ path: spacePath, new_name }) => {
|
|
275
288
|
try {
|
|
276
|
-
const json = await
|
|
277
|
-
|
|
289
|
+
const json = await _post("/api/file", { op: "rename_space", path: spacePath, new_name });
|
|
290
|
+
_logOp("mindos_rename_space", { path: spacePath, new_name }, "ok", String(json.newPath));
|
|
278
291
|
return ok(`Renamed space "${spacePath}" → "${json.newPath}"`);
|
|
279
292
|
} catch (e) {
|
|
280
|
-
|
|
293
|
+
_logOp("mindos_rename_space", { path: spacePath, new_name }, "error", String(e));
|
|
281
294
|
return error(String(e));
|
|
282
295
|
}
|
|
283
296
|
});
|
|
@@ -286,17 +299,18 @@ server.registerTool("mindos_rename_space", {
|
|
|
286
299
|
|
|
287
300
|
server.registerTool("mindos_delete_file", {
|
|
288
301
|
title: "Delete File",
|
|
289
|
-
description: "
|
|
302
|
+
description: "Delete a file from the knowledge base. The file is moved to trash and can be recovered within 30 days.",
|
|
290
303
|
inputSchema: z.object({
|
|
291
304
|
path: z.string().min(1),
|
|
292
305
|
}),
|
|
293
306
|
annotations: { destructiveHint: true },
|
|
294
307
|
}, async ({ path }) => {
|
|
295
308
|
try {
|
|
296
|
-
await
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
309
|
+
const res = await _post("/api/file", { op: "delete_file", path });
|
|
310
|
+
const trashId = res?.trashId ? ` (trashId: ${res.trashId})` : '';
|
|
311
|
+
_logOp("mindos_delete_file", { path }, "ok", `Moved to trash: "${path}"${trashId}`);
|
|
312
|
+
return ok(`Moved to trash: "${path}"${trashId}`);
|
|
313
|
+
} catch (e) { _logOp("mindos_delete_file", { path }, "error", String(e)); return error(String(e)); }
|
|
300
314
|
});
|
|
301
315
|
|
|
302
316
|
// ── mindos_rename_file ──────────────────────────────────────────────────────
|
|
@@ -310,7 +324,7 @@ server.registerTool("mindos_rename_file", {
|
|
|
310
324
|
}),
|
|
311
325
|
}, async ({ path, new_name }) => {
|
|
312
326
|
try {
|
|
313
|
-
const json = await
|
|
327
|
+
const json = await _post("/api/file", { op: "rename_file", path, new_name });
|
|
314
328
|
return ok(`Renamed "${path}" → "${json.newPath}"`);
|
|
315
329
|
} catch (e) { return error(String(e)); }
|
|
316
330
|
});
|
|
@@ -326,7 +340,7 @@ server.registerTool("mindos_move_file", {
|
|
|
326
340
|
}),
|
|
327
341
|
}, async ({ from_path, to_path }) => {
|
|
328
342
|
try {
|
|
329
|
-
const json = await
|
|
343
|
+
const json = await _post("/api/file", { op: "move_file", path: from_path, to_path });
|
|
330
344
|
const affected = json.affectedFiles as string[] ?? [];
|
|
331
345
|
const lines = [`Moved "${from_path}" → "${json.newPath}"`];
|
|
332
346
|
if (affected.length > 0) {
|
|
@@ -358,10 +372,10 @@ server.registerTool("mindos_search_notes", {
|
|
|
358
372
|
if (file_type !== "all") params.file_type = file_type;
|
|
359
373
|
if (modified_after) params.modified_after = modified_after;
|
|
360
374
|
if (response_format) params.format = response_format;
|
|
361
|
-
const json = await
|
|
362
|
-
|
|
375
|
+
const json = await _get("/api/search", params);
|
|
376
|
+
_logOp("mindos_search_notes", { query, limit }, "ok", `Search completed`);
|
|
363
377
|
return ok(truncate(JSON.stringify(json, null, 2)));
|
|
364
|
-
} catch (e) {
|
|
378
|
+
} catch (e) { _logOp("mindos_search_notes", { query }, "error", String(e)); return error(String(e)); }
|
|
365
379
|
});
|
|
366
380
|
|
|
367
381
|
// ── mindos_get_recent ───────────────────────────────────────────────────────
|
|
@@ -376,7 +390,7 @@ server.registerTool("mindos_get_recent", {
|
|
|
376
390
|
annotations: { readOnlyHint: true },
|
|
377
391
|
}, async ({ limit, response_format }) => {
|
|
378
392
|
try {
|
|
379
|
-
const json = await
|
|
393
|
+
const json = await _get("/api/recent-files", { limit: String(limit), format: response_format });
|
|
380
394
|
return ok(JSON.stringify(json, null, 2));
|
|
381
395
|
} catch (e) { return error(String(e)); }
|
|
382
396
|
});
|
|
@@ -392,7 +406,7 @@ server.registerTool("mindos_read_lines", {
|
|
|
392
406
|
annotations: { readOnlyHint: true },
|
|
393
407
|
}, async ({ path }) => {
|
|
394
408
|
try {
|
|
395
|
-
const json = await
|
|
409
|
+
const json = await _get("/api/file", { path, op: "read_lines" });
|
|
396
410
|
const lines = json.lines as string[];
|
|
397
411
|
const numbered = lines.map((l, i) => `${i}: ${l}`).join("\n");
|
|
398
412
|
return ok(`${lines.length} lines total:\n\n${numbered}`);
|
|
@@ -411,7 +425,7 @@ server.registerTool("mindos_insert_lines", {
|
|
|
411
425
|
}),
|
|
412
426
|
}, async ({ path, after_index, lines }) => {
|
|
413
427
|
try {
|
|
414
|
-
await
|
|
428
|
+
await _post("/api/file", { op: "insert_lines", path, after_index, lines });
|
|
415
429
|
return ok(`Inserted ${lines.length} line(s) after index ${after_index} in "${path}"`);
|
|
416
430
|
} catch (e) { return error(String(e)); }
|
|
417
431
|
});
|
|
@@ -429,7 +443,7 @@ server.registerTool("mindos_update_lines", {
|
|
|
429
443
|
}),
|
|
430
444
|
}, async ({ path, start, end, lines }) => {
|
|
431
445
|
try {
|
|
432
|
-
await
|
|
446
|
+
await _post("/api/file", { op: "update_lines", path, start, end, lines });
|
|
433
447
|
return ok(`Replaced lines ${start}–${end} in "${path}" with ${lines.length} new line(s)`);
|
|
434
448
|
} catch (e) { return error(String(e)); }
|
|
435
449
|
});
|
|
@@ -445,10 +459,10 @@ server.registerTool("mindos_append_to_file", {
|
|
|
445
459
|
}),
|
|
446
460
|
}, async ({ path, content }) => {
|
|
447
461
|
try {
|
|
448
|
-
await
|
|
449
|
-
|
|
462
|
+
await _post("/api/file", { op: "append_to_file", path, content });
|
|
463
|
+
_logOp("mindos_append_to_file", { path }, "ok", `Appended ${content.length} chars`);
|
|
450
464
|
return ok(`Appended ${content.length} character(s) to "${path}"`);
|
|
451
|
-
} catch (e) {
|
|
465
|
+
} catch (e) { _logOp("mindos_append_to_file", { path }, "error", String(e)); return error(String(e)); }
|
|
452
466
|
});
|
|
453
467
|
|
|
454
468
|
// ── mindos_insert_after_heading ─────────────────────────────────────────────
|
|
@@ -463,10 +477,10 @@ server.registerTool("mindos_insert_after_heading", {
|
|
|
463
477
|
}),
|
|
464
478
|
}, async ({ path, heading, content }) => {
|
|
465
479
|
try {
|
|
466
|
-
await
|
|
467
|
-
|
|
480
|
+
await _post("/api/file", { op: "insert_after_heading", path, heading, content });
|
|
481
|
+
_logOp("mindos_insert_after_heading", { path, heading }, "ok", `Inserted after "${heading}"`);
|
|
468
482
|
return ok(`Inserted content after heading "${heading}" in "${path}"`);
|
|
469
|
-
} catch (e) {
|
|
483
|
+
} catch (e) { _logOp("mindos_insert_after_heading", { path, heading }, "error", String(e)); return error(String(e)); }
|
|
470
484
|
});
|
|
471
485
|
|
|
472
486
|
// ── mindos_update_section ───────────────────────────────────────────────────
|
|
@@ -481,10 +495,10 @@ server.registerTool("mindos_update_section", {
|
|
|
481
495
|
}),
|
|
482
496
|
}, async ({ path, heading, content }) => {
|
|
483
497
|
try {
|
|
484
|
-
await
|
|
485
|
-
|
|
498
|
+
await _post("/api/file", { op: "update_section", path, heading, content });
|
|
499
|
+
_logOp("mindos_update_section", { path, heading }, "ok", `Updated section "${heading}"`);
|
|
486
500
|
return ok(`Updated section "${heading}" in "${path}"`);
|
|
487
|
-
} catch (e) {
|
|
501
|
+
} catch (e) { _logOp("mindos_update_section", { path, heading }, "error", String(e)); return error(String(e)); }
|
|
488
502
|
});
|
|
489
503
|
|
|
490
504
|
// ── mindos_append_csv ───────────────────────────────────────────────────────
|
|
@@ -498,7 +512,7 @@ server.registerTool("mindos_append_csv", {
|
|
|
498
512
|
}),
|
|
499
513
|
}, async ({ path, row }) => {
|
|
500
514
|
try {
|
|
501
|
-
const json = await
|
|
515
|
+
const json = await _post("/api/file", { op: "append_csv", path, row });
|
|
502
516
|
return ok(`Appended row to "${path}". File now has ${json.newRowCount} rows.`);
|
|
503
517
|
} catch (e) { return error(String(e)); }
|
|
504
518
|
});
|
|
@@ -514,7 +528,7 @@ server.registerTool("mindos_get_backlinks", {
|
|
|
514
528
|
annotations: { readOnlyHint: true },
|
|
515
529
|
}, async ({ path }) => {
|
|
516
530
|
try {
|
|
517
|
-
const json = await
|
|
531
|
+
const json = await _get("/api/backlinks", { path });
|
|
518
532
|
return ok(JSON.stringify(json, null, 2));
|
|
519
533
|
} catch (e) { return error(String(e)); }
|
|
520
534
|
});
|
|
@@ -532,7 +546,7 @@ server.registerTool("mindos_bootstrap", {
|
|
|
532
546
|
try {
|
|
533
547
|
const params: Record<string, string> = {};
|
|
534
548
|
if (target_dir) params.target_dir = target_dir;
|
|
535
|
-
const json = await
|
|
549
|
+
const json = await _get("/api/bootstrap", params);
|
|
536
550
|
const sections = Object.entries(json)
|
|
537
551
|
.filter(([, v]) => v !== undefined && v !== null)
|
|
538
552
|
.map(([key, val]) => `--- ${key} ---\n\n${val}`)
|
|
@@ -553,7 +567,7 @@ server.registerTool("mindos_get_history", {
|
|
|
553
567
|
annotations: { readOnlyHint: true },
|
|
554
568
|
}, async ({ path, limit }) => {
|
|
555
569
|
try {
|
|
556
|
-
const json = await
|
|
570
|
+
const json = await _get("/api/git", { op: "history", path, limit: String(limit) });
|
|
557
571
|
const entries = json.entries as Array<{ hash: string; date: string; message: string; author: string }>;
|
|
558
572
|
if (entries.length === 0) return ok(`No git history found for "${path}"`);
|
|
559
573
|
const lines = [`# Git History: ${path}`, "", `${entries.length} commit(s):`, ""];
|
|
@@ -576,7 +590,7 @@ server.registerTool("mindos_get_file_at_version", {
|
|
|
576
590
|
annotations: { readOnlyHint: true },
|
|
577
591
|
}, async ({ path, commit }) => {
|
|
578
592
|
try {
|
|
579
|
-
const json = await
|
|
593
|
+
const json = await _get("/api/git", { op: "show", path, commit });
|
|
580
594
|
const content = json.content as string;
|
|
581
595
|
return ok(truncate(`# ${path} @ ${commit.slice(0, 8)}\n\n${content}`));
|
|
582
596
|
} catch (e) { return error(String(e)); }
|
|
@@ -648,7 +662,9 @@ async function main() {
|
|
|
648
662
|
const sid = transport.sessionId;
|
|
649
663
|
if (sid) {
|
|
650
664
|
sessions.set(sid, { transport, server });
|
|
651
|
-
|
|
665
|
+
const client = server.server.getClientVersion();
|
|
666
|
+
const clientLabel = client?.name ? ` (${client.name})` : '';
|
|
667
|
+
console.error(`[MCP] New session ${sid.slice(0, 8)}${clientLabel} (${sessions.size} active)`);
|
|
652
668
|
}
|
|
653
669
|
});
|
|
654
670
|
|
package/package.json
CHANGED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Build a minimal MindOS runtime archive for Desktop Core Hot Update.
|
|
3
|
+
# Output: /tmp/mindos-runtime-{VERSION}.tar.gz (pre-built, ~32MB)
|
|
4
|
+
#
|
|
5
|
+
# Directory structure matches what ProcessManager + analyzeMindOsLayout expect:
|
|
6
|
+
# app/.next/standalone/server.js
|
|
7
|
+
# app/.next/standalone/node_modules/
|
|
8
|
+
# app/.next/standalone/.next/server/
|
|
9
|
+
# app/.next/standalone/.next/static/
|
|
10
|
+
# app/.next/standalone/public/
|
|
11
|
+
# app/.next/static/ (isBundledRuntimeIntact checks this)
|
|
12
|
+
# app/public/
|
|
13
|
+
# mcp/dist/index.cjs
|
|
14
|
+
# package.json
|
|
15
|
+
# bin/ templates/ skills/
|
|
16
|
+
set -euo pipefail
|
|
17
|
+
|
|
18
|
+
VERSION=$(node -p "require('./package.json').version")
|
|
19
|
+
WORK="/tmp/mindos-runtime-build-$$"
|
|
20
|
+
ARCHIVE="/tmp/mindos-runtime-${VERSION}.tar.gz"
|
|
21
|
+
rm -rf "$WORK"
|
|
22
|
+
|
|
23
|
+
echo "📦 Building MindOS runtime v${VERSION}..."
|
|
24
|
+
|
|
25
|
+
# ── Web server (standalone Next.js) ──
|
|
26
|
+
echo " Copying standalone..."
|
|
27
|
+
mkdir -p "$WORK/app/.next"
|
|
28
|
+
# Copy the entire standalone tree (server.js + node_modules + .next/server + .next/static + public)
|
|
29
|
+
cp -r app/.next/standalone "$WORK/app/.next/standalone"
|
|
30
|
+
# Remove dev artifacts that sneak into standalone
|
|
31
|
+
rm -rf "$WORK/app/.next/standalone/.next/cache" \
|
|
32
|
+
"$WORK/app/.next/standalone/.next/dev" \
|
|
33
|
+
"$WORK/app/.next/standalone/.next/diagnostics" \
|
|
34
|
+
"$WORK/app/.next/standalone/.next/types" \
|
|
35
|
+
"$WORK/app/.next/standalone/__tests__" \
|
|
36
|
+
"$WORK/app/.next/standalone/.next/lock"
|
|
37
|
+
# Copy static assets at top level (isBundledRuntimeIntact checks app/.next/static/)
|
|
38
|
+
cp -r app/.next/static "$WORK/app/.next/static"
|
|
39
|
+
# Copy public assets
|
|
40
|
+
mkdir -p "$WORK/app"
|
|
41
|
+
cp -r app/public "$WORK/app/public"
|
|
42
|
+
|
|
43
|
+
# ── MCP server ──
|
|
44
|
+
echo " Copying MCP..."
|
|
45
|
+
mkdir -p "$WORK/mcp/dist"
|
|
46
|
+
cp mcp/dist/index.cjs "$WORK/mcp/dist/"
|
|
47
|
+
[ -f mcp/package.json ] && cp mcp/package.json "$WORK/mcp/"
|
|
48
|
+
|
|
49
|
+
# ── Metadata + auxiliary files ──
|
|
50
|
+
echo " Copying metadata..."
|
|
51
|
+
cp package.json "$WORK/"
|
|
52
|
+
[ -d bin ] && cp -r bin "$WORK/"
|
|
53
|
+
[ -d templates ] && cp -r templates "$WORK/"
|
|
54
|
+
[ -d skills ] && cp -r skills "$WORK/"
|
|
55
|
+
|
|
56
|
+
# ── Package (flat, no outer directory) ──
|
|
57
|
+
echo " Creating archive..."
|
|
58
|
+
tar czf "$ARCHIVE" -C "$WORK" .
|
|
59
|
+
|
|
60
|
+
# ── Self-validation ──
|
|
61
|
+
echo " Validating..."
|
|
62
|
+
VERIFY="/tmp/mindos-runtime-verify-$$"
|
|
63
|
+
rm -rf "$VERIFY" && mkdir -p "$VERIFY"
|
|
64
|
+
tar xzf "$ARCHIVE" -C "$VERIFY"
|
|
65
|
+
|
|
66
|
+
ERRORS=0
|
|
67
|
+
for f in \
|
|
68
|
+
"app/.next/standalone/server.js" \
|
|
69
|
+
"app/.next/standalone/node_modules" \
|
|
70
|
+
"app/.next/standalone/.next/server" \
|
|
71
|
+
"app/.next/static" \
|
|
72
|
+
"mcp/dist/index.cjs" \
|
|
73
|
+
"package.json"; do
|
|
74
|
+
if [ ! -e "$VERIFY/$f" ]; then
|
|
75
|
+
echo " ❌ MISSING: $f"
|
|
76
|
+
ERRORS=$((ERRORS + 1))
|
|
77
|
+
fi
|
|
78
|
+
done
|
|
79
|
+
|
|
80
|
+
# Verify version in package.json matches
|
|
81
|
+
PKG_VER=$(node -p "require('$VERIFY/package.json').version" 2>/dev/null || echo "")
|
|
82
|
+
if [ "$PKG_VER" != "$VERSION" ]; then
|
|
83
|
+
echo " ❌ Version mismatch: package.json=$PKG_VER, expected=$VERSION"
|
|
84
|
+
ERRORS=$((ERRORS + 1))
|
|
85
|
+
fi
|
|
86
|
+
|
|
87
|
+
rm -rf "$VERIFY" "$WORK"
|
|
88
|
+
|
|
89
|
+
if [ "$ERRORS" -gt 0 ]; then
|
|
90
|
+
echo "❌ Validation failed with $ERRORS error(s)"
|
|
91
|
+
exit 1
|
|
92
|
+
fi
|
|
93
|
+
|
|
94
|
+
# ── Output info ──
|
|
95
|
+
if command -v sha256sum >/dev/null 2>&1; then
|
|
96
|
+
SHA256=$(sha256sum "$ARCHIVE" | cut -d' ' -f1)
|
|
97
|
+
else
|
|
98
|
+
SHA256=$(shasum -a 256 "$ARCHIVE" | cut -d' ' -f1)
|
|
99
|
+
fi
|
|
100
|
+
|
|
101
|
+
if command -v numfmt >/dev/null 2>&1; then
|
|
102
|
+
SIZE_HUMAN=$(stat -c%s "$ARCHIVE" | numfmt --to=iec)
|
|
103
|
+
SIZE_BYTES=$(stat -c%s "$ARCHIVE")
|
|
104
|
+
elif command -v stat >/dev/null 2>&1; then
|
|
105
|
+
SIZE_BYTES=$(stat -f%z "$ARCHIVE" 2>/dev/null || stat -c%s "$ARCHIVE" 2>/dev/null)
|
|
106
|
+
SIZE_HUMAN="${SIZE_BYTES} bytes"
|
|
107
|
+
fi
|
|
108
|
+
|
|
109
|
+
echo ""
|
|
110
|
+
echo "✅ mindos-runtime-${VERSION}.tar.gz"
|
|
111
|
+
echo " Size: ${SIZE_HUMAN} (${SIZE_BYTES} bytes)"
|
|
112
|
+
echo " SHA256: ${SHA256}"
|
|
113
|
+
echo " Path: ${ARCHIVE}"
|
package/scripts/setup.js
CHANGED
|
@@ -1228,7 +1228,7 @@ async function main() {
|
|
|
1228
1228
|
console.log(`\n${c.green(t('cfgSaved'))}: ${c.dim(CONFIG_PATH)}`);
|
|
1229
1229
|
|
|
1230
1230
|
// ── Skill rules are now built into SKILL.md — no install needed ──────────
|
|
1231
|
-
// user-
|
|
1231
|
+
// .mindos/user-preferences.md will be created on first preference capture or via `mindos init-skills`.
|
|
1232
1232
|
|
|
1233
1233
|
// ── Step 7: MCP Agent Install ──────────────────────────────────────────────
|
|
1234
1234
|
write('\n');
|
package/skills/mindos/SKILL.md
CHANGED
|
@@ -7,17 +7,21 @@ description: >
|
|
|
7
7
|
Use when the task targets files inside the user's MindOS KB (mindRoot).
|
|
8
8
|
NOT for editing app source, project docs, or paths outside the KB.
|
|
9
9
|
Core concepts: Space, Instruction (INSTRUCTION.md), Skill (SKILL.md); notes can embody both.
|
|
10
|
+
Trigger when user asks to: save or record a note, search their knowledge base, update or edit
|
|
11
|
+
a file, organize notes, run a workflow or SOP, capture decisions from a session, append rows
|
|
12
|
+
to a table or CSV, hand off context to another agent — or says "帮我记下来" / "搜一下我的笔记" /
|
|
13
|
+
"更新知识库" / "整理文件" / "执行工作流".
|
|
10
14
|
---
|
|
11
15
|
|
|
12
16
|
# MindOS Skill
|
|
13
17
|
|
|
14
|
-
<!-- version: 1.3.
|
|
18
|
+
<!-- version: 1.3.2 -->
|
|
15
19
|
|
|
16
20
|
**Before every task, internalize these 5 rules:**
|
|
17
21
|
|
|
18
22
|
1. The **bootstrap directory tree is the primary index** — reason from names and hierarchy before calling search. Most questions can be answered by reading what's already in context.
|
|
19
23
|
2. **Default to read-only.** Only invoke write tools when the user explicitly asks to save, record, organize, or edit. Lookup / summarize / quote = no writes.
|
|
20
|
-
3. **Rule precedence** (highest wins): user's current-turn instruction →
|
|
24
|
+
3. **Rule precedence** (highest wins): user's current-turn instruction → `.mindos/user-preferences.md` → nearest directory `INSTRUCTION.md` → root `INSTRUCTION.md` → this SKILL's defaults.
|
|
21
25
|
4. **Multi-file edits require a plan first.** Present the full change list; execute only after approval.
|
|
22
26
|
5. After create/delete/move/rename → **sync affected READMEs** automatically.
|
|
23
27
|
|
|
@@ -83,8 +87,7 @@ User request
|
|
|
83
87
|
└─ ASK for clarification. Propose 2-3 specific options based on KB state. Do NOT start editing.
|
|
84
88
|
```
|
|
85
89
|
|
|
86
|
-
**For any write/SOP/structural path above →
|
|
87
|
-
It covers: startup protocol, write tool selection, and step-by-step execution details for each path.
|
|
90
|
+
**For any write/SOP/structural path above → the write supplement is already loaded in context (see `## Write & Workflow Supplement` section below or in the next context block).**
|
|
88
91
|
|
|
89
92
|
---
|
|
90
93
|
|
|
@@ -97,7 +100,7 @@ It covers: startup protocol, write tool selection, and step-by-step execution de
|
|
|
97
100
|
| Find files | `mindos_search_notes` (2-4 parallel keyword variants) | Single-keyword search |
|
|
98
101
|
| Read content | `mindos_read_file` or `mindos_read_lines` (for large files) | Reading entire large file when you need 10 lines |
|
|
99
102
|
|
|
100
|
-
Write, structural, and history tools →
|
|
103
|
+
Write, structural, and history tools → see Write & Workflow Supplement (loaded below or in next context block).
|
|
101
104
|
|
|
102
105
|
### Fallbacks
|
|
103
106
|
|
|
@@ -112,21 +115,33 @@ Write, structural, and history tools → [references/write-supplement.md](./refe
|
|
|
112
115
|
|---------|------|-----------|
|
|
113
116
|
| **Read-only Q&A** | Lookup / summarize / quote | Tree reasoning → search → read → answer with citations → state gaps |
|
|
114
117
|
|
|
115
|
-
For write, SOP, structural, and handoff patterns →
|
|
118
|
+
For write, SOP, structural, and handoff patterns → see Write & Workflow Supplement (loaded below or in next context block).
|
|
116
119
|
|
|
117
120
|
---
|
|
118
121
|
|
|
119
|
-
##
|
|
122
|
+
## Judgment heuristics
|
|
120
123
|
|
|
121
|
-
|
|
122
|
-
-
|
|
123
|
-
-
|
|
124
|
+
**Save intent — read vs. write boundary**
|
|
125
|
+
- "帮我记下来" / "记录一下" / "保存这个" = write
|
|
126
|
+
- "搜一下有没有关于 X 的笔记" / "总结上周的工作" = read-only
|
|
127
|
+
- Ambiguous boundary ("整理一下这些内容") → ask first: display only, or write back to KB?
|
|
128
|
+
|
|
129
|
+
**File location uncertainty**
|
|
130
|
+
- 扫目录树 5 秒内定不下来 → don't invent a new directory; use the nearest semantically-fit existing one and inform the user
|
|
131
|
+
- User says "just put it somewhere" → place in inbox or top-level general directory, propose classification after (triggers Structure classification hook)
|
|
132
|
+
|
|
133
|
+
**Scope creep signals**
|
|
134
|
+
- Single input routes to >5 files → pause, confirm scope; users rarely intend bulk rewrites
|
|
135
|
+
- "Update all of these" + content spans multiple topics → split into batches, confirm each, don't execute all at once
|
|
136
|
+
|
|
137
|
+
**Citation discipline**
|
|
138
|
+
- KB-cited facts must include the file path so the user can verify
|
|
124
139
|
|
|
125
140
|
---
|
|
126
141
|
|
|
127
142
|
## Post-task hooks
|
|
128
143
|
|
|
129
|
-
After **write tasks** (not simple single-file edits or read-only), scan this table. If a condition matches, make a one-line proposal. At most 1 proposal; pick highest priority. Check
|
|
144
|
+
After **write tasks** (not simple single-file edits or read-only), scan this table. If a condition matches, make a one-line proposal. At most 1 proposal; pick highest priority. Check `.mindos/user-preferences.md` suppression section first. Skip all if user asked for quiet mode.
|
|
130
145
|
|
|
131
146
|
| Hook | Priority | Condition |
|
|
132
147
|
|------|----------|-----------|
|
|
@@ -142,7 +157,7 @@ If a hook triggers → read [references/post-task-hooks.md](./references/post-ta
|
|
|
142
157
|
|
|
143
158
|
## Preference capture
|
|
144
159
|
|
|
145
|
-
When the user expresses a standing preference ("don't do X", "always put Y in Z"), read [references/preference-capture.md](./references/preference-capture.md) and follow the confirm-then-write flow to
|
|
160
|
+
When the user expresses a standing preference ("don't do X", "always put Y in Z"), read [references/preference-capture.md](./references/preference-capture.md) and follow the confirm-then-write flow to `.mindos/user-preferences.md`.
|
|
146
161
|
**Do NOT read** preference-capture unless the user actually expressed a preference to persist.
|
|
147
162
|
|
|
148
163
|
## SOP authoring
|