@geminilight/mindos 0.6.39 → 0.6.40

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 (714) hide show
  1. package/README.md +31 -15
  2. package/README_zh.md +31 -15
  3. package/_standalone/.mindos-build-version +1 -1
  4. package/_standalone/.next/BUILD_ID +1 -1
  5. package/_standalone/.next/app-path-routes-manifest.json +18 -17
  6. package/_standalone/.next/build-manifest.json +3 -3
  7. package/_standalone/.next/cache/.previewinfo +1 -1
  8. package/_standalone/.next/cache/.rscinfo +1 -1
  9. package/_standalone/.next/cache/config.json +3 -3
  10. package/_standalone/.next/prerender-manifest.json +3 -3
  11. package/_standalone/.next/react-loadable-manifest.json +68 -6
  12. package/_standalone/.next/routes-manifest.json +6 -0
  13. package/_standalone/.next/server/app/.well-known/agent-card.json/route_client-reference-manifest.js +1 -1
  14. package/_standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  15. package/_standalone/.next/server/app/_global-error.html +2 -2
  16. package/_standalone/.next/server/app/_global-error.rsc +1 -1
  17. package/_standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  18. package/_standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  19. package/_standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  20. package/_standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  21. package/_standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  22. package/_standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  23. package/_standalone/.next/server/app/_not-found/page.js +2 -2
  24. package/_standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  25. package/_standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  26. package/_standalone/.next/server/app/agents/[agentKey]/page.js +2 -2
  27. package/_standalone/.next/server/app/agents/[agentKey]/page.js.nft.json +1 -1
  28. package/_standalone/.next/server/app/agents/[agentKey]/page_client-reference-manifest.js +1 -1
  29. package/_standalone/.next/server/app/agents/page.js +3 -3
  30. package/_standalone/.next/server/app/agents/page.js.nft.json +1 -1
  31. package/_standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  32. package/_standalone/.next/server/app/api/a2a/agents/route_client-reference-manifest.js +1 -1
  33. package/_standalone/.next/server/app/api/a2a/delegations/route_client-reference-manifest.js +1 -1
  34. package/_standalone/.next/server/app/api/a2a/discover/route_client-reference-manifest.js +1 -1
  35. package/_standalone/.next/server/app/api/a2a/route_client-reference-manifest.js +1 -1
  36. package/_standalone/.next/server/app/api/acp/config/route.js +1 -1
  37. package/_standalone/.next/server/app/api/acp/config/route.js.nft.json +1 -1
  38. package/_standalone/.next/server/app/api/acp/config/route_client-reference-manifest.js +1 -1
  39. package/_standalone/.next/server/app/api/acp/detect/route.js +1 -1
  40. package/_standalone/.next/server/app/api/acp/detect/route.js.nft.json +1 -1
  41. package/_standalone/.next/server/app/api/acp/detect/route_client-reference-manifest.js +1 -1
  42. package/_standalone/.next/server/app/api/acp/install/route_client-reference-manifest.js +1 -1
  43. package/_standalone/.next/server/app/api/acp/registry/route_client-reference-manifest.js +1 -1
  44. package/_standalone/.next/server/app/api/acp/session/route.js +1 -1
  45. package/_standalone/.next/server/app/api/acp/session/route.js.nft.json +1 -1
  46. package/_standalone/.next/server/app/api/acp/session/route_client-reference-manifest.js +1 -1
  47. package/_standalone/.next/server/app/api/agent-activity/route.js +1 -1
  48. package/_standalone/.next/server/app/api/agent-activity/route.js.nft.json +1 -1
  49. package/_standalone/.next/server/app/api/agent-activity/route_client-reference-manifest.js +1 -1
  50. package/_standalone/.next/server/app/api/ask/route.js +137 -99
  51. package/_standalone/.next/server/app/api/ask/route.js.nft.json +1 -1
  52. package/_standalone/.next/server/app/api/ask/route_client-reference-manifest.js +1 -1
  53. package/_standalone/.next/server/app/api/ask-sessions/route_client-reference-manifest.js +1 -1
  54. package/_standalone/.next/server/app/api/auth/route_client-reference-manifest.js +1 -1
  55. package/_standalone/.next/server/app/api/backlinks/route.js +1 -1
  56. package/_standalone/.next/server/app/api/backlinks/route.js.nft.json +1 -1
  57. package/_standalone/.next/server/app/api/backlinks/route_client-reference-manifest.js +1 -1
  58. package/_standalone/.next/server/app/api/bootstrap/route.js +1 -1
  59. package/_standalone/.next/server/app/api/bootstrap/route.js.nft.json +1 -1
  60. package/_standalone/.next/server/app/api/bootstrap/route_client-reference-manifest.js +1 -1
  61. package/_standalone/.next/server/app/api/changes/route.js +1 -1
  62. package/_standalone/.next/server/app/api/changes/route.js.nft.json +1 -1
  63. package/_standalone/.next/server/app/api/changes/route_client-reference-manifest.js +1 -1
  64. package/_standalone/.next/server/app/api/export/route.js +3 -3
  65. package/_standalone/.next/server/app/api/export/route.js.nft.json +1 -1
  66. package/_standalone/.next/server/app/api/export/route_client-reference-manifest.js +1 -1
  67. package/_standalone/.next/server/app/api/extract-pdf/route_client-reference-manifest.js +1 -1
  68. package/_standalone/.next/server/app/api/file/import/route.js +2 -19
  69. package/_standalone/.next/server/app/api/file/import/route.js.nft.json +1 -1
  70. package/_standalone/.next/server/app/api/file/import/route_client-reference-manifest.js +1 -1
  71. package/_standalone/.next/server/app/api/file/route.js +1 -18
  72. package/_standalone/.next/server/app/api/file/route.js.nft.json +1 -1
  73. package/_standalone/.next/server/app/api/file/route_client-reference-manifest.js +1 -1
  74. package/_standalone/.next/server/app/api/files/route.js +1 -1
  75. package/_standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  76. package/_standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  77. package/_standalone/.next/server/app/api/git/route.js +1 -1
  78. package/_standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  79. package/_standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  80. package/_standalone/.next/server/app/api/graph/route.js +1 -1
  81. package/_standalone/.next/server/app/api/graph/route.js.nft.json +1 -1
  82. package/_standalone/.next/server/app/api/graph/route_client-reference-manifest.js +1 -1
  83. package/_standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  84. package/_standalone/.next/server/app/api/inbox/route.js +1 -0
  85. package/_standalone/.next/server/app/api/inbox/route.js.nft.json +1 -0
  86. package/_standalone/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -0
  87. package/_standalone/.next/server/app/api/init/route.js +1 -1
  88. package/_standalone/.next/server/app/api/init/route.js.nft.json +1 -1
  89. package/_standalone/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  90. package/_standalone/.next/server/app/api/mcp/agents/route.js +1 -1
  91. package/_standalone/.next/server/app/api/mcp/agents/route.js.nft.json +1 -1
  92. package/_standalone/.next/server/app/api/mcp/agents/route_client-reference-manifest.js +1 -1
  93. package/_standalone/.next/server/app/api/mcp/install/route.js +1 -1
  94. package/_standalone/.next/server/app/api/mcp/install/route.js.nft.json +1 -1
  95. package/_standalone/.next/server/app/api/mcp/install/route_client-reference-manifest.js +1 -1
  96. package/_standalone/.next/server/app/api/mcp/install-skill/route_client-reference-manifest.js +1 -1
  97. package/_standalone/.next/server/app/api/mcp/restart/route_client-reference-manifest.js +1 -1
  98. package/_standalone/.next/server/app/api/mcp/status/route.js +1 -1
  99. package/_standalone/.next/server/app/api/mcp/status/route.js.nft.json +1 -1
  100. package/_standalone/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
  101. package/_standalone/.next/server/app/api/monitoring/route.js +1 -1
  102. package/_standalone/.next/server/app/api/monitoring/route.js.nft.json +1 -1
  103. package/_standalone/.next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
  104. package/_standalone/.next/server/app/api/recent-files/route.js +1 -1
  105. package/_standalone/.next/server/app/api/recent-files/route.js.nft.json +1 -1
  106. package/_standalone/.next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
  107. package/_standalone/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
  108. package/_standalone/.next/server/app/api/search/route.js +1 -1
  109. package/_standalone/.next/server/app/api/search/route.js.nft.json +1 -1
  110. package/_standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  111. package/_standalone/.next/server/app/api/settings/list-models/route.js +1 -1
  112. package/_standalone/.next/server/app/api/settings/list-models/route.js.nft.json +1 -1
  113. package/_standalone/.next/server/app/api/settings/list-models/route_client-reference-manifest.js +1 -1
  114. package/_standalone/.next/server/app/api/settings/reset-token/route.js +1 -1
  115. package/_standalone/.next/server/app/api/settings/reset-token/route.js.nft.json +1 -1
  116. package/_standalone/.next/server/app/api/settings/reset-token/route_client-reference-manifest.js +1 -1
  117. package/_standalone/.next/server/app/api/settings/route.js +1 -1
  118. package/_standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
  119. package/_standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  120. package/_standalone/.next/server/app/api/settings/test-key/route.js +1 -1
  121. package/_standalone/.next/server/app/api/settings/test-key/route.js.nft.json +1 -1
  122. package/_standalone/.next/server/app/api/settings/test-key/route_client-reference-manifest.js +1 -1
  123. package/_standalone/.next/server/app/api/setup/check-path/route_client-reference-manifest.js +1 -1
  124. package/_standalone/.next/server/app/api/setup/check-port/route_client-reference-manifest.js +1 -1
  125. package/_standalone/.next/server/app/api/setup/generate-token/route_client-reference-manifest.js +1 -1
  126. package/_standalone/.next/server/app/api/setup/ls/route_client-reference-manifest.js +1 -1
  127. package/_standalone/.next/server/app/api/setup/route.js +1 -1
  128. package/_standalone/.next/server/app/api/setup/route.js.nft.json +1 -1
  129. package/_standalone/.next/server/app/api/setup/route_client-reference-manifest.js +1 -1
  130. package/_standalone/.next/server/app/api/skills/route.js +2 -2
  131. package/_standalone/.next/server/app/api/skills/route.js.nft.json +1 -1
  132. package/_standalone/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  133. package/_standalone/.next/server/app/api/sync/route.js +1 -1
  134. package/_standalone/.next/server/app/api/sync/route_client-reference-manifest.js +1 -1
  135. package/_standalone/.next/server/app/api/tree-version/route.js +1 -1
  136. package/_standalone/.next/server/app/api/tree-version/route.js.nft.json +1 -1
  137. package/_standalone/.next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
  138. package/_standalone/.next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
  139. package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  140. package/_standalone/.next/server/app/api/update-check/route.js +1 -1
  141. package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
  142. package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
  143. package/_standalone/.next/server/app/api/workflows/route.js +2 -2
  144. package/_standalone/.next/server/app/api/workflows/route.js.nft.json +1 -1
  145. package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
  146. package/_standalone/.next/server/app/changes/page.js +2 -2
  147. package/_standalone/.next/server/app/changes/page.js.nft.json +1 -1
  148. package/_standalone/.next/server/app/changes/page_client-reference-manifest.js +1 -1
  149. package/_standalone/.next/server/app/echo/[segment]/page.js +6 -6
  150. package/_standalone/.next/server/app/echo/[segment]/page.js.nft.json +1 -1
  151. package/_standalone/.next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
  152. package/_standalone/.next/server/app/echo/page.js +2 -2
  153. package/_standalone/.next/server/app/echo/page.js.nft.json +1 -1
  154. package/_standalone/.next/server/app/echo/page_client-reference-manifest.js +1 -1
  155. package/_standalone/.next/server/app/explore/page.js +3 -3
  156. package/_standalone/.next/server/app/explore/page.js.nft.json +1 -1
  157. package/_standalone/.next/server/app/explore/page_client-reference-manifest.js +1 -1
  158. package/_standalone/.next/server/app/help/page.js +2 -2
  159. package/_standalone/.next/server/app/help/page.js.nft.json +1 -1
  160. package/_standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
  161. package/_standalone/.next/server/app/login/page.js +2 -2
  162. package/_standalone/.next/server/app/login/page.js.nft.json +1 -1
  163. package/_standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  164. package/_standalone/.next/server/app/page.js +3 -3
  165. package/_standalone/.next/server/app/page.js.nft.json +1 -1
  166. package/_standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  167. package/_standalone/.next/server/app/setup/page.js +2 -2
  168. package/_standalone/.next/server/app/setup/page.js.nft.json +1 -1
  169. package/_standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  170. package/_standalone/.next/server/app/trash/page.js +3 -3
  171. package/_standalone/.next/server/app/trash/page.js.nft.json +1 -1
  172. package/_standalone/.next/server/app/trash/page_client-reference-manifest.js +1 -1
  173. package/_standalone/.next/server/app/view/[...path]/page.js +4 -4
  174. package/_standalone/.next/server/app/view/[...path]/page.js.nft.json +1 -1
  175. package/_standalone/.next/server/app/view/[...path]/page_client-reference-manifest.js +1 -1
  176. package/_standalone/.next/server/app-paths-manifest.json +18 -17
  177. package/_standalone/.next/server/chunks/1550.js +1 -1
  178. package/_standalone/.next/server/chunks/1750.js +1 -0
  179. package/_standalone/.next/server/chunks/1955.js +11 -0
  180. package/_standalone/.next/server/chunks/3680.js +1 -0
  181. package/_standalone/.next/server/chunks/4497.js +219 -0
  182. package/_standalone/.next/server/chunks/5560.js +2 -0
  183. package/_standalone/.next/server/chunks/6365.js +52 -0
  184. package/_standalone/.next/server/chunks/6539.js +1 -1
  185. package/_standalone/.next/server/chunks/8388.js +15 -0
  186. package/_standalone/.next/server/chunks/953.js +42 -2
  187. package/_standalone/.next/server/functions-config-manifest.json +2 -1
  188. package/_standalone/.next/server/instrumentation.js +1 -1
  189. package/_standalone/.next/server/middleware-build-manifest.js +1 -1
  190. package/_standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  191. package/_standalone/.next/server/next-font-manifest.js +1 -1
  192. package/_standalone/.next/server/next-font-manifest.json +1 -1
  193. package/_standalone/.next/server/pages/500.html +2 -2
  194. package/_standalone/.next/server/server-reference-manifest.js +1 -1
  195. package/_standalone/.next/server/server-reference-manifest.json +1 -1
  196. package/_standalone/.next/static/chunks/1053-0adaccc98a752a58.js +29 -0
  197. package/_standalone/.next/static/chunks/1239.10a0710c2772ab34.js +1 -0
  198. package/_standalone/.next/static/chunks/{1814.e2da5460ded71d71.js → 1814.2ee1d03297c0bccd.js} +1 -1
  199. package/_standalone/.next/static/chunks/{1a258343-030e4d6735874dd4.js → 1a258343-9803591e4aaee1f6.js} +1 -1
  200. package/_standalone/.next/static/chunks/2631.dc56e83472bde281.js +1 -0
  201. package/_standalone/.next/static/chunks/2872.045858d00bd8307f.js +8 -0
  202. package/_standalone/.next/static/chunks/2968.f10ccee9e7e2324d.js +2 -0
  203. package/_standalone/.next/static/chunks/3160-83a7e0b94414b3ac.js +1 -0
  204. package/_standalone/.next/static/chunks/{3637.4bcd01a4db78b894.js → 3637.f9a42cca59fd5bb5.js} +1 -1
  205. package/_standalone/.next/static/chunks/4033.6666700547b20141.js +1 -0
  206. package/_standalone/.next/static/chunks/4563-c2afaeacb241d1d0.js +6 -0
  207. package/_standalone/.next/static/chunks/516.24ee058b1d4b1fed.js +8 -0
  208. package/_standalone/.next/static/chunks/5627.c4337d7289acb31f.js +1 -0
  209. package/_standalone/.next/static/chunks/5956.b445072b35915129.js +1 -0
  210. package/_standalone/.next/static/chunks/6090-c98268ca726a68d3.js +1 -0
  211. package/_standalone/.next/static/chunks/6357-c645842834c0d4cd.js +1 -0
  212. package/_standalone/.next/static/chunks/6826.7b7d94dd0fd83812.js +1 -0
  213. package/_standalone/.next/static/chunks/{8409-de5726a4a278d28f.js → 6926-4af497b83952fa87.js} +1 -1
  214. package/_standalone/.next/static/chunks/7266-bb7be1128eccd48e.js +13 -0
  215. package/_standalone/.next/static/chunks/7753.63831cfc54a55fbb.js +1 -0
  216. package/_standalone/.next/static/chunks/862.9f526e964489e2e5.js +1 -0
  217. package/_standalone/.next/static/chunks/{1384-55276d40a9da4e88.js → 8663-de911d2d395622be.js} +2 -2
  218. package/_standalone/.next/static/chunks/9300.118b8c840634383f.js +28 -0
  219. package/_standalone/.next/static/chunks/9371-575600301da5d6bb.js +1 -0
  220. package/_standalone/.next/static/chunks/95247769.3b5caae1c1a76ce1.js +4 -0
  221. package/_standalone/.next/static/chunks/9602-423291fdb36396d1.js +1 -0
  222. package/_standalone/.next/static/chunks/app/.well-known/agent-card.json/route-400c3c09b1540c14.js +1 -0
  223. package/_standalone/.next/static/chunks/app/_global-error/page-400c3c09b1540c14.js +1 -0
  224. package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-3e08abb495ecd5fd.js +1 -0
  225. package/_standalone/.next/static/chunks/app/agents/page-e7e0f87ad3d765ac.js +5 -0
  226. package/_standalone/.next/static/chunks/app/api/a2a/agents/route-400c3c09b1540c14.js +1 -0
  227. package/_standalone/.next/static/chunks/app/api/a2a/delegations/route-400c3c09b1540c14.js +1 -0
  228. package/_standalone/.next/static/chunks/app/api/a2a/discover/route-400c3c09b1540c14.js +1 -0
  229. package/_standalone/.next/static/chunks/app/api/a2a/route-400c3c09b1540c14.js +1 -0
  230. package/_standalone/.next/static/chunks/app/api/acp/config/route-400c3c09b1540c14.js +1 -0
  231. package/_standalone/.next/static/chunks/app/api/acp/detect/route-400c3c09b1540c14.js +1 -0
  232. package/_standalone/.next/static/chunks/app/api/acp/install/route-400c3c09b1540c14.js +1 -0
  233. package/_standalone/.next/static/chunks/app/api/acp/registry/route-400c3c09b1540c14.js +1 -0
  234. package/_standalone/.next/static/chunks/app/api/acp/session/route-400c3c09b1540c14.js +1 -0
  235. package/_standalone/.next/static/chunks/app/api/agent-activity/route-400c3c09b1540c14.js +1 -0
  236. package/_standalone/.next/static/chunks/app/api/ask/route-400c3c09b1540c14.js +1 -0
  237. package/_standalone/.next/static/chunks/app/api/ask-sessions/route-400c3c09b1540c14.js +1 -0
  238. package/_standalone/.next/static/chunks/app/api/auth/route-400c3c09b1540c14.js +1 -0
  239. package/_standalone/.next/static/chunks/app/api/backlinks/route-400c3c09b1540c14.js +1 -0
  240. package/_standalone/.next/static/chunks/app/api/bootstrap/route-400c3c09b1540c14.js +1 -0
  241. package/_standalone/.next/static/chunks/app/api/changes/route-400c3c09b1540c14.js +1 -0
  242. package/_standalone/.next/static/chunks/app/api/export/route-400c3c09b1540c14.js +1 -0
  243. package/_standalone/.next/static/chunks/app/api/extract-pdf/route-400c3c09b1540c14.js +1 -0
  244. package/_standalone/.next/static/chunks/app/api/file/import/route-400c3c09b1540c14.js +1 -0
  245. package/_standalone/.next/static/chunks/app/api/file/route-400c3c09b1540c14.js +1 -0
  246. package/_standalone/.next/static/chunks/app/api/files/route-400c3c09b1540c14.js +1 -0
  247. package/_standalone/.next/static/chunks/app/api/git/route-400c3c09b1540c14.js +1 -0
  248. package/_standalone/.next/static/chunks/app/api/graph/route-400c3c09b1540c14.js +1 -0
  249. package/_standalone/.next/static/chunks/app/api/health/route-400c3c09b1540c14.js +1 -0
  250. package/_standalone/.next/static/chunks/app/api/inbox/route-400c3c09b1540c14.js +1 -0
  251. package/_standalone/.next/static/chunks/app/api/init/route-400c3c09b1540c14.js +1 -0
  252. package/_standalone/.next/static/chunks/app/api/mcp/agents/route-400c3c09b1540c14.js +1 -0
  253. package/_standalone/.next/static/chunks/app/api/mcp/install/route-400c3c09b1540c14.js +1 -0
  254. package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-400c3c09b1540c14.js +1 -0
  255. package/_standalone/.next/static/chunks/app/api/mcp/restart/route-400c3c09b1540c14.js +1 -0
  256. package/_standalone/.next/static/chunks/app/api/mcp/status/route-400c3c09b1540c14.js +1 -0
  257. package/_standalone/.next/static/chunks/app/api/monitoring/route-400c3c09b1540c14.js +1 -0
  258. package/_standalone/.next/static/chunks/app/api/recent-files/route-400c3c09b1540c14.js +1 -0
  259. package/_standalone/.next/static/chunks/app/api/restart/route-400c3c09b1540c14.js +1 -0
  260. package/_standalone/.next/static/chunks/app/api/search/route-400c3c09b1540c14.js +1 -0
  261. package/_standalone/.next/static/chunks/app/api/settings/list-models/route-400c3c09b1540c14.js +1 -0
  262. package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-400c3c09b1540c14.js +1 -0
  263. package/_standalone/.next/static/chunks/app/api/settings/route-400c3c09b1540c14.js +1 -0
  264. package/_standalone/.next/static/chunks/app/api/settings/test-key/route-400c3c09b1540c14.js +1 -0
  265. package/_standalone/.next/static/chunks/app/api/setup/check-path/route-400c3c09b1540c14.js +1 -0
  266. package/_standalone/.next/static/chunks/app/api/setup/check-port/route-400c3c09b1540c14.js +1 -0
  267. package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-400c3c09b1540c14.js +1 -0
  268. package/_standalone/.next/static/chunks/app/api/setup/ls/route-400c3c09b1540c14.js +1 -0
  269. package/_standalone/.next/static/chunks/app/api/setup/route-400c3c09b1540c14.js +1 -0
  270. package/_standalone/.next/static/chunks/app/api/skills/route-400c3c09b1540c14.js +1 -0
  271. package/_standalone/.next/static/chunks/app/api/sync/route-400c3c09b1540c14.js +1 -0
  272. package/_standalone/.next/static/chunks/app/api/tree-version/route-400c3c09b1540c14.js +1 -0
  273. package/_standalone/.next/static/chunks/app/api/uninstall/route-400c3c09b1540c14.js +1 -0
  274. package/_standalone/.next/static/chunks/app/api/update/route-400c3c09b1540c14.js +1 -0
  275. package/_standalone/.next/static/chunks/app/api/update-check/route-400c3c09b1540c14.js +1 -0
  276. package/_standalone/.next/static/chunks/app/api/update-status/route-400c3c09b1540c14.js +1 -0
  277. package/_standalone/.next/static/chunks/app/api/workflows/route-400c3c09b1540c14.js +1 -0
  278. package/_standalone/.next/static/chunks/app/changes/page-350992cf5091bc5b.js +1 -0
  279. package/_standalone/.next/static/chunks/app/echo/[segment]/page-addf014fcf23fad5.js +11 -0
  280. package/_standalone/.next/static/chunks/app/echo/page-400c3c09b1540c14.js +1 -0
  281. package/_standalone/.next/static/chunks/app/explore/page-5eb2835e9e3ab4bb.js +4 -0
  282. package/_standalone/.next/static/chunks/app/help/page-3d0e1ceaa4abc243.js +1 -0
  283. package/_standalone/.next/static/chunks/app/layout-9378c1c8d3e5761b.js +186 -0
  284. package/_standalone/.next/static/chunks/app/login/page-24236460fa7c11d0.js +1 -0
  285. package/_standalone/.next/static/chunks/app/page-9bae420fbbdc5fff.js +7 -0
  286. package/_standalone/.next/static/chunks/app/setup/page-99ed3d1bb6b8f4ef.js +1 -0
  287. package/_standalone/.next/static/chunks/app/trash/page-b61ef2d5cd4f8d73.js +1 -0
  288. package/_standalone/.next/static/chunks/app/view/[...path]/loading-400c3c09b1540c14.js +1 -0
  289. package/_standalone/.next/static/chunks/app/view/[...path]/not-found-61474670d6bb6116.js +1 -0
  290. package/_standalone/.next/static/chunks/app/view/[...path]/page-44fa78cbea613a78.js +12 -0
  291. package/_standalone/.next/static/chunks/e71f6c19-4df85185bf989b49.js +1 -0
  292. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-400c3c09b1540c14.js +1 -0
  293. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-400c3c09b1540c14.js +1 -0
  294. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-400c3c09b1540c14.js +1 -0
  295. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-400c3c09b1540c14.js +1 -0
  296. package/_standalone/.next/static/chunks/webpack-c28c55d0a6021a6b.js +1 -0
  297. package/_standalone/.next/static/css/d300701f384db50d.css +1 -0
  298. package/_standalone/.next/static/rZLs1krFuduixvcVNe6q3/_buildManifest.js +1 -0
  299. package/_standalone/.next/trace +63 -53
  300. package/_standalone/.next/types/routes.d.ts +2 -1
  301. package/_standalone/.next/types/validator.ts +9 -0
  302. package/_standalone/__tests__/agent/chat-mode.test.ts +103 -0
  303. package/_standalone/__tests__/agents/agents-content-dashboard.test.tsx +4 -3
  304. package/_standalone/__tests__/api/bootstrap.test.ts +0 -2
  305. package/_standalone/__tests__/api/file.test.ts +22 -1
  306. package/_standalone/__tests__/api/install-skill.test.ts +2 -2
  307. package/_standalone/__tests__/api/mcp-install.test.ts +9 -10
  308. package/_standalone/__tests__/api/setup.test.ts +2 -2
  309. package/_standalone/__tests__/api/test-key.test.ts +73 -147
  310. package/_standalone/__tests__/ask/ask-content-input-during-run.test.tsx +1 -1
  311. package/_standalone/__tests__/ask/mode-capsule.test.ts +95 -0
  312. package/_standalone/__tests__/core/inbox.test.ts +250 -0
  313. package/_standalone/__tests__/core/skill-install-logic.test.ts +3 -3
  314. package/_standalone/__tests__/core/sync-status.test.ts +1 -1
  315. package/_standalone/__tests__/core/tools.test.ts +11 -6
  316. package/_standalone/__tests__/lib/echo-pages-visual-i18n.test.ts +2 -2
  317. package/_standalone/__tests__/lib/i18n-new-keys.test.ts +2 -2
  318. package/_standalone/__tests__/panels/agents-panel-hub.test.tsx +2 -2
  319. package/_standalone/__tests__/settings/activity-bar-update-badge.test.tsx +1 -1
  320. package/_standalone/__tests__/settings/settings-update-badge.test.tsx +1 -1
  321. package/_standalone/__tests__/settings/update-tab-availability-sync.test.tsx +1 -1
  322. package/_standalone/__tests__/settings/update-tab-browser.test.tsx +1 -1
  323. package/_standalone/__tests__/settings/update-tab-desktop.test.tsx +1 -1
  324. package/_standalone/__tests__/setup.ts +3 -5
  325. package/_standalone/app/globals.css +11 -1
  326. package/_standalone/components/ActivityBar.tsx +26 -10
  327. package/_standalone/components/AskFab.tsx +1 -1
  328. package/_standalone/components/AskModal.tsx +1 -1
  329. package/_standalone/components/Backlinks.tsx +1 -1
  330. package/_standalone/components/CreateSpaceModal.tsx +7 -55
  331. package/_standalone/components/EchoSpotlight.tsx +1 -1
  332. package/_standalone/components/ExportModal.tsx +1 -1
  333. package/_standalone/components/FileTree.tsx +64 -79
  334. package/_standalone/components/FindInPage.tsx +1 -1
  335. package/_standalone/components/GuideCard.tsx +1 -1
  336. package/_standalone/components/ImportModal.tsx +1 -1
  337. package/_standalone/components/KeyboardShortcuts.tsx +1 -1
  338. package/_standalone/components/MarkdownView.tsx +11 -1
  339. package/_standalone/components/OnboardingView.tsx +1 -1
  340. package/_standalone/components/OrganizeToast.tsx +1 -1
  341. package/_standalone/components/Panel.tsx +82 -4
  342. package/_standalone/components/QuickSuggestion.tsx +1 -1
  343. package/_standalone/components/RightAgentDetailPanel.tsx +2 -2
  344. package/_standalone/components/RightAskPanel.tsx +58 -22
  345. package/_standalone/components/SearchModal.tsx +1 -1
  346. package/_standalone/components/Sidebar.tsx +1 -1
  347. package/_standalone/components/SidebarLayout.tsx +52 -16
  348. package/_standalone/components/SpaceInitToast.tsx +1 -1
  349. package/_standalone/components/SyncStatusBar.tsx +2 -2
  350. package/_standalone/components/SystemPulse.tsx +12 -6
  351. package/_standalone/components/TableOfContents.tsx +86 -39
  352. package/_standalone/components/agents/AgentActivitySection.tsx +225 -0
  353. package/_standalone/components/agents/AgentsMcpSection.tsx +7 -16
  354. package/_standalone/components/agents/AgentsOverviewSection.tsx +28 -27
  355. package/_standalone/components/agents/AgentsPanelA2aTab.tsx +1 -1
  356. package/_standalone/components/agents/AgentsPanelSessionsTab.tsx +6 -1
  357. package/_standalone/components/agents/AgentsSkillsSection.tsx +1 -1
  358. package/_standalone/components/agents/DiscoverAgentModal.tsx +1 -1
  359. package/_standalone/components/agents/RecentActivityFeed.tsx +49 -88
  360. package/_standalone/components/agents/agent-activity-shared.tsx +110 -0
  361. package/_standalone/components/ask/AgentSelectorCapsule.tsx +1 -1
  362. package/_standalone/components/ask/AskContent.tsx +332 -486
  363. package/_standalone/components/ask/AskHeader.tsx +61 -0
  364. package/_standalone/components/ask/FileChip.tsx +9 -5
  365. package/_standalone/components/ask/MessageList.tsx +88 -21
  366. package/_standalone/components/ask/ModeCapsule.tsx +180 -0
  367. package/_standalone/components/ask/ProviderModelCapsule.tsx +284 -0
  368. package/_standalone/components/ask/SessionHistory.tsx +63 -10
  369. package/_standalone/components/ask/SessionTabBar.tsx +1 -1
  370. package/_standalone/components/ask/ThinkingBlock.tsx +1 -1
  371. package/_standalone/components/ask/ToolCallBlock.tsx +28 -24
  372. package/_standalone/components/changes/ChangesBanner.tsx +1 -1
  373. package/_standalone/components/echo/EchoInsightCollapsible.tsx +1 -1
  374. package/_standalone/components/echo/EchoSegmentNav.tsx +1 -1
  375. package/_standalone/components/home/InboxSection.tsx +268 -0
  376. package/_standalone/components/panels/AgentsPanel.tsx +3 -2
  377. package/_standalone/components/panels/AgentsPanelHubNav.tsx +2 -6
  378. package/_standalone/components/panels/DiscoverPanel.tsx +1 -1
  379. package/_standalone/components/panels/EchoPanel.tsx +1 -1
  380. package/_standalone/components/panels/EchoSidebarStats.tsx +1 -1
  381. package/_standalone/components/panels/ImportHistoryPanel.tsx +1 -1
  382. package/_standalone/components/panels/PanelHeader.tsx +1 -1
  383. package/_standalone/components/panels/PluginsPanel.tsx +1 -1
  384. package/_standalone/components/panels/SearchPanel.tsx +5 -2
  385. package/_standalone/components/panels/SyncPopover.tsx +1 -1
  386. package/_standalone/components/panels/WorkflowsPanel.tsx +1 -1
  387. package/_standalone/components/renderers/agent-inspector/AgentInspectorRenderer.tsx +18 -0
  388. package/_standalone/components/renderers/agent-inspector/manifest.ts +16 -0
  389. package/_standalone/components/renderers/todo/TodoRenderer.tsx +489 -75
  390. package/_standalone/components/settings/AiTab.tsx +198 -127
  391. package/_standalone/components/settings/AppearanceTab.tsx +48 -50
  392. package/_standalone/components/settings/KnowledgeTab.tsx +92 -27
  393. package/_standalone/components/settings/McpAgentInstall.tsx +1 -1
  394. package/_standalone/components/settings/McpSkillsSection.tsx +1 -1
  395. package/_standalone/components/settings/McpTab.tsx +145 -7
  396. package/_standalone/components/settings/PluginsTab.tsx +1 -1
  397. package/_standalone/components/settings/SettingsContent.tsx +5 -2
  398. package/_standalone/components/settings/SyncTab.tsx +615 -230
  399. package/_standalone/components/settings/UninstallTab.tsx +1 -1
  400. package/_standalone/components/settings/UpdateTab.tsx +2 -2
  401. package/_standalone/components/settings/types.ts +4 -5
  402. package/_standalone/components/setup/StepAI.tsx +70 -49
  403. package/_standalone/components/setup/StepDots.tsx +1 -1
  404. package/_standalone/components/setup/StepReview.tsx +176 -8
  405. package/_standalone/components/setup/types.ts +11 -8
  406. package/_standalone/components/shared/ProviderSelect.tsx +134 -0
  407. package/_standalone/components/walkthrough/WalkthroughOverlay.tsx +2 -2
  408. package/_standalone/components/walkthrough/WalkthroughTooltip.tsx +2 -2
  409. package/_standalone/components/walkthrough/index.ts +1 -1
  410. package/_standalone/data/skills/mindos/SKILL.md +3 -3
  411. package/_standalone/data/skills/mindos-zh/SKILL.md +3 -3
  412. package/_standalone/hooks/useAcpDetection.ts +1 -1
  413. package/_standalone/hooks/useAskChat.ts +248 -0
  414. package/_standalone/hooks/useAskPanel.ts +24 -4
  415. package/_standalone/hooks/useAskSession.ts +15 -0
  416. package/_standalone/lib/acp/types.ts +1 -1
  417. package/_standalone/lib/api.ts +3 -1
  418. package/_standalone/lib/core/types.ts +2 -0
  419. package/_standalone/lib/i18n/modules/ai-chat.ts +35 -13
  420. package/_standalone/lib/i18n/modules/features.ts +2 -2
  421. package/_standalone/lib/i18n/modules/knowledge.ts +82 -2
  422. package/_standalone/lib/i18n/modules/navigation.ts +6 -2
  423. package/_standalone/lib/i18n/modules/onboarding.ts +39 -9
  424. package/_standalone/lib/i18n/modules/panels.ts +78 -29
  425. package/_standalone/lib/i18n/modules/settings.ts +207 -23
  426. package/_standalone/lib/inbox-upload.ts +93 -0
  427. package/_standalone/lib/settings-ai-client.ts +13 -12
  428. package/_standalone/lib/space-ai-init.ts +66 -0
  429. package/_standalone/lib/stores/McpStoreInit.tsx +18 -0
  430. package/_standalone/lib/stores/WalkthroughInit.tsx +20 -0
  431. package/_standalone/lib/stores/locale-store.ts +55 -0
  432. package/_standalone/lib/stores/mcp-store.ts +156 -0
  433. package/_standalone/lib/stores/walkthrough-store.ts +118 -0
  434. package/_standalone/package-lock.json +40 -8
  435. package/_standalone/package.json +3 -1
  436. package/_standalone/tsconfig.json +1 -1
  437. package/_standalone/tsconfig.tsbuildinfo +1 -1
  438. package/app/app/api/acp/detect/route.ts +29 -20
  439. package/app/app/api/agent-activity/route.ts +1 -1
  440. package/app/app/api/ask/route.ts +103 -29
  441. package/app/app/api/ask-sessions/route.ts +1 -0
  442. package/app/app/api/bootstrap/route.ts +1 -3
  443. package/app/app/api/file/route.ts +34 -4
  444. package/app/app/api/inbox/route.ts +61 -0
  445. package/app/app/api/settings/list-models/route.ts +73 -53
  446. package/app/app/api/settings/route.ts +46 -55
  447. package/app/app/api/settings/test-key/route.ts +57 -114
  448. package/app/app/api/setup/route.ts +31 -21
  449. package/app/app/api/sync/route.ts +122 -12
  450. package/app/app/api/update-check/route.ts +2 -2
  451. package/app/app/globals.css +11 -1
  452. package/app/app/layout.tsx +2 -3
  453. package/app/app/login/page.tsx +1 -1
  454. package/app/app/view/[...path]/ViewPageClient.tsx +10 -10
  455. package/app/app/view/[...path]/not-found.tsx +1 -1
  456. package/app/components/ActivityBar.tsx +26 -10
  457. package/app/components/AskFab.tsx +1 -1
  458. package/app/components/AskModal.tsx +1 -1
  459. package/app/components/Backlinks.tsx +1 -1
  460. package/app/components/CreateSpaceModal.tsx +7 -55
  461. package/app/components/DirView.tsx +93 -11
  462. package/app/components/EchoSpotlight.tsx +1 -1
  463. package/app/components/ExportModal.tsx +1 -1
  464. package/app/components/FileTree.tsx +64 -79
  465. package/app/components/FindInPage.tsx +1 -1
  466. package/app/components/GuideCard.tsx +1 -1
  467. package/app/components/HomeContent.tsx +21 -14
  468. package/app/components/ImportModal.tsx +1 -1
  469. package/app/components/KeyboardShortcuts.tsx +1 -1
  470. package/app/components/MarkdownView.tsx +11 -1
  471. package/app/components/OnboardingView.tsx +1 -1
  472. package/app/components/OrganizeToast.tsx +1 -1
  473. package/app/components/Panel.tsx +82 -4
  474. package/app/components/QuickSuggestion.tsx +1 -1
  475. package/app/components/RightAgentDetailPanel.tsx +2 -2
  476. package/app/components/RightAskPanel.tsx +58 -22
  477. package/app/components/SearchModal.tsx +1 -1
  478. package/app/components/Sidebar.tsx +1 -1
  479. package/app/components/SidebarLayout.tsx +52 -16
  480. package/app/components/SpaceInitToast.tsx +1 -1
  481. package/app/components/SyncStatusBar.tsx +2 -2
  482. package/app/components/SystemPulse.tsx +12 -6
  483. package/app/components/TableOfContents.tsx +86 -39
  484. package/app/components/TrashPageClient.tsx +1 -1
  485. package/app/components/UpdateOverlay.tsx +2 -2
  486. package/app/components/agents/AgentActivitySection.tsx +225 -0
  487. package/app/components/agents/AgentDetailContent.tsx +234 -3
  488. package/app/components/agents/AgentsContentPage.tsx +13 -2
  489. package/app/components/agents/AgentsMcpSection.tsx +7 -16
  490. package/app/components/agents/AgentsOverviewSection.tsx +28 -27
  491. package/app/components/agents/AgentsPanelA2aTab.tsx +1 -1
  492. package/app/components/agents/AgentsPanelSessionsTab.tsx +6 -1
  493. package/app/components/agents/AgentsSkillsSection.tsx +1 -1
  494. package/app/components/agents/DiscoverAgentModal.tsx +1 -1
  495. package/app/components/agents/RecentActivityFeed.tsx +49 -88
  496. package/app/components/agents/agent-activity-shared.tsx +110 -0
  497. package/app/components/agents/agents-content-model.ts +2 -2
  498. package/app/components/ask/AgentSelectorCapsule.tsx +1 -1
  499. package/app/components/ask/AskContent.tsx +332 -486
  500. package/app/components/ask/AskHeader.tsx +61 -0
  501. package/app/components/ask/FileChip.tsx +9 -5
  502. package/app/components/ask/MessageList.tsx +88 -21
  503. package/app/components/ask/ModeCapsule.tsx +180 -0
  504. package/app/components/ask/ProviderModelCapsule.tsx +284 -0
  505. package/app/components/ask/SessionHistory.tsx +63 -10
  506. package/app/components/ask/SessionTabBar.tsx +1 -1
  507. package/app/components/ask/ThinkingBlock.tsx +1 -1
  508. package/app/components/ask/ToolCallBlock.tsx +28 -24
  509. package/app/components/changes/ChangesBanner.tsx +1 -1
  510. package/app/components/changes/ChangesContentPage.tsx +1 -1
  511. package/app/components/echo/EchoInsightCollapsible.tsx +1 -1
  512. package/app/components/echo/EchoSegmentNav.tsx +1 -1
  513. package/app/components/echo/EchoSegmentPageClient.tsx +1 -1
  514. package/app/components/explore/ExploreContent.tsx +1 -1
  515. package/app/components/help/HelpContent.tsx +1 -1
  516. package/app/components/home/InboxSection.tsx +268 -0
  517. package/app/components/panels/AgentsPanel.tsx +3 -2
  518. package/app/components/panels/AgentsPanelHubNav.tsx +2 -6
  519. package/app/components/panels/DiscoverPanel.tsx +1 -1
  520. package/app/components/panels/EchoPanel.tsx +1 -1
  521. package/app/components/panels/EchoSidebarStats.tsx +1 -1
  522. package/app/components/panels/ImportHistoryPanel.tsx +1 -1
  523. package/app/components/panels/PanelHeader.tsx +1 -1
  524. package/app/components/panels/PluginsPanel.tsx +1 -1
  525. package/app/components/panels/SearchPanel.tsx +5 -2
  526. package/app/components/panels/SyncPopover.tsx +1 -1
  527. package/app/components/panels/WorkflowsPanel.tsx +1 -1
  528. package/app/components/renderers/agent-inspector/AgentInspectorRenderer.tsx +18 -0
  529. package/app/components/renderers/todo/TodoRenderer.tsx +489 -75
  530. package/app/components/settings/AiTab.tsx +198 -127
  531. package/app/components/settings/AppearanceTab.tsx +48 -50
  532. package/app/components/settings/KnowledgeTab.tsx +92 -27
  533. package/app/components/settings/McpAgentInstall.tsx +1 -1
  534. package/app/components/settings/McpSkillsSection.tsx +1 -1
  535. package/app/components/settings/McpTab.tsx +145 -7
  536. package/app/components/settings/PluginsTab.tsx +1 -1
  537. package/app/components/settings/SettingsContent.tsx +5 -2
  538. package/app/components/settings/SyncTab.tsx +615 -230
  539. package/app/components/settings/UninstallTab.tsx +1 -1
  540. package/app/components/settings/UpdateTab.tsx +2 -2
  541. package/app/components/settings/types.ts +4 -5
  542. package/app/components/setup/StepAI.tsx +70 -49
  543. package/app/components/setup/StepDots.tsx +1 -1
  544. package/app/components/setup/StepReview.tsx +176 -8
  545. package/app/components/setup/index.tsx +73 -39
  546. package/app/components/setup/types.ts +11 -8
  547. package/app/components/shared/ProviderSelect.tsx +134 -0
  548. package/app/components/walkthrough/WalkthroughOverlay.tsx +2 -2
  549. package/app/components/walkthrough/WalkthroughTooltip.tsx +2 -2
  550. package/app/components/walkthrough/index.ts +1 -1
  551. package/app/data/skills/mindos/SKILL.md +3 -3
  552. package/app/data/skills/mindos-zh/SKILL.md +3 -3
  553. package/app/hooks/useAcpDetection.ts +1 -1
  554. package/app/hooks/useAskChat.ts +248 -0
  555. package/app/hooks/useAskPanel.ts +24 -4
  556. package/app/hooks/useAskSession.ts +15 -0
  557. package/app/lib/acp/types.ts +1 -1
  558. package/app/lib/actions.ts +13 -0
  559. package/app/lib/agent/log.ts +2 -0
  560. package/app/lib/agent/model.ts +69 -81
  561. package/app/lib/agent/prompt.ts +27 -0
  562. package/app/lib/agent/providers.ts +299 -0
  563. package/app/lib/agent/tools.ts +26 -4
  564. package/app/lib/api.ts +3 -1
  565. package/app/lib/core/agent-audit-log.ts +7 -0
  566. package/app/lib/core/fs-ops.ts +9 -4
  567. package/app/lib/core/inbox.ts +181 -0
  568. package/app/lib/core/index.ts +4 -0
  569. package/app/lib/core/tree.ts +3 -0
  570. package/app/lib/core/types.ts +2 -0
  571. package/app/lib/fs.ts +26 -2
  572. package/app/lib/i18n/modules/ai-chat.ts +35 -13
  573. package/app/lib/i18n/modules/features.ts +2 -2
  574. package/app/lib/i18n/modules/knowledge.ts +82 -2
  575. package/app/lib/i18n/modules/navigation.ts +6 -2
  576. package/app/lib/i18n/modules/onboarding.ts +39 -9
  577. package/app/lib/i18n/modules/panels.ts +78 -29
  578. package/app/lib/i18n/modules/settings.ts +207 -23
  579. package/app/lib/inbox-upload.ts +93 -0
  580. package/app/lib/mcp-agents.ts +6 -7
  581. package/app/lib/renderers/index.ts +1 -2
  582. package/app/lib/settings-ai-client.ts +13 -12
  583. package/app/lib/settings.ts +48 -33
  584. package/app/lib/space-ai-init.ts +66 -0
  585. package/app/lib/stores/LocaleStoreInit.tsx +18 -0
  586. package/app/lib/stores/McpStoreInit.tsx +18 -0
  587. package/app/lib/stores/WalkthroughInit.tsx +20 -0
  588. package/app/lib/stores/locale-store.ts +55 -0
  589. package/app/lib/stores/mcp-store.ts +156 -0
  590. package/app/lib/stores/walkthrough-store.ts +118 -0
  591. package/app/lib/types.ts +20 -0
  592. package/app/package.json +3 -1
  593. package/app/tsconfig.json +1 -1
  594. package/bin/cli.js +46 -27
  595. package/bin/commands/file.js +7 -4
  596. package/bin/commands/space.js +4 -0
  597. package/bin/lib/mcp-agents.js +26 -2
  598. package/bin/lib/mcp-install.js +11 -3
  599. package/bin/lib/sync.js +140 -34
  600. package/mcp/README.md +2 -2
  601. package/mcp/dist/index.cjs +43 -43
  602. package/mcp/package.json +1 -1
  603. package/mcp/src/index.ts +77 -61
  604. package/package.json +1 -1
  605. package/scripts/setup.js +1 -1
  606. package/skills/mindos/SKILL.md +3 -3
  607. package/skills/mindos/references/preference-capture.md +4 -4
  608. package/skills/mindos/references/write-supplement.md +2 -2
  609. package/skills/mindos-zh/SKILL.md +3 -3
  610. package/skills/mindos-zh/references/preference-capture.md +4 -4
  611. package/skills/mindos-zh/references/write-supplement.md +2 -2
  612. package/templates/empty/INSTRUCTION.md +0 -1
  613. package/templates/en/INSTRUCTION.md +0 -1
  614. package/templates/template-generation-skill.md +0 -1
  615. package/templates/zh/INSTRUCTION.md +0 -1
  616. package/_standalone/.next/server/chunks/1473.js +0 -52
  617. package/_standalone/.next/server/chunks/248.js +0 -15
  618. package/_standalone/.next/server/chunks/359.js +0 -2
  619. package/_standalone/.next/server/chunks/4931.js +0 -202
  620. package/_standalone/.next/server/chunks/7670.js +0 -1
  621. package/_standalone/.next/server/chunks/9414.js +0 -11
  622. package/_standalone/.next/static/chunks/1038-ed04d6651ec92312.js +0 -1
  623. package/_standalone/.next/static/chunks/1263-6df1734e4273adb1.js +0 -25
  624. package/_standalone/.next/static/chunks/275-ebcaaedabe706903.js +0 -1
  625. package/_standalone/.next/static/chunks/5637-b97c869adf70c82e.js +0 -1
  626. package/_standalone/.next/static/chunks/5681-a53362a1cd629dc6.js +0 -1
  627. package/_standalone/.next/static/chunks/9602-35ca17b688f1a4fe.js +0 -1
  628. package/_standalone/.next/static/chunks/9670-d59e4d45ed705f58.js +0 -6
  629. package/_standalone/.next/static/chunks/app/.well-known/agent-card.json/route-d4762cc48529e566.js +0 -1
  630. package/_standalone/.next/static/chunks/app/_global-error/page-d4762cc48529e566.js +0 -1
  631. package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-519d4da1142db5ef.js +0 -1
  632. package/_standalone/.next/static/chunks/app/agents/page-b709cf3103321609.js +0 -5
  633. package/_standalone/.next/static/chunks/app/api/a2a/agents/route-d4762cc48529e566.js +0 -1
  634. package/_standalone/.next/static/chunks/app/api/a2a/delegations/route-d4762cc48529e566.js +0 -1
  635. package/_standalone/.next/static/chunks/app/api/a2a/discover/route-d4762cc48529e566.js +0 -1
  636. package/_standalone/.next/static/chunks/app/api/a2a/route-d4762cc48529e566.js +0 -1
  637. package/_standalone/.next/static/chunks/app/api/acp/config/route-d4762cc48529e566.js +0 -1
  638. package/_standalone/.next/static/chunks/app/api/acp/detect/route-d4762cc48529e566.js +0 -1
  639. package/_standalone/.next/static/chunks/app/api/acp/install/route-d4762cc48529e566.js +0 -1
  640. package/_standalone/.next/static/chunks/app/api/acp/registry/route-d4762cc48529e566.js +0 -1
  641. package/_standalone/.next/static/chunks/app/api/acp/session/route-d4762cc48529e566.js +0 -1
  642. package/_standalone/.next/static/chunks/app/api/agent-activity/route-d4762cc48529e566.js +0 -1
  643. package/_standalone/.next/static/chunks/app/api/ask/route-d4762cc48529e566.js +0 -1
  644. package/_standalone/.next/static/chunks/app/api/ask-sessions/route-d4762cc48529e566.js +0 -1
  645. package/_standalone/.next/static/chunks/app/api/auth/route-d4762cc48529e566.js +0 -1
  646. package/_standalone/.next/static/chunks/app/api/backlinks/route-d4762cc48529e566.js +0 -1
  647. package/_standalone/.next/static/chunks/app/api/bootstrap/route-d4762cc48529e566.js +0 -1
  648. package/_standalone/.next/static/chunks/app/api/changes/route-d4762cc48529e566.js +0 -1
  649. package/_standalone/.next/static/chunks/app/api/export/route-d4762cc48529e566.js +0 -1
  650. package/_standalone/.next/static/chunks/app/api/extract-pdf/route-d4762cc48529e566.js +0 -1
  651. package/_standalone/.next/static/chunks/app/api/file/import/route-d4762cc48529e566.js +0 -1
  652. package/_standalone/.next/static/chunks/app/api/file/route-d4762cc48529e566.js +0 -1
  653. package/_standalone/.next/static/chunks/app/api/files/route-d4762cc48529e566.js +0 -1
  654. package/_standalone/.next/static/chunks/app/api/git/route-d4762cc48529e566.js +0 -1
  655. package/_standalone/.next/static/chunks/app/api/graph/route-d4762cc48529e566.js +0 -1
  656. package/_standalone/.next/static/chunks/app/api/health/route-d4762cc48529e566.js +0 -1
  657. package/_standalone/.next/static/chunks/app/api/init/route-d4762cc48529e566.js +0 -1
  658. package/_standalone/.next/static/chunks/app/api/mcp/agents/route-d4762cc48529e566.js +0 -1
  659. package/_standalone/.next/static/chunks/app/api/mcp/install/route-d4762cc48529e566.js +0 -1
  660. package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-d4762cc48529e566.js +0 -1
  661. package/_standalone/.next/static/chunks/app/api/mcp/restart/route-d4762cc48529e566.js +0 -1
  662. package/_standalone/.next/static/chunks/app/api/mcp/status/route-d4762cc48529e566.js +0 -1
  663. package/_standalone/.next/static/chunks/app/api/monitoring/route-d4762cc48529e566.js +0 -1
  664. package/_standalone/.next/static/chunks/app/api/recent-files/route-d4762cc48529e566.js +0 -1
  665. package/_standalone/.next/static/chunks/app/api/restart/route-d4762cc48529e566.js +0 -1
  666. package/_standalone/.next/static/chunks/app/api/search/route-d4762cc48529e566.js +0 -1
  667. package/_standalone/.next/static/chunks/app/api/settings/list-models/route-d4762cc48529e566.js +0 -1
  668. package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-d4762cc48529e566.js +0 -1
  669. package/_standalone/.next/static/chunks/app/api/settings/route-d4762cc48529e566.js +0 -1
  670. package/_standalone/.next/static/chunks/app/api/settings/test-key/route-d4762cc48529e566.js +0 -1
  671. package/_standalone/.next/static/chunks/app/api/setup/check-path/route-d4762cc48529e566.js +0 -1
  672. package/_standalone/.next/static/chunks/app/api/setup/check-port/route-d4762cc48529e566.js +0 -1
  673. package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-d4762cc48529e566.js +0 -1
  674. package/_standalone/.next/static/chunks/app/api/setup/ls/route-d4762cc48529e566.js +0 -1
  675. package/_standalone/.next/static/chunks/app/api/setup/route-d4762cc48529e566.js +0 -1
  676. package/_standalone/.next/static/chunks/app/api/skills/route-d4762cc48529e566.js +0 -1
  677. package/_standalone/.next/static/chunks/app/api/sync/route-d4762cc48529e566.js +0 -1
  678. package/_standalone/.next/static/chunks/app/api/tree-version/route-d4762cc48529e566.js +0 -1
  679. package/_standalone/.next/static/chunks/app/api/uninstall/route-d4762cc48529e566.js +0 -1
  680. package/_standalone/.next/static/chunks/app/api/update/route-d4762cc48529e566.js +0 -1
  681. package/_standalone/.next/static/chunks/app/api/update-check/route-d4762cc48529e566.js +0 -1
  682. package/_standalone/.next/static/chunks/app/api/update-status/route-d4762cc48529e566.js +0 -1
  683. package/_standalone/.next/static/chunks/app/api/workflows/route-d4762cc48529e566.js +0 -1
  684. package/_standalone/.next/static/chunks/app/changes/page-def5210095f8698d.js +0 -1
  685. package/_standalone/.next/static/chunks/app/echo/[segment]/page-be28eff31b1a186e.js +0 -11
  686. package/_standalone/.next/static/chunks/app/echo/page-d4762cc48529e566.js +0 -1
  687. package/_standalone/.next/static/chunks/app/explore/page-e4b8098dca200389.js +0 -4
  688. package/_standalone/.next/static/chunks/app/help/page-d5e57d73d94bad19.js +0 -1
  689. package/_standalone/.next/static/chunks/app/layout-d91cdbe2ecf135e1.js +0 -173
  690. package/_standalone/.next/static/chunks/app/login/page-321875768b70938a.js +0 -1
  691. package/_standalone/.next/static/chunks/app/page-718fdf170428b43c.js +0 -7
  692. package/_standalone/.next/static/chunks/app/setup/page-01ab1f549d636057.js +0 -1
  693. package/_standalone/.next/static/chunks/app/trash/page-89b1430cc8a16f18.js +0 -1
  694. package/_standalone/.next/static/chunks/app/view/[...path]/loading-d4762cc48529e566.js +0 -1
  695. package/_standalone/.next/static/chunks/app/view/[...path]/not-found-f22c513bbc348cc8.js +0 -1
  696. package/_standalone/.next/static/chunks/app/view/[...path]/page-6e3dc47699a01de1.js +0 -12
  697. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-d4762cc48529e566.js +0 -1
  698. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-d4762cc48529e566.js +0 -1
  699. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-d4762cc48529e566.js +0 -1
  700. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-d4762cc48529e566.js +0 -1
  701. package/_standalone/.next/static/chunks/webpack-3489a2b6c2882b0c.js +0 -1
  702. package/_standalone/.next/static/css/f16595bc58a16d5d.css +0 -1
  703. package/_standalone/.next/static/ushZ_NJ8rE3rG5hZfaYOX/_buildManifest.js +0 -1
  704. package/_standalone/components/walkthrough/WalkthroughProvider.tsx +0 -133
  705. package/_standalone/hooks/useMcpData.tsx +0 -169
  706. package/_standalone/lib/i18n-en.ts +0 -2
  707. package/_standalone/lib/i18n-zh.ts +0 -2
  708. package/_standalone/lib/types.ts +0 -70
  709. package/app/components/walkthrough/WalkthroughProvider.tsx +0 -133
  710. package/app/hooks/useMcpData.tsx +0 -169
  711. package/app/lib/LocaleContext.tsx +0 -60
  712. package/app/lib/i18n-en.ts +0 -2
  713. package/app/lib/i18n-zh.ts +0 -2
  714. /package/_standalone/.next/static/{ushZ_NJ8rE3rG5hZfaYOX → rZLs1krFuduixvcVNe6q3}/_ssgManifest.js +0 -0
