@geminilight/mindos 0.6.52 → 0.6.54
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -5
- package/README_zh.md +27 -5
- package/_standalone/.mindos-build-version +1 -1
- package/_standalone/.next/BUILD_ID +1 -1
- package/_standalone/.next/app-path-routes-manifest.json +17 -14
- package/_standalone/.next/build-manifest.json +3 -3
- package/_standalone/.next/cache/.previewinfo +1 -1
- package/_standalone/.next/cache/.rscinfo +1 -1
- package/_standalone/.next/cache/config.json +3 -3
- package/_standalone/.next/prerender-manifest.json +3 -3
- package/_standalone/.next/react-loadable-manifest.json +18 -2
- package/_standalone/.next/routes-manifest.json +18 -0
- package/_standalone/.next/server/app/.well-known/agent-card.json/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/_global-error/page.js +1 -1
- package/_standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/_global-error.html +2 -2
- package/_standalone/.next/server/app/_global-error.rsc +2 -2
- package/_standalone/.next/server/app/_global-error.segments/_full.segment.rsc +2 -2
- package/_standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/_standalone/.next/server/app/_not-found/page.js +1 -1
- package/_standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/agents/[agentKey]/page.js +1 -1
- package/_standalone/.next/server/app/agents/[agentKey]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/agents/[agentKey]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/agents/page.js +3 -3
- package/_standalone/.next/server/app/agents/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/agents/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/delegations/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/discover/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/config/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/detect/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/install/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/registry/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/session/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/agent-activity/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/ask/route.js +44 -16
- package/_standalone/.next/server/app/api/ask/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/ask/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/ask-sessions/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/auth/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/backlinks/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/backlinks/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/bootstrap/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/bootstrap/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/changes/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/changes/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/export/route.js +2 -2
- package/_standalone/.next/server/app/api/export/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/export/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/extract-pdf/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/file/import/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/file/import/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/file/raw/route.js +1 -0
- package/_standalone/.next/server/app/api/file/raw/route.js.nft.json +1 -0
- package/_standalone/.next/server/app/api/file/raw/route_client-reference-manifest.js +1 -0
- package/_standalone/.next/server/app/api/file/route.js +1 -1
- package/_standalone/.next/server/app/api/file/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/file/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/files/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/git/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/graph/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/graph/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/inbox/route.js +1 -1
- package/_standalone/.next/server/app/api/inbox/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/init/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/agents/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/mcp/agents/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/install/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/install-skill/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/restart/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/status/route.js +1 -1
- package/_standalone/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/uninstall/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/monitoring/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/recent-files/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/restart/route.js +1 -1
- package/_standalone/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/search/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/list-models/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/reset-token/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/route.js +1 -1
- package/_standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/test-key/route.js +1 -1
- package/_standalone/.next/server/app/api/settings/test-key/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/check-path/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/check-port/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/generate-token/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/ls/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/route.js +1 -1
- package/_standalone/.next/server/app/api/setup/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/sync/route.js +1 -1
- package/_standalone/.next/server/app/api/sync/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/tree-version/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update/route.js +1 -1
- package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/workflows/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/changes/page.js +2 -2
- package/_standalone/.next/server/app/changes/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/changes/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/echo/[segment]/page.js +3 -3
- package/_standalone/.next/server/app/echo/[segment]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/echo/page.js +1 -1
- package/_standalone/.next/server/app/echo/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/echo/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/explore/page.js +2 -2
- package/_standalone/.next/server/app/explore/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/explore/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/help/page.js +2 -2
- package/_standalone/.next/server/app/help/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/inbox/history/page.js +2 -0
- package/_standalone/.next/server/app/inbox/history/page.js.nft.json +1 -0
- package/_standalone/.next/server/app/inbox/history/page_client-reference-manifest.js +1 -0
- package/_standalone/.next/server/app/login/page.js +2 -2
- package/_standalone/.next/server/app/login/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/page.js +3 -3
- package/_standalone/.next/server/app/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/setup/page.js +2 -2
- package/_standalone/.next/server/app/setup/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/trash/page.js +3 -3
- package/_standalone/.next/server/app/trash/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/trash/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/view/[...path]/page.js +3 -3
- package/_standalone/.next/server/app/view/[...path]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/view/[...path]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/wiki/page.js +2 -0
- package/_standalone/.next/server/app/wiki/page.js.nft.json +1 -0
- package/_standalone/.next/server/app/wiki/page_client-reference-manifest.js +1 -0
- package/_standalone/.next/server/app-paths-manifest.json +17 -14
- package/_standalone/.next/server/chunks/2190.js +2 -2
- package/_standalone/.next/server/chunks/2364.js +2 -0
- package/_standalone/.next/server/chunks/357.js +1 -0
- package/_standalone/.next/server/chunks/530.js +219 -0
- package/_standalone/.next/server/chunks/6054.js +52 -0
- package/_standalone/.next/server/chunks/6539.js +1 -1
- package/_standalone/.next/server/chunks/8388.js +2 -2
- package/_standalone/.next/server/chunks/953.js +4 -4
- package/_standalone/.next/server/middleware-build-manifest.js +1 -1
- package/_standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/_standalone/.next/server/next-font-manifest.js +1 -1
- package/_standalone/.next/server/next-font-manifest.json +1 -1
- package/_standalone/.next/server/pages/500.html +2 -2
- package/_standalone/.next/server/server-reference-manifest.js +1 -1
- package/_standalone/.next/server/server-reference-manifest.json +1 -1
- package/_standalone/.next/static/2hrwFOLEOZhHQHfrIt-Dw/_buildManifest.js +1 -0
- package/_standalone/.next/static/chunks/1053-2874859f7caefa0f.js +29 -0
- package/_standalone/.next/static/chunks/178-105779afb62d36d9.js +1 -0
- package/_standalone/.next/static/chunks/1814.b08e9fb85dd3b13c.js +1 -0
- package/_standalone/.next/static/chunks/{1880-3ec02adc80531825.js → 1880-7abf971bcfd2389b.js} +2 -2
- package/_standalone/.next/static/chunks/{3160-83a7e0b94414b3ac.js → 2218-d54538000574ffef.js} +1 -1
- package/_standalone/.next/static/chunks/254-32719a9bea2e74f0.js +1 -0
- package/_standalone/.next/static/chunks/362.a77be2f206db7b19.js +1 -0
- package/_standalone/.next/static/chunks/4237-ffc6e7c15d4007b6.js +1 -0
- package/_standalone/.next/static/chunks/7035-2af69391c7b1ad95.js +1 -0
- package/_standalone/.next/static/chunks/7322-d67d05067544864c.js +1 -0
- package/_standalone/.next/static/chunks/{6926-4af497b83952fa87.js → 8409-de5726a4a278d28f.js} +1 -1
- package/_standalone/.next/static/chunks/8753-ea9db680b0f70f25.js +1 -0
- package/_standalone/.next/static/chunks/app/.well-known/agent-card.json/{route-b07a5983e85bc5e3.js → route-e240db6d5049d336.js} +1 -1
- package/_standalone/.next/static/chunks/app/_global-error/{page-b07a5983e85bc5e3.js → page-e240db6d5049d336.js} +1 -1
- package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-f006a70f6889eb56.js +1 -0
- package/_standalone/.next/static/chunks/app/agents/page-bd522e428e3acb78.js +5 -0
- package/_standalone/.next/static/chunks/app/api/a2a/agents/{route-b07a5983e85bc5e3.js → route-e240db6d5049d336.js} +1 -1
- package/_standalone/.next/static/chunks/app/api/a2a/delegations/{route-b07a5983e85bc5e3.js → route-e240db6d5049d336.js} +1 -1
- package/_standalone/.next/static/chunks/app/api/a2a/discover/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/a2a/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/config/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/detect/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/install/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/registry/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/session/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/agent-activity/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/ask/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/ask-sessions/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/auth/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/backlinks/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/bootstrap/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/changes/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/export/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/extract-pdf/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/file/import/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/file/raw/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/file/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/files/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/git/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/graph/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/health/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/inbox/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/init/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/agents/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/install/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/restart/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/status/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/uninstall/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/monitoring/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/recent-files/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/restart/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/search/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/settings/list-models/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/settings/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/settings/test-key/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/check-path/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/check-port/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/ls/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/skills/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/sync/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/tree-version/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/uninstall/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/update/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/update-check/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/update-status/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/api/workflows/route-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/changes/page-5a72144d1080a699.js +1 -0
- package/_standalone/.next/static/chunks/app/echo/[segment]/{page-88df174dd64b2c76.js → page-6710da1f581b2854.js} +2 -2
- package/_standalone/.next/static/chunks/app/echo/page-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/explore/{page-5eb2835e9e3ab4bb.js → page-d3d99308146c2240.js} +1 -1
- package/_standalone/.next/static/chunks/app/global-error-c37d50db6128ec01.js +1 -0
- package/_standalone/.next/static/chunks/app/help/page-222df603080b5fab.js +1 -0
- package/_standalone/.next/static/chunks/app/inbox/history/page-07819cf95cb0805f.js +1 -0
- package/_standalone/.next/static/chunks/app/layout-8eacff5813458190.js +186 -0
- package/_standalone/.next/static/chunks/app/loading-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/login/{page-24236460fa7c11d0.js → page-0eeef685052869a6.js} +1 -1
- package/_standalone/.next/static/chunks/app/page-5a6c9455efe8a0df.js +7 -0
- package/_standalone/.next/static/chunks/app/setup/{page-99f40e9337388cda.js → page-9a81fa4d82c6351b.js} +1 -1
- package/_standalone/.next/static/chunks/app/trash/page-72d0ae3649ac4b6c.js +1 -0
- package/_standalone/.next/static/chunks/app/view/[...path]/loading-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/app/view/[...path]/not-found-fc04c2bd4f35bc6f.js +1 -0
- package/_standalone/.next/static/chunks/app/view/[...path]/page-e8699f96589c0979.js +12 -0
- package/_standalone/.next/static/chunks/app/wiki/page-d492256a93f0b8bc.js +1 -0
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-e240db6d5049d336.js +1 -0
- package/_standalone/.next/static/chunks/{webpack-bbd44cbc83dc0aa4.js → webpack-73c9da80c6c1ebfe.js} +1 -1
- package/_standalone/.next/static/css/66f8a81e4eda06d4.css +1 -0
- package/_standalone/.next/static/css/a4a2b71142b311af.css +31 -0
- package/_standalone/.next/trace +64 -64
- package/_standalone/.next/types/routes.d.ts +5 -2
- package/_standalone/.next/types/validator.ts +27 -0
- package/_standalone/__tests__/agents/agents-content-dashboard.test.tsx +1 -0
- package/_standalone/__tests__/agents/agents-content-model.test.ts +13 -0
- package/_standalone/__tests__/core/inbox.test.ts +168 -0
- package/_standalone/__tests__/core/sync.test.ts +37 -0
- package/_standalone/__tests__/panels/agents-panel-hub.test.tsx +1 -0
- package/_standalone/app/globals.css +29 -3
- package/_standalone/components/ActivityBar.tsx +9 -9
- package/_standalone/components/AskFab.tsx +1 -1
- package/_standalone/components/Backlinks.tsx +1 -1
- package/_standalone/components/Breadcrumb.tsx +1 -1
- package/_standalone/components/CreateSpaceModal.tsx +1 -1
- package/_standalone/components/EchoSpotlight.tsx +14 -10
- package/_standalone/components/Editor.tsx +1 -1
- package/_standalone/components/ExportModal.tsx +3 -3
- package/_standalone/components/FileTree.tsx +6 -11
- package/_standalone/components/GuideCard.tsx +1 -1
- package/_standalone/components/ImportModal.tsx +1 -2
- package/_standalone/components/KeyboardShortcuts.tsx +1 -1
- package/_standalone/components/MarkdownEditor.tsx +1 -1
- package/_standalone/components/OnboardingView.tsx +2 -2
- package/_standalone/components/OrganizeToast.tsx +3 -1
- package/_standalone/components/Panel.tsx +27 -6
- package/_standalone/components/Sidebar.tsx +1 -1
- package/_standalone/components/SidebarLayout.tsx +30 -7
- package/_standalone/components/SystemPulse.tsx +16 -16
- package/_standalone/components/agents/AgentsOverviewSection.tsx +18 -92
- package/_standalone/components/agents/AgentsPanelA2aTab.tsx +67 -66
- package/_standalone/components/agents/AgentsPrimitives.tsx +1 -1
- package/_standalone/components/agents/RecentActivityFeed.tsx +6 -6
- package/_standalone/components/agents/SkillDetailPopover.tsx +1 -1
- package/_standalone/components/ask/AskHeader.tsx +1 -1
- package/_standalone/components/echo/EchoHero.tsx +1 -1
- package/_standalone/components/echo/EchoPageSections.tsx +1 -1
- package/_standalone/components/explore/UseCaseCard.tsx +1 -1
- package/_standalone/components/home/InboxSection.tsx +262 -54
- package/_standalone/components/panels/AgentsPanel.tsx +4 -3
- package/_standalone/components/panels/AgentsPanelAgentDetail.tsx +1 -1
- package/_standalone/components/panels/AgentsPanelHubNav.tsx +10 -6
- package/_standalone/components/panels/PanelHeader.tsx +1 -1
- package/_standalone/components/renderers/audio/AudioRenderer.tsx +79 -0
- package/_standalone/components/renderers/image/ImageRenderer.tsx +203 -0
- package/_standalone/components/renderers/pdf/PdfRenderer.tsx +57 -0
- package/_standalone/components/renderers/video/VideoRenderer.tsx +91 -0
- package/_standalone/components/settings/McpTab.tsx +154 -28
- package/_standalone/components/settings/PluginsTab.tsx +1 -1
- package/_standalone/components/settings/SettingsContent.tsx +41 -7
- package/_standalone/components/settings/types.ts +7 -1
- package/_standalone/components/walkthrough/WalkthroughOverlay.tsx +40 -11
- package/_standalone/components/walkthrough/WalkthroughTooltip.tsx +1 -1
- package/_standalone/hooks/useAiOrganize.ts +14 -1
- package/_standalone/lib/organize-history.ts +6 -0
- package/_standalone/lib/stores/walkthrough-store.ts +33 -1
- package/_standalone/tsconfig.tsbuildinfo +1 -1
- package/app/app/api/ask/route.ts +193 -3
- package/app/app/api/file/raw/route.ts +121 -0
- package/app/app/api/file/route.ts +21 -0
- package/app/app/api/inbox/route.ts +38 -2
- package/app/app/api/mcp/status/route.ts +1 -0
- package/app/app/api/restart/route.ts +26 -21
- package/app/app/api/settings/route.ts +13 -0
- package/app/app/api/setup/route.ts +11 -1
- package/app/app/api/sync/route.ts +36 -13
- package/app/app/api/update/route.ts +24 -10
- package/app/app/global-error.tsx +3 -3
- package/app/app/globals.css +29 -3
- package/app/app/inbox/history/page.tsx +250 -0
- package/app/app/layout.tsx +5 -11
- package/app/app/login/page.tsx +1 -1
- package/app/app/view/[...path]/ViewPageClient.tsx +15 -10
- package/app/app/view/[...path]/not-found.tsx +1 -1
- package/app/app/view/[...path]/page.tsx +32 -1
- package/app/app/wiki/page.tsx +58 -0
- package/app/components/ActivityBar.tsx +9 -9
- package/app/components/AskFab.tsx +1 -1
- package/app/components/Backlinks.tsx +1 -1
- package/app/components/Breadcrumb.tsx +1 -1
- package/app/components/CreateSpaceModal.tsx +1 -1
- package/app/components/DirView.tsx +2 -2
- package/app/components/EchoSpotlight.tsx +14 -10
- package/app/components/Editor.tsx +1 -1
- package/app/components/ExportModal.tsx +3 -3
- package/app/components/FileTree.tsx +6 -11
- package/app/components/GuideCard.tsx +1 -1
- package/app/components/HomeContent.tsx +50 -39
- package/app/components/ImportModal.tsx +1 -2
- package/app/components/KeyboardShortcuts.tsx +1 -1
- package/app/components/MarkdownEditor.tsx +1 -1
- package/app/components/OnboardingView.tsx +2 -2
- package/app/components/OrganizeToast.tsx +3 -1
- package/app/components/Panel.tsx +27 -6
- package/app/components/Sidebar.tsx +1 -1
- package/app/components/SidebarLayout.tsx +30 -7
- package/app/components/SystemPulse.tsx +16 -16
- package/app/components/TrashPageClient.tsx +8 -6
- package/app/components/UpdateOverlay.tsx +1 -1
- package/app/components/WikiHomeContent.tsx +273 -0
- package/app/components/agents/AgentDetailContent.tsx +5 -5
- package/app/components/agents/AgentsContentPage.tsx +14 -3
- package/app/components/agents/AgentsOverviewSection.tsx +18 -92
- package/app/components/agents/AgentsPanelA2aTab.tsx +67 -66
- package/app/components/agents/AgentsPrimitives.tsx +1 -1
- package/app/components/agents/RecentActivityFeed.tsx +6 -6
- package/app/components/agents/SkillDetailPopover.tsx +1 -1
- package/app/components/agents/agents-content-model.ts +4 -1
- package/app/components/ask/AskHeader.tsx +1 -1
- package/app/components/changes/ChangesContentPage.tsx +10 -6
- package/app/components/echo/EchoHero.tsx +1 -1
- package/app/components/echo/EchoPageSections.tsx +1 -1
- package/app/components/explore/ExploreContent.tsx +1 -1
- package/app/components/explore/UseCaseCard.tsx +1 -1
- package/app/components/help/HelpContent.tsx +3 -3
- package/app/components/home/InboxSection.tsx +262 -54
- package/app/components/panels/AgentsPanel.tsx +4 -3
- package/app/components/panels/AgentsPanelAgentDetail.tsx +1 -1
- package/app/components/panels/AgentsPanelHubNav.tsx +10 -6
- package/app/components/panels/PanelHeader.tsx +1 -1
- package/app/components/renderers/audio/AudioRenderer.tsx +79 -0
- package/app/components/renderers/audio/manifest.ts +17 -0
- package/app/components/renderers/image/ImageRenderer.tsx +203 -0
- package/app/components/renderers/image/manifest.ts +17 -0
- package/app/components/renderers/pdf/PdfRenderer.tsx +57 -0
- package/app/components/renderers/pdf/manifest.ts +15 -0
- package/app/components/renderers/video/VideoRenderer.tsx +91 -0
- package/app/components/renderers/video/manifest.ts +17 -0
- package/app/components/settings/McpTab.tsx +154 -28
- package/app/components/settings/PluginsTab.tsx +1 -1
- package/app/components/settings/SettingsContent.tsx +41 -7
- package/app/components/settings/types.ts +7 -1
- package/app/components/setup/index.tsx +4 -3
- package/app/components/walkthrough/WalkthroughOverlay.tsx +40 -11
- package/app/components/walkthrough/WalkthroughTooltip.tsx +1 -1
- package/app/hooks/useAiOrganize.ts +14 -1
- package/app/lib/agent/model.ts +2 -1
- package/app/lib/core/inbox.ts +131 -2
- package/app/lib/core/pdf-text.ts +28 -0
- package/app/lib/core/search-index.ts +29 -5
- package/app/lib/core/tree.ts +6 -1
- package/app/lib/fs.ts +31 -3
- package/app/lib/i18n/modules/ai-chat.ts +42 -0
- package/app/lib/i18n/modules/knowledge.ts +30 -0
- package/app/lib/i18n/modules/navigation.ts +4 -2
- package/app/lib/i18n/modules/panels.ts +22 -4
- package/app/lib/i18n/modules/settings.ts +26 -0
- package/app/lib/organize-history.ts +6 -0
- package/app/lib/renderers/index.ts +5 -1
- package/app/lib/settings.ts +60 -0
- package/app/lib/stores/walkthrough-store.ts +33 -1
- package/bin/commands/doctor.js +12 -6
- package/bin/commands/file.js +7 -4
- package/bin/commands/logs.js +39 -4
- package/bin/commands/onboard.js +1 -1
- package/bin/commands/open.js +6 -1
- package/bin/commands/space.js +7 -4
- package/bin/commands/update.js +31 -29
- package/bin/lib/build.js +19 -8
- package/bin/lib/clean-env.js +38 -0
- package/bin/lib/cli-shim.js +67 -2
- package/bin/lib/config.js +4 -5
- package/bin/lib/gateway.js +51 -27
- package/bin/lib/jsonc.js +7 -2
- package/bin/lib/mcp-agents.js +26 -5
- package/bin/lib/path-expand.js +6 -3
- package/bin/lib/port.js +5 -1
- package/bin/lib/stop.js +98 -41
- package/bin/lib/sync.js +1 -1
- package/package.json +1 -1
- package/scripts/setup.js +7 -5
- package/_standalone/.next/server/chunks/2673.js +0 -52
- package/_standalone/.next/server/chunks/5648.js +0 -2
- package/_standalone/.next/server/chunks/8408.js +0 -219
- package/_standalone/.next/static/IiTZbEzZo8l5MSUxlDwKp/_buildManifest.js +0 -1
- package/_standalone/.next/static/chunks/1053-c519cb347faa75e2.js +0 -29
- package/_standalone/.next/static/chunks/1814.72f7fe7c61e2b647.js +0 -1
- package/_standalone/.next/static/chunks/362.4c226d7887d5f696.js +0 -1
- package/_standalone/.next/static/chunks/6357-c645842834c0d4cd.js +0 -1
- package/_standalone/.next/static/chunks/6981-3d7dcac2d12a5670.js +0 -1
- package/_standalone/.next/static/chunks/7035-032641fb6f4e07b2.js +0 -1
- package/_standalone/.next/static/chunks/7144-5febf62f1a79fe64.js +0 -1
- package/_standalone/.next/static/chunks/9602-423291fdb36396d1.js +0 -1
- package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-074d6aafc2606561.js +0 -1
- package/_standalone/.next/static/chunks/app/agents/page-710d8c80fa86e93e.js +0 -5
- package/_standalone/.next/static/chunks/app/api/a2a/discover/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/a2a/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/config/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/detect/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/install/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/registry/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/session/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/agent-activity/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/ask/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/ask-sessions/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/auth/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/backlinks/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/bootstrap/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/changes/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/export/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/extract-pdf/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/file/import/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/file/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/files/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/git/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/graph/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/health/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/inbox/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/init/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/agents/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/install/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/restart/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/status/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/uninstall/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/monitoring/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/recent-files/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/restart/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/search/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/settings/list-models/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/settings/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/settings/test-key/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/check-path/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/check-port/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/ls/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/skills/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/sync/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/tree-version/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/uninstall/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/update/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/update-check/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/update-status/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/workflows/route-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/changes/page-350992cf5091bc5b.js +0 -1
- package/_standalone/.next/static/chunks/app/echo/page-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/global-error-e1ad0e18236ba26c.js +0 -1
- package/_standalone/.next/static/chunks/app/help/page-2325d25b6846ca07.js +0 -1
- package/_standalone/.next/static/chunks/app/layout-e706f9a963b177ba.js +0 -186
- package/_standalone/.next/static/chunks/app/loading-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/page-2595175820acfd65.js +0 -7
- package/_standalone/.next/static/chunks/app/trash/page-61c6210fac1e9710.js +0 -1
- package/_standalone/.next/static/chunks/app/view/[...path]/loading-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/app/view/[...path]/not-found-61474670d6bb6116.js +0 -1
- package/_standalone/.next/static/chunks/app/view/[...path]/page-798359c36f10ef8d.js +0 -12
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-b07a5983e85bc5e3.js +0 -1
- package/_standalone/.next/static/css/bbf51803eade6c50.css +0 -31
- package/_standalone/.next/static/css/ef1151f74f00d91a.css +0 -1
- package/_standalone/lib/i18n/generated/explore-i18n.generated.ts +0 -138
- package/_standalone/lib/i18n/index.ts +0 -38
- package/_standalone/lib/i18n/modules/ai-chat.ts +0 -237
- package/_standalone/lib/i18n/modules/common.ts +0 -71
- package/_standalone/lib/i18n/modules/features.ts +0 -153
- package/_standalone/lib/i18n/modules/knowledge.ts +0 -727
- package/_standalone/lib/i18n/modules/navigation.ts +0 -157
- package/_standalone/lib/i18n/modules/onboarding.ts +0 -445
- package/_standalone/lib/i18n/modules/panels.ts +0 -1255
- package/_standalone/lib/i18n/modules/settings.ts +0 -889
- package/_standalone/lib/i18n.ts +0 -3
- /package/_standalone/.next/static/{IiTZbEzZo8l5MSUxlDwKp → 2hrwFOLEOZhHQHfrIt-Dw}/_ssgManifest.js +0 -0
|
@@ -7,6 +7,7 @@ import { useLocale } from '@/lib/stores/locale-store';
|
|
|
7
7
|
import { encodePath, relativeTime, extractEmoji, stripEmoji } from '@/lib/utils';
|
|
8
8
|
import { usePinnedFiles } from '@/lib/hooks/usePinnedFiles';
|
|
9
9
|
import OnboardingView from './OnboardingView';
|
|
10
|
+
import Logo from './Logo';
|
|
10
11
|
import GuideCard from './GuideCard';
|
|
11
12
|
import SystemPulse from './SystemPulse';
|
|
12
13
|
import { InboxSection } from './home/InboxSection';
|
|
@@ -78,13 +79,15 @@ interface SectionTitleProps {
|
|
|
78
79
|
|
|
79
80
|
function SectionTitle({ icon, children, count, action }: SectionTitleProps) {
|
|
80
81
|
return (
|
|
81
|
-
<div className="flex items-center gap-2 mb-
|
|
82
|
-
<
|
|
83
|
-
|
|
82
|
+
<div className="flex items-center gap-2.5 mb-5">
|
|
83
|
+
<div className="flex items-center justify-center w-6 h-6 rounded-md bg-[var(--amber-subtle)] text-[var(--amber)]">
|
|
84
|
+
{icon}
|
|
85
|
+
</div>
|
|
86
|
+
<h2 className="text-[13px] font-semibold text-foreground tracking-wide">
|
|
84
87
|
{children}
|
|
85
88
|
</h2>
|
|
86
89
|
{count != null && count > 0 && (
|
|
87
|
-
<span className="text-
|
|
90
|
+
<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>
|
|
88
91
|
)}
|
|
89
92
|
{action ? <div className="ml-auto">{action}</div> : null}
|
|
90
93
|
</div>
|
|
@@ -103,7 +106,7 @@ function ToggleButton({ expanded, onToggle, showLabel, hideLabel, className = ''
|
|
|
103
106
|
<button
|
|
104
107
|
onClick={onToggle}
|
|
105
108
|
aria-expanded={expanded}
|
|
106
|
-
className={`flex items-center gap-1.5 text-xs font-medium text-[var(--amber)] transition-colors hover:opacity-80 cursor-pointer
|
|
109
|
+
className={`flex items-center gap-1.5 text-xs font-medium text-[var(--amber)] transition-colors hover:opacity-80 cursor-pointer ${className}`}
|
|
107
110
|
>
|
|
108
111
|
<ChevronDown size={12} className={`transition-transform duration-200 ${expanded ? 'rotate-180' : ''}`} />
|
|
109
112
|
<span>{expanded ? hideLabel : showLabel}</span>
|
|
@@ -133,7 +136,7 @@ function FileRow({ filePath, mtime, formatTime, subPath }: {
|
|
|
133
136
|
<span className="text-sm truncate block text-foreground" suppressHydrationWarning>{name}</span>
|
|
134
137
|
{subPath && <span className="text-xs truncate block text-muted-foreground opacity-50" suppressHydrationWarning>{subPath}</span>}
|
|
135
138
|
</div>
|
|
136
|
-
<span className="text-xs shrink-0 tabular-nums
|
|
139
|
+
<span className="text-xs shrink-0 tabular-nums text-muted-foreground/40" suppressHydrationWarning>
|
|
137
140
|
{formatTime(mtime)}
|
|
138
141
|
</span>
|
|
139
142
|
</Link>
|
|
@@ -180,25 +183,25 @@ export default function HomeContent({ recent, existingFiles, spaces }: { recent:
|
|
|
180
183
|
<ExampleCleanupBanner />
|
|
181
184
|
|
|
182
185
|
{/* ══════════ Hero ══════════ */}
|
|
183
|
-
<div className="mb-
|
|
186
|
+
<div className="mb-14">
|
|
184
187
|
{/* Brand mark */}
|
|
185
|
-
<div className="flex items-center gap-
|
|
186
|
-
<
|
|
187
|
-
<h1 className="text-
|
|
188
|
-
|
|
188
|
+
<div className="flex items-center gap-5 mb-1">
|
|
189
|
+
<Logo id="home-hero" className="w-14 h-7 opacity-90" />
|
|
190
|
+
<h1 className="text-[2rem] font-brand leading-none">
|
|
191
|
+
<span className="text-foreground">Mind</span><span className="text-[var(--amber)]">OS</span>
|
|
189
192
|
</h1>
|
|
190
193
|
</div>
|
|
191
|
-
<p className="text-sm
|
|
194
|
+
<p className="text-sm text-muted-foreground/50 mt-3 max-w-md leading-relaxed">
|
|
192
195
|
{t.app.tagline}
|
|
193
196
|
</p>
|
|
194
197
|
|
|
195
198
|
{/* Command bar — the single most important action */}
|
|
196
|
-
<div className="w-full max-w-xl flex flex-col sm:flex-row items-stretch sm:items-center gap-2
|
|
199
|
+
<div className="w-full max-w-xl flex flex-col sm:flex-row items-stretch sm:items-center gap-2 mt-8">
|
|
197
200
|
<button
|
|
198
201
|
onClick={triggerAsk}
|
|
199
202
|
title="⌘/"
|
|
200
203
|
data-walkthrough="ask-button"
|
|
201
|
-
className="flex-1 flex items-center gap-3 px-4 py-3 rounded-xl border border-border/
|
|
204
|
+
className="flex-1 flex items-center gap-3 px-4 py-3.5 rounded-xl border border-border/50 shadow-sm bg-card/80 backdrop-blur-sm transition-all duration-200 hover:border-[var(--amber)]/40 hover:shadow-md hover:-translate-y-0.5 group"
|
|
202
205
|
>
|
|
203
206
|
<Sparkles size={16} className="shrink-0 text-[var(--amber)] group-hover:scale-110 transition-transform duration-150" />
|
|
204
207
|
<div className="flex-1 min-h-[1.5rem] flex items-center">
|
|
@@ -216,7 +219,7 @@ export default function HomeContent({ recent, existingFiles, spaces }: { recent:
|
|
|
216
219
|
<button
|
|
217
220
|
onClick={triggerSearch}
|
|
218
221
|
title="⌘K"
|
|
219
|
-
className="flex items-center gap-2 px-3.5 py-3 rounded-xl border border-border/
|
|
222
|
+
className="flex items-center gap-2 px-3.5 py-3.5 rounded-xl border border-border/50 text-sm text-muted-foreground transition-all duration-200 shrink-0 hover:bg-muted/60 hover:shadow-sm hover:-translate-y-0.5"
|
|
220
223
|
>
|
|
221
224
|
<Search size={14} />
|
|
222
225
|
<kbd className="hidden sm:inline-flex items-center px-1.5 py-0.5 rounded text-xs font-mono bg-muted">
|
|
@@ -226,10 +229,10 @@ export default function HomeContent({ recent, existingFiles, spaces }: { recent:
|
|
|
226
229
|
</div>
|
|
227
230
|
|
|
228
231
|
{/* Quick actions — only 2: New + Continue */}
|
|
229
|
-
<div className="flex items-center gap-3 mt-
|
|
232
|
+
<div className="flex items-center gap-3 mt-5">
|
|
230
233
|
<Link
|
|
231
234
|
href="/view/Untitled.md"
|
|
232
|
-
className="inline-flex items-center gap-2 px-
|
|
235
|
+
className="inline-flex items-center gap-2 px-4 py-2.5 rounded-lg text-sm font-medium transition-all duration-200 hover:shadow-md hover:-translate-y-0.5 bg-[var(--amber)] text-[var(--amber-foreground)]"
|
|
233
236
|
>
|
|
234
237
|
<FilePlus size={14} />
|
|
235
238
|
<span>{t.home.newNote}</span>
|
|
@@ -257,12 +260,15 @@ export default function HomeContent({ recent, existingFiles, spaces }: { recent:
|
|
|
257
260
|
<RecentActivityFeed />
|
|
258
261
|
</div>
|
|
259
262
|
|
|
263
|
+
{/* ── Visual divider ── */}
|
|
264
|
+
<div className="border-t border-border/30 mb-10" />
|
|
265
|
+
|
|
260
266
|
{/* ══════════ Inbox ══════════ */}
|
|
261
267
|
<InboxSection />
|
|
262
268
|
|
|
263
269
|
{/* ══════════ Spaces ══════════ */}
|
|
264
270
|
{(spaceList.length > 0 || true) && (
|
|
265
|
-
<section className="mb-
|
|
271
|
+
<section className="mb-12">
|
|
266
272
|
<SectionTitle
|
|
267
273
|
icon={<Brain size={14} />}
|
|
268
274
|
count={spaceList.length > 0 ? spaceList.length : undefined}
|
|
@@ -272,7 +278,7 @@ export default function HomeContent({ recent, existingFiles, spaces }: { recent:
|
|
|
272
278
|
</SectionTitle>
|
|
273
279
|
{spaceList.length > 0 ? (
|
|
274
280
|
<>
|
|
275
|
-
<div className="grid grid-cols-2 sm:grid-cols-3 gap-2">
|
|
281
|
+
<div className="grid grid-cols-2 sm:grid-cols-3 gap-2.5">
|
|
276
282
|
{(showAllSpaces ? spaceList : spaceList.slice(0, SPACES_PER_ROW)).map(s => {
|
|
277
283
|
const emoji = extractEmoji(s.name);
|
|
278
284
|
const label = stripEmoji(s.name);
|
|
@@ -281,10 +287,10 @@ export default function HomeContent({ recent, existingFiles, spaces }: { recent:
|
|
|
281
287
|
<Link
|
|
282
288
|
key={s.name}
|
|
283
289
|
href={`/view/${encodePath(s.path)}`}
|
|
284
|
-
className={`flex items-start gap-3 px-
|
|
290
|
+
className={`flex items-start gap-3 px-4 py-3.5 rounded-xl border transition-all duration-200 ${
|
|
285
291
|
isEmpty
|
|
286
292
|
? 'border-dashed border-border/50 opacity-50 hover:opacity-70'
|
|
287
|
-
: 'border-border hover:border-[var(--amber)]/30 hover:shadow-
|
|
293
|
+
: 'border-border/60 hover:border-[var(--amber)]/30 hover:shadow-md hover:-translate-y-0.5 bg-card/40'
|
|
288
294
|
}`}
|
|
289
295
|
>
|
|
290
296
|
{emoji ? (
|
|
@@ -326,16 +332,19 @@ export default function HomeContent({ recent, existingFiles, spaces }: { recent:
|
|
|
326
332
|
{/* ══════════ Pinned Files ══════════ */}
|
|
327
333
|
<PinnedFilesSection formatTime={formatTime} />
|
|
328
334
|
|
|
335
|
+
{/* ── Visual divider ── */}
|
|
336
|
+
<div className="border-t border-border/30 mb-10" />
|
|
337
|
+
|
|
329
338
|
{/* ══════════ Recently Edited ══════════ */}
|
|
330
339
|
{recent.length > 0 && (
|
|
331
|
-
<section className="mb-
|
|
340
|
+
<section className="mb-12">
|
|
332
341
|
<SectionTitle
|
|
333
342
|
icon={<Clock size={14} />}
|
|
334
343
|
count={recent.length}
|
|
335
344
|
action={
|
|
336
345
|
<Link
|
|
337
346
|
href="/changes"
|
|
338
|
-
className="flex items-center gap-1.5 text-xs font-medium text-[var(--amber)] transition-colors hover:opacity-80
|
|
347
|
+
className="flex items-center gap-1.5 text-xs font-medium text-[var(--amber)] transition-colors hover:opacity-80"
|
|
339
348
|
>
|
|
340
349
|
<History size={12} />
|
|
341
350
|
<span>{t.home.changeHistory}</span>
|
|
@@ -357,7 +366,7 @@ export default function HomeContent({ recent, existingFiles, spaces }: { recent:
|
|
|
357
366
|
className="flex items-center gap-2 px-1 py-1.5 rounded-lg group transition-colors hover:bg-muted/50"
|
|
358
367
|
>
|
|
359
368
|
<Folder size={14} className="shrink-0 text-[var(--amber)]" />
|
|
360
|
-
<span className="text-xs font-semibold
|
|
369
|
+
<span className="text-xs font-semibold text-foreground group-hover:text-[var(--amber)] transition-colors" suppressHydrationWarning>
|
|
361
370
|
{group.space}
|
|
362
371
|
</span>
|
|
363
372
|
<span className="text-xs text-muted-foreground/50 tabular-nums" suppressHydrationWarning>
|
|
@@ -369,7 +378,7 @@ export default function HomeContent({ recent, existingFiles, spaces }: { recent:
|
|
|
369
378
|
</span>
|
|
370
379
|
)}
|
|
371
380
|
</Link>
|
|
372
|
-
<div className="flex flex-col gap-0.5 ml-2 border-l border-border/
|
|
381
|
+
<div className="flex flex-col gap-0.5 ml-2 border-l-2 border-border/20 pl-3">
|
|
373
382
|
{visibleFiles.map(({ path: filePath, mtime }) => (
|
|
374
383
|
<FileRow
|
|
375
384
|
key={filePath}
|
|
@@ -388,11 +397,11 @@ export default function HomeContent({ recent, existingFiles, spaces }: { recent:
|
|
|
388
397
|
<div>
|
|
389
398
|
<div className="flex items-center gap-2 px-1 py-1.5">
|
|
390
399
|
<FileText size={14} className="shrink-0 text-muted-foreground/50" />
|
|
391
|
-
<span className="text-xs font-semibold
|
|
400
|
+
<span className="text-xs font-semibold text-muted-foreground/60">
|
|
392
401
|
{t.home.other}
|
|
393
402
|
</span>
|
|
394
403
|
</div>
|
|
395
|
-
<div className="flex flex-col gap-0.5 ml-2 border-l border-border/
|
|
404
|
+
<div className="flex flex-col gap-0.5 ml-2 border-l-2 border-border/20 pl-3">
|
|
396
405
|
{rootFiles.map(({ path: filePath, mtime }) => (
|
|
397
406
|
<FileRow key={filePath} filePath={filePath} mtime={mtime} formatTime={formatTime} />
|
|
398
407
|
))}
|
|
@@ -412,7 +421,7 @@ export default function HomeContent({ recent, existingFiles, spaces }: { recent:
|
|
|
412
421
|
</div>
|
|
413
422
|
) : (
|
|
414
423
|
<div className="relative pl-4">
|
|
415
|
-
<div className="absolute left-0 top-1 bottom-1 w-
|
|
424
|
+
<div className="absolute left-0 top-1 bottom-1 w-0.5 rounded-full bg-gradient-to-b from-[var(--amber)]/20 via-border/30 to-transparent" />
|
|
416
425
|
<div className="flex flex-col gap-0.5">
|
|
417
426
|
{(showAll ? recent : recent.slice(0, 5)).map(({ path: filePath, mtime }, idx) => {
|
|
418
427
|
const isCSV = filePath.endsWith('.csv');
|
|
@@ -422,10 +431,10 @@ export default function HomeContent({ recent, existingFiles, spaces }: { recent:
|
|
|
422
431
|
<div key={filePath} className="relative group">
|
|
423
432
|
<div
|
|
424
433
|
aria-hidden="true"
|
|
425
|
-
className={`absolute -left-
|
|
434
|
+
className={`absolute -left-[5px] top-1/2 -translate-y-1/2 rounded-full transition-all duration-200 group-hover:scale-125 ${
|
|
426
435
|
idx === 0
|
|
427
|
-
? 'w-2 h-2 bg-[var(--amber)] ring-
|
|
428
|
-
: 'w-1.5 h-1.5 bg-muted-foreground/
|
|
436
|
+
? 'w-2.5 h-2.5 bg-[var(--amber)] ring-[3px] ring-[var(--amber)]/15 shadow-sm shadow-[var(--amber)]/20'
|
|
437
|
+
: 'w-1.5 h-1.5 bg-muted-foreground/25 group-hover:bg-[var(--amber)]/50'
|
|
429
438
|
}`}
|
|
430
439
|
/>
|
|
431
440
|
<Link
|
|
@@ -440,7 +449,7 @@ export default function HomeContent({ recent, existingFiles, spaces }: { recent:
|
|
|
440
449
|
<span className="text-sm truncate block text-foreground" suppressHydrationWarning>{name}</span>
|
|
441
450
|
{dir && <span className="text-xs truncate block text-muted-foreground/40" suppressHydrationWarning>{dir}</span>}
|
|
442
451
|
</div>
|
|
443
|
-
<span className="text-xs shrink-0 tabular-nums
|
|
452
|
+
<span className="text-xs shrink-0 tabular-nums text-muted-foreground/40" suppressHydrationWarning>
|
|
444
453
|
{formatTime(mtime)}
|
|
445
454
|
</span>
|
|
446
455
|
</Link>
|
|
@@ -463,8 +472,8 @@ export default function HomeContent({ recent, existingFiles, spaces }: { recent:
|
|
|
463
472
|
)}
|
|
464
473
|
|
|
465
474
|
{/* Footer */}
|
|
466
|
-
<div className="
|
|
467
|
-
<
|
|
475
|
+
<div className="mt-6 py-8 border-t border-border/20 flex items-center justify-center gap-2 text-[11px] text-muted-foreground/25">
|
|
476
|
+
<Logo id="home-footer" className="w-5 h-2.5 opacity-30" />
|
|
468
477
|
<span>{t.app.footer}</span>
|
|
469
478
|
</div>
|
|
470
479
|
</div>
|
|
@@ -482,12 +491,14 @@ function PinnedFilesSection({ formatTime }: { formatTime: (t: number) => string
|
|
|
482
491
|
<SectionTitle icon={<Star size={14} />}>
|
|
483
492
|
{t.pinnedFiles.title}
|
|
484
493
|
</SectionTitle>
|
|
485
|
-
<div className="py-
|
|
486
|
-
<
|
|
487
|
-
|
|
494
|
+
<div className="py-8 px-6 rounded-xl border border-border/40 bg-card/30 text-center">
|
|
495
|
+
<div className="inline-flex items-center justify-center w-10 h-10 rounded-full bg-[var(--amber-subtle)] mb-3">
|
|
496
|
+
<Star size={18} className="text-[var(--amber)]/60" />
|
|
497
|
+
</div>
|
|
498
|
+
<p className="text-sm font-medium text-muted-foreground/70 mb-1">
|
|
488
499
|
{t.pinnedFiles.empty ?? 'No pinned files'}
|
|
489
500
|
</p>
|
|
490
|
-
<p className="text-xs text-muted-foreground/
|
|
501
|
+
<p className="text-xs text-muted-foreground/40 max-w-xs mx-auto leading-relaxed">
|
|
491
502
|
{t.pinnedFiles.emptyHint ?? 'Click the star icon on any file to pin it here'}
|
|
492
503
|
</p>
|
|
493
504
|
</div>
|
|
@@ -541,7 +552,7 @@ function CreateSpaceButton({ t }: { t: ReturnType<typeof useLocale>['t'] }) {
|
|
|
541
552
|
return (
|
|
542
553
|
<button
|
|
543
554
|
onClick={() => window.dispatchEvent(new Event('mindos:create-space'))}
|
|
544
|
-
className="flex items-center gap-1.5 text-xs font-medium text-[var(--amber)] transition-colors hover:opacity-80 cursor-pointer
|
|
555
|
+
className="flex items-center gap-1.5 text-xs font-medium text-[var(--amber)] transition-colors hover:opacity-80 cursor-pointer"
|
|
545
556
|
>
|
|
546
557
|
<Plus size={12} />
|
|
547
558
|
<span>{t.home.newSpace}</span>
|
|
@@ -114,8 +114,7 @@ export default function ImportModal({ open, onClose, defaultSpace, initialFiles,
|
|
|
114
114
|
const prompt = attachments.length === 1
|
|
115
115
|
? (t.fileImport.digestPromptSingle as (name: string, space?: string) => string)(attachments[0].name, space)
|
|
116
116
|
: (t.fileImport.digestPromptMulti as (n: number, space?: string) => string)(attachments.length, space);
|
|
117
|
-
|
|
118
|
-
aiOrganize.start(attachments, prompt);
|
|
117
|
+
aiOrganize.start(attachments, prompt, 'import-modal');
|
|
119
118
|
onClose();
|
|
120
119
|
im.reset();
|
|
121
120
|
}
|
|
@@ -54,7 +54,7 @@ export default function KeyboardShortcuts() {
|
|
|
54
54
|
>
|
|
55
55
|
{/* Header */}
|
|
56
56
|
<div className="flex items-center justify-between px-5 py-3.5 border-b border-border">
|
|
57
|
-
<span className="text-sm font-medium
|
|
57
|
+
<span className="text-sm font-medium text-foreground">{s.title}</span>
|
|
58
58
|
<button
|
|
59
59
|
onClick={() => setOpen(false)}
|
|
60
60
|
className="p-1 rounded hover:bg-muted text-muted-foreground hover:text-foreground transition-colors"
|
|
@@ -35,7 +35,7 @@ export default function MarkdownEditor({ value, onChange, viewMode, onViewModeCh
|
|
|
35
35
|
<button
|
|
36
36
|
key={m.id}
|
|
37
37
|
onClick={() => onViewModeChange(m.id)}
|
|
38
|
-
className={`flex items-center gap-1.5 px-2.5 py-1.5 rounded text-xs font-medium transition-colors
|
|
38
|
+
className={`flex items-center gap-1.5 px-2.5 py-1.5 rounded text-xs font-medium transition-colors ${
|
|
39
39
|
viewMode === m.id
|
|
40
40
|
? 'bg-card text-foreground shadow-sm'
|
|
41
41
|
: 'text-muted-foreground hover:text-foreground'
|
|
@@ -64,7 +64,7 @@ export default function OnboardingView() {
|
|
|
64
64
|
<div className="text-center mb-10">
|
|
65
65
|
<div className="inline-flex items-center gap-2 mb-4">
|
|
66
66
|
<Sparkles size={18} className="text-[var(--amber)]" />
|
|
67
|
-
<h1 className="text-2xl font-
|
|
67
|
+
<h1 className="text-2xl font-brand text-foreground">
|
|
68
68
|
MindOS
|
|
69
69
|
</h1>
|
|
70
70
|
</div>
|
|
@@ -131,7 +131,7 @@ export default function OnboardingView() {
|
|
|
131
131
|
</div>
|
|
132
132
|
|
|
133
133
|
{/* Import hint */}
|
|
134
|
-
<p className="text-center text-xs leading-relaxed max-w-sm mx-auto
|
|
134
|
+
<p className="text-center text-xs leading-relaxed max-w-sm mx-auto text-muted-foreground/60">
|
|
135
135
|
{ob.importHint}
|
|
136
136
|
</p>
|
|
137
137
|
<p className="text-center mt-2">
|
|
@@ -119,10 +119,12 @@ export default function OrganizeToast({
|
|
|
119
119
|
undone: c.undone,
|
|
120
120
|
})),
|
|
121
121
|
status: 'completed',
|
|
122
|
+
source: aiOrganize.source,
|
|
123
|
+
durationMs: aiOrganize.durationMs,
|
|
122
124
|
});
|
|
123
125
|
onHistoryUpdate?.();
|
|
124
126
|
}
|
|
125
|
-
}, [isDone, aiOrganize.changes, aiOrganize.sourceFileNames, onHistoryUpdate]);
|
|
127
|
+
}, [isDone, aiOrganize.changes, aiOrganize.sourceFileNames, aiOrganize.source, aiOrganize.durationMs, onHistoryUpdate]);
|
|
126
128
|
|
|
127
129
|
// Auto-dismiss timer (3 min after done, reset on user interaction)
|
|
128
130
|
const resetTimer = useCallback(() => {
|
package/app/components/Panel.tsx
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { useMemo, useState, useRef, useEffect, useCallback } from 'react';
|
|
4
4
|
import { useRouter } from 'next/navigation';
|
|
5
|
-
import { ChevronsDownUp, ChevronsUpDown, Plus, Import, FileText, Layers, MoreHorizontal, Eye, EyeOff, Trash2 } from 'lucide-react';
|
|
5
|
+
import { ChevronsDownUp, ChevronsUpDown, Plus, Import, FileText, Layers, MoreHorizontal, Eye, EyeOff, Trash2, Inbox } from 'lucide-react';
|
|
6
6
|
import type { PanelId } from './ActivityBar';
|
|
7
7
|
import type { FileNode } from '@/lib/types';
|
|
8
8
|
import FileTree, { setShowHiddenFiles, useShowHiddenFiles } from './FileTree';
|
|
@@ -128,14 +128,25 @@ export default function Panel({
|
|
|
128
128
|
};
|
|
129
129
|
}, [morePopover]);
|
|
130
130
|
|
|
131
|
-
|
|
131
|
+
const [inboxCount, setInboxCount] = useState(0);
|
|
132
|
+
|
|
132
133
|
useEffect(() => {
|
|
133
|
-
const
|
|
134
|
+
const fetchTrash = () => {
|
|
134
135
|
listTrashAction().then(items => setTrashCount(items.length)).catch(() => {});
|
|
135
136
|
};
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
137
|
+
const fetchInbox = () => {
|
|
138
|
+
fetch('/api/inbox').then(r => r.json()).then(d => {
|
|
139
|
+
if (Array.isArray(d.files)) setInboxCount(d.files.length);
|
|
140
|
+
}).catch(() => {});
|
|
141
|
+
};
|
|
142
|
+
fetchTrash();
|
|
143
|
+
fetchInbox();
|
|
144
|
+
window.addEventListener('mindos:files-changed', fetchTrash);
|
|
145
|
+
window.addEventListener('mindos:inbox-updated', fetchInbox);
|
|
146
|
+
return () => {
|
|
147
|
+
window.removeEventListener('mindos:files-changed', fetchTrash);
|
|
148
|
+
window.removeEventListener('mindos:inbox-updated', fetchInbox);
|
|
149
|
+
};
|
|
139
150
|
}, []);
|
|
140
151
|
|
|
141
152
|
// Double-click hint: show only until user has used it once.
|
|
@@ -280,6 +291,16 @@ export default function Panel({
|
|
|
280
291
|
{showHidden && <span className="text-[var(--amber)] text-xs">✓</span>}
|
|
281
292
|
</button>
|
|
282
293
|
<div className="my-1 border-t border-border/50" />
|
|
294
|
+
<button
|
|
295
|
+
className="w-full flex items-center gap-2 px-3 py-1.5 text-sm text-foreground hover:bg-muted transition-colors text-left"
|
|
296
|
+
onClick={() => { setMorePopover(false); router.push('/view/Inbox/'); }}
|
|
297
|
+
>
|
|
298
|
+
<Inbox size={14} className="shrink-0 text-[var(--amber)]" />
|
|
299
|
+
<span className="flex-1">{t.sidebar.capture}</span>
|
|
300
|
+
{inboxCount > 0 && (
|
|
301
|
+
<span className="text-xs font-medium text-[var(--amber)] tabular-nums">{inboxCount}</span>
|
|
302
|
+
)}
|
|
303
|
+
</button>
|
|
283
304
|
<button
|
|
284
305
|
className="w-full flex items-center gap-2 px-3 py-1.5 text-sm text-foreground hover:bg-muted transition-colors text-left"
|
|
285
306
|
onClick={() => { setMorePopover(false); router.push('/trash'); }}
|
|
@@ -94,7 +94,7 @@ export default function Sidebar({ fileTree, collapsed = false, onCollapse, onExp
|
|
|
94
94
|
<div className="flex items-center justify-between px-4 py-4 border-b border-border shrink-0">
|
|
95
95
|
<Link href="/" className="flex items-center gap-2 hover:opacity-80 transition-opacity">
|
|
96
96
|
<Logo id="desktop" />
|
|
97
|
-
<span className="
|
|
97
|
+
<span className="text-foreground text-sm font-brand">MindOS</span>
|
|
98
98
|
</Link>
|
|
99
99
|
{/* Mobile close */}
|
|
100
100
|
<button onClick={() => setMobileOpen(false)} className="md:hidden p-1 rounded hover:bg-muted text-muted-foreground hover:text-foreground transition-colors">
|
|
@@ -184,12 +184,14 @@ export default function SidebarLayout({ fileTree, children }: SidebarLayoutProps
|
|
|
184
184
|
}, [handleOpenImport]);
|
|
185
185
|
|
|
186
186
|
// ── Inbox: batch AI organize from InboxSection ──
|
|
187
|
+
const organizedFileNamesRef = useRef<string[]>([]);
|
|
187
188
|
useEffect(() => {
|
|
188
189
|
const handler = (e: Event) => {
|
|
189
190
|
const files = (e as CustomEvent).detail?.files as Array<{ name: string; path: string }> | undefined;
|
|
190
191
|
if (!files || files.length === 0 || aiOrganize.phase === 'organizing') return;
|
|
191
192
|
|
|
192
193
|
const prompt = t.inbox.organizePrompt(files.map(f => f.name));
|
|
194
|
+
organizedFileNamesRef.current = files.map(f => f.name);
|
|
193
195
|
|
|
194
196
|
(async () => {
|
|
195
197
|
const attachments: Array<{ name: string; content: string }> = [];
|
|
@@ -203,7 +205,7 @@ export default function SidebarLayout({ fileTree, children }: SidebarLayoutProps
|
|
|
203
205
|
} catch { /* skip unreadable files */ }
|
|
204
206
|
}
|
|
205
207
|
if (attachments.length > 0) {
|
|
206
|
-
aiOrganize.start(attachments, prompt);
|
|
208
|
+
aiOrganize.start(attachments, prompt, 'inbox-organize');
|
|
207
209
|
} else {
|
|
208
210
|
toast.error(t.inbox.organizeFailed, 4000);
|
|
209
211
|
window.dispatchEvent(new Event('mindos:organize-done'));
|
|
@@ -214,12 +216,28 @@ export default function SidebarLayout({ fileTree, children }: SidebarLayoutProps
|
|
|
214
216
|
return () => window.removeEventListener('mindos:inbox-organize', handler);
|
|
215
217
|
}, [aiOrganize, t]);
|
|
216
218
|
|
|
217
|
-
// Notify InboxSection when organize finishes
|
|
219
|
+
// Notify InboxSection when organize finishes + clean up source inbox files
|
|
218
220
|
useEffect(() => {
|
|
219
|
-
if (aiOrganize.phase === 'done'
|
|
221
|
+
if (aiOrganize.phase === 'done') {
|
|
222
|
+
const hasSuccessfulChanges = aiOrganize.changes.some(c => c.ok);
|
|
223
|
+
const names = organizedFileNamesRef.current;
|
|
224
|
+
if (hasSuccessfulChanges && names.length > 0) {
|
|
225
|
+
fetch('/api/inbox', {
|
|
226
|
+
method: 'DELETE',
|
|
227
|
+
headers: { 'Content-Type': 'application/json' },
|
|
228
|
+
body: JSON.stringify({ names }),
|
|
229
|
+
})
|
|
230
|
+
.then(() => {
|
|
231
|
+
window.dispatchEvent(new Event('mindos:inbox-updated'));
|
|
232
|
+
})
|
|
233
|
+
.catch(() => { /* best-effort cleanup */ });
|
|
234
|
+
organizedFileNamesRef.current = [];
|
|
235
|
+
}
|
|
236
|
+
window.dispatchEvent(new Event('mindos:organize-done'));
|
|
237
|
+
} else if (aiOrganize.phase === 'error') {
|
|
220
238
|
window.dispatchEvent(new Event('mindos:organize-done'));
|
|
221
239
|
}
|
|
222
|
-
}, [aiOrganize.phase]);
|
|
240
|
+
}, [aiOrganize.phase, aiOrganize.changes]);
|
|
223
241
|
|
|
224
242
|
// Listen for cross-component "open panel" events (e.g. GuideCard → Agents)
|
|
225
243
|
useEffect(() => {
|
|
@@ -381,7 +399,7 @@ export default function SidebarLayout({ fileTree, children }: SidebarLayoutProps
|
|
|
381
399
|
{/* Skip link */}
|
|
382
400
|
<a
|
|
383
401
|
href="#main-content"
|
|
384
|
-
className="sr-only focus:not-sr-only focus:fixed focus:top-2 focus:left-2 focus:z-[60] focus:px-4 focus:py-2 focus:rounded-lg focus:text-sm focus:font-medium
|
|
402
|
+
className="sr-only focus:not-sr-only focus:fixed focus:top-2 focus:left-2 focus:z-[60] focus:px-4 focus:py-2 focus:rounded-lg focus:text-sm focus:font-medium bg-[var(--amber)] text-[var(--amber-foreground)]"
|
|
385
403
|
>
|
|
386
404
|
Skip to main content
|
|
387
405
|
</a>
|
|
@@ -406,6 +424,11 @@ export default function SidebarLayout({ fileTree, children }: SidebarLayoutProps
|
|
|
406
424
|
lp.setActivePanel(wasActive ? null : 'discover');
|
|
407
425
|
if (!wasActive) router.push('/explore');
|
|
408
426
|
}}
|
|
427
|
+
onSpacesClick={() => {
|
|
428
|
+
const wasActive = lp.activePanel === 'files';
|
|
429
|
+
lp.setActivePanel(wasActive ? null : 'files');
|
|
430
|
+
if (!wasActive) router.push('/wiki');
|
|
431
|
+
}}
|
|
409
432
|
syncStatus={syncStatus}
|
|
410
433
|
expanded={lp.railExpanded}
|
|
411
434
|
onExpandedChange={handleExpandedChange}
|
|
@@ -509,7 +532,7 @@ export default function SidebarLayout({ fileTree, children }: SidebarLayoutProps
|
|
|
509
532
|
</button>
|
|
510
533
|
<Link href="/" className="flex items-center gap-2 hover:opacity-80 transition-opacity">
|
|
511
534
|
<Logo id="mobile" />
|
|
512
|
-
<span className="
|
|
535
|
+
<span className="text-foreground text-sm font-brand">MindOS</span>
|
|
513
536
|
</Link>
|
|
514
537
|
<div className="flex items-center gap-0.5">
|
|
515
538
|
<button onClick={openSyncSettings} className="p-3 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground transition-colors active:bg-accent flex items-center justify-center" aria-label="Sync status">
|
|
@@ -529,7 +552,7 @@ export default function SidebarLayout({ fileTree, children }: SidebarLayoutProps
|
|
|
529
552
|
<div className="flex items-center justify-between px-4 py-4 border-b border-border shrink-0">
|
|
530
553
|
<Link href="/" className="flex items-center gap-2 hover:opacity-80 transition-opacity">
|
|
531
554
|
<Logo id="drawer" />
|
|
532
|
-
<span className="
|
|
555
|
+
<span className="text-foreground text-sm font-brand">MindOS</span>
|
|
533
556
|
</Link>
|
|
534
557
|
<button onClick={() => setMobileOpen(false)} className="p-1 rounded hover:bg-muted text-muted-foreground hover:text-foreground transition-colors">
|
|
535
558
|
<X size={16} />
|
|
@@ -78,14 +78,14 @@ export default function SystemPulse() {
|
|
|
78
78
|
return (
|
|
79
79
|
<section className="mb-10">
|
|
80
80
|
{/* Use same title style as other sections */}
|
|
81
|
-
<div className="flex items-center gap-2 mb-
|
|
82
|
-
<
|
|
83
|
-
<h2 className="text-
|
|
81
|
+
<div className="flex items-center gap-2.5 mb-5">
|
|
82
|
+
<div className="flex items-center justify-center w-6 h-6 rounded-md bg-[var(--amber-subtle)] text-[var(--amber)]"><Bot size={13} /></div>
|
|
83
|
+
<h2 className="text-[13px] font-semibold text-foreground tracking-wide">{pulse.title}</h2>
|
|
84
84
|
</div>
|
|
85
|
-
<div className="rounded-xl border border-
|
|
85
|
+
<div className="rounded-xl border border-border/40 bg-card/30 p-5">
|
|
86
86
|
<div className="flex items-center gap-4">
|
|
87
|
-
<div className="w-
|
|
88
|
-
<Bot size={
|
|
87
|
+
<div className="w-10 h-10 rounded-full bg-[var(--amber-subtle)] flex items-center justify-center shrink-0">
|
|
88
|
+
<Bot size={18} className="text-[var(--amber)]" />
|
|
89
89
|
</div>
|
|
90
90
|
<div className="flex-1 min-w-0">
|
|
91
91
|
<p className="text-sm font-medium text-foreground">{pulse.connectTitle}</p>
|
|
@@ -114,10 +114,10 @@ export default function SystemPulse() {
|
|
|
114
114
|
onClick={toggleCollapsed}
|
|
115
115
|
className="w-full flex items-center gap-2 group cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded"
|
|
116
116
|
>
|
|
117
|
-
<
|
|
118
|
-
<h2 className="text-
|
|
117
|
+
<div className="flex items-center justify-center w-6 h-6 rounded-md bg-[var(--amber-subtle)] text-[var(--amber)]"><Bot size={13} /></div>
|
|
118
|
+
<h2 className="text-[13px] font-semibold text-foreground tracking-wide">{pulse.title}</h2>
|
|
119
119
|
{totalConnected > 0 && (
|
|
120
|
-
<span className="text-
|
|
120
|
+
<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">{totalConnected}</span>
|
|
121
121
|
)}
|
|
122
122
|
{/* Inline status */}
|
|
123
123
|
<div className="flex items-center gap-2 ml-1">
|
|
@@ -144,11 +144,11 @@ export default function SystemPulse() {
|
|
|
144
144
|
return (
|
|
145
145
|
<section className="mb-10">
|
|
146
146
|
{/* Section title — same pattern as Spaces / Recently Edited */}
|
|
147
|
-
<div className="flex items-center gap-2 mb-
|
|
148
|
-
<
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
147
|
+
<div className="flex items-center gap-2.5 mb-5">
|
|
148
|
+
<div className="flex items-center justify-center w-6 h-6 rounded-md bg-[var(--amber-subtle)] text-[var(--amber)]"><Bot size={13} /></div>
|
|
149
|
+
<h2 className="text-[13px] font-semibold text-foreground tracking-wide">{pulse.title}</h2>
|
|
150
|
+
{totalConnected > 0 && (
|
|
151
|
+
<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">{totalConnected}</span>
|
|
152
152
|
)}
|
|
153
153
|
{mcpRunning && (
|
|
154
154
|
<span className="inline-flex items-center gap-1 text-xs text-muted-foreground/50 ml-1">
|
|
@@ -159,7 +159,7 @@ export default function SystemPulse() {
|
|
|
159
159
|
<div className="flex items-center gap-2 ml-auto">
|
|
160
160
|
<Link
|
|
161
161
|
href="/agents"
|
|
162
|
-
className="text-xs font-medium text-[var(--amber)] hover:opacity-80 transition-opacity
|
|
162
|
+
className="text-xs font-medium text-[var(--amber)] hover:opacity-80 transition-opacity"
|
|
163
163
|
>
|
|
164
164
|
{pulse.manage}
|
|
165
165
|
</Link>
|
|
@@ -181,7 +181,7 @@ export default function SystemPulse() {
|
|
|
181
181
|
<Link
|
|
182
182
|
key={agent.key}
|
|
183
183
|
href={`/agents/${encodeURIComponent(agent.key)}`}
|
|
184
|
-
className="flex items-center gap-3 px-3.5 py-3 rounded-xl border border-border hover:border-[var(--amber)]/30 hover:shadow-
|
|
184
|
+
className="flex items-center gap-3 px-3.5 py-3 rounded-xl border border-border hover:border-[var(--amber)]/30 hover:shadow-md hover:-translate-y-0.5 transition-all duration-200 hover:bg-muted/30 cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
|
|
185
185
|
>
|
|
186
186
|
{/* Avatar */}
|
|
187
187
|
<div className="relative w-8 h-8 rounded-lg bg-[var(--amber)]/8 text-[var(--amber-text)] ring-1 ring-[var(--amber)]/15 flex items-center justify-center text-xs font-semibold font-display shrink-0">
|
|
@@ -96,7 +96,7 @@ export default function TrashPageClient({ initialItems }: { initialItems: TrashM
|
|
|
96
96
|
<div className="content-width xl:mr-[220px] rounded-xl border border-border bg-card px-4 py-3 md:px-5 md:py-4">
|
|
97
97
|
<div className="flex flex-wrap items-start justify-between gap-3">
|
|
98
98
|
<div className="min-w-0">
|
|
99
|
-
<div className="flex items-center gap-2 text-sm font-medium text-foreground
|
|
99
|
+
<div className="flex items-center gap-2 text-sm font-medium text-foreground">
|
|
100
100
|
<Trash2 size={15} />
|
|
101
101
|
{t.trash.title}
|
|
102
102
|
</div>
|
|
@@ -126,10 +126,12 @@ export default function TrashPageClient({ initialItems }: { initialItems: TrashM
|
|
|
126
126
|
<div className="px-4 md:px-6 py-4 md:py-6">
|
|
127
127
|
<div className="content-width xl:mr-[220px]">
|
|
128
128
|
{items.length === 0 ? (
|
|
129
|
-
<div className="rounded-xl border border-
|
|
130
|
-
<
|
|
131
|
-
|
|
132
|
-
|
|
129
|
+
<div className="rounded-xl border border-border/40 bg-card/30 p-12 text-center">
|
|
130
|
+
<div className="inline-flex items-center justify-center w-12 h-12 rounded-full bg-muted/60 mb-4">
|
|
131
|
+
<Trash2 size={22} className="text-muted-foreground/40" />
|
|
132
|
+
</div>
|
|
133
|
+
<p className="text-sm font-medium text-muted-foreground/70">{t.trash.empty}</p>
|
|
134
|
+
<p className="text-xs text-muted-foreground/40 mt-1 max-w-xs mx-auto leading-relaxed">{t.trash.emptySubtext}</p>
|
|
133
135
|
</div>
|
|
134
136
|
) : (
|
|
135
137
|
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3">
|
|
@@ -227,7 +229,7 @@ export default function TrashPageClient({ initialItems }: { initialItems: TrashM
|
|
|
227
229
|
<div className="bg-card border border-border rounded-xl shadow-xl max-w-sm w-full mx-4 p-5">
|
|
228
230
|
<div className="flex items-center gap-2 mb-3">
|
|
229
231
|
<AlertTriangle size={16} className="text-[var(--amber)]" />
|
|
230
|
-
<h3 className="text-sm font-semibold
|
|
232
|
+
<h3 className="text-sm font-semibold">{t.trash.restoreConflict}</h3>
|
|
231
233
|
</div>
|
|
232
234
|
<p className="text-xs text-muted-foreground mb-4">
|
|
233
235
|
"{conflictItem.fileName}" — {conflictItem.originalPath}
|