@geminilight/mindos 0.6.58 → 0.6.60
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/_standalone/.mindos-build-version +1 -1
- package/_standalone/.next/BUILD_ID +1 -1
- package/_standalone/.next/app-path-routes-manifest.json +23 -22
- 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 +1 -1
- package/_standalone/.next/routes-manifest.json +6 -0
- package/_standalone/.next/server/app/.well-known/agent-card.json/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/_global-error.html +2 -2
- package/_standalone/.next/server/app/_global-error.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/_standalone/.next/server/app/_not-found/page.js +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 +2 -2
- 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/agents/copy-skill/route.js +1 -0
- package/_standalone/.next/server/app/api/agents/copy-skill/route.js.nft.json +1 -0
- package/_standalone/.next/server/app/api/agents/copy-skill/route_client-reference-manifest.js +1 -0
- package/_standalone/.next/server/app/api/agents/custom/detect/route.js +1 -1
- package/_standalone/.next/server/app/api/agents/custom/detect/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/agents/custom/route.js +1 -1
- package/_standalone/.next/server/app/api/agents/custom/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/ask/route.js +18 -7
- 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_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/bootstrap/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/changes/route_client-reference-manifest.js +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.js +2 -2
- package/_standalone/.next/server/app/api/extract-pdf/route_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/file/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/git/route_client-reference-manifest.js +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_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/agents/route.js +1 -1
- package/_standalone/.next/server/app/api/mcp/agents/route_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_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_client-reference-manifest.js +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_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_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_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_client-reference-manifest.js +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_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 +1 -1
- package/_standalone/.next/server/app/inbox/history/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/inbox/history/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/login/page.js +2 -2
- package/_standalone/.next/server/app/login/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/page.js +2 -8
- 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 -2
- package/_standalone/.next/server/app/wiki/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/wiki/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app-paths-manifest.json +23 -22
- package/_standalone/.next/server/chunks/1550.js +1 -1
- package/_standalone/.next/server/chunks/3484.js +1 -1
- package/_standalone/.next/server/chunks/530.js +70 -71
- package/_standalone/.next/server/chunks/{6793.js → 9753.js} +2 -2
- package/_standalone/.next/server/chunks/9787.js +2 -0
- 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/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/K3wZNf5bj_AFYwtqcRXIf/_buildManifest.js +1 -0
- package/_standalone/.next/static/chunks/1369-7d0ac5d1564eed1e.js +1 -0
- package/_standalone/.next/static/chunks/{1814.a7c127b2c73d1f70.js → 1814.a79b84d37df75c43.js} +1 -1
- package/_standalone/.next/static/chunks/3427-2e61a5df1f5e55fb.js +1 -0
- package/_standalone/.next/static/chunks/{1053-fe009233cff06e72.js → 5581-974dfb26d1d1b38f.js} +3 -3
- package/_standalone/.next/static/chunks/6297-085daa21037d5f81.js +1 -0
- package/_standalone/.next/static/chunks/7249-b0a9c77b9a84b11c.js +11 -0
- package/_standalone/.next/static/chunks/7637-904b0a381dc3ec02.js +1 -0
- package/_standalone/.next/static/chunks/8520-76d1b05072178b43.js +22 -0
- package/_standalone/.next/static/chunks/9186-ead47513192f658b.js +1 -0
- package/_standalone/.next/static/chunks/9905-a19d379cb225246e.js +1 -0
- package/_standalone/.next/static/chunks/app/.well-known/agent-card.json/{route-2f4705aa66819b86.js → route-2ceea6eabf25b1f2.js} +1 -1
- package/_standalone/.next/static/chunks/app/_global-error/{page-2f4705aa66819b86.js → page-2ceea6eabf25b1f2.js} +1 -1
- package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-0ea3571c8fbae823.js +1 -0
- package/_standalone/.next/static/chunks/app/agents/page-66858acbcd1d4bf8.js +1 -0
- package/_standalone/.next/static/chunks/app/api/a2a/agents/{route-2f4705aa66819b86.js → route-2ceea6eabf25b1f2.js} +1 -1
- package/_standalone/.next/static/chunks/app/api/a2a/delegations/{route-2f4705aa66819b86.js → route-2ceea6eabf25b1f2.js} +1 -1
- package/_standalone/.next/static/chunks/app/api/a2a/discover/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/a2a/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/config/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/detect/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/install/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/registry/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/session/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/agent-activity/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/agents/copy-skill/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/agents/custom/detect/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/agents/custom/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/ask/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/ask-sessions/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/auth/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/backlinks/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/bootstrap/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/changes/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/export/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/extract-pdf/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/file/import/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/file/raw/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/file/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/files/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/git/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/graph/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/health/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/inbox/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/init/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/agents/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/install/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/restart/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/status/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/uninstall/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/monitoring/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/recent-files/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/restart/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/search/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/settings/list-models/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/settings/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/settings/test-key/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/check-path/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/check-port/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/ls/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/skills/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/sync/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/tree-version/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/uninstall/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/update/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/update-check/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/update-status/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/api/workflows/route-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/changes/page-dd0b00a7b81f74e2.js +1 -0
- package/_standalone/.next/static/chunks/app/echo/[segment]/page-bf5c290fa3ccff09.js +11 -0
- package/_standalone/.next/static/chunks/app/echo/page-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/explore/{page-d3d99308146c2240.js → page-d9f58000bc445360.js} +2 -2
- package/_standalone/.next/static/chunks/app/help/{page-222df603080b5fab.js → page-f8cb806371b3175f.js} +1 -1
- package/_standalone/.next/static/chunks/app/inbox/history/{page-07819cf95cb0805f.js → page-3279585360df132c.js} +1 -1
- package/_standalone/.next/static/chunks/app/layout-6a0169582db11a08.js +164 -0
- package/_standalone/.next/static/chunks/app/loading-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/login/{page-0eeef685052869a6.js → page-18fb00d568cd1f0e.js} +1 -1
- package/_standalone/.next/static/chunks/app/page-6a1f8d21c12b829e.js +1 -0
- package/_standalone/.next/static/chunks/app/setup/{page-99fcfc460fa29733.js → page-821714e7477be46c.js} +1 -1
- package/_standalone/.next/static/chunks/app/trash/page-ed7ba3b0b50223a6.js +1 -0
- package/_standalone/.next/static/chunks/app/view/[...path]/loading-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/app/view/[...path]/{not-found-fc04c2bd4f35bc6f.js → not-found-6e0c75ad26ce8572.js} +1 -1
- package/_standalone/.next/static/chunks/app/view/[...path]/page-678139779971cfcb.js +12 -0
- package/_standalone/.next/static/chunks/app/wiki/page-194ae9af2d461481.js +1 -0
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-2ceea6eabf25b1f2.js +1 -0
- package/_standalone/.next/static/chunks/{webpack-2c19436659aa657b.js → webpack-72e8d9e9073fd1f9.js} +1 -1
- package/_standalone/.next/static/css/9c558c42831fae58.css +1 -0
- package/_standalone/.next/trace +65 -64
- package/_standalone/.next/types/routes.d.ts +2 -1
- package/_standalone/.next/types/validator.ts +9 -0
- package/_standalone/__tests__/api/mcp-install.test.ts +4 -2
- package/_standalone/app/globals.css +2 -1
- package/_standalone/components/AskFab.tsx +11 -5
- package/_standalone/components/AskModal.tsx +1 -1
- package/_standalone/components/FileTree.tsx +83 -1
- package/_standalone/components/GuideCard.tsx +101 -152
- package/_standalone/components/Panel.tsx +6 -1
- package/_standalone/components/RightAskPanel.tsx +2 -2
- package/_standalone/components/agents/AgentsOverviewSection.tsx +13 -11
- package/_standalone/components/agents/CustomAgentModal.tsx +72 -18
- package/_standalone/components/ask/AskContent.tsx +109 -54
- package/_standalone/components/ask/AskHeader.tsx +218 -18
- package/_standalone/components/ask/FileChip.tsx +93 -12
- package/_standalone/components/ask/MessageList.tsx +66 -47
- package/_standalone/components/ask/SessionHistory.tsx +86 -60
- package/_standalone/components/ask/SessionTabBar.tsx +29 -21
- package/_standalone/components/ask/ThinkingBlock.tsx +6 -5
- package/_standalone/components/ask/ToolCallBlock.tsx +10 -9
- package/_standalone/components/changes/ChangesBanner.tsx +1 -1
- package/_standalone/components/settings/SettingsContent.tsx +1 -1
- package/_standalone/components/walkthrough/WalkthroughTooltip.tsx +3 -1
- package/_standalone/components/walkthrough/steps.ts +1 -1
- package/_standalone/data/skills/mindos/SKILL.md +67 -15
- package/_standalone/data/skills/mindos-zh/SKILL.md +67 -11
- package/_standalone/hooks/useAskChat.ts +10 -8
- package/_standalone/hooks/useAskSession.ts +23 -1
- package/_standalone/hooks/useFileUpload.ts +97 -43
- package/_standalone/hooks/useImageUpload.ts +1 -1
- package/_standalone/lib/inbox-upload.ts +86 -0
- package/_standalone/lib/stores/locale-store.ts +20 -6
- package/_standalone/package-lock.json +2 -2
- package/_standalone/package.json +1 -1
- package/_standalone/scripts/extract-pdf.cjs +110 -3
- package/_standalone/tsconfig.tsbuildinfo +1 -1
- package/app/app/api/agents/copy-skill/route.ts +110 -0
- package/app/app/api/agents/custom/detect/route.ts +16 -1
- package/app/app/api/ask/route.ts +7 -1
- package/app/app/api/extract-pdf/route.ts +12 -5
- package/app/app/api/mcp/agents/route.ts +64 -2
- package/app/app/globals.css +2 -1
- package/app/app/layout.tsx +16 -4
- package/app/components/AskFab.tsx +11 -5
- package/app/components/AskModal.tsx +1 -1
- package/app/components/FileTree.tsx +83 -1
- package/app/components/GuideCard.tsx +101 -152
- package/app/components/HomeContent.tsx +123 -574
- package/app/components/Panel.tsx +6 -1
- package/app/components/RightAskPanel.tsx +2 -2
- package/app/components/WikiHomeContent.tsx +151 -3
- package/app/components/agents/AgentDetailContent.tsx +58 -1
- package/app/components/agents/AgentsOverviewSection.tsx +13 -11
- package/app/components/agents/CustomAgentModal.tsx +72 -18
- package/app/components/ask/AskContent.tsx +109 -54
- package/app/components/ask/AskHeader.tsx +218 -18
- package/app/components/ask/FileChip.tsx +93 -12
- package/app/components/ask/MessageList.tsx +66 -47
- package/app/components/ask/SessionHistory.tsx +86 -60
- package/app/components/ask/SessionTabBar.tsx +29 -21
- package/app/components/ask/ThinkingBlock.tsx +6 -5
- package/app/components/ask/ToolCallBlock.tsx +10 -9
- package/app/components/changes/ChangesBanner.tsx +1 -1
- package/app/components/changes/ChangesContentPage.tsx +368 -168
- package/app/components/settings/SettingsContent.tsx +1 -1
- package/app/components/walkthrough/WalkthroughTooltip.tsx +3 -1
- package/app/components/walkthrough/steps.ts +1 -1
- package/app/data/skills/mindos/SKILL.md +67 -15
- package/app/data/skills/mindos-zh/SKILL.md +67 -11
- package/app/hooks/useAskChat.ts +10 -8
- package/app/hooks/useAskSession.ts +23 -1
- package/app/hooks/useFileUpload.ts +97 -43
- package/app/hooks/useImageUpload.ts +1 -1
- package/app/lib/agent/prompt.ts +15 -4
- package/app/lib/custom-agents.ts +109 -1
- package/app/lib/file-ops.ts +58 -0
- package/app/lib/i18n/modules/ai-chat.ts +134 -10
- package/app/lib/i18n/modules/knowledge.ts +2 -0
- package/app/lib/i18n/modules/onboarding.ts +12 -12
- package/app/lib/inbox-upload.ts +86 -0
- package/app/lib/mcp-agents.ts +21 -1
- package/app/lib/stores/LocaleStoreInit.tsx +24 -1
- package/app/lib/stores/locale-store.ts +20 -6
- package/app/lib/types.ts +13 -0
- package/app/package.json +1 -1
- package/app/scripts/extract-pdf.cjs +110 -3
- package/package.json +1 -1
- package/skills/mindos/SKILL.md +67 -15
- package/skills/mindos/references/knowledge-health.md +120 -0
- package/skills/mindos-max/SKILL.md +52 -5
- package/skills/mindos-max-zh/SKILL.md +55 -6
- package/skills/mindos-zh/SKILL.md +67 -11
- package/_standalone/.next/server/chunks/2364.js +0 -2
- package/_standalone/.next/server/chunks/357.js +0 -1
- package/_standalone/.next/static/2ksXveDzEcnCMRIElDkLq/_buildManifest.js +0 -1
- package/_standalone/.next/static/chunks/178-105779afb62d36d9.js +0 -1
- package/_standalone/.next/static/chunks/2218-d54538000574ffef.js +0 -1
- package/_standalone/.next/static/chunks/2549-e63cf57fa927a41d.js +0 -1
- package/_standalone/.next/static/chunks/4237-ffc6e7c15d4007b6.js +0 -1
- package/_standalone/.next/static/chunks/6878-e2c5459e1c608f89.js +0 -1
- package/_standalone/.next/static/chunks/7249-fa98ca10e9a10f39.js +0 -11
- package/_standalone/.next/static/chunks/9274-296ab35f9f09e42e.js +0 -1
- package/_standalone/.next/static/chunks/9286-5b09baa5200318c2.js +0 -1
- package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-7bdeab5af8e4f5f2.js +0 -1
- package/_standalone/.next/static/chunks/app/agents/page-5d1446665ddb3801.js +0 -1
- package/_standalone/.next/static/chunks/app/api/a2a/discover/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/a2a/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/config/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/detect/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/install/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/registry/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/session/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/agent-activity/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/agents/custom/detect/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/agents/custom/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/ask/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/ask-sessions/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/auth/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/backlinks/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/bootstrap/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/changes/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/export/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/extract-pdf/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/file/import/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/file/raw/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/file/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/files/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/git/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/graph/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/health/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/inbox/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/init/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/agents/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/install/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/restart/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/status/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/uninstall/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/monitoring/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/recent-files/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/restart/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/search/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/settings/list-models/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/settings/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/settings/test-key/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/check-path/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/check-port/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/ls/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/skills/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/sync/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/tree-version/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/uninstall/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/update/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/update-check/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/update-status/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/api/workflows/route-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/changes/page-5a72144d1080a699.js +0 -1
- package/_standalone/.next/static/chunks/app/echo/[segment]/page-b0103509ce34444b.js +0 -11
- package/_standalone/.next/static/chunks/app/echo/page-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/layout-7e02ddf4144b01f1.js +0 -186
- package/_standalone/.next/static/chunks/app/loading-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/page-6a6a12bd6d6812d0.js +0 -7
- package/_standalone/.next/static/chunks/app/trash/page-54cbd5c98d9de69b.js +0 -1
- package/_standalone/.next/static/chunks/app/view/[...path]/loading-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/app/view/[...path]/page-ca7bdcbf27f88a46.js +0 -12
- package/_standalone/.next/static/chunks/app/wiki/page-d492256a93f0b8bc.js +0 -1
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-2f4705aa66819b86.js +0 -1
- package/_standalone/.next/static/css/fd84c8316ead16eb.css +0 -1
- /package/_standalone/.next/static/{2ksXveDzEcnCMRIElDkLq → K3wZNf5bj_AFYwtqcRXIf}/_ssgManifest.js +0 -0
package/app/components/Panel.tsx
CHANGED
|
@@ -316,7 +316,12 @@ export default function Panel({
|
|
|
316
316
|
</div>
|
|
317
317
|
</div>
|
|
318
318
|
</PanelHeader>
|
|
319
|
-
<div
|
|
319
|
+
<div
|
|
320
|
+
className="flex-1 overflow-y-auto min-h-0 px-2 py-2"
|
|
321
|
+
onDragEnter={(e) => { if (e.dataTransfer.types.includes('Files')) e.stopPropagation(); }}
|
|
322
|
+
onDragOver={(e) => { if (e.dataTransfer.types.includes('Files')) { e.preventDefault(); e.stopPropagation(); } }}
|
|
323
|
+
onDrop={(e) => { if (e.dataTransfer.types.includes('Files')) { e.preventDefault(); e.stopPropagation(); } }}
|
|
324
|
+
>
|
|
320
325
|
<FileTree nodes={fileTree} onNavigate={onNavigate} maxOpenDepth={maxOpenDepth} onImport={onImport} />
|
|
321
326
|
</div>
|
|
322
327
|
<SyncStatusBar collapsed={false} onOpenSyncSettings={onOpenSyncSettings} />
|
|
@@ -119,7 +119,7 @@ export default function RightAskPanel({
|
|
|
119
119
|
<aside
|
|
120
120
|
className={`
|
|
121
121
|
hidden md:flex fixed top-0 right-0 h-screen z-40
|
|
122
|
-
flex-col bg-
|
|
122
|
+
flex-col bg-background border-l border-border/40 shadow-[-4px_0_16px_rgba(0,0,0,0.04)]
|
|
123
123
|
transition-[width,transform] duration-200 ease-out
|
|
124
124
|
${open ? 'translate-x-0' : 'translate-x-full pointer-events-none'}
|
|
125
125
|
`}
|
|
@@ -161,7 +161,7 @@ export default function RightAskPanel({
|
|
|
161
161
|
className="absolute top-0 -left-[3px] w-[6px] h-full cursor-col-resize z-40 group hidden md:block"
|
|
162
162
|
onMouseDown={handleMouseDown}
|
|
163
163
|
>
|
|
164
|
-
<div className="absolute left-[2px] top-0 w-[
|
|
164
|
+
<div className="absolute left-[2px] top-0 w-[1px] h-full opacity-0 group-hover:opacity-100 bg-[var(--amber)]/50 transition-opacity duration-150" />
|
|
165
165
|
</div>
|
|
166
166
|
</aside>
|
|
167
167
|
);
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
import { useState, useEffect, useMemo } from 'react';
|
|
4
4
|
import Link from 'next/link';
|
|
5
|
-
import { Brain, ChevronDown, FolderOpen, Plus, Sparkles, Search, FilePlus, ArrowRight } from 'lucide-react';
|
|
5
|
+
import { Brain, ChevronDown, FolderOpen, Plus, Sparkles, Search, FilePlus, ArrowRight, Clock, FileText, Table, Star, X, History } from 'lucide-react';
|
|
6
|
+
import { usePinnedFiles } from '@/lib/hooks/usePinnedFiles';
|
|
6
7
|
import { useLocale } from '@/lib/stores/locale-store';
|
|
7
8
|
import { encodePath, relativeTime, extractEmoji, stripEmoji } from '@/lib/utils';
|
|
8
9
|
import { InboxSection } from '@/components/home/InboxSection';
|
|
@@ -39,7 +40,7 @@ function getSpaceLatestMtime(spaceName: string, recentFiles: RecentFile[]): numb
|
|
|
39
40
|
return maxMtime;
|
|
40
41
|
}
|
|
41
42
|
|
|
42
|
-
const SPACES_COLLAPSED =
|
|
43
|
+
const SPACES_COLLAPSED = 6;
|
|
43
44
|
|
|
44
45
|
export default function WikiHomeContent({ spaces, recent }: WikiHomeContentProps) {
|
|
45
46
|
const { t } = useLocale();
|
|
@@ -107,7 +108,7 @@ export default function WikiHomeContent({ spaces, recent }: WikiHomeContentProps
|
|
|
107
108
|
key={suggestionIdx}
|
|
108
109
|
className="text-sm text-left text-muted-foreground animate-in fade-in duration-300"
|
|
109
110
|
>
|
|
110
|
-
{suggestions[suggestionIdx]}
|
|
111
|
+
{suggestions[suggestionIdx].label}
|
|
111
112
|
</span>
|
|
112
113
|
</div>
|
|
113
114
|
<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)]">
|
|
@@ -263,6 +264,17 @@ export default function WikiHomeContent({ spaces, recent }: WikiHomeContentProps
|
|
|
263
264
|
{/* ══════════ Inbox ══════════ */}
|
|
264
265
|
<InboxSection />
|
|
265
266
|
|
|
267
|
+
{/* ══════════ Pinned Files ══════════ */}
|
|
268
|
+
<PinnedFilesSection formatTime={formatTime} />
|
|
269
|
+
|
|
270
|
+
{/* ── Visual divider ── */}
|
|
271
|
+
<div className="border-t border-border/30 mb-8" />
|
|
272
|
+
|
|
273
|
+
{/* ══════════ Recently Edited (flat list) ══════════ */}
|
|
274
|
+
{recent.length > 0 && (
|
|
275
|
+
<RecentlyEditedSection recent={recent} formatTime={formatTime} />
|
|
276
|
+
)}
|
|
277
|
+
|
|
266
278
|
{/* Footer */}
|
|
267
279
|
<div className="py-6 border-t border-border/20 flex items-center gap-1.5 text-xs font-display text-muted-foreground/30">
|
|
268
280
|
<Sparkles size={10} className="text-[var(--amber)]/40" />
|
|
@@ -271,3 +283,139 @@ export default function WikiHomeContent({ spaces, recent }: WikiHomeContentProps
|
|
|
271
283
|
</div>
|
|
272
284
|
);
|
|
273
285
|
}
|
|
286
|
+
|
|
287
|
+
/* ── Section Title ── */
|
|
288
|
+
function SectionTitle({ icon, children, count, action }: {
|
|
289
|
+
icon: React.ReactNode;
|
|
290
|
+
children: React.ReactNode;
|
|
291
|
+
count?: number;
|
|
292
|
+
action?: React.ReactNode;
|
|
293
|
+
}) {
|
|
294
|
+
return (
|
|
295
|
+
<div className="flex items-center gap-2.5 mb-4">
|
|
296
|
+
<div className="flex items-center justify-center w-6 h-6 rounded-md bg-[var(--amber-subtle)] text-[var(--amber)]">
|
|
297
|
+
{icon}
|
|
298
|
+
</div>
|
|
299
|
+
<h2 className="text-[13px] font-semibold text-foreground tracking-wide">
|
|
300
|
+
{children}
|
|
301
|
+
</h2>
|
|
302
|
+
{count != null && count > 0 && (
|
|
303
|
+
<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">{count}</span>
|
|
304
|
+
)}
|
|
305
|
+
{action ? <div className="ml-auto">{action}</div> : null}
|
|
306
|
+
</div>
|
|
307
|
+
);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
/* ── Pinned Files Section ── */
|
|
311
|
+
function PinnedFilesSection({ formatTime }: { formatTime: (t: number) => string }) {
|
|
312
|
+
const { t } = useLocale();
|
|
313
|
+
const { pinnedFiles, removePin } = usePinnedFiles();
|
|
314
|
+
|
|
315
|
+
if (pinnedFiles.length === 0) return null;
|
|
316
|
+
|
|
317
|
+
return (
|
|
318
|
+
<section className="mb-8">
|
|
319
|
+
<SectionTitle icon={<Star size={14} />} count={pinnedFiles.length}>
|
|
320
|
+
{t.pinnedFiles.title}
|
|
321
|
+
</SectionTitle>
|
|
322
|
+
<div className="flex flex-col gap-0.5">
|
|
323
|
+
{pinnedFiles.map((filePath) => {
|
|
324
|
+
const name = filePath.split('/').pop() || filePath;
|
|
325
|
+
const dir = filePath.split('/').slice(0, -1).join('/');
|
|
326
|
+
const isCSV = filePath.endsWith('.csv');
|
|
327
|
+
return (
|
|
328
|
+
<div key={filePath} className="group/pin relative">
|
|
329
|
+
<Link
|
|
330
|
+
href={`/view/${encodePath(filePath)}`}
|
|
331
|
+
className="flex items-center gap-3 px-3 py-2 rounded-lg transition-all duration-100 hover:translate-x-0.5 hover:bg-muted overflow-hidden"
|
|
332
|
+
>
|
|
333
|
+
<Star size={12} className="shrink-0 fill-[var(--amber)] text-[var(--amber)]" />
|
|
334
|
+
{isCSV
|
|
335
|
+
? <Table size={12} className="shrink-0 text-success" />
|
|
336
|
+
: <FileText size={12} className="shrink-0 text-muted-foreground" />
|
|
337
|
+
}
|
|
338
|
+
<div className="flex-1 min-w-0">
|
|
339
|
+
<span className="text-sm truncate block text-foreground" suppressHydrationWarning>{name}</span>
|
|
340
|
+
{dir && <span className="text-xs truncate block text-muted-foreground opacity-50" suppressHydrationWarning>{dir}</span>}
|
|
341
|
+
</div>
|
|
342
|
+
</Link>
|
|
343
|
+
<button
|
|
344
|
+
onClick={(e) => { e.preventDefault(); e.stopPropagation(); removePin(filePath); }}
|
|
345
|
+
className="absolute right-2 top-1/2 -translate-y-1/2 hidden group-hover/pin:flex p-1 rounded text-muted-foreground hover:text-foreground hover:bg-muted transition-colors"
|
|
346
|
+
title={t.pinnedFiles.removedToast}
|
|
347
|
+
>
|
|
348
|
+
<X size={12} />
|
|
349
|
+
</button>
|
|
350
|
+
</div>
|
|
351
|
+
);
|
|
352
|
+
})}
|
|
353
|
+
</div>
|
|
354
|
+
</section>
|
|
355
|
+
);
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
/* ── Recently Edited Section ── */
|
|
359
|
+
const RECENT_FILES_LIMIT = 8;
|
|
360
|
+
|
|
361
|
+
function RecentlyEditedSection({ recent, formatTime }: { recent: RecentFile[]; formatTime: (t: number) => string }) {
|
|
362
|
+
const { t } = useLocale();
|
|
363
|
+
const [showAll, setShowAll] = useState(false);
|
|
364
|
+
|
|
365
|
+
return (
|
|
366
|
+
<section className="mb-8">
|
|
367
|
+
<SectionTitle
|
|
368
|
+
icon={<Clock size={14} />}
|
|
369
|
+
count={recent.length}
|
|
370
|
+
action={
|
|
371
|
+
<Link
|
|
372
|
+
href="/changes"
|
|
373
|
+
className="flex items-center gap-1.5 text-xs font-medium text-[var(--amber)] transition-colors hover:opacity-80"
|
|
374
|
+
>
|
|
375
|
+
<History size={12} />
|
|
376
|
+
<span>{t.home.changeHistory}</span>
|
|
377
|
+
</Link>
|
|
378
|
+
}
|
|
379
|
+
>
|
|
380
|
+
{t.home.recentlyEdited}
|
|
381
|
+
</SectionTitle>
|
|
382
|
+
|
|
383
|
+
<div className="flex flex-col gap-0.5">
|
|
384
|
+
{(showAll ? recent : recent.slice(0, RECENT_FILES_LIMIT)).map(({ path: filePath, mtime }) => {
|
|
385
|
+
const name = filePath.split('/').pop() || filePath;
|
|
386
|
+
const dir = filePath.split('/').slice(0, -1).join('/');
|
|
387
|
+
const isCSV = filePath.endsWith('.csv');
|
|
388
|
+
return (
|
|
389
|
+
<Link
|
|
390
|
+
key={filePath}
|
|
391
|
+
href={`/view/${encodePath(filePath)}`}
|
|
392
|
+
className="flex items-center gap-3 px-3 py-2 rounded-lg transition-all duration-100 hover:translate-x-0.5 hover:bg-muted group overflow-hidden"
|
|
393
|
+
>
|
|
394
|
+
{isCSV
|
|
395
|
+
? <Table size={12} className="shrink-0 text-success" />
|
|
396
|
+
: <FileText size={12} className="shrink-0 text-muted-foreground" />
|
|
397
|
+
}
|
|
398
|
+
<div className="flex-1 min-w-0">
|
|
399
|
+
<span className="text-sm truncate block text-foreground" suppressHydrationWarning>{name}</span>
|
|
400
|
+
{dir && <span className="text-xs truncate block text-muted-foreground opacity-50" suppressHydrationWarning>{dir}</span>}
|
|
401
|
+
</div>
|
|
402
|
+
<span className="text-xs shrink-0 tabular-nums text-muted-foreground/40" suppressHydrationWarning>
|
|
403
|
+
{formatTime(mtime)}
|
|
404
|
+
</span>
|
|
405
|
+
</Link>
|
|
406
|
+
);
|
|
407
|
+
})}
|
|
408
|
+
</div>
|
|
409
|
+
{recent.length > RECENT_FILES_LIMIT && (
|
|
410
|
+
<button
|
|
411
|
+
onClick={() => setShowAll(v => !v)}
|
|
412
|
+
aria-expanded={showAll}
|
|
413
|
+
className="flex items-center gap-1.5 text-xs font-medium text-[var(--amber)] transition-colors hover:opacity-80 cursor-pointer mt-2 ml-1"
|
|
414
|
+
>
|
|
415
|
+
<ChevronDown size={12} className={`transition-transform duration-200 ${showAll ? 'rotate-180' : ''}`} />
|
|
416
|
+
<span>{showAll ? t.home.showLess : t.home.showMore}</span>
|
|
417
|
+
</button>
|
|
418
|
+
)}
|
|
419
|
+
</section>
|
|
420
|
+
);
|
|
421
|
+
}
|
|
@@ -4,7 +4,7 @@ import Link from 'next/link';
|
|
|
4
4
|
import { useCallback, useEffect, useMemo, useState } from 'react';
|
|
5
5
|
import {
|
|
6
6
|
ArrowLeft, Activity, Globe, Key, Loader2, MoreHorizontal, Pencil, Server, Search,
|
|
7
|
-
Shield, ShieldCheck, Trash2, Wifi, WifiOff, Zap,
|
|
7
|
+
Shield, ShieldCheck, Trash2, Wifi, WifiOff, Zap, Copy, AlertTriangle,
|
|
8
8
|
FileEdit, FilePlus, Clock, Terminal, CheckCircle2, AlertCircle, ChevronDown, BookOpen,
|
|
9
9
|
} from 'lucide-react';
|
|
10
10
|
import { useLocale } from '@/lib/stores/locale-store';
|
|
@@ -196,6 +196,35 @@ export default function AgentDetailContent({ agentKey }: { agentKey: string }) {
|
|
|
196
196
|
}
|
|
197
197
|
}, [a.detail.skillDeleteSuccess, a.detail.skillDeleteFailed, mcp]);
|
|
198
198
|
|
|
199
|
+
const handleCopySkillToAgent = useCallback(async (skillName: string) => {
|
|
200
|
+
if (!agent?.skillWorkspacePath) return;
|
|
201
|
+
setSkillBusy(skillName);
|
|
202
|
+
setEditError(null);
|
|
203
|
+
try {
|
|
204
|
+
const res = await apiFetch<{ success: boolean; targetPath?: string }>(
|
|
205
|
+
'/api/agents/copy-skill',
|
|
206
|
+
{
|
|
207
|
+
method: 'POST',
|
|
208
|
+
headers: { 'Content-Type': 'application/json' },
|
|
209
|
+
body: JSON.stringify({
|
|
210
|
+
skillName,
|
|
211
|
+
targetPath: agent.skillWorkspacePath,
|
|
212
|
+
}),
|
|
213
|
+
}
|
|
214
|
+
);
|
|
215
|
+
if (res.success) {
|
|
216
|
+
toast.success(`Skill "${skillName}" copied to ${agent.name}`);
|
|
217
|
+
await mcp.refresh();
|
|
218
|
+
}
|
|
219
|
+
} catch (err: unknown) {
|
|
220
|
+
const msg = err instanceof Error ? err.message : 'Failed to copy skill';
|
|
221
|
+
setEditError(msg);
|
|
222
|
+
toast.error(msg);
|
|
223
|
+
} finally {
|
|
224
|
+
setSkillBusy(null);
|
|
225
|
+
}
|
|
226
|
+
}, [agent, mcp]);
|
|
227
|
+
|
|
199
228
|
const handleCopySnippet = useCallback(async () => {
|
|
200
229
|
const ok = await copyToClipboard(snippet.snippet);
|
|
201
230
|
if (ok) toast.copy();
|
|
@@ -460,6 +489,22 @@ export default function AgentDetailContent({ agentKey }: { agentKey: string }) {
|
|
|
460
489
|
</div>
|
|
461
490
|
)}
|
|
462
491
|
|
|
492
|
+
{/* Unsupported Skill Installation Notice (for agents like QClaw, WorkBuddy) */}
|
|
493
|
+
{agent?.skillMode === 'unsupported' && (
|
|
494
|
+
<div className="rounded-lg border border-[var(--amber)]/20 bg-[var(--amber-dim)] p-3 mb-2">
|
|
495
|
+
<p className="text-sm font-medium text-foreground mb-2 flex items-center gap-1.5">
|
|
496
|
+
<AlertTriangle size={14} className="text-[var(--amber)] shrink-0" aria-hidden="true" />
|
|
497
|
+
Manual Skill Installation
|
|
498
|
+
</p>
|
|
499
|
+
<p className="text-xs text-muted-foreground mb-3">
|
|
500
|
+
This agent doesn't support <code className="bg-background px-1 py-0.5 rounded text-xs font-mono">npx skills</code>. Copy skills manually:
|
|
501
|
+
</p>
|
|
502
|
+
<div className="bg-background rounded-md px-3 py-2 font-mono text-xs overflow-x-auto border border-border/50 select-all">
|
|
503
|
+
cp -r ~/.mindos/skills/<skill-name> {agent.skillWorkspacePath || '~/.agent/skills/'}
|
|
504
|
+
</div>
|
|
505
|
+
</div>
|
|
506
|
+
)}
|
|
507
|
+
|
|
463
508
|
{/* MindOS Skills */}
|
|
464
509
|
{filteredSkills.length > 0 && (
|
|
465
510
|
<div>
|
|
@@ -510,6 +555,18 @@ export default function AgentDetailContent({ agentKey }: { agentKey: string }) {
|
|
|
510
555
|
</button>
|
|
511
556
|
</>
|
|
512
557
|
)}
|
|
558
|
+
{agent?.skillMode === 'unsupported' && (
|
|
559
|
+
<button
|
|
560
|
+
type="button"
|
|
561
|
+
onClick={() => void handleCopySkillToAgent(skill.name)}
|
|
562
|
+
disabled={skillBusy === skill.name}
|
|
563
|
+
className="inline-flex items-center justify-center min-h-[28px] px-1.5 rounded-md text-muted-foreground hover:text-[var(--amber)] cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-50 disabled:cursor-not-allowed transition-colors duration-150"
|
|
564
|
+
title={`Copy ${skill.name} to ${agent.name}`}
|
|
565
|
+
aria-label={`Copy ${skill.name} to ${agent.name}`}
|
|
566
|
+
>
|
|
567
|
+
<Copy size={13} />
|
|
568
|
+
</button>
|
|
569
|
+
)}
|
|
513
570
|
</div>
|
|
514
571
|
</div>
|
|
515
572
|
|
|
@@ -223,17 +223,7 @@ export default function AgentsOverviewSection({
|
|
|
223
223
|
</span>
|
|
224
224
|
</div>
|
|
225
225
|
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3">
|
|
226
|
-
{
|
|
227
|
-
<AgentCard
|
|
228
|
-
key={agent.key}
|
|
229
|
-
agent={agent}
|
|
230
|
-
copy={copy}
|
|
231
|
-
index={i}
|
|
232
|
-
mcpEnabled={mcpEnabled}
|
|
233
|
-
onEdit={agent.isCustom ? onEditCustomAgent : undefined}
|
|
234
|
-
onRemove={agent.isCustom ? onRemoveCustomAgent : undefined}
|
|
235
|
-
/>
|
|
236
|
-
))}
|
|
226
|
+
{/* Add Custom Agent Button — Always First */}
|
|
237
227
|
{onAddCustomAgent && (
|
|
238
228
|
<button
|
|
239
229
|
type="button"
|
|
@@ -254,6 +244,18 @@ export default function AgentsOverviewSection({
|
|
|
254
244
|
</span>
|
|
255
245
|
</button>
|
|
256
246
|
)}
|
|
247
|
+
{/* Agent Cards */}
|
|
248
|
+
{sortedAgents.map((agent, i) => (
|
|
249
|
+
<AgentCard
|
|
250
|
+
key={agent.key}
|
|
251
|
+
agent={agent}
|
|
252
|
+
copy={copy}
|
|
253
|
+
index={i}
|
|
254
|
+
mcpEnabled={mcpEnabled}
|
|
255
|
+
onEdit={agent.isCustom ? onEditCustomAgent : undefined}
|
|
256
|
+
onRemove={agent.isCustom ? onRemoveCustomAgent : undefined}
|
|
257
|
+
/>
|
|
258
|
+
))}
|
|
257
259
|
</div>
|
|
258
260
|
</section>
|
|
259
261
|
) : (
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
3
|
import { useState, useEffect, useRef, useCallback, useMemo } from 'react';
|
|
4
|
-
import { X, Loader2, ChevronRight, ChevronDown, CheckCircle2, Info, AlertCircle } from 'lucide-react';
|
|
4
|
+
import { X, Loader2, ChevronRight, ChevronDown, CheckCircle2, Info, AlertCircle, Server, Zap } from 'lucide-react';
|
|
5
5
|
import { useLocale } from '@/lib/stores/locale-store';
|
|
6
6
|
import { useFocusTrap } from '@/lib/hooks/useFocusTrap';
|
|
7
7
|
import { toast } from '@/lib/toast';
|
|
@@ -19,6 +19,8 @@ interface DetectResult {
|
|
|
19
19
|
detectedSkillDir?: string;
|
|
20
20
|
skillCount?: number;
|
|
21
21
|
skillNames?: string[];
|
|
22
|
+
mcpServers?: string[];
|
|
23
|
+
mcpParseError?: string;
|
|
22
24
|
suggestedName?: string;
|
|
23
25
|
}
|
|
24
26
|
|
|
@@ -406,7 +408,7 @@ export default function CustomAgentModal({
|
|
|
406
408
|
{phase === 'result' && (
|
|
407
409
|
<>
|
|
408
410
|
{/* Result Card */}
|
|
409
|
-
<div className={`rounded-lg p-4 space-y-
|
|
411
|
+
<div className={`rounded-lg p-4 space-y-3 ${
|
|
410
412
|
detectResult?.exists
|
|
411
413
|
? 'border border-[var(--success)]/20 bg-[var(--success)]/5'
|
|
412
414
|
: 'border border-border bg-muted/30'
|
|
@@ -414,22 +416,74 @@ export default function CustomAgentModal({
|
|
|
414
416
|
<p className="text-xs font-medium text-muted-foreground uppercase tracking-wider">
|
|
415
417
|
{detectResult?.exists ? p.customAgentDetectedTitle : p.customAgentDefaultTitle}
|
|
416
418
|
</p>
|
|
417
|
-
<div className="
|
|
418
|
-
|
|
419
|
-
<
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
419
|
+
<div className="space-y-2.5">
|
|
420
|
+
{/* Config Path */}
|
|
421
|
+
<div>
|
|
422
|
+
<p className="text-xs text-muted-foreground mb-1">{p.customAgentConfigLabel}</p>
|
|
423
|
+
<span className="text-sm text-foreground font-mono truncate block">{form.global}</span>
|
|
424
|
+
{detectResult?.mcpParseError && (
|
|
425
|
+
<p className="text-xs text-[var(--error)] mt-1 flex items-center gap-1">
|
|
426
|
+
<AlertCircle size={12} className="shrink-0" />
|
|
427
|
+
{detectResult.mcpParseError}
|
|
428
|
+
</p>
|
|
429
|
+
)}
|
|
430
|
+
</div>
|
|
431
|
+
|
|
432
|
+
{/* Format & Key */}
|
|
433
|
+
<div className="grid grid-cols-2 gap-2">
|
|
434
|
+
<div>
|
|
435
|
+
<p className="text-xs text-muted-foreground mb-1">{p.customAgentFormatLabel}</p>
|
|
436
|
+
<span className="text-sm text-foreground">{form.format.toUpperCase()}</span>
|
|
437
|
+
</div>
|
|
438
|
+
<div>
|
|
439
|
+
<p className="text-xs text-muted-foreground mb-1">Config Key</p>
|
|
440
|
+
<span className="text-sm text-foreground font-mono">{form.configKey}</span>
|
|
441
|
+
</div>
|
|
442
|
+
</div>
|
|
443
|
+
|
|
444
|
+
{/* Transport */}
|
|
445
|
+
<div>
|
|
446
|
+
<p className="text-xs text-muted-foreground mb-1">{p.customAgentTransportLabel}</p>
|
|
447
|
+
<span className="text-sm text-foreground">{form.preferredTransport}</span>
|
|
448
|
+
</div>
|
|
449
|
+
|
|
450
|
+
{/* MCP Servers */}
|
|
451
|
+
<div>
|
|
452
|
+
<p className="text-xs text-muted-foreground mb-1 flex items-center gap-1">
|
|
453
|
+
<Server size={11} className="shrink-0" aria-hidden="true" />
|
|
454
|
+
MCP Servers
|
|
455
|
+
</p>
|
|
456
|
+
{detectResult?.mcpServers && detectResult.mcpServers.length > 0 ? (
|
|
457
|
+
<div className="flex flex-wrap gap-1">
|
|
458
|
+
{detectResult.mcpServers.map(name => (
|
|
459
|
+
<span key={name} className="text-xs bg-muted/60 text-foreground px-2 py-0.5 rounded font-mono">
|
|
460
|
+
{name}
|
|
461
|
+
</span>
|
|
462
|
+
))}
|
|
463
|
+
</div>
|
|
464
|
+
) : (
|
|
465
|
+
<span className="text-sm text-muted-foreground">—</span>
|
|
466
|
+
)}
|
|
467
|
+
</div>
|
|
468
|
+
|
|
469
|
+
{/* Skills */}
|
|
470
|
+
<div>
|
|
471
|
+
<p className="text-xs text-muted-foreground mb-1 flex items-center gap-1">
|
|
472
|
+
<Zap size={11} className="shrink-0" aria-hidden="true" />
|
|
473
|
+
{p.customAgentSkillsLabel}
|
|
474
|
+
</p>
|
|
475
|
+
{detectResult?.skillNames && detectResult.skillNames.length > 0 ? (
|
|
476
|
+
<div className="flex flex-wrap gap-1">
|
|
477
|
+
{detectResult.skillNames.map(name => (
|
|
478
|
+
<span key={name} className="text-xs bg-[var(--amber-dim)] text-[var(--amber-text,var(--foreground))] px-2 py-0.5 rounded font-mono">
|
|
479
|
+
{name}
|
|
480
|
+
</span>
|
|
481
|
+
))}
|
|
482
|
+
</div>
|
|
483
|
+
) : (
|
|
484
|
+
<span className="text-sm text-muted-foreground">—</span>
|
|
485
|
+
)}
|
|
486
|
+
</div>
|
|
433
487
|
</div>
|
|
434
488
|
</div>
|
|
435
489
|
|