@geminilight/mindos 0.6.52 → 0.6.54
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 +27 -5
- package/README_zh.md +27 -5
- package/_standalone/.mindos-build-version +1 -1
- package/_standalone/.next/BUILD_ID +1 -1
- package/_standalone/.next/app-path-routes-manifest.json +17 -14
- 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 +18 -2
- package/_standalone/.next/routes-manifest.json +18 -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.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 +2 -2
- package/_standalone/.next/server/app/_global-error.segments/_full.segment.rsc +2 -2
- package/_standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/_standalone/.next/server/app/_not-found/page.js +1 -1
- package/_standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/agents/[agentKey]/page.js +1 -1
- package/_standalone/.next/server/app/agents/[agentKey]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/agents/[agentKey]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/agents/page.js +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_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/detect/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/install/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/registry/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/session/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/agent-activity/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/ask/route.js +44 -16
- package/_standalone/.next/server/app/api/ask/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/ask/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/ask-sessions/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/auth/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/backlinks/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/backlinks/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/bootstrap/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/bootstrap/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/changes/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/changes/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/export/route.js +2 -2
- package/_standalone/.next/server/app/api/export/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/export/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/extract-pdf/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/file/import/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/file/import/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/file/raw/route.js +1 -0
- package/_standalone/.next/server/app/api/file/raw/route.js.nft.json +1 -0
- package/_standalone/.next/server/app/api/file/raw/route_client-reference-manifest.js +1 -0
- package/_standalone/.next/server/app/api/file/route.js +1 -1
- package/_standalone/.next/server/app/api/file/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/file/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/files/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/git/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/graph/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/graph/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/inbox/route.js +1 -1
- package/_standalone/.next/server/app/api/inbox/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/init/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/agents/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/mcp/agents/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/install/route_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_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/uninstall/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/monitoring/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/recent-files/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/restart/route.js +1 -1
- package/_standalone/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/search/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/list-models/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/reset-token/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/route.js +1 -1
- package/_standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/test-key/route.js +1 -1
- package/_standalone/.next/server/app/api/settings/test-key/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/check-path/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/check-port/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/generate-token/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/ls/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/route.js +1 -1
- package/_standalone/.next/server/app/api/setup/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/skills/route_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.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.js +1 -1
- package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/workflows/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/changes/page.js +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 +3 -3
- package/_standalone/.next/server/app/echo/[segment]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/echo/page.js +1 -1
- package/_standalone/.next/server/app/echo/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/echo/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/explore/page.js +2 -2
- 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/inbox/history/page.js +2 -0
- package/_standalone/.next/server/app/inbox/history/page.js.nft.json +1 -0
- package/_standalone/.next/server/app/inbox/history/page_client-reference-manifest.js +1 -0
- 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 +3 -3
- package/_standalone/.next/server/app/view/[...path]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/view/[...path]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/wiki/page.js +2 -0
- package/_standalone/.next/server/app/wiki/page.js.nft.json +1 -0
- package/_standalone/.next/server/app/wiki/page_client-reference-manifest.js +1 -0
- package/_standalone/.next/server/app-paths-manifest.json +17 -14
- package/_standalone/.next/server/chunks/2190.js +2 -2
- package/_standalone/.next/server/chunks/2364.js +2 -0
- package/_standalone/.next/server/chunks/357.js +1 -0
- package/_standalone/.next/server/chunks/530.js +219 -0
- package/_standalone/.next/server/chunks/6054.js +52 -0
- package/_standalone/.next/server/chunks/6539.js +1 -1
- package/_standalone/.next/server/chunks/8388.js +2 -2
- package/_standalone/.next/server/chunks/953.js +4 -4
- 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/2hrwFOLEOZhHQHfrIt-Dw/_buildManifest.js +1 -0
- package/_standalone/.next/static/chunks/1053-2874859f7caefa0f.js +29 -0
- package/_standalone/.next/static/chunks/178-105779afb62d36d9.js +1 -0
- package/_standalone/.next/static/chunks/1814.b08e9fb85dd3b13c.js +1 -0
- package/_standalone/.next/static/chunks/{1880-3ec02adc80531825.js → 1880-7abf971bcfd2389b.js} +2 -2
- package/_standalone/.next/static/chunks/{3160-83a7e0b94414b3ac.js → 2218-d54538000574ffef.js} +1 -1
- package/_standalone/.next/static/chunks/254-32719a9bea2e74f0.js +1 -0
- package/_standalone/.next/static/chunks/362.a77be2f206db7b19.js +1 -0
- package/_standalone/.next/static/chunks/4237-ffc6e7c15d4007b6.js +1 -0
- package/_standalone/.next/static/chunks/7035-2af69391c7b1ad95.js +1 -0
- package/_standalone/.next/static/chunks/7322-d67d05067544864c.js +1 -0
- package/_standalone/.next/static/chunks/{6926-4af497b83952fa87.js → 8409-de5726a4a278d28f.js} +1 -1
- package/_standalone/.next/static/chunks/8753-ea9db680b0f70f25.js +1 -0
- package/_standalone/.next/static/chunks/app/.well-known/agent-card.json/{route-b07a5983e85bc5e3.js → route-e240db6d5049d336.js} +1 -1
- package/_standalone/.next/static/chunks/app/_global-error/{page-b07a5983e85bc5e3.js → page-e240db6d5049d336.js} +1 -1
- package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-f006a70f6889eb56.js +1 -0
- package/_standalone/.next/static/chunks/app/agents/page-bd522e428e3acb78.js +5 -0
- package/_standalone/.next/static/chunks/app/api/a2a/agents/{route-b07a5983e85bc5e3.js → route-e240db6d5049d336.js} +1 -1
- package/_standalone/.next/static/chunks/app/api/a2a/delegations/{route-b07a5983e85bc5e3.js → route-e240db6d5049d336.js} +1 -1
- package/_standalone/.next/static/chunks/app/api/a2a/discover/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/a2a/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/config/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/detect/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/install/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/registry/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/session/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/agent-activity/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/ask/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/ask-sessions/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/auth/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/backlinks/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/bootstrap/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/changes/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/export/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/extract-pdf/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/file/import/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/file/raw/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/file/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/files/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/git/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/graph/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/health/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/inbox/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/init/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/agents/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/install/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/restart/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/status/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/uninstall/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/monitoring/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/recent-files/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/restart/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/search/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/settings/list-models/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/settings/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/settings/test-key/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/check-path/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/check-port/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/ls/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/skills/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/sync/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/tree-version/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/uninstall/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/update/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/update-check/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/update-status/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/workflows/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/changes/page-5a72144d1080a699.js +1 -0
- package/_standalone/.next/static/chunks/app/echo/[segment]/{page-88df174dd64b2c76.js → page-6710da1f581b2854.js} +2 -2
- package/_standalone/.next/static/chunks/app/echo/page-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/explore/{page-5eb2835e9e3ab4bb.js → page-d3d99308146c2240.js} +1 -1
- package/_standalone/.next/static/chunks/app/global-error-c37d50db6128ec01.js +1 -0
- package/_standalone/.next/static/chunks/app/help/page-222df603080b5fab.js +1 -0
- package/_standalone/.next/static/chunks/app/inbox/history/page-07819cf95cb0805f.js +1 -0
- package/_standalone/.next/static/chunks/app/layout-8eacff5813458190.js +186 -0
- package/_standalone/.next/static/chunks/app/loading-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/login/{page-24236460fa7c11d0.js → page-0eeef685052869a6.js} +1 -1
- package/_standalone/.next/static/chunks/app/page-5a6c9455efe8a0df.js +7 -0
- package/_standalone/.next/static/chunks/app/setup/{page-99f40e9337388cda.js → page-9a81fa4d82c6351b.js} +1 -1
- package/_standalone/.next/static/chunks/app/trash/page-72d0ae3649ac4b6c.js +1 -0
- package/_standalone/.next/static/chunks/app/view/[...path]/loading-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/view/[...path]/not-found-fc04c2bd4f35bc6f.js +1 -0
- package/_standalone/.next/static/chunks/app/view/[...path]/page-e8699f96589c0979.js +12 -0
- package/_standalone/.next/static/chunks/app/wiki/page-d492256a93f0b8bc.js +1 -0
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/{webpack-bbd44cbc83dc0aa4.js → webpack-73c9da80c6c1ebfe.js} +1 -1
- package/_standalone/.next/static/css/66f8a81e4eda06d4.css +1 -0
- package/_standalone/.next/static/css/a4a2b71142b311af.css +31 -0
- package/_standalone/.next/trace +64 -64
- package/_standalone/.next/types/routes.d.ts +5 -2
- package/_standalone/.next/types/validator.ts +27 -0
- package/_standalone/__tests__/agents/agents-content-dashboard.test.tsx +1 -0
- package/_standalone/__tests__/agents/agents-content-model.test.ts +13 -0
- package/_standalone/__tests__/core/inbox.test.ts +168 -0
- package/_standalone/__tests__/core/sync.test.ts +37 -0
- package/_standalone/__tests__/panels/agents-panel-hub.test.tsx +1 -0
- package/_standalone/app/globals.css +29 -3
- package/_standalone/components/ActivityBar.tsx +9 -9
- package/_standalone/components/AskFab.tsx +1 -1
- package/_standalone/components/Backlinks.tsx +1 -1
- package/_standalone/components/Breadcrumb.tsx +1 -1
- package/_standalone/components/CreateSpaceModal.tsx +1 -1
- package/_standalone/components/EchoSpotlight.tsx +14 -10
- package/_standalone/components/Editor.tsx +1 -1
- package/_standalone/components/ExportModal.tsx +3 -3
- package/_standalone/components/FileTree.tsx +6 -11
- package/_standalone/components/GuideCard.tsx +1 -1
- package/_standalone/components/ImportModal.tsx +1 -2
- package/_standalone/components/KeyboardShortcuts.tsx +1 -1
- package/_standalone/components/MarkdownEditor.tsx +1 -1
- package/_standalone/components/OnboardingView.tsx +2 -2
- package/_standalone/components/OrganizeToast.tsx +3 -1
- package/_standalone/components/Panel.tsx +27 -6
- package/_standalone/components/Sidebar.tsx +1 -1
- package/_standalone/components/SidebarLayout.tsx +30 -7
- package/_standalone/components/SystemPulse.tsx +16 -16
- package/_standalone/components/agents/AgentsOverviewSection.tsx +18 -92
- package/_standalone/components/agents/AgentsPanelA2aTab.tsx +67 -66
- package/_standalone/components/agents/AgentsPrimitives.tsx +1 -1
- package/_standalone/components/agents/RecentActivityFeed.tsx +6 -6
- package/_standalone/components/agents/SkillDetailPopover.tsx +1 -1
- package/_standalone/components/ask/AskHeader.tsx +1 -1
- package/_standalone/components/echo/EchoHero.tsx +1 -1
- package/_standalone/components/echo/EchoPageSections.tsx +1 -1
- package/_standalone/components/explore/UseCaseCard.tsx +1 -1
- package/_standalone/components/home/InboxSection.tsx +262 -54
- package/_standalone/components/panels/AgentsPanel.tsx +4 -3
- package/_standalone/components/panels/AgentsPanelAgentDetail.tsx +1 -1
- package/_standalone/components/panels/AgentsPanelHubNav.tsx +10 -6
- package/_standalone/components/panels/PanelHeader.tsx +1 -1
- package/_standalone/components/renderers/audio/AudioRenderer.tsx +79 -0
- package/_standalone/components/renderers/image/ImageRenderer.tsx +203 -0
- package/_standalone/components/renderers/pdf/PdfRenderer.tsx +57 -0
- package/_standalone/components/renderers/video/VideoRenderer.tsx +91 -0
- package/_standalone/components/settings/McpTab.tsx +154 -28
- package/_standalone/components/settings/PluginsTab.tsx +1 -1
- package/_standalone/components/settings/SettingsContent.tsx +41 -7
- package/_standalone/components/settings/types.ts +7 -1
- package/_standalone/components/walkthrough/WalkthroughOverlay.tsx +40 -11
- package/_standalone/components/walkthrough/WalkthroughTooltip.tsx +1 -1
- package/_standalone/hooks/useAiOrganize.ts +14 -1
- package/_standalone/lib/organize-history.ts +6 -0
- package/_standalone/lib/stores/walkthrough-store.ts +33 -1
- package/_standalone/tsconfig.tsbuildinfo +1 -1
- package/app/app/api/ask/route.ts +193 -3
- package/app/app/api/file/raw/route.ts +121 -0
- package/app/app/api/file/route.ts +21 -0
- package/app/app/api/inbox/route.ts +38 -2
- package/app/app/api/mcp/status/route.ts +1 -0
- package/app/app/api/restart/route.ts +26 -21
- package/app/app/api/settings/route.ts +13 -0
- package/app/app/api/setup/route.ts +11 -1
- package/app/app/api/sync/route.ts +36 -13
- package/app/app/api/update/route.ts +24 -10
- package/app/app/global-error.tsx +3 -3
- package/app/app/globals.css +29 -3
- package/app/app/inbox/history/page.tsx +250 -0
- package/app/app/layout.tsx +5 -11
- package/app/app/login/page.tsx +1 -1
- package/app/app/view/[...path]/ViewPageClient.tsx +15 -10
- package/app/app/view/[...path]/not-found.tsx +1 -1
- package/app/app/view/[...path]/page.tsx +32 -1
- package/app/app/wiki/page.tsx +58 -0
- package/app/components/ActivityBar.tsx +9 -9
- package/app/components/AskFab.tsx +1 -1
- package/app/components/Backlinks.tsx +1 -1
- package/app/components/Breadcrumb.tsx +1 -1
- package/app/components/CreateSpaceModal.tsx +1 -1
- package/app/components/DirView.tsx +2 -2
- package/app/components/EchoSpotlight.tsx +14 -10
- package/app/components/Editor.tsx +1 -1
- package/app/components/ExportModal.tsx +3 -3
- package/app/components/FileTree.tsx +6 -11
- package/app/components/GuideCard.tsx +1 -1
- package/app/components/HomeContent.tsx +50 -39
- package/app/components/ImportModal.tsx +1 -2
- package/app/components/KeyboardShortcuts.tsx +1 -1
- package/app/components/MarkdownEditor.tsx +1 -1
- package/app/components/OnboardingView.tsx +2 -2
- package/app/components/OrganizeToast.tsx +3 -1
- package/app/components/Panel.tsx +27 -6
- package/app/components/Sidebar.tsx +1 -1
- package/app/components/SidebarLayout.tsx +30 -7
- package/app/components/SystemPulse.tsx +16 -16
- package/app/components/TrashPageClient.tsx +8 -6
- package/app/components/UpdateOverlay.tsx +1 -1
- package/app/components/WikiHomeContent.tsx +273 -0
- package/app/components/agents/AgentDetailContent.tsx +5 -5
- package/app/components/agents/AgentsContentPage.tsx +14 -3
- package/app/components/agents/AgentsOverviewSection.tsx +18 -92
- package/app/components/agents/AgentsPanelA2aTab.tsx +67 -66
- package/app/components/agents/AgentsPrimitives.tsx +1 -1
- package/app/components/agents/RecentActivityFeed.tsx +6 -6
- package/app/components/agents/SkillDetailPopover.tsx +1 -1
- package/app/components/agents/agents-content-model.ts +4 -1
- package/app/components/ask/AskHeader.tsx +1 -1
- package/app/components/changes/ChangesContentPage.tsx +10 -6
- package/app/components/echo/EchoHero.tsx +1 -1
- package/app/components/echo/EchoPageSections.tsx +1 -1
- package/app/components/explore/ExploreContent.tsx +1 -1
- package/app/components/explore/UseCaseCard.tsx +1 -1
- package/app/components/help/HelpContent.tsx +3 -3
- package/app/components/home/InboxSection.tsx +262 -54
- package/app/components/panels/AgentsPanel.tsx +4 -3
- package/app/components/panels/AgentsPanelAgentDetail.tsx +1 -1
- package/app/components/panels/AgentsPanelHubNav.tsx +10 -6
- package/app/components/panels/PanelHeader.tsx +1 -1
- package/app/components/renderers/audio/AudioRenderer.tsx +79 -0
- package/app/components/renderers/audio/manifest.ts +17 -0
- package/app/components/renderers/image/ImageRenderer.tsx +203 -0
- package/app/components/renderers/image/manifest.ts +17 -0
- package/app/components/renderers/pdf/PdfRenderer.tsx +57 -0
- package/app/components/renderers/pdf/manifest.ts +15 -0
- package/app/components/renderers/video/VideoRenderer.tsx +91 -0
- package/app/components/renderers/video/manifest.ts +17 -0
- package/app/components/settings/McpTab.tsx +154 -28
- package/app/components/settings/PluginsTab.tsx +1 -1
- package/app/components/settings/SettingsContent.tsx +41 -7
- package/app/components/settings/types.ts +7 -1
- package/app/components/setup/index.tsx +4 -3
- package/app/components/walkthrough/WalkthroughOverlay.tsx +40 -11
- package/app/components/walkthrough/WalkthroughTooltip.tsx +1 -1
- package/app/hooks/useAiOrganize.ts +14 -1
- package/app/lib/agent/model.ts +2 -1
- package/app/lib/core/inbox.ts +131 -2
- package/app/lib/core/pdf-text.ts +28 -0
- package/app/lib/core/search-index.ts +29 -5
- package/app/lib/core/tree.ts +6 -1
- package/app/lib/fs.ts +31 -3
- package/app/lib/i18n/modules/ai-chat.ts +42 -0
- package/app/lib/i18n/modules/knowledge.ts +30 -0
- package/app/lib/i18n/modules/navigation.ts +4 -2
- package/app/lib/i18n/modules/panels.ts +22 -4
- package/app/lib/i18n/modules/settings.ts +26 -0
- package/app/lib/organize-history.ts +6 -0
- package/app/lib/renderers/index.ts +5 -1
- package/app/lib/settings.ts +60 -0
- package/app/lib/stores/walkthrough-store.ts +33 -1
- package/bin/commands/doctor.js +12 -6
- package/bin/commands/file.js +7 -4
- package/bin/commands/logs.js +39 -4
- package/bin/commands/onboard.js +1 -1
- package/bin/commands/open.js +6 -1
- package/bin/commands/space.js +7 -4
- package/bin/commands/update.js +31 -29
- package/bin/lib/build.js +19 -8
- package/bin/lib/clean-env.js +38 -0
- package/bin/lib/cli-shim.js +67 -2
- package/bin/lib/config.js +4 -5
- package/bin/lib/gateway.js +51 -27
- package/bin/lib/jsonc.js +7 -2
- package/bin/lib/mcp-agents.js +26 -5
- package/bin/lib/path-expand.js +6 -3
- package/bin/lib/port.js +5 -1
- package/bin/lib/stop.js +98 -41
- package/bin/lib/sync.js +1 -1
- package/package.json +1 -1
- package/scripts/setup.js +7 -5
- package/_standalone/.next/server/chunks/2673.js +0 -52
- package/_standalone/.next/server/chunks/5648.js +0 -2
- package/_standalone/.next/server/chunks/8408.js +0 -219
- package/_standalone/.next/static/IiTZbEzZo8l5MSUxlDwKp/_buildManifest.js +0 -1
- package/_standalone/.next/static/chunks/1053-c519cb347faa75e2.js +0 -29
- package/_standalone/.next/static/chunks/1814.72f7fe7c61e2b647.js +0 -1
- package/_standalone/.next/static/chunks/362.4c226d7887d5f696.js +0 -1
- package/_standalone/.next/static/chunks/6357-c645842834c0d4cd.js +0 -1
- package/_standalone/.next/static/chunks/6981-3d7dcac2d12a5670.js +0 -1
- package/_standalone/.next/static/chunks/7035-032641fb6f4e07b2.js +0 -1
- package/_standalone/.next/static/chunks/7144-5febf62f1a79fe64.js +0 -1
- package/_standalone/.next/static/chunks/9602-423291fdb36396d1.js +0 -1
- package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-074d6aafc2606561.js +0 -1
- package/_standalone/.next/static/chunks/app/agents/page-710d8c80fa86e93e.js +0 -5
- package/_standalone/.next/static/chunks/app/api/a2a/discover/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/a2a/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/config/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/detect/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/install/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/registry/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/session/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/agent-activity/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/ask/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/ask-sessions/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/auth/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/backlinks/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/bootstrap/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/changes/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/export/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/extract-pdf/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/file/import/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/file/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/files/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/git/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/graph/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/health/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/inbox/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/init/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/agents/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/install/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/restart/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/status/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/uninstall/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/monitoring/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/recent-files/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/restart/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/search/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/settings/list-models/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/settings/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/settings/test-key/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/check-path/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/check-port/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/ls/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/skills/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/sync/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/tree-version/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/uninstall/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/update/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/update-check/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/update-status/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/workflows/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/changes/page-350992cf5091bc5b.js +0 -1
- package/_standalone/.next/static/chunks/app/echo/page-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/global-error-e1ad0e18236ba26c.js +0 -1
- package/_standalone/.next/static/chunks/app/help/page-2325d25b6846ca07.js +0 -1
- package/_standalone/.next/static/chunks/app/layout-e706f9a963b177ba.js +0 -186
- package/_standalone/.next/static/chunks/app/loading-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/page-2595175820acfd65.js +0 -7
- package/_standalone/.next/static/chunks/app/trash/page-61c6210fac1e9710.js +0 -1
- package/_standalone/.next/static/chunks/app/view/[...path]/loading-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/view/[...path]/not-found-61474670d6bb6116.js +0 -1
- package/_standalone/.next/static/chunks/app/view/[...path]/page-798359c36f10ef8d.js +0 -12
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/css/bbf51803eade6c50.css +0 -31
- package/_standalone/.next/static/css/ef1151f74f00d91a.css +0 -1
- package/_standalone/lib/i18n/generated/explore-i18n.generated.ts +0 -138
- package/_standalone/lib/i18n/index.ts +0 -38
- package/_standalone/lib/i18n/modules/ai-chat.ts +0 -237
- package/_standalone/lib/i18n/modules/common.ts +0 -71
- package/_standalone/lib/i18n/modules/features.ts +0 -153
- package/_standalone/lib/i18n/modules/knowledge.ts +0 -727
- package/_standalone/lib/i18n/modules/navigation.ts +0 -157
- package/_standalone/lib/i18n/modules/onboarding.ts +0 -445
- package/_standalone/lib/i18n/modules/panels.ts +0 -1255
- package/_standalone/lib/i18n/modules/settings.ts +0 -889
- package/_standalone/lib/i18n.ts +0 -3
- /package/_standalone/.next/static/{IiTZbEzZo8l5MSUxlDwKp → 2hrwFOLEOZhHQHfrIt-Dw}/_ssgManifest.js +0 -0
|
@@ -30,6 +30,10 @@ export const aiChatEn = {
|
|
|
30
30
|
errorNoResponse: 'AI returned no content. Possible causes: model does not support streaming, proxy compatibility issue, or request exceeds context limit.',
|
|
31
31
|
reconnecting: (attempt: number, max: number) => `Connection lost. Reconnecting (${attempt}/${max})...`,
|
|
32
32
|
reconnectFailed: 'Connection failed after multiple attempts.',
|
|
33
|
+
proxyCompatMode: 'Using compatibility mode (non-streaming)...',
|
|
34
|
+
proxyCompatFailed: (err: string) => `Compatibility mode failed: ${err}. Please check your Base URL, API key, and model name.`,
|
|
35
|
+
proxyCompatDetecting: 'Detecting proxy compatibility, switching to non-streaming mode...',
|
|
36
|
+
proxyCompatAlsoFailed: (err: string) => `Compatibility mode also failed: ${err}. Please check your Base URL, API key, and model name.`,
|
|
33
37
|
retry: 'Retry',
|
|
34
38
|
suggestions: [
|
|
35
39
|
'Summarize this document',
|
|
@@ -79,6 +83,23 @@ export const aiChatEn = {
|
|
|
79
83
|
empty: 'No content changes yet.',
|
|
80
84
|
open: 'Open',
|
|
81
85
|
unchangedLines: (n: number) => `... ${n} unchanged lines ...`,
|
|
86
|
+
operations: {
|
|
87
|
+
save_file: 'Save file',
|
|
88
|
+
append_to_file: 'Append to file',
|
|
89
|
+
insert_lines: 'Insert lines',
|
|
90
|
+
update_lines: 'Update lines',
|
|
91
|
+
insert_after_heading: 'Insert after heading',
|
|
92
|
+
update_section: 'Update section',
|
|
93
|
+
create_file: 'Create file',
|
|
94
|
+
delete_file: 'Delete file',
|
|
95
|
+
rename_file: 'Rename file',
|
|
96
|
+
move_file: 'Move file',
|
|
97
|
+
create_space: 'Create space',
|
|
98
|
+
rename_space: 'Rename space',
|
|
99
|
+
append_csv: 'Append to CSV',
|
|
100
|
+
import_file: 'Import file',
|
|
101
|
+
legacy_agent_diff_import: 'Import from Agent Diff',
|
|
102
|
+
},
|
|
82
103
|
relativeTime: {
|
|
83
104
|
justNow: 'just now',
|
|
84
105
|
minutesAgo: (n: number) => `${n}m ago`,
|
|
@@ -148,6 +169,10 @@ export const aiChatZh = {
|
|
|
148
169
|
errorNoResponse: 'AI 未返回有效内容。可能原因:模型不支持流式输出、中转站兼容性问题、或请求超出上下文限制。',
|
|
149
170
|
reconnecting: (attempt: number, max: number) => `连接中断,正在重连 (${attempt}/${max})...`,
|
|
150
171
|
reconnectFailed: '多次重连失败,请检查网络后重试。',
|
|
172
|
+
proxyCompatMode: '正在以兼容模式调用...',
|
|
173
|
+
proxyCompatFailed: (err: string) => `兼容模式失败:${err}。请检查 Base URL、API Key 和模型名称。`,
|
|
174
|
+
proxyCompatDetecting: '正在检测接口兼容性,切换到兼容模式重试...',
|
|
175
|
+
proxyCompatAlsoFailed: (err: string) => `兼容模式也失败了:${err}。请检查 Base URL、API Key 和模型名称。`,
|
|
151
176
|
retry: '重试',
|
|
152
177
|
suggestions: [
|
|
153
178
|
'总结这篇文档',
|
|
@@ -197,6 +222,23 @@ export const aiChatZh = {
|
|
|
197
222
|
empty: '暂无内容变更。',
|
|
198
223
|
open: '打开',
|
|
199
224
|
unchangedLines: (n: number) => `... ${n} 行未变更 ...`,
|
|
225
|
+
operations: {
|
|
226
|
+
save_file: '保存文件',
|
|
227
|
+
append_to_file: '追加到文件',
|
|
228
|
+
insert_lines: '插入行',
|
|
229
|
+
update_lines: '更新行',
|
|
230
|
+
insert_after_heading: '标题后插入',
|
|
231
|
+
update_section: '更新章节',
|
|
232
|
+
create_file: '创建文件',
|
|
233
|
+
delete_file: '删除文件',
|
|
234
|
+
rename_file: '重命名文件',
|
|
235
|
+
move_file: '移动文件',
|
|
236
|
+
create_space: '创建空间',
|
|
237
|
+
rename_space: '重命名空间',
|
|
238
|
+
append_csv: '追加到 CSV',
|
|
239
|
+
import_file: '导入文件',
|
|
240
|
+
legacy_agent_diff_import: '从 Agent Diff 导入',
|
|
241
|
+
},
|
|
200
242
|
relativeTime: {
|
|
201
243
|
justNow: '刚刚',
|
|
202
244
|
minutesAgo: (n: number) => `${n} 分钟前`,
|
|
@@ -52,6 +52,10 @@ export const knowledgeEn = {
|
|
|
52
52
|
showMore: 'Show more',
|
|
53
53
|
showLess: 'Show less',
|
|
54
54
|
viewAll: 'View all',
|
|
55
|
+
wikiTagline: 'Your knowledge spaces, organized.',
|
|
56
|
+
sortRecent: 'Recent',
|
|
57
|
+
sortName: 'A-Z',
|
|
58
|
+
sortCount: 'File Count',
|
|
55
59
|
createToActivate: 'Create {file} to activate',
|
|
56
60
|
shortcuts: {
|
|
57
61
|
searchFiles: 'Search files',
|
|
@@ -95,6 +99,8 @@ export const knowledgeEn = {
|
|
|
95
99
|
organizing: 'Organizing...',
|
|
96
100
|
viewAll: 'View all',
|
|
97
101
|
more: (n: number) => `${n} more`,
|
|
102
|
+
viewAllFiles: (n: number) => `View all ${n} files in Inbox`,
|
|
103
|
+
viewAllHistory: (n: number) => `View all ${n} records →`,
|
|
98
104
|
agingHint: '7+ days',
|
|
99
105
|
savedToast: (n: number) => `${n} file${n === 1 ? '' : 's'} saved to Capture`,
|
|
100
106
|
savedWithSkipped: (saved: number, skipped: number) =>
|
|
@@ -324,8 +330,17 @@ export const knowledgeEn = {
|
|
|
324
330
|
importHistory: {
|
|
325
331
|
title: 'Import History',
|
|
326
332
|
clearAll: 'Clear history',
|
|
333
|
+
clearConfirm: 'Clear all history? This cannot be undone.',
|
|
327
334
|
emptyTitle: 'No import history yet',
|
|
328
335
|
emptyDesc: 'AI organize results will appear here',
|
|
336
|
+
back: '← Back',
|
|
337
|
+
sourceLabel: 'Source',
|
|
338
|
+
changesCount: (ok: number, total: number) => `${ok}/${total} changes`,
|
|
339
|
+
recordCount: (n: number) => `${n} record${n !== 1 ? 's' : ''}`,
|
|
340
|
+
today: 'Today',
|
|
341
|
+
yesterday: 'Yesterday',
|
|
342
|
+
older: 'Older',
|
|
343
|
+
processedArchive: 'Processed files are archived in Inbox/.processed/',
|
|
329
344
|
},
|
|
330
345
|
dirView: {
|
|
331
346
|
gridView: 'Grid view',
|
|
@@ -415,6 +430,10 @@ export const knowledgeZh = {
|
|
|
415
430
|
showMore: '查看更多',
|
|
416
431
|
showLess: '收起',
|
|
417
432
|
viewAll: '查看全部',
|
|
433
|
+
wikiTagline: '你的知识空间,井然有序。',
|
|
434
|
+
sortRecent: '最近',
|
|
435
|
+
sortName: '字母序',
|
|
436
|
+
sortCount: '文件数',
|
|
418
437
|
createToActivate: '创建 {file} 以启用',
|
|
419
438
|
shortcuts: {
|
|
420
439
|
searchFiles: '搜索文件',
|
|
@@ -458,6 +477,8 @@ export const knowledgeZh = {
|
|
|
458
477
|
organizing: '整理中...',
|
|
459
478
|
viewAll: '查看全部',
|
|
460
479
|
more: (n: number) => `还有 ${n} 个`,
|
|
480
|
+
viewAllFiles: (n: number) => `查看 Inbox 中全部 ${n} 个文件`,
|
|
481
|
+
viewAllHistory: (n: number) => `查看全部 ${n} 条记录 →`,
|
|
461
482
|
agingHint: '7天+',
|
|
462
483
|
savedToast: (n: number) => `${n} 个文件已保存到暂存台`,
|
|
463
484
|
savedWithSkipped: (saved: number, skipped: number) =>
|
|
@@ -687,8 +708,17 @@ export const knowledgeZh = {
|
|
|
687
708
|
importHistory: {
|
|
688
709
|
title: '导入历史',
|
|
689
710
|
clearAll: '清空历史',
|
|
711
|
+
clearConfirm: '清空所有历史记录?此操作不可撤销。',
|
|
690
712
|
emptyTitle: '暂无导入记录',
|
|
691
713
|
emptyDesc: 'AI 整理的结果会出现在这里',
|
|
714
|
+
back: '← 返回',
|
|
715
|
+
sourceLabel: '来源',
|
|
716
|
+
changesCount: (ok: number, total: number) => `${ok}/${total} 处变更`,
|
|
717
|
+
recordCount: (n: number) => `${n} 条记录`,
|
|
718
|
+
today: '今天',
|
|
719
|
+
yesterday: '昨天',
|
|
720
|
+
older: '更早',
|
|
721
|
+
processedArchive: '已处理的文件归档在 Inbox/.processed/ 中',
|
|
692
722
|
},
|
|
693
723
|
dirView: {
|
|
694
724
|
gridView: '网格视图',
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
export const navigationEn = {
|
|
4
4
|
sidebar: {
|
|
5
|
-
files: '
|
|
5
|
+
files: 'Wiki',
|
|
6
6
|
search: 'Search',
|
|
7
7
|
searchTitle: 'Search',
|
|
8
8
|
askTitle: 'MindOS Agent',
|
|
@@ -26,6 +26,7 @@ export const navigationEn = {
|
|
|
26
26
|
newFile: 'New file',
|
|
27
27
|
newSpace: 'New Space',
|
|
28
28
|
more: 'More',
|
|
29
|
+
capture: 'Capture',
|
|
29
30
|
showHiddenFiles: 'Show hidden files',
|
|
30
31
|
sync: {
|
|
31
32
|
synced: 'Synced',
|
|
@@ -80,7 +81,7 @@ export const navigationEn = {
|
|
|
80
81
|
|
|
81
82
|
export const navigationZh = {
|
|
82
83
|
sidebar: {
|
|
83
|
-
files: '
|
|
84
|
+
files: '知识库',
|
|
84
85
|
search: '搜索',
|
|
85
86
|
searchTitle: '搜索',
|
|
86
87
|
askTitle: 'MindOS Agent',
|
|
@@ -104,6 +105,7 @@ export const navigationZh = {
|
|
|
104
105
|
newFile: '新建文件',
|
|
105
106
|
newSpace: '新建空间',
|
|
106
107
|
more: '更多',
|
|
108
|
+
capture: '暂存台',
|
|
107
109
|
showHiddenFiles: '显示隐藏文件',
|
|
108
110
|
sync: {
|
|
109
111
|
synced: '已同步',
|
|
@@ -88,8 +88,15 @@ export const panelsEn = {
|
|
|
88
88
|
a2aDelegationFailed: 'Failed',
|
|
89
89
|
a2aDelegationPending: 'Pending',
|
|
90
90
|
// ACP / Network tab
|
|
91
|
-
acpSectionTitle: '
|
|
92
|
-
acpSectionDesc: (n: number) => `${n} agent${n !== 1 ? 's' : ''}
|
|
91
|
+
acpSectionTitle: 'Installed Agents',
|
|
92
|
+
acpSectionDesc: (n: number) => `${n} agent${n !== 1 ? 's' : ''} detected`,
|
|
93
|
+
acpNoInstalled: 'No coding agents detected. Install one to delegate tasks directly from MindOS.',
|
|
94
|
+
acpAvailableTitle: 'Available in Registry',
|
|
95
|
+
acpAvailableDesc: (n: number) => `${n} more agent${n !== 1 ? 's' : ''} available`,
|
|
96
|
+
acpShowAvailable: 'Show',
|
|
97
|
+
acpHideAvailable: 'Hide',
|
|
98
|
+
acpCopyCmd: 'Copy',
|
|
99
|
+
acpCopied: 'Copied',
|
|
93
100
|
acpTransportNpx: 'npx',
|
|
94
101
|
acpTransportBinary: 'binary',
|
|
95
102
|
acpTransportUvx: 'uvx',
|
|
@@ -380,6 +387,8 @@ export const panelsEn = {
|
|
|
380
387
|
reconnectAllRunning: 'Reconnecting...',
|
|
381
388
|
reconnectAllDone: (ok: number, failed: number) => `Done: ${ok} reconnected${failed > 0 ? `, ${failed} failed` : ''}.`,
|
|
382
389
|
serverTransport: (t: string) => `Transport: ${t}`,
|
|
390
|
+
mcpDisabledMessage: 'MCP mode is not enabled.',
|
|
391
|
+
mcpDisabledHint: 'Enable it in Settings → Connections to use MCP agents.',
|
|
383
392
|
},
|
|
384
393
|
skills: {
|
|
385
394
|
title: 'Skills',
|
|
@@ -715,8 +724,15 @@ export const panelsZh = {
|
|
|
715
724
|
a2aDelegationFailed: '失败',
|
|
716
725
|
a2aDelegationPending: '进行中',
|
|
717
726
|
// ACP / Network tab
|
|
718
|
-
acpSectionTitle: '
|
|
719
|
-
acpSectionDesc: (n: number) =>
|
|
727
|
+
acpSectionTitle: '已安装智能体',
|
|
728
|
+
acpSectionDesc: (n: number) => `已检测到 ${n} 个智能体`,
|
|
729
|
+
acpNoInstalled: '未检测到编程智能体。安装一个即可在 MindOS 中直接委派任务。',
|
|
730
|
+
acpAvailableTitle: '注册表中可用',
|
|
731
|
+
acpAvailableDesc: (n: number) => `还有 ${n} 个智能体可安装`,
|
|
732
|
+
acpShowAvailable: '展开',
|
|
733
|
+
acpHideAvailable: '收起',
|
|
734
|
+
acpCopyCmd: '复制',
|
|
735
|
+
acpCopied: '已复制',
|
|
720
736
|
acpTransportNpx: 'npx',
|
|
721
737
|
acpTransportBinary: '二进制',
|
|
722
738
|
acpTransportUvx: 'uvx',
|
|
@@ -1007,6 +1023,8 @@ export const panelsZh = {
|
|
|
1007
1023
|
reconnectAllRunning: '正在重连...',
|
|
1008
1024
|
reconnectAllDone: (ok: number, failed: number) => `完成:${ok} 已重连${failed > 0 ? `,${failed} 失败` : ''}。`,
|
|
1009
1025
|
serverTransport: (t: string) => `传输:${t}`,
|
|
1026
|
+
mcpDisabledMessage: 'MCP 模式未启用。',
|
|
1027
|
+
mcpDisabledHint: '请在设置 → 连接中启用,以使用 MCP 智能体。',
|
|
1010
1028
|
},
|
|
1011
1029
|
skills: {
|
|
1012
1030
|
title: '技能',
|
|
@@ -193,6 +193,19 @@ export const settingsEn = {
|
|
|
193
193
|
comingSoon: 'Plugin marketplace coming soon.',
|
|
194
194
|
},
|
|
195
195
|
mcp: {
|
|
196
|
+
// Connection Mode Card
|
|
197
|
+
modeCardTitle: 'Connection Mode',
|
|
198
|
+
modeCardDesc: 'Choose how agents connect to MindOS.',
|
|
199
|
+
cliLabel: 'CLI',
|
|
200
|
+
cliModeDesc: 'Claude Code, Gemini CLI, Codex, etc.',
|
|
201
|
+
mcpLabel: 'MCP',
|
|
202
|
+
mcpModeDesc: 'Claude Desktop, Cursor, Windsurf, etc.',
|
|
203
|
+
alwaysOn: 'Always On',
|
|
204
|
+
mcpRunning: 'Running',
|
|
205
|
+
mcpStopped: 'Stopped',
|
|
206
|
+
mcpEnabledHint: 'MCP mode enabled. Disable to simplify the interface if you only use CLI agents.',
|
|
207
|
+
mcpDisabledHint: 'Enable MCP to connect Desktop clients like Claude Desktop or Cursor.',
|
|
208
|
+
// Rest of existing MCP section...
|
|
196
209
|
serverTitle: 'MindOS MCP Server',
|
|
197
210
|
status: 'Status',
|
|
198
211
|
running: 'Running',
|
|
@@ -637,6 +650,19 @@ export const settingsZh = {
|
|
|
637
650
|
comingSoon: '插件市场即将上线。',
|
|
638
651
|
},
|
|
639
652
|
mcp: {
|
|
653
|
+
// 连接模式卡片
|
|
654
|
+
modeCardTitle: '连接模式',
|
|
655
|
+
modeCardDesc: '选择 Agent 如何连接到 MindOS。',
|
|
656
|
+
cliLabel: 'CLI',
|
|
657
|
+
cliModeDesc: 'Claude Code、Gemini CLI、Codex 等。',
|
|
658
|
+
mcpLabel: 'MCP',
|
|
659
|
+
mcpModeDesc: 'Claude Desktop、Cursor、Windsurf 等。',
|
|
660
|
+
alwaysOn: '始终开启',
|
|
661
|
+
mcpRunning: '运行中',
|
|
662
|
+
mcpStopped: '已停止',
|
|
663
|
+
mcpEnabledHint: 'MCP 模式已启用。若仅使用 CLI Agent,可禁用此项以简化界面。',
|
|
664
|
+
mcpDisabledHint: '启用 MCP 以连接 Claude Desktop 或 Cursor 等桌面客户端。',
|
|
665
|
+
// 其余 MCP 配置...
|
|
640
666
|
serverTitle: 'MindOS MCP 服务',
|
|
641
667
|
status: '状态',
|
|
642
668
|
running: '运行中',
|
|
@@ -12,6 +12,8 @@ export interface OrganizeHistoryFile {
|
|
|
12
12
|
undone?: boolean;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
+
export type OrganizeSource = 'upload' | 'drag-drop' | 'inbox-organize' | 'import-modal' | 'plugin' | 'web-clipper';
|
|
16
|
+
|
|
15
17
|
export interface OrganizeHistoryEntry {
|
|
16
18
|
id: string;
|
|
17
19
|
/** Unix ms */
|
|
@@ -20,6 +22,10 @@ export interface OrganizeHistoryEntry {
|
|
|
20
22
|
sourceFiles: string[];
|
|
21
23
|
files: OrganizeHistoryFile[];
|
|
22
24
|
status: 'completed' | 'partial' | 'undone';
|
|
25
|
+
/** How the files were ingested */
|
|
26
|
+
source?: OrganizeSource;
|
|
27
|
+
/** Processing time in milliseconds */
|
|
28
|
+
durationMs?: number;
|
|
23
29
|
}
|
|
24
30
|
|
|
25
31
|
const STORAGE_KEY = 'mindos:organize-history';
|
|
@@ -4,17 +4,21 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { registerRenderer } from './registry';
|
|
6
6
|
import { manifest as agentInspector } from '@/components/renderers/agent-inspector/manifest';
|
|
7
|
+
import { manifest as audio } from '@/components/renderers/audio/manifest';
|
|
7
8
|
import { manifest as backlinks } from '@/components/renderers/backlinks/manifest';
|
|
8
9
|
import { manifest as config } from '@/components/renderers/config/manifest';
|
|
9
10
|
import { manifest as csv } from '@/components/renderers/csv/manifest';
|
|
11
|
+
import { manifest as image } from '@/components/renderers/image/manifest';
|
|
12
|
+
import { manifest as pdf } from '@/components/renderers/pdf/manifest';
|
|
10
13
|
import { manifest as summary } from '@/components/renderers/summary/manifest';
|
|
11
14
|
import { manifest as timeline } from '@/components/renderers/timeline/manifest';
|
|
12
15
|
import { manifest as todo } from '@/components/renderers/todo/manifest';
|
|
16
|
+
import { manifest as video } from '@/components/renderers/video/manifest';
|
|
13
17
|
import { manifest as workflowYaml } from '@/components/renderers/workflow-yaml/manifest';
|
|
14
18
|
import { manifest as graph } from '@/components/renderers/graph/manifest';
|
|
15
19
|
|
|
16
20
|
const manifests = [
|
|
17
|
-
agentInspector, backlinks, config, csv, summary, timeline, todo, workflowYaml, graph,
|
|
21
|
+
agentInspector, audio, backlinks, config, csv, image, pdf, summary, timeline, todo, video, workflowYaml, graph,
|
|
18
22
|
];
|
|
19
23
|
|
|
20
24
|
for (const m of manifests) {
|
package/app/lib/settings.ts
CHANGED
|
@@ -51,6 +51,13 @@ export interface ServerSettings {
|
|
|
51
51
|
guideState?: GuideState;
|
|
52
52
|
/** Per-agent ACP overrides (command, args, env, enabled). Keyed by agent ID. */
|
|
53
53
|
acpAgents?: Record<string, import('./acp/agent-descriptors').AcpAgentOverride>;
|
|
54
|
+
/** Proxy compatibility cache: keyed by baseUrl, value is detected mode. */
|
|
55
|
+
baseUrlCompat?: Record<string, 'streaming' | 'non-streaming'>;
|
|
56
|
+
/** User's connection mode preference: CLI always on, MCP is optional */
|
|
57
|
+
connectionMode?: {
|
|
58
|
+
cli: boolean; // Always true (CLI is mandatory)
|
|
59
|
+
mcp: boolean; // User's explicit choice during onboarding
|
|
60
|
+
};
|
|
54
61
|
}
|
|
55
62
|
|
|
56
63
|
const DEFAULTS: ServerSettings = {
|
|
@@ -162,6 +169,26 @@ function parseGuideState(raw: unknown): GuideState | undefined {
|
|
|
162
169
|
};
|
|
163
170
|
}
|
|
164
171
|
|
|
172
|
+
/** Infer connectionMode from old config.
|
|
173
|
+
* Old configs don't have connectionMode — both CLI and MCP were always available.
|
|
174
|
+
* So we default to { cli: true, mcp: true } for existing users to avoid breaking change. */
|
|
175
|
+
function inferConnectionMode(parsed: Record<string, unknown>): { cli: boolean; mcp: boolean } {
|
|
176
|
+
// If already has explicit connectionMode, return it
|
|
177
|
+
if (parsed.connectionMode && typeof parsed.connectionMode === 'object') {
|
|
178
|
+
const obj = parsed.connectionMode as Record<string, unknown>;
|
|
179
|
+
if (typeof obj.cli === 'boolean' && typeof obj.mcp === 'boolean') {
|
|
180
|
+
return { cli: obj.cli, mcp: obj.mcp };
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// Old config without connectionMode: default to both enabled (backwards-compat)
|
|
184
|
+
// Only fresh installs (setupPending=true or missing config) get mcp: false
|
|
185
|
+
const isNewInstall = parsed.setupPending === true || !parsed.mindRoot;
|
|
186
|
+
return {
|
|
187
|
+
cli: true,
|
|
188
|
+
mcp: !isNewInstall, // Existing users keep MCP, new users start with CLI-only
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
|
|
165
192
|
export function readSettings(): ServerSettings {
|
|
166
193
|
try {
|
|
167
194
|
const raw = fs.readFileSync(SETTINGS_PATH, 'utf-8');
|
|
@@ -179,6 +206,16 @@ export function readSettings(): ServerSettings {
|
|
|
179
206
|
setupPending: parsed.setupPending === true ? true : undefined,
|
|
180
207
|
disabledSkills: Array.isArray(parsed.disabledSkills) ? parsed.disabledSkills as string[] : undefined,
|
|
181
208
|
guideState: parseGuideState(parsed.guideState),
|
|
209
|
+
baseUrlCompat: (() => {
|
|
210
|
+
const raw = parsed.baseUrlCompat;
|
|
211
|
+
if (!raw || typeof raw !== 'object') return undefined;
|
|
212
|
+
const result: Record<string, 'streaming' | 'non-streaming'> = {};
|
|
213
|
+
for (const [k, v] of Object.entries(raw)) {
|
|
214
|
+
if (v === 'streaming' || v === 'non-streaming') result[k] = v;
|
|
215
|
+
}
|
|
216
|
+
return Object.keys(result).length > 0 ? result : undefined;
|
|
217
|
+
})(),
|
|
218
|
+
connectionMode: inferConnectionMode(parsed),
|
|
182
219
|
};
|
|
183
220
|
} catch {
|
|
184
221
|
// Config file missing or corrupt → force setup wizard
|
|
@@ -186,6 +223,7 @@ export function readSettings(): ServerSettings {
|
|
|
186
223
|
...DEFAULTS,
|
|
187
224
|
ai: { ...DEFAULTS.ai, providers: { ...DEFAULTS.ai.providers } },
|
|
188
225
|
setupPending: true,
|
|
226
|
+
connectionMode: { cli: true, mcp: false },
|
|
189
227
|
};
|
|
190
228
|
}
|
|
191
229
|
}
|
|
@@ -206,6 +244,8 @@ export function writeSettings(settings: ServerSettings): void {
|
|
|
206
244
|
if (settings.disabledSkills !== undefined) merged.disabledSkills = settings.disabledSkills;
|
|
207
245
|
if (settings.guideState !== undefined) merged.guideState = settings.guideState;
|
|
208
246
|
if (settings.acpAgents !== undefined) merged.acpAgents = settings.acpAgents;
|
|
247
|
+
if (settings.baseUrlCompat !== undefined) merged.baseUrlCompat = settings.baseUrlCompat;
|
|
248
|
+
if (settings.connectionMode !== undefined) merged.connectionMode = settings.connectionMode;
|
|
209
249
|
// setupPending: false/undefined → remove the field (cleanup); true → set it
|
|
210
250
|
if ('setupPending' in settings) {
|
|
211
251
|
if (settings.setupPending) merged.setupPending = true;
|
|
@@ -287,3 +327,23 @@ export function effectiveSopRoot(): string {
|
|
|
287
327
|
const s = readSettings();
|
|
288
328
|
return s.mindRoot || process.env.MIND_ROOT || path.join(os.homedir(), 'MindOS', 'mind');
|
|
289
329
|
}
|
|
330
|
+
|
|
331
|
+
/** Read the baseUrl → compat mode cache from config. Never throws. */
|
|
332
|
+
export function readBaseUrlCompat(): Record<string, 'streaming' | 'non-streaming'> {
|
|
333
|
+
try {
|
|
334
|
+
const s = readSettings();
|
|
335
|
+
return s.baseUrlCompat ?? {};
|
|
336
|
+
} catch {
|
|
337
|
+
return {};
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
/** Persist a baseUrl compatibility detection result. Thread-safe via merge-write. */
|
|
342
|
+
export function writeBaseUrlCompat(baseUrl: string, mode: 'streaming' | 'non-streaming'): void {
|
|
343
|
+
const s = readSettings();
|
|
344
|
+
const updated: Record<string, 'streaming' | 'non-streaming'> = {
|
|
345
|
+
...(s.baseUrlCompat ?? {}),
|
|
346
|
+
[baseUrl]: mode,
|
|
347
|
+
};
|
|
348
|
+
writeSettings({ ...s, baseUrlCompat: updated });
|
|
349
|
+
}
|
|
@@ -21,7 +21,20 @@ export interface WalkthroughStoreState {
|
|
|
21
21
|
|
|
22
22
|
/* ── Helpers ── */
|
|
23
23
|
|
|
24
|
+
const LS_KEY = 'mindos_walkthrough_done';
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Persist walkthrough state to server AND localStorage.
|
|
28
|
+
* localStorage acts as a safety net: even if the server persist fails
|
|
29
|
+
* (e.g. during update restart, network blip), the completion state
|
|
30
|
+
* survives page reload and prevents the "stuck overlay" bug.
|
|
31
|
+
*/
|
|
24
32
|
function persistStep(step: number, dismissed: boolean) {
|
|
33
|
+
// Local safety net — instant, survives server outage
|
|
34
|
+
if (step >= walkthroughSteps.length || dismissed) {
|
|
35
|
+
try { localStorage.setItem(LS_KEY, '1'); } catch {}
|
|
36
|
+
}
|
|
37
|
+
// Server persist — fire-and-forget (localStorage is the safety net)
|
|
25
38
|
fetch('/api/setup', {
|
|
26
39
|
method: 'PATCH',
|
|
27
40
|
headers: { 'Content-Type': 'application/json' },
|
|
@@ -31,6 +44,11 @@ function persistStep(step: number, dismissed: boolean) {
|
|
|
31
44
|
}).catch((err) => { console.warn('[walkthrough-store] persist failed:', err); });
|
|
32
45
|
}
|
|
33
46
|
|
|
47
|
+
/** Check if walkthrough was completed/dismissed (fast, sync, local) */
|
|
48
|
+
function isLocallyDone(): boolean {
|
|
49
|
+
try { return localStorage.getItem(LS_KEY) === '1'; } catch { return false; }
|
|
50
|
+
}
|
|
51
|
+
|
|
34
52
|
/* ── Store ── */
|
|
35
53
|
|
|
36
54
|
export const useWalkthroughStore = create<WalkthroughStoreState>((set, get) => {
|
|
@@ -84,12 +102,26 @@ export const useWalkthroughStore = create<WalkthroughStoreState>((set, get) => {
|
|
|
84
102
|
// Only auto-start on desktop
|
|
85
103
|
if (window.innerWidth < 768) return () => {};
|
|
86
104
|
|
|
105
|
+
// Fast local check: if walkthrough was completed/dismissed, never reactivate.
|
|
106
|
+
// This prevents the "stuck overlay" bug where server persist failed during
|
|
107
|
+
// update restart but localStorage recorded the completion.
|
|
108
|
+
if (isLocallyDone()) return () => {};
|
|
109
|
+
|
|
87
110
|
fetch('/api/setup')
|
|
88
111
|
.then(r => r.json())
|
|
89
112
|
.then(data => {
|
|
90
113
|
const gs = data.guideState;
|
|
91
114
|
if (!gs) return;
|
|
92
|
-
if (gs.walkthroughDismissed)
|
|
115
|
+
if (gs.walkthroughDismissed) {
|
|
116
|
+
try { localStorage.setItem(LS_KEY, '1'); } catch {} // sync local
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// If server says completed (step >= totalSteps), mark locally done
|
|
121
|
+
if (typeof gs.walkthroughStep === 'number' && gs.walkthroughStep >= totalSteps) {
|
|
122
|
+
try { localStorage.setItem(LS_KEY, '1'); } catch {};
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
93
125
|
|
|
94
126
|
if (gs.active && !gs.dismissed && gs.walkthroughStep === undefined) {
|
|
95
127
|
if (isWelcome) {
|
package/bin/commands/doctor.js
CHANGED
|
@@ -5,12 +5,13 @@
|
|
|
5
5
|
|
|
6
6
|
import { execSync } from 'node:child_process';
|
|
7
7
|
import { existsSync, readFileSync } from 'node:fs';
|
|
8
|
-
import { resolve } from 'node:path';
|
|
8
|
+
import { resolve, delimiter } from 'node:path';
|
|
9
9
|
import { homedir } from 'node:os';
|
|
10
10
|
import { CONFIG_PATH, ROOT } from '../lib/constants.js';
|
|
11
11
|
import { bold, dim, cyan, green, red, yellow } from '../lib/colors.js';
|
|
12
12
|
import { isPortInUse } from '../lib/port.js';
|
|
13
13
|
import { EXIT } from '../lib/command.js';
|
|
14
|
+
import { stripBom } from '../lib/jsonc.js';
|
|
14
15
|
|
|
15
16
|
export const meta = {
|
|
16
17
|
name: 'doctor',
|
|
@@ -45,7 +46,7 @@ export const run = async (_args, flags) => {
|
|
|
45
46
|
}
|
|
46
47
|
let config;
|
|
47
48
|
try {
|
|
48
|
-
config = JSON.parse(readFileSync(CONFIG_PATH, 'utf-8'));
|
|
49
|
+
config = JSON.parse(stripBom(readFileSync(CONFIG_PATH, 'utf-8')));
|
|
49
50
|
ok(`Config file found and valid JSON ${dim(CONFIG_PATH)}`, 'config');
|
|
50
51
|
} catch {
|
|
51
52
|
err(`Config file exists but failed to parse ${dim(CONFIG_PATH)}`, 'config');
|
|
@@ -58,7 +59,7 @@ export const run = async (_args, flags) => {
|
|
|
58
59
|
if (!mindRoot) {
|
|
59
60
|
err('Config missing required field: mindRoot');
|
|
60
61
|
hasError = true;
|
|
61
|
-
} else if (!existsSync(mindRoot.replace(
|
|
62
|
+
} else if (!existsSync(mindRoot === '~' ? homedir() : mindRoot.replace(/^~[/\\]/, homedir() + '/'))) {
|
|
62
63
|
warn(`mindRoot path does not exist: ${dim(mindRoot)} (will be created on first start)`);
|
|
63
64
|
} else {
|
|
64
65
|
ok(`Knowledge base path exists ${dim(mindRoot)}`);
|
|
@@ -100,14 +101,19 @@ export const run = async (_args, flags) => {
|
|
|
100
101
|
ok(`npm ${npmVersion} reachable`);
|
|
101
102
|
} catch {
|
|
102
103
|
err('npm not found in PATH — app dependencies cannot be installed');
|
|
103
|
-
|
|
104
|
-
|
|
104
|
+
if (process.platform === 'win32') {
|
|
105
|
+
console.log(dim(' Ensure Node.js is installed and its bin directory is in your system PATH.'));
|
|
106
|
+
console.log(dim(' Fix: reinstall Node.js from https://nodejs.org (the installer adds it to PATH).'));
|
|
107
|
+
} else {
|
|
108
|
+
console.log(dim(' Node.js may be installed via nvm/fnm/volta and not visible to /bin/sh.'));
|
|
109
|
+
console.log(dim(' Fix: add your Node.js bin path to ~/.profile so non-interactive shells can find it.'));
|
|
110
|
+
}
|
|
105
111
|
hasError = true;
|
|
106
112
|
}
|
|
107
113
|
|
|
108
114
|
// 4c. ~/.mindos/bin in PATH (CLI shim)
|
|
109
115
|
const mindosBin = resolve(homedir(), '.mindos', 'bin');
|
|
110
|
-
const pathDirs = (process.env.PATH || '').split(
|
|
116
|
+
const pathDirs = (process.env.PATH || '').split(delimiter);
|
|
111
117
|
if (pathDirs.some(d => d === mindosBin || d === '$HOME/.mindos/bin' || d === '~/.mindos/bin')) {
|
|
112
118
|
ok(`~/.mindos/bin is in PATH`);
|
|
113
119
|
} else {
|
package/bin/commands/file.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import { existsSync, readFileSync, writeFileSync, appendFileSync, unlinkSync, renameSync, mkdirSync, readdirSync, statSync, openSync, readSync, closeSync } from 'node:fs';
|
|
10
|
-
import { resolve, basename, dirname, relative } from 'node:path';
|
|
10
|
+
import { resolve, basename, dirname, relative, sep } from 'node:path';
|
|
11
11
|
import { execFileSync } from 'node:child_process';
|
|
12
12
|
import { bold, dim, cyan, green, red, yellow } from '../lib/colors.js';
|
|
13
13
|
import { loadConfig } from '../lib/config.js';
|
|
@@ -28,9 +28,12 @@ function getMindRoot() {
|
|
|
28
28
|
|
|
29
29
|
function resolvePath(root, filePath) {
|
|
30
30
|
const resolved = resolve(root, filePath);
|
|
31
|
-
if (resolved !== root
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
if (resolved !== root) {
|
|
32
|
+
const rel = relative(root, resolved);
|
|
33
|
+
if (rel === '..' || rel.startsWith(`..${sep}`) || rel.startsWith('../')) {
|
|
34
|
+
console.error(red(`Access denied: path outside knowledge base`));
|
|
35
|
+
process.exit(EXIT.ERROR);
|
|
36
|
+
}
|
|
34
37
|
}
|
|
35
38
|
return resolved;
|
|
36
39
|
}
|
package/bin/commands/logs.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* mindos logs — Tail service logs
|
|
2
|
+
* mindos logs — Tail service logs (cross-platform, no external tools)
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import {
|
|
6
|
-
import { existsSync } from 'node:fs';
|
|
5
|
+
import { existsSync, readFileSync, statSync, watch as fsWatch, openSync, readSync, closeSync } from 'node:fs';
|
|
7
6
|
import { LOG_PATH } from '../lib/constants.js';
|
|
8
7
|
import { dim } from '../lib/colors.js';
|
|
9
8
|
|
|
@@ -17,6 +16,38 @@ export const meta = {
|
|
|
17
16
|
],
|
|
18
17
|
};
|
|
19
18
|
|
|
19
|
+
function tailLines(filePath, count) {
|
|
20
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
21
|
+
const lines = content.split('\n');
|
|
22
|
+
return lines.slice(-count).join('\n');
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function followFile(filePath) {
|
|
26
|
+
let size = statSync(filePath).size;
|
|
27
|
+
|
|
28
|
+
const readNew = () => {
|
|
29
|
+
let newSize;
|
|
30
|
+
try { newSize = statSync(filePath).size; } catch { return; }
|
|
31
|
+
if (newSize <= size) { size = newSize; return; }
|
|
32
|
+
const fd = openSync(filePath, 'r');
|
|
33
|
+
try {
|
|
34
|
+
const buf = Buffer.alloc(newSize - size);
|
|
35
|
+
readSync(fd, buf, 0, buf.length, size);
|
|
36
|
+
process.stdout.write(buf.toString('utf-8'));
|
|
37
|
+
} finally {
|
|
38
|
+
closeSync(fd);
|
|
39
|
+
}
|
|
40
|
+
size = newSize;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const watcher = fsWatch(filePath, { persistent: true }, readNew);
|
|
44
|
+
// Also poll as a fallback — fs.watch is unreliable on some network/VM mounts
|
|
45
|
+
const interval = setInterval(readNew, 1000);
|
|
46
|
+
|
|
47
|
+
process.on('SIGINT', () => { watcher.close(); clearInterval(interval); process.exit(0); });
|
|
48
|
+
process.on('SIGTERM', () => { watcher.close(); clearInterval(interval); process.exit(0); });
|
|
49
|
+
}
|
|
50
|
+
|
|
20
51
|
export const run = async (args, flags) => {
|
|
21
52
|
const { ensureMindosDir } = await import('../lib/gateway.js');
|
|
22
53
|
await ensureMindosDir();
|
|
@@ -28,5 +59,9 @@ export const run = async (args, flags) => {
|
|
|
28
59
|
}
|
|
29
60
|
|
|
30
61
|
const noFollow = flags['no-follow'] === true;
|
|
31
|
-
|
|
62
|
+
console.log(tailLines(LOG_PATH, 100));
|
|
63
|
+
|
|
64
|
+
if (!noFollow) {
|
|
65
|
+
followFile(LOG_PATH);
|
|
66
|
+
}
|
|
32
67
|
};
|
package/bin/commands/onboard.js
CHANGED
|
@@ -21,5 +21,5 @@ export const meta = {
|
|
|
21
21
|
|
|
22
22
|
export const run = (args, flags) => {
|
|
23
23
|
const daemonFlag = flags['install-daemon'] ? ' --install-daemon' : '';
|
|
24
|
-
execInherited(`node ${resolve(ROOT, 'scripts/setup.js')}${daemonFlag}`);
|
|
24
|
+
execInherited(`node "${resolve(ROOT, 'scripts/setup.js')}"${daemonFlag}`);
|
|
25
25
|
};
|
package/bin/commands/open.js
CHANGED
|
@@ -33,7 +33,12 @@ export const run = () => {
|
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
try {
|
|
36
|
-
|
|
36
|
+
if (process.platform === 'win32') {
|
|
37
|
+
// Windows `start` treats the first quoted arg as a window title
|
|
38
|
+
execSync(`start "" "${url}"`, { stdio: 'ignore' });
|
|
39
|
+
} else {
|
|
40
|
+
execSync(`${cmd} ${url}`, { stdio: 'ignore' });
|
|
41
|
+
}
|
|
37
42
|
console.log(`${green('✔')} Opening ${cyan(url)}`);
|
|
38
43
|
} catch {
|
|
39
44
|
console.log(dim(`Could not open browser automatically. Visit: ${cyan(url)}`));
|