@geminilight/mindos 0.6.67 → 0.6.70
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 +26 -25
- 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 +7 -7
- 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 +1 -1
- 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.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.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.js +1 -1
- package/_standalone/.next/server/app/api/acp/session/route.js.nft.json +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.nft.json +1 -1
- package/_standalone/.next/server/app/api/agents/copy-skill/route_client-reference-manifest.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_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/ask/route.js +17 -17
- 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/channels/verify/route.js +1 -0
- package/_standalone/.next/server/app/api/channels/verify/route.js.nft.json +1 -0
- package/_standalone/.next/server/app/api/channels/verify/route_client-reference-manifest.js +1 -0
- package/_standalone/.next/server/app/api/connect/route_client-reference-manifest.js +1 -1
- 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.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.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.nft.json +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.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/im/config/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/im/status/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/im/test/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/inbox/clip/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/inbox/clip/route_client-reference-manifest.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/lint/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/lint/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/direct-tools/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/tools/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/uninstall/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/monitoring/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/recent-files/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/search/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/list-models/route.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_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/space-overview/route.js +2 -2
- package/_standalone/.next/server/app/api/space-overview/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/space-overview/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.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/workflows/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/changelog/page.js +1 -1
- package/_standalone/.next/server/app/changelog/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/changelog/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/changes/page.js +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +26 -25
- package/_standalone/.next/server/chunks/3437.js +2 -2
- package/_standalone/.next/server/chunks/5299.js +1 -0
- package/_standalone/.next/server/chunks/6022.js +39 -39
- package/_standalone/.next/server/chunks/6133.js +54 -0
- package/_standalone/.next/server/chunks/6539.js +1 -1
- package/_standalone/.next/server/chunks/8326.js +1 -0
- package/_standalone/.next/server/chunks/8388.js +5 -3
- package/_standalone/.next/server/chunks/953.js +6 -4
- package/_standalone/.next/server/chunks/9938.js +24 -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/chunks/1814.8a1fef15856dce84.js +1 -0
- package/_standalone/.next/static/chunks/2654-e07c692d6c99f25b.js +1 -0
- package/_standalone/.next/static/chunks/{2935.7d75923daaf448d3.js → 2935.9b08eeade3644806.js} +1 -1
- package/_standalone/.next/static/chunks/3269.a7343771e3f0ff58.js +48 -0
- package/_standalone/.next/static/chunks/3637.2b2697198968d83f.js +1 -0
- package/_standalone/.next/static/chunks/{5550-b7c97fc13628db15.js → 4327-d70a8d457e2d03fe.js} +1 -1
- package/_standalone/.next/static/chunks/48-c88ea6a2a45f15b4.js +28 -0
- package/_standalone/.next/static/chunks/5581-6d403608b5dfb20b.js +29 -0
- package/_standalone/.next/static/chunks/6902-edc5c487c696bd0b.js +3 -0
- package/_standalone/.next/static/chunks/808.72eb7bdd399e9a24.js +1 -0
- package/_standalone/.next/static/chunks/app/.well-known/agent-card.json/{route-e0c1e2c67572781c.js → route-930dfa67e2789df5.js} +1 -1
- package/_standalone/.next/static/chunks/app/_global-error/{page-e0c1e2c67572781c.js → page-930dfa67e2789df5.js} +1 -1
- package/_standalone/.next/static/chunks/app/agents/page-3dc2bf2f6bc7334c.js +1 -0
- package/_standalone/.next/static/chunks/app/api/a2a/agents/{route-e0c1e2c67572781c.js → route-930dfa67e2789df5.js} +1 -1
- package/_standalone/.next/static/chunks/app/api/a2a/delegations/{route-e0c1e2c67572781c.js → route-930dfa67e2789df5.js} +1 -1
- package/_standalone/.next/static/chunks/app/api/a2a/discover/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/a2a/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/config/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/detect/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/install/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/registry/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/session/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/agent-activity/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/agents/copy-skill/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/agents/custom/detect/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/agents/custom/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/ask/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/ask-sessions/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/auth/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/backlinks/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/bootstrap/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/changes/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/channels/verify/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/connect/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/export/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/extract-pdf/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/file/import/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/file/raw/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/file/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/files/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/git/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/graph/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/health/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/im/config/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/im/status/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/im/test/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/inbox/clip/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/inbox/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/init/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/lint/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/agents/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/direct-tools/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/install/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/restart/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/status/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/tools/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/uninstall/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/monitoring/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/recent-files/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/restart/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/search/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/settings/list-models/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/settings/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/settings/test-key/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/check-path/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/check-port/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/ls/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/skills/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/space-overview/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/sync/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/tree-version/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/uninstall/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/update/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/update-check/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/update-status/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/api/workflows/route-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/changes/page-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/echo/[segment]/page-75a6330292613587.js +157 -0
- package/_standalone/.next/static/chunks/app/echo/page-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/{layout-9bb19a959ffb87ac.js → layout-8aa53b34ef34a246.js} +28 -28
- package/_standalone/.next/static/chunks/app/loading-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/{page-c3be6477dbcf182d.js → page-318332501426ef5b.js} +1 -1
- package/_standalone/.next/static/chunks/app/trash/page-17bd5aedcfea9b65.js +1 -0
- package/_standalone/.next/static/chunks/app/view/[...path]/loading-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/app/view/[...path]/page-d5c37c41c556013d.js +12 -0
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-930dfa67e2789df5.js +1 -0
- package/_standalone/.next/static/chunks/webpack-1c2d44f6d86f3986.js +1 -0
- package/_standalone/.next/static/css/a8cadde78aea8585.css +1 -0
- package/_standalone/.next/static/ixCTELNH6V05Z00pC6ZMO/_buildManifest.js +1 -0
- package/_standalone/.next/trace +72 -71
- package/_standalone/.next/types/routes.d.ts +2 -1
- package/_standalone/.next/types/validator.ts +9 -0
- package/_standalone/MINDOS_ARCHITECTURE_DIAGRAM.md +488 -0
- package/_standalone/MINDOS_EXPLORATION_SUMMARY.md +229 -0
- package/_standalone/MINDOS_INFRASTRUCTURE_ANALYSIS.md +732 -0
- package/_standalone/__tests__/acp/agent-descriptors.test.ts +101 -3
- package/_standalone/__tests__/acp/registry.test.ts +34 -5
- package/_standalone/__tests__/acp/session.test.ts +346 -167
- package/_standalone/__tests__/agent/provider-endpoints.test.ts +70 -0
- package/_standalone/__tests__/api/channels-verify.test.ts +75 -0
- package/_standalone/__tests__/api/extract-pdf.test.ts +265 -0
- package/_standalone/__tests__/api/test-key.test.ts +15 -3
- package/_standalone/__tests__/channel-mgmt.test.js +11 -0
- package/_standalone/__tests__/components/breadcrumb-header-ux.test.ts +14 -0
- package/_standalone/__tests__/components/header-toc-vertical-alignment.test.ts +23 -0
- package/_standalone/__tests__/components/table-of-contents-header-layout.test.ts +15 -0
- package/_standalone/__tests__/components/view-page-header-layout.test.ts +13 -0
- package/_standalone/__tests__/components/view-page-header-scroll-stability.test.ts +34 -0
- package/_standalone/__tests__/core/hybrid-search.test.ts +109 -0
- package/_standalone/components/Breadcrumb.tsx +10 -10
- package/_standalone/components/FindInPage.tsx +1 -1
- package/_standalone/components/MarkdownView.tsx +4 -0
- package/_standalone/components/Panel.tsx +17 -10
- package/_standalone/components/TableOfContents.tsx +9 -9
- package/_standalone/components/agents/AgentsContentChannelDetail.tsx +168 -54
- package/_standalone/components/agents/AgentsContentChannels.tsx +22 -22
- package/_standalone/components/ask/AskContent.tsx +68 -28
- package/_standalone/components/ask/AskHeader.tsx +6 -2
- package/_standalone/components/ask/ProviderModelCapsule.tsx +11 -9
- package/_standalone/components/ask/SessionHistoryPanel.tsx +398 -0
- package/_standalone/components/panels/AgentsPanel.tsx +8 -1
- package/_standalone/components/settings/AiTab.tsx +5 -1
- package/_standalone/components/settings/KnowledgeTab.tsx +92 -1
- package/_standalone/components/settings/McpConnectGuides.tsx +4 -0
- package/_standalone/components/settings/McpPortSection.tsx +207 -0
- package/_standalone/components/settings/McpTab.tsx +1 -5
- package/_standalone/components/settings/TestButton.tsx +1 -0
- package/_standalone/components/settings/{ServerPortsCard.tsx → WebPortSection.tsx} +66 -151
- package/_standalone/components/settings/types.ts +12 -0
- package/_standalone/components/settings/useCustomProviderForm.ts +2 -2
- package/_standalone/data/skills/mindos/SKILL.md +45 -1
- package/_standalone/hooks/useAcpDetection.ts +1 -1
- package/_standalone/hooks/useAcpRegistry.ts +1 -1
- package/_standalone/hooks/useFileImport.ts +7 -2
- package/_standalone/hooks/useFileUpload.ts +17 -10
- package/_standalone/lib/acp/index.ts +4 -6
- package/_standalone/lib/acp/types.ts +0 -29
- package/_standalone/lib/im/platforms.ts +6 -2
- package/_standalone/lib/pdf-extract.ts +6 -2
- package/_standalone/package-lock.json +12 -2
- package/_standalone/package.json +2 -1
- package/_standalone/tsconfig.tsbuildinfo +1 -1
- package/app/MINDOS_ARCHITECTURE_DIAGRAM.md +488 -0
- package/app/MINDOS_EXPLORATION_SUMMARY.md +229 -0
- package/app/MINDOS_INFRASTRUCTURE_ANALYSIS.md +732 -0
- package/app/app/api/acp/detect/route.ts +9 -15
- package/app/app/api/channels/verify/route.ts +54 -0
- package/app/app/api/extract-pdf/route.ts +17 -3
- package/app/app/api/settings/list-models/route.ts +40 -44
- package/app/app/api/settings/route.ts +16 -0
- package/app/app/api/settings/test-key/route.ts +5 -2
- package/app/app/view/[...path]/ViewPageClient.tsx +1 -1
- package/app/components/Breadcrumb.tsx +10 -10
- package/app/components/DirView.tsx +1 -1
- package/app/components/FindInPage.tsx +1 -1
- package/app/components/InboxView.tsx +2 -2
- package/app/components/MarkdownView.tsx +4 -0
- package/app/components/Panel.tsx +17 -10
- package/app/components/TableOfContents.tsx +9 -9
- package/app/components/agents/AgentsContentChannelDetail.tsx +168 -54
- package/app/components/agents/AgentsContentChannels.tsx +22 -22
- package/app/components/ask/AskContent.tsx +68 -28
- package/app/components/ask/AskHeader.tsx +6 -2
- package/app/components/ask/ProviderModelCapsule.tsx +11 -9
- package/app/components/ask/SessionHistoryPanel.tsx +398 -0
- package/app/components/panels/AgentsPanel.tsx +8 -1
- package/app/components/settings/AiTab.tsx +5 -1
- package/app/components/settings/KnowledgeTab.tsx +92 -1
- package/app/components/settings/McpConnectGuides.tsx +4 -0
- package/app/components/settings/McpPortSection.tsx +207 -0
- package/app/components/settings/McpTab.tsx +1 -5
- package/app/components/settings/TestButton.tsx +1 -0
- package/app/components/settings/{ServerPortsCard.tsx → WebPortSection.tsx} +66 -151
- package/app/components/settings/types.ts +12 -0
- package/app/components/settings/useCustomProviderForm.ts +2 -2
- package/app/data/skills/mindos/SKILL.md +45 -1
- package/app/hooks/useAcpDetection.ts +1 -1
- package/app/hooks/useAcpRegistry.ts +1 -1
- package/app/hooks/useFileImport.ts +7 -2
- package/app/hooks/useFileUpload.ts +17 -10
- package/app/lib/acp/agent-descriptors.ts +69 -29
- package/app/lib/acp/index.ts +4 -6
- package/app/lib/acp/registry.ts +43 -47
- package/app/lib/acp/session.ts +253 -517
- package/app/lib/acp/subprocess.ts +249 -414
- package/app/lib/acp/types.ts +0 -29
- package/app/lib/agent/model.ts +20 -4
- package/app/lib/agent/non-streaming.ts +37 -20
- package/app/lib/agent/providers.ts +31 -0
- package/app/lib/agent/tools.ts +5 -3
- package/app/lib/core/embedding-index.ts +285 -0
- package/app/lib/core/embedding-provider.ts +164 -0
- package/app/lib/core/hybrid-search.ts +160 -0
- package/app/lib/core/search.ts +11 -21
- package/app/lib/i18n/modules/ai-chat.ts +26 -0
- package/app/lib/i18n/modules/panels.ts +14 -0
- package/app/lib/i18n/modules/settings.ts +2 -0
- package/app/lib/im/platforms.ts +6 -2
- package/app/lib/im/verify.ts +94 -0
- package/app/lib/pdf-extract.ts +6 -2
- package/app/lib/settings.ts +23 -0
- package/app/package.json +2 -1
- package/bin/cli.js +3 -1
- package/bin/commands/channel.js +342 -0
- package/bin/commands/update.js +11 -4
- package/bin/lib/build.js +34 -16
- package/bin/lib/channel-config.js +168 -0
- package/bin/lib/channel-constants.js +88 -0
- package/bin/lib/channel-mgmt.js +244 -0
- package/bin/lib/channel-prompts.js +72 -0
- package/bin/lib/channel-validate.js +57 -0
- package/bin/lib/safe-rm.js +165 -0
- package/package.json +1 -1
- package/skills/mindos/SKILL.md +45 -1
- package/_standalone/.next/server/chunks/1750.js +0 -1
- package/_standalone/.next/server/chunks/8947.js +0 -52
- package/_standalone/.next/static/0JtsgqDZLSJ6MrIZIV6gC/_buildManifest.js +0 -1
- package/_standalone/.next/static/chunks/1814.a79b84d37df75c43.js +0 -1
- package/_standalone/.next/static/chunks/3637.38c4f28d8f698e0e.js +0 -1
- package/_standalone/.next/static/chunks/4351-9ab695985bb808ad.js +0 -1
- package/_standalone/.next/static/chunks/476.463546c195b89cce.js +0 -48
- package/_standalone/.next/static/chunks/5133-3779d65f4fdfb041.js +0 -30
- package/_standalone/.next/static/chunks/5581-4dd3d32f6e8606ec.js +0 -29
- package/_standalone/.next/static/chunks/5998.7bd28de9747440b5.js +0 -1
- package/_standalone/.next/static/chunks/app/agents/page-4c0637183e46c8d3.js +0 -1
- package/_standalone/.next/static/chunks/app/api/a2a/discover/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/a2a/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/config/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/detect/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/install/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/registry/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/session/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/agent-activity/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/agents/copy-skill/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/agents/custom/detect/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/agents/custom/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/ask/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/ask-sessions/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/auth/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/backlinks/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/bootstrap/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/changes/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/connect/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/export/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/extract-pdf/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/file/import/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/file/raw/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/file/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/files/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/git/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/graph/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/health/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/im/config/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/im/status/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/im/test/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/inbox/clip/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/inbox/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/init/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/lint/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/agents/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/direct-tools/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/install/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/restart/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/status/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/tools/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/uninstall/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/monitoring/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/recent-files/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/restart/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/search/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/settings/list-models/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/settings/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/settings/test-key/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/check-path/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/check-port/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/ls/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/skills/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/space-overview/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/sync/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/tree-version/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/uninstall/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/update/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/update-check/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/update-status/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/api/workflows/route-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/changes/page-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/echo/[segment]/page-5333ab47257fab7f.js +0 -159
- package/_standalone/.next/static/chunks/app/echo/page-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/loading-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/trash/page-bebb28bf472cf691.js +0 -1
- package/_standalone/.next/static/chunks/app/view/[...path]/loading-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/app/view/[...path]/page-dd5698f3df138835.js +0 -12
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-e0c1e2c67572781c.js +0 -1
- package/_standalone/.next/static/chunks/webpack-043f40ef7816d8c4.js +0 -1
- package/_standalone/.next/static/css/8b1f248d6540e52f.css +0 -1
- package/_standalone/lib/core/__tests__/synonym-dict.test.ts +0 -82
- package/app/lib/core/__tests__/synonym-dict.test.ts +0 -82
- package/app/lib/core/synonym-dict.ts +0 -139
- /package/_standalone/.next/static/{0JtsgqDZLSJ6MrIZIV6gC → ixCTELNH6V05Z00pC6ZMO}/_ssgManifest.js +0 -0
|
@@ -2,8 +2,7 @@ export const dynamic = 'force-dynamic';
|
|
|
2
2
|
|
|
3
3
|
import { NextResponse } from 'next/server';
|
|
4
4
|
import { exec } from 'child_process';
|
|
5
|
-
import {
|
|
6
|
-
import { getDescriptorBinary, getDescriptorInstallCmd, resolveAgentCommand } from '@/lib/acp/agent-descriptors';
|
|
5
|
+
import { getDetectableAgents, resolveAgentCommand } from '@/lib/acp/agent-descriptors';
|
|
7
6
|
import { readSettings } from '@/lib/settings';
|
|
8
7
|
import { handleRouteErrorSimple } from '@/lib/errors';
|
|
9
8
|
|
|
@@ -43,8 +42,6 @@ function whichBatch(binaries: string[]): Promise<Map<string, string | null>> {
|
|
|
43
42
|
const unique = [...new Set(binaries)];
|
|
44
43
|
if (unique.length === 0) return Promise.resolve(new Map());
|
|
45
44
|
|
|
46
|
-
// Build a shell snippet: for each binary, print path or empty line
|
|
47
|
-
// e.g. `which gemini 2>/dev/null || echo ""; which claude 2>/dev/null || echo ""`
|
|
48
45
|
const script = unique
|
|
49
46
|
.map(bin => `which ${bin} 2>/dev/null || echo ""`)
|
|
50
47
|
.join('; ');
|
|
@@ -53,7 +50,6 @@ function whichBatch(binaries: string[]): Promise<Map<string, string | null>> {
|
|
|
53
50
|
exec(script, { encoding: 'utf-8', timeout: 3000 }, (err, stdout) => {
|
|
54
51
|
const map = new Map<string, string | null>();
|
|
55
52
|
if (err) {
|
|
56
|
-
// On total failure, mark all as not found
|
|
57
53
|
for (const bin of unique) map.set(bin, null);
|
|
58
54
|
resolve(map);
|
|
59
55
|
return;
|
|
@@ -77,22 +73,22 @@ export async function GET(req: Request) {
|
|
|
77
73
|
return NextResponse.json(detectCache.data);
|
|
78
74
|
}
|
|
79
75
|
|
|
80
|
-
|
|
76
|
+
// Pure local detection — no CDN fetch, instant response
|
|
77
|
+
const agents = getDetectableAgents();
|
|
81
78
|
const settings = readSettings();
|
|
82
79
|
|
|
83
|
-
const binaryNames = agents.map(
|
|
80
|
+
const binaryNames = [...new Set(agents.map(a => a.binary))];
|
|
84
81
|
const whichMap = await whichBatch(binaryNames);
|
|
85
82
|
|
|
86
83
|
const installed: InstalledAgent[] = [];
|
|
87
84
|
const notInstalled: NotInstalledAgent[] = [];
|
|
88
85
|
|
|
89
86
|
for (const agent of agents) {
|
|
90
|
-
const
|
|
91
|
-
const binaryPath = binary ? (whichMap.get(binary) ?? null) : null;
|
|
87
|
+
const binaryPath = whichMap.get(agent.binary) ?? null;
|
|
92
88
|
|
|
93
89
|
if (binaryPath) {
|
|
94
90
|
const userOverride = settings.acpAgents?.[agent.id];
|
|
95
|
-
const resolved = resolveAgentCommand(agent.id,
|
|
91
|
+
const resolved = resolveAgentCommand(agent.id, undefined, userOverride);
|
|
96
92
|
installed.push({
|
|
97
93
|
id: agent.id,
|
|
98
94
|
name: agent.name,
|
|
@@ -100,14 +96,12 @@ export async function GET(req: Request) {
|
|
|
100
96
|
resolvedCommand: { cmd: resolved.cmd, args: resolved.args, source: resolved.source },
|
|
101
97
|
});
|
|
102
98
|
} else {
|
|
103
|
-
const installCmd
|
|
104
|
-
getDescriptorInstallCmd(agent.id) ??
|
|
105
|
-
(agent.packageName ? `npm install -g ${agent.packageName}` : '');
|
|
99
|
+
const packageName = agent.installCmd?.match(/npm install -g (.+)/)?.[1];
|
|
106
100
|
notInstalled.push({
|
|
107
101
|
id: agent.id,
|
|
108
102
|
name: agent.name,
|
|
109
|
-
installCmd,
|
|
110
|
-
packageName
|
|
103
|
+
installCmd: agent.installCmd ?? (packageName ? `npm install -g ${packageName}` : ''),
|
|
104
|
+
packageName,
|
|
111
105
|
});
|
|
112
106
|
}
|
|
113
107
|
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export const dynamic = 'force-dynamic';
|
|
2
|
+
|
|
3
|
+
import { NextRequest, NextResponse } from 'next/server';
|
|
4
|
+
import { validatePlatformConfig } from '@/lib/im/config';
|
|
5
|
+
import { verifyIMCredentials } from '@/lib/im/verify';
|
|
6
|
+
import { handleRouteErrorSimple } from '@/lib/errors';
|
|
7
|
+
|
|
8
|
+
const SUPPORTED_PLATFORMS = new Set([
|
|
9
|
+
'telegram',
|
|
10
|
+
'discord',
|
|
11
|
+
'feishu',
|
|
12
|
+
'slack',
|
|
13
|
+
'wecom',
|
|
14
|
+
'dingtalk',
|
|
15
|
+
'wechat',
|
|
16
|
+
'qq',
|
|
17
|
+
]);
|
|
18
|
+
|
|
19
|
+
export async function POST(req: NextRequest) {
|
|
20
|
+
try {
|
|
21
|
+
const body = await req.json() as { platform?: string; credentials?: unknown };
|
|
22
|
+
const platform = body.platform;
|
|
23
|
+
const credentials = body.credentials;
|
|
24
|
+
|
|
25
|
+
if (!platform || !SUPPORTED_PLATFORMS.has(platform)) {
|
|
26
|
+
return NextResponse.json({ ok: false, error: 'Invalid platform' }, { status: 400 });
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (!credentials || typeof credentials !== 'object') {
|
|
30
|
+
return NextResponse.json({ ok: false, error: 'Missing credentials' }, { status: 400 });
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const validation = validatePlatformConfig(platform as any, credentials);
|
|
34
|
+
if (!validation.valid) {
|
|
35
|
+
return NextResponse.json(
|
|
36
|
+
{ ok: false, error: `Missing required fields: ${validation.missing?.join(', ') || 'unknown'}` },
|
|
37
|
+
{ status: 400 },
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const result = await verifyIMCredentials(platform as any, credentials);
|
|
42
|
+
if (!result.ok) {
|
|
43
|
+
return NextResponse.json({ ok: false, error: result.error || 'Credential verification failed' }, { status: 401 });
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return NextResponse.json({
|
|
47
|
+
ok: true,
|
|
48
|
+
botName: result.botName,
|
|
49
|
+
botId: result.botId,
|
|
50
|
+
});
|
|
51
|
+
} catch (err) {
|
|
52
|
+
return handleRouteErrorSimple(err);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -28,7 +28,7 @@ function truncateText(text: string): { result: string; truncated: boolean } {
|
|
|
28
28
|
* resolution at runtime. Running the extraction in a plain Node process
|
|
29
29
|
* avoids the bundler entirely.
|
|
30
30
|
*/
|
|
31
|
-
function extractPdf(buf: Buffer): { text: string; pages: number } {
|
|
31
|
+
function extractPdf(buf: Buffer): { text: string; pages: number; error?: string } {
|
|
32
32
|
const scriptPath = resolveScript('extract-pdf.cjs');
|
|
33
33
|
if (!scriptPath) {
|
|
34
34
|
throw new Error(
|
|
@@ -73,7 +73,21 @@ export async function POST(req: NextRequest) {
|
|
|
73
73
|
return NextResponse.json({ error: 'PDF is too large (max 12MB)' }, { status: 400 });
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
-
const { text: rawText, pages } = extractPdf(raw);
|
|
76
|
+
const { text: rawText, pages, error: extractError } = extractPdf(raw);
|
|
77
|
+
|
|
78
|
+
// If extraction failed, return error state
|
|
79
|
+
if (extractError) {
|
|
80
|
+
return NextResponse.json({
|
|
81
|
+
name,
|
|
82
|
+
text: '',
|
|
83
|
+
extracted: 'error' as const,
|
|
84
|
+
extractionError: extractError,
|
|
85
|
+
truncated: false,
|
|
86
|
+
totalChars: 0,
|
|
87
|
+
pagesParsed: pages ?? 0,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
|
|
77
91
|
const text = rawText.replace(/\u0000/g, '').trim();
|
|
78
92
|
const totalChars = text.length;
|
|
79
93
|
const { result: finalText, truncated } = truncateText(text);
|
|
@@ -81,7 +95,7 @@ export async function POST(req: NextRequest) {
|
|
|
81
95
|
return NextResponse.json({
|
|
82
96
|
name,
|
|
83
97
|
text: finalText,
|
|
84
|
-
extracted: text.length > 0,
|
|
98
|
+
extracted: text.length > 0 ? 'success' : 'empty',
|
|
85
99
|
truncated,
|
|
86
100
|
totalChars,
|
|
87
101
|
pagesParsed: pages,
|
|
@@ -2,7 +2,7 @@ export const dynamic = 'force-dynamic';
|
|
|
2
2
|
import { NextRequest, NextResponse } from 'next/server';
|
|
3
3
|
import { getModels as piGetModels } from '@mariozechner/pi-ai';
|
|
4
4
|
import { effectiveAiConfig, readSettings } from '@/lib/settings';
|
|
5
|
-
import { type ProviderId, isProviderId, PROVIDER_PRESETS, toPiProvider, getDefaultBaseUrl } from '@/lib/agent/providers';
|
|
5
|
+
import { type ProviderId, isProviderId, PROVIDER_PRESETS, toPiProvider, getDefaultBaseUrl, getProviderApiType, buildCompatEndpointCandidates } from '@/lib/agent/providers';
|
|
6
6
|
import { isProviderEntryId, findProvider } from '@/lib/custom-endpoints';
|
|
7
7
|
import { handleRouteErrorSimple } from '@/lib/errors';
|
|
8
8
|
|
|
@@ -96,63 +96,59 @@ function getRegistryModels(provider: ProviderId): string[] {
|
|
|
96
96
|
}
|
|
97
97
|
|
|
98
98
|
async function fetchModels(provider: ProviderId, apiKey: string, baseUrl: string, signal: AbortSignal): Promise<string[]> {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
const endpoint = resolveListModelsUrl(provider, baseUrl);
|
|
104
|
-
return fetchOpenAICompatModels(endpoint, apiKey, signal);
|
|
99
|
+
const apiType = getProviderApiType(provider);
|
|
100
|
+
const endpoints = resolveListModelsUrls(provider, baseUrl, apiType);
|
|
101
|
+
return fetchCompatModels(endpoints, apiKey, apiType, signal);
|
|
105
102
|
}
|
|
106
103
|
|
|
107
|
-
function
|
|
104
|
+
function resolveListModelsUrls(provider: ProviderId, baseUrl: string, apiType: string): string[] {
|
|
108
105
|
if (baseUrl) {
|
|
109
|
-
return baseUrl
|
|
106
|
+
return buildCompatEndpointCandidates(baseUrl, '/models', apiType);
|
|
110
107
|
}
|
|
111
108
|
|
|
112
109
|
const base = getDefaultBaseUrl(provider);
|
|
113
110
|
if (base) {
|
|
114
|
-
return base
|
|
111
|
+
return buildCompatEndpointCandidates(base, '/models', apiType);
|
|
115
112
|
}
|
|
116
113
|
|
|
117
|
-
return 'https://api.openai.com/v1/models';
|
|
114
|
+
return ['https://api.openai.com/v1/models'];
|
|
118
115
|
}
|
|
119
116
|
|
|
120
|
-
async function
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
117
|
+
async function fetchCompatModels(
|
|
118
|
+
endpoints: string[], apiKey: string, apiType: string, signal: AbortSignal,
|
|
119
|
+
): Promise<string[]> {
|
|
120
|
+
let lastError = 'No endpoint candidates';
|
|
121
|
+
const attempted: string[] = [];
|
|
122
|
+
|
|
123
|
+
for (const endpoint of endpoints) {
|
|
124
|
+
attempted.push(endpoint);
|
|
125
|
+
const headers: Record<string, string> = {};
|
|
126
|
+
if (apiType === 'anthropic-messages') {
|
|
127
|
+
if (apiKey) headers['x-api-key'] = apiKey;
|
|
128
|
+
headers['anthropic-version'] = '2023-06-01';
|
|
129
|
+
} else if (apiKey) {
|
|
130
|
+
headers['Authorization'] = `Bearer ${apiKey}`;
|
|
131
|
+
}
|
|
133
132
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
}
|
|
133
|
+
const res = await fetch(endpoint, { headers, signal });
|
|
134
|
+
if (!res.ok) {
|
|
135
|
+
const errBody = await res.text().catch(() => '');
|
|
136
|
+
lastError = `HTTP ${res.status} @ ${endpoint}: ${errBody.slice(0, 200)}`;
|
|
137
|
+
if (res.status === 404) continue;
|
|
138
|
+
throw new Error(`Failed to list models: ${lastError}`);
|
|
139
|
+
}
|
|
140
140
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
if (apiKey) headers['Authorization'] = `Bearer ${apiKey}`;
|
|
146
|
-
const res = await fetch(endpoint, { headers, signal });
|
|
141
|
+
const json = await res.json();
|
|
142
|
+
if (Array.isArray(json?.data)) {
|
|
143
|
+
return json.data.map((m: any) => m.id as string).filter(Boolean).sort();
|
|
144
|
+
}
|
|
147
145
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
}
|
|
146
|
+
if (Array.isArray(json?.models)) {
|
|
147
|
+
return json.models.map((m: any) => (typeof m === 'string' ? m : m?.id)).filter(Boolean).sort();
|
|
148
|
+
}
|
|
152
149
|
|
|
153
|
-
|
|
154
|
-
if (Array.isArray(json?.data)) {
|
|
155
|
-
return json.data.map((m: any) => m.id as string).filter(Boolean).sort();
|
|
150
|
+
throw new Error(`Failed to list models: incompatible response shape from ${endpoint}; tried ${attempted.join(' , ')}`);
|
|
156
151
|
}
|
|
157
|
-
|
|
152
|
+
|
|
153
|
+
throw new Error(`Failed to list models: ${lastError}; tried ${attempted.join(' , ')}`);
|
|
158
154
|
}
|
|
@@ -5,6 +5,7 @@ import { invalidateCache } from '@/lib/fs';
|
|
|
5
5
|
import { ALL_PROVIDER_IDS, getApiKeyEnvVar, getApiKeyFromEnv } from '@/lib/agent/providers';
|
|
6
6
|
import { parseProviders } from '@/lib/custom-endpoints';
|
|
7
7
|
import { handleRouteErrorSimple } from '@/lib/errors';
|
|
8
|
+
import { getEmbeddingStatus } from '@/lib/core/hybrid-search';
|
|
8
9
|
|
|
9
10
|
function maskToken(token: string | undefined): string {
|
|
10
11
|
if (!token) return '';
|
|
@@ -41,6 +42,8 @@ export async function GET() {
|
|
|
41
42
|
activeProvider: settings.ai.activeProvider,
|
|
42
43
|
providers: settings.ai.providers,
|
|
43
44
|
},
|
|
45
|
+
embedding: settings.embedding ?? { enabled: false, baseUrl: '', apiKey: '', model: '' },
|
|
46
|
+
embeddingStatus: getEmbeddingStatus(),
|
|
44
47
|
mindRoot: settings.mindRoot,
|
|
45
48
|
webPassword: settings.webPassword ?? '',
|
|
46
49
|
authToken: maskToken(settings.authToken),
|
|
@@ -73,6 +76,18 @@ export async function POST(req: NextRequest) {
|
|
|
73
76
|
? (incomingAuthToken === '' ? '' : current.authToken)
|
|
74
77
|
: current.authToken;
|
|
75
78
|
|
|
79
|
+
// Handle embedding config
|
|
80
|
+
let resolvedEmbedding = current.embedding;
|
|
81
|
+
if (body.embedding && typeof body.embedding === 'object') {
|
|
82
|
+
const e = body.embedding;
|
|
83
|
+
resolvedEmbedding = {
|
|
84
|
+
enabled: (e as any).enabled === true,
|
|
85
|
+
baseUrl: typeof (e as any).baseUrl === 'string' ? (e as any).baseUrl : '',
|
|
86
|
+
apiKey: typeof (e as any).apiKey === 'string' ? (e as any).apiKey : '',
|
|
87
|
+
model: typeof (e as any).model === 'string' ? (e as any).model : '',
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
76
91
|
// Handle connectionMode: validate if provided, otherwise keep existing
|
|
77
92
|
let resolvedConnectionMode = current.connectionMode ?? { cli: true, mcp: false };
|
|
78
93
|
if (body.connectionMode && typeof body.connectionMode === 'object') {
|
|
@@ -87,6 +102,7 @@ export async function POST(req: NextRequest) {
|
|
|
87
102
|
|
|
88
103
|
const next: ServerSettings = {
|
|
89
104
|
ai: resolvedAi,
|
|
105
|
+
embedding: resolvedEmbedding,
|
|
90
106
|
mindRoot: body.mindRoot ?? current.mindRoot,
|
|
91
107
|
agent: body.agent ?? current.agent,
|
|
92
108
|
webPassword: resolvedWebPassword,
|
|
@@ -9,7 +9,7 @@ import { handleRouteErrorSimple } from '@/lib/errors';
|
|
|
9
9
|
|
|
10
10
|
const TIMEOUT = 15_000;
|
|
11
11
|
|
|
12
|
-
type ErrorCode = 'auth_error' | 'model_not_found' | 'rate_limited' | 'network_error' | 'unknown';
|
|
12
|
+
type ErrorCode = 'auth_error' | 'model_not_found' | 'endpoint_error' | 'rate_limited' | 'network_error' | 'unknown';
|
|
13
13
|
|
|
14
14
|
function classifyPiAiError(err: unknown): { code: ErrorCode; error: string } {
|
|
15
15
|
const msg = err instanceof Error ? err.message : String(err);
|
|
@@ -24,7 +24,10 @@ function classifyPiAiError(err: unknown): { code: ErrorCode; error: string } {
|
|
|
24
24
|
|| lower.includes('api key') && (lower.includes('not valid') || lower.includes('incorrect')))
|
|
25
25
|
return { code: 'auth_error', error: 'Invalid API key' };
|
|
26
26
|
|
|
27
|
-
if (lower.includes('404') || lower.includes('not found') || lower.includes('
|
|
27
|
+
if (lower.includes('404') || lower.includes('page not found') || lower.includes('invalid url'))
|
|
28
|
+
return { code: 'endpoint_error', error: `Endpoint or protocol mismatch: ${msg.slice(0, 200)}` };
|
|
29
|
+
|
|
30
|
+
if (lower.includes('model') && (lower.includes('not found') || lower.includes('does not exist')))
|
|
28
31
|
return { code: 'model_not_found', error: `Model not found: ${msg.slice(0, 200)}` };
|
|
29
32
|
|
|
30
33
|
if (lower.includes('429') || lower.includes('rate') || lower.includes('quota'))
|
|
@@ -359,7 +359,7 @@ export default function ViewPageClient({
|
|
|
359
359
|
<div className="flex flex-col min-h-screen">
|
|
360
360
|
{/* Top bar */}
|
|
361
361
|
<div className="sticky top-[52px] md:top-0 z-20 border-b border-border px-4 md:px-6 h-[46px] flex items-center" style={{ background: 'var(--background)' }}>
|
|
362
|
-
<div className="
|
|
362
|
+
<div className="w-full min-w-0 flex items-center justify-between gap-3 h-full">
|
|
363
363
|
<div className="min-w-0 flex-1 flex items-center gap-1.5">
|
|
364
364
|
<button
|
|
365
365
|
onClick={() => router.back()}
|
|
@@ -21,18 +21,18 @@ export default function Breadcrumb({ filePath }: { filePath: string }) {
|
|
|
21
21
|
|
|
22
22
|
if (friendly) {
|
|
23
23
|
return (
|
|
24
|
-
<nav className="flex items-center gap-
|
|
24
|
+
<nav className="flex min-w-0 items-center gap-1 text-xs text-muted-foreground flex-nowrap overflow-hidden">
|
|
25
25
|
<Link
|
|
26
26
|
href="/"
|
|
27
|
-
className="p-1.5 rounded-md hover:bg-muted/50 hover:text-foreground transition-colors"
|
|
27
|
+
className="p-1.5 rounded-md hover:bg-muted/50 hover:text-foreground transition-colors shrink-0"
|
|
28
28
|
title="Home"
|
|
29
29
|
>
|
|
30
30
|
<Home size={14} />
|
|
31
31
|
</Link>
|
|
32
32
|
<ChevronRight size={12} className="text-muted-foreground/50 shrink-0" />
|
|
33
|
-
<span className="flex items-center gap-1.5
|
|
33
|
+
<span className="min-w-0 flex items-center gap-1.5 text-foreground font-medium">
|
|
34
34
|
{friendly.icon}
|
|
35
|
-
<span>{friendly.getLabel(t)}</span>
|
|
35
|
+
<span className="block truncate max-w-[180px] sm:max-w-[260px] md:max-w-[360px]">{friendly.getLabel(t)}</span>
|
|
36
36
|
</span>
|
|
37
37
|
</nav>
|
|
38
38
|
);
|
|
@@ -40,10 +40,10 @@ export default function Breadcrumb({ filePath }: { filePath: string }) {
|
|
|
40
40
|
|
|
41
41
|
const parts = filePath.split('/');
|
|
42
42
|
return (
|
|
43
|
-
<nav className="flex items-center gap-
|
|
43
|
+
<nav className="flex min-w-0 items-center gap-1 text-xs text-muted-foreground flex-nowrap overflow-hidden">
|
|
44
44
|
<Link
|
|
45
45
|
href="/"
|
|
46
|
-
className="p-1.5 rounded-md hover:bg-muted/50 hover:text-foreground transition-colors"
|
|
46
|
+
className="p-1.5 rounded-md hover:bg-muted/50 hover:text-foreground transition-colors shrink-0"
|
|
47
47
|
title="Home"
|
|
48
48
|
>
|
|
49
49
|
<Home size={14} />
|
|
@@ -52,15 +52,15 @@ export default function Breadcrumb({ filePath }: { filePath: string }) {
|
|
|
52
52
|
const isLast = i === parts.length - 1;
|
|
53
53
|
const href = '/view/' + parts.slice(0, i + 1).map(encodeURIComponent).join('/');
|
|
54
54
|
return (
|
|
55
|
-
<span key={i} className="flex items-center gap-0
|
|
55
|
+
<span key={i} className="flex items-center gap-1 min-w-0">
|
|
56
56
|
<ChevronRight size={12} className="text-muted-foreground/50 shrink-0" />
|
|
57
57
|
{isLast ? (
|
|
58
|
-
<span className="flex items-center gap-1.5 px-
|
|
58
|
+
<span className="min-w-0 flex items-center gap-1.5 px-1 py-0.5 text-foreground font-medium">
|
|
59
59
|
<FileTypeIcon name={part} />
|
|
60
|
-
<span suppressHydrationWarning>{part}</span>
|
|
60
|
+
<span className="block truncate max-w-[180px] sm:max-w-[260px] md:max-w-[360px]" suppressHydrationWarning>{part}</span>
|
|
61
61
|
</span>
|
|
62
62
|
) : (
|
|
63
|
-
<Link href={href} className="px-
|
|
63
|
+
<Link href={href} className="block px-1 py-0.5 rounded-md hover:bg-muted/50 hover:text-foreground transition-colors truncate max-w-[120px] sm:max-w-[160px] md:max-w-[200px]" title={part}>
|
|
64
64
|
<span suppressHydrationWarning>{part}</span>
|
|
65
65
|
</Link>
|
|
66
66
|
)}
|
|
@@ -484,7 +484,7 @@ export default function DirView({ dirPath, entries, spacePreview }: DirViewProps
|
|
|
484
484
|
<div className="flex flex-col min-h-screen">
|
|
485
485
|
{/* Topbar */}
|
|
486
486
|
<div className="sticky top-[52px] md:top-0 z-20 border-b border-border px-4 md:px-6 h-[46px] flex items-center bg-background">
|
|
487
|
-
<div className="
|
|
487
|
+
<div className="w-full flex items-center justify-between gap-2">
|
|
488
488
|
<div className="min-w-0 flex-1">
|
|
489
489
|
<Breadcrumb filePath={dirPath} />
|
|
490
490
|
</div>
|
|
@@ -163,7 +163,7 @@ export default function FindInPage({ containerRef, onClose }: FindInPageProps) {
|
|
|
163
163
|
outline: 2px solid rgba(250, 204, 21, 0.5);
|
|
164
164
|
}
|
|
165
165
|
`}</style>
|
|
166
|
-
<div className="sticky top-[
|
|
166
|
+
<div className="sticky top-[98px] md:top-[46px] z-30 flex justify-end px-4 md:px-6 pointer-events-none" data-find-in-page>
|
|
167
167
|
<div className="pointer-events-auto flex items-center gap-1.5 px-3 py-1.5 rounded-lg border border-border bg-card shadow-lg">
|
|
168
168
|
<input
|
|
169
169
|
ref={inputRef}
|
|
@@ -197,7 +197,7 @@ export default function InboxView() {
|
|
|
197
197
|
return (
|
|
198
198
|
<div className="flex flex-col min-h-screen">
|
|
199
199
|
<div className="sticky top-[52px] md:top-0 z-20 border-b border-border px-4 md:px-6 h-[46px] flex items-center bg-background">
|
|
200
|
-
<div className="
|
|
200
|
+
<div className="px-4 md:px-6">
|
|
201
201
|
<div className="h-5 w-32 bg-muted rounded animate-pulse" />
|
|
202
202
|
</div>
|
|
203
203
|
</div>
|
|
@@ -226,7 +226,7 @@ export default function InboxView() {
|
|
|
226
226
|
|
|
227
227
|
{/* ─── Sticky Top Bar ─── */}
|
|
228
228
|
<div className="sticky top-[52px] md:top-0 z-20 border-b border-border h-[46px] flex items-center bg-background">
|
|
229
|
-
<div className="
|
|
229
|
+
<div className="w-full px-4 md:px-6 flex items-center justify-between">
|
|
230
230
|
<div className="flex items-center gap-3">
|
|
231
231
|
{/* Back */}
|
|
232
232
|
<button
|
|
@@ -102,6 +102,10 @@ const components: Components = {
|
|
|
102
102
|
void node;
|
|
103
103
|
return <p {...stripNonDom(rest)} suppressHydrationWarning>{children}</p>;
|
|
104
104
|
},
|
|
105
|
+
span({ children, node, ...rest }) {
|
|
106
|
+
void node;
|
|
107
|
+
return <span {...stripNonDom(rest)} suppressHydrationWarning>{children}</span>;
|
|
108
|
+
},
|
|
105
109
|
a({ href, children, node, ...rest }) {
|
|
106
110
|
void node;
|
|
107
111
|
const isExternal = href?.startsWith('http');
|
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, usePathname } from 'next/navigation';
|
|
5
|
-
import { ChevronsDownUp, ChevronsUpDown, Plus, Import, FileText, Layers, MoreHorizontal, Eye, EyeOff, Trash2, Inbox } from 'lucide-react';
|
|
5
|
+
import { ChevronsDownUp, ChevronsUpDown, Plus, Import, FileText, Layers, MoreHorizontal, Eye, EyeOff, Trash2, Inbox, History } 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';
|
|
@@ -284,15 +284,6 @@ export default function Panel({
|
|
|
284
284
|
ref={morePopoverRef}
|
|
285
285
|
className="absolute top-full right-0 mt-1 min-w-[172px] bg-card border border-border rounded-lg shadow-lg py-1 z-50"
|
|
286
286
|
>
|
|
287
|
-
<button
|
|
288
|
-
className="w-full flex items-center gap-2 px-3 py-1.5 text-sm text-foreground hover:bg-muted transition-colors text-left"
|
|
289
|
-
onClick={() => { setShowHiddenFiles(!showHidden); }}
|
|
290
|
-
>
|
|
291
|
-
{showHidden ? <EyeOff size={14} className="shrink-0" /> : <Eye size={14} className="shrink-0" />}
|
|
292
|
-
<span className="flex-1">{t.sidebar.showHiddenFiles}</span>
|
|
293
|
-
{showHidden && <span className="text-[var(--amber)] text-xs">✓</span>}
|
|
294
|
-
</button>
|
|
295
|
-
<div className="my-1 border-t border-border/50" />
|
|
296
287
|
<button
|
|
297
288
|
className="w-full flex items-center gap-2 px-3 py-1.5 text-sm text-foreground hover:bg-muted transition-colors text-left"
|
|
298
289
|
onClick={() => { setMorePopover(false); router.push('/view/Inbox/'); }}
|
|
@@ -303,6 +294,13 @@ export default function Panel({
|
|
|
303
294
|
<span className="text-2xs font-medium tabular-nums px-1.5 py-px rounded-full bg-[var(--amber)]/10 text-[var(--amber)]/70">{inboxCount}</span>
|
|
304
295
|
)}
|
|
305
296
|
</button>
|
|
297
|
+
<button
|
|
298
|
+
className="w-full flex items-center gap-2 px-3 py-1.5 text-sm text-foreground hover:bg-muted transition-colors text-left"
|
|
299
|
+
onClick={() => { setMorePopover(false); router.push('/view/.mindos/change-log.json'); }}
|
|
300
|
+
>
|
|
301
|
+
<History size={14} className="shrink-0 text-[var(--amber)]" />
|
|
302
|
+
<span className="flex-1">{t.changes.title}</span>
|
|
303
|
+
</button>
|
|
306
304
|
<button
|
|
307
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"
|
|
308
306
|
onClick={() => { setMorePopover(false); router.push('/trash'); }}
|
|
@@ -313,6 +311,15 @@ export default function Panel({
|
|
|
313
311
|
<span className="text-xs text-muted-foreground tabular-nums">{trashCount}</span>
|
|
314
312
|
)}
|
|
315
313
|
</button>
|
|
314
|
+
<div className="my-1 border-t border-border/50" />
|
|
315
|
+
<button
|
|
316
|
+
className="w-full flex items-center gap-2 px-3 py-1.5 text-sm text-foreground hover:bg-muted transition-colors text-left"
|
|
317
|
+
onClick={() => { setShowHiddenFiles(!showHidden); }}
|
|
318
|
+
>
|
|
319
|
+
{showHidden ? <EyeOff size={14} className="shrink-0" /> : <Eye size={14} className="shrink-0" />}
|
|
320
|
+
<span className="flex-1">{t.sidebar.showHiddenFiles}</span>
|
|
321
|
+
{showHidden && <span className="text-[var(--amber)] text-xs">✓</span>}
|
|
322
|
+
</button>
|
|
316
323
|
</div>
|
|
317
324
|
)}
|
|
318
325
|
</div>
|
|
@@ -34,7 +34,7 @@ function parseHeadings(content: string): Heading[] {
|
|
|
34
34
|
return headings;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
const TOPBAR_H =
|
|
37
|
+
const TOPBAR_H = 46;
|
|
38
38
|
const SCROLL_OFFSET = TOPBAR_H + 12;
|
|
39
39
|
const NAV_W = 212;
|
|
40
40
|
|
|
@@ -122,7 +122,7 @@ export default function TableOfContents({ content }: TableOfContentsProps) {
|
|
|
122
122
|
{/* Collapse / expand toggle — separate from aside so it stays visible */}
|
|
123
123
|
<button
|
|
124
124
|
onClick={() => setCollapsed(v => !v)}
|
|
125
|
-
className="hidden xl:flex fixed z-10 top-[
|
|
125
|
+
className="hidden xl:flex fixed z-10 top-[46px] flex items-center justify-center w-5 h-8 rounded-l-md border border-r-0 border-border hover:bg-muted transition-colors"
|
|
126
126
|
style={{
|
|
127
127
|
right: `calc(var(--right-panel-width, 0px) + ${collapsed ? 0 : NAV_W}px)`,
|
|
128
128
|
background: 'var(--background)',
|
|
@@ -149,17 +149,17 @@ export default function TableOfContents({ content }: TableOfContentsProps) {
|
|
|
149
149
|
transition: 'transform 200ms ease-in-out, right 200ms ease-out',
|
|
150
150
|
}}
|
|
151
151
|
>
|
|
152
|
+
<div className="flex items-center h-[46px] px-4 border-l border-b border-border" style={{ background: 'var(--background)' }}>
|
|
153
|
+
<p className="text-2xs font-semibold uppercase tracking-wider text-muted-foreground/55 shrink-0">
|
|
154
|
+
{t.view.tocTitle}
|
|
155
|
+
</p>
|
|
156
|
+
</div>
|
|
152
157
|
<nav
|
|
153
158
|
ref={navRef}
|
|
154
159
|
aria-label={t.view.tocTitle}
|
|
155
|
-
className="flex flex-col gap-0.5 overflow-y-auto min-h-0 flex-1
|
|
160
|
+
className="flex flex-col gap-0.5 overflow-y-auto min-h-0 flex-1 pt-3 pb-5 pl-2 pr-3 border-l border-border"
|
|
156
161
|
style={{ background: 'var(--background)' }}
|
|
157
162
|
>
|
|
158
|
-
<p
|
|
159
|
-
className="text-2xs font-semibold uppercase tracking-wider px-2 mb-1 text-muted-foreground/50 shrink-0"
|
|
160
|
-
>
|
|
161
|
-
{t.view.tocTitle}
|
|
162
|
-
</p>
|
|
163
163
|
{headings.map((heading, i) => {
|
|
164
164
|
const indent = (heading.level - minLevel) * 14;
|
|
165
165
|
const isActive = activeId === heading.id;
|
|
@@ -194,7 +194,7 @@ export default function TableOfContents({ content }: TableOfContentsProps) {
|
|
|
194
194
|
}}
|
|
195
195
|
title={heading.text}
|
|
196
196
|
>
|
|
197
|
-
<span className="
|
|
197
|
+
<span className="block truncate" suppressHydrationWarning>
|
|
198
198
|
{heading.text}
|
|
199
199
|
</span>
|
|
200
200
|
</a>
|