@geminilight/mindos 0.6.61 → 0.6.65

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 (313) hide show
  1. package/_standalone/.antigravity/mcp_config.json +14 -0
  2. package/_standalone/.mindos-build-version +1 -1
  3. package/_standalone/.next/BUILD_ID +1 -1
  4. package/_standalone/.next/app-path-routes-manifest.json +23 -23
  5. package/_standalone/.next/build-manifest.json +2 -2
  6. package/_standalone/.next/cache/.previewinfo +1 -1
  7. package/_standalone/.next/cache/.rscinfo +1 -1
  8. package/_standalone/.next/cache/config.json +3 -3
  9. package/_standalone/.next/prerender-manifest.json +3 -3
  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 +1 -1
  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 +1 -1
  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_client-reference-manifest.js +1 -1
  34. package/_standalone/.next/server/app/api/acp/detect/route.js +1 -1
  35. package/_standalone/.next/server/app/api/acp/detect/route_client-reference-manifest.js +1 -1
  36. package/_standalone/.next/server/app/api/acp/install/route_client-reference-manifest.js +1 -1
  37. package/_standalone/.next/server/app/api/acp/registry/route.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/copy-skill/route.js.nft.json +1 -1
  42. package/_standalone/.next/server/app/api/agents/copy-skill/route_client-reference-manifest.js +1 -1
  43. package/_standalone/.next/server/app/api/agents/custom/detect/route_client-reference-manifest.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 +53 -47
  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 +1 -1
  60. package/_standalone/.next/server/app/api/file/import/route.js.nft.json +1 -1
  61. package/_standalone/.next/server/app/api/file/import/route_client-reference-manifest.js +1 -1
  62. package/_standalone/.next/server/app/api/file/raw/route.js.nft.json +1 -1
  63. package/_standalone/.next/server/app/api/file/raw/route_client-reference-manifest.js +1 -1
  64. package/_standalone/.next/server/app/api/file/route.js.nft.json +1 -1
  65. package/_standalone/.next/server/app/api/file/route_client-reference-manifest.js +1 -1
  66. package/_standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  67. package/_standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  68. package/_standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  69. package/_standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  70. package/_standalone/.next/server/app/api/graph/route.js.nft.json +1 -1
  71. package/_standalone/.next/server/app/api/graph/route_client-reference-manifest.js +1 -1
  72. package/_standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  73. package/_standalone/.next/server/app/api/inbox/route.js.nft.json +1 -1
  74. package/_standalone/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -1
  75. package/_standalone/.next/server/app/api/init/route.js.nft.json +1 -1
  76. package/_standalone/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  77. package/_standalone/.next/server/app/api/mcp/agents/route.js +1 -1
  78. package/_standalone/.next/server/app/api/mcp/agents/route.js.nft.json +1 -1
  79. package/_standalone/.next/server/app/api/mcp/agents/route_client-reference-manifest.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_client-reference-manifest.js +1 -1
  84. package/_standalone/.next/server/app/api/mcp/uninstall/route_client-reference-manifest.js +1 -1
  85. package/_standalone/.next/server/app/api/monitoring/route.js.nft.json +1 -1
  86. package/_standalone/.next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
  87. package/_standalone/.next/server/app/api/recent-files/route.js.nft.json +1 -1
  88. package/_standalone/.next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
  89. package/_standalone/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
  90. package/_standalone/.next/server/app/api/search/route.js.nft.json +1 -1
  91. package/_standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  92. package/_standalone/.next/server/app/api/settings/list-models/route.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_client-reference-manifest.js +1 -1
  95. package/_standalone/.next/server/app/api/settings/route.js +1 -1
  96. package/_standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
  97. package/_standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  98. package/_standalone/.next/server/app/api/settings/test-key/route.js +1 -1
  99. package/_standalone/.next/server/app/api/settings/test-key/route_client-reference-manifest.js +1 -1
  100. package/_standalone/.next/server/app/api/setup/check-path/route_client-reference-manifest.js +1 -1
  101. package/_standalone/.next/server/app/api/setup/check-port/route_client-reference-manifest.js +1 -1
  102. package/_standalone/.next/server/app/api/setup/generate-token/route_client-reference-manifest.js +1 -1
  103. package/_standalone/.next/server/app/api/setup/ls/route_client-reference-manifest.js +1 -1
  104. package/_standalone/.next/server/app/api/setup/route.js +1 -1
  105. package/_standalone/.next/server/app/api/setup/route_client-reference-manifest.js +1 -1
  106. package/_standalone/.next/server/app/api/skills/route.js +1 -1
  107. package/_standalone/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  108. package/_standalone/.next/server/app/api/sync/route_client-reference-manifest.js +1 -1
  109. package/_standalone/.next/server/app/api/tree-version/route.js.nft.json +1 -1
  110. package/_standalone/.next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
  111. package/_standalone/.next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
  112. package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  113. package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
  114. package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
  115. package/_standalone/.next/server/app/api/workflows/route.js.nft.json +1 -1
  116. package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
  117. package/_standalone/.next/server/app/changes/page.js +1 -1
  118. package/_standalone/.next/server/app/changes/page.js.nft.json +1 -1
  119. package/_standalone/.next/server/app/changes/page_client-reference-manifest.js +1 -1
  120. package/_standalone/.next/server/app/echo/[segment]/page.js +2 -2
  121. package/_standalone/.next/server/app/echo/[segment]/page.js.nft.json +1 -1
  122. package/_standalone/.next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
  123. package/_standalone/.next/server/app/echo/page.js +1 -1
  124. package/_standalone/.next/server/app/echo/page.js.nft.json +1 -1
  125. package/_standalone/.next/server/app/echo/page_client-reference-manifest.js +1 -1
  126. package/_standalone/.next/server/app/explore/page.js +1 -1
  127. package/_standalone/.next/server/app/explore/page.js.nft.json +1 -1
  128. package/_standalone/.next/server/app/explore/page_client-reference-manifest.js +1 -1
  129. package/_standalone/.next/server/app/help/page.js +1 -1
  130. package/_standalone/.next/server/app/help/page.js.nft.json +1 -1
  131. package/_standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
  132. package/_standalone/.next/server/app/inbox/history/page.js +1 -1
  133. package/_standalone/.next/server/app/inbox/history/page.js.nft.json +1 -1
  134. package/_standalone/.next/server/app/inbox/history/page_client-reference-manifest.js +1 -1
  135. package/_standalone/.next/server/app/login/page.js +1 -1
  136. package/_standalone/.next/server/app/login/page.js.nft.json +1 -1
  137. package/_standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  138. package/_standalone/.next/server/app/page.js +1 -1
  139. package/_standalone/.next/server/app/page.js.nft.json +1 -1
  140. package/_standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  141. package/_standalone/.next/server/app/setup/page.js +2 -2
  142. package/_standalone/.next/server/app/setup/page.js.nft.json +1 -1
  143. package/_standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  144. package/_standalone/.next/server/app/trash/page.js +3 -3
  145. package/_standalone/.next/server/app/trash/page.js.nft.json +1 -1
  146. package/_standalone/.next/server/app/trash/page_client-reference-manifest.js +1 -1
  147. package/_standalone/.next/server/app/view/[...path]/page.js +2 -2
  148. package/_standalone/.next/server/app/view/[...path]/page.js.nft.json +1 -1
  149. package/_standalone/.next/server/app/view/[...path]/page_client-reference-manifest.js +1 -1
  150. package/_standalone/.next/server/app/wiki/page.js +1 -1
  151. package/_standalone/.next/server/app/wiki/page.js.nft.json +1 -1
  152. package/_standalone/.next/server/app/wiki/page_client-reference-manifest.js +1 -1
  153. package/_standalone/.next/server/app-paths-manifest.json +23 -23
  154. package/_standalone/.next/server/chunks/122.js +222 -0
  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/3113.js +52 -0
  158. package/_standalone/.next/server/chunks/6539.js +1 -1
  159. package/_standalone/.next/server/chunks/8388.js +3 -3
  160. package/_standalone/.next/server/chunks/953.js +3 -3
  161. package/_standalone/.next/server/pages/500.html +2 -2
  162. package/_standalone/.next/server/server-reference-manifest.js +1 -1
  163. package/_standalone/.next/server/server-reference-manifest.json +1 -1
  164. package/_standalone/.next/static/chunks/1001-99da82ec8d8c136f.js +1 -0
  165. package/_standalone/.next/static/chunks/1088-77544af0a50cb7a4.js +1 -0
  166. package/_standalone/.next/static/chunks/1467-87dde7eed498806f.js +1 -0
  167. package/_standalone/.next/static/chunks/5149-4d828886dda479fa.js +1 -0
  168. package/_standalone/.next/static/chunks/5581-c671163a2fe1b312.js +29 -0
  169. package/_standalone/.next/static/chunks/{7266-bb7be1128eccd48e.js → 5718-3837c3210a0e175f.js} +2 -2
  170. package/_standalone/.next/static/chunks/6636-53238eff89503f03.js +6 -0
  171. package/_standalone/.next/static/chunks/6757-1c1a89720fdda8f0.js +1 -0
  172. package/_standalone/.next/static/chunks/7129-20e9d2463a9da646.js +1 -0
  173. package/_standalone/.next/static/chunks/7294-cac25d97869afadc.js +1 -0
  174. package/_standalone/.next/static/chunks/8225-21e5cebc3731ddf0.js +1 -0
  175. package/_standalone/.next/static/chunks/8520-b51810e66293ceb8.js +22 -0
  176. package/_standalone/.next/static/chunks/9207-dc9c31b351a2ed78.js +1 -0
  177. package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-2f5cf97e03dc1cc9.js +1 -0
  178. package/_standalone/.next/static/chunks/app/agents/page-50eac58d511dcc6e.js +1 -0
  179. package/_standalone/.next/static/chunks/app/echo/[segment]/page-2a00f4686adf3885.js +11 -0
  180. package/_standalone/.next/static/chunks/app/layout-2cb7a6602d2e5d5f.js +168 -0
  181. package/_standalone/.next/static/chunks/app/{page-6a1f8d21c12b829e.js → page-5ab911b2226f6ff7.js} +1 -1
  182. package/_standalone/.next/static/chunks/app/setup/page-907b7c57fad2292b.js +1 -0
  183. package/_standalone/.next/static/chunks/app/trash/page-11a511b065ea84c2.js +1 -0
  184. package/_standalone/.next/static/chunks/app/view/[...path]/page-26e47dd4c533a58c.js +12 -0
  185. package/_standalone/.next/static/chunks/app/wiki/page-dce495b9048022fb.js +1 -0
  186. package/_standalone/.next/static/css/67e7918f5ed7d147.css +1 -0
  187. package/_standalone/.next/trace +65 -65
  188. package/_standalone/__tests__/acp/registry.test.ts +30 -20
  189. package/_standalone/__tests__/api/ask-attachments.test.ts +194 -0
  190. package/_standalone/__tests__/api/mcp-install.test.ts +49 -2
  191. package/_standalone/__tests__/api/settings.test.ts +16 -12
  192. package/_standalone/__tests__/api/setup.test.ts +11 -9
  193. package/_standalone/__tests__/api/test-key.test.ts +0 -10
  194. package/_standalone/__tests__/components/UpdateToast.test.ts +344 -0
  195. package/_standalone/__tests__/core/context.test.ts +48 -426
  196. package/_standalone/__tests__/lib/pi-skills.test.ts +4 -4
  197. package/_standalone/__tests__/lib/settings-ai-client.test.ts +32 -12
  198. package/_standalone/__tests__/setup.ts +5 -5
  199. package/_standalone/app/globals.css +4 -4
  200. package/_standalone/components/ActivityBar.tsx +17 -6
  201. package/_standalone/components/Panel.tsx +24 -6
  202. package/_standalone/components/SidebarLayout.tsx +36 -8
  203. package/_standalone/components/agents/AgentsMcpSection.tsx +2 -2
  204. package/_standalone/components/agents/AgentsOverviewSection.tsx +5 -1
  205. package/_standalone/components/agents/AgentsPanelA2aTab.tsx +173 -113
  206. package/_standalone/components/agents/AgentsSkillsSection.tsx +2 -2
  207. package/_standalone/components/ask/AskContent.tsx +83 -44
  208. package/_standalone/components/ask/AskHeader.tsx +8 -1
  209. package/_standalone/components/ask/MessageList.tsx +37 -3
  210. package/_standalone/components/ask/ProviderModelCapsule.tsx +444 -174
  211. package/_standalone/components/home/InboxSection.tsx +25 -25
  212. package/_standalone/components/settings/AiTab.tsx +353 -298
  213. package/_standalone/components/settings/CustomProviderFields.tsx +121 -0
  214. package/_standalone/components/settings/CustomProvidersCard.tsx +154 -0
  215. package/_standalone/components/settings/KnowledgeTab.tsx +6 -20
  216. package/_standalone/components/settings/McpAgentInstall.tsx +7 -2
  217. package/_standalone/components/settings/Primitives.tsx +48 -104
  218. package/_standalone/components/settings/ProviderModal.tsx +87 -0
  219. package/_standalone/components/settings/SettingsContent.tsx +2 -5
  220. package/_standalone/components/settings/TestButton.tsx +64 -0
  221. package/_standalone/components/settings/types.ts +3 -9
  222. package/_standalone/components/settings/useCustomProviderForm.ts +132 -0
  223. package/_standalone/components/setup/StepAI.tsx +12 -5
  224. package/_standalone/components/shared/ModelInput.tsx +220 -0
  225. package/_standalone/components/shared/ProviderSelect.tsx +126 -36
  226. package/_standalone/hooks/useAskChat.ts +100 -13
  227. package/_standalone/hooks/useAskPanel.ts +17 -1
  228. package/_standalone/lib/settings-ai-client.ts +17 -8
  229. package/_standalone/tsconfig.tsbuildinfo +1 -1
  230. package/app/.antigravity/mcp_config.json +14 -0
  231. package/app/app/api/ask/route.ts +154 -45
  232. package/app/app/api/mcp/agents/route.ts +3 -3
  233. package/app/app/api/settings/list-models/route.ts +36 -9
  234. package/app/app/api/settings/route.ts +14 -42
  235. package/app/app/api/settings/test-key/route.ts +78 -2
  236. package/app/app/api/setup/route.ts +36 -18
  237. package/app/app/api/skills/route.ts +1 -1
  238. package/app/app/globals.css +4 -4
  239. package/app/app/layout.tsx +5 -3
  240. package/app/app/view/[...path]/page.tsx +5 -0
  241. package/app/components/ActivityBar.tsx +17 -6
  242. package/app/components/HomeContent.tsx +11 -0
  243. package/app/components/InboxView.tsx +656 -0
  244. package/app/components/Panel.tsx +24 -6
  245. package/app/components/SidebarLayout.tsx +36 -8
  246. package/app/components/UpdateToast.tsx +255 -0
  247. package/app/components/agents/AgentDetailContent.tsx +8 -8
  248. package/app/components/agents/AgentsMcpSection.tsx +2 -2
  249. package/app/components/agents/AgentsOverviewSection.tsx +5 -1
  250. package/app/components/agents/AgentsPanelA2aTab.tsx +173 -113
  251. package/app/components/agents/AgentsSkillsSection.tsx +2 -2
  252. package/app/components/ask/AskContent.tsx +83 -44
  253. package/app/components/ask/AskHeader.tsx +8 -1
  254. package/app/components/ask/MessageList.tsx +37 -3
  255. package/app/components/ask/ProviderModelCapsule.tsx +444 -174
  256. package/app/components/home/InboxSection.tsx +25 -25
  257. package/app/components/settings/AiTab.tsx +353 -298
  258. package/app/components/settings/CustomProviderFields.tsx +121 -0
  259. package/app/components/settings/CustomProvidersCard.tsx +154 -0
  260. package/app/components/settings/KnowledgeTab.tsx +6 -20
  261. package/app/components/settings/McpAgentInstall.tsx +7 -2
  262. package/app/components/settings/Primitives.tsx +48 -104
  263. package/app/components/settings/ProviderModal.tsx +87 -0
  264. package/app/components/settings/SettingsContent.tsx +2 -5
  265. package/app/components/settings/TestButton.tsx +64 -0
  266. package/app/components/settings/types.ts +3 -9
  267. package/app/components/settings/useCustomProviderForm.ts +132 -0
  268. package/app/components/setup/StepAI.tsx +12 -5
  269. package/app/components/shared/ModelInput.tsx +220 -0
  270. package/app/components/shared/ProviderSelect.tsx +126 -36
  271. package/app/hooks/useAskChat.ts +100 -13
  272. package/app/hooks/useAskPanel.ts +17 -1
  273. package/app/lib/acp/registry.ts +92 -10
  274. package/app/lib/agent/context.ts +65 -0
  275. package/app/lib/agent/providers.ts +25 -0
  276. package/app/lib/agent/tools.ts +1 -1
  277. package/app/lib/custom-endpoints.ts +160 -0
  278. package/app/lib/fs.ts +8 -1
  279. package/app/lib/i18n/modules/ai-chat.ts +6 -0
  280. package/app/lib/i18n/modules/knowledge.ts +16 -0
  281. package/app/lib/i18n/modules/onboarding.ts +4 -0
  282. package/app/lib/i18n/modules/settings.ts +88 -2
  283. package/app/lib/mcp-agents.ts +11 -0
  284. package/app/lib/pi-integration/skills.ts +16 -4
  285. package/app/lib/settings-ai-client.ts +17 -8
  286. package/app/lib/settings.ts +68 -72
  287. package/app/lib/types.ts +4 -0
  288. package/bin/lib/mcp-agents.js +11 -0
  289. package/bin/lib/mcp-install.js +71 -7
  290. package/package.json +1 -1
  291. package/_standalone/.next/server/chunks/530.js +0 -218
  292. package/_standalone/.next/server/chunks/8955.js +0 -52
  293. package/_standalone/.next/static/chunks/1369-7d0ac5d1564eed1e.js +0 -1
  294. package/_standalone/.next/static/chunks/3427-2e61a5df1f5e55fb.js +0 -1
  295. package/_standalone/.next/static/chunks/5581-0c700c20718bd916.js +0 -29
  296. package/_standalone/.next/static/chunks/6297-085daa21037d5f81.js +0 -1
  297. package/_standalone/.next/static/chunks/6636-9bbc90fb3b8731fe.js +0 -6
  298. package/_standalone/.next/static/chunks/7637-904b0a381dc3ec02.js +0 -1
  299. package/_standalone/.next/static/chunks/8520-76d1b05072178b43.js +0 -22
  300. package/_standalone/.next/static/chunks/8658-16ff58b75ae37fbb.js +0 -1
  301. package/_standalone/.next/static/chunks/9905-a19d379cb225246e.js +0 -1
  302. package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-0ea3571c8fbae823.js +0 -1
  303. package/_standalone/.next/static/chunks/app/agents/page-66858acbcd1d4bf8.js +0 -1
  304. package/_standalone/.next/static/chunks/app/echo/[segment]/page-bf5c290fa3ccff09.js +0 -11
  305. package/_standalone/.next/static/chunks/app/layout-a5d5925b47e87cc3.js +0 -164
  306. package/_standalone/.next/static/chunks/app/setup/page-821714e7477be46c.js +0 -1
  307. package/_standalone/.next/static/chunks/app/trash/page-40bc7316806acd62.js +0 -1
  308. package/_standalone/.next/static/chunks/app/view/[...path]/page-6fbb14b8f322d0f0.js +0 -12
  309. package/_standalone/.next/static/chunks/app/wiki/page-ba36eccf4fe62cfe.js +0 -1
  310. package/_standalone/.next/static/css/b57c4eb3cc88308b.css +0 -1
  311. package/_standalone/lib/agent/context.ts +0 -403
  312. /package/_standalone/.next/static/{5GmVArEG8OX03azKICsGq → eIlwbGas1iRGonlPyEwj7}/_buildManifest.js +0 -0
  313. /package/_standalone/.next/static/{5GmVArEG8OX03azKICsGq → eIlwbGas1iRGonlPyEwj7}/_ssgManifest.js +0 -0
