@geminilight/mindos 0.6.53 → 0.6.54
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -5
- package/README_zh.md +27 -5
- package/_standalone/.mindos-build-version +1 -1
- package/_standalone/.next/BUILD_ID +1 -1
- package/_standalone/.next/app-path-routes-manifest.json +23 -20
- package/_standalone/.next/build-manifest.json +3 -3
- package/_standalone/.next/cache/.previewinfo +1 -1
- package/_standalone/.next/cache/.rscinfo +1 -1
- package/_standalone/.next/cache/config.json +3 -3
- package/_standalone/.next/prerender-manifest.json +3 -3
- package/_standalone/.next/react-loadable-manifest.json +18 -2
- package/_standalone/.next/routes-manifest.json +18 -0
- package/_standalone/.next/server/app/.well-known/agent-card.json/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/_global-error/page.js +1 -1
- package/_standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/_global-error.html +2 -2
- package/_standalone/.next/server/app/_global-error.rsc +2 -2
- package/_standalone/.next/server/app/_global-error.segments/_full.segment.rsc +2 -2
- package/_standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/_standalone/.next/server/app/_not-found/page.js +1 -1
- package/_standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/agents/[agentKey]/page.js +1 -1
- package/_standalone/.next/server/app/agents/[agentKey]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/agents/[agentKey]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/agents/page.js +3 -3
- package/_standalone/.next/server/app/agents/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/agents/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/delegations/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/discover/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/config/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/detect/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/install/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/registry/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/session/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/agent-activity/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/ask/route.js +5 -5
- package/_standalone/.next/server/app/api/ask/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/ask/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/ask-sessions/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/auth/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/backlinks/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/backlinks/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/bootstrap/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/bootstrap/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/changes/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/changes/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/export/route.js +2 -2
- package/_standalone/.next/server/app/api/export/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/export/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/extract-pdf/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/file/import/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/file/import/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/file/raw/route.js +1 -0
- package/_standalone/.next/server/app/api/file/raw/route.js.nft.json +1 -0
- package/_standalone/.next/server/app/api/file/raw/route_client-reference-manifest.js +1 -0
- package/_standalone/.next/server/app/api/file/route.js +1 -1
- package/_standalone/.next/server/app/api/file/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/file/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/files/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/git/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/graph/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/graph/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/inbox/route.js +1 -1
- package/_standalone/.next/server/app/api/inbox/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/init/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/agents/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/mcp/agents/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/install/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/install-skill/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/restart/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/status/route.js +1 -1
- package/_standalone/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/uninstall/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/monitoring/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/recent-files/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/search/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/list-models/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/reset-token/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/route.js +1 -1
- package/_standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/test-key/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/check-path/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/check-port/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/generate-token/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/ls/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/route.js +1 -1
- package/_standalone/.next/server/app/api/setup/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/sync/route.js +1 -1
- package/_standalone/.next/server/app/api/sync/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/tree-version/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/workflows/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/changes/page.js +2 -2
- package/_standalone/.next/server/app/changes/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/changes/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/echo/[segment]/page.js +3 -3
- package/_standalone/.next/server/app/echo/[segment]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/echo/page.js +1 -1
- package/_standalone/.next/server/app/echo/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/echo/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/explore/page.js +2 -2
- package/_standalone/.next/server/app/explore/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/explore/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/help/page.js +2 -2
- package/_standalone/.next/server/app/help/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/inbox/history/page.js +2 -0
- package/_standalone/.next/server/app/inbox/history/page.js.nft.json +1 -0
- package/_standalone/.next/server/app/inbox/history/page_client-reference-manifest.js +1 -0
- package/_standalone/.next/server/app/login/page.js +2 -2
- package/_standalone/.next/server/app/login/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/page.js +3 -3
- package/_standalone/.next/server/app/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/setup/page.js +2 -2
- package/_standalone/.next/server/app/setup/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/trash/page.js +3 -3
- package/_standalone/.next/server/app/trash/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/trash/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/view/[...path]/page.js +3 -3
- package/_standalone/.next/server/app/view/[...path]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/view/[...path]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/wiki/page.js +2 -0
- package/_standalone/.next/server/app/wiki/page.js.nft.json +1 -0
- package/_standalone/.next/server/app/wiki/page_client-reference-manifest.js +1 -0
- package/_standalone/.next/server/app-paths-manifest.json +23 -20
- package/_standalone/.next/server/chunks/2190.js +2 -2
- package/_standalone/.next/server/chunks/2364.js +2 -0
- package/_standalone/.next/server/chunks/357.js +1 -0
- package/_standalone/.next/server/chunks/530.js +219 -0
- package/_standalone/.next/server/chunks/6054.js +52 -0
- package/_standalone/.next/server/chunks/6539.js +1 -1
- package/_standalone/.next/server/chunks/8388.js +2 -2
- package/_standalone/.next/server/chunks/953.js +4 -4
- package/_standalone/.next/server/middleware-build-manifest.js +1 -1
- package/_standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/_standalone/.next/server/next-font-manifest.js +1 -1
- package/_standalone/.next/server/next-font-manifest.json +1 -1
- package/_standalone/.next/server/pages/500.html +2 -2
- package/_standalone/.next/server/server-reference-manifest.js +1 -1
- package/_standalone/.next/server/server-reference-manifest.json +1 -1
- package/_standalone/.next/static/2hrwFOLEOZhHQHfrIt-Dw/_buildManifest.js +1 -0
- package/_standalone/.next/static/chunks/1053-2874859f7caefa0f.js +29 -0
- package/_standalone/.next/static/chunks/178-105779afb62d36d9.js +1 -0
- package/_standalone/.next/static/chunks/1814.b08e9fb85dd3b13c.js +1 -0
- package/_standalone/.next/static/chunks/{1880-3ec02adc80531825.js → 1880-7abf971bcfd2389b.js} +2 -2
- package/_standalone/.next/static/chunks/{3160-83a7e0b94414b3ac.js → 2218-d54538000574ffef.js} +1 -1
- package/_standalone/.next/static/chunks/254-32719a9bea2e74f0.js +1 -0
- package/_standalone/.next/static/chunks/362.a77be2f206db7b19.js +1 -0
- package/_standalone/.next/static/chunks/4237-ffc6e7c15d4007b6.js +1 -0
- package/_standalone/.next/static/chunks/7035-2af69391c7b1ad95.js +1 -0
- package/_standalone/.next/static/chunks/7322-d67d05067544864c.js +1 -0
- package/_standalone/.next/static/chunks/{6926-4af497b83952fa87.js → 8409-de5726a4a278d28f.js} +1 -1
- package/_standalone/.next/static/chunks/8753-ea9db680b0f70f25.js +1 -0
- package/_standalone/.next/static/chunks/app/.well-known/agent-card.json/{route-b07a5983e85bc5e3.js → route-e240db6d5049d336.js} +1 -1
- package/_standalone/.next/static/chunks/app/_global-error/{page-b07a5983e85bc5e3.js → page-e240db6d5049d336.js} +1 -1
- package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-f006a70f6889eb56.js +1 -0
- package/_standalone/.next/static/chunks/app/agents/page-bd522e428e3acb78.js +5 -0
- package/_standalone/.next/static/chunks/app/api/a2a/agents/{route-b07a5983e85bc5e3.js → route-e240db6d5049d336.js} +1 -1
- package/_standalone/.next/static/chunks/app/api/a2a/delegations/{route-b07a5983e85bc5e3.js → route-e240db6d5049d336.js} +1 -1
- package/_standalone/.next/static/chunks/app/api/a2a/discover/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/a2a/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/config/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/detect/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/install/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/registry/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/session/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/agent-activity/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/ask/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/ask-sessions/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/auth/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/backlinks/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/bootstrap/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/changes/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/export/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/extract-pdf/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/file/import/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/file/raw/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/file/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/files/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/git/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/graph/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/health/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/inbox/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/init/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/agents/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/install/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/restart/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/status/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/uninstall/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/monitoring/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/recent-files/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/restart/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/search/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/settings/list-models/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/settings/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/settings/test-key/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/check-path/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/check-port/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/ls/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/skills/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/sync/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/tree-version/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/uninstall/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/update/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/update-check/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/update-status/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/workflows/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/changes/page-5a72144d1080a699.js +1 -0
- package/_standalone/.next/static/chunks/app/echo/[segment]/{page-88df174dd64b2c76.js → page-6710da1f581b2854.js} +2 -2
- package/_standalone/.next/static/chunks/app/echo/page-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/explore/{page-5eb2835e9e3ab4bb.js → page-d3d99308146c2240.js} +1 -1
- package/_standalone/.next/static/chunks/app/global-error-c37d50db6128ec01.js +1 -0
- package/_standalone/.next/static/chunks/app/help/page-222df603080b5fab.js +1 -0
- package/_standalone/.next/static/chunks/app/inbox/history/page-07819cf95cb0805f.js +1 -0
- package/_standalone/.next/static/chunks/app/layout-8eacff5813458190.js +186 -0
- package/_standalone/.next/static/chunks/app/loading-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/login/{page-24236460fa7c11d0.js → page-0eeef685052869a6.js} +1 -1
- package/_standalone/.next/static/chunks/app/page-5a6c9455efe8a0df.js +7 -0
- package/_standalone/.next/static/chunks/app/setup/{page-99f40e9337388cda.js → page-9a81fa4d82c6351b.js} +1 -1
- package/_standalone/.next/static/chunks/app/trash/page-72d0ae3649ac4b6c.js +1 -0
- package/_standalone/.next/static/chunks/app/view/[...path]/loading-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/view/[...path]/not-found-fc04c2bd4f35bc6f.js +1 -0
- package/_standalone/.next/static/chunks/app/view/[...path]/page-e8699f96589c0979.js +12 -0
- package/_standalone/.next/static/chunks/app/wiki/page-d492256a93f0b8bc.js +1 -0
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/{webpack-bbd44cbc83dc0aa4.js → webpack-73c9da80c6c1ebfe.js} +1 -1
- package/_standalone/.next/static/css/66f8a81e4eda06d4.css +1 -0
- package/_standalone/.next/static/css/a4a2b71142b311af.css +31 -0
- package/_standalone/.next/trace +64 -64
- package/_standalone/.next/types/routes.d.ts +5 -2
- package/_standalone/.next/types/validator.ts +27 -0
- package/_standalone/__tests__/agents/agents-content-dashboard.test.tsx +1 -0
- package/_standalone/__tests__/agents/agents-content-model.test.ts +13 -0
- package/_standalone/__tests__/core/inbox.test.ts +168 -0
- package/_standalone/__tests__/core/sync.test.ts +37 -0
- package/_standalone/__tests__/panels/agents-panel-hub.test.tsx +1 -0
- package/_standalone/app/globals.css +29 -3
- package/_standalone/components/ActivityBar.tsx +9 -9
- package/_standalone/components/AskFab.tsx +1 -1
- package/_standalone/components/Backlinks.tsx +1 -1
- package/_standalone/components/Breadcrumb.tsx +1 -1
- package/_standalone/components/CreateSpaceModal.tsx +1 -1
- package/_standalone/components/EchoSpotlight.tsx +14 -10
- package/_standalone/components/Editor.tsx +1 -1
- package/_standalone/components/ExportModal.tsx +3 -3
- package/_standalone/components/FileTree.tsx +6 -11
- package/_standalone/components/GuideCard.tsx +1 -1
- package/_standalone/components/ImportModal.tsx +1 -2
- package/_standalone/components/KeyboardShortcuts.tsx +1 -1
- package/_standalone/components/MarkdownEditor.tsx +1 -1
- package/_standalone/components/OnboardingView.tsx +2 -2
- package/_standalone/components/OrganizeToast.tsx +3 -1
- package/_standalone/components/Panel.tsx +27 -6
- package/_standalone/components/Sidebar.tsx +1 -1
- package/_standalone/components/SidebarLayout.tsx +30 -7
- package/_standalone/components/SystemPulse.tsx +16 -16
- package/_standalone/components/agents/AgentsOverviewSection.tsx +18 -92
- package/_standalone/components/agents/AgentsPanelA2aTab.tsx +67 -66
- package/_standalone/components/agents/AgentsPrimitives.tsx +1 -1
- package/_standalone/components/agents/RecentActivityFeed.tsx +6 -6
- package/_standalone/components/agents/SkillDetailPopover.tsx +1 -1
- package/_standalone/components/ask/AskHeader.tsx +1 -1
- package/_standalone/components/echo/EchoHero.tsx +1 -1
- package/_standalone/components/echo/EchoPageSections.tsx +1 -1
- package/_standalone/components/explore/UseCaseCard.tsx +1 -1
- package/_standalone/components/home/InboxSection.tsx +262 -54
- package/_standalone/components/panels/AgentsPanel.tsx +4 -3
- package/_standalone/components/panels/AgentsPanelAgentDetail.tsx +1 -1
- package/_standalone/components/panels/AgentsPanelHubNav.tsx +10 -6
- package/_standalone/components/panels/PanelHeader.tsx +1 -1
- package/_standalone/components/renderers/audio/AudioRenderer.tsx +79 -0
- package/_standalone/components/renderers/image/ImageRenderer.tsx +203 -0
- package/_standalone/components/renderers/pdf/PdfRenderer.tsx +57 -0
- package/_standalone/components/renderers/video/VideoRenderer.tsx +91 -0
- package/_standalone/components/settings/McpTab.tsx +154 -28
- package/_standalone/components/settings/PluginsTab.tsx +1 -1
- package/_standalone/components/settings/SettingsContent.tsx +41 -7
- package/_standalone/components/settings/types.ts +7 -1
- package/_standalone/components/walkthrough/WalkthroughOverlay.tsx +1 -1
- package/_standalone/components/walkthrough/WalkthroughTooltip.tsx +1 -1
- package/_standalone/hooks/useAiOrganize.ts +14 -1
- package/_standalone/lib/organize-history.ts +6 -0
- package/_standalone/tsconfig.tsbuildinfo +1 -1
- package/app/app/api/file/raw/route.ts +121 -0
- package/app/app/api/file/route.ts +21 -0
- package/app/app/api/inbox/route.ts +38 -2
- package/app/app/api/mcp/status/route.ts +1 -0
- package/app/app/api/settings/route.ts +13 -0
- package/app/app/api/setup/route.ts +11 -1
- package/app/app/api/sync/route.ts +36 -13
- package/app/app/global-error.tsx +3 -3
- package/app/app/globals.css +29 -3
- package/app/app/inbox/history/page.tsx +250 -0
- package/app/app/layout.tsx +5 -11
- package/app/app/login/page.tsx +1 -1
- package/app/app/view/[...path]/ViewPageClient.tsx +15 -10
- package/app/app/view/[...path]/not-found.tsx +1 -1
- package/app/app/view/[...path]/page.tsx +32 -1
- package/app/app/wiki/page.tsx +58 -0
- package/app/components/ActivityBar.tsx +9 -9
- package/app/components/AskFab.tsx +1 -1
- package/app/components/Backlinks.tsx +1 -1
- package/app/components/Breadcrumb.tsx +1 -1
- package/app/components/CreateSpaceModal.tsx +1 -1
- package/app/components/DirView.tsx +2 -2
- package/app/components/EchoSpotlight.tsx +14 -10
- package/app/components/Editor.tsx +1 -1
- package/app/components/ExportModal.tsx +3 -3
- package/app/components/FileTree.tsx +6 -11
- package/app/components/GuideCard.tsx +1 -1
- package/app/components/HomeContent.tsx +50 -39
- package/app/components/ImportModal.tsx +1 -2
- package/app/components/KeyboardShortcuts.tsx +1 -1
- package/app/components/MarkdownEditor.tsx +1 -1
- package/app/components/OnboardingView.tsx +2 -2
- package/app/components/OrganizeToast.tsx +3 -1
- package/app/components/Panel.tsx +27 -6
- package/app/components/Sidebar.tsx +1 -1
- package/app/components/SidebarLayout.tsx +30 -7
- package/app/components/SystemPulse.tsx +16 -16
- package/app/components/TrashPageClient.tsx +8 -6
- package/app/components/UpdateOverlay.tsx +1 -1
- package/app/components/WikiHomeContent.tsx +273 -0
- package/app/components/agents/AgentDetailContent.tsx +5 -5
- package/app/components/agents/AgentsContentPage.tsx +14 -3
- package/app/components/agents/AgentsOverviewSection.tsx +18 -92
- package/app/components/agents/AgentsPanelA2aTab.tsx +67 -66
- package/app/components/agents/AgentsPrimitives.tsx +1 -1
- package/app/components/agents/RecentActivityFeed.tsx +6 -6
- package/app/components/agents/SkillDetailPopover.tsx +1 -1
- package/app/components/agents/agents-content-model.ts +4 -1
- package/app/components/ask/AskHeader.tsx +1 -1
- package/app/components/changes/ChangesContentPage.tsx +10 -6
- package/app/components/echo/EchoHero.tsx +1 -1
- package/app/components/echo/EchoPageSections.tsx +1 -1
- package/app/components/explore/ExploreContent.tsx +1 -1
- package/app/components/explore/UseCaseCard.tsx +1 -1
- package/app/components/help/HelpContent.tsx +3 -3
- package/app/components/home/InboxSection.tsx +262 -54
- package/app/components/panels/AgentsPanel.tsx +4 -3
- package/app/components/panels/AgentsPanelAgentDetail.tsx +1 -1
- package/app/components/panels/AgentsPanelHubNav.tsx +10 -6
- package/app/components/panels/PanelHeader.tsx +1 -1
- package/app/components/renderers/audio/AudioRenderer.tsx +79 -0
- package/app/components/renderers/audio/manifest.ts +17 -0
- package/app/components/renderers/image/ImageRenderer.tsx +203 -0
- package/app/components/renderers/image/manifest.ts +17 -0
- package/app/components/renderers/pdf/PdfRenderer.tsx +57 -0
- package/app/components/renderers/pdf/manifest.ts +15 -0
- package/app/components/renderers/video/VideoRenderer.tsx +91 -0
- package/app/components/renderers/video/manifest.ts +17 -0
- package/app/components/settings/McpTab.tsx +154 -28
- package/app/components/settings/PluginsTab.tsx +1 -1
- package/app/components/settings/SettingsContent.tsx +41 -7
- package/app/components/settings/types.ts +7 -1
- package/app/components/setup/index.tsx +4 -3
- package/app/components/walkthrough/WalkthroughOverlay.tsx +1 -1
- package/app/components/walkthrough/WalkthroughTooltip.tsx +1 -1
- package/app/hooks/useAiOrganize.ts +14 -1
- package/app/lib/core/inbox.ts +131 -2
- package/app/lib/core/pdf-text.ts +28 -0
- package/app/lib/core/search-index.ts +29 -5
- package/app/lib/core/tree.ts +6 -1
- package/app/lib/fs.ts +31 -3
- package/app/lib/i18n/modules/ai-chat.ts +34 -0
- package/app/lib/i18n/modules/knowledge.ts +30 -0
- package/app/lib/i18n/modules/navigation.ts +4 -2
- package/app/lib/i18n/modules/panels.ts +22 -4
- package/app/lib/i18n/modules/settings.ts +26 -0
- package/app/lib/organize-history.ts +6 -0
- package/app/lib/renderers/index.ts +5 -1
- package/app/lib/settings.ts +28 -0
- package/bin/commands/doctor.js +12 -6
- package/bin/commands/file.js +7 -4
- package/bin/commands/logs.js +39 -4
- package/bin/commands/onboard.js +1 -1
- package/bin/commands/open.js +6 -1
- package/bin/commands/space.js +7 -4
- package/bin/commands/update.js +8 -18
- package/bin/lib/build.js +19 -8
- package/bin/lib/cli-shim.js +67 -2
- package/bin/lib/config.js +4 -5
- package/bin/lib/gateway.js +10 -23
- package/bin/lib/jsonc.js +7 -2
- package/bin/lib/mcp-agents.js +26 -5
- package/bin/lib/path-expand.js +6 -3
- package/bin/lib/port.js +5 -1
- package/bin/lib/stop.js +72 -51
- package/bin/lib/sync.js +1 -1
- package/package.json +1 -1
- package/scripts/setup.js +7 -5
- package/_standalone/.next/server/chunks/3436.js +0 -52
- package/_standalone/.next/server/chunks/5648.js +0 -2
- package/_standalone/.next/server/chunks/8408.js +0 -219
- package/_standalone/.next/static/W-wLgvhPtPJ5Psq9V4i3M/_buildManifest.js +0 -1
- package/_standalone/.next/static/chunks/1053-17786066ecd6f216.js +0 -29
- package/_standalone/.next/static/chunks/1814.72f7fe7c61e2b647.js +0 -1
- package/_standalone/.next/static/chunks/362.4c226d7887d5f696.js +0 -1
- package/_standalone/.next/static/chunks/6357-c645842834c0d4cd.js +0 -1
- package/_standalone/.next/static/chunks/6981-3d7dcac2d12a5670.js +0 -1
- package/_standalone/.next/static/chunks/7035-032641fb6f4e07b2.js +0 -1
- package/_standalone/.next/static/chunks/7144-5febf62f1a79fe64.js +0 -1
- package/_standalone/.next/static/chunks/9602-423291fdb36396d1.js +0 -1
- package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-074d6aafc2606561.js +0 -1
- package/_standalone/.next/static/chunks/app/agents/page-710d8c80fa86e93e.js +0 -5
- package/_standalone/.next/static/chunks/app/api/a2a/discover/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/a2a/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/config/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/detect/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/install/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/registry/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/session/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/agent-activity/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/ask/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/ask-sessions/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/auth/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/backlinks/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/bootstrap/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/changes/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/export/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/extract-pdf/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/file/import/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/file/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/files/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/git/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/graph/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/health/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/inbox/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/init/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/agents/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/install/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/restart/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/status/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/uninstall/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/monitoring/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/recent-files/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/restart/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/search/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/settings/list-models/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/settings/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/settings/test-key/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/check-path/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/check-port/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/ls/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/skills/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/sync/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/tree-version/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/uninstall/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/update/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/update-check/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/update-status/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/workflows/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/changes/page-350992cf5091bc5b.js +0 -1
- package/_standalone/.next/static/chunks/app/echo/page-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/global-error-e1ad0e18236ba26c.js +0 -1
- package/_standalone/.next/static/chunks/app/help/page-2325d25b6846ca07.js +0 -1
- package/_standalone/.next/static/chunks/app/layout-e5d2fb384207d821.js +0 -186
- package/_standalone/.next/static/chunks/app/loading-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/page-54edd045d3448df5.js +0 -7
- package/_standalone/.next/static/chunks/app/trash/page-6372bb3f5463affa.js +0 -1
- package/_standalone/.next/static/chunks/app/view/[...path]/loading-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/view/[...path]/not-found-61474670d6bb6116.js +0 -1
- package/_standalone/.next/static/chunks/app/view/[...path]/page-f3d1d87190dcfe28.js +0 -12
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/css/bbf51803eade6c50.css +0 -31
- package/_standalone/.next/static/css/ef1151f74f00d91a.css +0 -1
- /package/_standalone/.next/static/{W-wLgvhPtPJ5Psq9V4i3M → 2hrwFOLEOZhHQHfrIt-Dw}/_ssgManifest.js +0 -0
|
@@ -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 && (
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
3
|
import { useState, useCallback } from 'react';
|
|
4
|
-
import { Check, ChevronDown, ChevronUp, Clock, Code2,
|
|
4
|
+
import { Check, ChevronDown, ChevronUp, Clock, Code2, Globe, Loader2, MessageSquare, Network, RefreshCw, RotateCcw, Save, Settings2, Trash2, Wifi, WifiOff, Wrench, Zap } from 'lucide-react';
|
|
5
5
|
import { useLocale } from '@/lib/stores/locale-store';
|
|
6
6
|
import { useAcpConfig } from '@/hooks/useAcpConfig';
|
|
7
7
|
import type { RemoteAgent, DelegationRecord } from '@/lib/a2a/types';
|
|
@@ -60,7 +60,7 @@ export default function AgentsPanelA2aTab({
|
|
|
60
60
|
<>
|
|
61
61
|
{/* Remote A2A agent list */}
|
|
62
62
|
{agents.length === 0 ? (
|
|
63
|
-
<div className="rounded-xl border border-
|
|
63
|
+
<div className="rounded-xl border border-border/40 bg-card/30 p-8 text-center">
|
|
64
64
|
<div className="w-12 h-12 rounded-2xl bg-muted/40 flex items-center justify-center mx-auto mb-3">
|
|
65
65
|
<Globe size={20} className="text-muted-foreground/50" aria-hidden="true" />
|
|
66
66
|
</div>
|
|
@@ -109,7 +109,7 @@ function NetworkEmptyState({
|
|
|
109
109
|
const p = t.panels.agents;
|
|
110
110
|
|
|
111
111
|
return (
|
|
112
|
-
<div className="rounded-xl border border-
|
|
112
|
+
<div className="rounded-xl border border-border/40 bg-card/30 p-12 text-center">
|
|
113
113
|
<div className="w-14 h-14 rounded-2xl bg-muted/40 flex items-center justify-center mx-auto mb-4">
|
|
114
114
|
<Network size={22} className="text-muted-foreground/50" aria-hidden="true" />
|
|
115
115
|
</div>
|
|
@@ -161,6 +161,7 @@ function AcpRegistrySection() {
|
|
|
161
161
|
const acp = useAcpRegistry();
|
|
162
162
|
const detection = useAcpDetection();
|
|
163
163
|
const acpConfig = useAcpConfig();
|
|
164
|
+
const [showAvailable, setShowAvailable] = useState(false);
|
|
164
165
|
|
|
165
166
|
if (acp.loading) {
|
|
166
167
|
return (
|
|
@@ -198,7 +199,6 @@ function AcpRegistrySection() {
|
|
|
198
199
|
|
|
199
200
|
if (acp.agents.length === 0) return null;
|
|
200
201
|
|
|
201
|
-
// Separate installed and not-installed agents
|
|
202
202
|
const installedAgents: { agent: AcpRegistryEntry; info: { id: string; name: string; binaryPath: string } }[] = [];
|
|
203
203
|
const notInstalledAgents: { agent: AcpRegistryEntry; installCmd: string | null; packageName: string | null }[] = [];
|
|
204
204
|
|
|
@@ -218,6 +218,7 @@ function AcpRegistrySection() {
|
|
|
218
218
|
|
|
219
219
|
return (
|
|
220
220
|
<div className="space-y-3">
|
|
221
|
+
{/* ── Installed Agents ── */}
|
|
221
222
|
<div className="flex items-center justify-between">
|
|
222
223
|
<h3 className="text-xs font-medium text-muted-foreground uppercase tracking-wide">
|
|
223
224
|
{p.acpSectionTitle}
|
|
@@ -232,43 +233,61 @@ function AcpRegistrySection() {
|
|
|
232
233
|
<RefreshCw size={10} className={detection.loading ? 'animate-spin' : ''} />
|
|
233
234
|
{p.acpScan}
|
|
234
235
|
</button>
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
236
|
+
{installedAgents.length > 0 && (
|
|
237
|
+
<span className="text-2xs text-muted-foreground/60">
|
|
238
|
+
{p.acpSectionDesc(installedAgents.length)}
|
|
239
|
+
</span>
|
|
240
|
+
)}
|
|
238
241
|
</div>
|
|
239
242
|
</div>
|
|
240
243
|
|
|
241
|
-
{
|
|
242
|
-
{installedAgents.length > 0 && (
|
|
244
|
+
{installedAgents.length > 0 ? (
|
|
243
245
|
<div className="space-y-2">
|
|
244
246
|
{installedAgents.map(({ agent, info }) => (
|
|
245
247
|
<AcpAgentCard
|
|
246
248
|
key={agent.id}
|
|
247
249
|
agent={agent}
|
|
248
250
|
installed={info}
|
|
249
|
-
installCmd={null}
|
|
250
|
-
packageName={null}
|
|
251
251
|
detectionDone={!detection.loading}
|
|
252
|
-
onInstalled={detection.refresh}
|
|
253
252
|
acpConfig={acpConfig}
|
|
254
253
|
/>
|
|
255
254
|
))}
|
|
256
255
|
</div>
|
|
257
|
-
)
|
|
256
|
+
) : !detection.loading ? (
|
|
257
|
+
<div className="rounded-lg border border-border/40 bg-card/30 p-5 text-center">
|
|
258
|
+
<p className="text-xs text-muted-foreground/70 leading-relaxed max-w-xs mx-auto">
|
|
259
|
+
{p.acpNoInstalled}
|
|
260
|
+
</p>
|
|
261
|
+
</div>
|
|
262
|
+
) : null}
|
|
258
263
|
|
|
259
|
-
{/* Not
|
|
260
|
-
{notInstalledAgents.length > 0 && (
|
|
261
|
-
<div className="space-y-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
264
|
+
{/* ── Available (Not Installed) — collapsed by default, shown only after detection completes ── */}
|
|
265
|
+
{!detection.loading && notInstalledAgents.length > 0 && (
|
|
266
|
+
<div className="space-y-2">
|
|
267
|
+
<button
|
|
268
|
+
type="button"
|
|
269
|
+
onClick={() => setShowAvailable(v => !v)}
|
|
270
|
+
className="flex items-center gap-1.5 text-xs text-muted-foreground/70 hover:text-muted-foreground transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-sm"
|
|
271
|
+
>
|
|
272
|
+
{showAvailable ? <ChevronUp size={12} /> : <ChevronDown size={12} />}
|
|
273
|
+
<span className="font-medium">{p.acpAvailableTitle}</span>
|
|
274
|
+
<span className="text-2xs">({p.acpAvailableDesc(notInstalledAgents.length)})</span>
|
|
275
|
+
</button>
|
|
276
|
+
|
|
277
|
+
{showAvailable && (
|
|
278
|
+
<div className="space-y-1 animate-in fade-in slide-in-from-top-1 duration-150">
|
|
279
|
+
{notInstalledAgents.map(({ agent, installCmd, packageName }) => (
|
|
280
|
+
<AcpAgentCompactRow
|
|
281
|
+
key={agent.id}
|
|
282
|
+
agent={agent}
|
|
283
|
+
installCmd={installCmd}
|
|
284
|
+
packageName={packageName}
|
|
285
|
+
detectionDone={!detection.loading}
|
|
286
|
+
onInstalled={detection.refresh}
|
|
287
|
+
/>
|
|
288
|
+
))}
|
|
289
|
+
</div>
|
|
290
|
+
)}
|
|
272
291
|
</div>
|
|
273
292
|
)}
|
|
274
293
|
</div>
|
|
@@ -287,10 +306,7 @@ const TRANSPORT_STYLES: Record<string, string> = {
|
|
|
287
306
|
function AcpAgentCard({ agent, installed, detectionDone, acpConfig }: {
|
|
288
307
|
agent: AcpRegistryEntry;
|
|
289
308
|
installed: { id: string; name: string; binaryPath: string; resolvedCommand?: { cmd: string; args: string[]; source: string } } | null;
|
|
290
|
-
installCmd: string | null;
|
|
291
|
-
packageName: string | null;
|
|
292
309
|
detectionDone: boolean;
|
|
293
|
-
onInstalled: () => void;
|
|
294
310
|
acpConfig: ReturnType<typeof useAcpConfig>;
|
|
295
311
|
}) {
|
|
296
312
|
const { t } = useLocale();
|
|
@@ -477,7 +493,7 @@ function AcpAgentCard({ agent, installed, detectionDone, acpConfig }: {
|
|
|
477
493
|
|
|
478
494
|
/* ────────── ACP Agent Compact Row (Not Installed — subtle) ────────── */
|
|
479
495
|
|
|
480
|
-
function AcpAgentCompactRow({ agent, installCmd
|
|
496
|
+
function AcpAgentCompactRow({ agent, installCmd }: {
|
|
481
497
|
agent: AcpRegistryEntry;
|
|
482
498
|
installCmd: string | null;
|
|
483
499
|
packageName: string | null;
|
|
@@ -486,29 +502,17 @@ function AcpAgentCompactRow({ agent, installCmd, packageName, detectionDone, onI
|
|
|
486
502
|
}) {
|
|
487
503
|
const { t } = useLocale();
|
|
488
504
|
const p = t.panels.agents;
|
|
489
|
-
const [
|
|
490
|
-
|
|
491
|
-
const
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
if (!res.ok) {
|
|
501
|
-
setInstallState('error');
|
|
502
|
-
return;
|
|
503
|
-
}
|
|
504
|
-
// Wait a bit for npm install to complete, then re-detect
|
|
505
|
-
await new Promise((r) => setTimeout(r, 8000));
|
|
506
|
-
onInstalled();
|
|
507
|
-
setInstallState('done');
|
|
508
|
-
} catch {
|
|
509
|
-
setInstallState('error');
|
|
510
|
-
}
|
|
511
|
-
};
|
|
505
|
+
const [copied, setCopied] = useState(false);
|
|
506
|
+
|
|
507
|
+
const effectiveCmd = installCmd || (agent.packageName ? `npm install -g ${agent.packageName}` : null);
|
|
508
|
+
|
|
509
|
+
const handleCopy = useCallback(() => {
|
|
510
|
+
if (!effectiveCmd) return;
|
|
511
|
+
navigator.clipboard.writeText(effectiveCmd).then(() => {
|
|
512
|
+
setCopied(true);
|
|
513
|
+
setTimeout(() => setCopied(false), 2000);
|
|
514
|
+
}).catch(() => {});
|
|
515
|
+
}, [effectiveCmd]);
|
|
512
516
|
|
|
513
517
|
return (
|
|
514
518
|
<div className="group rounded-lg border border-border/60 bg-card/60 px-3 py-2 hover:border-border transition-all duration-150">
|
|
@@ -518,24 +522,21 @@ function AcpAgentCompactRow({ agent, installCmd, packageName, detectionDone, onI
|
|
|
518
522
|
</div>
|
|
519
523
|
<div className="flex-1 min-w-0">
|
|
520
524
|
<p className="text-xs text-muted-foreground truncate">{agent.name}</p>
|
|
525
|
+
{agent.description && (
|
|
526
|
+
<p className="text-2xs text-muted-foreground/50 truncate">{agent.description}</p>
|
|
527
|
+
)}
|
|
521
528
|
</div>
|
|
522
|
-
{
|
|
523
|
-
<span className="text-2xs px-1.5 py-0.5 rounded font-medium shrink-0 bg-muted text-muted-foreground/60">
|
|
524
|
-
{p.acpNotInstalled}
|
|
525
|
-
</span>
|
|
526
|
-
)}
|
|
527
|
-
{detectionDone && packageName && (
|
|
529
|
+
{effectiveCmd && (
|
|
528
530
|
<button
|
|
529
531
|
type="button"
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
title={installCmd ? p.acpInstallHint(installCmd) : undefined}
|
|
532
|
+
onClick={handleCopy}
|
|
533
|
+
className="inline-flex items-center gap-1 px-2 py-0.5 text-2xs font-medium rounded-md border border-border text-muted-foreground hover:text-foreground hover:bg-muted transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring shrink-0"
|
|
534
|
+
title={effectiveCmd}
|
|
534
535
|
>
|
|
535
|
-
{
|
|
536
|
-
<><
|
|
536
|
+
{copied ? (
|
|
537
|
+
<><Check size={10} /> {p.acpCopied}</>
|
|
537
538
|
) : (
|
|
538
|
-
<><
|
|
539
|
+
<><Code2 size={10} /> {p.acpCopyCmd}</>
|
|
539
540
|
)}
|
|
540
541
|
</button>
|
|
541
542
|
)}
|
|
@@ -119,7 +119,7 @@ export function BulkMessage({ message }: { message: string | null }) {
|
|
|
119
119
|
|
|
120
120
|
export function EmptyState({ message, icon, className }: { message: string; icon?: React.ReactNode; className?: string }) {
|
|
121
121
|
return (
|
|
122
|
-
<div className={`rounded-xl border border-
|
|
122
|
+
<div className={`rounded-xl border border-border/40 bg-card/30 p-10 text-center ${className ?? ''}`}>
|
|
123
123
|
{icon && (
|
|
124
124
|
<div className="w-10 h-10 rounded-full bg-muted/50 flex items-center justify-center mx-auto mb-3 text-muted-foreground/40">
|
|
125
125
|
{icon}
|
|
@@ -61,15 +61,15 @@ export default function RecentActivityFeed() {
|
|
|
61
61
|
|
|
62
62
|
return (
|
|
63
63
|
<section aria-label="Recent Activity">
|
|
64
|
-
<div className="flex items-center gap-2 mb-
|
|
65
|
-
<
|
|
66
|
-
<h2 className="text-
|
|
64
|
+
<div className="flex items-center gap-2.5 mb-5">
|
|
65
|
+
<div className="flex items-center justify-center w-6 h-6 rounded-md bg-[var(--amber-subtle)] text-[var(--amber)]"><Activity size={13} /></div>
|
|
66
|
+
<h2 className="text-[13px] font-semibold text-foreground tracking-wide">
|
|
67
67
|
{copy?.recentActivity ?? 'Recent Activity'}
|
|
68
68
|
</h2>
|
|
69
69
|
<div className="ml-auto">
|
|
70
70
|
<Link
|
|
71
71
|
href="/agents?tab=activity"
|
|
72
|
-
className="flex items-center gap-1.5 text-xs font-medium text-[var(--amber)] hover:opacity-80 transition-colors
|
|
72
|
+
className="flex items-center gap-1.5 text-xs font-medium text-[var(--amber)] hover:opacity-80 transition-colors"
|
|
73
73
|
>
|
|
74
74
|
<ArrowRight size={12} />
|
|
75
75
|
<span>{copy?.viewAll ?? 'View all'}</span>
|
|
@@ -105,7 +105,7 @@ export default function RecentActivityFeed() {
|
|
|
105
105
|
|
|
106
106
|
{/* agent name badge */}
|
|
107
107
|
{op.agentName && (
|
|
108
|
-
<span className="text-[0.6rem] font-medium text-muted-foreground/70 bg-muted/60 px-1.5 py-0.5 rounded-full shrink-0
|
|
108
|
+
<span className="text-[0.6rem] font-medium text-muted-foreground/70 bg-muted/60 px-1.5 py-0.5 rounded-full shrink-0" title={op.agentName}>
|
|
109
109
|
{op.agentName.length > 20 ? op.agentName.slice(0, 20) + '...' : op.agentName}
|
|
110
110
|
</span>
|
|
111
111
|
)}
|
|
@@ -115,7 +115,7 @@ export default function RecentActivityFeed() {
|
|
|
115
115
|
: <AlertCircle size={11} className="shrink-0 text-[var(--error)]/60" />
|
|
116
116
|
}
|
|
117
117
|
|
|
118
|
-
<span className="text-2xs text-muted-foreground/40 tabular-nums shrink-0
|
|
118
|
+
<span className="text-2xs text-muted-foreground/40 tabular-nums shrink-0" title={op.ts}>
|
|
119
119
|
{relativeTs(op.ts)}
|
|
120
120
|
</span>
|
|
121
121
|
</div>
|
|
@@ -418,7 +418,7 @@ export default function SkillDetailPopover({
|
|
|
418
418
|
))}
|
|
419
419
|
</div>
|
|
420
420
|
) : (
|
|
421
|
-
<div className="rounded-lg border border-
|
|
421
|
+
<div className="rounded-lg border border-border/40 bg-card/30 p-3 text-center">
|
|
422
422
|
<p className="text-xs text-muted-foreground">{copy.noAgents}</p>
|
|
423
423
|
</div>
|
|
424
424
|
)}
|
|
@@ -64,13 +64,15 @@ export interface RiskCopy {
|
|
|
64
64
|
|
|
65
65
|
export function buildRiskQueue(args: {
|
|
66
66
|
mcpRunning: boolean;
|
|
67
|
+
mcpEnabled: boolean;
|
|
67
68
|
detectedCount: number;
|
|
68
69
|
notFoundCount: number;
|
|
69
70
|
allSkillsDisabled: boolean;
|
|
70
71
|
copy: RiskCopy;
|
|
71
72
|
}): RiskItem[] {
|
|
72
73
|
const items: RiskItem[] = [];
|
|
73
|
-
|
|
74
|
+
// Only show MCP-related risks if MCP is explicitly enabled
|
|
75
|
+
if (args.mcpEnabled && !args.mcpRunning) items.push({ id: 'mcp-stopped', severity: 'error', title: args.copy.riskMcpStopped });
|
|
74
76
|
if (args.detectedCount > 0) items.push({ id: 'detected-unconfigured', severity: 'warn', title: args.copy.riskDetected(args.detectedCount) });
|
|
75
77
|
if (args.allSkillsDisabled) items.push({ id: 'skills-disabled', severity: 'warn', title: args.copy.riskSkillsDisabled });
|
|
76
78
|
return items;
|
|
@@ -188,6 +190,7 @@ const defaultRiskCopy: RiskCopy = {
|
|
|
188
190
|
|
|
189
191
|
export function buildMcpRiskQueue(args: {
|
|
190
192
|
mcpRunning: boolean;
|
|
193
|
+
mcpEnabled: boolean;
|
|
191
194
|
detectedCount: number;
|
|
192
195
|
notFoundCount: number;
|
|
193
196
|
}): RiskItem[] {
|
|
@@ -29,7 +29,7 @@ export default memo(function AskHeader({
|
|
|
29
29
|
)}
|
|
30
30
|
<div className="flex items-center gap-2 text-sm font-medium text-foreground">
|
|
31
31
|
<Sparkles size={isPanel ? 14 : 15} className="text-[var(--amber)]" />
|
|
32
|
-
<span className={isPanel ? '
|
|
32
|
+
<span className={isPanel ? 'text-xs uppercase tracking-wider text-muted-foreground' : ''}>
|
|
33
33
|
{isPanel ? 'MindOS Agent' : t.ask.title}
|
|
34
34
|
</span>
|
|
35
35
|
</div>
|
|
@@ -128,13 +128,17 @@ export default function ChangesContentPage({ initialPath = '' }: { initialPath?:
|
|
|
128
128
|
return t.changes.filters.system;
|
|
129
129
|
}, [t]);
|
|
130
130
|
|
|
131
|
+
const opLabel = useCallback((op: string) => {
|
|
132
|
+
return (t.changes.operations as Record<string, string>)?.[op] ?? op;
|
|
133
|
+
}, [t]);
|
|
134
|
+
|
|
131
135
|
return (
|
|
132
136
|
<div className="min-h-screen">
|
|
133
137
|
<div className="px-4 md:px-6 pt-6 md:pt-8">
|
|
134
138
|
<div className="content-width xl:mr-[220px] rounded-xl border border-border bg-card px-4 py-3 md:px-5 md:py-4">
|
|
135
139
|
<div className="flex flex-wrap items-start justify-between gap-3">
|
|
136
140
|
<div className="min-w-0">
|
|
137
|
-
<div className="flex items-center gap-2 text-sm font-medium text-foreground
|
|
141
|
+
<div className="flex items-center gap-2 text-sm font-medium text-foreground">
|
|
138
142
|
<History size={15} />
|
|
139
143
|
{t.changes.title}
|
|
140
144
|
</div>
|
|
@@ -173,7 +177,7 @@ export default function ChangesContentPage({ initialPath = '' }: { initialPath?:
|
|
|
173
177
|
<div className="rounded-lg border border-border bg-card p-3">
|
|
174
178
|
<div className="grid grid-cols-1 md:grid-cols-2 xl:grid-cols-4 gap-2.5">
|
|
175
179
|
<label className="block">
|
|
176
|
-
<span className="text-xs text-muted-foreground
|
|
180
|
+
<span className="text-xs text-muted-foreground">{t.changes.filters.filePath}</span>
|
|
177
181
|
<input
|
|
178
182
|
value={pathFilter}
|
|
179
183
|
onChange={(e) => setPathFilter(e.target.value)}
|
|
@@ -182,7 +186,7 @@ export default function ChangesContentPage({ initialPath = '' }: { initialPath?:
|
|
|
182
186
|
/>
|
|
183
187
|
</label>
|
|
184
188
|
<div className="block">
|
|
185
|
-
<span className="text-xs text-muted-foreground
|
|
189
|
+
<span className="text-xs text-muted-foreground">{t.changes.filters.source}</span>
|
|
186
190
|
<CustomSelect
|
|
187
191
|
value={sourceFilter}
|
|
188
192
|
onChange={(v) => setSourceFilter(v as 'all' | 'agent' | 'user' | 'system')}
|
|
@@ -191,7 +195,7 @@ export default function ChangesContentPage({ initialPath = '' }: { initialPath?:
|
|
|
191
195
|
/>
|
|
192
196
|
</div>
|
|
193
197
|
<div className="block">
|
|
194
|
-
<span className="text-xs text-muted-foreground
|
|
198
|
+
<span className="text-xs text-muted-foreground">{t.changes.filters.operation}</span>
|
|
195
199
|
<CustomSelect
|
|
196
200
|
value={opFilter}
|
|
197
201
|
onChange={setOpFilter}
|
|
@@ -200,7 +204,7 @@ export default function ChangesContentPage({ initialPath = '' }: { initialPath?:
|
|
|
200
204
|
/>
|
|
201
205
|
</div>
|
|
202
206
|
<label className="block">
|
|
203
|
-
<span className="text-xs text-muted-foreground
|
|
207
|
+
<span className="text-xs text-muted-foreground">{t.changes.filters.keyword}</span>
|
|
204
208
|
<input
|
|
205
209
|
value={queryFilter}
|
|
206
210
|
onChange={(e) => setQueryFilter(e.target.value)}
|
|
@@ -256,7 +260,7 @@ export default function ChangesContentPage({ initialPath = '' }: { initialPath?:
|
|
|
256
260
|
>
|
|
257
261
|
{event.path}
|
|
258
262
|
</span>
|
|
259
|
-
<span className={opColorClass(event.op)}>{event.op}</span>
|
|
263
|
+
<span className={opColorClass(event.op)}>{opLabel(event.op)}</span>
|
|
260
264
|
<span>·</span>
|
|
261
265
|
<span>{sourceLabel(event.source)}</span>
|
|
262
266
|
<span>·</span>
|
|
@@ -30,7 +30,7 @@ export function EchoHero({
|
|
|
30
30
|
<p className="mb-4 font-sans text-2xs font-semibold uppercase tracking-[0.2em] text-[var(--amber-text)]">
|
|
31
31
|
{heroKicker}
|
|
32
32
|
</p>
|
|
33
|
-
<h1 id={titleId} className="
|
|
33
|
+
<h1 id={titleId} className="text-2xl font-semibold tracking-tight text-foreground md:text-3xl">
|
|
34
34
|
{pageTitle}
|
|
35
35
|
</h1>
|
|
36
36
|
<p className="mt-3 max-w-prose font-sans text-base leading-relaxed text-muted-foreground">{lead}</p>
|
|
@@ -69,7 +69,7 @@ export function EchoContinuedGroups({
|
|
|
69
69
|
footer?: ReactNode;
|
|
70
70
|
}) {
|
|
71
71
|
const cell = (label: string, icon: ReactNode) => (
|
|
72
|
-
<div className="flex min-h-[5.75rem] flex-col justify-center rounded-xl border border-
|
|
72
|
+
<div className="flex min-h-[5.75rem] flex-col justify-center rounded-xl border border-border/40 bg-card/30 px-4 py-4 transition-colors duration-150 hover:border-[var(--amber)]/25 hover:bg-[var(--amber-dim)]/15">
|
|
73
73
|
<div className="flex items-center gap-2">
|
|
74
74
|
<span className="shrink-0 text-muted-foreground" aria-hidden>{icon}</span>
|
|
75
75
|
<h3 className="font-sans text-sm font-medium text-foreground">{label}</h3>
|
|
@@ -28,7 +28,7 @@ export default function ExploreContent() {
|
|
|
28
28
|
<div className="mb-8">
|
|
29
29
|
<div className="flex items-center gap-2 mb-3">
|
|
30
30
|
<div className="w-1 h-5 rounded-full bg-[var(--amber)]" />
|
|
31
|
-
<h1 className="text-2xl font-semibold tracking-tight
|
|
31
|
+
<h1 className="text-2xl font-semibold tracking-tight text-foreground">
|
|
32
32
|
{e.title}
|
|
33
33
|
</h1>
|
|
34
34
|
</div>
|
|
@@ -37,7 +37,7 @@ export default function UseCaseCard({ icon, image, title, description, prompt, t
|
|
|
37
37
|
{icon}
|
|
38
38
|
</span>
|
|
39
39
|
<div className="flex-1 min-w-0">
|
|
40
|
-
<h3 className="text-sm font-semibold
|
|
40
|
+
<h3 className="text-sm font-semibold truncate text-foreground" title={title}>
|
|
41
41
|
{title}
|
|
42
42
|
</h3>
|
|
43
43
|
<p className="text-xs leading-relaxed mt-1 line-clamp-2 text-muted-foreground" title={description}>
|
|
@@ -24,8 +24,8 @@ function Section({ id, icon, title, defaultOpen = false, children }: {
|
|
|
24
24
|
className="w-full flex items-center gap-3 px-5 py-4 text-left hover:bg-muted/50 transition-colors focus-visible:ring-2 focus-visible:ring-ring"
|
|
25
25
|
aria-expanded={open}
|
|
26
26
|
>
|
|
27
|
-
<
|
|
28
|
-
<span className="text-
|
|
27
|
+
<div className="flex items-center justify-center w-6 h-6 rounded-md bg-[var(--amber-subtle)] text-[var(--amber)] shrink-0">{icon}</div>
|
|
28
|
+
<span className="text-[13px] font-semibold text-foreground flex-1 tracking-wide">{title}</span>
|
|
29
29
|
<ChevronDown size={16} className={`text-muted-foreground transition-transform duration-200 ${open ? 'rotate-180' : ''}`} />
|
|
30
30
|
</button>
|
|
31
31
|
{open && (
|
|
@@ -186,7 +186,7 @@ export default function HelpContent() {
|
|
|
186
186
|
<div className="mb-8">
|
|
187
187
|
<div className="flex items-center gap-2 mb-1">
|
|
188
188
|
<div className="w-1 h-6 rounded-full bg-[var(--amber)]" />
|
|
189
|
-
<h1 className="text-2xl font-
|
|
189
|
+
<h1 className="text-2xl font-semibold tracking-tight text-foreground">{h.title}</h1>
|
|
190
190
|
</div>
|
|
191
191
|
<p className="text-muted-foreground text-sm ml-3 mt-1">{h.subtitle}</p>
|
|
192
192
|
</div>
|