@@ -1,123 +1,111 @@
1
1
  import { getModel as piGetModel, type Model } from '@mariozechner/pi-ai';
2
2
  import { effectiveAiConfig } from '@/lib/settings';
3
+ import { type ProviderId, getPreset, toPiProvider, getDefaultApi, getDefaultBaseUrl } from './providers';
3
4
 
4
5
  /** Check if any message in the conversation contains images */
5
6
  export function hasImages(messages: Array<{ images?: unknown[] }>): boolean {
6
7
  return messages.some(m => m.images && m.images.length > 0);
7
8
  }
8
9
 
9
- /** Ensure model input includes 'image' when images are present */
10
10
  function ensureVisionCapable(model: Model<any>): Model<any> {
11
11
  const inputs = model.input as readonly string[];
12
12
  if (inputs.includes('image')) return model;
13
- // Upgrade input to include image — most modern models support it
14
13
  return { ...model, input: [...inputs, 'image'] as any };
15
14
  }
16
15
 
16
+ export interface ModelConfigOverrides {
17
+ provider?: ProviderId;
18
+ apiKey?: string;
19
+ model?: string;
20
+ baseUrl?: string;
21
+ hasImages?: boolean;
22
+ }
23
+
17
24
  /**
18
- * Build a pi-ai Model for the configured provider.
19
- *
20
- * - Anthropic: uses getModel() from pi-ai registry directly.
21
- * - OpenAI: uses getModel() then overrides baseUrl if custom endpoint is configured.
22
- * Falls back to constructing a Model literal for unknown model IDs.
23
- * Custom API variant can be specified for non-standard endpoints.
25
+ * Build a pi-ai Model for any configured provider.
24
26
  *
25
- * Returns { model, modelName, apiKey } Agent needs model + apiKey via getApiKey hook.
27
+ * Accepts optional overridesused by test-key and list-models
28
+ * to construct models from unsaved UI values.
26
29
  */
