@geminilight/mindos 0.6.38 → 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 (715) hide show
  1. package/README.md +37 -9
  2. package/README_zh.md +37 -9
  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 +21 -20
  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 +133 -95
  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 +21 -20
  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 +373 -109
  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 +27 -12
  411. package/_standalone/data/skills/mindos-zh/SKILL.md +27 -12
  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 +236 -20
  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 +115 -31
  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 +373 -109
  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 +27 -12
  552. package/app/data/skills/mindos-zh/SKILL.md +27 -12
  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 +236 -20
  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/build-runtime-archive.sh +113 -0
  606. package/scripts/setup.js +1 -1
  607. package/skills/mindos/SKILL.md +27 -12
  608. package/skills/mindos/references/preference-capture.md +4 -4
  609. package/skills/mindos/references/write-supplement.md +46 -4
  610. package/skills/mindos-zh/SKILL.md +27 -12
  611. package/skills/mindos-zh/references/preference-capture.md +4 -4
  612. package/skills/mindos-zh/references/write-supplement.md +47 -5
  613. package/templates/empty/INSTRUCTION.md +0 -1
  614. package/templates/en/INSTRUCTION.md +0 -1
  615. package/templates/template-generation-skill.md +0 -1
  616. package/templates/zh/INSTRUCTION.md +0 -1
  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/8407.js +0 -52
  622. package/_standalone/.next/server/chunks/9414.js +0 -11
  623. package/_standalone/.next/static/VAb8MoUUpoXjVJalRJogO/_buildManifest.js +0 -1
  624. package/_standalone/.next/static/chunks/1038-ed04d6651ec92312.js +0 -1
  625. package/_standalone/.next/static/chunks/1263-79beb8734dee7bbd.js +0 -25
  626. package/_standalone/.next/static/chunks/275-ebcaaedabe706903.js +0 -1
  627. package/_standalone/.next/static/chunks/5637-b97c869adf70c82e.js +0 -1
  628. package/_standalone/.next/static/chunks/5681-a53362a1cd629dc6.js +0 -1
  629. package/_standalone/.next/static/chunks/9602-35ca17b688f1a4fe.js +0 -1
  630. package/_standalone/.next/static/chunks/9670-d59e4d45ed705f58.js +0 -6
  631. package/_standalone/.next/static/chunks/app/.well-known/agent-card.json/route-d4762cc48529e566.js +0 -1
  632. package/_standalone/.next/static/chunks/app/_global-error/page-d4762cc48529e566.js +0 -1
  633. package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-519d4da1142db5ef.js +0 -1
  634. package/_standalone/.next/static/chunks/app/agents/page-b709cf3103321609.js +0 -5
  635. package/_standalone/.next/static/chunks/app/api/a2a/agents/route-d4762cc48529e566.js +0 -1
  636. package/_standalone/.next/static/chunks/app/api/a2a/delegations/route-d4762cc48529e566.js +0 -1
  637. package/_standalone/.next/static/chunks/app/api/a2a/discover/route-d4762cc48529e566.js +0 -1
  638. package/_standalone/.next/static/chunks/app/api/a2a/route-d4762cc48529e566.js +0 -1
  639. package/_standalone/.next/static/chunks/app/api/acp/config/route-d4762cc48529e566.js +0 -1
  640. package/_standalone/.next/static/chunks/app/api/acp/detect/route-d4762cc48529e566.js +0 -1
  641. package/_standalone/.next/static/chunks/app/api/acp/install/route-d4762cc48529e566.js +0 -1
  642. package/_standalone/.next/static/chunks/app/api/acp/registry/route-d4762cc48529e566.js +0 -1
  643. package/_standalone/.next/static/chunks/app/api/acp/session/route-d4762cc48529e566.js +0 -1
  644. package/_standalone/.next/static/chunks/app/api/agent-activity/route-d4762cc48529e566.js +0 -1
  645. package/_standalone/.next/static/chunks/app/api/ask/route-d4762cc48529e566.js +0 -1
  646. package/_standalone/.next/static/chunks/app/api/ask-sessions/route-d4762cc48529e566.js +0 -1
  647. package/_standalone/.next/static/chunks/app/api/auth/route-d4762cc48529e566.js +0 -1
  648. package/_standalone/.next/static/chunks/app/api/backlinks/route-d4762cc48529e566.js +0 -1
  649. package/_standalone/.next/static/chunks/app/api/bootstrap/route-d4762cc48529e566.js +0 -1
  650. package/_standalone/.next/static/chunks/app/api/changes/route-d4762cc48529e566.js +0 -1
  651. package/_standalone/.next/static/chunks/app/api/export/route-d4762cc48529e566.js +0 -1
  652. package/_standalone/.next/static/chunks/app/api/extract-pdf/route-d4762cc48529e566.js +0 -1
  653. package/_standalone/.next/static/chunks/app/api/file/import/route-d4762cc48529e566.js +0 -1
  654. package/_standalone/.next/static/chunks/app/api/file/route-d4762cc48529e566.js +0 -1
  655. package/_standalone/.next/static/chunks/app/api/files/route-d4762cc48529e566.js +0 -1
  656. package/_standalone/.next/static/chunks/app/api/git/route-d4762cc48529e566.js +0 -1
  657. package/_standalone/.next/static/chunks/app/api/graph/route-d4762cc48529e566.js +0 -1
  658. package/_standalone/.next/static/chunks/app/api/health/route-d4762cc48529e566.js +0 -1
  659. package/_standalone/.next/static/chunks/app/api/init/route-d4762cc48529e566.js +0 -1
  660. package/_standalone/.next/static/chunks/app/api/mcp/agents/route-d4762cc48529e566.js +0 -1
  661. package/_standalone/.next/static/chunks/app/api/mcp/install/route-d4762cc48529e566.js +0 -1
  662. package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-d4762cc48529e566.js +0 -1
  663. package/_standalone/.next/static/chunks/app/api/mcp/restart/route-d4762cc48529e566.js +0 -1
  664. package/_standalone/.next/static/chunks/app/api/mcp/status/route-d4762cc48529e566.js +0 -1
  665. package/_standalone/.next/static/chunks/app/api/monitoring/route-d4762cc48529e566.js +0 -1
  666. package/_standalone/.next/static/chunks/app/api/recent-files/route-d4762cc48529e566.js +0 -1
  667. package/_standalone/.next/static/chunks/app/api/restart/route-d4762cc48529e566.js +0 -1
  668. package/_standalone/.next/static/chunks/app/api/search/route-d4762cc48529e566.js +0 -1
  669. package/_standalone/.next/static/chunks/app/api/settings/list-models/route-d4762cc48529e566.js +0 -1
  670. package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-d4762cc48529e566.js +0 -1
  671. package/_standalone/.next/static/chunks/app/api/settings/route-d4762cc48529e566.js +0 -1
  672. package/_standalone/.next/static/chunks/app/api/settings/test-key/route-d4762cc48529e566.js +0 -1
  673. package/_standalone/.next/static/chunks/app/api/setup/check-path/route-d4762cc48529e566.js +0 -1
  674. package/_standalone/.next/static/chunks/app/api/setup/check-port/route-d4762cc48529e566.js +0 -1
  675. package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-d4762cc48529e566.js +0 -1
  676. package/_standalone/.next/static/chunks/app/api/setup/ls/route-d4762cc48529e566.js +0 -1
  677. package/_standalone/.next/static/chunks/app/api/setup/route-d4762cc48529e566.js +0 -1
  678. package/_standalone/.next/static/chunks/app/api/skills/route-d4762cc48529e566.js +0 -1
  679. package/_standalone/.next/static/chunks/app/api/sync/route-d4762cc48529e566.js +0 -1
  680. package/_standalone/.next/static/chunks/app/api/tree-version/route-d4762cc48529e566.js +0 -1
  681. package/_standalone/.next/static/chunks/app/api/uninstall/route-d4762cc48529e566.js +0 -1
  682. package/_standalone/.next/static/chunks/app/api/update/route-d4762cc48529e566.js +0 -1
  683. package/_standalone/.next/static/chunks/app/api/update-check/route-d4762cc48529e566.js +0 -1
  684. package/_standalone/.next/static/chunks/app/api/update-status/route-d4762cc48529e566.js +0 -1
  685. package/_standalone/.next/static/chunks/app/api/workflows/route-d4762cc48529e566.js +0 -1
  686. package/_standalone/.next/static/chunks/app/changes/page-def5210095f8698d.js +0 -1
  687. package/_standalone/.next/static/chunks/app/echo/[segment]/page-be28eff31b1a186e.js +0 -11
  688. package/_standalone/.next/static/chunks/app/echo/page-d4762cc48529e566.js +0 -1
  689. package/_standalone/.next/static/chunks/app/explore/page-e4b8098dca200389.js +0 -4
  690. package/_standalone/.next/static/chunks/app/help/page-d5e57d73d94bad19.js +0 -1
  691. package/_standalone/.next/static/chunks/app/layout-aab90c2b4faf8d57.js +0 -173
  692. package/_standalone/.next/static/chunks/app/login/page-321875768b70938a.js +0 -1
  693. package/_standalone/.next/static/chunks/app/page-9a15cf85f0962c59.js +0 -7
  694. package/_standalone/.next/static/chunks/app/setup/page-01ab1f549d636057.js +0 -1
  695. package/_standalone/.next/static/chunks/app/trash/page-7df0139c6b0f87e0.js +0 -1
  696. package/_standalone/.next/static/chunks/app/view/[...path]/loading-d4762cc48529e566.js +0 -1
  697. package/_standalone/.next/static/chunks/app/view/[...path]/not-found-f22c513bbc348cc8.js +0 -1
  698. package/_standalone/.next/static/chunks/app/view/[...path]/page-35811d7e49e08157.js +0 -12
  699. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-d4762cc48529e566.js +0 -1
  700. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-d4762cc48529e566.js +0 -1
  701. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-d4762cc48529e566.js +0 -1
  702. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-d4762cc48529e566.js +0 -1
  703. package/_standalone/.next/static/chunks/webpack-3489a2b6c2882b0c.js +0 -1
  704. package/_standalone/.next/static/css/f16595bc58a16d5d.css +0 -1
  705. package/_standalone/components/walkthrough/WalkthroughProvider.tsx +0 -133
  706. package/_standalone/hooks/useMcpData.tsx +0 -169
  707. package/_standalone/lib/i18n-en.ts +0 -2
  708. package/_standalone/lib/i18n-zh.ts +0 -2
  709. package/_standalone/lib/types.ts +0 -70
  710. package/app/components/walkthrough/WalkthroughProvider.tsx +0 -133
  711. package/app/hooks/useMcpData.tsx +0 -169
  712. package/app/lib/LocaleContext.tsx +0 -60
  713. package/app/lib/i18n-en.ts +0 -2
  714. package/app/lib/i18n-zh.ts +0 -2
  715. /package/_standalone/.next/static/{VAb8MoUUpoXjVJalRJogO → rZLs1krFuduixvcVNe6q3}/_ssgManifest.js +0 -0
