@geminilight/mindos 0.6.52 → 0.6.54
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -5
- package/README_zh.md +27 -5
- package/_standalone/.mindos-build-version +1 -1
- package/_standalone/.next/BUILD_ID +1 -1
- package/_standalone/.next/app-path-routes-manifest.json +17 -14
- package/_standalone/.next/build-manifest.json +3 -3
- package/_standalone/.next/cache/.previewinfo +1 -1
- package/_standalone/.next/cache/.rscinfo +1 -1
- package/_standalone/.next/cache/config.json +3 -3
- package/_standalone/.next/prerender-manifest.json +3 -3
- package/_standalone/.next/react-loadable-manifest.json +18 -2
- package/_standalone/.next/routes-manifest.json +18 -0
- package/_standalone/.next/server/app/.well-known/agent-card.json/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/_global-error/page.js +1 -1
- package/_standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/_global-error.html +2 -2
- package/_standalone/.next/server/app/_global-error.rsc +2 -2
- package/_standalone/.next/server/app/_global-error.segments/_full.segment.rsc +2 -2
- package/_standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/_standalone/.next/server/app/_not-found/page.js +1 -1
- package/_standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/agents/[agentKey]/page.js +1 -1
- package/_standalone/.next/server/app/agents/[agentKey]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/agents/[agentKey]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/agents/page.js +3 -3
- package/_standalone/.next/server/app/agents/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/agents/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/delegations/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/discover/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/config/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/detect/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/install/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/registry/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/session/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/agent-activity/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/ask/route.js +44 -16
- package/_standalone/.next/server/app/api/ask/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/ask/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/ask-sessions/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/auth/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/backlinks/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/backlinks/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/bootstrap/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/bootstrap/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/changes/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/changes/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/export/route.js +2 -2
- package/_standalone/.next/server/app/api/export/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/export/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/extract-pdf/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/file/import/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/file/import/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/file/raw/route.js +1 -0
- package/_standalone/.next/server/app/api/file/raw/route.js.nft.json +1 -0
- package/_standalone/.next/server/app/api/file/raw/route_client-reference-manifest.js +1 -0
- package/_standalone/.next/server/app/api/file/route.js +1 -1
- package/_standalone/.next/server/app/api/file/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/file/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/files/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/git/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/graph/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/graph/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/inbox/route.js +1 -1
- package/_standalone/.next/server/app/api/inbox/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/init/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/agents/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/mcp/agents/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/install/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/install-skill/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/restart/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/status/route.js +1 -1
- package/_standalone/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/uninstall/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/monitoring/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/recent-files/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/restart/route.js +1 -1
- package/_standalone/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/search/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/list-models/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/reset-token/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/route.js +1 -1
- package/_standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/test-key/route.js +1 -1
- package/_standalone/.next/server/app/api/settings/test-key/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/check-path/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/check-port/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/generate-token/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/ls/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/route.js +1 -1
- package/_standalone/.next/server/app/api/setup/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/sync/route.js +1 -1
- package/_standalone/.next/server/app/api/sync/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/tree-version/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update/route.js +1 -1
- package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/workflows/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/changes/page.js +2 -2
- package/_standalone/.next/server/app/changes/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/changes/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/echo/[segment]/page.js +3 -3
- package/_standalone/.next/server/app/echo/[segment]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/echo/page.js +1 -1
- package/_standalone/.next/server/app/echo/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/echo/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/explore/page.js +2 -2
- package/_standalone/.next/server/app/explore/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/explore/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/help/page.js +2 -2
- package/_standalone/.next/server/app/help/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/inbox/history/page.js +2 -0
- package/_standalone/.next/server/app/inbox/history/page.js.nft.json +1 -0
- package/_standalone/.next/server/app/inbox/history/page_client-reference-manifest.js +1 -0
- package/_standalone/.next/server/app/login/page.js +2 -2
- package/_standalone/.next/server/app/login/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/page.js +3 -3
- package/_standalone/.next/server/app/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/setup/page.js +2 -2
- package/_standalone/.next/server/app/setup/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/trash/page.js +3 -3
- package/_standalone/.next/server/app/trash/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/trash/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/view/[...path]/page.js +3 -3
- package/_standalone/.next/server/app/view/[...path]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/view/[...path]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/wiki/page.js +2 -0
- package/_standalone/.next/server/app/wiki/page.js.nft.json +1 -0
- package/_standalone/.next/server/app/wiki/page_client-reference-manifest.js +1 -0
- package/_standalone/.next/server/app-paths-manifest.json +17 -14
- package/_standalone/.next/server/chunks/2190.js +2 -2
- package/_standalone/.next/server/chunks/2364.js +2 -0
- package/_standalone/.next/server/chunks/357.js +1 -0
- package/_standalone/.next/server/chunks/530.js +219 -0
- package/_standalone/.next/server/chunks/6054.js +52 -0
- package/_standalone/.next/server/chunks/6539.js +1 -1
- package/_standalone/.next/server/chunks/8388.js +2 -2
- package/_standalone/.next/server/chunks/953.js +4 -4
- package/_standalone/.next/server/middleware-build-manifest.js +1 -1
- package/_standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/_standalone/.next/server/next-font-manifest.js +1 -1
- package/_standalone/.next/server/next-font-manifest.json +1 -1
- package/_standalone/.next/server/pages/500.html +2 -2
- package/_standalone/.next/server/server-reference-manifest.js +1 -1
- package/_standalone/.next/server/server-reference-manifest.json +1 -1
- package/_standalone/.next/static/2hrwFOLEOZhHQHfrIt-Dw/_buildManifest.js +1 -0
- package/_standalone/.next/static/chunks/1053-2874859f7caefa0f.js +29 -0
- package/_standalone/.next/static/chunks/178-105779afb62d36d9.js +1 -0
- package/_standalone/.next/static/chunks/1814.b08e9fb85dd3b13c.js +1 -0
- package/_standalone/.next/static/chunks/{1880-3ec02adc80531825.js → 1880-7abf971bcfd2389b.js} +2 -2
- package/_standalone/.next/static/chunks/{3160-83a7e0b94414b3ac.js → 2218-d54538000574ffef.js} +1 -1
- package/_standalone/.next/static/chunks/254-32719a9bea2e74f0.js +1 -0
- package/_standalone/.next/static/chunks/362.a77be2f206db7b19.js +1 -0
- package/_standalone/.next/static/chunks/4237-ffc6e7c15d4007b6.js +1 -0
- package/_standalone/.next/static/chunks/7035-2af69391c7b1ad95.js +1 -0
- package/_standalone/.next/static/chunks/7322-d67d05067544864c.js +1 -0
- package/_standalone/.next/static/chunks/{6926-4af497b83952fa87.js → 8409-de5726a4a278d28f.js} +1 -1
- package/_standalone/.next/static/chunks/8753-ea9db680b0f70f25.js +1 -0
- package/_standalone/.next/static/chunks/app/.well-known/agent-card.json/{route-b07a5983e85bc5e3.js → route-e240db6d5049d336.js} +1 -1
- package/_standalone/.next/static/chunks/app/_global-error/{page-b07a5983e85bc5e3.js → page-e240db6d5049d336.js} +1 -1
- package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-f006a70f6889eb56.js +1 -0
- package/_standalone/.next/static/chunks/app/agents/page-bd522e428e3acb78.js +5 -0
- package/_standalone/.next/static/chunks/app/api/a2a/agents/{route-b07a5983e85bc5e3.js → route-e240db6d5049d336.js} +1 -1
- package/_standalone/.next/static/chunks/app/api/a2a/delegations/{route-b07a5983e85bc5e3.js → route-e240db6d5049d336.js} +1 -1
- package/_standalone/.next/static/chunks/app/api/a2a/discover/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/a2a/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/config/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/detect/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/install/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/registry/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/session/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/agent-activity/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/ask/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/ask-sessions/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/auth/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/backlinks/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/bootstrap/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/changes/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/export/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/extract-pdf/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/file/import/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/file/raw/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/file/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/files/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/git/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/graph/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/health/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/inbox/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/init/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/agents/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/install/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/restart/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/status/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/uninstall/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/monitoring/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/recent-files/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/restart/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/search/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/settings/list-models/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/settings/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/settings/test-key/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/check-path/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/check-port/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/ls/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/skills/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/sync/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/tree-version/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/uninstall/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/update/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/update-check/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/update-status/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/workflows/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/changes/page-5a72144d1080a699.js +1 -0
- package/_standalone/.next/static/chunks/app/echo/[segment]/{page-88df174dd64b2c76.js → page-6710da1f581b2854.js} +2 -2
- package/_standalone/.next/static/chunks/app/echo/page-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/explore/{page-5eb2835e9e3ab4bb.js → page-d3d99308146c2240.js} +1 -1
- package/_standalone/.next/static/chunks/app/global-error-c37d50db6128ec01.js +1 -0
- package/_standalone/.next/static/chunks/app/help/page-222df603080b5fab.js +1 -0
- package/_standalone/.next/static/chunks/app/inbox/history/page-07819cf95cb0805f.js +1 -0
- package/_standalone/.next/static/chunks/app/layout-8eacff5813458190.js +186 -0
- package/_standalone/.next/static/chunks/app/loading-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/login/{page-24236460fa7c11d0.js → page-0eeef685052869a6.js} +1 -1
- package/_standalone/.next/static/chunks/app/page-5a6c9455efe8a0df.js +7 -0
- package/_standalone/.next/static/chunks/app/setup/{page-99f40e9337388cda.js → page-9a81fa4d82c6351b.js} +1 -1
- package/_standalone/.next/static/chunks/app/trash/page-72d0ae3649ac4b6c.js +1 -0
- package/_standalone/.next/static/chunks/app/view/[...path]/loading-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/view/[...path]/not-found-fc04c2bd4f35bc6f.js +1 -0
- package/_standalone/.next/static/chunks/app/view/[...path]/page-e8699f96589c0979.js +12 -0
- package/_standalone/.next/static/chunks/app/wiki/page-d492256a93f0b8bc.js +1 -0
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/{webpack-bbd44cbc83dc0aa4.js → webpack-73c9da80c6c1ebfe.js} +1 -1
- package/_standalone/.next/static/css/66f8a81e4eda06d4.css +1 -0
- package/_standalone/.next/static/css/a4a2b71142b311af.css +31 -0
- package/_standalone/.next/trace +64 -64
- package/_standalone/.next/types/routes.d.ts +5 -2
- package/_standalone/.next/types/validator.ts +27 -0
- package/_standalone/__tests__/agents/agents-content-dashboard.test.tsx +1 -0
- package/_standalone/__tests__/agents/agents-content-model.test.ts +13 -0
- package/_standalone/__tests__/core/inbox.test.ts +168 -0
- package/_standalone/__tests__/core/sync.test.ts +37 -0
- package/_standalone/__tests__/panels/agents-panel-hub.test.tsx +1 -0
- package/_standalone/app/globals.css +29 -3
- package/_standalone/components/ActivityBar.tsx +9 -9
- package/_standalone/components/AskFab.tsx +1 -1
- package/_standalone/components/Backlinks.tsx +1 -1
- package/_standalone/components/Breadcrumb.tsx +1 -1
- package/_standalone/components/CreateSpaceModal.tsx +1 -1
- package/_standalone/components/EchoSpotlight.tsx +14 -10
- package/_standalone/components/Editor.tsx +1 -1
- package/_standalone/components/ExportModal.tsx +3 -3
- package/_standalone/components/FileTree.tsx +6 -11
- package/_standalone/components/GuideCard.tsx +1 -1
- package/_standalone/components/ImportModal.tsx +1 -2
- package/_standalone/components/KeyboardShortcuts.tsx +1 -1
- package/_standalone/components/MarkdownEditor.tsx +1 -1
- package/_standalone/components/OnboardingView.tsx +2 -2
- package/_standalone/components/OrganizeToast.tsx +3 -1
- package/_standalone/components/Panel.tsx +27 -6
- package/_standalone/components/Sidebar.tsx +1 -1
- package/_standalone/components/SidebarLayout.tsx +30 -7
- package/_standalone/components/SystemPulse.tsx +16 -16
- package/_standalone/components/agents/AgentsOverviewSection.tsx +18 -92
- package/_standalone/components/agents/AgentsPanelA2aTab.tsx +67 -66
- package/_standalone/components/agents/AgentsPrimitives.tsx +1 -1
- package/_standalone/components/agents/RecentActivityFeed.tsx +6 -6
- package/_standalone/components/agents/SkillDetailPopover.tsx +1 -1
- package/_standalone/components/ask/AskHeader.tsx +1 -1
- package/_standalone/components/echo/EchoHero.tsx +1 -1
- package/_standalone/components/echo/EchoPageSections.tsx +1 -1
- package/_standalone/components/explore/UseCaseCard.tsx +1 -1
- package/_standalone/components/home/InboxSection.tsx +262 -54
- package/_standalone/components/panels/AgentsPanel.tsx +4 -3
- package/_standalone/components/panels/AgentsPanelAgentDetail.tsx +1 -1
- package/_standalone/components/panels/AgentsPanelHubNav.tsx +10 -6
- package/_standalone/components/panels/PanelHeader.tsx +1 -1
- package/_standalone/components/renderers/audio/AudioRenderer.tsx +79 -0
- package/_standalone/components/renderers/image/ImageRenderer.tsx +203 -0
- package/_standalone/components/renderers/pdf/PdfRenderer.tsx +57 -0
- package/_standalone/components/renderers/video/VideoRenderer.tsx +91 -0
- package/_standalone/components/settings/McpTab.tsx +154 -28
- package/_standalone/components/settings/PluginsTab.tsx +1 -1
- package/_standalone/components/settings/SettingsContent.tsx +41 -7
- package/_standalone/components/settings/types.ts +7 -1
- package/_standalone/components/walkthrough/WalkthroughOverlay.tsx +40 -11
- package/_standalone/components/walkthrough/WalkthroughTooltip.tsx +1 -1
- package/_standalone/hooks/useAiOrganize.ts +14 -1
- package/_standalone/lib/organize-history.ts +6 -0
- package/_standalone/lib/stores/walkthrough-store.ts +33 -1
- package/_standalone/tsconfig.tsbuildinfo +1 -1
- package/app/app/api/ask/route.ts +193 -3
- package/app/app/api/file/raw/route.ts +121 -0
- package/app/app/api/file/route.ts +21 -0
- package/app/app/api/inbox/route.ts +38 -2
- package/app/app/api/mcp/status/route.ts +1 -0
- package/app/app/api/restart/route.ts +26 -21
- package/app/app/api/settings/route.ts +13 -0
- package/app/app/api/setup/route.ts +11 -1
- package/app/app/api/sync/route.ts +36 -13
- package/app/app/api/update/route.ts +24 -10
- package/app/app/global-error.tsx +3 -3
- package/app/app/globals.css +29 -3
- package/app/app/inbox/history/page.tsx +250 -0
- package/app/app/layout.tsx +5 -11
- package/app/app/login/page.tsx +1 -1
- package/app/app/view/[...path]/ViewPageClient.tsx +15 -10
- package/app/app/view/[...path]/not-found.tsx +1 -1
- package/app/app/view/[...path]/page.tsx +32 -1
- package/app/app/wiki/page.tsx +58 -0
- package/app/components/ActivityBar.tsx +9 -9
- package/app/components/AskFab.tsx +1 -1
- package/app/components/Backlinks.tsx +1 -1
- package/app/components/Breadcrumb.tsx +1 -1
- package/app/components/CreateSpaceModal.tsx +1 -1
- package/app/components/DirView.tsx +2 -2
- package/app/components/EchoSpotlight.tsx +14 -10
- package/app/components/Editor.tsx +1 -1
- package/app/components/ExportModal.tsx +3 -3
- package/app/components/FileTree.tsx +6 -11
- package/app/components/GuideCard.tsx +1 -1
- package/app/components/HomeContent.tsx +50 -39
- package/app/components/ImportModal.tsx +1 -2
- package/app/components/KeyboardShortcuts.tsx +1 -1
- package/app/components/MarkdownEditor.tsx +1 -1
- package/app/components/OnboardingView.tsx +2 -2
- package/app/components/OrganizeToast.tsx +3 -1
- package/app/components/Panel.tsx +27 -6
- package/app/components/Sidebar.tsx +1 -1
- package/app/components/SidebarLayout.tsx +30 -7
- package/app/components/SystemPulse.tsx +16 -16
- package/app/components/TrashPageClient.tsx +8 -6
- package/app/components/UpdateOverlay.tsx +1 -1
- package/app/components/WikiHomeContent.tsx +273 -0
- package/app/components/agents/AgentDetailContent.tsx +5 -5
- package/app/components/agents/AgentsContentPage.tsx +14 -3
- package/app/components/agents/AgentsOverviewSection.tsx +18 -92
- package/app/components/agents/AgentsPanelA2aTab.tsx +67 -66
- package/app/components/agents/AgentsPrimitives.tsx +1 -1
- package/app/components/agents/RecentActivityFeed.tsx +6 -6
- package/app/components/agents/SkillDetailPopover.tsx +1 -1
- package/app/components/agents/agents-content-model.ts +4 -1
- package/app/components/ask/AskHeader.tsx +1 -1
- package/app/components/changes/ChangesContentPage.tsx +10 -6
- package/app/components/echo/EchoHero.tsx +1 -1
- package/app/components/echo/EchoPageSections.tsx +1 -1
- package/app/components/explore/ExploreContent.tsx +1 -1
- package/app/components/explore/UseCaseCard.tsx +1 -1
- package/app/components/help/HelpContent.tsx +3 -3
- package/app/components/home/InboxSection.tsx +262 -54
- package/app/components/panels/AgentsPanel.tsx +4 -3
- package/app/components/panels/AgentsPanelAgentDetail.tsx +1 -1
- package/app/components/panels/AgentsPanelHubNav.tsx +10 -6
- package/app/components/panels/PanelHeader.tsx +1 -1
- package/app/components/renderers/audio/AudioRenderer.tsx +79 -0
- package/app/components/renderers/audio/manifest.ts +17 -0
- package/app/components/renderers/image/ImageRenderer.tsx +203 -0
- package/app/components/renderers/image/manifest.ts +17 -0
- package/app/components/renderers/pdf/PdfRenderer.tsx +57 -0
- package/app/components/renderers/pdf/manifest.ts +15 -0
- package/app/components/renderers/video/VideoRenderer.tsx +91 -0
- package/app/components/renderers/video/manifest.ts +17 -0
- package/app/components/settings/McpTab.tsx +154 -28
- package/app/components/settings/PluginsTab.tsx +1 -1
- package/app/components/settings/SettingsContent.tsx +41 -7
- package/app/components/settings/types.ts +7 -1
- package/app/components/setup/index.tsx +4 -3
- package/app/components/walkthrough/WalkthroughOverlay.tsx +40 -11
- package/app/components/walkthrough/WalkthroughTooltip.tsx +1 -1
- package/app/hooks/useAiOrganize.ts +14 -1
- package/app/lib/agent/model.ts +2 -1
- package/app/lib/core/inbox.ts +131 -2
- package/app/lib/core/pdf-text.ts +28 -0
- package/app/lib/core/search-index.ts +29 -5
- package/app/lib/core/tree.ts +6 -1
- package/app/lib/fs.ts +31 -3
- package/app/lib/i18n/modules/ai-chat.ts +42 -0
- package/app/lib/i18n/modules/knowledge.ts +30 -0
- package/app/lib/i18n/modules/navigation.ts +4 -2
- package/app/lib/i18n/modules/panels.ts +22 -4
- package/app/lib/i18n/modules/settings.ts +26 -0
- package/app/lib/organize-history.ts +6 -0
- package/app/lib/renderers/index.ts +5 -1
- package/app/lib/settings.ts +60 -0
- package/app/lib/stores/walkthrough-store.ts +33 -1
- package/bin/commands/doctor.js +12 -6
- package/bin/commands/file.js +7 -4
- package/bin/commands/logs.js +39 -4
- package/bin/commands/onboard.js +1 -1
- package/bin/commands/open.js +6 -1
- package/bin/commands/space.js +7 -4
- package/bin/commands/update.js +31 -29
- package/bin/lib/build.js +19 -8
- package/bin/lib/clean-env.js +38 -0
- package/bin/lib/cli-shim.js +67 -2
- package/bin/lib/config.js +4 -5
- package/bin/lib/gateway.js +51 -27
- package/bin/lib/jsonc.js +7 -2
- package/bin/lib/mcp-agents.js +26 -5
- package/bin/lib/path-expand.js +6 -3
- package/bin/lib/port.js +5 -1
- package/bin/lib/stop.js +98 -41
- package/bin/lib/sync.js +1 -1
- package/package.json +1 -1
- package/scripts/setup.js +7 -5
- package/_standalone/.next/server/chunks/2673.js +0 -52
- package/_standalone/.next/server/chunks/5648.js +0 -2
- package/_standalone/.next/server/chunks/8408.js +0 -219
- package/_standalone/.next/static/IiTZbEzZo8l5MSUxlDwKp/_buildManifest.js +0 -1
- package/_standalone/.next/static/chunks/1053-c519cb347faa75e2.js +0 -29
- package/_standalone/.next/static/chunks/1814.72f7fe7c61e2b647.js +0 -1
- package/_standalone/.next/static/chunks/362.4c226d7887d5f696.js +0 -1
- package/_standalone/.next/static/chunks/6357-c645842834c0d4cd.js +0 -1
- package/_standalone/.next/static/chunks/6981-3d7dcac2d12a5670.js +0 -1
- package/_standalone/.next/static/chunks/7035-032641fb6f4e07b2.js +0 -1
- package/_standalone/.next/static/chunks/7144-5febf62f1a79fe64.js +0 -1
- package/_standalone/.next/static/chunks/9602-423291fdb36396d1.js +0 -1
- package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-074d6aafc2606561.js +0 -1
- package/_standalone/.next/static/chunks/app/agents/page-710d8c80fa86e93e.js +0 -5
- package/_standalone/.next/static/chunks/app/api/a2a/discover/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/a2a/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/config/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/detect/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/install/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/registry/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/session/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/agent-activity/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/ask/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/ask-sessions/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/auth/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/backlinks/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/bootstrap/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/changes/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/export/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/extract-pdf/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/file/import/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/file/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/files/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/git/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/graph/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/health/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/inbox/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/init/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/agents/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/install/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/restart/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/status/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/uninstall/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/monitoring/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/recent-files/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/restart/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/search/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/settings/list-models/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/settings/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/settings/test-key/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/check-path/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/check-port/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/ls/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/skills/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/sync/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/tree-version/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/uninstall/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/update/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/update-check/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/update-status/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/workflows/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/changes/page-350992cf5091bc5b.js +0 -1
- package/_standalone/.next/static/chunks/app/echo/page-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/global-error-e1ad0e18236ba26c.js +0 -1
- package/_standalone/.next/static/chunks/app/help/page-2325d25b6846ca07.js +0 -1
- package/_standalone/.next/static/chunks/app/layout-e706f9a963b177ba.js +0 -186
- package/_standalone/.next/static/chunks/app/loading-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/page-2595175820acfd65.js +0 -7
- package/_standalone/.next/static/chunks/app/trash/page-61c6210fac1e9710.js +0 -1
- package/_standalone/.next/static/chunks/app/view/[...path]/loading-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/view/[...path]/not-found-61474670d6bb6116.js +0 -1
- package/_standalone/.next/static/chunks/app/view/[...path]/page-798359c36f10ef8d.js +0 -12
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/css/bbf51803eade6c50.css +0 -31
- package/_standalone/.next/static/css/ef1151f74f00d91a.css +0 -1
- package/_standalone/lib/i18n/generated/explore-i18n.generated.ts +0 -138
- package/_standalone/lib/i18n/index.ts +0 -38
- package/_standalone/lib/i18n/modules/ai-chat.ts +0 -237
- package/_standalone/lib/i18n/modules/common.ts +0 -71
- package/_standalone/lib/i18n/modules/features.ts +0 -153
- package/_standalone/lib/i18n/modules/knowledge.ts +0 -727
- package/_standalone/lib/i18n/modules/navigation.ts +0 -157
- package/_standalone/lib/i18n/modules/onboarding.ts +0 -445
- package/_standalone/lib/i18n/modules/panels.ts +0 -1255
- package/_standalone/lib/i18n/modules/settings.ts +0 -889
- package/_standalone/lib/i18n.ts +0 -3
- /package/_standalone/.next/static/{IiTZbEzZo8l5MSUxlDwKp → 2hrwFOLEOZhHQHfrIt-Dw}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useState, useEffect, useMemo } from 'react';
|
|
4
|
+
import Link from 'next/link';
|
|
5
|
+
import { Brain, ChevronDown, FolderOpen, Plus, Sparkles, Search, FilePlus, ArrowRight } from 'lucide-react';
|
|
6
|
+
import { useLocale } from '@/lib/stores/locale-store';
|
|
7
|
+
import { encodePath, relativeTime, extractEmoji, stripEmoji } from '@/lib/utils';
|
|
8
|
+
import { InboxSection } from '@/components/home/InboxSection';
|
|
9
|
+
import type { SpaceInfo } from '@/app/page';
|
|
10
|
+
|
|
11
|
+
interface RecentFile {
|
|
12
|
+
path: string;
|
|
13
|
+
mtime: number;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
interface WikiHomeContentProps {
|
|
17
|
+
spaces: SpaceInfo[];
|
|
18
|
+
recent: RecentFile[];
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function triggerSearch() {
|
|
22
|
+
window.dispatchEvent(new KeyboardEvent('keydown', { key: 'k', metaKey: true, bubbles: true }));
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function triggerAsk() {
|
|
26
|
+
window.dispatchEvent(new KeyboardEvent('keydown', { key: '/', metaKey: true, bubbles: true }));
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Calculate the max mtime for a space from recent files
|
|
31
|
+
*/
|
|
32
|
+
function getSpaceLatestMtime(spaceName: string, recentFiles: RecentFile[]): number {
|
|
33
|
+
let maxMtime = 0;
|
|
34
|
+
for (const file of recentFiles) {
|
|
35
|
+
if (file.path.startsWith(`${spaceName}/`)) {
|
|
36
|
+
maxMtime = Math.max(maxMtime, file.mtime);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return maxMtime;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const SPACES_COLLAPSED = 9;
|
|
43
|
+
|
|
44
|
+
export default function WikiHomeContent({ spaces, recent }: WikiHomeContentProps) {
|
|
45
|
+
const { t } = useLocale();
|
|
46
|
+
const [sortBy, setSortBy] = useState<'recent' | 'name' | 'fileCount'>('recent');
|
|
47
|
+
const [showAllSpaces, setShowAllSpaces] = useState(false);
|
|
48
|
+
const [suggestionIdx, setSuggestionIdx] = useState(0);
|
|
49
|
+
|
|
50
|
+
const suggestions = t.ask?.suggestions ?? [
|
|
51
|
+
'Summarize this document',
|
|
52
|
+
'List all action items',
|
|
53
|
+
'What are the key points?',
|
|
54
|
+
'Find related notes',
|
|
55
|
+
];
|
|
56
|
+
|
|
57
|
+
useEffect(() => {
|
|
58
|
+
const interval = setInterval(() => {
|
|
59
|
+
setSuggestionIdx(i => (i + 1) % suggestions.length);
|
|
60
|
+
}, 4000);
|
|
61
|
+
return () => clearInterval(interval);
|
|
62
|
+
}, [suggestions.length]);
|
|
63
|
+
|
|
64
|
+
// Sort spaces
|
|
65
|
+
const sortedSpaces = useMemo(() => {
|
|
66
|
+
const sorted = [...spaces];
|
|
67
|
+
if (sortBy === 'recent') {
|
|
68
|
+
sorted.sort((a, b) => {
|
|
69
|
+
const aMtime = getSpaceLatestMtime(a.name, recent);
|
|
70
|
+
const bMtime = getSpaceLatestMtime(b.name, recent);
|
|
71
|
+
return bMtime - aMtime;
|
|
72
|
+
});
|
|
73
|
+
} else if (sortBy === 'name') {
|
|
74
|
+
sorted.sort((a, b) => a.name.localeCompare(b.name));
|
|
75
|
+
} else if (sortBy === 'fileCount') {
|
|
76
|
+
sorted.sort((a, b) => b.fileCount - a.fileCount);
|
|
77
|
+
}
|
|
78
|
+
return sorted;
|
|
79
|
+
}, [spaces, recent, sortBy]);
|
|
80
|
+
|
|
81
|
+
const visibleSpaces = showAllSpaces ? sortedSpaces : sortedSpaces.slice(0, SPACES_COLLAPSED);
|
|
82
|
+
const formatTime = (mtime: number) => relativeTime(mtime, t.home.relativeTime);
|
|
83
|
+
const lastFile = recent[0];
|
|
84
|
+
|
|
85
|
+
return (
|
|
86
|
+
<div className="content-width px-4 md:px-6 py-10 md:py-14">
|
|
87
|
+
|
|
88
|
+
{/* ══════════ Hero ══════════ */}
|
|
89
|
+
<div className="mb-10">
|
|
90
|
+
<div className="flex items-center gap-3 mb-6">
|
|
91
|
+
<div className="w-1 h-7 rounded-full bg-gradient-to-b from-[var(--amber)] to-[var(--amber)]/20" />
|
|
92
|
+
<h1 className="text-2xl font-semibold tracking-tight text-foreground">
|
|
93
|
+
{t.sidebar.files}
|
|
94
|
+
</h1>
|
|
95
|
+
</div>
|
|
96
|
+
|
|
97
|
+
{/* Command bar */}
|
|
98
|
+
<div className="w-full max-w-xl flex flex-col sm:flex-row items-stretch sm:items-center gap-2 pl-4">
|
|
99
|
+
<button
|
|
100
|
+
onClick={triggerAsk}
|
|
101
|
+
title="⌘/"
|
|
102
|
+
className="flex-1 flex items-center gap-3 px-4 py-3.5 rounded-xl border border-border/50 shadow-sm bg-card/80 backdrop-blur-sm transition-all duration-200 hover:border-[var(--amber)]/40 hover:shadow-md hover:-translate-y-0.5 group"
|
|
103
|
+
>
|
|
104
|
+
<Sparkles size={16} className="shrink-0 text-[var(--amber)] group-hover:scale-110 transition-transform duration-150" />
|
|
105
|
+
<div className="flex-1 min-h-[1.5rem] flex items-center">
|
|
106
|
+
<span
|
|
107
|
+
key={suggestionIdx}
|
|
108
|
+
className="text-sm text-left text-muted-foreground animate-in fade-in duration-300"
|
|
109
|
+
>
|
|
110
|
+
{suggestions[suggestionIdx]}
|
|
111
|
+
</span>
|
|
112
|
+
</div>
|
|
113
|
+
<kbd className="hidden sm:inline-flex items-center gap-0.5 px-2 py-0.5 rounded text-xs font-mono font-medium bg-[var(--amber-dim)] text-[var(--amber-text)]">
|
|
114
|
+
⌘/
|
|
115
|
+
</kbd>
|
|
116
|
+
</button>
|
|
117
|
+
<button
|
|
118
|
+
onClick={triggerSearch}
|
|
119
|
+
title="⌘K"
|
|
120
|
+
className="flex items-center gap-2 px-3.5 py-3 rounded-xl border border-border/50 text-sm text-muted-foreground transition-all duration-200 shrink-0 hover:bg-muted/60 hover:shadow-sm hover:-translate-y-0.5"
|
|
121
|
+
>
|
|
122
|
+
<Search size={14} />
|
|
123
|
+
<kbd className="hidden sm:inline-flex items-center px-1.5 py-0.5 rounded text-xs font-mono bg-muted">
|
|
124
|
+
⌘K
|
|
125
|
+
</kbd>
|
|
126
|
+
</button>
|
|
127
|
+
</div>
|
|
128
|
+
|
|
129
|
+
{/* Quick actions */}
|
|
130
|
+
<div className="flex items-center gap-3 mt-4 pl-4">
|
|
131
|
+
<Link
|
|
132
|
+
href="/view/Untitled.md"
|
|
133
|
+
className="inline-flex items-center gap-2 px-4 py-2.5 rounded-lg text-sm font-medium transition-all duration-200 hover:shadow-md hover:-translate-y-0.5 bg-[var(--amber)] text-[var(--amber-foreground)]"
|
|
134
|
+
>
|
|
135
|
+
<FilePlus size={14} />
|
|
136
|
+
<span>{t.home.newNote}</span>
|
|
137
|
+
</Link>
|
|
138
|
+
{lastFile && (
|
|
139
|
+
<Link
|
|
140
|
+
href={`/view/${encodePath(lastFile.path)}`}
|
|
141
|
+
className="inline-flex items-center gap-2 px-3.5 py-2 rounded-lg text-sm font-medium transition-colors text-muted-foreground hover:text-foreground hover:bg-muted"
|
|
142
|
+
>
|
|
143
|
+
<ArrowRight size={14} className="text-[var(--amber)]/60" />
|
|
144
|
+
<span>{t.home.continueEditing}</span>
|
|
145
|
+
<span className="text-xs opacity-40 truncate max-w-32" suppressHydrationWarning>
|
|
146
|
+
{lastFile.path.split('/').pop()}
|
|
147
|
+
</span>
|
|
148
|
+
</Link>
|
|
149
|
+
)}
|
|
150
|
+
</div>
|
|
151
|
+
</div>
|
|
152
|
+
|
|
153
|
+
{/* ══════════ Spaces Grid ══════════ */}
|
|
154
|
+
<section className="mb-10">
|
|
155
|
+
<div className="flex items-center gap-2.5 mb-5">
|
|
156
|
+
<div className="flex items-center justify-center w-6 h-6 rounded-md bg-[var(--amber-subtle)] text-[var(--amber)]">
|
|
157
|
+
<Brain size={14} />
|
|
158
|
+
</div>
|
|
159
|
+
<h2 className="text-[13px] font-semibold text-foreground tracking-wide">
|
|
160
|
+
{t.home.spaces}
|
|
161
|
+
</h2>
|
|
162
|
+
{spaces.length > 0 && (
|
|
163
|
+
<span className="inline-flex items-center justify-center min-w-[20px] h-5 px-1.5 text-[10px] font-semibold rounded-full bg-muted text-muted-foreground tabular-nums">
|
|
164
|
+
{spaces.length}
|
|
165
|
+
</span>
|
|
166
|
+
)}
|
|
167
|
+
<div className="ml-auto flex items-center gap-3">
|
|
168
|
+
{spaces.length > 0 && (
|
|
169
|
+
<select
|
|
170
|
+
value={sortBy}
|
|
171
|
+
onChange={(e) => setSortBy(e.target.value as typeof sortBy)}
|
|
172
|
+
className="text-xs font-medium text-muted-foreground hover:text-foreground cursor-pointer focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring rounded px-2 py-1 transition-colors bg-transparent"
|
|
173
|
+
>
|
|
174
|
+
<option value="recent">{t.home.sortRecent ?? 'Recent'}</option>
|
|
175
|
+
<option value="name">{t.home.sortName ?? 'A-Z'}</option>
|
|
176
|
+
<option value="fileCount">{t.home.sortCount ?? 'File Count'}</option>
|
|
177
|
+
</select>
|
|
178
|
+
)}
|
|
179
|
+
<button
|
|
180
|
+
onClick={() => window.dispatchEvent(new Event('mindos:create-space'))}
|
|
181
|
+
className="flex items-center gap-1.5 text-xs font-medium text-[var(--amber)] transition-colors hover:opacity-80 cursor-pointer font-display"
|
|
182
|
+
>
|
|
183
|
+
<Plus size={12} />
|
|
184
|
+
<span>{t.home.newSpace}</span>
|
|
185
|
+
</button>
|
|
186
|
+
</div>
|
|
187
|
+
</div>
|
|
188
|
+
|
|
189
|
+
{spaces.length === 0 ? (
|
|
190
|
+
<div className="rounded-xl border border-border/40 bg-card/30 px-6 py-12 text-center">
|
|
191
|
+
<div className="inline-flex items-center justify-center w-12 h-12 rounded-full bg-[var(--amber-subtle)] mb-4">
|
|
192
|
+
<Brain size={22} className="text-[var(--amber)]/60" />
|
|
193
|
+
</div>
|
|
194
|
+
<p className="text-sm font-medium text-muted-foreground/70 mb-1">
|
|
195
|
+
{t.home.noSpacesYet ?? 'No spaces yet'}
|
|
196
|
+
</p>
|
|
197
|
+
<p className="text-xs text-muted-foreground/60 mb-4">
|
|
198
|
+
Create your first space to organize your knowledge
|
|
199
|
+
</p>
|
|
200
|
+
<button
|
|
201
|
+
onClick={() => window.dispatchEvent(new Event('mindos:create-space'))}
|
|
202
|
+
className="inline-flex items-center gap-2 px-4 py-2 text-sm font-medium rounded-lg transition-colors bg-[var(--amber)] text-[var(--amber-foreground)] hover:opacity-80"
|
|
203
|
+
>
|
|
204
|
+
<Plus size={14} />
|
|
205
|
+
Create Space
|
|
206
|
+
</button>
|
|
207
|
+
</div>
|
|
208
|
+
) : (
|
|
209
|
+
<>
|
|
210
|
+
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-2">
|
|
211
|
+
{visibleSpaces.map((space) => {
|
|
212
|
+
const emoji = extractEmoji(space.name);
|
|
213
|
+
const label = stripEmoji(space.name);
|
|
214
|
+
const latestMtime = getSpaceLatestMtime(space.name, recent);
|
|
215
|
+
const isEmpty = space.fileCount === 0;
|
|
216
|
+
|
|
217
|
+
return (
|
|
218
|
+
<Link
|
|
219
|
+
key={space.name}
|
|
220
|
+
href={`/view/${encodePath(space.path)}`}
|
|
221
|
+
className={`flex items-start gap-3 px-4 py-3.5 rounded-xl border transition-all duration-200 ${
|
|
222
|
+
isEmpty
|
|
223
|
+
? 'border-dashed border-border/50 opacity-50 hover:opacity-70'
|
|
224
|
+
: 'border-border/60 hover:border-[var(--amber)]/30 hover:shadow-md hover:-translate-y-0.5 bg-card/40'
|
|
225
|
+
}`}
|
|
226
|
+
>
|
|
227
|
+
{emoji ? (
|
|
228
|
+
<span className="text-lg leading-none shrink-0 mt-0.5" suppressHydrationWarning>{emoji}</span>
|
|
229
|
+
) : (
|
|
230
|
+
<FolderOpen size={16} className="shrink-0 text-[var(--amber)] mt-0.5" />
|
|
231
|
+
)}
|
|
232
|
+
<div className="min-w-0 flex-1">
|
|
233
|
+
<span className="text-sm font-medium truncate block text-foreground">{label}</span>
|
|
234
|
+
{space.description && (
|
|
235
|
+
<span className="text-xs text-muted-foreground line-clamp-1 mt-0.5" suppressHydrationWarning>
|
|
236
|
+
{space.description}
|
|
237
|
+
</span>
|
|
238
|
+
)}
|
|
239
|
+
<span className="text-xs text-muted-foreground/50 mt-0.5 block tabular-nums">
|
|
240
|
+
{t.home.nFiles(space.fileCount)}
|
|
241
|
+
{latestMtime > 0 && ` · ${formatTime(latestMtime)}`}
|
|
242
|
+
</span>
|
|
243
|
+
</div>
|
|
244
|
+
</Link>
|
|
245
|
+
);
|
|
246
|
+
})}
|
|
247
|
+
</div>
|
|
248
|
+
|
|
249
|
+
{sortedSpaces.length > SPACES_COLLAPSED && (
|
|
250
|
+
<button
|
|
251
|
+
onClick={() => setShowAllSpaces(!showAllSpaces)}
|
|
252
|
+
aria-expanded={showAllSpaces}
|
|
253
|
+
className="flex items-center gap-1.5 text-xs font-medium text-[var(--amber)] transition-colors hover:opacity-80 cursor-pointer font-display mt-3"
|
|
254
|
+
>
|
|
255
|
+
<ChevronDown size={12} className={`transition-transform duration-200 ${showAllSpaces ? 'rotate-180' : ''}`} />
|
|
256
|
+
<span>{showAllSpaces ? t.home.showLess : t.home.showMore}</span>
|
|
257
|
+
</button>
|
|
258
|
+
)}
|
|
259
|
+
</>
|
|
260
|
+
)}
|
|
261
|
+
</section>
|
|
262
|
+
|
|
263
|
+
{/* ══════════ Inbox ══════════ */}
|
|
264
|
+
<InboxSection />
|
|
265
|
+
|
|
266
|
+
{/* Footer */}
|
|
267
|
+
<div className="py-6 border-t border-border/20 flex items-center gap-1.5 text-xs font-display text-muted-foreground/30">
|
|
268
|
+
<Sparkles size={10} className="text-[var(--amber)]/40" />
|
|
269
|
+
<span>{t.app.footer}</span>
|
|
270
|
+
</div>
|
|
271
|
+
</div>
|
|
272
|
+
);
|
|
273
|
+
}
|
|
@@ -251,7 +251,7 @@ export default function AgentDetailContent({ agentKey }: { agentKey: string }) {
|
|
|
251
251
|
<div className="flex items-center gap-3.5 px-5 py-4">
|
|
252
252
|
<AgentAvatar name={agent.name} status={status} size="md" />
|
|
253
253
|
<div className="min-w-0 flex-1">
|
|
254
|
-
<h1 className="text-lg font-semibold tracking-tight
|
|
254
|
+
<h1 className="text-lg font-semibold tracking-tight text-foreground truncate">{agent.name}</h1>
|
|
255
255
|
<div className="flex flex-wrap items-center gap-x-2 gap-y-0.5 mt-0.5 text-2xs text-muted-foreground/60">
|
|
256
256
|
<span className={`font-medium px-1.5 py-px rounded-full ${
|
|
257
257
|
status === 'connected' ? 'bg-muted text-muted-foreground'
|
|
@@ -902,7 +902,7 @@ function KnowledgeInteractionSection() {
|
|
|
902
902
|
<BookOpen size={12} className="text-muted-foreground/50" />
|
|
903
903
|
{d?.knowledgeInteraction ?? 'Knowledge Interaction'}
|
|
904
904
|
</h2>
|
|
905
|
-
<div className="rounded-lg border border-
|
|
905
|
+
<div className="rounded-lg border border-border/40 bg-card/30 px-4 py-6 text-center">
|
|
906
906
|
<BookOpen size={20} className="text-muted-foreground/30 mx-auto mb-2" />
|
|
907
907
|
<p className="text-2xs text-muted-foreground/50">{d?.knowledgeNoData ?? 'No interactions yet. Agents will show activity here once they start working with your knowledge base.'}</p>
|
|
908
908
|
</div>
|
|
@@ -920,7 +920,7 @@ function KnowledgeInteractionSection() {
|
|
|
920
920
|
</h2>
|
|
921
921
|
<Link
|
|
922
922
|
href={`/view/${encodePath('.mindos/agent-audit-log.json')}`}
|
|
923
|
-
className="text-2xs font-medium text-[var(--amber)] hover:opacity-80 transition-opacity
|
|
923
|
+
className="text-2xs font-medium text-[var(--amber)] hover:opacity-80 transition-opacity"
|
|
924
924
|
>
|
|
925
925
|
{d?.viewFullLog ?? 'View log'} →
|
|
926
926
|
</Link>
|
|
@@ -961,7 +961,7 @@ function KnowledgeInteractionSection() {
|
|
|
961
961
|
{/* Timeline */}
|
|
962
962
|
<div className="border-t border-border/40">
|
|
963
963
|
<div className="px-4 py-2 flex items-center justify-between">
|
|
964
|
-
<p className="text-2xs text-muted-foreground/40 uppercase tracking-wider
|
|
964
|
+
<p className="text-2xs text-muted-foreground/40 uppercase tracking-wider">{d?.recentOps ?? 'Recent operations'}</p>
|
|
965
965
|
</div>
|
|
966
966
|
{visible.map((ev, i) => {
|
|
967
967
|
const kind = classifyTool(ev.tool);
|
|
@@ -1039,7 +1039,7 @@ function ActivitySection({ agent }: { agent: AgentInfo }) {
|
|
|
1039
1039
|
<StatCard label={d.activityLast7d} value={agent.runtimeUsageSignal ? 'Active' : '—'} />
|
|
1040
1040
|
</div>
|
|
1041
1041
|
) : (
|
|
1042
|
-
<div className="rounded-lg border border-
|
|
1042
|
+
<div className="rounded-lg border border-border/40 bg-card/30 px-4 py-6 text-center">
|
|
1043
1043
|
<Activity size={20} className="text-muted-foreground/30 mx-auto mb-2" />
|
|
1044
1044
|
<p className="text-2xs text-muted-foreground/50">{d.activityNoData}</p>
|
|
1045
1045
|
</div>
|
|
@@ -62,16 +62,18 @@ export default function AgentsContentPage({ tab }: { tab: AgentsDashboardTab })
|
|
|
62
62
|
}, [a, tab]);
|
|
63
63
|
|
|
64
64
|
const buckets = useMemo(() => bucketAgents(mcp.agents), [mcp.agents]);
|
|
65
|
+
const mcpEnabled = mcp.status?.connectionMode?.mcp ?? false;
|
|
65
66
|
const riskQueue = useMemo(
|
|
66
67
|
() =>
|
|
67
68
|
buildRiskQueue({
|
|
68
69
|
mcpRunning: !!mcp.status?.running,
|
|
70
|
+
mcpEnabled,
|
|
69
71
|
detectedCount: buckets.detected.length,
|
|
70
72
|
notFoundCount: buckets.notFound.length,
|
|
71
73
|
allSkillsDisabled: mcp.skills.length > 0 && mcp.skills.every((s) => !s.enabled),
|
|
72
74
|
copy: a.overview,
|
|
73
75
|
}),
|
|
74
|
-
[mcp.skills, mcp.status?.running, buckets.detected.length, buckets.notFound.length, a.overview],
|
|
76
|
+
[mcp.skills, mcp.status?.running, mcpEnabled, buckets.detected.length, buckets.notFound.length, a.overview],
|
|
75
77
|
);
|
|
76
78
|
const enabledSkillCount = useMemo(
|
|
77
79
|
() => mcp.skills.filter((skill) => skill.enabled).length,
|
|
@@ -89,7 +91,7 @@ export default function AgentsContentPage({ tab }: { tab: AgentsDashboardTab })
|
|
|
89
91
|
return (
|
|
90
92
|
<div className="content-width px-4 md:px-6 py-8 md:py-10">
|
|
91
93
|
<header className="mb-6">
|
|
92
|
-
<h1 className="text-2xl font-semibold tracking-tight
|
|
94
|
+
<h1 className="text-2xl font-semibold tracking-tight text-foreground">{pageHeader.title}</h1>
|
|
93
95
|
<p className="mt-1 text-sm text-muted-foreground">{pageHeader.subtitle}</p>
|
|
94
96
|
</header>
|
|
95
97
|
|
|
@@ -104,6 +106,7 @@ export default function AgentsContentPage({ tab }: { tab: AgentsDashboardTab })
|
|
|
104
106
|
mcpRunning={!!mcp.status?.running}
|
|
105
107
|
mcpPort={mcp.status?.port ?? null}
|
|
106
108
|
mcpToolCount={mcp.status?.toolCount ?? 0}
|
|
109
|
+
mcpEnabled={mcpEnabled}
|
|
107
110
|
enabledSkillCount={enabledSkillCount}
|
|
108
111
|
allAgents={mcp.agents}
|
|
109
112
|
pulseCopy={a.workspacePulse}
|
|
@@ -111,10 +114,18 @@ export default function AgentsContentPage({ tab }: { tab: AgentsDashboardTab })
|
|
|
111
114
|
/>
|
|
112
115
|
)}
|
|
113
116
|
|
|
114
|
-
{tab === 'mcp' && (
|
|
117
|
+
{tab === 'mcp' && mcpEnabled && (
|
|
115
118
|
<AgentsMcpSection copy={{ ...a.mcp, status: a.status }} mcp={mcp} buckets={buckets} copyState={null} onCopySnippet={copySnippet} />
|
|
116
119
|
)}
|
|
117
120
|
|
|
121
|
+
{/* MCP tab accessed but mode disabled — show hint */}
|
|
122
|
+
{tab === 'mcp' && !mcpEnabled && !mcp.loading && (
|
|
123
|
+
<div className="flex flex-col items-center justify-center py-16 text-center">
|
|
124
|
+
<p className="text-sm text-muted-foreground">{a.mcp?.mcpDisabledMessage ?? 'MCP mode is not enabled.'}</p>
|
|
125
|
+
<p className="text-xs text-muted-foreground/60 mt-1">{a.mcp?.mcpDisabledHint ?? 'Enable it in Settings → Connections to use MCP agents.'}</p>
|
|
126
|
+
</div>
|
|
127
|
+
)}
|
|
128
|
+
|
|
118
129
|
{tab === 'skills' && (
|
|
119
130
|
<AgentsSkillsSection copy={a.skills} mcp={mcp} buckets={buckets} />
|
|
120
131
|
)}
|
|
@@ -4,7 +4,6 @@ import Link from 'next/link';
|
|
|
4
4
|
import { useMemo, useState } from 'react';
|
|
5
5
|
import {
|
|
6
6
|
AlertTriangle,
|
|
7
|
-
ArrowRight,
|
|
8
7
|
Cable,
|
|
9
8
|
ChevronDown,
|
|
10
9
|
Globe,
|
|
@@ -62,6 +61,7 @@ export default function AgentsOverviewSection({
|
|
|
62
61
|
mcpRunning,
|
|
63
62
|
mcpPort,
|
|
64
63
|
mcpToolCount,
|
|
64
|
+
mcpEnabled = true,
|
|
65
65
|
enabledSkillCount,
|
|
66
66
|
allAgents,
|
|
67
67
|
pulseCopy,
|
|
@@ -73,12 +73,13 @@ export default function AgentsOverviewSection({
|
|
|
73
73
|
mcpRunning: boolean;
|
|
74
74
|
mcpPort: number | null;
|
|
75
75
|
mcpToolCount: number;
|
|
76
|
+
mcpEnabled?: boolean;
|
|
76
77
|
enabledSkillCount: number;
|
|
77
78
|
allAgents: AgentInfo[];
|
|
78
79
|
pulseCopy: PulseCopy;
|
|
79
80
|
a2aCount?: number;
|
|
80
81
|
}) {
|
|
81
|
-
const allHealthy = riskQueue.length === 0 && mcpRunning;
|
|
82
|
+
const allHealthy = riskQueue.length === 0 && (!mcpEnabled || mcpRunning);
|
|
82
83
|
const [riskOpen, setRiskOpen] = useState(false);
|
|
83
84
|
|
|
84
85
|
const sortedAgents = useMemo(
|
|
@@ -113,26 +114,20 @@ export default function AgentsOverviewSection({
|
|
|
113
114
|
value={buckets.detected.length}
|
|
114
115
|
tone={buckets.detected.length > 0 ? 'warn' : 'muted'}
|
|
115
116
|
/>
|
|
116
|
-
{buckets.notFound.length > 0 && (
|
|
117
|
-
<StatCell
|
|
118
|
-
icon={<AlertTriangle size={14} aria-hidden="true" />}
|
|
119
|
-
label={pulseCopy.notFound}
|
|
120
|
-
value={buckets.notFound.length}
|
|
121
|
-
tone="muted"
|
|
122
|
-
/>
|
|
123
|
-
)}
|
|
124
117
|
<StatCell
|
|
125
118
|
icon={<Zap size={14} aria-hidden="true" />}
|
|
126
119
|
label={pulseCopy.enabledSkills}
|
|
127
120
|
value={enabledSkillCount}
|
|
128
121
|
tone="ok"
|
|
129
122
|
/>
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
123
|
+
{mcpEnabled && (
|
|
124
|
+
<StatCell
|
|
125
|
+
icon={<Server size={14} aria-hidden="true" />}
|
|
126
|
+
label={copy.pulseMcp as string}
|
|
127
|
+
value={mcpRunning ? `:${mcpPort}` : '—'}
|
|
128
|
+
tone={mcpRunning ? 'ok' : 'warn'}
|
|
129
|
+
/>
|
|
130
|
+
)}
|
|
136
131
|
{a2aCount != null && (
|
|
137
132
|
<StatCell
|
|
138
133
|
icon={<Globe size={14} aria-hidden="true" />}
|
|
@@ -144,26 +139,6 @@ export default function AgentsOverviewSection({
|
|
|
144
139
|
</div>
|
|
145
140
|
</section>
|
|
146
141
|
|
|
147
|
-
{/* ═══════════ QUICK NAVIGATION ═══════════ */}
|
|
148
|
-
<nav className="grid grid-cols-1 md:grid-cols-2 gap-3" aria-label="Quick navigation">
|
|
149
|
-
<QuickNavCard
|
|
150
|
-
href="/agents?tab=mcp"
|
|
151
|
-
icon={<Server size={18} aria-hidden="true" />}
|
|
152
|
-
title="MCP"
|
|
153
|
-
stat={mcpRunning ? copy.toolsUnit(mcpToolCount) : copy.mcpOffline}
|
|
154
|
-
statTone={mcpRunning ? 'ok' : 'warn'}
|
|
155
|
-
description={copy.nextActionHint as string}
|
|
156
|
-
/>
|
|
157
|
-
<QuickNavCard
|
|
158
|
-
href="/agents?tab=skills"
|
|
159
|
-
icon={<Zap size={18} aria-hidden="true" />}
|
|
160
|
-
title="Skills"
|
|
161
|
-
stat={copy.enabledUnit(enabledSkillCount)}
|
|
162
|
-
statTone="ok"
|
|
163
|
-
description={`${pulseCopy.enabledSkills}: ${enabledSkillCount}`}
|
|
164
|
-
/>
|
|
165
|
-
</nav>
|
|
166
|
-
|
|
167
142
|
{/* ═══════════ RISK CAPSULE ═══════════ */}
|
|
168
143
|
{riskQueue.length > 0 && (
|
|
169
144
|
<div>
|
|
@@ -241,13 +216,13 @@ export default function AgentsOverviewSection({
|
|
|
241
216
|
</div>
|
|
242
217
|
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3">
|
|
243
218
|
{sortedAgents.map((agent, i) => (
|
|
244
|
-
<AgentCard key={agent.key} agent={agent} copy={copy} index={i} />
|
|
219
|
+
<AgentCard key={agent.key} agent={agent} copy={copy} index={i} mcpEnabled={mcpEnabled} />
|
|
245
220
|
))}
|
|
246
221
|
</div>
|
|
247
222
|
</section>
|
|
248
223
|
) : (
|
|
249
224
|
<section
|
|
250
|
-
className="rounded-xl border border-
|
|
225
|
+
className="rounded-xl border border-border/40 bg-card/30 p-12 text-center"
|
|
251
226
|
aria-label={copy.usagePulse}
|
|
252
227
|
>
|
|
253
228
|
<div className="w-14 h-14 rounded-2xl bg-muted/40 flex items-center justify-center mx-auto mb-4">
|
|
@@ -316,69 +291,18 @@ function StatCell({
|
|
|
316
291
|
);
|
|
317
292
|
}
|
|
318
293
|
|
|
319
|
-
/* ────────── Quick Nav Card ────────── */
|
|
320
|
-
|
|
321
|
-
function QuickNavCard({
|
|
322
|
-
href,
|
|
323
|
-
icon,
|
|
324
|
-
title,
|
|
325
|
-
stat,
|
|
326
|
-
statTone,
|
|
327
|
-
description,
|
|
328
|
-
}: {
|
|
329
|
-
href: string;
|
|
330
|
-
icon: React.ReactNode;
|
|
331
|
-
title: string;
|
|
332
|
-
stat: string;
|
|
333
|
-
statTone: 'ok' | 'warn';
|
|
334
|
-
description: string;
|
|
335
|
-
}) {
|
|
336
|
-
return (
|
|
337
|
-
<Link
|
|
338
|
-
href={href}
|
|
339
|
-
className="group rounded-xl border border-border bg-card p-4 flex items-start gap-3.5
|
|
340
|
-
hover:border-[var(--amber)]/30 hover:shadow-[0_2px_12px_rgba(0,0,0,0.04)]
|
|
341
|
-
active:scale-[0.99]
|
|
342
|
-
transition-all duration-200
|
|
343
|
-
focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
|
|
344
|
-
>
|
|
345
|
-
<div className="shrink-0 w-10 h-10 rounded-xl bg-muted/50 flex items-center justify-center text-muted-foreground/70 group-hover:text-[var(--amber)] group-hover:bg-[var(--amber)]/[0.08] transition-all duration-200">
|
|
346
|
-
{icon}
|
|
347
|
-
</div>
|
|
348
|
-
<div className="flex-1 min-w-0">
|
|
349
|
-
<div className="flex items-center gap-2 mb-1">
|
|
350
|
-
<span className="text-sm font-semibold text-foreground">{title}</span>
|
|
351
|
-
<span
|
|
352
|
-
className={`text-2xs px-2 py-0.5 rounded-full font-medium select-none ${
|
|
353
|
-
statTone === 'ok'
|
|
354
|
-
? 'bg-muted text-muted-foreground'
|
|
355
|
-
: 'bg-[var(--amber-dim)] text-[var(--amber-text)]'
|
|
356
|
-
}`}
|
|
357
|
-
>
|
|
358
|
-
{stat}
|
|
359
|
-
</span>
|
|
360
|
-
</div>
|
|
361
|
-
<p className="text-xs text-muted-foreground/70 leading-relaxed line-clamp-2">{description}</p>
|
|
362
|
-
</div>
|
|
363
|
-
<ArrowRight
|
|
364
|
-
size={14}
|
|
365
|
-
className="shrink-0 mt-1.5 text-muted-foreground/20 group-hover:text-[var(--amber)] group-hover:translate-x-0.5 transition-all duration-200"
|
|
366
|
-
aria-hidden="true"
|
|
367
|
-
/>
|
|
368
|
-
</Link>
|
|
369
|
-
);
|
|
370
|
-
}
|
|
371
|
-
|
|
372
294
|
/* ────────── Agent Card ────────── */
|
|
373
295
|
|
|
374
296
|
function AgentCard({
|
|
375
297
|
agent,
|
|
376
298
|
copy,
|
|
377
299
|
index,
|
|
300
|
+
mcpEnabled = true,
|
|
378
301
|
}: {
|
|
379
302
|
agent: AgentInfo;
|
|
380
303
|
copy: OverviewCopy;
|
|
381
304
|
index: number;
|
|
305
|
+
mcpEnabled?: boolean;
|
|
382
306
|
}) {
|
|
383
307
|
const status = resolveAgentStatus(agent);
|
|
384
308
|
const mcpCount = agent.configuredMcpServerCount ?? agent.configuredMcpServers?.length ?? 0;
|
|
@@ -421,7 +345,9 @@ function AgentCard({
|
|
|
421
345
|
|
|
422
346
|
{/* Metrics row */}
|
|
423
347
|
<div className="flex items-center gap-1 pt-2.5 border-t border-border/40">
|
|
424
|
-
|
|
348
|
+
{mcpEnabled && (
|
|
349
|
+
<MetricChip icon={<Server size={11} aria-hidden="true" />} value={mcpCount} label={copy.colMcp as string} />
|
|
350
|
+
)}
|
|
425
351
|
<MetricChip icon={<Zap size={11} aria-hidden="true" />} value={skillCount} label={copy.colSkills as string} />
|
|
426
352
|
<span className="flex-1 min-w-[4px]" />
|
|
427
353
|
{hasRuntime && (
|