@geminilight/mindos 0.6.56 → 0.6.58
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 +21 -19
- 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 +8 -8
- package/_standalone/.next/routes-manifest.json +12 -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 +2 -2
- package/_standalone/.next/server/app/agents/[agentKey]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/agents/[agentKey]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/agents/page.js +2 -6
- 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.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_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/session/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/agent-activity/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/agents/custom/detect/route.js +1 -0
- package/_standalone/.next/server/app/api/agents/custom/detect/route.js.nft.json +1 -0
- package/_standalone/.next/server/app/api/agents/custom/detect/route_client-reference-manifest.js +1 -0
- package/_standalone/.next/server/app/api/agents/custom/route.js +1 -0
- package/_standalone/.next/server/app/api/agents/custom/route.js.nft.json +1 -0
- package/_standalone/.next/server/app/api/agents/custom/route_client-reference-manifest.js +1 -0
- package/_standalone/.next/server/app/api/ask/route.js +5 -5
- package/_standalone/.next/server/app/api/ask/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/ask/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/ask-sessions/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/auth/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/backlinks/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/backlinks/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/bootstrap/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/bootstrap/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/changes/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/changes/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/export/route.js.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 +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/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 +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.js +1 -1
- package/_standalone/.next/server/app/api/mcp/install/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/install-skill/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/restart/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/status/route.js +1 -1
- package/_standalone/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/uninstall/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/monitoring/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/recent-files/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/search/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/list-models/route.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.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.js +1 -1
- package/_standalone/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/sync/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/tree-version/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/workflows/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/changes/page.js +2 -2
- package/_standalone/.next/server/app/changes/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/changes/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/echo/[segment]/page.js +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 +2 -2
- package/_standalone/.next/server/app/explore/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/explore/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/help/page.js +2 -2
- package/_standalone/.next/server/app/help/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/inbox/history/page.js +1 -1
- package/_standalone/.next/server/app/inbox/history/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/inbox/history/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/login/page.js +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 +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 +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 +21 -19
- package/_standalone/.next/server/chunks/1550.js +1 -1
- package/_standalone/.next/server/chunks/1750.js +1 -1
- package/_standalone/.next/server/chunks/{2190.js → 3484.js} +1 -1
- package/_standalone/.next/server/chunks/530.js +30 -30
- package/_standalone/.next/server/chunks/6539.js +1 -1
- package/_standalone/.next/server/chunks/6793.js +52 -0
- package/_standalone/.next/server/chunks/8388.js +3 -3
- package/_standalone/.next/server/chunks/953.js +2 -2
- 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/2ksXveDzEcnCMRIElDkLq/_buildManifest.js +1 -0
- package/_standalone/.next/static/chunks/1053-fe009233cff06e72.js +29 -0
- package/_standalone/.next/static/chunks/1477.33df3cce509578c2.js +1 -0
- package/_standalone/.next/static/chunks/{1814.b08e9fb85dd3b13c.js → 1814.a7c127b2c73d1f70.js} +1 -1
- package/_standalone/.next/static/chunks/2549-e63cf57fa927a41d.js +1 -0
- package/_standalone/.next/static/chunks/{1007.c11404e50b39d165.js → 2647.e0b67d0c432ad7e7.js} +10 -10
- package/_standalone/.next/static/chunks/{2872.c8c8593be1ba4735.js → 2872.045858d00bd8307f.js} +2 -2
- package/_standalone/.next/static/chunks/362.3978790a2e636c3c.js +2 -0
- package/_standalone/.next/static/chunks/3637.38c4f28d8f698e0e.js +1 -0
- package/_standalone/.next/static/chunks/54a60aa6.7a74f547ec1bdd5a.js +79 -0
- package/_standalone/.next/static/chunks/6087.4b6102dc0bcd07a7.js +1 -0
- package/_standalone/.next/static/chunks/6878-e2c5459e1c608f89.js +1 -0
- package/_standalone/.next/static/chunks/7249-fa98ca10e9a10f39.js +11 -0
- package/_standalone/.next/static/chunks/8252-e5ae7ced3a41e0ed.js +1 -0
- package/_standalone/.next/static/chunks/{8753-ea9db680b0f70f25.js → 8658-16ff58b75ae37fbb.js} +1 -1
- package/_standalone/.next/static/chunks/{7322-d67d05067544864c.js → 9274-296ab35f9f09e42e.js} +1 -1
- package/_standalone/.next/static/chunks/app/.well-known/agent-card.json/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/_global-error/page-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-7bdeab5af8e4f5f2.js +1 -0
- package/_standalone/.next/static/chunks/app/agents/page-5d1446665ddb3801.js +1 -0
- package/_standalone/.next/static/chunks/app/api/a2a/agents/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/a2a/delegations/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/a2a/discover/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/a2a/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/config/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/detect/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/install/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/registry/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/acp/session/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/agent-activity/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/agents/custom/detect/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/agents/custom/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/ask/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/ask-sessions/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/auth/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/backlinks/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/bootstrap/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/changes/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/export/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/extract-pdf/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/file/import/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/file/raw/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/file/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/files/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/git/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/graph/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/health/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/inbox/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/init/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/agents/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/install/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/restart/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/status/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/mcp/uninstall/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/monitoring/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/recent-files/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/restart/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/search/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/settings/list-models/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/settings/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/settings/test-key/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/check-path/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/check-port/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/ls/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/setup/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/skills/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/sync/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/tree-version/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/uninstall/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/update/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/update-check/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/update-status/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/api/workflows/route-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/echo/[segment]/{page-6710da1f581b2854.js → page-b0103509ce34444b.js} +4 -4
- package/_standalone/.next/static/chunks/app/echo/page-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/{layout-d5f28933c5e14d74.js → layout-7e02ddf4144b01f1.js} +11 -11
- package/_standalone/.next/static/chunks/app/loading-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/page-6a6a12bd6d6812d0.js +7 -0
- package/_standalone/.next/static/chunks/app/setup/{page-9a81fa4d82c6351b.js → page-99fcfc460fa29733.js} +1 -1
- package/_standalone/.next/static/chunks/app/trash/page-54cbd5c98d9de69b.js +1 -0
- package/_standalone/.next/static/chunks/app/view/[...path]/loading-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/app/view/[...path]/page-ca7bdcbf27f88a46.js +12 -0
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-2f4705aa66819b86.js +1 -0
- package/_standalone/.next/static/chunks/webpack-2c19436659aa657b.js +1 -0
- package/_standalone/.next/static/css/fd84c8316ead16eb.css +1 -0
- package/_standalone/.next/trace +64 -64
- package/_standalone/.next/types/routes.d.ts +3 -1
- package/_standalone/.next/types/validator.ts +18 -0
- package/_standalone/__tests__/api/mcp-install.test.ts +3 -2
- package/_standalone/__tests__/ask/non-streaming-api.test.ts +281 -0
- package/_standalone/__tests__/core/skill-install-logic.test.ts +1 -0
- package/_standalone/components/Editor.tsx +124 -6
- package/_standalone/components/MarkdownView.tsx +3 -1
- package/_standalone/components/WysiwygEditor.tsx +90 -0
- package/_standalone/components/agents/AgentsOverviewSection.tsx +100 -8
- package/_standalone/components/agents/CustomAgentModal.tsx +637 -0
- package/_standalone/components/settings/types.ts +4 -0
- package/_standalone/data/skills/mindos/SKILL.md +14 -9
- package/_standalone/data/skills/mindos-zh/SKILL.md +13 -4
- package/_standalone/hooks/useEditorImageUpload.ts +113 -0
- package/_standalone/lib/image.ts +47 -0
- package/_standalone/tsconfig.tsbuildinfo +1 -1
- package/app/app/api/agents/custom/detect/route.ts +31 -0
- package/app/app/api/agents/custom/route.ts +158 -0
- package/app/app/api/ask/route.ts +171 -10
- package/app/app/api/file/import/route.ts +42 -0
- package/app/app/api/mcp/agents/route.ts +62 -8
- package/app/app/api/settings/list-models/route.ts +16 -2
- package/app/app/api/settings/route.ts +9 -0
- package/app/app/api/settings/test-key/route.ts +13 -1
- package/app/components/Editor.tsx +124 -6
- package/app/components/MarkdownView.tsx +3 -1
- package/app/components/WysiwygEditor.tsx +90 -0
- package/app/components/agents/AgentDetailContent.tsx +74 -1
- package/app/components/agents/AgentsContentPage.tsx +76 -1
- package/app/components/agents/AgentsOverviewSection.tsx +100 -8
- package/app/components/agents/CustomAgentModal.tsx +637 -0
- package/app/components/settings/types.ts +4 -0
- package/app/data/skills/mindos/SKILL.md +14 -9
- package/app/data/skills/mindos-zh/SKILL.md +13 -4
- package/app/hooks/useEditorImageUpload.ts +113 -0
- package/app/lib/agent/model.ts +7 -1
- package/app/lib/agent/providers.ts +31 -6
- package/app/lib/core/organize.ts +1 -1
- package/app/lib/core/tree.ts +1 -1
- package/app/lib/custom-agents.ts +322 -0
- package/app/lib/fs.ts +1 -1
- package/app/lib/i18n/modules/panels.ts +104 -0
- package/app/lib/image.ts +47 -0
- package/app/lib/mcp-agents.ts +10 -0
- package/app/lib/settings.ts +4 -0
- package/bin/commands/start.js +5 -4
- package/bin/commands/update.js +6 -2
- package/bin/lib/gateway.js +6 -2
- package/bin/lib/mcp-agents.js +10 -0
- package/mcp/dist/index.cjs +1 -1
- package/mcp/src/index.ts +6 -1
- package/package.json +1 -1
- package/skills/mindos/SKILL.md +10 -4
- package/skills/mindos-max/SKILL.md +191 -0
- package/skills/mindos-max-workspace/evals/evals.json +23 -0
- package/skills/mindos-max-workspace/iteration-1/capture-debugging-experience-en/eval_metadata.json +11 -0
- package/skills/mindos-max-workspace/iteration-1/capture-debugging-experience-en/old_skill/grading.json +28 -0
- package/skills/mindos-max-workspace/iteration-1/capture-debugging-experience-en/old_skill/outputs/transcript.md +203 -0
- package/skills/mindos-max-workspace/iteration-1/capture-debugging-experience-en/with_skill/grading.json +28 -0
- package/skills/mindos-max-workspace/iteration-1/capture-debugging-experience-en/with_skill/outputs/transcript.md +271 -0
- package/skills/mindos-max-workspace/iteration-1/save-meeting-decision-zh/eval_metadata.json +11 -0
- package/skills/mindos-max-workspace/iteration-1/save-meeting-decision-zh/old_skill/grading.json +28 -0
- package/skills/mindos-max-workspace/iteration-1/save-meeting-decision-zh/old_skill/outputs/transcript.md +121 -0
- package/skills/mindos-max-workspace/iteration-1/save-meeting-decision-zh/with_skill/grading.json +28 -0
- package/skills/mindos-max-workspace/iteration-1/save-meeting-decision-zh/with_skill/outputs/transcript.md +168 -0
- package/skills/mindos-max-workspace/iteration-1/search-past-decision-zh/eval_metadata.json +11 -0
- package/skills/mindos-max-workspace/iteration-1/search-past-decision-zh/old_skill/grading.json +28 -0
- package/skills/mindos-max-workspace/iteration-1/search-past-decision-zh/old_skill/outputs/transcript.md +143 -0
- package/skills/mindos-max-workspace/iteration-1/search-past-decision-zh/with_skill/grading.json +28 -0
- package/skills/mindos-max-workspace/iteration-1/search-past-decision-zh/with_skill/outputs/transcript.md +233 -0
- package/skills/mindos-max-workspace/skill-snapshot/mindos-original/SKILL.md +165 -0
- package/skills/mindos-max-workspace/skill-snapshot/mindos-original/references/README.md +12 -0
- package/skills/mindos-max-workspace/skill-snapshot/mindos-original/references/post-task-hooks.md +27 -0
- package/skills/mindos-max-workspace/skill-snapshot/mindos-original/references/preference-capture.md +41 -0
- package/skills/mindos-max-workspace/skill-snapshot/mindos-original/references/sop-template.md +74 -0
- package/skills/mindos-max-workspace/skill-snapshot/mindos-original/references/write-supplement.md +119 -0
- package/skills/mindos-max-zh/SKILL.md +192 -0
- package/skills/mindos-zh/SKILL.md +11 -3
- package/_standalone/.next/server/chunks/7543.js +0 -52
- package/_standalone/.next/static/3gMJ8EaZfDgHmB0NR0Q4T/_buildManifest.js +0 -1
- package/_standalone/.next/static/chunks/1053-2874859f7caefa0f.js +0 -29
- package/_standalone/.next/static/chunks/1880-7abf971bcfd2389b.js +0 -11
- package/_standalone/.next/static/chunks/254-32719a9bea2e74f0.js +0 -1
- package/_standalone/.next/static/chunks/362.a77be2f206db7b19.js +0 -1
- package/_standalone/.next/static/chunks/3637.0541ac2d0ea7de1f.js +0 -1
- package/_standalone/.next/static/chunks/54a60aa6.b97ba5e6900c089b.js +0 -79
- package/_standalone/.next/static/chunks/6087.0c32d26d0262c8e7.js +0 -1
- package/_standalone/.next/static/chunks/7035-2af69391c7b1ad95.js +0 -1
- package/_standalone/.next/static/chunks/8131.5e0bdb36bb91f212.js +0 -1
- package/_standalone/.next/static/chunks/app/.well-known/agent-card.json/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/_global-error/page-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-f006a70f6889eb56.js +0 -1
- package/_standalone/.next/static/chunks/app/agents/page-bd522e428e3acb78.js +0 -5
- package/_standalone/.next/static/chunks/app/api/a2a/agents/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/a2a/delegations/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/a2a/discover/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/a2a/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/config/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/detect/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/install/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/registry/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/acp/session/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/agent-activity/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/ask/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/ask-sessions/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/auth/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/backlinks/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/bootstrap/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/changes/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/export/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/extract-pdf/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/file/import/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/file/raw/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/file/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/files/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/git/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/graph/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/health/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/inbox/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/init/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/agents/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/install/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/restart/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/status/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/mcp/uninstall/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/monitoring/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/recent-files/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/restart/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/search/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/settings/list-models/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/settings/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/settings/test-key/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/check-path/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/check-port/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/ls/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/setup/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/skills/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/sync/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/tree-version/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/uninstall/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/update/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/update-check/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/update-status/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/api/workflows/route-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/echo/page-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/loading-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/page-45140253e07a135a.js +0 -7
- package/_standalone/.next/static/chunks/app/trash/page-c7f14311f040009e.js +0 -1
- package/_standalone/.next/static/chunks/app/view/[...path]/loading-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/app/view/[...path]/page-62cfae628e31d411.js +0 -12
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-e240db6d5049d336.js +0 -1
- package/_standalone/.next/static/chunks/webpack-521ae5a2ddf0e396.js +0 -1
- package/_standalone/.next/static/css/66f8a81e4eda06d4.css +0 -1
- /package/_standalone/.next/static/{3gMJ8EaZfDgHmB0NR0Q4T → 2ksXveDzEcnCMRIElDkLq}/_ssgManifest.js +0 -0
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: mindos-zh
|
|
3
3
|
description: >
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
仅 mindRoot 知识库内任务。不用于:改代码仓库/项目文档/KB 外路径。
|
|
4
|
+
MindOS 知识库操作:更新笔记、搜索知识库、整理文件、执行SOP/工作流、复盘、追加CSV、跨Agent交接、
|
|
5
|
+
路由非结构化输入到对应文件、提炼经验、同步关联文档。
|
|
6
|
+
仅 mindRoot 知识库内任务。不用于:改代码仓库、项目源码、KB 外路径。
|
|
8
7
|
核心概念:空间、指令(INSTRUCTION.md)、技能(SKILL.md);笔记可承载指令与技能。
|
|
8
|
+
触发场景:保存或记录任何内容、搜索历史笔记或上下文、更新或编辑文件、整理或重组文件结构、
|
|
9
|
+
执行SOP或工作流、捕获对话中的决策、复盘或总结经验、追加表格或CSV数据、跨Agent交接上下文、
|
|
10
|
+
提炼经验教训、同步关联文档、查找之前是否讨论过某事、查询历史决策、查找模板或SOP、
|
|
11
|
+
为会议准备上下文。
|
|
12
|
+
触发词:帮我记下来、搜一下我的笔记、更新知识库、整理文件、执行工作流、保存到知识库、
|
|
13
|
+
记录一下、整理笔记、复盘、提炼经验、同步文档、查一下之前的记录、有没有相关的笔记、
|
|
14
|
+
我之前写过什么、把这个存起来、总结一下保存、交接给其他Agent、追加到表格。
|
|
15
|
+
English triggers: save, record, search notes, organize, retrospective, handoff, lessons learned.
|
|
16
|
+
当用户的问题暗示可能存在历史记录(过去的决策、之前的讨论、会议纪要)时,
|
|
17
|
+
即使没有明确提到知识库,也应该考虑搜索 MindOS。
|
|
9
18
|
---
|
|
10
19
|
|
|
11
20
|
# MindOS 技能
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook for uploading images to the .media/ directory in the editor.
|
|
3
|
+
*
|
|
4
|
+
* Unlike useImageUpload (for chat image attachments), this hook uploads
|
|
5
|
+
* images to the knowledge base's .media/ directory and returns file paths
|
|
6
|
+
* suitable for use in markdown `` syntax.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* const { uploadToMedia, isUploading } = useEditorImageUpload();
|
|
10
|
+
* const paths = await uploadToMedia([file1, file2]);
|
|
11
|
+
* // paths = ['/.media/2026-04-07_abc123.png', ...]
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { useState, useCallback } from 'react';
|
|
15
|
+
|
|
16
|
+
const MAX_IMAGE_SIZE = 10 * 1024 * 1024; // 10 MB per image
|
|
17
|
+
const ALLOWED_IMAGE_TYPES = new Set([
|
|
18
|
+
'image/png',
|
|
19
|
+
'image/jpeg',
|
|
20
|
+
'image/gif',
|
|
21
|
+
'image/webp',
|
|
22
|
+
'image/svg+xml',
|
|
23
|
+
'image/bmp',
|
|
24
|
+
'image/x-icon',
|
|
25
|
+
'image/vnd.microsoft.icon',
|
|
26
|
+
]);
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Generates a unique filename: YYYY-MM-DD_randomhash.ext
|
|
30
|
+
*/
|
|
31
|
+
function generateImageFileName(originalName: string): string {
|
|
32
|
+
const ext = originalName.split('.').pop()?.toLowerCase() || 'png';
|
|
33
|
+
const timestamp = new Date().toISOString().split('T')[0];
|
|
34
|
+
const randomHash = Math.random().toString(36).slice(2, 10);
|
|
35
|
+
return `${timestamp}_${randomHash}.${ext}`;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** Converts a File to base64 string (without data URL prefix). */
|
|
39
|
+
async function fileToBase64(file: File): Promise<string> {
|
|
40
|
+
return new Promise((resolve, reject) => {
|
|
41
|
+
const reader = new FileReader();
|
|
42
|
+
reader.onload = () => {
|
|
43
|
+
const result = reader.result as string;
|
|
44
|
+
resolve(result.split(',')[1]); // Strip "data:image/...;base64," prefix
|
|
45
|
+
};
|
|
46
|
+
reader.onerror = reject;
|
|
47
|
+
reader.readAsDataURL(file);
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export function useEditorImageUpload() {
|
|
52
|
+
const [isUploading, setIsUploading] = useState(false);
|
|
53
|
+
|
|
54
|
+
const uploadToMedia = useCallback(async (files: File[]): Promise<string[]> => {
|
|
55
|
+
setIsUploading(true);
|
|
56
|
+
|
|
57
|
+
try {
|
|
58
|
+
// Filter valid images
|
|
59
|
+
const validFiles: Array<{ base64: string; newName: string }> = [];
|
|
60
|
+
const skippedReasons: string[] = [];
|
|
61
|
+
|
|
62
|
+
for (const file of files) {
|
|
63
|
+
if (!ALLOWED_IMAGE_TYPES.has(file.type)) {
|
|
64
|
+
skippedReasons.push(`${file.name}: unsupported format`);
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
if (file.size > MAX_IMAGE_SIZE) {
|
|
68
|
+
skippedReasons.push(`${file.name}: exceeds 10MB limit`);
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const base64 = await fileToBase64(file);
|
|
73
|
+
const newName = generateImageFileName(file.name);
|
|
74
|
+
validFiles.push({ base64, newName });
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
if (validFiles.length === 0) {
|
|
78
|
+
throw new Error(skippedReasons.length > 0
|
|
79
|
+
? skippedReasons.join('; ')
|
|
80
|
+
: 'No valid images to upload');
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const response = await fetch('/api/file/import', {
|
|
84
|
+
method: 'POST',
|
|
85
|
+
headers: { 'Content-Type': 'application/json' },
|
|
86
|
+
body: JSON.stringify({
|
|
87
|
+
files: validFiles.map((img) => ({
|
|
88
|
+
name: img.newName,
|
|
89
|
+
content: img.base64,
|
|
90
|
+
encoding: 'base64',
|
|
91
|
+
})),
|
|
92
|
+
targetSpace: '.media',
|
|
93
|
+
organize: false, // Don't trigger AI organize for media files
|
|
94
|
+
conflict: 'rename',
|
|
95
|
+
}),
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
if (!response.ok) {
|
|
99
|
+
const data = await response.json().catch(() => ({}));
|
|
100
|
+
throw new Error(data.error || `Upload failed: ${response.statusText}`);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const result = await response.json();
|
|
104
|
+
return (result.created ?? []).map(
|
|
105
|
+
(item: { path: string }) => `/${item.path}`,
|
|
106
|
+
);
|
|
107
|
+
} finally {
|
|
108
|
+
setIsUploading(false);
|
|
109
|
+
}
|
|
110
|
+
}, []);
|
|
111
|
+
|
|
112
|
+
return { uploadToMedia, isUploading };
|
|
113
|
+
}
|
package/app/lib/agent/model.ts
CHANGED
|
@@ -84,6 +84,12 @@ function resolveModel(providerId: ProviderId, modelName: string, baseUrl: string
|
|
|
84
84
|
};
|
|
85
85
|
}
|
|
86
86
|
|
|
87
|
+
// 2.5. Apply preset fixedBaseUrl when registry lookup succeeded but needs endpoint override
|
|
88
|
+
// (zai-cn: domestic endpoint, deepseek: fixed baseUrl, ollama: localhost)
|
|
89
|
+
if (preset.fixedBaseUrl && !hasCustomBase) {
|
|
90
|
+
model = { ...model, baseUrl: preset.fixedBaseUrl };
|
|
91
|
+
}
|
|
92
|
+
|
|
87
93
|
// 3. Apply user's custom baseUrl
|
|
88
94
|
if (hasCustomBase) {
|
|
89
95
|
model = { ...model, baseUrl };
|
|
@@ -93,7 +99,7 @@ function resolveModel(providerId: ProviderId, modelName: string, baseUrl: string
|
|
|
93
99
|
}
|
|
94
100
|
}
|
|
95
101
|
|
|
96
|
-
// 4. For deepseek or any custom endpoint, apply conservative compat
|
|
102
|
+
// 4. For deepseek/zai-cn/ollama or any custom endpoint, apply conservative compat
|
|
97
103
|
if (hasCustomBase || preset.fixedBaseUrl) {
|
|
98
104
|
model = {
|
|
99
105
|
...model,
|
|
@@ -16,8 +16,8 @@ import {
|
|
|
16
16
|
export type ProviderId =
|
|
17
17
|
| 'anthropic' | 'openai' | 'google' | 'groq'
|
|
18
18
|
| 'xai' | 'openrouter' | 'mistral' | 'deepseek'
|
|
19
|
-
| 'zai' | 'kimi-coding'
|
|
20
|
-
| 'cerebras' | 'minimax' | 'huggingface'
|
|
19
|
+
| 'zai' | 'zai-cn' | 'kimi-coding'
|
|
20
|
+
| 'cerebras' | 'minimax' | 'minimax-cn' | 'huggingface'
|
|
21
21
|
| 'ollama';
|
|
22
22
|
|
|
23
23
|
/**
|
|
@@ -135,13 +135,26 @@ export const PROVIDER_PRESETS: Record<ProviderId, ProviderPreset> = {
|
|
|
135
135
|
zai: {
|
|
136
136
|
id: 'zai',
|
|
137
137
|
name: 'ZhipuAI (GLM)',
|
|
138
|
-
nameZh: '智谱 AI (GLM)',
|
|
138
|
+
nameZh: '智谱 AI (GLM 国际版)',
|
|
139
139
|
defaultModel: 'glm-4-plus',
|
|
140
140
|
supportsBaseUrl: false,
|
|
141
141
|
supportsThinking: true,
|
|
142
142
|
supportsListModels: false,
|
|
143
143
|
category: 'more',
|
|
144
144
|
},
|
|
145
|
+
'zai-cn': {
|
|
146
|
+
id: 'zai-cn',
|
|
147
|
+
name: 'ZhipuAI (GLM China)',
|
|
148
|
+
nameZh: '智谱 AI (GLM 国内版)',
|
|
149
|
+
defaultModel: 'glm-4-plus',
|
|
150
|
+
piProviderOverride: 'zai' as KnownProvider,
|
|
151
|
+
fixedBaseUrl: 'https://open.bigmodel.cn/api/coding/paas/v4',
|
|
152
|
+
supportsBaseUrl: false,
|
|
153
|
+
supportsThinking: true,
|
|
154
|
+
supportsListModels: false,
|
|
155
|
+
signupUrl: 'https://open.bigmodel.cn/',
|
|
156
|
+
category: 'more',
|
|
157
|
+
},
|
|
145
158
|
'kimi-coding': {
|
|
146
159
|
id: 'kimi-coding',
|
|
147
160
|
name: 'Kimi Coding',
|
|
@@ -165,10 +178,20 @@ export const PROVIDER_PRESETS: Record<ProviderId, ProviderPreset> = {
|
|
|
165
178
|
minimax: {
|
|
166
179
|
id: 'minimax',
|
|
167
180
|
name: 'MiniMax',
|
|
168
|
-
nameZh: 'MiniMax',
|
|
169
|
-
defaultModel: 'MiniMax-
|
|
181
|
+
nameZh: 'MiniMax (国际版)',
|
|
182
|
+
defaultModel: 'MiniMax-M2.5',
|
|
170
183
|
supportsBaseUrl: false,
|
|
171
|
-
supportsThinking:
|
|
184
|
+
supportsThinking: true,
|
|
185
|
+
supportsListModels: false,
|
|
186
|
+
category: 'more',
|
|
187
|
+
},
|
|
188
|
+
'minimax-cn': {
|
|
189
|
+
id: 'minimax-cn',
|
|
190
|
+
name: 'MiniMax (China)',
|
|
191
|
+
nameZh: 'MiniMax (国内版)',
|
|
192
|
+
defaultModel: 'MiniMax-M2.5',
|
|
193
|
+
supportsBaseUrl: false,
|
|
194
|
+
supportsThinking: true,
|
|
172
195
|
supportsListModels: false,
|
|
173
196
|
category: 'more',
|
|
174
197
|
},
|
|
@@ -288,8 +311,10 @@ const PI_ENV_MAP: Record<string, string> = {
|
|
|
288
311
|
xai: 'XAI_API_KEY',
|
|
289
312
|
openrouter: 'OPENROUTER_API_KEY',
|
|
290
313
|
zai: 'ZAI_API_KEY',
|
|
314
|
+
'zai-cn': 'ZAI_API_KEY',
|
|
291
315
|
mistral: 'MISTRAL_API_KEY',
|
|
292
316
|
minimax: 'MINIMAX_API_KEY',
|
|
317
|
+
'minimax-cn': 'MINIMAX_API_KEY',
|
|
293
318
|
huggingface: 'HF_TOKEN',
|
|
294
319
|
'kimi-coding': 'KIMI_API_KEY',
|
|
295
320
|
};
|
package/app/lib/core/organize.ts
CHANGED
|
@@ -14,7 +14,7 @@ const STOP_WORDS = new Set([
|
|
|
14
14
|
'readme', 'instruction', 'md',
|
|
15
15
|
]);
|
|
16
16
|
|
|
17
|
-
const SKIP_DIRS = new Set(['.git', 'node_modules', '.next', '.DS_Store']);
|
|
17
|
+
const SKIP_DIRS = new Set(['.git', 'node_modules', '.next', '.DS_Store', '.media', 'mcp']);
|
|
18
18
|
|
|
19
19
|
function extractKeywords(filePath: string): string[] {
|
|
20
20
|
const stem = path.basename(filePath, path.extname(filePath));
|
package/app/lib/core/tree.ts
CHANGED
|
@@ -3,7 +3,7 @@ import fsp from 'fs/promises';
|
|
|
3
3
|
import path from 'path';
|
|
4
4
|
import type { FileNode } from './types';
|
|
5
5
|
|
|
6
|
-
const DEFAULT_IGNORED_DIRS = new Set(['.git', 'node_modules', 'app', '.next', '.DS_Store', 'mcp']);
|
|
6
|
+
const DEFAULT_IGNORED_DIRS = new Set(['.git', 'node_modules', 'app', '.next', '.DS_Store', 'mcp', '.media']);
|
|
7
7
|
const DEFAULT_ALLOWED_EXTENSIONS = new Set([
|
|
8
8
|
'.md', '.csv', '.pdf',
|
|
9
9
|
'.png', '.jpg', '.jpeg', '.gif', '.webp', '.svg', '.bmp', '.ico',
|
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom Agent registration: types, slugify, defaults inference, and persistence.
|
|
3
|
+
*
|
|
4
|
+
* CustomAgentDef is stored in config.json.customAgents[].
|
|
5
|
+
* At runtime, toAgentDef() converts it into the standard AgentDef that all
|
|
6
|
+
* downstream detection / snippet / UI code already understands.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import fs from 'fs';
|
|
10
|
+
import path from 'path';
|
|
11
|
+
import { expandHome, MCP_AGENTS } from './mcp-agents';
|
|
12
|
+
import type { AgentDef } from './mcp-agents';
|
|
13
|
+
import { readSettings, writeSettings } from './settings';
|
|
14
|
+
|
|
15
|
+
/* ─── Types ─── */
|
|
16
|
+
|
|
17
|
+
export interface CustomAgentDef {
|
|
18
|
+
name: string;
|
|
19
|
+
key: string;
|
|
20
|
+
baseDir: string;
|
|
21
|
+
global: string;
|
|
22
|
+
project?: string | null;
|
|
23
|
+
configKey: string;
|
|
24
|
+
format: 'json' | 'toml';
|
|
25
|
+
preferredTransport: 'stdio' | 'http';
|
|
26
|
+
presenceDirs: string[];
|
|
27
|
+
presenceCli?: string;
|
|
28
|
+
globalNestedKey?: string;
|
|
29
|
+
/** Skills directory path. Defaults to `baseDir + 'skills/'`. */
|
|
30
|
+
skillDir?: string;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export interface DetectResult {
|
|
34
|
+
exists: boolean;
|
|
35
|
+
detectedConfig?: string;
|
|
36
|
+
detectedFormat?: 'json' | 'toml';
|
|
37
|
+
detectedConfigKey?: string;
|
|
38
|
+
hasSkillsDir: boolean;
|
|
39
|
+
detectedSkillDir?: string;
|
|
40
|
+
skillCount?: number;
|
|
41
|
+
skillNames?: string[];
|
|
42
|
+
suggestedName?: string;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/* ─── Slugify ─── */
|
|
46
|
+
|
|
47
|
+
export function slugify(name: string): string {
|
|
48
|
+
const slug = name
|
|
49
|
+
.toLowerCase()
|
|
50
|
+
.replace(/[^\x20-\x7E]/g, '')
|
|
51
|
+
.replace(/[_\s]+/g, '-')
|
|
52
|
+
.replace(/[^a-z0-9-]/g, '')
|
|
53
|
+
.replace(/-{2,}/g, '-')
|
|
54
|
+
.replace(/^-|-$/g, '');
|
|
55
|
+
|
|
56
|
+
return slug || '';
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Generate a unique key from a name, avoiding collisions with built-in
|
|
61
|
+
* and existing custom agents.
|
|
62
|
+
*/
|
|
63
|
+
export function generateUniqueKey(
|
|
64
|
+
name: string,
|
|
65
|
+
existingKeys: Set<string>,
|
|
66
|
+
): string {
|
|
67
|
+
let base = slugify(name);
|
|
68
|
+
|
|
69
|
+
if (!base) {
|
|
70
|
+
let n = 1;
|
|
71
|
+
while (existingKeys.has(`custom-${n}`)) n++;
|
|
72
|
+
return `custom-${n}`;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (!existingKeys.has(base)) return base;
|
|
76
|
+
|
|
77
|
+
let n = 2;
|
|
78
|
+
while (existingKeys.has(`${base}-${n}`)) n++;
|
|
79
|
+
return `${base}-${n}`;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/* ─── Defaults Inference ─── */
|
|
83
|
+
|
|
84
|
+
export function inferDefaults(name: string, baseDir: string): Omit<CustomAgentDef, 'key'> {
|
|
85
|
+
const dir = baseDir.endsWith('/') ? baseDir : baseDir + '/';
|
|
86
|
+
return {
|
|
87
|
+
name,
|
|
88
|
+
baseDir: dir,
|
|
89
|
+
global: dir + 'mcp.json',
|
|
90
|
+
project: null,
|
|
91
|
+
configKey: 'mcpServers',
|
|
92
|
+
format: 'json',
|
|
93
|
+
preferredTransport: 'stdio',
|
|
94
|
+
presenceDirs: [dir],
|
|
95
|
+
skillDir: dir + 'skills/',
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/* ─── Auto-detection ─── */
|
|
100
|
+
|
|
101
|
+
export function detectBaseDir(baseDir: string): DetectResult {
|
|
102
|
+
const expanded = expandHome(baseDir);
|
|
103
|
+
|
|
104
|
+
if (!fs.existsSync(expanded)) {
|
|
105
|
+
const dirName = path.basename(expanded.replace(/\/$/, ''));
|
|
106
|
+
return {
|
|
107
|
+
exists: false,
|
|
108
|
+
hasSkillsDir: false,
|
|
109
|
+
suggestedName: dirName.charAt(0).toUpperCase() + dirName.slice(1),
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const result: DetectResult = {
|
|
114
|
+
exists: true,
|
|
115
|
+
hasSkillsDir: false,
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
const dirName = path.basename(expanded.replace(/\/$/, ''));
|
|
119
|
+
result.suggestedName = dirName.charAt(0).toUpperCase() + dirName.slice(1);
|
|
120
|
+
|
|
121
|
+
// Check for skills/ subdirectory and scan contents
|
|
122
|
+
const skillsPath = path.join(expanded, 'skills');
|
|
123
|
+
if (fs.existsSync(skillsPath)) {
|
|
124
|
+
result.hasSkillsDir = true;
|
|
125
|
+
result.detectedSkillDir = baseDir.endsWith('/') ? baseDir + 'skills/' : baseDir + '/skills/';
|
|
126
|
+
try {
|
|
127
|
+
const skillEntries = fs.readdirSync(skillsPath, { withFileTypes: true });
|
|
128
|
+
const skillNames = skillEntries
|
|
129
|
+
.filter(e => (e.isDirectory() || e.isSymbolicLink()) && !e.name.startsWith('.'))
|
|
130
|
+
.map(e => e.name)
|
|
131
|
+
.sort((a, b) => a.localeCompare(b));
|
|
132
|
+
result.skillCount = skillNames.length;
|
|
133
|
+
result.skillNames = skillNames;
|
|
134
|
+
} catch {
|
|
135
|
+
result.skillCount = 0;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// Scan top-level files (max 20)
|
|
140
|
+
let entries: string[];
|
|
141
|
+
try {
|
|
142
|
+
entries = fs.readdirSync(expanded).slice(0, 20);
|
|
143
|
+
} catch {
|
|
144
|
+
return result;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// Try JSON files first
|
|
148
|
+
for (const entry of entries) {
|
|
149
|
+
if (!entry.endsWith('.json')) continue;
|
|
150
|
+
const filePath = path.join(expanded, entry);
|
|
151
|
+
try {
|
|
152
|
+
const stat = fs.statSync(filePath);
|
|
153
|
+
if (!stat.isFile() || stat.size > 1_000_000) continue;
|
|
154
|
+
const raw = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
|
|
155
|
+
if (raw && typeof raw === 'object') {
|
|
156
|
+
if ('mcpServers' in raw) {
|
|
157
|
+
result.detectedConfig = baseDir.endsWith('/') ? baseDir + entry : baseDir + '/' + entry;
|
|
158
|
+
result.detectedFormat = 'json';
|
|
159
|
+
result.detectedConfigKey = 'mcpServers';
|
|
160
|
+
return result;
|
|
161
|
+
}
|
|
162
|
+
if ('servers' in raw) {
|
|
163
|
+
result.detectedConfig = baseDir.endsWith('/') ? baseDir + entry : baseDir + '/' + entry;
|
|
164
|
+
result.detectedFormat = 'json';
|
|
165
|
+
result.detectedConfigKey = 'servers';
|
|
166
|
+
return result;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
} catch { /* skip unparseable files */ }
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Try TOML files
|
|
173
|
+
for (const entry of entries) {
|
|
174
|
+
if (!entry.endsWith('.toml')) continue;
|
|
175
|
+
const filePath = path.join(expanded, entry);
|
|
176
|
+
try {
|
|
177
|
+
const stat = fs.statSync(filePath);
|
|
178
|
+
if (!stat.isFile() || stat.size > 1_000_000) continue;
|
|
179
|
+
const lines = fs.readFileSync(filePath, 'utf-8').split('\n').slice(0, 50);
|
|
180
|
+
for (const line of lines) {
|
|
181
|
+
if (/^\s*\[mcp_servers/i.test(line) || /^\s*\[mcpServers/i.test(line)) {
|
|
182
|
+
const lower = line.toLowerCase();
|
|
183
|
+
const key = lower.includes('mcp_servers') ? 'mcp_servers' : 'mcpServers';
|
|
184
|
+
result.detectedConfig = baseDir.endsWith('/') ? baseDir + entry : baseDir + '/' + entry;
|
|
185
|
+
result.detectedFormat = 'toml';
|
|
186
|
+
result.detectedConfigKey = key;
|
|
187
|
+
return result;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
} catch { /* skip */ }
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
return result;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/* ─── AgentDef Conversion ─── */
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Convert a CustomAgentDef into the standard AgentDef that all downstream
|
|
200
|
+
* code (detectInstalled, generateSnippet, etc.) expects.
|
|
201
|
+
*
|
|
202
|
+
* Note: AgentDef.key is the *config key* (e.g. "mcpServers"), not the agent identifier.
|
|
203
|
+
* The agent identifier is the key in the MCP_AGENTS record, which comes from CustomAgentDef.key.
|
|
204
|
+
*/
|
|
205
|
+
export function toAgentDef(custom: CustomAgentDef): AgentDef {
|
|
206
|
+
return {
|
|
207
|
+
name: custom.name,
|
|
208
|
+
project: custom.project ?? null,
|
|
209
|
+
global: custom.global,
|
|
210
|
+
key: custom.configKey,
|
|
211
|
+
preferredTransport: custom.preferredTransport,
|
|
212
|
+
format: custom.format,
|
|
213
|
+
globalNestedKey: custom.globalNestedKey,
|
|
214
|
+
presenceCli: custom.presenceCli,
|
|
215
|
+
presenceDirs: custom.presenceDirs,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/* ─── Persistence ─── */
|
|
220
|
+
|
|
221
|
+
export function loadCustomAgents(): CustomAgentDef[] {
|
|
222
|
+
try {
|
|
223
|
+
const settings = readSettings();
|
|
224
|
+
const raw = settings.customAgents;
|
|
225
|
+
if (!Array.isArray(raw)) return [];
|
|
226
|
+
return raw.filter(
|
|
227
|
+
(item): item is CustomAgentDef => {
|
|
228
|
+
if (item == null || typeof item !== 'object') return false;
|
|
229
|
+
const obj = item as unknown as Record<string, unknown>;
|
|
230
|
+
return typeof obj.name === 'string' && typeof obj.key === 'string' && typeof obj.baseDir === 'string';
|
|
231
|
+
},
|
|
232
|
+
);
|
|
233
|
+
} catch {
|
|
234
|
+
console.warn('[custom-agents] Failed to parse, using empty list');
|
|
235
|
+
return [];
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
export function saveCustomAgents(agents: CustomAgentDef[]): void {
|
|
240
|
+
const settings = readSettings();
|
|
241
|
+
settings.customAgents = agents;
|
|
242
|
+
writeSettings(settings);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/* ─── Merged Registry ─── */
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* Returns all agents (built-in + custom) as a Record<agentId, AgentDef>.
|
|
249
|
+
* Built-in agents take priority on key collision.
|
|
250
|
+
*/
|
|
251
|
+
export function getAllAgents(): Record<string, AgentDef> {
|
|
252
|
+
const result: Record<string, AgentDef> = { ...MCP_AGENTS };
|
|
253
|
+
const customs = loadCustomAgents();
|
|
254
|
+
|
|
255
|
+
for (const custom of customs) {
|
|
256
|
+
if (custom.key in result) continue; // built-in priority
|
|
257
|
+
result[custom.key] = toAgentDef(custom);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
return result;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/* ─── Skill Scanning ─── */
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Scan skills installed in a custom agent's skill directory.
|
|
267
|
+
* Returns the same shape as detectAgentInstalledSkills.
|
|
268
|
+
*/
|
|
269
|
+
export function scanCustomAgentSkills(custom: CustomAgentDef): { skills: string[]; sourcePath: string } {
|
|
270
|
+
const skillDir = custom.skillDir || (custom.baseDir.endsWith('/') ? custom.baseDir + 'skills/' : custom.baseDir + '/skills/');
|
|
271
|
+
const expanded = expandHome(skillDir);
|
|
272
|
+
if (!fs.existsSync(expanded)) return { skills: [], sourcePath: expanded };
|
|
273
|
+
try {
|
|
274
|
+
const entries = fs.readdirSync(expanded, { withFileTypes: true });
|
|
275
|
+
const skills = entries
|
|
276
|
+
.filter(e => (e.isDirectory() || e.isSymbolicLink()) && !e.name.startsWith('.'))
|
|
277
|
+
.map(e => e.name)
|
|
278
|
+
.sort((a, b) => a.localeCompare(b));
|
|
279
|
+
return { skills, sourcePath: expanded };
|
|
280
|
+
} catch {
|
|
281
|
+
return { skills: [], sourcePath: expanded };
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/* ─── Validation ─── */
|
|
286
|
+
|
|
287
|
+
export function validateCustomAgentInput(input: {
|
|
288
|
+
name?: string;
|
|
289
|
+
baseDir?: string;
|
|
290
|
+
key?: string;
|
|
291
|
+
}, existingKeys: Set<string>, isEdit = false): string | null {
|
|
292
|
+
if (!input.name || !input.name.trim()) {
|
|
293
|
+
return 'Agent name is required';
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
if (!input.baseDir || !input.baseDir.trim()) {
|
|
297
|
+
return 'Config directory is required';
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
const dir = input.baseDir.trim();
|
|
301
|
+
if (!dir.startsWith('~/') && !dir.startsWith('/')) {
|
|
302
|
+
if (process.platform === 'win32' && /^[A-Z]:\\/i.test(dir)) {
|
|
303
|
+
// Windows absolute path — OK
|
|
304
|
+
} else {
|
|
305
|
+
return 'Must be an absolute path (e.g. ~/.qclaw/)';
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
if (!isEdit) {
|
|
310
|
+
const key = input.key || slugify(input.name.trim());
|
|
311
|
+
if (!key) return 'Cannot generate a valid key from this name';
|
|
312
|
+
if (key in MCP_AGENTS) {
|
|
313
|
+
const builtIn = MCP_AGENTS[key];
|
|
314
|
+
return `Conflicts with built-in agent "${builtIn.name}"`;
|
|
315
|
+
}
|
|
316
|
+
if (existingKeys.has(key)) {
|
|
317
|
+
return `An agent with key "${key}" already exists`;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
return null;
|
|
322
|
+
}
|
package/app/lib/fs.ts
CHANGED
|
@@ -49,7 +49,7 @@ export function getMindRoot(): string {
|
|
|
49
49
|
return effectiveSopRoot();
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
const IGNORED_DIRS = new Set(['.git', 'node_modules', 'app', '.next', '.DS_Store']);
|
|
52
|
+
const IGNORED_DIRS = new Set(['.git', 'node_modules', 'app', '.next', '.DS_Store', '.media', 'mcp']);
|
|
53
53
|
const ALLOWED_EXTENSIONS = new Set([
|
|
54
54
|
'.md', '.csv', '.json', '.pdf',
|
|
55
55
|
'.png', '.jpg', '.jpeg', '.gif', '.webp', '.svg', '.bmp', '.ico',
|