@geminilight/mindos 0.6.57 → 0.6.59
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 +24 -24
- package/_standalone/.next/build-manifest.json +3 -3
- package/_standalone/.next/cache/.previewinfo +1 -1
- package/_standalone/.next/cache/.rscinfo +1 -1
- package/_standalone/.next/cache/config.json +3 -3
- package/_standalone/.next/prerender-manifest.json +3 -3
- package/_standalone/.next/react-loadable-manifest.json +1 -1
- package/_standalone/.next/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 -2
- package/_standalone/.next/server/app/agents/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/agents/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/delegations/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/discover/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/config/route.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 -1
- package/_standalone/.next/server/app/api/agents/custom/detect/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/agents/custom/route.js +1 -1
- package/_standalone/.next/server/app/api/agents/custom/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/ask/route.js +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.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_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 +3 -3
- package/_standalone/.next/server/app/echo/[segment]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/echo/page.js +1 -1
- package/_standalone/.next/server/app/echo/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/echo/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/explore/page.js +3 -3
- package/_standalone/.next/server/app/explore/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/explore/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/help/page.js +2 -2
- package/_standalone/.next/server/app/help/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/inbox/history/page.js +1 -1
- package/_standalone/.next/server/app/inbox/history/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/inbox/history/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/login/page.js +2 -2
- package/_standalone/.next/server/app/login/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/page.js +2 -8
- package/_standalone/.next/server/app/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/setup/page.js +2 -2
- package/_standalone/.next/server/app/setup/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/trash/page.js +3 -3
- package/_standalone/.next/server/app/trash/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/trash/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/view/[...path]/page.js +3 -3
- package/_standalone/.next/server/app/view/[...path]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/view/[...path]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/wiki/page.js +2 -2
- package/_standalone/.next/server/app/wiki/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/wiki/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app-paths-manifest.json +24 -24
- package/_standalone/.next/server/chunks/1550.js +1 -1
- package/_standalone/.next/server/chunks/1750.js +1 -1
- package/_standalone/.next/server/chunks/3484.js +1 -1
- package/_standalone/.next/server/chunks/530.js +61 -62
- package/_standalone/.next/server/chunks/6539.js +1 -1
- package/_standalone/.next/server/chunks/{2159.js → 8343.js} +2 -2
- package/_standalone/.next/server/chunks/9787.js +2 -0
- package/_standalone/.next/server/middleware-build-manifest.js +1 -1
- package/_standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/_standalone/.next/server/pages/500.html +2 -2
- package/_standalone/.next/server/server-reference-manifest.js +1 -1
- package/_standalone/.next/server/server-reference-manifest.json +1 -1
- package/_standalone/.next/static/chunks/{1814.a7c127b2c73d1f70.js → 1814.a79b84d37df75c43.js} +1 -1
- package/_standalone/.next/static/chunks/3427-2e61a5df1f5e55fb.js +1 -0
- package/_standalone/.next/static/chunks/5581-dac72e9f16e5ea29.js +29 -0
- package/_standalone/.next/static/chunks/6297-085daa21037d5f81.js +1 -0
- package/_standalone/.next/static/chunks/7249-6cf8f2b78718c59e.js +11 -0
- package/_standalone/.next/static/chunks/8520-56ec9ff087c15204.js +22 -0
- package/_standalone/.next/static/chunks/9905-a19d379cb225246e.js +1 -0
- package/_standalone/.next/static/chunks/app/agents/[agentKey]/{page-7bdeab5af8e4f5f2.js → page-35ea6de1af2be3b5.js} +1 -1
- package/_standalone/.next/static/chunks/app/agents/page-b172ea3743adb047.js +1 -0
- package/_standalone/.next/static/chunks/app/changes/{page-5a72144d1080a699.js → page-6d2f49651c0061f7.js} +1 -1
- package/_standalone/.next/static/chunks/app/echo/[segment]/page-84b95256f6e38aae.js +11 -0
- package/_standalone/.next/static/chunks/app/explore/{page-d3d99308146c2240.js → page-d9f58000bc445360.js} +2 -2
- package/_standalone/.next/static/chunks/app/help/{page-222df603080b5fab.js → page-f8cb806371b3175f.js} +1 -1
- package/_standalone/.next/static/chunks/app/inbox/history/{page-07819cf95cb0805f.js → page-26e71fb6f716a4c4.js} +1 -1
- package/_standalone/.next/static/chunks/app/layout-b89b0d955f39a753.js +164 -0
- package/_standalone/.next/static/chunks/app/login/{page-0eeef685052869a6.js → page-18fb00d568cd1f0e.js} +1 -1
- package/_standalone/.next/static/chunks/app/page-a8e6f085f38388bf.js +1 -0
- package/_standalone/.next/static/chunks/app/setup/{page-99fcfc460fa29733.js → page-821714e7477be46c.js} +1 -1
- package/_standalone/.next/static/chunks/app/trash/page-f92b728b78ac0f7e.js +1 -0
- package/_standalone/.next/static/chunks/app/view/[...path]/{not-found-fc04c2bd4f35bc6f.js → not-found-6e0c75ad26ce8572.js} +1 -1
- package/_standalone/.next/static/chunks/app/view/[...path]/page-f87f4901b5e1a88f.js +12 -0
- package/_standalone/.next/static/chunks/app/wiki/page-641edb1f3cff2f93.js +1 -0
- package/_standalone/.next/static/chunks/{webpack-2c19436659aa657b.js → webpack-72e8d9e9073fd1f9.js} +1 -1
- package/_standalone/.next/static/css/6c104b118d3bc9b7.css +1 -0
- package/_standalone/.next/trace +64 -64
- 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/app/globals.css +2 -1
- package/_standalone/components/AskFab.tsx +4 -4
- package/_standalone/components/AskModal.tsx +1 -1
- package/_standalone/components/GuideCard.tsx +101 -152
- package/_standalone/components/RightAskPanel.tsx +2 -2
- package/_standalone/components/agents/CustomAgentModal.tsx +32 -8
- package/_standalone/components/ask/AskContent.tsx +90 -51
- package/_standalone/components/ask/AskHeader.tsx +218 -18
- package/_standalone/components/ask/MessageList.tsx +66 -47
- package/_standalone/components/ask/SessionHistory.tsx +86 -60
- package/_standalone/components/ask/SessionTabBar.tsx +29 -21
- package/_standalone/components/ask/ThinkingBlock.tsx +6 -5
- package/_standalone/components/ask/ToolCallBlock.tsx +10 -9
- package/_standalone/components/settings/SettingsContent.tsx +1 -1
- package/_standalone/data/skills/mindos/SKILL.md +72 -15
- package/_standalone/data/skills/mindos-zh/SKILL.md +73 -8
- package/_standalone/hooks/useAskSession.ts +23 -1
- package/_standalone/lib/stores/locale-store.ts +20 -6
- package/_standalone/tsconfig.tsbuildinfo +1 -1
- package/app/app/api/agents/custom/route.ts +8 -0
- package/app/app/api/ask/route.ts +171 -10
- package/app/app/api/mcp/agents/route.ts +5 -3
- package/app/app/api/settings/route.ts +9 -0
- package/app/app/api/settings/test-key/route.ts +13 -1
- package/app/app/globals.css +2 -1
- package/app/app/layout.tsx +16 -4
- package/app/components/AskFab.tsx +4 -4
- package/app/components/AskModal.tsx +1 -1
- package/app/components/GuideCard.tsx +101 -152
- package/app/components/HomeContent.tsx +116 -575
- package/app/components/RightAskPanel.tsx +2 -2
- package/app/components/WikiHomeContent.tsx +151 -3
- package/app/components/agents/CustomAgentModal.tsx +32 -8
- package/app/components/ask/AskContent.tsx +90 -51
- package/app/components/ask/AskHeader.tsx +218 -18
- package/app/components/ask/MessageList.tsx +66 -47
- package/app/components/ask/SessionHistory.tsx +86 -60
- package/app/components/ask/SessionTabBar.tsx +29 -21
- package/app/components/ask/ThinkingBlock.tsx +6 -5
- package/app/components/ask/ToolCallBlock.tsx +10 -9
- package/app/components/settings/SettingsContent.tsx +1 -1
- package/app/data/skills/mindos/SKILL.md +72 -15
- package/app/data/skills/mindos-zh/SKILL.md +73 -8
- package/app/hooks/useAskSession.ts +23 -1
- package/app/lib/custom-agents.ts +45 -2
- package/app/lib/i18n/modules/ai-chat.ts +97 -10
- package/app/lib/i18n/modules/onboarding.ts +12 -12
- package/app/lib/i18n/modules/panels.ts +10 -2
- package/app/lib/mcp-agents.ts +10 -0
- package/app/lib/stores/LocaleStoreInit.tsx +24 -1
- package/app/lib/stores/locale-store.ts +20 -6
- package/app/lib/types.ts +1 -0
- package/bin/lib/mcp-agents.js +10 -0
- package/package.json +1 -1
- package/skills/mindos/SKILL.md +69 -11
- package/skills/mindos/references/knowledge-health.md +120 -0
- package/skills/mindos-max/SKILL.md +238 -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 +241 -0
- package/skills/mindos-zh/SKILL.md +72 -8
- package/_standalone/.next/server/chunks/2364.js +0 -2
- package/_standalone/.next/server/chunks/357.js +0 -1
- package/_standalone/.next/static/chunks/1053-5cb008a24930e271.js +0 -29
- package/_standalone/.next/static/chunks/178-105779afb62d36d9.js +0 -1
- package/_standalone/.next/static/chunks/2218-d54538000574ffef.js +0 -1
- package/_standalone/.next/static/chunks/2549-e63cf57fa927a41d.js +0 -1
- package/_standalone/.next/static/chunks/7249-8cd568ad23656622.js +0 -11
- package/_standalone/.next/static/chunks/9274-296ab35f9f09e42e.js +0 -1
- package/_standalone/.next/static/chunks/app/agents/page-5d1446665ddb3801.js +0 -1
- package/_standalone/.next/static/chunks/app/echo/[segment]/page-b0103509ce34444b.js +0 -11
- package/_standalone/.next/static/chunks/app/layout-b3919384ec2eb979.js +0 -186
- package/_standalone/.next/static/chunks/app/page-6436a99cda35132b.js +0 -7
- package/_standalone/.next/static/chunks/app/trash/page-8dc388695344fdd4.js +0 -1
- package/_standalone/.next/static/chunks/app/view/[...path]/page-b292b55305ecc021.js +0 -12
- package/_standalone/.next/static/chunks/app/wiki/page-d492256a93f0b8bc.js +0 -1
- package/_standalone/.next/static/css/fd84c8316ead16eb.css +0 -1
- /package/_standalone/.next/static/{zOaEtgJbdRMncnCBucULp → u8p6oIRTcr_ns-ElNZ9rl}/_buildManifest.js +0 -0
- /package/_standalone/.next/static/{zOaEtgJbdRMncnCBucULp → u8p6oIRTcr_ns-ElNZ9rl}/_ssgManifest.js +0 -0
|
@@ -254,11 +254,11 @@ describe('POST /api/mcp/install', () => {
|
|
|
254
254
|
});
|
|
255
255
|
|
|
256
256
|
describe('GET /api/mcp/agents', () => {
|
|
257
|
-
it('returns all
|
|
257
|
+
it('returns all 21 agents (1 builtin + 20 registry)', async () => {
|
|
258
258
|
const { GET } = await importAgentsRoute();
|
|
259
259
|
const res = await GET();
|
|
260
260
|
const body = await res.json();
|
|
261
|
-
expect(body.agents).toHaveLength(
|
|
261
|
+
expect(body.agents).toHaveLength(21);
|
|
262
262
|
const keys = body.agents.map((a: { key: string }) => a.key);
|
|
263
263
|
expect(keys).toContain('mindos');
|
|
264
264
|
expect(keys).toContain('claude-code');
|
|
@@ -275,6 +275,7 @@ describe('GET /api/mcp/agents', () => {
|
|
|
275
275
|
expect(keys).toContain('roo');
|
|
276
276
|
expect(keys).toContain('github-copilot');
|
|
277
277
|
expect(keys).toContain('codex');
|
|
278
|
+
expect(keys).toContain('antigravity');
|
|
278
279
|
});
|
|
279
280
|
|
|
280
281
|
it('detects installed agent from config file', async () => {
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Tests for non-streaming API fallback.
|
|
5
|
+
* Verifies:
|
|
6
|
+
* 1. pi-ai → OpenAI message format conversion
|
|
7
|
+
* 2. SSE response reassembly (for proxies that ignore stream:false)
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
// ─────────────────────────────────────────────────
|
|
11
|
+
// Replicate helper functions from route.ts for unit testing
|
|
12
|
+
// ─────────────────────────────────────────────────
|
|
13
|
+
|
|
14
|
+
function piMessagesToOpenAI(piMessages: any[]): any[] {
|
|
15
|
+
return piMessages.map(msg => {
|
|
16
|
+
const role = msg.role;
|
|
17
|
+
if (role === 'system') return null;
|
|
18
|
+
if (role === 'user') {
|
|
19
|
+
return { role: 'user', content: typeof msg.content === 'string' ? msg.content : msg.content };
|
|
20
|
+
}
|
|
21
|
+
if (role === 'assistant') {
|
|
22
|
+
const content = msg.content;
|
|
23
|
+
let textContent = '';
|
|
24
|
+
const toolCalls: any[] = [];
|
|
25
|
+
if (Array.isArray(content)) {
|
|
26
|
+
for (const part of content) {
|
|
27
|
+
if (part.type === 'text' && part.text) {
|
|
28
|
+
textContent += part.text;
|
|
29
|
+
} else if (part.type === 'toolCall') {
|
|
30
|
+
toolCalls.push({
|
|
31
|
+
id: part.id ?? `call_fallback`,
|
|
32
|
+
type: 'function',
|
|
33
|
+
function: { name: part.name ?? 'unknown', arguments: JSON.stringify(part.arguments ?? {}) },
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const result: any = { role: 'assistant' };
|
|
39
|
+
result.content = textContent || '';
|
|
40
|
+
if (toolCalls.length > 0) result.tool_calls = toolCalls;
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
if (role === 'toolResult') {
|
|
44
|
+
const contentText = Array.isArray(msg.content)
|
|
45
|
+
? msg.content.filter((c: any) => c.type === 'text').map((c: any) => c.text ?? '').join('\n')
|
|
46
|
+
: String(msg.content ?? '');
|
|
47
|
+
return { role: 'tool', tool_call_id: msg.toolCallId ?? 'unknown', content: contentText };
|
|
48
|
+
}
|
|
49
|
+
return null;
|
|
50
|
+
}).filter(Boolean);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function reassembleSSE(sseText: string): any {
|
|
54
|
+
const lines = sseText.split('\n');
|
|
55
|
+
let content = '';
|
|
56
|
+
let role = 'assistant';
|
|
57
|
+
let finishReason = 'stop';
|
|
58
|
+
const toolCalls: Map<number, { id: string; type: string; function: { name: string; arguments: string } }> = new Map();
|
|
59
|
+
|
|
60
|
+
for (const line of lines) {
|
|
61
|
+
const trimmed = line.trim();
|
|
62
|
+
if (!trimmed.startsWith('data:')) continue;
|
|
63
|
+
const payload = trimmed.slice(5).trim();
|
|
64
|
+
if (payload === '[DONE]') break;
|
|
65
|
+
let chunk: any;
|
|
66
|
+
try { chunk = JSON.parse(payload); } catch { continue; }
|
|
67
|
+
const delta = chunk?.choices?.[0]?.delta;
|
|
68
|
+
if (!delta) continue;
|
|
69
|
+
if (delta.role) role = delta.role;
|
|
70
|
+
if (delta.content) content += delta.content;
|
|
71
|
+
if (chunk.choices[0].finish_reason) finishReason = chunk.choices[0].finish_reason;
|
|
72
|
+
if (delta.tool_calls) {
|
|
73
|
+
for (const tc of delta.tool_calls) {
|
|
74
|
+
const idx = tc.index ?? 0;
|
|
75
|
+
const existing = toolCalls.get(idx);
|
|
76
|
+
if (!existing) {
|
|
77
|
+
toolCalls.set(idx, {
|
|
78
|
+
id: tc.id ?? '',
|
|
79
|
+
type: tc.type ?? 'function',
|
|
80
|
+
function: { name: tc.function?.name ?? '', arguments: tc.function?.arguments ?? '' },
|
|
81
|
+
});
|
|
82
|
+
} else {
|
|
83
|
+
if (tc.id) existing.id = tc.id;
|
|
84
|
+
if (tc.function?.name) existing.function.name += tc.function.name;
|
|
85
|
+
if (tc.function?.arguments) existing.function.arguments += tc.function.arguments;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const message: any = { role, content: content || null };
|
|
92
|
+
if (toolCalls.size > 0) {
|
|
93
|
+
message.tool_calls = Array.from(toolCalls.values());
|
|
94
|
+
}
|
|
95
|
+
return { choices: [{ message, finish_reason: finishReason }] };
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// ─────────────────────────────────────────────────
|
|
99
|
+
// piMessagesToOpenAI tests
|
|
100
|
+
// ─────────────────────────────────────────────────
|
|
101
|
+
|
|
102
|
+
describe('piMessagesToOpenAI', () => {
|
|
103
|
+
it('converts plain user message', () => {
|
|
104
|
+
expect(piMessagesToOpenAI([{ role: 'user', content: 'Hello!' }]))
|
|
105
|
+
.toEqual([{ role: 'user', content: 'Hello!' }]);
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
it('converts assistant text-only message', () => {
|
|
109
|
+
const result = piMessagesToOpenAI([{
|
|
110
|
+
role: 'assistant',
|
|
111
|
+
content: [{ type: 'text', text: 'Response' }],
|
|
112
|
+
}]);
|
|
113
|
+
expect(result).toEqual([{ role: 'assistant', content: 'Response' }]);
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
it('converts assistant message with tool calls', () => {
|
|
117
|
+
const result = piMessagesToOpenAI([{
|
|
118
|
+
role: 'assistant',
|
|
119
|
+
content: [
|
|
120
|
+
{ type: 'text', text: 'Calling tool' },
|
|
121
|
+
{ type: 'toolCall', id: 'call_1', name: 'read_file', arguments: { path: '/tmp' } },
|
|
122
|
+
],
|
|
123
|
+
}]);
|
|
124
|
+
expect(result[0].content).toBe('Calling tool');
|
|
125
|
+
expect(result[0].tool_calls[0]).toMatchObject({
|
|
126
|
+
id: 'call_1', type: 'function',
|
|
127
|
+
function: { name: 'read_file', arguments: '{"path":"/tmp"}' },
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
it('converts tool result message', () => {
|
|
132
|
+
expect(piMessagesToOpenAI([{
|
|
133
|
+
role: 'toolResult', toolCallId: 'call_1',
|
|
134
|
+
content: [{ type: 'text', text: 'result data' }],
|
|
135
|
+
}])).toEqual([{ role: 'tool', tool_call_id: 'call_1', content: 'result data' }]);
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
it('skips system messages', () => {
|
|
139
|
+
const result = piMessagesToOpenAI([
|
|
140
|
+
{ role: 'system', content: 'sys' },
|
|
141
|
+
{ role: 'user', content: 'hi' },
|
|
142
|
+
]);
|
|
143
|
+
expect(result).toHaveLength(1);
|
|
144
|
+
expect(result[0].role).toBe('user');
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
it('handles empty assistant content', () => {
|
|
148
|
+
const result = piMessagesToOpenAI([{ role: 'assistant', content: [] }]);
|
|
149
|
+
expect(result[0]).toEqual({ role: 'assistant', content: '' });
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
it('handles complex conversation history', () => {
|
|
153
|
+
const result = piMessagesToOpenAI([
|
|
154
|
+
{ role: 'user', content: 'list files' },
|
|
155
|
+
{ role: 'assistant', content: [
|
|
156
|
+
{ type: 'text', text: 'checking' },
|
|
157
|
+
{ type: 'toolCall', id: 'c1', name: 'ls', arguments: {} },
|
|
158
|
+
]},
|
|
159
|
+
{ role: 'toolResult', toolCallId: 'c1', content: [{ type: 'text', text: 'a.txt' }] },
|
|
160
|
+
{ role: 'assistant', content: [{ type: 'text', text: 'Found a.txt' }] },
|
|
161
|
+
]);
|
|
162
|
+
expect(result).toHaveLength(4);
|
|
163
|
+
expect(result[0].role).toBe('user');
|
|
164
|
+
expect(result[1].role).toBe('assistant');
|
|
165
|
+
expect(result[1].tool_calls).toHaveLength(1);
|
|
166
|
+
expect(result[2].role).toBe('tool');
|
|
167
|
+
expect(result[3]).toMatchObject({ role: 'assistant', content: 'Found a.txt' });
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
// ─────────────────────────────────────────────────
|
|
172
|
+
// reassembleSSE tests
|
|
173
|
+
// ─────────────────────────────────────────────────
|
|
174
|
+
|
|
175
|
+
describe('reassembleSSE', () => {
|
|
176
|
+
it('reassembles simple text SSE response', () => {
|
|
177
|
+
const sse = [
|
|
178
|
+
'data: {"choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}',
|
|
179
|
+
'data: {"choices":[{"index":0,"delta":{"content":"Hello"},"finish_reason":null}]}',
|
|
180
|
+
'data: {"choices":[{"index":0,"delta":{"content":"!"},"finish_reason":null}]}',
|
|
181
|
+
'data: {"choices":[{"index":0,"delta":{"content":""},"finish_reason":"stop"}]}',
|
|
182
|
+
'data: [DONE]',
|
|
183
|
+
].join('\n');
|
|
184
|
+
|
|
185
|
+
const result = reassembleSSE(sse);
|
|
186
|
+
expect(result.choices[0].message.content).toBe('Hello!');
|
|
187
|
+
expect(result.choices[0].message.role).toBe('assistant');
|
|
188
|
+
expect(result.choices[0].finish_reason).toBe('stop');
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
it('handles ikuncode-style empty response (proxy returns SSE with no content)', () => {
|
|
192
|
+
// This is the actual response from ikuncode when stream:false is sent
|
|
193
|
+
const sse = [
|
|
194
|
+
'data: {"id":"","object":"chat.completion.chunk","created":0,"model":"gpt-5.4","choices":[],"usage":{"prompt_tokens":28,"completion_tokens":0,"total_tokens":28}}',
|
|
195
|
+
'',
|
|
196
|
+
'data: [DONE]',
|
|
197
|
+
].join('\n');
|
|
198
|
+
|
|
199
|
+
const result = reassembleSSE(sse);
|
|
200
|
+
// Should return empty content (no choices with delta)
|
|
201
|
+
expect(result.choices[0].message.content).toBeNull();
|
|
202
|
+
expect(result.choices[0].message.role).toBe('assistant');
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
it('reassembles SSE with tool calls', () => {
|
|
206
|
+
const sse = [
|
|
207
|
+
'data: {"choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}',
|
|
208
|
+
'data: {"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"id":"call_abc","type":"function","function":{"name":"read_","arguments":""}}]},"finish_reason":null}]}',
|
|
209
|
+
'data: {"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"name":"file","arguments":"{\\"pa"}}]},"finish_reason":null}]}',
|
|
210
|
+
'data: {"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"th\\":\\"/tmp\\"}"}}]},"finish_reason":null}]}',
|
|
211
|
+
'data: {"choices":[{"index":0,"delta":{"content":""},"finish_reason":"tool_calls"}]}',
|
|
212
|
+
'data: [DONE]',
|
|
213
|
+
].join('\n');
|
|
214
|
+
|
|
215
|
+
const result = reassembleSSE(sse);
|
|
216
|
+
const msg = result.choices[0].message;
|
|
217
|
+
expect(msg.tool_calls).toHaveLength(1);
|
|
218
|
+
expect(msg.tool_calls[0].id).toBe('call_abc');
|
|
219
|
+
expect(msg.tool_calls[0].function.name).toBe('read_file');
|
|
220
|
+
expect(msg.tool_calls[0].function.arguments).toBe('{"path":"/tmp"}');
|
|
221
|
+
expect(result.choices[0].finish_reason).toBe('tool_calls');
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
it('handles SSE with multiple tool calls', () => {
|
|
225
|
+
const sse = [
|
|
226
|
+
'data: {"choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}',
|
|
227
|
+
'data: {"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"id":"c1","type":"function","function":{"name":"tool_a","arguments":"{}"}}]},"finish_reason":null}]}',
|
|
228
|
+
'data: {"choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"id":"c2","type":"function","function":{"name":"tool_b","arguments":"{}"}}]},"finish_reason":null}]}',
|
|
229
|
+
'data: {"choices":[{"index":0,"delta":{"content":""},"finish_reason":"tool_calls"}]}',
|
|
230
|
+
'data: [DONE]',
|
|
231
|
+
].join('\n');
|
|
232
|
+
|
|
233
|
+
const result = reassembleSSE(sse);
|
|
234
|
+
expect(result.choices[0].message.tool_calls).toHaveLength(2);
|
|
235
|
+
expect(result.choices[0].message.tool_calls[0].id).toBe('c1');
|
|
236
|
+
expect(result.choices[0].message.tool_calls[1].id).toBe('c2');
|
|
237
|
+
});
|
|
238
|
+
|
|
239
|
+
it('handles SSE with text + tool calls mixed', () => {
|
|
240
|
+
const sse = [
|
|
241
|
+
'data: {"choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}',
|
|
242
|
+
'data: {"choices":[{"index":0,"delta":{"content":"Let me "},"finish_reason":null}]}',
|
|
243
|
+
'data: {"choices":[{"index":0,"delta":{"content":"check."},"finish_reason":null}]}',
|
|
244
|
+
'data: {"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"id":"c1","type":"function","function":{"name":"search","arguments":"{\\"q\\":\\"test\\"}"}}]},"finish_reason":null}]}',
|
|
245
|
+
'data: {"choices":[{"index":0,"delta":{"content":""},"finish_reason":"tool_calls"}]}',
|
|
246
|
+
'data: [DONE]',
|
|
247
|
+
].join('\n');
|
|
248
|
+
|
|
249
|
+
const result = reassembleSSE(sse);
|
|
250
|
+
expect(result.choices[0].message.content).toBe('Let me check.');
|
|
251
|
+
expect(result.choices[0].message.tool_calls).toHaveLength(1);
|
|
252
|
+
});
|
|
253
|
+
|
|
254
|
+
it('skips invalid SSE lines gracefully', () => {
|
|
255
|
+
const sse = [
|
|
256
|
+
'data: {"choices":[{"index":0,"delta":{"content":"OK"},"finish_reason":null}]}',
|
|
257
|
+
'data: INVALID_JSON',
|
|
258
|
+
'',
|
|
259
|
+
':comment line',
|
|
260
|
+
'data: {"choices":[{"index":0,"delta":{"content":""},"finish_reason":"stop"}]}',
|
|
261
|
+
'data: [DONE]',
|
|
262
|
+
].join('\n');
|
|
263
|
+
|
|
264
|
+
const result = reassembleSSE(sse);
|
|
265
|
+
expect(result.choices[0].message.content).toBe('OK');
|
|
266
|
+
});
|
|
267
|
+
|
|
268
|
+
it('handles SSE with usage chunk at end (no delta)', () => {
|
|
269
|
+
const sse = [
|
|
270
|
+
'data: {"choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}',
|
|
271
|
+
'data: {"choices":[{"index":0,"delta":{"content":"Hi"},"finish_reason":null}]}',
|
|
272
|
+
'data: {"choices":[{"index":0,"delta":{"content":""},"finish_reason":"stop"}]}',
|
|
273
|
+
'data: {"choices":[],"usage":{"prompt_tokens":10,"completion_tokens":5,"total_tokens":15}}',
|
|
274
|
+
'data: [DONE]',
|
|
275
|
+
].join('\n');
|
|
276
|
+
|
|
277
|
+
const result = reassembleSSE(sse);
|
|
278
|
+
expect(result.choices[0].message.content).toBe('Hi');
|
|
279
|
+
expect(result.choices[0].finish_reason).toBe('stop');
|
|
280
|
+
});
|
|
281
|
+
});
|
|
@@ -35,6 +35,7 @@ const SKILL_AGENT_REGISTRY: Record<string, { mode: 'universal' | 'additional' |
|
|
|
35
35
|
'roo': { mode: 'additional', skillAgentName: 'roo' },
|
|
36
36
|
'github-copilot': { mode: 'universal' },
|
|
37
37
|
'codex': { mode: 'universal' },
|
|
38
|
+
'antigravity': { mode: 'additional', skillAgentName: 'antigravity' },
|
|
38
39
|
};
|
|
39
40
|
|
|
40
41
|
/* ── Replicated logic from scripts/setup.js ──────────────────────── */
|
|
@@ -180,7 +180,7 @@ body {
|
|
|
180
180
|
}
|
|
181
181
|
|
|
182
182
|
.prose {
|
|
183
|
-
font-family: var(--prose-font-override, '
|
|
183
|
+
font-family: var(--prose-font-override, 'IBM Plex Sans', system-ui, sans-serif);
|
|
184
184
|
color: var(--prose-body);
|
|
185
185
|
line-height: 1.85;
|
|
186
186
|
font-size: var(--prose-font-size-override, 0.95rem);
|
|
@@ -238,6 +238,7 @@ body {
|
|
|
238
238
|
|
|
239
239
|
/* Ask Panel — compact prose for side panel chat bubbles */
|
|
240
240
|
.prose.prose-panel {
|
|
241
|
+
font-family: 'IBM Plex Sans', system-ui, sans-serif;
|
|
241
242
|
font-size: 0.8125rem !important;
|
|
242
243
|
line-height: 1.6;
|
|
243
244
|
}
|
|
@@ -22,11 +22,11 @@ export default function AskFab({ onToggle, askPanelOpen }: AskFabProps) {
|
|
|
22
22
|
fixed z-40 bottom-5 right-5
|
|
23
23
|
items-center justify-center
|
|
24
24
|
gap-0 hover:gap-2
|
|
25
|
-
p-3 rounded-
|
|
26
|
-
text-
|
|
27
|
-
shadow-
|
|
25
|
+
p-3 rounded-2xl
|
|
26
|
+
text-[var(--amber-foreground)] font-medium text-[13px]
|
|
27
|
+
shadow-md shadow-[var(--amber)]/15
|
|
28
28
|
transition-all duration-200 ease-out
|
|
29
|
-
hover:shadow-
|
|
29
|
+
hover:shadow-lg hover:shadow-[var(--amber)]/20
|
|
30
30
|
active:scale-95 cursor-pointer overflow-hidden
|
|
31
31
|
${askPanelOpen ? 'opacity-0 pointer-events-none translate-y-2' : 'opacity-100 translate-y-0'}
|
|
32
32
|
`}
|
|
@@ -29,7 +29,7 @@ export default function AskModal({ open, onClose, currentFile, initialMessage, i
|
|
|
29
29
|
role="dialog"
|
|
30
30
|
aria-modal="true"
|
|
31
31
|
aria-label={t.ask.title}
|
|
32
|
-
className="w-full md:max-w-2xl md:mx-4 bg-card border-t md:border border-border rounded-t-2xl md:rounded-
|
|
32
|
+
className="w-full md:max-w-2xl md:mx-4 bg-card border-t md:border border-border/60 rounded-t-2xl md:rounded-2xl shadow-2xl flex flex-col h-[92vh] md:h-auto md:max-h-[75vh]"
|
|
33
33
|
>
|
|
34
34
|
<AskContent
|
|
35
35
|
visible={open}
|