27
- export function getModelConfig(options?: { hasImages?: boolean }): {
30
+ export function getModelConfig(options?: ModelConfigOverrides): {
28
31
  model: Model<any>;
29
32
  modelName: string;
30
33
  apiKey: string;
31
- provider: 'anthropic' | 'openai';
34
+ provider: ProviderId;
32
35
  } {
33
- const cfg = effectiveAiConfig();
34
-
35
- if (cfg.provider === 'openai') {
36
- const modelName = cfg.openaiModel;
37
- let model: Model<any>;
38
-
39
- // API variant: 'openai-completions' = /chat/completions (widest compatibility),
40
- // 'openai-responses' = /responses (OpenAI native). Custom proxies (baseUrl set)
41
- // almost always only support chat completions, so default to that when baseUrl is set.
42
- const hasCustomBase = !!cfg.openaiBaseUrl;
43
- const defaultApi = hasCustomBase ? 'openai-completions' : 'openai-responses';
44
- const customApiVariant = (cfg as any).openaiApiVariant; // May exist in extended config
36
+ const saved = effectiveAiConfig(options?.provider);
45
37
 
46
- try {
47
- const resolved = piGetModel('openai', modelName as any);
48
- if (!resolved) throw new Error('Model not in registry');
49
- model = resolved;
50
- // If user has a custom baseUrl, override API to completions for compatibility
51
- if (hasCustomBase && !customApiVariant) {
52
- model = { ...model, api: defaultApi };
53
- }
54
- } catch {
55
- // Model not in pi-ai registry — construct manually for custom/proxy endpoints
56
- model = {
57
- id: modelName,
58
- name: modelName,
59
- api: (customApiVariant ?? defaultApi) as any,
60
- provider: 'openai',
61
- baseUrl: 'https://api.openai.com/v1',
62
- reasoning: false,
63
- input: ['text'] as const,
64
- cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
65
- contextWindow: 128_000,
66
- maxTokens: 16_384,
67
- };
68
- }
38
+ const cfg = {
39
+ provider: saved.provider,
40
+ apiKey: options?.apiKey ?? saved.apiKey,
41
+ model: options?.model ?? saved.model,
42
+ baseUrl: options?.baseUrl ?? saved.baseUrl,
43
+ };
69
44
 
70
- // For custom proxy endpoints, set conservative compat flags.
71
- // Most proxies (Azure, Bedrock relays, corporate gateways) only support
72
- // a subset of OpenAI's features. These defaults prevent silent failures.
73
- // NOTE: maxTokensField is NOT overridden — pi-ai auto-detects the correct
74
- // field based on URL (defaults to max_completion_tokens for modern APIs).
75
- if (hasCustomBase) {
76
- model = {
77
- ...model,
78
- baseUrl: cfg.openaiBaseUrl,
79
- compat: {
80
- ...(model as any).compat,
81
- supportsStore: false,
82
- supportsDeveloperRole: false,
83
- supportsReasoningEffort: false,
84
- supportsUsageInStreaming: false,
85
- supportsStrictMode: false,
86
- },
87
- };
88
- if (customApiVariant) {
89
- model = { ...model, api: customApiVariant };
90
- }
91
- }
45
+ const modelName = cfg.model;
46
+ let model = resolveModel(cfg.provider, modelName, cfg.baseUrl);
92
47
 
93
- const finalModel = options?.hasImages ? ensureVisionCapable(model) : model;
94
- return { model: finalModel, modelName, apiKey: cfg.openaiApiKey, provider: 'openai' };
48
+ if (options?.hasImages) {
49
+ model = ensureVisionCapable(model);
95
50
  }
96
51
 
97
- // Anthropic
98
- const modelName = cfg.anthropicModel;
52
+ return { model, modelName, apiKey: cfg.apiKey, provider: cfg.provider };
53
+ }
54
+
55
+ /**
56
+ * Try pi-ai registry first, then fall back to a manually constructed Model.
57
+ * Applies baseUrl overrides and compat flags for custom endpoints.
58
+ */
59
+ function resolveModel(providerId: ProviderId, modelName: string, baseUrl: string): Model<any> {
60
+ const piProvider = toPiProvider(providerId);
61
+ const preset = getPreset(providerId);
99
62
  let model: Model<any>;
63
+ const hasCustomBase = !!baseUrl;
100
64
 
65
+ // 1. Try pi-ai registry lookup
101
66
  try {
102
- const resolved = piGetModel('anthropic', modelName as any);
67
+ const resolved = piGetModel(piProvider as any, modelName as any);
103
68
  if (!resolved) throw new Error('Model not in registry');
104
69
  model = resolved;
105
70
  } catch {
106
- // Unknown Anthropic model construct manually
71
+ // 2. Fallback: construct minimal Model using pi-ai derived defaults
107
72
  model = {
108
73
  id: modelName,
109
74
  name: modelName,
110
- api: 'anthropic-messages' as const,
111
- provider: 'anthropic',
112
- baseUrl: 'https://api.anthropic.com',
75
+ api: getDefaultApi(providerId) as any,
76
+ provider: piProvider,
77
+ baseUrl: preset.fixedBaseUrl || getDefaultBaseUrl(providerId),
113
78
  reasoning: false,
114
79
  input: ['text'] as const,
115
80
  cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
116
- contextWindow: 200_000,
117
- maxTokens: 8_192,
81
+ contextWindow: 128_000,
82
+ maxTokens: 16_384,
83
+ };
84
+ }
85
+
86
+ // 3. Apply user's custom baseUrl
87
+ if (hasCustomBase) {
88
+ model = { ...model, baseUrl };
89
+
90
+ if (model.api === 'openai-responses') {
91
+ model = { ...model, api: 'openai-completions' as any };
92
+ }
93
+ }
94
+
95
+ // 4. For deepseek or any custom endpoint, apply conservative compat
96
+ if (hasCustomBase || preset.fixedBaseUrl) {
97
+ model = {
98
+ ...model,
99
+ compat: {
100
+ ...(model as any).compat,
101
+ supportsStore: false,
102
+ supportsDeveloperRole: false,
103
+ supportsReasoningEffort: false,
104
+ supportsUsageInStreaming: false,
105
+ supportsStrictMode: false,
106
+ },
118
107
  };
119
108
  }
120
109
 
121
- const finalModel = options?.hasImages ? ensureVisionCapable(model) : model;
122
- return { model: finalModel, modelName, apiKey: cfg.anthropicApiKey, provider: 'anthropic' };
110
+ return model;
123
111
  }
@@ -36,6 +36,33 @@ Persona: Methodical, strictly objective, execution-oriented. Zero fluff. Never u
36
36
  - Use clean Markdown (tables, lists, bold).
37
37
  - End with concrete next actions if the task is incomplete.`;
38
38
 
39
+ /**
40
+ * Chat mode system prompt — read-only tools, no write operations.
41
+ *
42
+ * Design goal: ~250 tokens. Includes anti-hallucination and cite-sources
43
+ * because chat mode has read-only KB tools. Strips: write tool directives,
44
+ * skills/MCP discovery, read-before-write, smart recovery, token batching.
45
+ */
46
+ export const CHAT_SYSTEM_PROMPT = `You are MindOS Agent — the operator of the user's second brain.
47
+
48
+ Persona: Methodical, strictly objective, execution-oriented. Zero fluff. Never use preambles like "Here is the result" or "I found...".
49
+
50
+ ## Mode: Chat (Read-Only)
51
+
52
+ You can **search and read** the user's knowledge base, but you **cannot create, edit, or delete** any files. If the user asks you to modify files, suggest switching to Agent mode.
53
+
54
+ ## Core Directives
55
+
56
+ 1. **Anti-Hallucination**: Strictly separate your training data from the user's local knowledge. If asked about the user's notes/life/projects, rely EXCLUSIVELY on tool outputs. If a search yields nothing, state "Not found in knowledge base." NEVER fabricate or infer missing data.
57
+ 2. **Cite Sources**: Always include the exact file path when answering from local knowledge so the user can verify.
58
+ 3. **Language Alignment**: Match the user's language when replying.
59
+
60
+ ## Output
61
+
62
+ - Reply in the user's language.
63
+ - Use clean Markdown (tables, lists, bold).
64
+ - End with concrete next actions if the task is incomplete.`;
65
+
39
66
  /**
40
67
  * Lean system prompt for "organize uploaded files" mode.
41
68
  *
@@ -0,0 +1,299 @@
1
+ import {
2
+ getModel as piGetModel,
3
+ getModels as piGetModels,
4
+ getEnvApiKey as piGetEnvApiKey,
5
+ type Model,
6
+ type KnownProvider,
7
+ } from '@mariozechner/pi-ai';
8
+
9
+ /**
10
+ * MindOS-supported provider IDs.
11
+ *
12
+ * Most map 1:1 to pi-ai KnownProvider. The exception is `deepseek`,
13
+ * which pi-ai doesn't have — we treat it as OpenAI-compatible with
14
+ * a custom baseUrl.
15
+ */
16
+ export type ProviderId =
17
+ | 'anthropic' | 'openai' | 'google' | 'groq'
18
+ | 'xai' | 'openrouter' | 'mistral' | 'deepseek'
19
+ | 'zai' | 'kimi-coding'
20
+ | 'cerebras' | 'minimax' | 'huggingface'
21
+ | 'ollama';
22
+
23
+ /**
24
+ * UI/UX metadata for each provider.
25
+ * Technical details (baseUrl, api protocol, auth, compat) are
26
+ * delegated to pi-ai's model registry — we only store what pi-ai
27
+ * doesn't provide.
28
+ */
29
+ export interface ProviderPreset {
30
+ id: ProviderId;
31
+ name: string;
32
+ nameZh: string;
33
+ defaultModel: string;
34
+ /** If ProviderId differs from pi-ai's KnownProvider (e.g. deepseek → openai) */
35
+ piProviderOverride?: KnownProvider;
36
+ /** DeepSeek/Ollama need a fixed baseUrl since they're not native pi-ai providers */
37
+ fixedBaseUrl?: string;
38
+ /** Dummy API key for providers that don't require auth (e.g. local Ollama) */
39
+ apiKeyFallback?: string;
40
+ supportsBaseUrl: boolean;
41
+ supportsThinking: boolean;
42
+ supportsListModels: boolean;
43
+ signupUrl?: string;
44
+ category: 'primary' | 'more';
45
+ }
46
+
47
+ export const PROVIDER_PRESETS: Record<ProviderId, ProviderPreset> = {
48
+ anthropic: {
49
+ id: 'anthropic',
50
+ name: 'Anthropic',
51
+ nameZh: 'Anthropic',
52
+ defaultModel: 'claude-sonnet-4-6',
53
+ supportsBaseUrl: true,
54
+ supportsThinking: true,
55
+ supportsListModels: true,
56
+ signupUrl: 'https://console.anthropic.com/settings/keys',
57
+ category: 'primary',
58
+ },
59
+ openai: {
60
+ id: 'openai',
61
+ name: 'OpenAI',
62
+ nameZh: 'OpenAI',
63
+ defaultModel: 'gpt-5.4',
64
+ supportsBaseUrl: true,
65
+ supportsThinking: true,
66
+ supportsListModels: true,
67
+ signupUrl: 'https://platform.openai.com/api-keys',
68
+ category: 'primary',
69
+ },
70
+ google: {
71
+ id: 'google',
72
+ name: 'Google Gemini',
73
+ nameZh: 'Google Gemini',
74
+ defaultModel: 'gemini-2.5-flash',
75
+ supportsBaseUrl: false,
76
+ supportsThinking: true,
77
+ supportsListModels: false,
78
+ signupUrl: 'https://aistudio.google.com/apikey',
79
+ category: 'primary',
80
+ },
81
+ groq: {
82
+ id: 'groq',
83
+ name: 'Groq',
84
+ nameZh: 'Groq',
85
+ defaultModel: 'llama-3.3-70b-versatile',
86
+ supportsBaseUrl: false,
87
+ supportsThinking: false,
88
+ supportsListModels: true,
89
+ signupUrl: 'https://console.groq.com/keys',
90
+ category: 'more',
91
+ },
92
+ xai: {
93
+ id: 'xai',
94
+ name: 'xAI (Grok)',
95
+ nameZh: 'xAI (Grok)',
96
+ defaultModel: 'grok-3',
97
+ supportsBaseUrl: false,
98
+ supportsThinking: false,
99
+ supportsListModels: true,
100
+ category: 'more',
101
+ },
102
+ openrouter: {
103
+ id: 'openrouter',
104
+ name: 'OpenRouter',
105
+ nameZh: 'OpenRouter',
106
+ defaultModel: 'anthropic/claude-sonnet-4',
107
+ supportsBaseUrl: false,
108
+ supportsThinking: false,
109
+ supportsListModels: true,
110
+ category: 'more',
111
+ },
112
+ mistral: {
113
+ id: 'mistral',
114
+ name: 'Mistral',
115
+ nameZh: 'Mistral',
116
+ defaultModel: 'mistral-large-latest',
117
+ supportsBaseUrl: false,
118
+ supportsThinking: false,
119
+ supportsListModels: true,
120
+ category: 'more',
121
+ },
122
+ deepseek: {
123
+ id: 'deepseek',
124
+ name: 'DeepSeek',
125
+ nameZh: 'DeepSeek',
126
+ defaultModel: 'deepseek-chat',
127
+ piProviderOverride: 'openai' as KnownProvider,
128
+ fixedBaseUrl: 'https://api.deepseek.com/v1',
129
+ supportsBaseUrl: true,
130
+ supportsThinking: true,
131
+ supportsListModels: true,
132
+ signupUrl: 'https://platform.deepseek.com/api_keys',
133
+ category: 'more',
134
+ },
135
+ zai: {
136
+ id: 'zai',
137
+ name: 'ZhipuAI (GLM)',
138
+ nameZh: '智谱 AI (GLM)',
139
+ defaultModel: 'glm-4-plus',
140
+ supportsBaseUrl: false,
141
+ supportsThinking: true,
142
+ supportsListModels: false,
143
+ category: 'more',
144
+ },
145
+ 'kimi-coding': {
146
+ id: 'kimi-coding',
147
+ name: 'Kimi Coding',
148
+ nameZh: 'Kimi Coding (月之暗面)',
149
+ defaultModel: 'kimi-k2-thinking',
150
+ supportsBaseUrl: false,
151
+ supportsThinking: true,
152
+ supportsListModels: false,
153
+ category: 'more',
154
+ },
155
+ cerebras: {
156
+ id: 'cerebras',
157
+ name: 'Cerebras',
158
+ nameZh: 'Cerebras',
159
+ defaultModel: 'llama-4-scout-17b-16e',
160
+ supportsBaseUrl: false,
161
+ supportsThinking: false,
162
+ supportsListModels: true,
163
+ category: 'more',
164
+ },
165
+ minimax: {
166
+ id: 'minimax',
167
+ name: 'MiniMax',
168
+ nameZh: 'MiniMax',
169
+ defaultModel: 'MiniMax-M1',
170
+ supportsBaseUrl: false,
171
+ supportsThinking: false,
172
+ supportsListModels: false,
173
+ category: 'more',
174
+ },
175
+ huggingface: {
176
+ id: 'huggingface',
177
+ name: 'Hugging Face',
178
+ nameZh: 'Hugging Face',
179
+ defaultModel: 'Qwen/Qwen3-235B-A22B-Thinking-2507',
180
+ supportsBaseUrl: false,
181
+ supportsThinking: true,
182
+ supportsListModels: false,
183
+ category: 'more',
184
+ },
185
+ ollama: {
186
+ id: 'ollama',
187
+ name: 'Ollama',
188
+ nameZh: 'Ollama (本地)',
189
+ defaultModel: 'llama3.2',
190
+ piProviderOverride: 'openai' as KnownProvider,
191
+ fixedBaseUrl: 'http://localhost:11434/v1',
192
+ apiKeyFallback: 'ollama',
193
+ supportsBaseUrl: true,
194
+ supportsThinking: false,
195
+ supportsListModels: true,
196
+ signupUrl: 'https://ollama.com/download',
197
+ category: 'more',
198
+ },
199
+ };
200
+
201
+ export const ALL_PROVIDER_IDS = Object.keys(PROVIDER_PRESETS) as ProviderId[];
202
+
203
+ export function isProviderId(s: string): s is ProviderId {
204
+ return s in PROVIDER_PRESETS;
205
+ }
206
+
207
+ export function getPreset(id: ProviderId): ProviderPreset {
208
+ return PROVIDER_PRESETS[id] ?? PROVIDER_PRESETS.anthropic;
209
+ }
210
+
211
+ export function groupedProviders(): { primary: ProviderId[]; more: ProviderId[] } {
212
+ const primary: ProviderId[] = [];
213
+ const more: ProviderId[] = [];
214
+ for (const id of ALL_PROVIDER_IDS) {
215
+ if (PROVIDER_PRESETS[id].category === 'primary') primary.push(id);
216
+ else more.push(id);
217
+ }
218
+ more.sort((a, b) => PROVIDER_PRESETS[a].name.localeCompare(PROVIDER_PRESETS[b].name));
219
+ return { primary, more };
220
+ }
221
+
222
+ // ---------------------------------------------------------------------------
223
+ // Helpers that delegate to pi-ai — single source of truth for technical details
224
+ // ---------------------------------------------------------------------------
225
+
226
+ /** Map ProviderId to pi-ai's KnownProvider (handles deepseek → openai) */
227
+ export function toPiProvider(id: ProviderId): string {
228
+ return PROVIDER_PRESETS[id].piProviderOverride ?? id;
229
+ }
230
+
231
+ /**
232
+ * Get the env var name for a provider's API key, using pi-ai as source of truth.
233
+ * DeepSeek is not in pi-ai, so we hardcode its env var.
234
+ */
235
+ const EXTRA_ENV_KEYS: Partial<Record<ProviderId, string>> = {
236
+ deepseek: 'DEEPSEEK_API_KEY',
237
+ };
238
+
239
+ export function getApiKeyEnvVar(id: ProviderId): string | undefined {
240
+ if (EXTRA_ENV_KEYS[id]) return EXTRA_ENV_KEYS[id];
241
+ return piEnvVarName(toPiProvider(id));
242
+ }
243
+
244
+ /** Read the actual API key from env for a provider */
245
+ export function getApiKeyFromEnv(id: ProviderId): string | undefined {
246
+ if (id === 'deepseek') return process.env.DEEPSEEK_API_KEY;
247
+ return piGetEnvApiKey(toPiProvider(id) as KnownProvider);
248
+ }
249
+
250
+ /**
251
+ * Get the default baseUrl for a provider from pi-ai's model registry.
252
+ * For deepseek, returns its fixed baseUrl.
253
+ */
254
+ export function getDefaultBaseUrl(id: ProviderId): string {
255
+ const preset = PROVIDER_PRESETS[id];
256
+ if (preset.fixedBaseUrl) return preset.fixedBaseUrl;
257
+ try {
258
+ const models = piGetModels(toPiProvider(id) as any);
259
+ return models[0]?.baseUrl ?? '';
260
+ } catch {
261
+ return '';
262
+ }
263
+ }
264
+
265
+ /**
266
+ * Get the default API type for a provider from pi-ai's model registry.
267
+ * Used as fallback when constructing models not in the registry.
268
+ */
269
+ export function getDefaultApi(id: ProviderId): string {
270
+ try {
271
+ const models = piGetModels(toPiProvider(id) as any);
272
+ return models[0]?.api ?? 'openai-completions';
273
+ } catch {
274
+ return 'openai-completions';
275
+ }
276
+ }
277
+
278
+ // ---------------------------------------------------------------------------
279
+ // Internal: reverse-engineer pi-ai's env var name mapping (for UI display)
280
+ // ---------------------------------------------------------------------------
281
+ const PI_ENV_MAP: Record<string, string> = {
282
+ anthropic: 'ANTHROPIC_API_KEY',
283
+ openai: 'OPENAI_API_KEY',
284
+ 'azure-openai-responses': 'AZURE_OPENAI_API_KEY',
285
+ google: 'GEMINI_API_KEY',
286
+ groq: 'GROQ_API_KEY',
287
+ cerebras: 'CEREBRAS_API_KEY',
288
+ xai: 'XAI_API_KEY',
289
+ openrouter: 'OPENROUTER_API_KEY',
290
+ zai: 'ZAI_API_KEY',
291
+ mistral: 'MISTRAL_API_KEY',
292
+ minimax: 'MINIMAX_API_KEY',
293
+ huggingface: 'HF_TOKEN',
294
+ 'kimi-coding': 'KIMI_API_KEY',
295
+ };
296
+
297
+ function piEnvVarName(piProvider: string): string | undefined {
298
+ return PI_ENV_MAP[piProvider];
299
+ }
@@ -4,7 +4,7 @@ import type { AgentTool, AgentToolResult } from '@mariozechner/pi-agent-core';
4
4
  import {
5
5
  searchFiles, getFileContent, getFileTree, getRecentlyModified,
6
6
  saveFileContent, createFile, appendToFile, insertAfterHeading, updateSection,
7
- deleteFile, renameFile, moveFile, findBacklinks, gitLog, gitShowFile, appendCsvRow,
7
+ moveToTrashFile, renameFile, moveFile, findBacklinks, gitLog, gitShowFile, appendCsvRow,
8
8
  getMindRoot,
9
9
  } from '@/lib/fs';
10
10
  import { readSkillContentByName, scanSkillDirs } from '@/lib/pi-integration/skills';
@@ -239,6 +239,28 @@ export function getOrganizeTools(): AgentTool<any>[] {
239
239
  return knowledgeBaseTools.filter(t => ORGANIZE_TOOL_NAMES.has(t.name));
240
240
  }
241
241
 
242
+ /**
243
+ * Read-only tool set for Chat mode.
244
+ *
245
+ * Allows searching and reading the knowledge base + web access,
246
+ * but blocks all write operations. Extensible: add tool names here
247
+ * to grant more read-only capabilities to Chat mode.
248
+ */
249
+ const CHAT_TOOL_NAMES = new Set([
250
+ 'list_files',
251
+ 'read_file',
252
+ 'read_file_chunk',
253
+ 'search',
254
+ 'get_recent',
255
+ 'get_backlinks',
256
+ 'web_search',
257
+ 'web_fetch',
258
+ ]);
259
+
260
+ export function getChatTools(): AgentTool<any>[] {
261
+ return knowledgeBaseTools.filter(t => CHAT_TOOL_NAMES.has(t.name));
262
+ }
263
+
242
264
  export async function getRequestScopedTools(): Promise<AgentTool<any>[]> {
243
265
  const baseTools = [...knowledgeBaseTools, ...a2aTools, ...acpTools];
244
266
  try {
@@ -685,11 +707,11 @@ export const knowledgeBaseTools: AgentTool<any>[] = [
685
707
  {
686
708
  name: 'delete_file',
687
709
  label: 'Delete File',
688
- description: 'Permanently delete a file from the knowledge base. This is destructive and cannot be undone.',
710
+ description: 'Delete a file from the knowledge base. The file is moved to trash and can be recovered within 30 days.',
689
711
  parameters: PathParam,
690
712
  execute: safeExecute(async (_id, params: Static<typeof PathParam>) => {
691
- deleteFile(params.path);
692
- return textResult(`File deleted: ${params.path}`);
713
+ const meta = moveToTrashFile(params.path);
714
+ return textResult(`Moved to trash: ${params.path} (recoverable for 30 days, trashId: ${meta.id})`);
693
715
  }),
694
716
  },
695
717
 
package/app/lib/api.ts CHANGED
@@ -36,7 +36,9 @@ export async function apiFetch<T>(url: string, opts: ApiFetchOptions = {}): Prom
36
36
  }
37
37
 
38
38
  if (timeout > 0 && controller) {
39
- timeoutId = setTimeout(() => controller.abort(), timeout);
39
+ timeoutId = setTimeout(() => {
40
+ controller.abort(new Error(`Request timed out after ${Math.round(timeout / 1000)}s`));
41
+ }, timeout);
40
42
  }
41
43
 
42
44
  // Bridge caller-provided AbortSignal so both timeout and external cancel work.
@@ -9,6 +9,8 @@ export interface AgentAuditEvent {
9
9
  result: 'ok' | 'error';
10
10
  message?: string;
11
11
  durationMs?: number;
12
+ /** Name of the agent that performed this operation (e.g. "claude-code", "cursor"). */
13
+ agentName?: string;
12
14
  op?: 'append' | 'legacy_agent_audit_md_import' | 'legacy_agent_log_jsonl_import';
13
15
  }
14
16
 
@@ -19,6 +21,8 @@ export interface AgentAuditInput {
19
21
  result: 'ok' | 'error';
20
22
  message?: string;
21
23
  durationMs?: number;
24
+ /** Name of the agent that performed this operation. */
25
+ agentName?: string;
22
26
  }
23
27
 
24
28
  interface AgentAuditState {
@@ -111,6 +115,7 @@ interface LegacyAgentOp {
111
115
  result?: 'ok' | 'error';
112
116
  message?: string;
113
117
  durationMs?: number;
118
+ agentName?: string;
114
119
  }
115
120
 
116
121
  function parseLegacyMdBlocks(raw: string): LegacyAgentOp[] {
@@ -253,6 +258,7 @@ export function appendAgentAuditEvent(mindRoot: string, input: AgentAuditInput):
253
258
  result: input.result === 'error' ? 'error' : 'ok',
254
259
  message: normalizeMessage(input.message),
255
260
  durationMs: typeof input.durationMs === 'number' ? input.durationMs : undefined,
261
+ agentName: typeof input.agentName === 'string' && input.agentName.trim() ? input.agentName.trim() : undefined,
256
262
  op: 'append',
257
263
  };
258
264
  state.events.unshift(event);
@@ -275,6 +281,7 @@ export function parseAgentAuditJsonLines(raw: string): AgentAuditInput[] {
275
281
  result: entry.result === 'error' ? 'error' : 'ok',
276
282
  message: normalizeMessage(entry.message),
277
283
  durationMs: typeof entry.durationMs === 'number' ? entry.durationMs : undefined,
284
+ agentName: typeof entry.agentName === 'string' ? entry.agentName : undefined,
278
285
  }));
279
286
  }
280
287
 
@@ -38,11 +38,16 @@ export function writeFile(mindRoot: string, filePath: string, content: string):
38
38
  */
39
39
  export function createFile(mindRoot: string, filePath: string, initialContent = ''): void {
40
40
  const resolved = resolveSafe(mindRoot, filePath);
41
- if (fs.existsSync(resolved)) {
42
- throw new MindOSError(ErrorCodes.FILE_ALREADY_EXISTS, `File already exists: ${filePath}`, { filePath });
43
- }
44
41
  fs.mkdirSync(path.dirname(resolved), { recursive: true });
45
- fs.writeFileSync(resolved, initialContent, 'utf-8');
42
+ try {
43
+ // 'wx' flag: create exclusively — fails atomically if file already exists (no TOCTOU race)
44
+ fs.writeFileSync(resolved, initialContent, { encoding: 'utf-8', flag: 'wx' });
45
+ } catch (err: unknown) {
46
+ if (err instanceof Error && 'code' in err && (err as NodeJS.ErrnoException).code === 'EEXIST') {
47
+ throw new MindOSError(ErrorCodes.FILE_ALREADY_EXISTS, `File already exists: ${filePath}`, { filePath });
48
+ }
49
+ throw err;
50
+ }
46
51
  }
47
52
 
48
53
  /**