@geminilight/mindos 0.6.53 → 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 +23 -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 +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 +5 -5
- 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_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_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_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 +23 -20
- 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 +1 -1
- 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/tsconfig.tsbuildinfo +1 -1
- 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/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/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 +1 -1
- package/app/components/walkthrough/WalkthroughTooltip.tsx +1 -1
- package/app/hooks/useAiOrganize.ts +14 -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 +34 -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 +28 -0
- 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 +8 -18
- package/bin/lib/build.js +19 -8
- package/bin/lib/cli-shim.js +67 -2
- package/bin/lib/config.js +4 -5
- package/bin/lib/gateway.js +10 -23
- 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 +72 -51
- package/bin/lib/sync.js +1 -1
- package/package.json +1 -1
- package/scripts/setup.js +7 -5
- package/_standalone/.next/server/chunks/3436.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/W-wLgvhPtPJ5Psq9V4i3M/_buildManifest.js +0 -1
- package/_standalone/.next/static/chunks/1053-17786066ecd6f216.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-e5d2fb384207d821.js +0 -186
- package/_standalone/.next/static/chunks/app/loading-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/page-54edd045d3448df5.js +0 -7
- package/_standalone/.next/static/chunks/app/trash/page-6372bb3f5463affa.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-f3d1d87190dcfe28.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/.next/static/{W-wLgvhPtPJ5Psq9V4i3M → 2hrwFOLEOZhHQHfrIt-Dw}/_ssgManifest.js +0 -0
|
@@ -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
|
@@ -53,6 +53,11 @@ export interface ServerSettings {
|
|
|
53
53
|
acpAgents?: Record<string, import('./acp/agent-descriptors').AcpAgentOverride>;
|
|
54
54
|
/** Proxy compatibility cache: keyed by baseUrl, value is detected mode. */
|
|
55
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
|
+
};
|
|
56
61
|
}
|
|
57
62
|
|
|
58
63
|
const DEFAULTS: ServerSettings = {
|
|
@@ -164,6 +169,26 @@ function parseGuideState(raw: unknown): GuideState | undefined {
|
|
|
164
169
|
};
|
|
165
170
|
}
|
|
166
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
|
+
|
|
167
192
|
export function readSettings(): ServerSettings {
|
|
168
193
|
try {
|
|
169
194
|
const raw = fs.readFileSync(SETTINGS_PATH, 'utf-8');
|
|
@@ -190,6 +215,7 @@ export function readSettings(): ServerSettings {
|
|
|
190
215
|
}
|
|
191
216
|
return Object.keys(result).length > 0 ? result : undefined;
|
|
192
217
|
})(),
|
|
218
|
+
connectionMode: inferConnectionMode(parsed),
|
|
193
219
|
};
|
|
194
220
|
} catch {
|
|
195
221
|
// Config file missing or corrupt → force setup wizard
|
|
@@ -197,6 +223,7 @@ export function readSettings(): ServerSettings {
|
|
|
197
223
|
...DEFAULTS,
|
|
198
224
|
ai: { ...DEFAULTS.ai, providers: { ...DEFAULTS.ai.providers } },
|
|
199
225
|
setupPending: true,
|
|
226
|
+
connectionMode: { cli: true, mcp: false },
|
|
200
227
|
};
|
|
201
228
|
}
|
|
202
229
|
}
|
|
@@ -218,6 +245,7 @@ export function writeSettings(settings: ServerSettings): void {
|
|
|
218
245
|
if (settings.guideState !== undefined) merged.guideState = settings.guideState;
|
|
219
246
|
if (settings.acpAgents !== undefined) merged.acpAgents = settings.acpAgents;
|
|
220
247
|
if (settings.baseUrlCompat !== undefined) merged.baseUrlCompat = settings.baseUrlCompat;
|
|
248
|
+
if (settings.connectionMode !== undefined) merged.connectionMode = settings.connectionMode;
|
|
221
249
|
// setupPending: false/undefined → remove the field (cleanup); true → set it
|
|
222
250
|
if ('setupPending' in settings) {
|
|
223
251
|
if (settings.setupPending) merged.setupPending = true;
|
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)}`));
|
package/bin/commands/space.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import { existsSync, readdirSync, statSync, mkdirSync, writeFileSync, rmSync, renameSync } from 'node:fs';
|
|
10
|
-
import { resolve, basename } from 'node:path';
|
|
10
|
+
import { resolve, basename, relative, sep } from 'node:path';
|
|
11
11
|
import { bold, dim, cyan, green, red, yellow } from '../lib/colors.js';
|
|
12
12
|
import { loadConfig } from '../lib/config.js';
|
|
13
13
|
import { output, isJsonMode, EXIT } from '../lib/command.js';
|
|
@@ -93,9 +93,12 @@ function countFiles(dir) {
|
|
|
93
93
|
|
|
94
94
|
function resolvePath(root, relPath) {
|
|
95
95
|
const full = relPath ? resolve(root, relPath) : root;
|
|
96
|
-
if (full !== root
|
|
97
|
-
|
|
98
|
-
|
|
96
|
+
if (full !== root) {
|
|
97
|
+
const rel = relative(root, full);
|
|
98
|
+
if (rel === '..' || rel.startsWith(`..${sep}`) || rel.startsWith('../')) {
|
|
99
|
+
console.error(red(`Access denied: path outside knowledge base`));
|
|
100
|
+
process.exit(EXIT.ERROR);
|
|
101
|
+
}
|
|
99
102
|
}
|
|
100
103
|
if (!existsSync(full)) {
|
|
101
104
|
console.error(red(`Not found: ${relPath || '(root)'}`));
|
package/bin/commands/update.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import { execSync, spawn as nodeSpawn } from 'node:child_process';
|
|
8
|
-
import { existsSync, readFileSync, writeFileSync, rmSync } from 'node:fs';
|
|
8
|
+
import { existsSync, readFileSync, writeFileSync, rmSync, realpathSync } from 'node:fs';
|
|
9
9
|
import { dirname, resolve } from 'node:path';
|
|
10
10
|
|
|
11
11
|
import { ROOT, BUILD_STAMP, CONFIG_PATH, LOG_PATH } from '../lib/constants.js';
|
|
@@ -16,6 +16,7 @@ import { stopMindos } from '../lib/stop.js';
|
|
|
16
16
|
import { getLocalIP } from '../lib/startup.js';
|
|
17
17
|
import { isPortInUse } from '../lib/port.js';
|
|
18
18
|
import { cleanEnvForRestart } from '../lib/clean-env.js';
|
|
19
|
+
import { stripBom } from '../lib/jsonc.js';
|
|
19
20
|
|
|
20
21
|
/**
|
|
21
22
|
* Dynamically resolve the new ROOT after `npm install -g`.
|
|
@@ -23,27 +24,16 @@ import { cleanEnvForRestart } from '../lib/clean-env.js';
|
|
|
23
24
|
*/
|
|
24
25
|
function getUpdatedRoot() {
|
|
25
26
|
try {
|
|
26
|
-
const
|
|
27
|
+
const whichCmd = process.platform === 'win32' ? 'where mindos' : 'which mindos';
|
|
28
|
+
const mindosBin = execSync(whichCmd, { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'ignore'] }).trim().split(/\r?\n/)[0];
|
|
27
29
|
if (mindosBin) {
|
|
28
|
-
// mindos bin is usually at <root>/bin/cli.js or a symlink to it
|
|
29
30
|
let cliPath;
|
|
30
|
-
try {
|
|
31
|
-
cliPath = execSync(`readlink -f "${mindosBin}"`, { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'ignore'] }).trim();
|
|
32
|
-
} catch {
|
|
33
|
-
try {
|
|
34
|
-
cliPath = execSync(`realpath "${mindosBin}"`, { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'ignore'] }).trim();
|
|
35
|
-
} catch {
|
|
36
|
-
cliPath = mindosBin;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
31
|
+
try { cliPath = realpathSync(mindosBin); } catch { cliPath = mindosBin; }
|
|
39
32
|
if (cliPath) {
|
|
40
|
-
// cliPath is like /path/to/node_modules/@geminilight/mindos/bin/cli.js
|
|
41
|
-
// ROOT is /path/to/node_modules/@geminilight/mindos
|
|
42
33
|
return resolve(dirname(cliPath), '..');
|
|
43
34
|
}
|
|
44
35
|
}
|
|
45
36
|
} catch {}
|
|
46
|
-
// Fallback to static ROOT
|
|
47
37
|
return ROOT;
|
|
48
38
|
}
|
|
49
39
|
|
|
@@ -85,7 +75,7 @@ function buildIfNeeded(newRoot) {
|
|
|
85
75
|
}
|
|
86
76
|
const nextDir = resolve(newRoot, 'app', '.next');
|
|
87
77
|
if (existsSync(nextDir)) {
|
|
88
|
-
|
|
78
|
+
rmSync(nextDir, { recursive: true, force: true });
|
|
89
79
|
}
|
|
90
80
|
execInherited('node scripts/gen-renderer-index.js', newRoot);
|
|
91
81
|
execInherited(`${newNextBin} build`, resolve(newRoot, 'app'));
|
|
@@ -176,7 +166,7 @@ export const run = async () => {
|
|
|
176
166
|
writeUpdateStatus('restarting', vOpts);
|
|
177
167
|
await gateway.runGatewayCommand('install');
|
|
178
168
|
const updateConfig = (() => {
|
|
179
|
-
try { return JSON.parse(readFileSync(CONFIG_PATH, 'utf-8')); } catch { return {}; }
|
|
169
|
+
try { return JSON.parse(stripBom(readFileSync(CONFIG_PATH, 'utf-8'))); } catch { return {}; }
|
|
180
170
|
})();
|
|
181
171
|
const webPort = updateConfig.port ?? 3456;
|
|
182
172
|
const mcpPort = updateConfig.mcpPort ?? 8781;
|
|
@@ -205,7 +195,7 @@ export const run = async () => {
|
|
|
205
195
|
// (e.g. user started via `mindos start`, or GUI triggered this update).
|
|
206
196
|
// If so, stop it and restart from the NEW installation path.
|
|
207
197
|
const updateConfig = (() => {
|
|
208
|
-
try { return JSON.parse(readFileSync(CONFIG_PATH, 'utf-8')); } catch { return {}; }
|
|
198
|
+
try { return JSON.parse(stripBom(readFileSync(CONFIG_PATH, 'utf-8'))); } catch { return {}; }
|
|
209
199
|
})();
|
|
210
200
|
const webPort = Number(updateConfig.port ?? 3456);
|
|
211
201
|
const mcpPort = Number(updateConfig.mcpPort ?? 8781);
|
package/bin/lib/build.js
CHANGED
|
@@ -118,13 +118,19 @@ export function ensureAppDeps({ force = false } = {}) {
|
|
|
118
118
|
} catch {
|
|
119
119
|
console.error(red('\n\u2718 npm not found in PATH.\n'));
|
|
120
120
|
console.error(' MindOS needs npm to install its app dependencies on first run.');
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
121
|
+
if (process.platform === 'win32') {
|
|
122
|
+
console.error(' Ensure Node.js is installed and added to your system PATH.\n');
|
|
123
|
+
console.error(' Fix: reinstall Node.js from https://nodejs.org (the installer adds it to PATH).');
|
|
124
|
+
console.error(' Then open a new terminal and run `mindos start` again.\n');
|
|
125
|
+
} else {
|
|
126
|
+
console.error(' This usually means Node.js is installed via a version manager (nvm, fnm, volta, etc.)');
|
|
127
|
+
console.error(' that only loads in interactive shells, but not in /bin/sh.\n');
|
|
128
|
+
console.error(' Fix: add your Node.js bin directory to a profile that /bin/sh reads (~/.profile).');
|
|
129
|
+
console.error(' Example:');
|
|
130
|
+
console.error(dim(' echo \'export PATH="$HOME/.nvm/versions/node/$(node --version)/bin:$PATH"\' >> ~/.profile'));
|
|
131
|
+
console.error(dim(' source ~/.profile\n'));
|
|
132
|
+
console.error(' Then run `mindos start` again.\n');
|
|
133
|
+
}
|
|
128
134
|
process.exit(1);
|
|
129
135
|
}
|
|
130
136
|
|
|
@@ -142,7 +148,12 @@ export function ensureAppDeps({ force = false } = {}) {
|
|
|
142
148
|
run('npm install --no-workspaces', resolve(ROOT, 'app'));
|
|
143
149
|
if (!verifyDeps()) {
|
|
144
150
|
console.error(red('\n✘ Failed to install dependencies after retry.\n'));
|
|
145
|
-
|
|
151
|
+
const appDir = resolve(ROOT, 'app');
|
|
152
|
+
if (process.platform === 'win32') {
|
|
153
|
+
console.error(` Try manually: cd "${appDir}" && rmdir /s /q node_modules && npm install`);
|
|
154
|
+
} else {
|
|
155
|
+
console.error(` Try manually: cd ${appDir} && rm -rf node_modules && npm install`);
|
|
156
|
+
}
|
|
146
157
|
process.exit(1);
|
|
147
158
|
}
|
|
148
159
|
}
|