@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.
Files changed (293) hide show
  1. package/_standalone/.mindos-build-version +1 -1
  2. package/_standalone/.next/BUILD_ID +1 -1
  3. package/_standalone/.next/app-path-routes-manifest.json +24 -24
  4. package/_standalone/.next/build-manifest.json +3 -3
  5. package/_standalone/.next/cache/.previewinfo +1 -1
  6. package/_standalone/.next/cache/.rscinfo +1 -1
  7. package/_standalone/.next/cache/config.json +3 -3
  8. package/_standalone/.next/prerender-manifest.json +3 -3
  9. package/_standalone/.next/react-loadable-manifest.json +1 -1
  10. package/_standalone/.next/server/app/.well-known/agent-card.json/route_client-reference-manifest.js +1 -1
  11. package/_standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  12. package/_standalone/.next/server/app/_global-error.html +2 -2
  13. package/_standalone/.next/server/app/_global-error.rsc +1 -1
  14. package/_standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  15. package/_standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  16. package/_standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  17. package/_standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  18. package/_standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  19. package/_standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  20. package/_standalone/.next/server/app/_not-found/page.js +1 -1
  21. package/_standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  22. package/_standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  23. package/_standalone/.next/server/app/agents/[agentKey]/page.js +2 -2
  24. package/_standalone/.next/server/app/agents/[agentKey]/page.js.nft.json +1 -1
  25. package/_standalone/.next/server/app/agents/[agentKey]/page_client-reference-manifest.js +1 -1
  26. package/_standalone/.next/server/app/agents/page.js +2 -2
  27. package/_standalone/.next/server/app/agents/page.js.nft.json +1 -1
  28. package/_standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  29. package/_standalone/.next/server/app/api/a2a/agents/route_client-reference-manifest.js +1 -1
  30. package/_standalone/.next/server/app/api/a2a/delegations/route_client-reference-manifest.js +1 -1
  31. package/_standalone/.next/server/app/api/a2a/discover/route_client-reference-manifest.js +1 -1
  32. package/_standalone/.next/server/app/api/a2a/route_client-reference-manifest.js +1 -1
  33. package/_standalone/.next/server/app/api/acp/config/route.js +1 -1
  34. package/_standalone/.next/server/app/api/acp/config/route_client-reference-manifest.js +1 -1
  35. package/_standalone/.next/server/app/api/acp/detect/route.js +1 -1
  36. package/_standalone/.next/server/app/api/acp/detect/route_client-reference-manifest.js +1 -1
  37. package/_standalone/.next/server/app/api/acp/install/route_client-reference-manifest.js +1 -1
  38. package/_standalone/.next/server/app/api/acp/registry/route_client-reference-manifest.js +1 -1
  39. package/_standalone/.next/server/app/api/acp/session/route_client-reference-manifest.js +1 -1
  40. package/_standalone/.next/server/app/api/agent-activity/route_client-reference-manifest.js +1 -1
  41. package/_standalone/.next/server/app/api/agents/custom/detect/route.js +1 -1
  42. package/_standalone/.next/server/app/api/agents/custom/detect/route_client-reference-manifest.js +1 -1
  43. package/_standalone/.next/server/app/api/agents/custom/route.js +1 -1
  44. package/_standalone/.next/server/app/api/agents/custom/route_client-reference-manifest.js +1 -1
  45. package/_standalone/.next/server/app/api/ask/route.js +5 -5
  46. package/_standalone/.next/server/app/api/ask/route.js.nft.json +1 -1
  47. package/_standalone/.next/server/app/api/ask/route_client-reference-manifest.js +1 -1
  48. package/_standalone/.next/server/app/api/ask-sessions/route_client-reference-manifest.js +1 -1
  49. package/_standalone/.next/server/app/api/auth/route_client-reference-manifest.js +1 -1
  50. package/_standalone/.next/server/app/api/backlinks/route.js.nft.json +1 -1
  51. package/_standalone/.next/server/app/api/backlinks/route_client-reference-manifest.js +1 -1
  52. package/_standalone/.next/server/app/api/bootstrap/route.js.nft.json +1 -1
  53. package/_standalone/.next/server/app/api/bootstrap/route_client-reference-manifest.js +1 -1
  54. package/_standalone/.next/server/app/api/changes/route.js.nft.json +1 -1
  55. package/_standalone/.next/server/app/api/changes/route_client-reference-manifest.js +1 -1
  56. package/_standalone/.next/server/app/api/export/route.js.nft.json +1 -1
  57. package/_standalone/.next/server/app/api/export/route_client-reference-manifest.js +1 -1
  58. package/_standalone/.next/server/app/api/extract-pdf/route_client-reference-manifest.js +1 -1
  59. package/_standalone/.next/server/app/api/file/import/route.js.nft.json +1 -1
  60. package/_standalone/.next/server/app/api/file/import/route_client-reference-manifest.js +1 -1
  61. package/_standalone/.next/server/app/api/file/raw/route.js.nft.json +1 -1
  62. package/_standalone/.next/server/app/api/file/raw/route_client-reference-manifest.js +1 -1
  63. package/_standalone/.next/server/app/api/file/route.js.nft.json +1 -1
  64. package/_standalone/.next/server/app/api/file/route_client-reference-manifest.js +1 -1
  65. package/_standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  66. package/_standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  67. package/_standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  68. package/_standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  69. package/_standalone/.next/server/app/api/graph/route.js.nft.json +1 -1
  70. package/_standalone/.next/server/app/api/graph/route_client-reference-manifest.js +1 -1
  71. package/_standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  72. package/_standalone/.next/server/app/api/inbox/route.js.nft.json +1 -1
  73. package/_standalone/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -1
  74. package/_standalone/.next/server/app/api/init/route.js.nft.json +1 -1
  75. package/_standalone/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  76. package/_standalone/.next/server/app/api/mcp/agents/route.js +1 -1
  77. package/_standalone/.next/server/app/api/mcp/agents/route.js.nft.json +1 -1
  78. package/_standalone/.next/server/app/api/mcp/agents/route_client-reference-manifest.js +1 -1
  79. package/_standalone/.next/server/app/api/mcp/install/route.js +1 -1
  80. package/_standalone/.next/server/app/api/mcp/install/route_client-reference-manifest.js +1 -1
  81. package/_standalone/.next/server/app/api/mcp/install-skill/route_client-reference-manifest.js +1 -1
  82. package/_standalone/.next/server/app/api/mcp/restart/route_client-reference-manifest.js +1 -1
  83. package/_standalone/.next/server/app/api/mcp/status/route.js +1 -1
  84. package/_standalone/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
  85. package/_standalone/.next/server/app/api/mcp/uninstall/route_client-reference-manifest.js +1 -1
  86. package/_standalone/.next/server/app/api/monitoring/route.js.nft.json +1 -1
  87. package/_standalone/.next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
  88. package/_standalone/.next/server/app/api/recent-files/route.js.nft.json +1 -1
  89. package/_standalone/.next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
  90. package/_standalone/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
  91. package/_standalone/.next/server/app/api/search/route.js.nft.json +1 -1
  92. package/_standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  93. package/_standalone/.next/server/app/api/settings/list-models/route_client-reference-manifest.js +1 -1
  94. package/_standalone/.next/server/app/api/settings/reset-token/route.js +1 -1
  95. package/_standalone/.next/server/app/api/settings/reset-token/route_client-reference-manifest.js +1 -1
  96. package/_standalone/.next/server/app/api/settings/route.js +1 -1
  97. package/_standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
  98. package/_standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  99. package/_standalone/.next/server/app/api/settings/test-key/route.js +1 -1
  100. package/_standalone/.next/server/app/api/settings/test-key/route_client-reference-manifest.js +1 -1
  101. package/_standalone/.next/server/app/api/setup/check-path/route_client-reference-manifest.js +1 -1
  102. package/_standalone/.next/server/app/api/setup/check-port/route_client-reference-manifest.js +1 -1
  103. package/_standalone/.next/server/app/api/setup/generate-token/route_client-reference-manifest.js +1 -1
  104. package/_standalone/.next/server/app/api/setup/ls/route_client-reference-manifest.js +1 -1
  105. package/_standalone/.next/server/app/api/setup/route.js +1 -1
  106. package/_standalone/.next/server/app/api/setup/route_client-reference-manifest.js +1 -1
  107. package/_standalone/.next/server/app/api/skills/route.js +1 -1
  108. package/_standalone/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  109. package/_standalone/.next/server/app/api/sync/route_client-reference-manifest.js +1 -1
  110. package/_standalone/.next/server/app/api/tree-version/route.js.nft.json +1 -1
  111. package/_standalone/.next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
  112. package/_standalone/.next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
  113. package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  114. package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
  115. package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
  116. package/_standalone/.next/server/app/api/workflows/route.js.nft.json +1 -1
  117. package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
  118. package/_standalone/.next/server/app/changes/page.js +2 -2
  119. package/_standalone/.next/server/app/changes/page.js.nft.json +1 -1
  120. package/_standalone/.next/server/app/changes/page_client-reference-manifest.js +1 -1
  121. package/_standalone/.next/server/app/echo/[segment]/page.js +3 -3
  122. package/_standalone/.next/server/app/echo/[segment]/page.js.nft.json +1 -1
  123. package/_standalone/.next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
  124. package/_standalone/.next/server/app/echo/page.js +1 -1
  125. package/_standalone/.next/server/app/echo/page.js.nft.json +1 -1
  126. package/_standalone/.next/server/app/echo/page_client-reference-manifest.js +1 -1
  127. package/_standalone/.next/server/app/explore/page.js +3 -3
  128. package/_standalone/.next/server/app/explore/page.js.nft.json +1 -1
  129. package/_standalone/.next/server/app/explore/page_client-reference-manifest.js +1 -1
  130. package/_standalone/.next/server/app/help/page.js +2 -2
  131. package/_standalone/.next/server/app/help/page.js.nft.json +1 -1
  132. package/_standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
  133. package/_standalone/.next/server/app/inbox/history/page.js +1 -1
  134. package/_standalone/.next/server/app/inbox/history/page.js.nft.json +1 -1
  135. package/_standalone/.next/server/app/inbox/history/page_client-reference-manifest.js +1 -1
  136. package/_standalone/.next/server/app/login/page.js +2 -2
  137. package/_standalone/.next/server/app/login/page.js.nft.json +1 -1
  138. package/_standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  139. package/_standalone/.next/server/app/page.js +2 -8
  140. package/_standalone/.next/server/app/page.js.nft.json +1 -1
  141. package/_standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  142. package/_standalone/.next/server/app/setup/page.js +2 -2
  143. package/_standalone/.next/server/app/setup/page.js.nft.json +1 -1
  144. package/_standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  145. package/_standalone/.next/server/app/trash/page.js +3 -3
  146. package/_standalone/.next/server/app/trash/page.js.nft.json +1 -1
  147. package/_standalone/.next/server/app/trash/page_client-reference-manifest.js +1 -1
  148. package/_standalone/.next/server/app/view/[...path]/page.js +3 -3
  149. package/_standalone/.next/server/app/view/[...path]/page.js.nft.json +1 -1
  150. package/_standalone/.next/server/app/view/[...path]/page_client-reference-manifest.js +1 -1
  151. package/_standalone/.next/server/app/wiki/page.js +2 -2
  152. package/_standalone/.next/server/app/wiki/page.js.nft.json +1 -1
  153. package/_standalone/.next/server/app/wiki/page_client-reference-manifest.js +1 -1
  154. package/_standalone/.next/server/app-paths-manifest.json +24 -24
  155. package/_standalone/.next/server/chunks/1550.js +1 -1
  156. package/_standalone/.next/server/chunks/1750.js +1 -1
  157. package/_standalone/.next/server/chunks/3484.js +1 -1
  158. package/_standalone/.next/server/chunks/530.js +61 -62
  159. package/_standalone/.next/server/chunks/6539.js +1 -1
  160. package/_standalone/.next/server/chunks/{2159.js → 8343.js} +2 -2
  161. package/_standalone/.next/server/chunks/9787.js +2 -0
  162. package/_standalone/.next/server/middleware-build-manifest.js +1 -1
  163. package/_standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  164. package/_standalone/.next/server/pages/500.html +2 -2
  165. package/_standalone/.next/server/server-reference-manifest.js +1 -1
  166. package/_standalone/.next/server/server-reference-manifest.json +1 -1
  167. package/_standalone/.next/static/chunks/{1814.a7c127b2c73d1f70.js → 1814.a79b84d37df75c43.js} +1 -1
  168. package/_standalone/.next/static/chunks/3427-2e61a5df1f5e55fb.js +1 -0
  169. package/_standalone/.next/static/chunks/5581-dac72e9f16e5ea29.js +29 -0
  170. package/_standalone/.next/static/chunks/6297-085daa21037d5f81.js +1 -0
  171. package/_standalone/.next/static/chunks/7249-6cf8f2b78718c59e.js +11 -0
  172. package/_standalone/.next/static/chunks/8520-56ec9ff087c15204.js +22 -0
  173. package/_standalone/.next/static/chunks/9905-a19d379cb225246e.js +1 -0
  174. package/_standalone/.next/static/chunks/app/agents/[agentKey]/{page-7bdeab5af8e4f5f2.js → page-35ea6de1af2be3b5.js} +1 -1
  175. package/_standalone/.next/static/chunks/app/agents/page-b172ea3743adb047.js +1 -0
  176. package/_standalone/.next/static/chunks/app/changes/{page-5a72144d1080a699.js → page-6d2f49651c0061f7.js} +1 -1
  177. package/_standalone/.next/static/chunks/app/echo/[segment]/page-84b95256f6e38aae.js +11 -0
  178. package/_standalone/.next/static/chunks/app/explore/{page-d3d99308146c2240.js → page-d9f58000bc445360.js} +2 -2
  179. package/_standalone/.next/static/chunks/app/help/{page-222df603080b5fab.js → page-f8cb806371b3175f.js} +1 -1
  180. package/_standalone/.next/static/chunks/app/inbox/history/{page-07819cf95cb0805f.js → page-26e71fb6f716a4c4.js} +1 -1
  181. package/_standalone/.next/static/chunks/app/layout-b89b0d955f39a753.js +164 -0
  182. package/_standalone/.next/static/chunks/app/login/{page-0eeef685052869a6.js → page-18fb00d568cd1f0e.js} +1 -1
  183. package/_standalone/.next/static/chunks/app/page-a8e6f085f38388bf.js +1 -0
  184. package/_standalone/.next/static/chunks/app/setup/{page-99fcfc460fa29733.js → page-821714e7477be46c.js} +1 -1
  185. package/_standalone/.next/static/chunks/app/trash/page-f92b728b78ac0f7e.js +1 -0
  186. package/_standalone/.next/static/chunks/app/view/[...path]/{not-found-fc04c2bd4f35bc6f.js → not-found-6e0c75ad26ce8572.js} +1 -1
  187. package/_standalone/.next/static/chunks/app/view/[...path]/page-f87f4901b5e1a88f.js +12 -0
  188. package/_standalone/.next/static/chunks/app/wiki/page-641edb1f3cff2f93.js +1 -0
  189. package/_standalone/.next/static/chunks/{webpack-2c19436659aa657b.js → webpack-72e8d9e9073fd1f9.js} +1 -1
  190. package/_standalone/.next/static/css/6c104b118d3bc9b7.css +1 -0
  191. package/_standalone/.next/trace +64 -64
  192. package/_standalone/__tests__/api/mcp-install.test.ts +3 -2
  193. package/_standalone/__tests__/ask/non-streaming-api.test.ts +281 -0
  194. package/_standalone/__tests__/core/skill-install-logic.test.ts +1 -0
  195. package/_standalone/app/globals.css +2 -1
  196. package/_standalone/components/AskFab.tsx +4 -4
  197. package/_standalone/components/AskModal.tsx +1 -1
  198. package/_standalone/components/GuideCard.tsx +101 -152
  199. package/_standalone/components/RightAskPanel.tsx +2 -2
  200. package/_standalone/components/agents/CustomAgentModal.tsx +32 -8
  201. package/_standalone/components/ask/AskContent.tsx +90 -51
  202. package/_standalone/components/ask/AskHeader.tsx +218 -18
  203. package/_standalone/components/ask/MessageList.tsx +66 -47
  204. package/_standalone/components/ask/SessionHistory.tsx +86 -60
  205. package/_standalone/components/ask/SessionTabBar.tsx +29 -21
  206. package/_standalone/components/ask/ThinkingBlock.tsx +6 -5
  207. package/_standalone/components/ask/ToolCallBlock.tsx +10 -9
  208. package/_standalone/components/settings/SettingsContent.tsx +1 -1
  209. package/_standalone/data/skills/mindos/SKILL.md +72 -15
  210. package/_standalone/data/skills/mindos-zh/SKILL.md +73 -8
  211. package/_standalone/hooks/useAskSession.ts +23 -1
  212. package/_standalone/lib/stores/locale-store.ts +20 -6
  213. package/_standalone/tsconfig.tsbuildinfo +1 -1
  214. package/app/app/api/agents/custom/route.ts +8 -0
  215. package/app/app/api/ask/route.ts +171 -10
  216. package/app/app/api/mcp/agents/route.ts +5 -3
  217. package/app/app/api/settings/route.ts +9 -0
  218. package/app/app/api/settings/test-key/route.ts +13 -1
  219. package/app/app/globals.css +2 -1
  220. package/app/app/layout.tsx +16 -4
  221. package/app/components/AskFab.tsx +4 -4
  222. package/app/components/AskModal.tsx +1 -1
  223. package/app/components/GuideCard.tsx +101 -152
  224. package/app/components/HomeContent.tsx +116 -575
  225. package/app/components/RightAskPanel.tsx +2 -2
  226. package/app/components/WikiHomeContent.tsx +151 -3
  227. package/app/components/agents/CustomAgentModal.tsx +32 -8
  228. package/app/components/ask/AskContent.tsx +90 -51
  229. package/app/components/ask/AskHeader.tsx +218 -18
  230. package/app/components/ask/MessageList.tsx +66 -47
  231. package/app/components/ask/SessionHistory.tsx +86 -60
  232. package/app/components/ask/SessionTabBar.tsx +29 -21
  233. package/app/components/ask/ThinkingBlock.tsx +6 -5
  234. package/app/components/ask/ToolCallBlock.tsx +10 -9
  235. package/app/components/settings/SettingsContent.tsx +1 -1
  236. package/app/data/skills/mindos/SKILL.md +72 -15
  237. package/app/data/skills/mindos-zh/SKILL.md +73 -8
  238. package/app/hooks/useAskSession.ts +23 -1
  239. package/app/lib/custom-agents.ts +45 -2
  240. package/app/lib/i18n/modules/ai-chat.ts +97 -10
  241. package/app/lib/i18n/modules/onboarding.ts +12 -12
  242. package/app/lib/i18n/modules/panels.ts +10 -2
  243. package/app/lib/mcp-agents.ts +10 -0
  244. package/app/lib/stores/LocaleStoreInit.tsx +24 -1
  245. package/app/lib/stores/locale-store.ts +20 -6
  246. package/app/lib/types.ts +1 -0
  247. package/bin/lib/mcp-agents.js +10 -0
  248. package/package.json +1 -1
  249. package/skills/mindos/SKILL.md +69 -11
  250. package/skills/mindos/references/knowledge-health.md +120 -0
  251. package/skills/mindos-max/SKILL.md +238 -0
  252. package/skills/mindos-max-workspace/evals/evals.json +23 -0
  253. package/skills/mindos-max-workspace/iteration-1/capture-debugging-experience-en/eval_metadata.json +11 -0
  254. package/skills/mindos-max-workspace/iteration-1/capture-debugging-experience-en/old_skill/grading.json +28 -0
  255. package/skills/mindos-max-workspace/iteration-1/capture-debugging-experience-en/old_skill/outputs/transcript.md +203 -0
  256. package/skills/mindos-max-workspace/iteration-1/capture-debugging-experience-en/with_skill/grading.json +28 -0
  257. package/skills/mindos-max-workspace/iteration-1/capture-debugging-experience-en/with_skill/outputs/transcript.md +271 -0
  258. package/skills/mindos-max-workspace/iteration-1/save-meeting-decision-zh/eval_metadata.json +11 -0
  259. package/skills/mindos-max-workspace/iteration-1/save-meeting-decision-zh/old_skill/grading.json +28 -0
  260. package/skills/mindos-max-workspace/iteration-1/save-meeting-decision-zh/old_skill/outputs/transcript.md +121 -0
  261. package/skills/mindos-max-workspace/iteration-1/save-meeting-decision-zh/with_skill/grading.json +28 -0
  262. package/skills/mindos-max-workspace/iteration-1/save-meeting-decision-zh/with_skill/outputs/transcript.md +168 -0
  263. package/skills/mindos-max-workspace/iteration-1/search-past-decision-zh/eval_metadata.json +11 -0
  264. package/skills/mindos-max-workspace/iteration-1/search-past-decision-zh/old_skill/grading.json +28 -0
  265. package/skills/mindos-max-workspace/iteration-1/search-past-decision-zh/old_skill/outputs/transcript.md +143 -0
  266. package/skills/mindos-max-workspace/iteration-1/search-past-decision-zh/with_skill/grading.json +28 -0
  267. package/skills/mindos-max-workspace/iteration-1/search-past-decision-zh/with_skill/outputs/transcript.md +233 -0
  268. package/skills/mindos-max-workspace/skill-snapshot/mindos-original/SKILL.md +165 -0
  269. package/skills/mindos-max-workspace/skill-snapshot/mindos-original/references/README.md +12 -0
  270. package/skills/mindos-max-workspace/skill-snapshot/mindos-original/references/post-task-hooks.md +27 -0
  271. package/skills/mindos-max-workspace/skill-snapshot/mindos-original/references/preference-capture.md +41 -0
  272. package/skills/mindos-max-workspace/skill-snapshot/mindos-original/references/sop-template.md +74 -0
  273. package/skills/mindos-max-workspace/skill-snapshot/mindos-original/references/write-supplement.md +119 -0
  274. package/skills/mindos-max-zh/SKILL.md +241 -0
  275. package/skills/mindos-zh/SKILL.md +72 -8
  276. package/_standalone/.next/server/chunks/2364.js +0 -2
  277. package/_standalone/.next/server/chunks/357.js +0 -1
  278. package/_standalone/.next/static/chunks/1053-5cb008a24930e271.js +0 -29
  279. package/_standalone/.next/static/chunks/178-105779afb62d36d9.js +0 -1
  280. package/_standalone/.next/static/chunks/2218-d54538000574ffef.js +0 -1
  281. package/_standalone/.next/static/chunks/2549-e63cf57fa927a41d.js +0 -1
  282. package/_standalone/.next/static/chunks/7249-8cd568ad23656622.js +0 -11
  283. package/_standalone/.next/static/chunks/9274-296ab35f9f09e42e.js +0 -1
  284. package/_standalone/.next/static/chunks/app/agents/page-5d1446665ddb3801.js +0 -1
  285. package/_standalone/.next/static/chunks/app/echo/[segment]/page-b0103509ce34444b.js +0 -11
  286. package/_standalone/.next/static/chunks/app/layout-b3919384ec2eb979.js +0 -186
  287. package/_standalone/.next/static/chunks/app/page-6436a99cda35132b.js +0 -7
  288. package/_standalone/.next/static/chunks/app/trash/page-8dc388695344fdd4.js +0 -1
  289. package/_standalone/.next/static/chunks/app/view/[...path]/page-b292b55305ecc021.js +0 -12
  290. package/_standalone/.next/static/chunks/app/wiki/page-d492256a93f0b8bc.js +0 -1
  291. package/_standalone/.next/static/css/fd84c8316ead16eb.css +0 -1
  292. /package/_standalone/.next/static/{zOaEtgJbdRMncnCBucULp → u8p6oIRTcr_ns-ElNZ9rl}/_buildManifest.js +0 -0
  293. /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 20 agents (1 builtin + 19 registry)', async () => {
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(20);
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, 'Lora', Georgia, serif);
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-xl
26
- text-white font-medium text-[13px]
27
- shadow-sm shadow-amber-900/10
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-md hover:shadow-amber-900/15
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-xl shadow-2xl flex flex-col h-[92vh] md:h-auto md:max-h-[75vh]"
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}