@@ -18,6 +18,7 @@ function createSession(currentFile?: string): ChatSession {
18
18
  }
19
19
 
20
20
  export function sessionTitle(s: ChatSession): string {
21
+ if (s.title) return s.title;
21
22
  const firstUser = s.messages.find((m) => m.role === 'user');
22
23
  if (!firstUser) return '(empty session)';
23
24
  const line = firstUser.content.replace(/\s+/g, ' ').trim();
@@ -213,6 +214,19 @@ export function useAskSession(currentFile?: string) {
213
214
  [activeSessionId, currentFile, sessions],
214
215
  );
215
216
 
217
+ const renameSession = useCallback((id: string, newTitle: string) => {
218
+ const trimmed = newTitle.trim();
219
+ setSessions((prev) => {
220
+ const idx = prev.findIndex((s) => s.id === id);
221
+ if (idx < 0) return prev;
222
+ const updated = { ...prev[idx], title: trimmed || undefined };
223
+ const next = [...prev];
224
+ next[idx] = updated;
225
+ void upsertSession(updated);
226
+ return next;
227
+ });
228
+ }, []);
229
+
216
230
  const clearAllSessions = useCallback(() => {
217
231
  // Only delete sessions that have messages (were persisted)
218
232
  const persistedIds = sessions.filter(s => s.messages.length > 0).map(s => s.id);
@@ -236,6 +250,7 @@ export function useAskSession(currentFile?: string) {
236
250
  resetSession,
237
251
  loadSession,
238
252
  deleteSession,
253
+ renameSession,
239
254
  clearAllSessions,
240
255
  };
241
256
  }
@@ -265,7 +265,7 @@ export const ACP_ERRORS = {
265
265
  SPAWN_FAILED: { code: -32004, message: 'Failed to spawn agent process' },
266
266
  TRANSPORT_ERROR: { code: -32005, message: 'Transport error' },
267
267
  AUTH_REQUIRED: { code: -32000, message: 'Authentication required' },
268
- RESOURCE_NOT_FOUND: { code: -32002, message: 'Resource not found' },
268
+ RESOURCE_NOT_FOUND: { code: -32006, message: 'Resource not found' },
269
269
  PARSE_ERROR: { code: -32700, message: 'Parse error' },
270
270
  INVALID_REQUEST: { code: -32600, message: 'Invalid request' },
271
271
  METHOD_NOT_FOUND: { code: -32601, message: 'Method not found' },
@@ -7,6 +7,7 @@ import { moveToTrash, restoreFromTrash, restoreAsCopy, permanentlyDelete, listTr
7
7
  import { createSpaceFilesystem, generateReadmeTemplate } from '@/lib/core/create-space';
8
8
  import { INSTRUCTION_TEMPLATE, cleanDirName } from '@/lib/core/space-scaffold';
9
9
  import { revalidatePath } from 'next/cache';
10
+ import { UNDELETABLE_FILES } from '@/lib/types';
10
11
 
11
12
  export async function createFileAction(dirPath: string, fileName: string): Promise<{ success: boolean; filePath?: string; error?: string }> {
12
13
  try {
@@ -26,6 +27,10 @@ export async function createFileAction(dirPath: string, fileName: string): Promi
26
27
 
27
28
  export async function deleteFileAction(filePath: string): Promise<{ success: boolean; trashId?: string; error?: string }> {
28
29
  try {
30
+ const basename = path.posix.basename(filePath);
31
+ if (!filePath.includes('/') && UNDELETABLE_FILES.has(basename)) {
32
+ return { success: false, error: `"${basename}" is protected and cannot be deleted` };
33
+ }
29
34
  const meta = moveToTrash(getMindRoot(), filePath);
30
35
  invalidateCache();
31
36
  revalidatePath('/', 'layout');
@@ -205,6 +210,14 @@ export async function cleanupExamplesAction(): Promise<{ success: boolean; delet
205
210
  }
206
211
  }
207
212
 
213
+ // ─── Directory Listing ────────────────────────────────────────────────────────
214
+
215
+ export async function listDirFilesAction(dirPath: string): Promise<string[]> {
216
+ const allFiles = collectAllFiles();
217
+ const prefix = dirPath.endsWith('/') ? dirPath : dirPath + '/';
218
+ return allFiles.filter(f => f.startsWith(prefix));
219
+ }
220
+
208
221
  // ─── Trash Actions ────────────────────────────────────────────────────────────
209
222
 
210
223
  export async function listTrashAction(): Promise<TrashMeta[]> {
@@ -12,6 +12,7 @@ interface AgentOpEntry {
12
12
  result: 'ok' | 'error';
13
13
  message?: string;
14
14
  durationMs?: number;
15
+ agentName?: string;
15
16
  }
16
17
 
17
18
  /**
@@ -29,6 +30,7 @@ export function logAgentOp(entry: AgentOpEntry): void {
29
30
  result: entry.result,
30
31
  message: entry.message,
31
32
  durationMs: entry.durationMs,
33
+ agentName: entry.agentName,
32
34
  });
33
35
  // Best-effort cleanup of legacy JSONL path.
34
36
  try {
@@ -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.