@@ -3,9 +3,13 @@ import path from 'path';
3
3
  import os from 'os';
4
4
  import { parseAcpAgentOverrides } from './acp/agent-descriptors';
5
5
  import { type ProviderId, PROVIDER_PRESETS, isProviderId, getApiKeyFromEnv } from './agent/providers';
6
+ import { type Provider, parseProviders, findProvider, migrateProviders } from './custom-endpoints';
7
+ // Backward compat re-exports for files still importing from settings
8
+ export type { Provider };
6
9
 
7
10
  const SETTINGS_PATH = path.join(os.homedir(), '.mindos', 'config.json');
8
11
 
12
+ /** @deprecated Use Provider from custom-endpoints.ts */
9
13
  export interface ProviderConfig {
10
14
  apiKey: string;
11
15
  model: string;
@@ -13,8 +17,8 @@ export interface ProviderConfig {
13
17
  }
14
18
 
15
19
  export interface AiConfig {
16
- provider: ProviderId;
17
- providers: Partial<Record<ProviderId, ProviderConfig>>;
20
+ activeProvider: string; // provider entry ID (p_*)
21
+ providers: Provider[]; // unified provider list
18
22
  }
19
23
 
20
24
  export interface AgentConfig {
@@ -60,15 +64,13 @@ export interface ServerSettings {
60
64
  };
61
65
  /** User-defined agents not built into MindOS. */
62
66
  customAgents?: import('./custom-agents').CustomAgentDef[];
67
+ // customProviders is now merged into ai.providers — kept for migration only
63
68
  }
64
69
 
65
70
  const DEFAULTS: ServerSettings = {
66
71
  ai: {
67
- provider: 'anthropic' as ProviderId,
68
- providers: {
69
- anthropic: { apiKey: '', model: 'claude-sonnet-4-6' },
70
- openai: { apiKey: '', model: 'gpt-5.4', baseUrl: '' },
71
- },
72
+ activeProvider: '',
73
+ providers: [],
72
74
  },
73
75
  mindRoot: '',
74
76
  };
@@ -82,56 +84,27 @@ function str(obj: unknown, key: string, fallback: string): string {
82
84
  return fallback;
83
85
  }
84
86
 
85
- /** Parse a provider config from unknown input, filling missing/invalid fields with defaults */
86
- function parseProvider(raw: unknown, defaults: ProviderConfig): ProviderConfig {
87
- return {
88
- apiKey: str(raw, 'apiKey', defaults.apiKey),
89
- model: str(raw, 'model', defaults.model),
90
- ...(defaults.baseUrl !== undefined
91
- ? { baseUrl: str(raw, 'baseUrl', defaults.baseUrl) }
92
- : {}),
93
- };
94
- }
95
-
96
87
  /** Migrate old flat ai structure to new providers dict, if needed */
97
88
  function migrateAi(parsed: Record<string, unknown>): AiConfig {
98
89
  const ai = parsed.ai as Record<string, unknown> | undefined;
99
90
  if (!ai) return { ...DEFAULTS.ai };
100
91
 
101
- const providerField = typeof ai.provider === 'string' ? ai.provider : 'anthropic';
102
- const provider: ProviderId = isProviderId(providerField) ? providerField : 'anthropic';
103
-
104
- // Already new format parse all known providers from disk
105
- if (ai.providers && typeof ai.providers === 'object') {
106
- const p = ai.providers as Record<string, unknown>;
107
- const providers: Partial<Record<ProviderId, ProviderConfig>> = {};
108
- for (const id of Object.keys(p)) {
109
- if (!isProviderId(id)) continue;
110
- const preset = PROVIDER_PRESETS[id];
111
- const defaultCfg = DEFAULTS.ai.providers[id] ?? { apiKey: '', model: preset.defaultModel };
112
- providers[id] = parseProvider(p[id], defaultCfg);
113
- }
114
- // Ensure at least anthropic and openai exist (backward compat)
115
- if (!providers.anthropic) providers.anthropic = DEFAULTS.ai.providers.anthropic;
116
- if (!providers.openai) providers.openai = DEFAULTS.ai.providers.openai;
117
- return { provider, providers };
92
+ // ── New format: ai.providers is an array ──
93
+ if (Array.isArray(ai.providers)) {
94
+ const providers = parseProviders(ai.providers);
95
+ const activeProvider = typeof ai.activeProvider === 'string' ? ai.activeProvider : '';
96
+ return { activeProvider, providers };
118
97
  }
119
98
 
120
- // Old flat format migrate
121
- return {
122
- provider,
123
- providers: {
124
- anthropic: {
125
- apiKey: str(ai, 'anthropicApiKey', ''),
126
- model: str(ai, 'anthropicModel', 'claude-sonnet-4-6'),
127
- },
128
- openai: {
129
- apiKey: str(ai, 'openaiApiKey', ''),
130
- model: str(ai, 'openaiModel', 'gpt-5.4'),
131
- baseUrl: str(ai, 'openaiBaseUrl', ''),
132
- },
133
- },
134
- };
99
+ // ── Old format: ai.providers is a dict (or missing) → auto-migrate ──
100
+ const migrated = migrateProviders(parsed);
101
+ if (migrated) {
102
+ return { activeProvider: migrated.activeProvider, providers: migrated.providers };
103
+ }
104
+
105
+ // Very old flat format (anthropicApiKey etc.) — also handled by migrateProviders
106
+ // but if it returns null, fall through to defaults
107
+ return { ...DEFAULTS.ai };
135
108
  }
136
109
 
137
110
  /** Parse agent config from unknown input */
@@ -195,7 +168,12 @@ export function readSettings(): ServerSettings {
195
168
  try {
196
169
  const raw = fs.readFileSync(SETTINGS_PATH, 'utf-8');
197
170
  const parsed = JSON.parse(raw) as Record<string, unknown>;
198
- return {
171
+
172
+ // Detect old format and check if migration is needed
173
+ const ai = parsed.ai as Record<string, unknown> | undefined;
174
+ const needsMigration = ai && !Array.isArray(ai.providers);
175
+
176
+ const settings: ServerSettings = {
199
177
  ai: migrateAi(parsed),
200
178
  agent: parseAgent(parsed.agent),
201
179
  acpAgents: parseAcpAgentsField(parsed.acpAgents),
@@ -220,11 +198,18 @@ export function readSettings(): ServerSettings {
220
198
  connectionMode: inferConnectionMode(parsed),
221
199
  customAgents: Array.isArray(parsed.customAgents) ? parsed.customAgents as import('./custom-agents').CustomAgentDef[] : undefined,
222
200
  };
201
+
202
+ // Auto-persist migrated config so migration only runs once
203
+ if (needsMigration) {
204
+ try { writeSettings(settings); } catch { /* best-effort */ }
205
+ }
206
+
207
+ return settings;
223
208
  } catch {
224
209
  // Config file missing or corrupt → force setup wizard
225
210
  return {
226
211
  ...DEFAULTS,
227
- ai: { ...DEFAULTS.ai, providers: { ...DEFAULTS.ai.providers } },
212
+ ai: { ...DEFAULTS.ai, providers: [] },
228
213
  setupPending: true,
229
214
  connectionMode: { cli: true, mcp: false },
230
215
  };
@@ -250,6 +235,8 @@ export function writeSettings(settings: ServerSettings): void {
250
235
  if (settings.baseUrlCompat !== undefined) merged.baseUrlCompat = settings.baseUrlCompat;
251
236
  if (settings.connectionMode !== undefined) merged.connectionMode = settings.connectionMode;
252
237
  if (settings.customAgents !== undefined) merged.customAgents = settings.customAgents;
238
+ // Remove legacy customProviders (now merged into ai.providers array)
239
+ delete merged.customProviders;
253
240
  // setupPending: false/undefined → remove the field (cleanup); true → set it
254
241
  if ('setupPending' in settings) {
255
242
  if (settings.setupPending) merged.setupPending = true;
@@ -297,33 +284,42 @@ export function recordSkillInstall(agentKey: string, skillName: string, installP
297
284
 
298
285
  /** Effective AI config — unified interface for all providers.
299
286
  * Resolves: saved config → env var → preset default, in that priority order.
300
- * When `providerOverride` is given, resolves that provider's config instead. */
301
- export function effectiveAiConfig(providerOverride?: ProviderId): {
287
+ * When `providerOverride` is given (a provider entry ID), resolves that provider's config. */
288
+ export function effectiveAiConfig(providerOverride?: string): {
302
289
  provider: ProviderId;
303
290
  apiKey: string;
304
291
  model: string;
305
292
  baseUrl: string;
306
293
  } {
307
294
  const s = readSettings();
295
+
296
+ // Find the provider entry
297
+ const targetId = providerOverride || s.ai.activeProvider;
298
+ const entry = targetId ? findProvider(s.ai.providers, targetId) : undefined;
299
+
300
+ if (entry) {
301
+ // Resolve from the unified provider entry
302
+ const preset = PROVIDER_PRESETS[entry.protocol];
303
+ const apiKey = entry.apiKey
304
+ || getApiKeyFromEnv(entry.protocol)
305
+ || preset?.apiKeyFallback
306
+ || '';
307
+ const model = entry.model || preset?.defaultModel || '';
308
+ const baseUrl = entry.baseUrl || preset?.fixedBaseUrl || '';
309
+ return { provider: entry.protocol, apiKey, model, baseUrl };
310
+ }
311
+
312
+ // Fallback: no matching entry — try env var or default
308
313
  const envProvider = process.env.AI_PROVIDER;
309
- const provider: ProviderId = providerOverride
310
- ?? (isProviderId(s.ai.provider) ? s.ai.provider
311
- : (envProvider && isProviderId(envProvider) ? envProvider : 'anthropic'));
312
-
313
- const preset = PROVIDER_PRESETS[provider] ?? PROVIDER_PRESETS.anthropic;
314
- const provCfg = s.ai.providers[provider] ?? { apiKey: '', model: '' };
315
-
316
- const apiKey = provCfg.apiKey
317
- || getApiKeyFromEnv(provider)
318
- || preset.apiKeyFallback
319
- || '';
320
- const model = provCfg.model
321
- || preset.defaultModel;
322
- const baseUrl = provCfg.baseUrl
323
- || preset.fixedBaseUrl
324
- || '';
325
-
326
- return { provider, apiKey, model, baseUrl };
314
+ const protocol: ProviderId = (envProvider && isProviderId(envProvider)) ? envProvider : 'anthropic';
315
+ const preset = PROVIDER_PRESETS[protocol] ?? PROVIDER_PRESETS.anthropic;
316
+
317
+ return {
318
+ provider: protocol,
319
+ apiKey: getApiKeyFromEnv(protocol) || preset.apiKeyFallback || '',
320
+ model: preset.defaultModel,
321
+ baseUrl: preset.fixedBaseUrl || '',
322
+ };
327
323
  }
328
324
 
329
325
  /** Effective MIND_ROOT — settings file can override, env var is fallback */
package/app/lib/types.ts CHANGED
@@ -69,6 +69,10 @@ export interface Message {
69
69
  images?: ImagePart[];
70
70
  /** Skill name used for this user message (rendered as a capsule in the UI) */
71
71
  skillName?: string;
72
+ /** KB file paths (@mentions) sent with this message */
73
+ attachedFiles?: string[];
74
+ /** Names of uploaded files (PDFs etc.) sent with this message */
75
+ uploadedFileNames?: string[];
72
76
  }
73
77
 
74
78
  export interface LocalAttachment {
@@ -256,6 +256,16 @@ export const MCP_AGENTS = {
256
256
  preferredTransport: 'stdio',
257
257
  presenceDirs: ['~/.lingma/'],
258
258
  },
259
+ 'copaw': {
260
+ name: 'CoPaw',
261
+ project: null,
262
+ global: '~/.copaw/config.json',
263
+ key: 'mcp',
264
+ globalNestedKey: 'mcp.clients',
265
+ preferredTransport: 'stdio',
266
+ presenceCli: 'copaw',
267
+ presenceDirs: ['~/.copaw/'],
268
+ },
259
269
  };
260
270
 
261
271
  /**
@@ -286,6 +296,7 @@ export const SKILL_AGENT_REGISTRY = {
286
296
  'qclaw': { mode: 'unsupported' },
287
297
  'workbuddy': { mode: 'unsupported' },
288
298
  'lingma': { mode: 'unsupported' },
299
+ 'copaw': { mode: 'unsupported' },
289
300
  };
290
301
 
291
302
  export function detectAgentPresence(agentKey) {
@@ -7,6 +7,37 @@ import { parseJsonc } from './jsonc.js';
7
7
  import { MCP_AGENTS, SKILL_AGENT_REGISTRY, detectAgentPresence } from './mcp-agents.js';
8
8
  import { mergeTomlEntry } from './toml.js';
9
9
 
10
+ /**
11
+ * Walk a dot-separated path inside an object, creating intermediate {} as needed.
12
+ * Returns the leaf object so the caller can set keys on it.
13
+ * e.g. ensureNestedPath({}, 'mcp.clients') → creates obj.mcp.clients = {} and returns it.
14
+ */
15
+ function ensureNestedPath(obj, dotPath) {
16
+ const parts = dotPath.split('.').filter(Boolean);
17
+ let current = obj;
18
+ for (const part of parts) {
19
+ if (!current[part] || typeof current[part] !== 'object') {
20
+ current[part] = {};
21
+ }
22
+ current = current[part];
23
+ }
24
+ return current;
25
+ }
26
+
27
+ /**
28
+ * Read-only walk of a dot-separated path. Returns null if any segment is missing.
29
+ */
30
+ function readNestedPath(obj, dotPath) {
31
+ const parts = dotPath.split('.').filter(Boolean);
32
+ let current = obj;
33
+ for (const part of parts) {
34
+ if (!current || typeof current !== 'object') return null;
35
+ current = current[part];
36
+ }
37
+ if (!current || typeof current !== 'object') return null;
38
+ return current;
39
+ }
40
+
10
41
  /**
11
42
  * Recursively copy a directory using pure Node.js (cross-platform).
12
43
  * Uses cpSync on Node >=16.7, falls back to manual walk otherwise.
@@ -24,9 +55,28 @@ function copyDirSync(src, dst) {
24
55
  }
25
56
  }
26
57
 
58
+ /**
59
+ * Determine active skill variant based on user's locale setting.
60
+ * Respects disabledSkills to detect if user prefers Chinese (mindos-zh).
61
+ */
62
+ function getActiveSkillName() {
63
+ try {
64
+ const content = readFileSync(CONFIG_PATH, 'utf-8');
65
+ const config = parseJsonc(content);
66
+ // If 'mindos' is disabled, user prefers Chinese (mindos-zh)
67
+ if (config.disabledSkills?.includes('mindos')) {
68
+ return 'mindos-zh';
69
+ }
70
+ } catch {
71
+ // Fall back to English if settings can't be read
72
+ }
73
+ return 'mindos';
74
+ }
75
+
27
76
  /**
28
77
  * Auto-copy skill folder for agents with mode 'unsupported'.
29
78
  * Called after MCP config is written. Best-effort, never throws.
79
+ * Respects user's locale setting (English mindos / Chinese mindos-zh).
30
80
  */
31
81
  function autoInstallSkillForAgent(agentKey, skillName) {
32
82
  const reg = SKILL_AGENT_REGISTRY[agentKey];
@@ -253,7 +303,14 @@ export async function mcpInstall() {
253
303
  installed = content.includes(`[${agent.key}.mindos]`);
254
304
  } else {
255
305
  const config = parseJsonc(content);
256
- if (config[agent.key]?.mindos) installed = true;
306
+ // For agents with globalNestedKey (e.g. CoPaw: mcp.clients),
307
+ // check the nested path for mindos entry
308
+ if (agent.globalNestedKey) {
309
+ const nested = readNestedPath(config, agent.globalNestedKey);
310
+ if (nested?.mindos) installed = true;
311
+ } else {
312
+ if (config[agent.key]?.mindos) installed = true;
313
+ }
257
314
  }
258
315
  if (installed) break;
259
316
  } catch {}
@@ -391,18 +448,25 @@ export async function mcpInstall() {
391
448
  continue;
392
449
  }
393
450
  }
394
- if (!config[agent.key]) config[agent.key] = {};
395
- existed = !!config[agent.key].mindos;
396
- config[agent.key].mindos = entry;
451
+
452
+ // For global scope with nested key (e.g. CoPaw: mcp.clients),
453
+ // write to the nested path instead of the flat key
454
+ const useNestedKey = isGlobal && agent.globalNestedKey;
455
+ const container = useNestedKey
456
+ ? ensureNestedPath(config, agent.globalNestedKey)
457
+ : (() => { if (!config[agent.key]) config[agent.key] = {}; return config[agent.key]; })();
458
+ existed = !!container.mindos;
459
+ container.mindos = entry;
397
460
  writeFileSync(absPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
398
461
  }
399
462
 
400
463
  console.log(`${green('✔')} ${existed ? 'Updated' : 'Installed'} MindOS MCP for ${bold(agent.name)} ${dim(`→ ${absPath}`)}`);
401
464
 
402
- // Auto-copy skill for unsupported agents
403
- const skillResult = autoInstallSkillForAgent(agentKey, 'mindos');
465
+ // Auto-copy skill for unsupported agents, respecting user's locale setting
466
+ const activeSkill = getActiveSkillName();
467
+ const skillResult = autoInstallSkillForAgent(agentKey, activeSkill);
404
468
  if (skillResult === 'copied') {
405
- console.log(`${green('✔')} Copied MindOS Skill for ${bold(agent.name)}`);
469
+ console.log(`${green('✔')} Copied MindOS Skill (${activeSkill}) for ${bold(agent.name)}`);
406
470
  }
407
471
  }
408
472
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geminilight/mindos",
3
- "version": "0.6.61",
3
+ "version": "0.6.65",
4
4
  "description": "MindOS — Human-Agent Collaborative Mind System. Local-first knowledge base that syncs your mind to all AI Agents via MCP.",
5
5
  "keywords": [
6
6
  "mindos",