@geminilight/mindos 0.6.38 → 0.6.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -9
- package/README_zh.md +37 -9
- package/_standalone/.mindos-build-version +1 -1
- package/_standalone/.next/BUILD_ID +1 -1
- package/_standalone/.next/app-path-routes-manifest.json +21 -20
- package/_standalone/.next/build-manifest.json +3 -3
- package/_standalone/.next/cache/.previewinfo +1 -1
- package/_standalone/.next/cache/.rscinfo +1 -1
- package/_standalone/.next/cache/config.json +3 -3
- package/_standalone/.next/prerender-manifest.json +3 -3
- package/_standalone/.next/react-loadable-manifest.json +68 -6
- package/_standalone/.next/routes-manifest.json +6 -0
- package/_standalone/.next/server/app/.well-known/agent-card.json/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/_global-error.html +2 -2
- package/_standalone/.next/server/app/_global-error.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/_standalone/.next/server/app/_not-found/page.js +2 -2
- package/_standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/agents/[agentKey]/page.js +2 -2
- package/_standalone/.next/server/app/agents/[agentKey]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/agents/[agentKey]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/agents/page.js +3 -3
- package/_standalone/.next/server/app/agents/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/agents/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/delegations/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/discover/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/config/route.js +1 -1
- package/_standalone/.next/server/app/api/acp/config/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/acp/config/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/detect/route.js +1 -1
- package/_standalone/.next/server/app/api/acp/detect/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/acp/detect/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/install/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/registry/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/session/route.js +1 -1
- package/_standalone/.next/server/app/api/acp/session/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/acp/session/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/agent-activity/route.js +1 -1
- package/_standalone/.next/server/app/api/agent-activity/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/agent-activity/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/ask/route.js +133 -95
- package/_standalone/.next/server/app/api/ask/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/ask/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/ask-sessions/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/auth/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/backlinks/route.js +1 -1
- package/_standalone/.next/server/app/api/backlinks/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/backlinks/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/bootstrap/route.js +1 -1
- package/_standalone/.next/server/app/api/bootstrap/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/bootstrap/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/changes/route.js +1 -1
- package/_standalone/.next/server/app/api/changes/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/changes/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/export/route.js +3 -3
- package/_standalone/.next/server/app/api/export/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/export/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/extract-pdf/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/file/import/route.js +2 -19
- package/_standalone/.next/server/app/api/file/import/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/file/import/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/file/route.js +1 -18
- package/_standalone/.next/server/app/api/file/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/file/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/files/route.js +1 -1
- package/_standalone/.next/server/app/api/files/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/git/route.js +1 -1
- package/_standalone/.next/server/app/api/git/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/graph/route.js +1 -1
- package/_standalone/.next/server/app/api/graph/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/graph/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/inbox/route.js +1 -0
- package/_standalone/.next/server/app/api/inbox/route.js.nft.json +1 -0
- package/_standalone/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -0
- package/_standalone/.next/server/app/api/init/route.js +1 -1
- package/_standalone/.next/server/app/api/init/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/agents/route.js +1 -1
- package/_standalone/.next/server/app/api/mcp/agents/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/mcp/agents/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/install/route.js +1 -1
- package/_standalone/.next/server/app/api/mcp/install/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/mcp/install/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/install-skill/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/restart/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/status/route.js +1 -1
- package/_standalone/.next/server/app/api/mcp/status/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/monitoring/route.js +1 -1
- package/_standalone/.next/server/app/api/monitoring/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/recent-files/route.js +1 -1
- package/_standalone/.next/server/app/api/recent-files/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/search/route.js +1 -1
- package/_standalone/.next/server/app/api/search/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/list-models/route.js +1 -1
- package/_standalone/.next/server/app/api/settings/list-models/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/settings/list-models/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/reset-token/route.js +1 -1
- package/_standalone/.next/server/app/api/settings/reset-token/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/settings/reset-token/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/route.js +1 -1
- package/_standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/test-key/route.js +1 -1
- package/_standalone/.next/server/app/api/settings/test-key/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/settings/test-key/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/check-path/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/check-port/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/generate-token/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/ls/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/route.js +1 -1
- package/_standalone/.next/server/app/api/setup/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/setup/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/skills/route.js +2 -2
- package/_standalone/.next/server/app/api/skills/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/sync/route.js +1 -1
- package/_standalone/.next/server/app/api/sync/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/tree-version/route.js +1 -1
- package/_standalone/.next/server/app/api/tree-version/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update-check/route.js +1 -1
- package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/workflows/route.js +2 -2
- package/_standalone/.next/server/app/api/workflows/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/changes/page.js +2 -2
- package/_standalone/.next/server/app/changes/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/changes/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/echo/[segment]/page.js +6 -6
- package/_standalone/.next/server/app/echo/[segment]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/echo/page.js +2 -2
- package/_standalone/.next/server/app/echo/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/echo/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/explore/page.js +3 -3
- package/_standalone/.next/server/app/explore/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/explore/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/help/page.js +2 -2
- package/_standalone/.next/server/app/help/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/login/page.js +2 -2
- package/_standalone/.next/server/app/login/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/page.js +3 -3
- package/_standalone/.next/server/app/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/setup/page.js +2 -2
- package/_standalone/.next/server/app/setup/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/trash/page.js +3 -3
- package/_standalone/.next/server/app/trash/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/trash/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/view/[...path]/page.js +4 -4
- package/_standalone/.next/server/app/view/[...path]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/view/[...path]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app-paths-manifest.json +21 -20
- package/_standalone/.next/server/chunks/1550.js +1 -1
- package/_standalone/.next/server/chunks/1750.js +1 -0
- package/_standalone/.next/server/chunks/1955.js +11 -0
- package/_standalone/.next/server/chunks/3680.js +1 -0
- package/_standalone/.next/server/chunks/4497.js +219 -0
- package/_standalone/.next/server/chunks/5560.js +2 -0
- package/_standalone/.next/server/chunks/6365.js +52 -0
- package/_standalone/.next/server/chunks/6539.js +1 -1
- package/_standalone/.next/server/chunks/8388.js +15 -0
- package/_standalone/.next/server/chunks/953.js +42 -2
- package/_standalone/.next/server/functions-config-manifest.json +2 -1
- package/_standalone/.next/server/instrumentation.js +1 -1
- package/_standalone/.next/server/middleware-build-manifest.js +1 -1
- package/_standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/_standalone/.next/server/next-font-manifest.js +1 -1
- package/_standalone/.next/server/next-font-manifest.json +1 -1
- package/_standalone/.next/server/pages/500.html +2 -2
- package/_standalone/.next/server/server-reference-manifest.js +1 -1
- package/_standalone/.next/server/server-reference-manifest.json +1 -1
- package/_standalone/.next/static/chunks/1053-0adaccc98a752a58.js +29 -0
- package/_standalone/.next/static/chunks/1239.10a0710c2772ab34.js +1 -0
- package/_standalone/.next/static/chunks/{1814.e2da5460ded71d71.js → 1814.2ee1d03297c0bccd.js} +1 -1
- package/_standalone/.next/static/chunks/{1a258343-030e4d6735874dd4.js → 1a258343-9803591e4aaee1f6.js} +1 -1
- package/_standalone/.next/static/chunks/2631.dc56e83472bde281.js +1 -0
- package/_standalone/.next/static/chunks/2872.045858d00bd8307f.js +8 -0
- package/_standalone/.next/static/chunks/2968.f10ccee9e7e2324d.js +2 -0
- package/_standalone/.next/static/chunks/3160-83a7e0b94414b3ac.js +1 -0
- package/_standalone/.next/static/chunks/{3637.4bcd01a4db78b894.js → 3637.f9a42cca59fd5bb5.js} +1 -1
- package/_standalone/.next/static/chunks/4033.6666700547b20141.js +1 -0
- package/_standalone/.next/static/chunks/4563-c2afaeacb241d1d0.js +6 -0
- package/_standalone/.next/static/chunks/516.24ee058b1d4b1fed.js +8 -0
- package/_standalone/.next/static/chunks/5627.c4337d7289acb31f.js +1 -0
- package/_standalone/.next/static/chunks/5956.b445072b35915129.js +1 -0
- package/_standalone/.next/static/chunks/6090-c98268ca726a68d3.js +1 -0
- package/_standalone/.next/static/chunks/6357-c645842834c0d4cd.js +1 -0
- package/_standalone/.next/static/chunks/6826.7b7d94dd0fd83812.js +1 -0
- package/_standalone/.next/static/chunks/{8409-de5726a4a278d28f.js → 6926-4af497b83952fa87.js} +1 -1
- package/_standalone/.next/static/chunks/7266-bb7be1128eccd48e.js +13 -0
- package/_standalone/.next/static/chunks/7753.63831cfc54a55fbb.js +1 -0
- package/_standalone/.next/static/chunks/862.9f526e964489e2e5.js +1 -0
- package/_standalone/.next/static/chunks/{1384-55276d40a9da4e88.js → 8663-de911d2d395622be.js} +2 -2
- package/_standalone/.next/static/chunks/9300.118b8c840634383f.js +28 -0
- package/_standalone/.next/static/chunks/9371-575600301da5d6bb.js +1 -0
- package/_standalone/.next/static/chunks/95247769.3b5caae1c1a76ce1.js +4 -0
- package/_standalone/.next/static/chunks/9602-423291fdb36396d1.js +1 -0
- package/_standalone/.next/static/chunks/app/.well-known/agent-card.json/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/_global-error/page-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-3e08abb495ecd5fd.js +1 -0
- package/_standalone/.next/static/chunks/app/agents/page-e7e0f87ad3d765ac.js +5 -0
- package/_standalone/.next/static/chunks/app/api/a2a/agents/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/a2a/delegations/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/a2a/discover/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/a2a/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/config/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/detect/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/install/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/registry/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/session/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/agent-activity/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/ask/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/ask-sessions/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/auth/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/backlinks/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/bootstrap/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/changes/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/export/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/extract-pdf/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/file/import/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/file/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/files/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/git/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/graph/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/health/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/inbox/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/init/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/agents/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/install/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/restart/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/status/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/monitoring/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/recent-files/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/restart/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/search/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/settings/list-models/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/settings/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/settings/test-key/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/check-path/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/check-port/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/ls/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/skills/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/sync/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/tree-version/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/uninstall/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/update/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/update-check/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/update-status/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/api/workflows/route-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/changes/page-350992cf5091bc5b.js +1 -0
- package/_standalone/.next/static/chunks/app/echo/[segment]/page-addf014fcf23fad5.js +11 -0
- package/_standalone/.next/static/chunks/app/echo/page-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/explore/page-5eb2835e9e3ab4bb.js +4 -0
- package/_standalone/.next/static/chunks/app/help/page-3d0e1ceaa4abc243.js +1 -0
- package/_standalone/.next/static/chunks/app/layout-9378c1c8d3e5761b.js +186 -0
- package/_standalone/.next/static/chunks/app/login/page-24236460fa7c11d0.js +1 -0
- package/_standalone/.next/static/chunks/app/page-9bae420fbbdc5fff.js +7 -0
- package/_standalone/.next/static/chunks/app/setup/page-99ed3d1bb6b8f4ef.js +1 -0
- package/_standalone/.next/static/chunks/app/trash/page-b61ef2d5cd4f8d73.js +1 -0
- package/_standalone/.next/static/chunks/app/view/[...path]/loading-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/app/view/[...path]/not-found-61474670d6bb6116.js +1 -0
- package/_standalone/.next/static/chunks/app/view/[...path]/page-44fa78cbea613a78.js +12 -0
- package/_standalone/.next/static/chunks/e71f6c19-4df85185bf989b49.js +1 -0
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-400c3c09b1540c14.js +1 -0
- package/_standalone/.next/static/chunks/webpack-c28c55d0a6021a6b.js +1 -0
- package/_standalone/.next/static/css/d300701f384db50d.css +1 -0
- package/_standalone/.next/static/rZLs1krFuduixvcVNe6q3/_buildManifest.js +1 -0
- package/_standalone/.next/trace +63 -53
- package/_standalone/.next/types/routes.d.ts +2 -1
- package/_standalone/.next/types/validator.ts +9 -0
- package/_standalone/__tests__/agent/chat-mode.test.ts +103 -0
- package/_standalone/__tests__/agents/agents-content-dashboard.test.tsx +4 -3
- package/_standalone/__tests__/api/bootstrap.test.ts +0 -2
- package/_standalone/__tests__/api/file.test.ts +22 -1
- package/_standalone/__tests__/api/install-skill.test.ts +2 -2
- package/_standalone/__tests__/api/mcp-install.test.ts +9 -10
- package/_standalone/__tests__/api/setup.test.ts +2 -2
- package/_standalone/__tests__/api/test-key.test.ts +73 -147
- package/_standalone/__tests__/ask/ask-content-input-during-run.test.tsx +1 -1
- package/_standalone/__tests__/ask/mode-capsule.test.ts +95 -0
- package/_standalone/__tests__/core/inbox.test.ts +250 -0
- package/_standalone/__tests__/core/skill-install-logic.test.ts +3 -3
- package/_standalone/__tests__/core/sync-status.test.ts +1 -1
- package/_standalone/__tests__/core/tools.test.ts +11 -6
- package/_standalone/__tests__/lib/echo-pages-visual-i18n.test.ts +2 -2
- package/_standalone/__tests__/lib/i18n-new-keys.test.ts +2 -2
- package/_standalone/__tests__/panels/agents-panel-hub.test.tsx +2 -2
- package/_standalone/__tests__/settings/activity-bar-update-badge.test.tsx +1 -1
- package/_standalone/__tests__/settings/settings-update-badge.test.tsx +1 -1
- package/_standalone/__tests__/settings/update-tab-availability-sync.test.tsx +1 -1
- package/_standalone/__tests__/settings/update-tab-browser.test.tsx +1 -1
- package/_standalone/__tests__/settings/update-tab-desktop.test.tsx +1 -1
- package/_standalone/__tests__/setup.ts +3 -5
- package/_standalone/app/globals.css +11 -1
- package/_standalone/components/ActivityBar.tsx +26 -10
- package/_standalone/components/AskFab.tsx +1 -1
- package/_standalone/components/AskModal.tsx +1 -1
- package/_standalone/components/Backlinks.tsx +1 -1
- package/_standalone/components/CreateSpaceModal.tsx +7 -55
- package/_standalone/components/EchoSpotlight.tsx +1 -1
- package/_standalone/components/ExportModal.tsx +1 -1
- package/_standalone/components/FileTree.tsx +64 -79
- package/_standalone/components/FindInPage.tsx +1 -1
- package/_standalone/components/GuideCard.tsx +1 -1
- package/_standalone/components/ImportModal.tsx +1 -1
- package/_standalone/components/KeyboardShortcuts.tsx +1 -1
- package/_standalone/components/MarkdownView.tsx +11 -1
- package/_standalone/components/OnboardingView.tsx +1 -1
- package/_standalone/components/OrganizeToast.tsx +1 -1
- package/_standalone/components/Panel.tsx +82 -4
- package/_standalone/components/QuickSuggestion.tsx +1 -1
- package/_standalone/components/RightAgentDetailPanel.tsx +2 -2
- package/_standalone/components/RightAskPanel.tsx +58 -22
- package/_standalone/components/SearchModal.tsx +1 -1
- package/_standalone/components/Sidebar.tsx +1 -1
- package/_standalone/components/SidebarLayout.tsx +52 -16
- package/_standalone/components/SpaceInitToast.tsx +1 -1
- package/_standalone/components/SyncStatusBar.tsx +2 -2
- package/_standalone/components/SystemPulse.tsx +12 -6
- package/_standalone/components/TableOfContents.tsx +86 -39
- package/_standalone/components/agents/AgentActivitySection.tsx +225 -0
- package/_standalone/components/agents/AgentsMcpSection.tsx +7 -16
- package/_standalone/components/agents/AgentsOverviewSection.tsx +28 -27
- package/_standalone/components/agents/AgentsPanelA2aTab.tsx +1 -1
- package/_standalone/components/agents/AgentsPanelSessionsTab.tsx +6 -1
- package/_standalone/components/agents/AgentsSkillsSection.tsx +1 -1
- package/_standalone/components/agents/DiscoverAgentModal.tsx +1 -1
- package/_standalone/components/agents/RecentActivityFeed.tsx +49 -88
- package/_standalone/components/agents/agent-activity-shared.tsx +110 -0
- package/_standalone/components/ask/AgentSelectorCapsule.tsx +1 -1
- package/_standalone/components/ask/AskContent.tsx +332 -486
- package/_standalone/components/ask/AskHeader.tsx +61 -0
- package/_standalone/components/ask/FileChip.tsx +9 -5
- package/_standalone/components/ask/MessageList.tsx +88 -21
- package/_standalone/components/ask/ModeCapsule.tsx +180 -0
- package/_standalone/components/ask/ProviderModelCapsule.tsx +284 -0
- package/_standalone/components/ask/SessionHistory.tsx +63 -10
- package/_standalone/components/ask/SessionTabBar.tsx +1 -1
- package/_standalone/components/ask/ThinkingBlock.tsx +1 -1
- package/_standalone/components/ask/ToolCallBlock.tsx +28 -24
- package/_standalone/components/changes/ChangesBanner.tsx +1 -1
- package/_standalone/components/echo/EchoInsightCollapsible.tsx +1 -1
- package/_standalone/components/echo/EchoSegmentNav.tsx +1 -1
- package/_standalone/components/home/InboxSection.tsx +268 -0
- package/_standalone/components/panels/AgentsPanel.tsx +3 -2
- package/_standalone/components/panels/AgentsPanelHubNav.tsx +2 -6
- package/_standalone/components/panels/DiscoverPanel.tsx +1 -1
- package/_standalone/components/panels/EchoPanel.tsx +1 -1
- package/_standalone/components/panels/EchoSidebarStats.tsx +1 -1
- package/_standalone/components/panels/ImportHistoryPanel.tsx +1 -1
- package/_standalone/components/panels/PanelHeader.tsx +1 -1
- package/_standalone/components/panels/PluginsPanel.tsx +1 -1
- package/_standalone/components/panels/SearchPanel.tsx +5 -2
- package/_standalone/components/panels/SyncPopover.tsx +1 -1
- package/_standalone/components/panels/WorkflowsPanel.tsx +1 -1
- package/_standalone/components/renderers/agent-inspector/AgentInspectorRenderer.tsx +18 -0
- package/_standalone/components/renderers/agent-inspector/manifest.ts +16 -0
- package/_standalone/components/renderers/todo/TodoRenderer.tsx +489 -75
- package/_standalone/components/settings/AiTab.tsx +198 -127
- package/_standalone/components/settings/AppearanceTab.tsx +48 -50
- package/_standalone/components/settings/KnowledgeTab.tsx +92 -27
- package/_standalone/components/settings/McpAgentInstall.tsx +1 -1
- package/_standalone/components/settings/McpSkillsSection.tsx +1 -1
- package/_standalone/components/settings/McpTab.tsx +145 -7
- package/_standalone/components/settings/PluginsTab.tsx +1 -1
- package/_standalone/components/settings/SettingsContent.tsx +5 -2
- package/_standalone/components/settings/SyncTab.tsx +615 -230
- package/_standalone/components/settings/UninstallTab.tsx +1 -1
- package/_standalone/components/settings/UpdateTab.tsx +373 -109
- package/_standalone/components/settings/types.ts +4 -5
- package/_standalone/components/setup/StepAI.tsx +70 -49
- package/_standalone/components/setup/StepDots.tsx +1 -1
- package/_standalone/components/setup/StepReview.tsx +176 -8
- package/_standalone/components/setup/types.ts +11 -8
- package/_standalone/components/shared/ProviderSelect.tsx +134 -0
- package/_standalone/components/walkthrough/WalkthroughOverlay.tsx +2 -2
- package/_standalone/components/walkthrough/WalkthroughTooltip.tsx +2 -2
- package/_standalone/components/walkthrough/index.ts +1 -1
- package/_standalone/data/skills/mindos/SKILL.md +27 -12
- package/_standalone/data/skills/mindos-zh/SKILL.md +27 -12
- package/_standalone/hooks/useAcpDetection.ts +1 -1
- package/_standalone/hooks/useAskChat.ts +248 -0
- package/_standalone/hooks/useAskPanel.ts +24 -4
- package/_standalone/hooks/useAskSession.ts +15 -0
- package/_standalone/lib/acp/types.ts +1 -1
- package/_standalone/lib/api.ts +3 -1
- package/_standalone/lib/core/types.ts +2 -0
- package/_standalone/lib/i18n/modules/ai-chat.ts +35 -13
- package/_standalone/lib/i18n/modules/features.ts +2 -2
- package/_standalone/lib/i18n/modules/knowledge.ts +82 -2
- package/_standalone/lib/i18n/modules/navigation.ts +6 -2
- package/_standalone/lib/i18n/modules/onboarding.ts +39 -9
- package/_standalone/lib/i18n/modules/panels.ts +78 -29
- package/_standalone/lib/i18n/modules/settings.ts +236 -20
- package/_standalone/lib/inbox-upload.ts +93 -0
- package/_standalone/lib/settings-ai-client.ts +13 -12
- package/_standalone/lib/space-ai-init.ts +66 -0
- package/_standalone/lib/stores/McpStoreInit.tsx +18 -0
- package/_standalone/lib/stores/WalkthroughInit.tsx +20 -0
- package/_standalone/lib/stores/locale-store.ts +55 -0
- package/_standalone/lib/stores/mcp-store.ts +156 -0
- package/_standalone/lib/stores/walkthrough-store.ts +118 -0
- package/_standalone/package-lock.json +40 -8
- package/_standalone/package.json +3 -1
- package/_standalone/tsconfig.json +1 -1
- package/_standalone/tsconfig.tsbuildinfo +1 -1
- package/app/app/api/acp/detect/route.ts +29 -20
- package/app/app/api/agent-activity/route.ts +1 -1
- package/app/app/api/ask/route.ts +115 -31
- package/app/app/api/ask-sessions/route.ts +1 -0
- package/app/app/api/bootstrap/route.ts +1 -3
- package/app/app/api/file/route.ts +34 -4
- package/app/app/api/inbox/route.ts +61 -0
- package/app/app/api/settings/list-models/route.ts +73 -53
- package/app/app/api/settings/route.ts +46 -55
- package/app/app/api/settings/test-key/route.ts +57 -114
- package/app/app/api/setup/route.ts +31 -21
- package/app/app/api/sync/route.ts +122 -12
- package/app/app/api/update-check/route.ts +2 -2
- package/app/app/globals.css +11 -1
- package/app/app/layout.tsx +2 -3
- package/app/app/login/page.tsx +1 -1
- package/app/app/view/[...path]/ViewPageClient.tsx +10 -10
- package/app/app/view/[...path]/not-found.tsx +1 -1
- package/app/components/ActivityBar.tsx +26 -10
- package/app/components/AskFab.tsx +1 -1
- package/app/components/AskModal.tsx +1 -1
- package/app/components/Backlinks.tsx +1 -1
- package/app/components/CreateSpaceModal.tsx +7 -55
- package/app/components/DirView.tsx +93 -11
- package/app/components/EchoSpotlight.tsx +1 -1
- package/app/components/ExportModal.tsx +1 -1
- package/app/components/FileTree.tsx +64 -79
- package/app/components/FindInPage.tsx +1 -1
- package/app/components/GuideCard.tsx +1 -1
- package/app/components/HomeContent.tsx +21 -14
- package/app/components/ImportModal.tsx +1 -1
- package/app/components/KeyboardShortcuts.tsx +1 -1
- package/app/components/MarkdownView.tsx +11 -1
- package/app/components/OnboardingView.tsx +1 -1
- package/app/components/OrganizeToast.tsx +1 -1
- package/app/components/Panel.tsx +82 -4
- package/app/components/QuickSuggestion.tsx +1 -1
- package/app/components/RightAgentDetailPanel.tsx +2 -2
- package/app/components/RightAskPanel.tsx +58 -22
- package/app/components/SearchModal.tsx +1 -1
- package/app/components/Sidebar.tsx +1 -1
- package/app/components/SidebarLayout.tsx +52 -16
- package/app/components/SpaceInitToast.tsx +1 -1
- package/app/components/SyncStatusBar.tsx +2 -2
- package/app/components/SystemPulse.tsx +12 -6
- package/app/components/TableOfContents.tsx +86 -39
- package/app/components/TrashPageClient.tsx +1 -1
- package/app/components/UpdateOverlay.tsx +2 -2
- package/app/components/agents/AgentActivitySection.tsx +225 -0
- package/app/components/agents/AgentDetailContent.tsx +234 -3
- package/app/components/agents/AgentsContentPage.tsx +13 -2
- package/app/components/agents/AgentsMcpSection.tsx +7 -16
- package/app/components/agents/AgentsOverviewSection.tsx +28 -27
- package/app/components/agents/AgentsPanelA2aTab.tsx +1 -1
- package/app/components/agents/AgentsPanelSessionsTab.tsx +6 -1
- package/app/components/agents/AgentsSkillsSection.tsx +1 -1
- package/app/components/agents/DiscoverAgentModal.tsx +1 -1
- package/app/components/agents/RecentActivityFeed.tsx +49 -88
- package/app/components/agents/agent-activity-shared.tsx +110 -0
- package/app/components/agents/agents-content-model.ts +2 -2
- package/app/components/ask/AgentSelectorCapsule.tsx +1 -1
- package/app/components/ask/AskContent.tsx +332 -486
- package/app/components/ask/AskHeader.tsx +61 -0
- package/app/components/ask/FileChip.tsx +9 -5
- package/app/components/ask/MessageList.tsx +88 -21
- package/app/components/ask/ModeCapsule.tsx +180 -0
- package/app/components/ask/ProviderModelCapsule.tsx +284 -0
- package/app/components/ask/SessionHistory.tsx +63 -10
- package/app/components/ask/SessionTabBar.tsx +1 -1
- package/app/components/ask/ThinkingBlock.tsx +1 -1
- package/app/components/ask/ToolCallBlock.tsx +28 -24
- package/app/components/changes/ChangesBanner.tsx +1 -1
- package/app/components/changes/ChangesContentPage.tsx +1 -1
- package/app/components/echo/EchoInsightCollapsible.tsx +1 -1
- package/app/components/echo/EchoSegmentNav.tsx +1 -1
- package/app/components/echo/EchoSegmentPageClient.tsx +1 -1
- package/app/components/explore/ExploreContent.tsx +1 -1
- package/app/components/help/HelpContent.tsx +1 -1
- package/app/components/home/InboxSection.tsx +268 -0
- package/app/components/panels/AgentsPanel.tsx +3 -2
- package/app/components/panels/AgentsPanelHubNav.tsx +2 -6
- package/app/components/panels/DiscoverPanel.tsx +1 -1
- package/app/components/panels/EchoPanel.tsx +1 -1
- package/app/components/panels/EchoSidebarStats.tsx +1 -1
- package/app/components/panels/ImportHistoryPanel.tsx +1 -1
- package/app/components/panels/PanelHeader.tsx +1 -1
- package/app/components/panels/PluginsPanel.tsx +1 -1
- package/app/components/panels/SearchPanel.tsx +5 -2
- package/app/components/panels/SyncPopover.tsx +1 -1
- package/app/components/panels/WorkflowsPanel.tsx +1 -1
- package/app/components/renderers/agent-inspector/AgentInspectorRenderer.tsx +18 -0
- package/app/components/renderers/todo/TodoRenderer.tsx +489 -75
- package/app/components/settings/AiTab.tsx +198 -127
- package/app/components/settings/AppearanceTab.tsx +48 -50
- package/app/components/settings/KnowledgeTab.tsx +92 -27
- package/app/components/settings/McpAgentInstall.tsx +1 -1
- package/app/components/settings/McpSkillsSection.tsx +1 -1
- package/app/components/settings/McpTab.tsx +145 -7
- package/app/components/settings/PluginsTab.tsx +1 -1
- package/app/components/settings/SettingsContent.tsx +5 -2
- package/app/components/settings/SyncTab.tsx +615 -230
- package/app/components/settings/UninstallTab.tsx +1 -1
- package/app/components/settings/UpdateTab.tsx +373 -109
- package/app/components/settings/types.ts +4 -5
- package/app/components/setup/StepAI.tsx +70 -49
- package/app/components/setup/StepDots.tsx +1 -1
- package/app/components/setup/StepReview.tsx +176 -8
- package/app/components/setup/index.tsx +73 -39
- package/app/components/setup/types.ts +11 -8
- package/app/components/shared/ProviderSelect.tsx +134 -0
- package/app/components/walkthrough/WalkthroughOverlay.tsx +2 -2
- package/app/components/walkthrough/WalkthroughTooltip.tsx +2 -2
- package/app/components/walkthrough/index.ts +1 -1
- package/app/data/skills/mindos/SKILL.md +27 -12
- package/app/data/skills/mindos-zh/SKILL.md +27 -12
- package/app/hooks/useAcpDetection.ts +1 -1
- package/app/hooks/useAskChat.ts +248 -0
- package/app/hooks/useAskPanel.ts +24 -4
- package/app/hooks/useAskSession.ts +15 -0
- package/app/lib/acp/types.ts +1 -1
- package/app/lib/actions.ts +13 -0
- package/app/lib/agent/log.ts +2 -0
- package/app/lib/agent/model.ts +69 -81
- package/app/lib/agent/prompt.ts +27 -0
- package/app/lib/agent/providers.ts +299 -0
- package/app/lib/agent/tools.ts +26 -4
- package/app/lib/api.ts +3 -1
- package/app/lib/core/agent-audit-log.ts +7 -0
- package/app/lib/core/fs-ops.ts +9 -4
- package/app/lib/core/inbox.ts +181 -0
- package/app/lib/core/index.ts +4 -0
- package/app/lib/core/tree.ts +3 -0
- package/app/lib/core/types.ts +2 -0
- package/app/lib/fs.ts +26 -2
- package/app/lib/i18n/modules/ai-chat.ts +35 -13
- package/app/lib/i18n/modules/features.ts +2 -2
- package/app/lib/i18n/modules/knowledge.ts +82 -2
- package/app/lib/i18n/modules/navigation.ts +6 -2
- package/app/lib/i18n/modules/onboarding.ts +39 -9
- package/app/lib/i18n/modules/panels.ts +78 -29
- package/app/lib/i18n/modules/settings.ts +236 -20
- package/app/lib/inbox-upload.ts +93 -0
- package/app/lib/mcp-agents.ts +6 -7
- package/app/lib/renderers/index.ts +1 -2
- package/app/lib/settings-ai-client.ts +13 -12
- package/app/lib/settings.ts +48 -33
- package/app/lib/space-ai-init.ts +66 -0
- package/app/lib/stores/LocaleStoreInit.tsx +18 -0
- package/app/lib/stores/McpStoreInit.tsx +18 -0
- package/app/lib/stores/WalkthroughInit.tsx +20 -0
- package/app/lib/stores/locale-store.ts +55 -0
- package/app/lib/stores/mcp-store.ts +156 -0
- package/app/lib/stores/walkthrough-store.ts +118 -0
- package/app/lib/types.ts +20 -0
- package/app/package.json +3 -1
- package/app/tsconfig.json +1 -1
- package/bin/cli.js +46 -27
- package/bin/commands/file.js +7 -4
- package/bin/commands/space.js +4 -0
- package/bin/lib/mcp-agents.js +26 -2
- package/bin/lib/mcp-install.js +11 -3
- package/bin/lib/sync.js +140 -34
- package/mcp/README.md +2 -2
- package/mcp/dist/index.cjs +43 -43
- package/mcp/package.json +1 -1
- package/mcp/src/index.ts +77 -61
- package/package.json +1 -1
- package/scripts/build-runtime-archive.sh +113 -0
- package/scripts/setup.js +1 -1
- package/skills/mindos/SKILL.md +27 -12
- package/skills/mindos/references/preference-capture.md +4 -4
- package/skills/mindos/references/write-supplement.md +46 -4
- package/skills/mindos-zh/SKILL.md +27 -12
- package/skills/mindos-zh/references/preference-capture.md +4 -4
- package/skills/mindos-zh/references/write-supplement.md +47 -5
- package/templates/empty/INSTRUCTION.md +0 -1
- package/templates/en/INSTRUCTION.md +0 -1
- package/templates/template-generation-skill.md +0 -1
- package/templates/zh/INSTRUCTION.md +0 -1
- package/_standalone/.next/server/chunks/248.js +0 -15
- package/_standalone/.next/server/chunks/359.js +0 -2
- package/_standalone/.next/server/chunks/4931.js +0 -202
- package/_standalone/.next/server/chunks/7670.js +0 -1
- package/_standalone/.next/server/chunks/8407.js +0 -52
- package/_standalone/.next/server/chunks/9414.js +0 -11
- package/_standalone/.next/static/VAb8MoUUpoXjVJalRJogO/_buildManifest.js +0 -1
- package/_standalone/.next/static/chunks/1038-ed04d6651ec92312.js +0 -1
- package/_standalone/.next/static/chunks/1263-79beb8734dee7bbd.js +0 -25
- package/_standalone/.next/static/chunks/275-ebcaaedabe706903.js +0 -1
- package/_standalone/.next/static/chunks/5637-b97c869adf70c82e.js +0 -1
- package/_standalone/.next/static/chunks/5681-a53362a1cd629dc6.js +0 -1
- package/_standalone/.next/static/chunks/9602-35ca17b688f1a4fe.js +0 -1
- package/_standalone/.next/static/chunks/9670-d59e4d45ed705f58.js +0 -6
- package/_standalone/.next/static/chunks/app/.well-known/agent-card.json/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/_global-error/page-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-519d4da1142db5ef.js +0 -1
- package/_standalone/.next/static/chunks/app/agents/page-b709cf3103321609.js +0 -5
- package/_standalone/.next/static/chunks/app/api/a2a/agents/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/a2a/delegations/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/a2a/discover/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/a2a/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/config/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/detect/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/install/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/registry/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/session/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/agent-activity/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/ask/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/ask-sessions/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/auth/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/backlinks/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/bootstrap/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/changes/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/export/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/extract-pdf/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/file/import/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/file/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/files/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/git/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/graph/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/health/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/init/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/agents/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/install/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/restart/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/status/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/monitoring/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/recent-files/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/restart/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/search/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/settings/list-models/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/settings/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/settings/test-key/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/check-path/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/check-port/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/ls/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/skills/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/sync/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/tree-version/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/uninstall/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/update/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/update-check/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/update-status/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/api/workflows/route-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/changes/page-def5210095f8698d.js +0 -1
- package/_standalone/.next/static/chunks/app/echo/[segment]/page-be28eff31b1a186e.js +0 -11
- package/_standalone/.next/static/chunks/app/echo/page-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/explore/page-e4b8098dca200389.js +0 -4
- package/_standalone/.next/static/chunks/app/help/page-d5e57d73d94bad19.js +0 -1
- package/_standalone/.next/static/chunks/app/layout-aab90c2b4faf8d57.js +0 -173
- package/_standalone/.next/static/chunks/app/login/page-321875768b70938a.js +0 -1
- package/_standalone/.next/static/chunks/app/page-9a15cf85f0962c59.js +0 -7
- package/_standalone/.next/static/chunks/app/setup/page-01ab1f549d636057.js +0 -1
- package/_standalone/.next/static/chunks/app/trash/page-7df0139c6b0f87e0.js +0 -1
- package/_standalone/.next/static/chunks/app/view/[...path]/loading-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/app/view/[...path]/not-found-f22c513bbc348cc8.js +0 -1
- package/_standalone/.next/static/chunks/app/view/[...path]/page-35811d7e49e08157.js +0 -12
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-d4762cc48529e566.js +0 -1
- package/_standalone/.next/static/chunks/webpack-3489a2b6c2882b0c.js +0 -1
- package/_standalone/.next/static/css/f16595bc58a16d5d.css +0 -1
- package/_standalone/components/walkthrough/WalkthroughProvider.tsx +0 -133
- package/_standalone/hooks/useMcpData.tsx +0 -169
- package/_standalone/lib/i18n-en.ts +0 -2
- package/_standalone/lib/i18n-zh.ts +0 -2
- package/_standalone/lib/types.ts +0 -70
- package/app/components/walkthrough/WalkthroughProvider.tsx +0 -133
- package/app/hooks/useMcpData.tsx +0 -169
- package/app/lib/LocaleContext.tsx +0 -60
- package/app/lib/i18n-en.ts +0 -2
- package/app/lib/i18n-zh.ts +0 -2
- /package/_standalone/.next/static/{VAb8MoUUpoXjVJalRJogO → rZLs1krFuduixvcVNe6q3}/_ssgManifest.js +0 -0
|
@@ -9,8 +9,9 @@ export const settingsEn = {
|
|
|
9
9
|
model: 'Model',
|
|
10
10
|
apiKey: 'API Key',
|
|
11
11
|
baseUrl: 'Base URL',
|
|
12
|
-
baseUrlHint: 'Optional. Use for proxies or
|
|
12
|
+
baseUrlHint: 'Optional. Use for proxies or custom API endpoints.',
|
|
13
13
|
keyHint: 'Stored locally in ~/.mindos/config.json',
|
|
14
|
+
keyOptionalHint: 'Optional for local providers. Stored in ~/.mindos/config.json',
|
|
14
15
|
envHint: 'Fields marked env have a value from environment variables. You can override them here, or restore all to env defaults.',
|
|
15
16
|
envFieldNote: (key: string) => `Env var ${key} is set. Clear this field to fall back to it.`,
|
|
16
17
|
resetToEnv: 'Reset to env value',
|
|
@@ -58,12 +59,40 @@ export const settingsEn = {
|
|
|
58
59
|
light: 'Light',
|
|
59
60
|
language: 'Language',
|
|
60
61
|
browserNote: 'Appearance settings are saved in your browser.',
|
|
62
|
+
labsTitle: 'Labs',
|
|
63
|
+
labsDesc: 'Experimental features still in development. May change or be removed.',
|
|
64
|
+
labsEcho: 'Echo',
|
|
65
|
+
labsEchoDesc: 'Reflective journaling powered by your notes.',
|
|
66
|
+
labsWorkflows: 'Flows',
|
|
67
|
+
labsWorkflowsDesc: 'Visual workflow automation for agents.',
|
|
61
68
|
fontPreview: 'The quick brown fox jumps over the lazy dog.',
|
|
62
69
|
},
|
|
63
70
|
knowledge: {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
71
|
+
cardTitle: 'Knowledge Base',
|
|
72
|
+
securityTitle: 'Security',
|
|
73
|
+
passwordPlaceholder: 'Leave empty to disable',
|
|
74
|
+
passwordShow: 'Show',
|
|
75
|
+
passwordHide: 'Hide',
|
|
76
|
+
tokenNotSet: '— not set —',
|
|
77
|
+
mcpUrl: 'MCP URL',
|
|
78
|
+
tokenGenerated: 'New token generated. Copy it now — it won\'t be shown in full again.',
|
|
79
|
+
monitoringTitle: 'System Monitoring',
|
|
80
|
+
monitoringFailed: 'Failed to load monitoring data',
|
|
81
|
+
monitorHeap: 'Heap',
|
|
82
|
+
monitorRss: 'RSS',
|
|
83
|
+
monitorUptime: 'Uptime',
|
|
84
|
+
monitorNode: 'Node',
|
|
85
|
+
monitorRequests: 'Requests',
|
|
86
|
+
monitorToolCalls: 'Tool Calls',
|
|
87
|
+
monitorTokens: 'Tokens',
|
|
88
|
+
monitorFiles: 'Files',
|
|
89
|
+
monitorErrors: 'Errors',
|
|
90
|
+
monitorMcpRunning: (port: number) => `Running :${port}`,
|
|
91
|
+
monitorMcpStopped: 'Stopped',
|
|
92
|
+
cancel: 'Cancel',
|
|
93
|
+
mindRoot: 'Knowledge base root',
|
|
94
|
+
mindRootHint: 'Absolute path to your notes directory. Requires server restart to take effect.',
|
|
95
|
+
mindRootEnvHint: (key: string) => `MIND_ROOT env var is set to "${key}". Fill in above to override it.`,
|
|
67
96
|
envNote: 'MIND_ROOT env var is set. Fill in above to override it — your value takes priority.',
|
|
68
97
|
webPassword: 'Web UI password',
|
|
69
98
|
webPasswordHint: 'Protect the browser UI with a password. Leave empty to disable. Changes take effect on next page load.',
|
|
@@ -97,17 +126,63 @@ export const settingsEn = {
|
|
|
97
126
|
featureMultiDevice: 'Works across devices',
|
|
98
127
|
remoteUrl: 'Git Remote URL',
|
|
99
128
|
invalidUrl: 'Invalid Git URL — use HTTPS (https://...) or SSH (git@...)',
|
|
100
|
-
|
|
129
|
+
sshBrief: 'one-time key setup, no token needed',
|
|
130
|
+
httpsBrief: 'works anywhere, token recommended',
|
|
131
|
+
sshHint: 'Requires SSH key on this machine. Verify with: ssh -T git@github.com',
|
|
101
132
|
accessToken: 'Access Token',
|
|
102
133
|
optional: '(optional, for private repos)',
|
|
103
|
-
tokenHint: 'GitHub:
|
|
134
|
+
tokenHint: 'GitHub:',
|
|
135
|
+
tokenLink: 'Create a token (repo scope)',
|
|
104
136
|
branchLabel: 'Branch',
|
|
105
137
|
connectButton: 'Connect & Start Sync',
|
|
106
138
|
connecting: 'Connecting...',
|
|
139
|
+
stepConnecting: 'Connecting to remote...',
|
|
140
|
+
stepAuthenticating: 'Authenticating...',
|
|
141
|
+
stepSyncing: 'Syncing data...',
|
|
142
|
+
stepAlmostDone: 'Almost done...',
|
|
143
|
+
stepDone: 'Sync configured successfully!',
|
|
144
|
+
gitignoreTitle: 'Excluded files',
|
|
145
|
+
gitignorePlaceholder: '# Files to exclude from sync\n*.tmp\nsecret/',
|
|
146
|
+
gitignoreSave: 'Save',
|
|
147
|
+
gitignoreSaved: 'Saved',
|
|
148
|
+
conflictExplain: 'These files were changed on both this device and the remote. Choose which version to keep.',
|
|
149
|
+
keepLocal: 'Keep local',
|
|
150
|
+
keepRemote: 'Keep remote',
|
|
151
|
+
keepLocalHint: 'Keep this device\'s version',
|
|
152
|
+
keepRemoteHint: 'Replace with the remote version',
|
|
153
|
+
viewDiff: 'Click to compare versions',
|
|
154
|
+
localVersion: 'Local (this device)',
|
|
155
|
+
remoteVersion: 'Remote',
|
|
156
|
+
emptyFile: '(empty)',
|
|
157
|
+
sectionTitle: 'Sync',
|
|
158
|
+
labelProvider: 'Provider',
|
|
159
|
+
labelRemote: 'Remote',
|
|
160
|
+
labelBranch: 'Branch',
|
|
161
|
+
labelLastSync: 'Last sync',
|
|
162
|
+
labelUnpushed: 'Unpushed',
|
|
163
|
+
labelAutoSync: 'Auto-sync',
|
|
164
|
+
unpushedCommits: (n: number) => `${n} commits`,
|
|
165
|
+
syncNow: 'Sync Now',
|
|
166
|
+
disableAutoSync: 'Disable Auto-sync',
|
|
167
|
+
enableAutoSync: 'Enable Auto-sync',
|
|
168
|
+
syncComplete: 'Sync complete',
|
|
169
|
+
syncFailed: 'Sync failed',
|
|
170
|
+
autoSyncDisabled: 'Auto-sync disabled',
|
|
171
|
+
autoSyncEnabled: 'Auto-sync enabled',
|
|
172
|
+
toggleFailed: 'Failed to toggle sync',
|
|
173
|
+
conflictsTitle: (n: number) => `Conflicts (${n})`,
|
|
174
|
+
conflictHint: 'Click a file to view your version. Hover and click',
|
|
175
|
+
conflictHintSuffix: 'to see the remote version.',
|
|
176
|
+
timeNever: 'never',
|
|
177
|
+
timeJustNow: 'just now',
|
|
178
|
+
timeMinAgo: (m: number) => `${m}m ago`,
|
|
179
|
+
timeHourAgo: (h: number) => `${h}h ago`,
|
|
180
|
+
timeDayAgo: (d: number) => `${d}d ago`,
|
|
107
181
|
},
|
|
108
182
|
plugins: {
|
|
109
183
|
title: 'Installed Renderers',
|
|
110
184
|
builtinBadge: 'built-in',
|
|
185
|
+
coreBadge: 'core',
|
|
111
186
|
enabled: 'Enabled',
|
|
112
187
|
disabled: 'Disabled',
|
|
113
188
|
matchHint: 'Auto-activates on',
|
|
@@ -193,6 +268,23 @@ export const settingsEn = {
|
|
|
193
268
|
noAuthWarning: '⚠ No auth token — set one in Settings → General before enabling remote access.',
|
|
194
269
|
showJson: 'Show JSON',
|
|
195
270
|
hideJson: 'Hide JSON',
|
|
271
|
+
connectionTitle: 'Connection',
|
|
272
|
+
connectionHint: 'Use these credentials to connect AI agents to your MindOS knowledge base.',
|
|
273
|
+
tokenLabel: 'Auth Token',
|
|
274
|
+
tokenMasked: 'Click Show to reveal the full token',
|
|
275
|
+
tokenShow: 'Show',
|
|
276
|
+
tokenHide: 'Hide',
|
|
277
|
+
tokenCopy: 'Copy',
|
|
278
|
+
tokenCopied: 'Token copied!',
|
|
279
|
+
tokenNone: 'No token set — your MCP server is open to all requests.',
|
|
280
|
+
tokenNoneAction: 'Generate a token in Settings → General → Security.',
|
|
281
|
+
serverUrl: 'MCP Server URL',
|
|
282
|
+
serverUrlCopy: 'Copy URL',
|
|
283
|
+
howToConnect: 'How to connect an AI agent',
|
|
284
|
+
howToStep1: 'Open your agent\'s MCP settings (e.g. Claude Code, Cursor)',
|
|
285
|
+
howToStep2: 'Add a new MCP server with the URL above',
|
|
286
|
+
howToStep3: 'Set the Auth Token as the bearer token',
|
|
287
|
+
howToStep4: 'Save and verify the connection',
|
|
196
288
|
},
|
|
197
289
|
monitoring: {
|
|
198
290
|
system: 'System',
|
|
@@ -271,6 +363,22 @@ export const settingsEn = {
|
|
|
271
363
|
desktopReady: 'Update downloaded. Restart to apply.',
|
|
272
364
|
desktopRestart: 'Restart Now',
|
|
273
365
|
desktopHint: 'Updates are delivered through the Desktop app auto-updater.',
|
|
366
|
+
// Core Hot Update (Desktop only)
|
|
367
|
+
coreTitle: 'MindOS Core',
|
|
368
|
+
coreUpToDate: 'Core is up to date',
|
|
369
|
+
coreAvailable: (size: string) => `Update available (${size})`,
|
|
370
|
+
coreDownloading: 'Downloading...',
|
|
371
|
+
coreCancel: 'Cancel',
|
|
372
|
+
coreReady: 'Ready — restart services to apply',
|
|
373
|
+
coreRestartServices: 'Restart Services',
|
|
374
|
+
coreApplying: 'Applying update...',
|
|
375
|
+
coreApplied: 'Updated! Reloading...',
|
|
376
|
+
coreError: 'Core update failed.',
|
|
377
|
+
coreRetry: 'Retry',
|
|
378
|
+
coreDesktopTooOld: (version: string) => `v${version} requires a newer Desktop version.`,
|
|
379
|
+
coreDesktopTooOldHint: 'Please update MindOS Desktop first.',
|
|
380
|
+
coreHint: 'Core updates only restart services — no app restart needed.',
|
|
381
|
+
shellTitle: 'MindOS Desktop',
|
|
274
382
|
},
|
|
275
383
|
uninstall: {
|
|
276
384
|
title: 'Uninstall MindOS',
|
|
@@ -301,14 +409,15 @@ export const settingsEn = {
|
|
|
301
409
|
export const settingsZh = {
|
|
302
410
|
settings: {
|
|
303
411
|
title: '设置',
|
|
304
|
-
tabs: { ai: 'AI', appearance: '外观', knowledge: '通用', sync: '同步', mcp: 'MCP
|
|
412
|
+
tabs: { ai: 'AI', appearance: '外观', knowledge: '通用', sync: '同步', mcp: 'MCP 与技能', plugins: '插件', shortcuts: '快捷键', monitoring: '监控', agents: '智能体', update: '更新', uninstall: '卸载' },
|
|
305
413
|
ai: {
|
|
306
414
|
provider: '服务商',
|
|
307
415
|
model: '模型',
|
|
308
416
|
apiKey: 'API 密钥',
|
|
309
417
|
baseUrl: '接口地址',
|
|
310
|
-
baseUrlHint: '
|
|
418
|
+
baseUrlHint: '可选。用于代理或自定义 API 端点。',
|
|
311
419
|
keyHint: '本地存储于 ~/.mindos/config.json',
|
|
420
|
+
keyOptionalHint: '本地服务商可选。存储于 ~/.mindos/config.json',
|
|
312
421
|
envHint: '标有 env 的字段存在环境变量值。你可以在此覆盖,或一键恢复为环境变量默认值。',
|
|
313
422
|
envFieldNote: (key: string) => `环境变量 ${key} 已设置。清空此字段将回退到环境变量值。`,
|
|
314
423
|
resetToEnv: '恢复为环境变量',
|
|
@@ -356,12 +465,40 @@ export const settingsZh = {
|
|
|
356
465
|
light: '浅色',
|
|
357
466
|
language: '语言',
|
|
358
467
|
browserNote: '外观设置保存在浏览器本地。',
|
|
468
|
+
labsTitle: '实验性功能',
|
|
469
|
+
labsDesc: '仍在开发中的功能,可能会变更或移除。',
|
|
470
|
+
labsEcho: '回响',
|
|
471
|
+
labsEchoDesc: '基于笔记的反思性日记。',
|
|
472
|
+
labsWorkflows: '工作流',
|
|
473
|
+
labsWorkflowsDesc: 'Agent 可视化工作流自动化。',
|
|
359
474
|
fontPreview: '人之初,性本善;性相近,习相远。',
|
|
360
475
|
},
|
|
361
476
|
knowledge: {
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
477
|
+
cardTitle: '知识库',
|
|
478
|
+
securityTitle: '安全',
|
|
479
|
+
passwordPlaceholder: '留空可禁用',
|
|
480
|
+
passwordShow: '显示',
|
|
481
|
+
passwordHide: '隐藏',
|
|
482
|
+
tokenNotSet: '— 未设置 —',
|
|
483
|
+
mcpUrl: 'MCP 地址',
|
|
484
|
+
tokenGenerated: '已生成新令牌。请立即复制 — 之后不会再次完整显示。',
|
|
485
|
+
monitoringTitle: '系统监控',
|
|
486
|
+
monitoringFailed: '加载监控数据失败',
|
|
487
|
+
monitorHeap: '堆内存',
|
|
488
|
+
monitorRss: 'RSS',
|
|
489
|
+
monitorUptime: '运行时间',
|
|
490
|
+
monitorNode: 'Node',
|
|
491
|
+
monitorRequests: '请求数',
|
|
492
|
+
monitorToolCalls: '工具调用',
|
|
493
|
+
monitorTokens: 'Token',
|
|
494
|
+
monitorFiles: '文件',
|
|
495
|
+
monitorErrors: '错误',
|
|
496
|
+
monitorMcpRunning: (port: number) => `运行中 :${port}`,
|
|
497
|
+
monitorMcpStopped: '已停止',
|
|
498
|
+
cancel: '取消',
|
|
499
|
+
mindRoot: '知识库根目录',
|
|
500
|
+
mindRootHint: '笔记目录的绝对路径,修改后需要重启服务器。',
|
|
501
|
+
mindRootEnvHint: (key: string) => `MIND_ROOT 环境变量已设置为 "${key}",填写上方路径可覆盖它。`,
|
|
365
502
|
envNote: 'MIND_ROOT 环境变量已设置。填写上方路径后,你的值优先生效。',
|
|
366
503
|
webPassword: '网页访问密码',
|
|
367
504
|
webPasswordHint: '设置后访问浏览器 UI 需要登录,留空则关闭密码保护。下次刷新页面后生效。',
|
|
@@ -395,17 +532,63 @@ export const settingsZh = {
|
|
|
395
532
|
featureMultiDevice: '多设备同步',
|
|
396
533
|
remoteUrl: 'Git 远程仓库 URL',
|
|
397
534
|
invalidUrl: '无效的 Git URL — 请使用 HTTPS (https://...) 或 SSH (git@...) 格式',
|
|
398
|
-
|
|
535
|
+
sshBrief: '一次配置,无需令牌',
|
|
536
|
+
httpsBrief: '通用性强,建议配令牌',
|
|
537
|
+
sshHint: '需要本机已配置 SSH 密钥。验证命令:ssh -T git@github.com',
|
|
399
538
|
accessToken: '访问令牌',
|
|
400
539
|
optional: '(可选,私有仓库需要)',
|
|
401
|
-
tokenHint: 'GitHub:
|
|
540
|
+
tokenHint: 'GitHub:',
|
|
541
|
+
tokenLink: '创建令牌(勾选 repo 权限)',
|
|
402
542
|
branchLabel: '分支',
|
|
403
543
|
connectButton: '连接并开始同步',
|
|
404
544
|
connecting: '连接中...',
|
|
545
|
+
stepConnecting: '正在连接远程仓库...',
|
|
546
|
+
stepAuthenticating: '正在验证身份...',
|
|
547
|
+
stepSyncing: '正在同步数据...',
|
|
548
|
+
stepAlmostDone: '即将完成...',
|
|
549
|
+
stepDone: '同步配置成功!',
|
|
550
|
+
gitignoreTitle: '排除文件',
|
|
551
|
+
gitignorePlaceholder: '# 不同步的文件\n*.tmp\nsecret/',
|
|
552
|
+
gitignoreSave: '保存',
|
|
553
|
+
gitignoreSaved: '已保存',
|
|
554
|
+
conflictExplain: '这些文件在本机和远程都被修改了。请选择保留哪个版本。',
|
|
555
|
+
keepLocal: '保留本地',
|
|
556
|
+
keepRemote: '保留远程',
|
|
557
|
+
keepLocalHint: '保留本机的版本',
|
|
558
|
+
keepRemoteHint: '替换为远程版本',
|
|
559
|
+
viewDiff: '点击查看两个版本的差异',
|
|
560
|
+
localVersion: '本地(本机)',
|
|
561
|
+
remoteVersion: '远程',
|
|
562
|
+
emptyFile: '(空)',
|
|
563
|
+
sectionTitle: '同步',
|
|
564
|
+
labelProvider: '提供商',
|
|
565
|
+
labelRemote: '远程',
|
|
566
|
+
labelBranch: '分支',
|
|
567
|
+
labelLastSync: '最后同步',
|
|
568
|
+
labelUnpushed: '未推送',
|
|
569
|
+
labelAutoSync: '自动同步',
|
|
570
|
+
unpushedCommits: (n: number) => `${n} 次提交`,
|
|
571
|
+
syncNow: '立即同步',
|
|
572
|
+
disableAutoSync: '禁用自动同步',
|
|
573
|
+
enableAutoSync: '启用自动同步',
|
|
574
|
+
syncComplete: '同步完成',
|
|
575
|
+
syncFailed: '同步失败',
|
|
576
|
+
autoSyncDisabled: '已禁用自动同步',
|
|
577
|
+
autoSyncEnabled: '已启用自动同步',
|
|
578
|
+
toggleFailed: '切换同步失败',
|
|
579
|
+
conflictsTitle: (n: number) => `冲突 (${n})`,
|
|
580
|
+
conflictHint: '单击文件查看你的版本。悬停并单击',
|
|
581
|
+
conflictHintSuffix: '查看远程版本。',
|
|
582
|
+
timeNever: '从未',
|
|
583
|
+
timeJustNow: '刚刚',
|
|
584
|
+
timeMinAgo: (m: number) => `${m} 分钟前`,
|
|
585
|
+
timeHourAgo: (h: number) => `${h} 小时前`,
|
|
586
|
+
timeDayAgo: (d: number) => `${d} 天前`,
|
|
405
587
|
},
|
|
406
588
|
plugins: {
|
|
407
589
|
title: '已安装渲染器',
|
|
408
590
|
builtinBadge: '内置',
|
|
591
|
+
coreBadge: '核心',
|
|
409
592
|
enabled: '已启用',
|
|
410
593
|
disabled: '已禁用',
|
|
411
594
|
matchHint: '自动匹配',
|
|
@@ -448,14 +631,14 @@ export const settingsZh = {
|
|
|
448
631
|
installFailed: '安装失败',
|
|
449
632
|
portLabel: 'MCP 端口',
|
|
450
633
|
portHint: '修改后需重启服务',
|
|
451
|
-
skillsTitle: '
|
|
634
|
+
skillsTitle: '技能',
|
|
452
635
|
skillAutoLoaded: '每次请求自动加载',
|
|
453
636
|
skillSource: '来源',
|
|
454
637
|
skillBuiltin: '内置',
|
|
455
638
|
skillUser: '自定义',
|
|
456
|
-
addSkill: '+
|
|
639
|
+
addSkill: '+ 添加技能',
|
|
457
640
|
cliInstallHint: '通过命令行安装:',
|
|
458
|
-
skillPathHint: '
|
|
641
|
+
skillPathHint: '技能文件安装路径:',
|
|
459
642
|
deleteSkill: '删除',
|
|
460
643
|
editSkill: '编辑',
|
|
461
644
|
saveSkill: '保存',
|
|
@@ -463,15 +646,15 @@ export const settingsZh = {
|
|
|
463
646
|
skillName: '名称',
|
|
464
647
|
skillDesc: '描述',
|
|
465
648
|
skillContent: '内容',
|
|
466
|
-
skillNameConflict: '
|
|
649
|
+
skillNameConflict: '同名技能已存在',
|
|
467
650
|
skillDeleteConfirm: (name: string) => `确定删除「${name}」?此操作不可撤销。`,
|
|
468
|
-
skillLanguage: '
|
|
651
|
+
skillLanguage: '技能语言',
|
|
469
652
|
skillLangEn: 'English',
|
|
470
653
|
skillLangZh: '中文',
|
|
471
|
-
searchSkills: '
|
|
654
|
+
searchSkills: '搜索技能...',
|
|
472
655
|
customGroup: '自定义',
|
|
473
656
|
builtinGroup: '内置',
|
|
474
|
-
noSkillsMatch: (query: string) => `没有匹配「${query}
|
|
657
|
+
noSkillsMatch: (query: string) => `没有匹配「${query}」的技能`,
|
|
475
658
|
skillTemplate: '模板',
|
|
476
659
|
skillTemplateGeneral: '通用',
|
|
477
660
|
skillTemplateToolUse: '工具调用',
|
|
@@ -491,6 +674,23 @@ export const settingsZh = {
|
|
|
491
674
|
noAuthWarning: '⚠ 未设置认证令牌 — 请先在 设置 → 通用 中配置,再启用远程访问。',
|
|
492
675
|
showJson: '显示 JSON',
|
|
493
676
|
hideJson: '隐藏 JSON',
|
|
677
|
+
connectionTitle: '连接信息',
|
|
678
|
+
connectionHint: '使用以下凭据将 AI 助手连接到你的 MindOS 知识库。',
|
|
679
|
+
tokenLabel: '认证令牌',
|
|
680
|
+
tokenMasked: '点击「显示」查看完整令牌',
|
|
681
|
+
tokenShow: '显示',
|
|
682
|
+
tokenHide: '隐藏',
|
|
683
|
+
tokenCopy: '复制',
|
|
684
|
+
tokenCopied: '令牌已复制!',
|
|
685
|
+
tokenNone: '未设置令牌 — MCP 服务对所有请求开放。',
|
|
686
|
+
tokenNoneAction: '请在 设置 → 通用 → 安全 中生成令牌。',
|
|
687
|
+
serverUrl: 'MCP 服务地址',
|
|
688
|
+
serverUrlCopy: '复制地址',
|
|
689
|
+
howToConnect: '如何连接 AI 助手',
|
|
690
|
+
howToStep1: '打开你的 AI 助手的 MCP 设置(如 Claude Code、Cursor)',
|
|
691
|
+
howToStep2: '添加一个新的 MCP 服务,填入上方地址',
|
|
692
|
+
howToStep3: '将认证令牌设为 Bearer Token',
|
|
693
|
+
howToStep4: '保存并验证连接',
|
|
494
694
|
},
|
|
495
695
|
monitoring: {
|
|
496
696
|
system: '系统',
|
|
@@ -569,6 +769,22 @@ export const settingsZh = {
|
|
|
569
769
|
desktopReady: '更新已下载,重启后生效。',
|
|
570
770
|
desktopRestart: '立即重启',
|
|
571
771
|
desktopHint: '更新通过桌面端自动更新推送。',
|
|
772
|
+
// Core Hot Update
|
|
773
|
+
coreTitle: 'MindOS Core',
|
|
774
|
+
coreUpToDate: '核心已是最新',
|
|
775
|
+
coreAvailable: (size: string) => `有新版本可用(${size})`,
|
|
776
|
+
coreDownloading: '下载中...',
|
|
777
|
+
coreCancel: '取消',
|
|
778
|
+
coreReady: '已就绪 — 重启服务即可生效',
|
|
779
|
+
coreRestartServices: '重启服务',
|
|
780
|
+
coreApplying: '正在应用更新...',
|
|
781
|
+
coreApplied: '更新成功!正在刷新...',
|
|
782
|
+
coreError: '核心更新失败。',
|
|
783
|
+
coreRetry: '重试',
|
|
784
|
+
coreDesktopTooOld: (version: string) => `v${version} 需要更新版本的 Desktop。`,
|
|
785
|
+
coreDesktopTooOldHint: '请先更新 MindOS Desktop。',
|
|
786
|
+
coreHint: '核心更新只需重启服务,无需重启应用。',
|
|
787
|
+
shellTitle: 'MindOS Desktop',
|
|
572
788
|
},
|
|
573
789
|
uninstall: {
|
|
574
790
|
title: '卸载 MindOS',
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { toast } from '@/lib/toast';
|
|
2
|
+
import type { useLocale } from '@/lib/stores/locale-store';
|
|
3
|
+
|
|
4
|
+
const MAX_FILE_SIZE = 10 * 1024 * 1024; // 10 MB per file
|
|
5
|
+
|
|
6
|
+
function arrayBufferToBase64(buf: ArrayBuffer): string {
|
|
7
|
+
const bytes = new Uint8Array(buf);
|
|
8
|
+
const chunks: string[] = [];
|
|
9
|
+
for (let i = 0; i < bytes.length; i += 8192) {
|
|
10
|
+
chunks.push(String.fromCharCode(...bytes.subarray(i, i + 8192)));
|
|
11
|
+
}
|
|
12
|
+
return btoa(chunks.join(''));
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function showQuickDropToast(
|
|
16
|
+
saved: number,
|
|
17
|
+
formatSkipped: number,
|
|
18
|
+
oversized: number,
|
|
19
|
+
t: ReturnType<typeof useLocale>['t'],
|
|
20
|
+
) {
|
|
21
|
+
if (saved > 0 && oversized > 0 && formatSkipped === 0) {
|
|
22
|
+
toast.success(t.inbox.savedWithOversized(saved, oversized), 4000);
|
|
23
|
+
} else if (saved > 0 && (formatSkipped + oversized) > 0) {
|
|
24
|
+
toast.success(t.inbox.savedWithSkipped(saved, formatSkipped + oversized), 4000);
|
|
25
|
+
} else if (saved > 0) {
|
|
26
|
+
toast.success(t.inbox.savedToast(saved), 3000);
|
|
27
|
+
} else {
|
|
28
|
+
if (oversized > 0) toast.error(t.inbox.tooLarge(oversized), 4000);
|
|
29
|
+
if (formatSkipped > 0) toast.error(t.inbox.savedWithSkipped(0, formatSkipped), 4000);
|
|
30
|
+
if (oversized === 0 && formatSkipped === 0) toast.error(t.inbox.saveFailed, 4000);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export async function quickDropToInbox(
|
|
35
|
+
files: File[],
|
|
36
|
+
t: ReturnType<typeof useLocale>['t'],
|
|
37
|
+
) {
|
|
38
|
+
const payload: Array<{ name: string; content: string; encoding?: string }> = [];
|
|
39
|
+
let oversizedCount = 0;
|
|
40
|
+
|
|
41
|
+
for (const file of files) {
|
|
42
|
+
if (file.size > MAX_FILE_SIZE) {
|
|
43
|
+
oversizedCount++;
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
try {
|
|
47
|
+
if (file.name.toLowerCase().endsWith('.pdf')) {
|
|
48
|
+
const buf = await file.arrayBuffer();
|
|
49
|
+
payload.push({ name: file.name, content: arrayBufferToBase64(buf), encoding: 'base64' });
|
|
50
|
+
} else {
|
|
51
|
+
const text = await file.text();
|
|
52
|
+
payload.push({ name: file.name, content: text });
|
|
53
|
+
}
|
|
54
|
+
} catch {
|
|
55
|
+
/* skip unreadable files */
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (payload.length === 0) {
|
|
60
|
+
if (oversizedCount > 0) {
|
|
61
|
+
toast.error(t.inbox.tooLarge(oversizedCount), 4000);
|
|
62
|
+
} else if (files.length > 0) {
|
|
63
|
+
toast.error(t.inbox.saveFailed, 4000);
|
|
64
|
+
}
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
try {
|
|
69
|
+
const res = await fetch('/api/inbox', {
|
|
70
|
+
method: 'POST',
|
|
71
|
+
headers: { 'Content-Type': 'application/json' },
|
|
72
|
+
body: JSON.stringify({ files: payload }),
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
if (!res.ok) {
|
|
76
|
+
const data = await res.json().catch(() => ({}));
|
|
77
|
+
console.error('[QuickDrop] Save failed:', data.error);
|
|
78
|
+
toast.error(t.inbox.saveFailed, 4000);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const result = await res.json();
|
|
83
|
+
const saved = result.saved?.length ?? 0;
|
|
84
|
+
const formatSkipped = result.skipped?.length ?? 0;
|
|
85
|
+
|
|
86
|
+
showQuickDropToast(saved, formatSkipped, oversizedCount, t);
|
|
87
|
+
window.dispatchEvent(new Event('mindos:files-changed'));
|
|
88
|
+
window.dispatchEvent(new Event('mindos:inbox-updated'));
|
|
89
|
+
} catch (err) {
|
|
90
|
+
console.error('[QuickDrop] Network error:', err);
|
|
91
|
+
toast.error(t.inbox.saveFailed, 4000);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
@@ -2,25 +2,26 @@
|
|
|
2
2
|
* Client-side mirror of "can /api/ask run?" using GET /api/settings payload.
|
|
3
3
|
* Must stay aligned with server `effectiveAiConfig()` provider + key resolution.
|
|
4
4
|
*/
|
|
5
|
+
import { type ProviderId, PROVIDER_PRESETS, isProviderId, getApiKeyEnvVar } from './agent/providers';
|
|
5
6
|
|
|
6
7
|
export type SettingsJsonForAi = {
|
|
7
8
|
ai?: {
|
|
8
9
|
provider?: string;
|
|
9
|
-
providers?: {
|
|
10
|
-
anthropic?: { apiKey?: string };
|
|
11
|
-
openai?: { apiKey?: string };
|
|
12
|
-
};
|
|
10
|
+
providers?: Partial<Record<string, { apiKey?: string }>>;
|
|
13
11
|
};
|
|
14
|
-
envOverrides?: Partial<Record<
|
|
12
|
+
envOverrides?: Partial<Record<string, boolean>>;
|
|
15
13
|
};
|
|
16
14
|
|
|
17
15
|
export function isAiConfiguredForAsk(data: SettingsJsonForAi): boolean {
|
|
18
|
-
const
|
|
16
|
+
const provId = data.ai?.provider;
|
|
17
|
+
const provider: ProviderId = (provId && isProviderId(provId)) ? provId : 'anthropic';
|
|
19
18
|
const env = data.envOverrides ?? {};
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const
|
|
25
|
-
|
|
19
|
+
|
|
20
|
+
const k = data.ai?.providers?.[provider]?.apiKey;
|
|
21
|
+
if (typeof k === 'string' && k.length > 0) return true;
|
|
22
|
+
|
|
23
|
+
const envVar = getApiKeyEnvVar(provider);
|
|
24
|
+
if (envVar && env[envVar]) return true;
|
|
25
|
+
|
|
26
|
+
return false;
|
|
26
27
|
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { apiFetch } from '@/lib/api';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Check if AI is available by inspecting the active provider's API key.
|
|
5
|
+
*/
|
|
6
|
+
export async function checkAiAvailable(): Promise<boolean> {
|
|
7
|
+
try {
|
|
8
|
+
const data = await apiFetch<{
|
|
9
|
+
ai?: { provider?: string; providers?: Record<string, { apiKey?: string }> };
|
|
10
|
+
}>('/api/settings');
|
|
11
|
+
const provider = data.ai?.provider ?? '';
|
|
12
|
+
const providers = data.ai?.providers ?? {};
|
|
13
|
+
const active = providers[provider as keyof typeof providers];
|
|
14
|
+
return !!(active?.apiKey);
|
|
15
|
+
} catch {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Trigger AI to generate README.md and INSTRUCTION.md for a space.
|
|
22
|
+
* Dispatches `mindos:ai-init` events consumed by SpaceInitToast.
|
|
23
|
+
* The call is fire-and-forget — returns immediately after starting the stream.
|
|
24
|
+
*/
|
|
25
|
+
export function triggerSpaceAiInit(
|
|
26
|
+
spaceName: string,
|
|
27
|
+
spacePath: string,
|
|
28
|
+
description = '',
|
|
29
|
+
): void {
|
|
30
|
+
const isZh = typeof document !== 'undefined' && document.documentElement.lang === 'zh';
|
|
31
|
+
const prompt = isZh
|
|
32
|
+
? `初始化新建的心智空间「${spaceName}」,路径为「${spacePath}/」。${description ? `描述:「${description}」。` : ''}两个文件均已存在模板,用 write_file 覆盖:\n1. 「${spacePath}/README.md」— 写入空间用途、结构概览、使用指南\n2. 「${spacePath}/INSTRUCTION.md」— 写入 AI Agent 在此空间中的行为规则和操作约定\n\n内容简洁实用,直接使用工具写入。`
|
|
33
|
+
: `Initialize the new Mind Space "${spaceName}" at "${spacePath}/". ${description ? `Description: "${description}". ` : ''}Both files already exist with templates — use write_file to overwrite:\n1. "${spacePath}/README.md" — write purpose, structure overview, usage guidelines\n2. "${spacePath}/INSTRUCTION.md" — write rules for AI agents operating in this space\n\nKeep content concise and actionable. Write files directly using tools.`;
|
|
34
|
+
|
|
35
|
+
window.dispatchEvent(new CustomEvent('mindos:ai-init', {
|
|
36
|
+
detail: { spaceName, spacePath, description, state: 'working' },
|
|
37
|
+
}));
|
|
38
|
+
|
|
39
|
+
fetch('/api/ask', {
|
|
40
|
+
method: 'POST',
|
|
41
|
+
headers: { 'Content-Type': 'application/json' },
|
|
42
|
+
body: JSON.stringify({
|
|
43
|
+
messages: [{ role: 'user', content: prompt }],
|
|
44
|
+
currentFile: spacePath + '/INSTRUCTION.md',
|
|
45
|
+
}),
|
|
46
|
+
}).then(async (res) => {
|
|
47
|
+
if (!res.ok || !res.body) throw new Error(`HTTP ${res.status}`);
|
|
48
|
+
const reader = res.body.getReader();
|
|
49
|
+
try {
|
|
50
|
+
while (true) {
|
|
51
|
+
const { done } = await reader.read();
|
|
52
|
+
if (done) break;
|
|
53
|
+
}
|
|
54
|
+
} finally {
|
|
55
|
+
reader.releaseLock();
|
|
56
|
+
}
|
|
57
|
+
window.dispatchEvent(new CustomEvent('mindos:ai-init', {
|
|
58
|
+
detail: { spacePath, state: 'done' },
|
|
59
|
+
}));
|
|
60
|
+
window.dispatchEvent(new Event('mindos:files-changed'));
|
|
61
|
+
}).catch(() => {
|
|
62
|
+
window.dispatchEvent(new CustomEvent('mindos:ai-init', {
|
|
63
|
+
detail: { spacePath, state: 'error' },
|
|
64
|
+
}));
|
|
65
|
+
});
|
|
66
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useEffect } from 'react';
|
|
4
|
+
import { useMcpStore } from '@/lib/stores/mcp-store';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Thin component that initializes MCP store side-effects (polling, event listeners).
|
|
8
|
+
* Renders nothing — drop it anywhere in the tree that needs MCP data.
|
|
9
|
+
* Replaces the old <McpProvider> wrapper.
|
|
10
|
+
*/
|
|
11
|
+
export default function McpStoreInit() {
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
const cleanup = useMcpStore.getState()._init();
|
|
14
|
+
return cleanup;
|
|
15
|
+
}, []);
|
|
16
|
+
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useEffect } from 'react';
|
|
4
|
+
import { useWalkthroughStore } from '@/lib/stores/walkthrough-store';
|
|
5
|
+
import WalkthroughOverlay from '@/components/walkthrough/WalkthroughOverlay';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Initializes walkthrough store and conditionally renders the overlay.
|
|
9
|
+
* Replaces the old <WalkthroughProvider> wrapper.
|
|
10
|
+
*/
|
|
11
|
+
export default function WalkthroughInit() {
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
const cleanup = useWalkthroughStore.getState()._init();
|
|
14
|
+
return cleanup;
|
|
15
|
+
}, []);
|
|
16
|
+
|
|
17
|
+
const status = useWalkthroughStore(s => s.status);
|
|
18
|
+
|
|
19
|
+
return status === 'active' ? <WalkthroughOverlay /> : null;
|
|
20
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { create } from 'zustand';
|
|
4
|
+
import { Locale, messages, Messages } from '@/lib/i18n';
|
|
5
|
+
|
|
6
|
+
/* ── Store ── */
|
|
7
|
+
|
|
8
|
+
export interface LocaleStoreState {
|
|
9
|
+
locale: Locale;
|
|
10
|
+
t: Messages;
|
|
11
|
+
setLocale: (l: Locale) => void;
|
|
12
|
+
/** Hydrate from SSR value + attach listeners. Returns cleanup. */
|
|
13
|
+
_init: (ssrLocale: Locale) => () => void;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/** Read locale from localStorage, resolving 'system' */
|
|
17
|
+
function getLocaleSnapshot(): Locale {
|
|
18
|
+
if (typeof window === 'undefined') return 'en';
|
|
19
|
+
const saved = localStorage.getItem('locale');
|
|
20
|
+
if (saved === 'zh') return 'zh';
|
|
21
|
+
if (saved === 'en') return 'en';
|
|
22
|
+
return navigator.language.startsWith('zh') ? 'zh' : 'en';
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export const useLocaleStore = create<LocaleStoreState>((set) => ({
|
|
26
|
+
locale: 'en',
|
|
27
|
+
t: messages['en'] as unknown as Messages,
|
|
28
|
+
|
|
29
|
+
setLocale: (l: Locale) => {
|
|
30
|
+
document.cookie = `locale=${l};path=/;max-age=31536000;SameSite=Lax`;
|
|
31
|
+
document.documentElement.lang = l === 'zh' ? 'zh' : 'en';
|
|
32
|
+
set({ locale: l, t: messages[l] as unknown as Messages });
|
|
33
|
+
window.dispatchEvent(new Event('mindos-locale-change'));
|
|
34
|
+
},
|
|
35
|
+
|
|
36
|
+
_init: (ssrLocale: Locale) => {
|
|
37
|
+
// Hydrate with client value (or SSR fallback)
|
|
38
|
+
const clientLocale = typeof window !== 'undefined' ? getLocaleSnapshot() : ssrLocale;
|
|
39
|
+
set({ locale: clientLocale, t: messages[clientLocale] as unknown as Messages });
|
|
40
|
+
|
|
41
|
+
// Listen for external changes (e.g. localStorage change in another tab, or pre-hydration script)
|
|
42
|
+
const handler = () => {
|
|
43
|
+
const l = getLocaleSnapshot();
|
|
44
|
+
set({ locale: l, t: messages[l] as unknown as Messages });
|
|
45
|
+
};
|
|
46
|
+
window.addEventListener('mindos-locale-change', handler);
|
|
47
|
+
return () => window.removeEventListener('mindos-locale-change', handler);
|
|
48
|
+
},
|
|
49
|
+
}));
|
|
50
|
+
|
|
51
|
+
/* ── Backward-compatible hook ── */
|
|
52
|
+
|
|
53
|
+
export function useLocale() {
|
|
54
|
+
return useLocaleStore();
|
|
55
|
+
}
|