@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
|
@@ -2,12 +2,72 @@
|
|
|
2
2
|
|
|
3
3
|
import { useCallback, useEffect, useMemo, useState } from 'react';
|
|
4
4
|
import Link from 'next/link';
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
ChevronDown,
|
|
7
|
+
ChevronRight,
|
|
8
|
+
History,
|
|
9
|
+
RefreshCw,
|
|
10
|
+
FileText,
|
|
11
|
+
// Operation icons
|
|
12
|
+
FileUp,
|
|
13
|
+
FileMinus,
|
|
14
|
+
Pencil,
|
|
15
|
+
Copy,
|
|
16
|
+
Edit3,
|
|
17
|
+
Move,
|
|
18
|
+
Zap,
|
|
19
|
+
// Source icons
|
|
20
|
+
Bot,
|
|
21
|
+
User,
|
|
22
|
+
Cpu,
|
|
23
|
+
} from 'lucide-react';
|
|
6
24
|
import { apiFetch } from '@/lib/api';
|
|
7
25
|
import { useLocale } from '@/lib/stores/locale-store';
|
|
8
26
|
import CustomSelect from '@/components/CustomSelect';
|
|
9
27
|
import { collapseDiffContext, buildLineDiff } from './line-diff';
|
|
10
28
|
|
|
29
|
+
/** Icon mapping for different operations */
|
|
30
|
+
function getOpIcon(op: string): React.ReactNode {
|
|
31
|
+
if (op === 'create_file' || op === 'create_space') return <FileUp size={14} />;
|
|
32
|
+
if (op === 'delete_file') return <FileMinus size={14} />;
|
|
33
|
+
if (op === 'update_lines' || op === 'update_section') return <Edit3 size={14} />;
|
|
34
|
+
if (op === 'insert_lines' || op === 'insert_after_heading') return <Pencil size={14} />;
|
|
35
|
+
if (op === 'append_to_file' || op === 'append_csv') return <Copy size={14} />;
|
|
36
|
+
if (op === 'rename_file' || op === 'rename_space' || op === 'move_file') return <Move size={14} />;
|
|
37
|
+
if (op === 'import_file') return <Zap size={14} />;
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/** Icon and color for source (User/Agent/System) */
|
|
42
|
+
function getSourceIcon(source: string): React.ReactNode {
|
|
43
|
+
if (source === 'agent') return <Bot size={13} />;
|
|
44
|
+
if (source === 'user') return <User size={13} />;
|
|
45
|
+
return <Cpu size={13} />;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function getSourceBgColor(source: string): string {
|
|
49
|
+
if (source === 'agent') return 'bg-blue-500/10 text-blue-700 border border-blue-200/50';
|
|
50
|
+
if (source === 'user') return 'bg-emerald-500/10 text-emerald-700 border border-emerald-200/50';
|
|
51
|
+
return 'bg-slate-500/10 text-slate-700 border border-slate-200/50';
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/** Skeleton placeholder for loading state */
|
|
55
|
+
function ChangeCardSkeleton() {
|
|
56
|
+
return (
|
|
57
|
+
<div className="rounded-xl border border-border bg-card overflow-hidden animate-pulse">
|
|
58
|
+
<div className="px-4 py-3 space-y-2">
|
|
59
|
+
<div className="flex items-start gap-2">
|
|
60
|
+
<div className="w-4 h-4 bg-muted rounded mt-1" />
|
|
61
|
+
<div className="flex-1 space-y-2">
|
|
62
|
+
<div className="h-5 bg-muted rounded w-2/3" />
|
|
63
|
+
<div className="h-3 bg-muted rounded w-full" />
|
|
64
|
+
</div>
|
|
65
|
+
</div>
|
|
66
|
+
</div>
|
|
67
|
+
</div>
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
|
|
11
71
|
/** Semantic color for operation type badges */
|
|
12
72
|
function opColorClass(op: string): string {
|
|
13
73
|
if (op.startsWith('create') || op === 'import_file') return 'text-success';
|
|
@@ -48,6 +108,58 @@ function relativeTime(ts: string, t: ReturnType<typeof useLocale>['t']): string
|
|
|
48
108
|
return t.changes.relativeTime.daysAgo(Math.floor(hours / 24));
|
|
49
109
|
}
|
|
50
110
|
|
|
111
|
+
/**
|
|
112
|
+
* Translate backend-generated English summaries to the current locale.
|
|
113
|
+
* Matches known patterns; returns the original string as fallback.
|
|
114
|
+
*/
|
|
115
|
+
function translateSummary(summary: string, t: ReturnType<typeof useLocale>['t']): string {
|
|
116
|
+
const s = t.changes.summaries;
|
|
117
|
+
// Exact matches
|
|
118
|
+
if (summary === 'Updated file content') return s.updatedFileContent;
|
|
119
|
+
if (summary === 'Appended content to file') return s.appendedContent;
|
|
120
|
+
if (summary === 'Moved to trash') return s.movedToTrash;
|
|
121
|
+
if (summary === 'Created file') return s.createdFile;
|
|
122
|
+
if (summary === 'Created space') return s.createdSpace;
|
|
123
|
+
if (summary === 'Imported file into knowledge base') return s.importedFile;
|
|
124
|
+
|
|
125
|
+
// Pattern: "Inserted N line(s)"
|
|
126
|
+
const insertedLines = summary.match(/^Inserted (\d+) line\(s\)$/);
|
|
127
|
+
if (insertedLines) return s.insertedLines(Number(insertedLines[1]));
|
|
128
|
+
|
|
129
|
+
// Pattern: "Updated lines N-M"
|
|
130
|
+
const updatedLines = summary.match(/^Updated lines (\d+)-(\d+)$/);
|
|
131
|
+
if (updatedLines) return s.updatedLines(Number(updatedLines[1]), Number(updatedLines[2]));
|
|
132
|
+
|
|
133
|
+
// Pattern: 'Inserted content after heading "..."'
|
|
134
|
+
const insertedAfter = summary.match(/^Inserted content after heading "(.+)"$/);
|
|
135
|
+
if (insertedAfter) return s.insertedAfterHeading(insertedAfter[1]);
|
|
136
|
+
|
|
137
|
+
// Pattern: 'Updated section "..."'
|
|
138
|
+
const updatedSection = summary.match(/^Updated section "(.+)"$/);
|
|
139
|
+
if (updatedSection) return s.updatedSection(updatedSection[1]);
|
|
140
|
+
|
|
141
|
+
// Pattern: "Renamed file to ..."
|
|
142
|
+
const renamedFile = summary.match(/^Renamed file to (.+)$/);
|
|
143
|
+
if (renamedFile) return s.renamedFile(renamedFile[1]);
|
|
144
|
+
|
|
145
|
+
// Pattern: "Moved file to ..."
|
|
146
|
+
const movedFile = summary.match(/^Moved file to (.+)$/);
|
|
147
|
+
if (movedFile) return s.movedFile(movedFile[1]);
|
|
148
|
+
|
|
149
|
+
// Pattern: "Renamed space to ..."
|
|
150
|
+
const renamedSpace = summary.match(/^Renamed space to (.+)$/);
|
|
151
|
+
if (renamedSpace) return s.renamedSpace(renamedSpace[1]);
|
|
152
|
+
|
|
153
|
+
// Pattern: "Appended CSV row (N cell(s))"
|
|
154
|
+
const csvRow = summary.match(/^Appended CSV row \((\d+) cells?\)$/);
|
|
155
|
+
if (csvRow) return s.appendedCsvRow(Number(csvRow[1]));
|
|
156
|
+
|
|
157
|
+
// Pattern: "Imported legacy agent diff (...)"
|
|
158
|
+
if (summary.startsWith('Imported legacy agent diff')) return s.importedLegacyDiff;
|
|
159
|
+
|
|
160
|
+
return summary; // fallback: show original
|
|
161
|
+
}
|
|
162
|
+
|
|
51
163
|
export default function ChangesContentPage({ initialPath = '' }: { initialPath?: string }) {
|
|
52
164
|
const { t } = useLocale();
|
|
53
165
|
const [pathFilter, setPathFilter] = useState(initialPath);
|
|
@@ -77,7 +189,7 @@ export default function ChangesContentPage({ initialPath = '' }: { initialPath?:
|
|
|
77
189
|
setEvents(list.events);
|
|
78
190
|
setSummary(summaryData);
|
|
79
191
|
} catch (e) {
|
|
80
|
-
setError(e instanceof Error ? e.message :
|
|
192
|
+
setError(e instanceof Error ? e.message : String(e));
|
|
81
193
|
} finally {
|
|
82
194
|
setLoading(false);
|
|
83
195
|
}
|
|
@@ -117,7 +229,7 @@ export default function ChangesContentPage({ initialPath = '' }: { initialPath?:
|
|
|
117
229
|
() =>
|
|
118
230
|
opOptions.map((op) => ({
|
|
119
231
|
value: op,
|
|
120
|
-
label: op === 'all' ? t.changes.filters.operationAll : op,
|
|
232
|
+
label: op === 'all' ? t.changes.filters.operationAll : ((t.changes.operations as Record<string, string>)?.[op] ?? op),
|
|
121
233
|
})),
|
|
122
234
|
[opOptions, t],
|
|
123
235
|
);
|
|
@@ -133,206 +245,294 @@ export default function ChangesContentPage({ initialPath = '' }: { initialPath?:
|
|
|
133
245
|
}, [t]);
|
|
134
246
|
|
|
135
247
|
return (
|
|
136
|
-
<div className="min-h-screen">
|
|
248
|
+
<div className="min-h-screen bg-background">
|
|
249
|
+
{/* Header with icon in box */}
|
|
137
250
|
<div className="px-4 md:px-6 pt-6 md:pt-8">
|
|
138
|
-
<div className="content-width xl:mr-[220px] rounded-xl border border-border bg-card
|
|
139
|
-
<div className="flex flex-wrap items-start justify-between gap-
|
|
140
|
-
<div className="min-w-0">
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
251
|
+
<div className="content-width xl:mr-[220px] rounded-xl border border-border/60 bg-card p-6 md:p-8 shadow-sm">
|
|
252
|
+
<div className="flex flex-wrap items-start justify-between gap-4">
|
|
253
|
+
<div className="min-w-0 flex-1">
|
|
254
|
+
{/* Title with icon in box (Settings pattern) */}
|
|
255
|
+
<div className="flex items-start gap-4">
|
|
256
|
+
<div className="w-10 h-10 rounded-lg bg-[var(--amber)]/8 flex items-center justify-center shrink-0 mt-0.5">
|
|
257
|
+
<History size={20} className="text-[var(--amber)]" />
|
|
258
|
+
</div>
|
|
259
|
+
<div className="flex-1 min-w-0">
|
|
260
|
+
<h1 className="text-2xl font-semibold text-foreground tracking-tight">{t.changes.title}</h1>
|
|
261
|
+
<p className="mt-1.5 text-sm text-muted-foreground leading-relaxed">{t.changes.subtitle}</p>
|
|
262
|
+
</div>
|
|
144
263
|
</div>
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
<span className="rounded-full bg-[var(--amber-dim)] px-2 py-0.5 text-[var(--amber)]">
|
|
151
|
-
{t.changes.unreadCount(summary.unreadCount)}
|
|
264
|
+
|
|
265
|
+
{/* Stats badges */}
|
|
266
|
+
<div className="mt-5 flex items-center gap-2">
|
|
267
|
+
<span className="px-3 py-1.5 rounded-full bg-muted/60 text-muted-foreground text-xs font-medium">
|
|
268
|
+
{eventCountLabel}
|
|
152
269
|
</span>
|
|
270
|
+
{summary.unreadCount > 0 && (
|
|
271
|
+
<span className="px-3 py-1.5 rounded-full bg-[var(--amber)]/10 text-[var(--amber)] text-xs font-medium border border-[var(--amber)]/20">
|
|
272
|
+
{t.changes.unreadCount(summary.unreadCount)}
|
|
273
|
+
</span>
|
|
274
|
+
)}
|
|
153
275
|
</div>
|
|
154
276
|
</div>
|
|
155
|
-
|
|
277
|
+
|
|
278
|
+
{/* Action buttons with icon */}
|
|
279
|
+
<div className="flex items-center gap-2 shrink-0">
|
|
156
280
|
<button
|
|
157
281
|
type="button"
|
|
158
282
|
onClick={() => void fetchData()}
|
|
159
|
-
className="
|
|
283
|
+
className="inline-flex items-center gap-1.5 px-3 py-2 rounded-lg text-xs font-medium bg-muted/50 text-muted-foreground hover:text-foreground hover:bg-muted transition-all duration-150 focus-visible:ring-2 focus-visible:ring-[var(--amber)]"
|
|
284
|
+
title={t.changes.refresh}
|
|
160
285
|
>
|
|
161
|
-
<
|
|
286
|
+
<RefreshCw size={14} />
|
|
287
|
+
<span className="hidden sm:inline">{t.changes.refresh}</span>
|
|
162
288
|
</button>
|
|
163
289
|
<button
|
|
164
290
|
type="button"
|
|
165
291
|
onClick={() => void markSeen()}
|
|
166
|
-
className="
|
|
292
|
+
className="inline-flex items-center gap-1.5 px-3 py-2 rounded-lg text-xs font-medium bg-muted/50 text-muted-foreground hover:text-foreground hover:bg-muted transition-all duration-150 focus-visible:ring-2 focus-visible:ring-[var(--amber)]"
|
|
293
|
+
title={t.changes.markAllRead}
|
|
167
294
|
>
|
|
168
|
-
{t.changes.markAllRead}
|
|
295
|
+
<span className="hidden sm:inline">{t.changes.markAllRead}</span>
|
|
296
|
+
<span className="inline sm:hidden">✓</span>
|
|
169
297
|
</button>
|
|
170
298
|
</div>
|
|
171
299
|
</div>
|
|
172
300
|
</div>
|
|
173
301
|
</div>
|
|
174
302
|
|
|
303
|
+
{/* Filters Section (SettingCard pattern) */}
|
|
175
304
|
<div className="px-4 md:px-6 py-4 md:py-6">
|
|
176
|
-
<div className="content-width xl:mr-[220px] space-y-
|
|
177
|
-
<div className="rounded-
|
|
178
|
-
<div className="
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
<
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
305
|
+
<div className="content-width xl:mr-[220px] space-y-4">
|
|
306
|
+
<div className="rounded-xl border border-border/60 bg-card/60 p-5 md:p-6 shadow-sm hover:border-border hover:shadow transition-all duration-150">
|
|
307
|
+
<div className="space-y-4">
|
|
308
|
+
{/* Row 1: File path + Source */}
|
|
309
|
+
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
|
|
310
|
+
<label className="block">
|
|
311
|
+
<span className="text-xs font-semibold text-muted-foreground uppercase tracking-wider block mb-2.5">
|
|
312
|
+
{t.changes.filters.filePath}
|
|
313
|
+
</span>
|
|
314
|
+
<input
|
|
315
|
+
value={pathFilter}
|
|
316
|
+
onChange={(e) => setPathFilter(e.target.value)}
|
|
317
|
+
placeholder={t.changes.filters.filePathPlaceholder}
|
|
318
|
+
className="w-full px-3 py-2.5 text-sm bg-background border border-border rounded-lg text-foreground placeholder:text-muted-foreground/40 outline-none focus-visible:ring-2 focus-visible:ring-[var(--amber)]/40 hover:border-border/80 transition-all"
|
|
319
|
+
/>
|
|
320
|
+
</label>
|
|
321
|
+
<div className="block">
|
|
322
|
+
<span className="text-xs font-semibold text-muted-foreground uppercase tracking-wider block mb-2.5">
|
|
323
|
+
{t.changes.filters.source}
|
|
324
|
+
</span>
|
|
325
|
+
<CustomSelect
|
|
326
|
+
value={sourceFilter}
|
|
327
|
+
onChange={(v) => setSourceFilter(v as 'all' | 'agent' | 'user' | 'system')}
|
|
328
|
+
options={sourceSelectOptions}
|
|
329
|
+
/>
|
|
330
|
+
</div>
|
|
196
331
|
</div>
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
332
|
+
|
|
333
|
+
{/* Row 2: Operation + Keyword */}
|
|
334
|
+
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
|
|
335
|
+
<div className="block">
|
|
336
|
+
<span className="text-xs font-semibold text-muted-foreground uppercase tracking-wider block mb-2.5">
|
|
337
|
+
{t.changes.filters.operation}
|
|
338
|
+
</span>
|
|
339
|
+
<CustomSelect
|
|
340
|
+
value={opFilter}
|
|
341
|
+
onChange={setOpFilter}
|
|
342
|
+
options={opSelectOptions}
|
|
343
|
+
/>
|
|
344
|
+
</div>
|
|
345
|
+
<label className="block">
|
|
346
|
+
<span className="text-xs font-semibold text-muted-foreground uppercase tracking-wider block mb-2.5">
|
|
347
|
+
{t.changes.filters.keyword}
|
|
348
|
+
</span>
|
|
349
|
+
<input
|
|
350
|
+
value={queryFilter}
|
|
351
|
+
onChange={(e) => setQueryFilter(e.target.value)}
|
|
352
|
+
placeholder={t.changes.filters.keywordPlaceholder}
|
|
353
|
+
className="w-full px-3 py-2.5 text-sm bg-background border border-border rounded-lg text-foreground placeholder:text-muted-foreground/40 outline-none focus-visible:ring-2 focus-visible:ring-[var(--amber)]/40 hover:border-border/80 transition-all"
|
|
354
|
+
/>
|
|
355
|
+
</label>
|
|
205
356
|
</div>
|
|
206
|
-
<label className="block">
|
|
207
|
-
<span className="text-xs text-muted-foreground">{t.changes.filters.keyword}</span>
|
|
208
|
-
<input
|
|
209
|
-
value={queryFilter}
|
|
210
|
-
onChange={(e) => setQueryFilter(e.target.value)}
|
|
211
|
-
placeholder={t.changes.filters.keywordPlaceholder}
|
|
212
|
-
className="mt-1 w-full px-2.5 py-1.5 text-sm bg-background border border-border rounded-lg text-foreground outline-none focus-visible:ring-2 focus-visible:ring-ring"
|
|
213
|
-
/>
|
|
214
|
-
</label>
|
|
215
357
|
</div>
|
|
216
358
|
</div>
|
|
217
359
|
|
|
218
|
-
{
|
|
219
|
-
{
|
|
360
|
+
{/* Content Area */}
|
|
361
|
+
{loading && (
|
|
362
|
+
<div className="space-y-3">
|
|
363
|
+
<ChangeCardSkeleton />
|
|
364
|
+
<ChangeCardSkeleton />
|
|
365
|
+
<ChangeCardSkeleton />
|
|
366
|
+
</div>
|
|
367
|
+
)}
|
|
368
|
+
|
|
369
|
+
{!loading && error && (
|
|
370
|
+
<div className="rounded-lg border border-error/20 bg-error/5 p-4 text-sm text-error">
|
|
371
|
+
{error}
|
|
372
|
+
<button
|
|
373
|
+
onClick={() => void fetchData()}
|
|
374
|
+
className="ml-2 underline hover:no-underline font-medium"
|
|
375
|
+
>
|
|
376
|
+
{t.changes.refresh}
|
|
377
|
+
</button>
|
|
378
|
+
</div>
|
|
379
|
+
)}
|
|
380
|
+
|
|
220
381
|
{!loading && !error && events.length === 0 && (
|
|
221
|
-
<div className="rounded-
|
|
222
|
-
|
|
382
|
+
<div className="rounded-xl border border-border/60 bg-card/60 p-8 md:p-12 shadow-sm">
|
|
383
|
+
<div className="flex flex-col items-center text-center">
|
|
384
|
+
<div className="mb-4 p-4 bg-muted/50 rounded-lg">
|
|
385
|
+
<FileText size={32} className="text-muted-foreground/60" />
|
|
386
|
+
</div>
|
|
387
|
+
<h3 className="text-base font-semibold text-foreground mb-1">{t.changes.empty}</h3>
|
|
388
|
+
<p className="text-sm text-muted-foreground max-w-sm">{t.changes.emptyHint}</p>
|
|
389
|
+
</div>
|
|
223
390
|
</div>
|
|
224
391
|
)}
|
|
225
392
|
|
|
226
|
-
{
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
<
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
{(inserts > 0 || deletes > 0) && (
|
|
245
|
-
<span className="text-xs font-mono text-muted-foreground">
|
|
246
|
-
{inserts > 0 && <span className="text-success">+{inserts}</span>}
|
|
247
|
-
{inserts > 0 && deletes > 0 && ' '}
|
|
248
|
-
{deletes > 0 && <span className="text-error">-{deletes}</span>}
|
|
249
|
-
</span>
|
|
250
|
-
)}
|
|
251
|
-
</div>
|
|
252
|
-
<div className="mt-1 flex flex-wrap items-center gap-1.5 text-xs text-muted-foreground">
|
|
253
|
-
<span
|
|
254
|
-
className="rounded-md px-2 py-0.5 font-medium"
|
|
255
|
-
style={{
|
|
256
|
-
background: 'color-mix(in srgb, var(--amber) 16%, var(--muted))',
|
|
257
|
-
color: 'var(--foreground)',
|
|
258
|
-
border: '1px solid color-mix(in srgb, var(--amber) 36%, var(--border))',
|
|
259
|
-
}}
|
|
260
|
-
>
|
|
261
|
-
{event.path}
|
|
262
|
-
</span>
|
|
263
|
-
<span className={opColorClass(event.op)}>{opLabel(event.op)}</span>
|
|
264
|
-
<span>·</span>
|
|
265
|
-
<span>{sourceLabel(event.source)}</span>
|
|
266
|
-
<span>·</span>
|
|
267
|
-
<span>{relativeTime(event.ts, t)}</span>
|
|
268
|
-
</div>
|
|
269
|
-
</div>
|
|
270
|
-
<Link
|
|
271
|
-
href={`/view/${event.path.split('/').map(encodeURIComponent).join('/')}`}
|
|
272
|
-
className="inline-flex items-center rounded-md px-2 py-0.5 text-xs font-medium bg-[var(--amber-dim)] text-[var(--amber-text)] focus-visible:ring-2 focus-visible:ring-ring hover:opacity-90"
|
|
273
|
-
onClick={(e) => e.stopPropagation()}
|
|
393
|
+
{/* Event Cards - Premium Design */}
|
|
394
|
+
{!loading && !error && events.length > 0 && (
|
|
395
|
+
<div className="space-y-2.5">
|
|
396
|
+
{events.map((event) => {
|
|
397
|
+
const open = !!expanded[event.id];
|
|
398
|
+
const rawDiff = buildLineDiff(event.before ?? '', event.after ?? '');
|
|
399
|
+
const rows = collapseDiffContext(rawDiff);
|
|
400
|
+
const inserts = rawDiff.filter(r => r.type === 'insert').length;
|
|
401
|
+
const deletes = rawDiff.filter(r => r.type === 'delete').length;
|
|
402
|
+
return (
|
|
403
|
+
<div
|
|
404
|
+
key={event.id}
|
|
405
|
+
className="group rounded-xl border border-border/60 bg-card/70 overflow-hidden transition-all duration-150 hover:border-border hover:bg-card hover:shadow-md"
|
|
406
|
+
>
|
|
407
|
+
<button
|
|
408
|
+
type="button"
|
|
409
|
+
onClick={() => setExpanded((prev) => ({ ...prev, [event.id]: !prev[event.id] }))}
|
|
410
|
+
className="w-full px-4 md:px-5 py-3.5 text-left focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-[var(--amber)] hover:bg-muted/30 transition-all"
|
|
274
411
|
>
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
<div
|
|
291
|
-
|
|
412
|
+
<div className="flex items-start gap-3">
|
|
413
|
+
{/* Expand/Collapse indicator with left amber bar on open */}
|
|
414
|
+
<div className="pt-0.5 text-muted-foreground/60 shrink-0 relative">
|
|
415
|
+
{open && <div className="absolute -left-6 top-1 bottom-1 w-[3px] rounded-r-full bg-[var(--amber)]" />}
|
|
416
|
+
{open ? <ChevronDown size={16} /> : <ChevronRight size={16} />}
|
|
417
|
+
</div>
|
|
418
|
+
|
|
419
|
+
{/* Operation icon in box */}
|
|
420
|
+
<div className="w-8 h-8 rounded-md bg-muted/50 flex items-center justify-center shrink-0 mt-0.5 text-muted-foreground group-hover:bg-muted transition-all">
|
|
421
|
+
{getOpIcon(event.op)}
|
|
422
|
+
</div>
|
|
423
|
+
|
|
424
|
+
{/* Main content */}
|
|
425
|
+
<div className="min-w-0 flex-1">
|
|
426
|
+
{/* Summary + diff count */}
|
|
427
|
+
<div className="flex items-center gap-2 flex-wrap">
|
|
428
|
+
<span className="text-sm font-medium text-foreground">
|
|
429
|
+
{translateSummary(event.summary, t)}
|
|
430
|
+
</span>
|
|
431
|
+
{(inserts > 0 || deletes > 0) && (
|
|
432
|
+
<span className="text-xs font-mono text-muted-foreground/70">
|
|
433
|
+
{inserts > 0 && <span className="text-success font-semibold">+{inserts}</span>}
|
|
434
|
+
{inserts > 0 && deletes > 0 && <span className="mx-1">·</span>}
|
|
435
|
+
{deletes > 0 && <span className="text-error font-semibold">-{deletes}</span>}
|
|
436
|
+
</span>
|
|
437
|
+
)}
|
|
438
|
+
</div>
|
|
439
|
+
|
|
440
|
+
{/* Metadata row with source badge, op label, time */}
|
|
441
|
+
<div className="mt-2.5 flex flex-wrap items-center gap-2">
|
|
442
|
+
{/* File path badge */}
|
|
443
|
+
<span className="rounded-md px-2 py-1 bg-[var(--amber-dim)] text-[var(--amber)] text-xs font-medium truncate inline-block max-w-xs hover:bg-[var(--amber)]/20 transition-colors" title={event.path}>
|
|
444
|
+
{event.path}
|
|
445
|
+
</span>
|
|
446
|
+
|
|
447
|
+
{/* Source badge with icon */}
|
|
448
|
+
<span className={`inline-flex items-center gap-1 px-2 py-1 rounded-md text-xs font-medium ${getSourceBgColor(event.source)} transition-colors`}>
|
|
449
|
+
{getSourceIcon(event.source)}
|
|
450
|
+
{sourceLabel(event.source)}
|
|
451
|
+
</span>
|
|
452
|
+
|
|
453
|
+
{/* Operation label */}
|
|
454
|
+
<span className={`text-xs font-medium ${opColorClass(event.op)}`}>
|
|
455
|
+
{opLabel(event.op)}
|
|
456
|
+
</span>
|
|
457
|
+
|
|
458
|
+
{/* Time */}
|
|
459
|
+
<span className="text-xs text-muted-foreground/60 ml-auto shrink-0">
|
|
460
|
+
{relativeTime(event.ts, t)}
|
|
461
|
+
</span>
|
|
292
462
|
</div>
|
|
293
|
-
);
|
|
294
|
-
}
|
|
295
|
-
const prefix = row.type === 'insert' ? '+' : row.type === 'delete' ? '-' : ' ';
|
|
296
|
-
const showOld = row.type !== 'insert' ? oln : '';
|
|
297
|
-
const showNew = row.type !== 'delete' ? nln : '';
|
|
298
|
-
if (row.type !== 'insert') oln++;
|
|
299
|
-
if (row.type !== 'delete') nln++;
|
|
300
|
-
return (
|
|
301
|
-
<div
|
|
302
|
-
key={`${event.id}-${idx}`}
|
|
303
|
-
className={`flex items-start text-xs font-mono ${
|
|
304
|
-
row.type === 'insert'
|
|
305
|
-
? 'bg-success/8'
|
|
306
|
-
: row.type === 'delete'
|
|
307
|
-
? 'bg-error/8'
|
|
308
|
-
: ''
|
|
309
|
-
}`}
|
|
310
|
-
>
|
|
311
|
-
<span className="w-8 shrink-0 text-right pr-1 select-none text-muted-foreground/40 text-2xs leading-5">{showOld}</span>
|
|
312
|
-
<span className="w-8 shrink-0 text-right pr-1 select-none text-muted-foreground/40 text-2xs leading-5">{showNew}</span>
|
|
313
|
-
<span
|
|
314
|
-
className={`w-3 shrink-0 text-center select-none leading-5 ${
|
|
315
|
-
row.type === 'insert' ? 'text-success' : row.type === 'delete' ? 'text-error' : 'text-muted-foreground/30'
|
|
316
|
-
}`}
|
|
317
|
-
>
|
|
318
|
-
{prefix}
|
|
319
|
-
</span>
|
|
320
|
-
<span
|
|
321
|
-
className={`px-1 py-0.5 whitespace-pre-wrap break-all flex-1 ${
|
|
322
|
-
row.type === 'insert' ? 'text-success' : row.type === 'delete' ? 'text-error' : 'text-muted-foreground'
|
|
323
|
-
}`}
|
|
324
|
-
>
|
|
325
|
-
{row.text || '\u00A0'}
|
|
326
|
-
</span>
|
|
327
463
|
</div>
|
|
464
|
+
|
|
465
|
+
{/* Open button */}
|
|
466
|
+
<Link
|
|
467
|
+
href={`/view/${event.path.split('/').map(encodeURIComponent).join('/')}`}
|
|
468
|
+
className="inline-flex items-center px-2.5 py-1.5 rounded-md text-xs font-medium bg-[var(--amber)]/10 text-[var(--amber)] hover:bg-[var(--amber)] hover:text-white focus-visible:ring-2 focus-visible:ring-[var(--amber)] transition-all duration-150 shrink-0 group-hover:bg-[var(--amber)]/15"
|
|
469
|
+
onClick={(e) => e.stopPropagation()}
|
|
470
|
+
title={t.changes.open}
|
|
471
|
+
>
|
|
472
|
+
{t.changes.open}
|
|
473
|
+
</Link>
|
|
474
|
+
</div>
|
|
475
|
+
</button>
|
|
476
|
+
|
|
477
|
+
{/* Diff Viewer with premium styling */}
|
|
478
|
+
{open && (() => {
|
|
479
|
+
let oln = 1;
|
|
480
|
+
let nln = 1;
|
|
481
|
+
return (
|
|
482
|
+
<div className="border-t border-border/50 bg-background/60 max-h-96 overflow-y-auto">
|
|
483
|
+
{rows.map((row, idx) => {
|
|
484
|
+
if (row.type === 'gap') {
|
|
485
|
+
oln += row.count;
|
|
486
|
+
nln += row.count;
|
|
487
|
+
return (
|
|
488
|
+
<div key={`${event.id}-gap-${idx}`} className="px-4 py-2.5 text-xs text-muted-foreground/50 border-y border-border/30 bg-muted/10 text-center font-medium">
|
|
489
|
+
{t.changes.unchangedLines(row.count)}
|
|
490
|
+
</div>
|
|
491
|
+
);
|
|
492
|
+
}
|
|
493
|
+
const prefix = row.type === 'insert' ? '+' : row.type === 'delete' ? '-' : ' ';
|
|
494
|
+
const showOld = row.type !== 'insert' ? oln : '';
|
|
495
|
+
const showNew = row.type !== 'delete' ? nln : '';
|
|
496
|
+
if (row.type !== 'insert') oln++;
|
|
497
|
+
if (row.type !== 'delete') nln++;
|
|
498
|
+
return (
|
|
499
|
+
<div
|
|
500
|
+
key={`${event.id}-${idx}`}
|
|
501
|
+
className={`flex items-start text-xs font-mono leading-6 px-4 ${
|
|
502
|
+
row.type === 'insert'
|
|
503
|
+
? 'bg-success/5 hover:bg-success/8'
|
|
504
|
+
: row.type === 'delete'
|
|
505
|
+
? 'bg-error/5 hover:bg-error/8'
|
|
506
|
+
: 'hover:bg-muted/20'
|
|
507
|
+
} transition-colors`}
|
|
508
|
+
>
|
|
509
|
+
<span className="w-8 shrink-0 text-right pr-3 select-none text-muted-foreground/40 font-medium">{showOld}</span>
|
|
510
|
+
<span className="w-8 shrink-0 text-right pr-3 select-none text-muted-foreground/40 font-medium">{showNew}</span>
|
|
511
|
+
<span
|
|
512
|
+
className={`w-3 shrink-0 text-center select-none font-bold ${
|
|
513
|
+
row.type === 'insert' ? 'text-success' : row.type === 'delete' ? 'text-error' : 'text-muted-foreground/20'
|
|
514
|
+
}`}
|
|
515
|
+
>
|
|
516
|
+
{prefix}
|
|
517
|
+
</span>
|
|
518
|
+
<span
|
|
519
|
+
className={`flex-1 whitespace-pre-wrap break-all overflow-hidden ${
|
|
520
|
+
row.type === 'insert' ? 'text-success' : row.type === 'delete' ? 'text-error' : 'text-muted-foreground'
|
|
521
|
+
}`}
|
|
522
|
+
>
|
|
523
|
+
{row.text || '\u00A0'}
|
|
524
|
+
</span>
|
|
525
|
+
</div>
|
|
526
|
+
);
|
|
527
|
+
})}
|
|
528
|
+
</div>
|
|
328
529
|
);
|
|
329
|
-
})}
|
|
530
|
+
})()}
|
|
330
531
|
</div>
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
})}
|
|
532
|
+
);
|
|
533
|
+
})}
|
|
534
|
+
</div>
|
|
535
|
+
)}
|
|
336
536
|
</div>
|
|
337
537
|
</div>
|
|
338
538
|
</div>
|
|
@@ -66,7 +66,7 @@ export default function SettingsContent({ visible, initialTab, variant, onClose
|
|
|
66
66
|
|
|
67
67
|
if (justOpened) {
|
|
68
68
|
apiFetch<SettingsData>('/api/settings').then(d => { setData(d); dataLoaded.current = true; }).catch(() => setStatus('load-error'));
|
|
69
|
-
setFont(localStorage.getItem('prose-font') === 'geist' ? 'inter' : localStorage.getItem('prose-font') ?? '
|
|
69
|
+
setFont(localStorage.getItem('prose-font') === 'geist' ? 'inter' : localStorage.getItem('prose-font') ?? 'ibm-plex-sans');
|
|
70
70
|
setFontSize(localStorage.getItem('prose-font-size') ?? '15px');
|
|
71
71
|
setContentWidth(localStorage.getItem('content-width') ?? '780px');
|
|
72
72
|
const stored = localStorage.getItem('theme');
|
|
@@ -50,7 +50,9 @@ export default function WalkthroughTooltip({ stepIndex, rect, position }: Walkth
|
|
|
50
50
|
|
|
51
51
|
return (
|
|
52
52
|
<div
|
|
53
|
-
className=
|
|
53
|
+
className={`fixed z-[102] w-[280px] rounded-xl border shadow-lg animate-in fade-in duration-200 ${
|
|
54
|
+
position === 'right' ? 'slide-in-from-left-2' : 'slide-in-from-top-2'
|
|
55
|
+
}`}
|
|
54
56
|
style={{
|
|
55
57
|
top: `${top}px`,
|
|
56
58
|
left: `${left}px`,
|
|
@@ -18,6 +18,6 @@ export interface WalkthroughStep {
|
|
|
18
18
|
*/
|
|
19
19
|
export const walkthroughSteps: WalkthroughStep[] = [
|
|
20
20
|
{ anchor: 'files-panel', position: 'right' },
|
|
21
|
-
{ anchor: 'ask-button', position: '
|
|
21
|
+
{ anchor: 'ask-button', position: 'bottom' },
|
|
22
22
|
{ anchor: 'agents-panel', position: 'right' },
|
|
23
23
|
];
|