@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
@@ -26,36 +26,45 @@ interface NotInstalledAgent {
26
26
  packageName?: string;
27
27
  }
28
28
 
29
- /* ── Server-side detection cache (5 min TTL) ──────────────────────────── */
29
+ /* ── Server-side detection cache (30 min TTL) ─────────────────────────── */
30
30
 
31
- const DETECT_CACHE_TTL_MS = 5 * 60 * 1000;
31
+ const DETECT_CACHE_TTL_MS = 30 * 60 * 1000;
32
32
  let detectCache: { data: { installed: InstalledAgent[]; notInstalled: NotInstalledAgent[] }; ts: number } | null = null;
33
33
 
34
34
  /* ── Async detection helpers ──────────────────────────────────────────── */
35
35
 
36
- function whichAsync(binary: string): Promise<string | null> {
37
- return new Promise((resolve) => {
38
- const child = exec(`which ${binary}`, { encoding: 'utf-8', timeout: 2000 }, (err, stdout) => {
39
- resolve(err ? null : (stdout.trim() || null));
40
- });
41
- child.on('error', () => resolve(null));
42
- });
43
- }
44
-
45
36
  /**
46
- * Batch `which` for multiple unique binaries in a single call.
47
- * Returns a Map<binary, path | null>.
37
+ * Single-shell batch detection. Runs one `which` per binary but via a
38
+ * combined shell script so we spawn exactly ONE child process.
39
+ * Output: one line per binary — either the path or empty.
48
40
  */
49
- async function whichBatch(binaries: string[]): Promise<Map<string, string | null>> {
41
+ function whichBatch(binaries: string[]): Promise<Map<string, string | null>> {
50
42
  const unique = [...new Set(binaries)];
51
- if (unique.length === 0) return new Map();
43
+ if (unique.length === 0) return Promise.resolve(new Map());
52
44
 
53
- const results = await Promise.all(unique.map(async (bin) => {
54
- const path = await whichAsync(bin);
55
- return [bin, path] as const;
56
- }));
45
+ // Build a shell snippet: for each binary, print path or empty line
46
+ // e.g. `which gemini 2>/dev/null || echo ""; which claude 2>/dev/null || echo ""`
47
+ const script = unique
48
+ .map(bin => `which ${bin} 2>/dev/null || echo ""`)
49
+ .join('; ');
57
50
 
58
- return new Map(results);
51
+ return new Promise((resolve) => {
52
+ exec(script, { encoding: 'utf-8', timeout: 3000 }, (err, stdout) => {
53
+ const map = new Map<string, string | null>();
54
+ if (err) {
55
+ // On total failure, mark all as not found
56
+ for (const bin of unique) map.set(bin, null);
57
+ resolve(map);
58
+ return;
59
+ }
60
+ const lines = stdout.split('\n');
61
+ for (let i = 0; i < unique.length; i++) {
62
+ const line = (lines[i] ?? '').trim();
63
+ map.set(unique[i], line || null);
64
+ }
65
+ resolve(map);
66
+ });
67
+ });
59
68
  }
60
69
 
61
70
  /* ── Route handler ─────────────────────────────────────────────────────── */
@@ -10,7 +10,7 @@ import { effectiveSopRoot } from '@/lib/settings';
10
10
  */
11
11
  export async function GET(req: NextRequest) {
12
12
  const limitParam = req.nextUrl.searchParams.get('limit');
13
- const limit = Math.max(1, Math.min(Number(limitParam) || 10, 50));
13
+ const limit = Math.max(1, Math.min(Number(limitParam) || 10, 500));
14
14
 
15
15
  const root = effectiveSopRoot();
16
16
  const events = listAgentAuditEvents(root, limit);
@@ -17,10 +17,12 @@ import {
17
17
  import { NextRequest, NextResponse } from 'next/server';
18
18
  import fs from 'fs';
19
19
  import path from 'path';
20
- import { getFileContent, getMindRoot } from '@/lib/fs';
20
+ import { getFileContent, getMindRoot, collectAllFiles } from '@/lib/fs';
21
21
  import { getModelConfig, hasImages } from '@/lib/agent/model';
22
- import { getRequestScopedTools, getOrganizeTools, WRITE_TOOLS, truncate } from '@/lib/agent/tools';
23
- import { AGENT_SYSTEM_PROMPT, ORGANIZE_SYSTEM_PROMPT } from '@/lib/agent/prompt';
22
+ import { isProviderId, type ProviderId } from '@/lib/agent/providers';
23
+ import { getRequestScopedTools, getOrganizeTools, getChatTools, WRITE_TOOLS, truncate } from '@/lib/agent/tools';
24
+ import { AGENT_SYSTEM_PROMPT, ORGANIZE_SYSTEM_PROMPT, CHAT_SYSTEM_PROMPT } from '@/lib/agent/prompt';
25
+ import type { AskModeApi } from '@/lib/types';
24
26
  import { toAgentMessages } from '@/lib/agent/to-agent-messages';
25
27
  import { logAgentOp } from '@/lib/agent/log';
26
28
  import { readSettings } from '@/lib/settings';
@@ -32,6 +34,26 @@ import { createSession, promptStream, closeSession } from '@/lib/acp/session';
32
34
  import type { AcpSessionUpdate } from '@/lib/acp/types';
33
35
  import type { Message as FrontendMessage } from '@/lib/types';
34
36
 
37
+ const MAX_DIR_FILES = 30;
38
+
39
+ /** Expand attachedFiles entries: directory paths (trailing /) become individual file paths. */
40
+ function expandAttachedFiles(raw: string[]): string[] {
41
+ const result: string[] = [];
42
+ const allFiles = collectAllFiles();
43
+ for (const entry of raw) {
44
+ if (entry.endsWith('/')) {
45
+ const prefix = entry;
46
+ let count = 0;
47
+ for (const f of allFiles) {
48
+ if (f.startsWith(prefix) && ++count <= MAX_DIR_FILES) result.push(f);
49
+ }
50
+ } else {
51
+ result.push(entry);
52
+ }
53
+ }
54
+ return result;
55
+ }
56
+
35
57
  /** Safe JSON parse — returns {} on invalid input */
36
58
  function safeParseJson(raw: string | undefined): Record<string, unknown> {
37
59
  if (!raw) return {};
@@ -294,6 +316,7 @@ function toPiCustomToolDefinitions(tools: AgentTool<any>[]): ToolDefinition<any,
294
316
  params: args,
295
317
  result: outputText.startsWith('Error:') ? 'error' : 'ok',
296
318
  message: outputText.slice(0, 200),
319
+ agentName: 'MindOS Ask',
297
320
  });
298
321
  } catch {
299
322
  // logging must never kill the stream
@@ -315,10 +338,12 @@ export async function POST(req: NextRequest) {
315
338
  attachedFiles?: string[];
316
339
  uploadedFiles?: Array<{ name: string; content: string }>;
317
340
  maxSteps?: number;
318
- /** 'organize' = lean prompt for file import organize; default = full prompt */
319
- mode?: 'organize' | 'default';
341
+ /** Ask mode: 'chat' = read-only tools; 'agent' = full tools; 'organize' = lean import mode */
342
+ mode?: AskModeApi;
320
343
  /** ACP agent selection: if present, route to ACP instead of MindOS */
321
344
  selectedAcpAgent?: { id: string; name: string } | null;
345
+ /** Per-request provider override from the chat panel capsule */
346
+ providerOverride?: string;
322
347
  };
323
348
  try {
324
349
  body = await req.json();
@@ -326,20 +351,24 @@ export async function POST(req: NextRequest) {
326
351
  return apiError(ErrorCodes.INVALID_REQUEST, 'Invalid JSON body', 400);
327
352
  }
328
353
 
329
- const { messages, currentFile, attachedFiles, uploadedFiles, selectedAcpAgent } = body;
330
- const isOrganizeMode = body.mode === 'organize';
354
+ const { messages, currentFile, attachedFiles: rawAttached, uploadedFiles, selectedAcpAgent } = body;
355
+ const attachedFiles = Array.isArray(rawAttached) ? expandAttachedFiles(rawAttached) : rawAttached;
356
+ const askMode: AskModeApi = body.mode === 'organize' ? 'organize'
357
+ : body.mode === 'chat' ? 'chat'
358
+ : 'agent';
331
359
 
332
360
  // Read agent config from settings
333
361
  const serverSettings = readSettings();
334
362
  const agentConfig = serverSettings.agent ?? {};
363
+ const defaultMaxSteps = askMode === 'chat' ? 8 : (agentConfig.maxSteps ?? 20);
335
364
  const stepLimit = Number.isFinite(body.maxSteps)
336
365
  ? Math.min(30, Math.max(1, Number(body.maxSteps)))
337
- : Math.min(30, Math.max(1, agentConfig.maxSteps ?? 20));
366
+ : Math.min(30, Math.max(1, defaultMaxSteps));
338
367
  const enableThinking = agentConfig.enableThinking ?? false;
339
368
  const thinkingBudget = agentConfig.thinkingBudget ?? 5000;
340
369
  const contextStrategy = agentConfig.contextStrategy ?? 'auto';
341
370
 
342
- // Uploaded files — shared by both modes
371
+ // Uploaded files — shared by all modes
343
372
  const uploadedParts: string[] = [];
344
373
  if (Array.isArray(uploadedFiles) && uploadedFiles.length > 0) {
345
374
  for (const f of uploadedFiles.slice(0, 8)) {
@@ -349,11 +378,11 @@ export async function POST(req: NextRequest) {
349
378
  }
350
379
 
351
380
  // ---------------------------------------------------------------------------
352
- // Build system prompt — lean path for organize mode, full path otherwise
381
+ // Build system prompt — three-way split by askMode
353
382
  // ---------------------------------------------------------------------------
354
383
  let systemPrompt: string;
355
384
 
356
- if (isOrganizeMode) {
385
+ if (askMode === 'organize') {
357
386
  // Organize mode: minimal prompt — only KB structure + uploaded files
358
387
  const promptParts: string[] = [ORGANIZE_SYSTEM_PROMPT];
359
388
 
@@ -373,9 +402,57 @@ export async function POST(req: NextRequest) {
373
402
  );
374
403
  }
375
404
 
405
+ systemPrompt = promptParts.join('\n\n');
406
+ } else if (askMode === 'chat') {
407
+ // Chat mode: lean prompt with read-only KB access.
408
+ // Skips: SKILL.md, bootstrap INSTRUCTION/CONFIG, write-supplement, target dir context.
409
+ // Keeps: KB structure (README.md), time, current/attached files, uploaded files.
410
+ const promptParts: string[] = [CHAT_SYSTEM_PROMPT];
411
+
412
+ promptParts.push(`---\n\nmind_root=${getMindRoot()}`);
413
+
414
+ const bootstrapIndex = readKnowledgeFile('README.md');
415
+ if (bootstrapIndex.ok && bootstrapIndex.content.trim().length > 10) {
416
+ promptParts.push(`---\n\n## Knowledge Base Structure\n\n${bootstrapIndex.content}`);
417
+ }
418
+
419
+ const now = new Date();
420
+ promptParts.push(`---\n\n## Current Time Context\n- Current UTC Time: ${now.toISOString()}\n- System Local Time: ${new Intl.DateTimeFormat('en-US', { dateStyle: 'full', timeStyle: 'long' }).format(now)}`);
421
+
422
+ const contextParts: string[] = [];
423
+ const seen = new Set<string>();
424
+ if (Array.isArray(attachedFiles) && attachedFiles.length > 0) {
425
+ for (const filePath of attachedFiles!) {
426
+ if (seen.has(filePath)) continue;
427
+ seen.add(filePath);
428
+ try {
429
+ const content = truncate(getFileContent(filePath));
430
+ contextParts.push(`## Attached: ${filePath}\n\n${content}`);
431
+ } catch { /* ignore missing files */ }
432
+ }
433
+ }
434
+ if (currentFile && !seen.has(currentFile)) {
435
+ seen.add(currentFile);
436
+ try {
437
+ const content = truncate(getFileContent(currentFile));
438
+ contextParts.push(`## Current file: ${currentFile}\n\n${content}`);
439
+ } catch { /* ignore */ }
440
+ }
441
+ if (contextParts.length > 0) {
442
+ promptParts.push(`---\n\nThe user is currently viewing these files:\n\n${contextParts.join('\n\n---\n\n')}`);
443
+ }
444
+
445
+ if (uploadedParts.length > 0) {
446
+ promptParts.push(
447
+ `---\n\n## ⚠️ USER-UPLOADED FILES\n\n` +
448
+ `Their FULL CONTENT is below. Use this directly — do NOT call read tools on them.\n\n` +
449
+ uploadedParts.join('\n\n---\n\n'),
450
+ );
451
+ }
452
+
376
453
  systemPrompt = promptParts.join('\n\n');
377
454
  } else {
378
- // Full mode: original prompt assembly
455
+ // Agent mode: full prompt assembly
379
456
  // Auto-load skill + bootstrap context for each request.
380
457
  const isZh = serverSettings.disabledSkills?.includes('mindos') ?? false;
381
458
  const skillDirName = isZh ? 'mindos-zh' : 'mindos';
@@ -383,22 +460,24 @@ export async function POST(req: NextRequest) {
383
460
  ? path.join(process.env.MINDOS_PROJECT_ROOT, 'app')
384
461
  : process.cwd();
385
462
  const skillPath = path.join(appDir, `data/skills/${skillDirName}/SKILL.md`);
463
+ const skillWritePath = path.join(appDir, `data/skills/${skillDirName}/references/write-supplement.md`);
386
464
  const skill = readAbsoluteFile(skillPath);
465
+ const skillWrite = readAbsoluteFile(skillWritePath);
466
+
467
+ console.log(`[ask] SKILL skill=${skill.ok}, write-supplement=${skillWrite.ok}`);
387
468
 
388
- const userSkillRules = readKnowledgeFile('user-skill-rules.md');
469
+ const userSkillRules = readKnowledgeFile('.mindos/user-preferences.md');
389
470
 
390
471
  const targetDir = dirnameOf(currentFile);
391
472
  const bootstrap = {
392
473
  instruction: readKnowledgeFile('INSTRUCTION.md'),
393
474
  config_json: readKnowledgeFile('CONFIG.json'),
394
475
  // Lazy-loaded: only read if the file exists and has content.
395
- // README.md and CONFIG.md are often empty/boilerplate and waste tokens.
476
+ // README.md is often empty/boilerplate and wastes tokens.
396
477
  index: null as ReturnType<typeof readKnowledgeFile> | null,
397
- config_md: null as ReturnType<typeof readKnowledgeFile> | null,
398
478
  target_readme: null as ReturnType<typeof readKnowledgeFile> | null,
399
479
  target_instruction: null as ReturnType<typeof readKnowledgeFile> | null,
400
480
  target_config_json: null as ReturnType<typeof readKnowledgeFile> | null,
401
- target_config_md: null as ReturnType<typeof readKnowledgeFile> | null,
402
481
  };
403
482
 
404
483
  // Only load secondary bootstrap files if they have meaningful content.
@@ -409,9 +488,6 @@ export async function POST(req: NextRequest) {
409
488
  const indexResult = readKnowledgeFile('README.md');
410
489
  if (indexResult.ok && indexResult.content.trim().length > MIN_USEFUL_CONTENT_LENGTH) bootstrap.index = indexResult;
411
490
 
412
- const configMdResult = readKnowledgeFile('CONFIG.md');
413
- if (configMdResult.ok && configMdResult.content.trim().length > MIN_USEFUL_CONTENT_LENGTH) bootstrap.config_md = configMdResult;
414
-
415
491
  if (targetDir) {
416
492
  const tr = readKnowledgeFile(`${targetDir}/README.md`);
417
493
  if (tr.ok && tr.content.trim().length > MIN_USEFUL_CONTENT_LENGTH) bootstrap.target_readme = tr;
@@ -419,35 +495,37 @@ export async function POST(req: NextRequest) {
419
495
  if (ti.ok && ti.content.trim().length > MIN_USEFUL_CONTENT_LENGTH) bootstrap.target_instruction = ti;
420
496
  const tc = readKnowledgeFile(`${targetDir}/CONFIG.json`);
421
497
  if (tc.ok && tc.content.trim().length > MIN_USEFUL_CONTENT_LENGTH) bootstrap.target_config_json = tc;
422
- const tm = readKnowledgeFile(`${targetDir}/CONFIG.md`);
423
- if (tm.ok && tm.content.trim().length > MIN_USEFUL_CONTENT_LENGTH) bootstrap.target_config_md = tm;
424
498
  }
425
499
 
426
- // Only report failures + truncation warnings for loaded files
427
500
  const initFailures: string[] = [];
428
501
  const truncationWarnings: string[] = [];
429
502
  if (!skill.ok) initFailures.push(`skill.mindos: failed (${skill.error})`);
430
503
  if (skill.ok && skill.truncated) truncationWarnings.push('skill.mindos was truncated');
431
- if (userSkillRules.ok && userSkillRules.truncated) truncationWarnings.push('user-skill-rules.md was truncated');
504
+ if (!skillWrite.ok) initFailures.push(`skill.mindos-write-supplement: failed (${skillWrite.error})`);
505
+ if (skillWrite.ok && skillWrite.truncated) truncationWarnings.push('skill.mindos-write-supplement was truncated');
506
+ if (userSkillRules.ok && userSkillRules.truncated) truncationWarnings.push('.mindos/user-preferences.md was truncated');
432
507
  if (!bootstrap.instruction.ok) initFailures.push(`bootstrap.instruction: failed (${bootstrap.instruction.error})`);
433
508
  if (bootstrap.instruction.ok && bootstrap.instruction.truncated) truncationWarnings.push('bootstrap.instruction was truncated');
434
509
  if (bootstrap.index?.ok && bootstrap.index.truncated) truncationWarnings.push('bootstrap.index was truncated');
435
510
  if (!bootstrap.config_json.ok) initFailures.push(`bootstrap.config_json: failed (${bootstrap.config_json.error})`);
436
511
  if (bootstrap.config_json.ok && bootstrap.config_json.truncated) truncationWarnings.push('bootstrap.config_json was truncated');
437
- if (bootstrap.config_md?.ok && bootstrap.config_md.truncated) truncationWarnings.push('bootstrap.config_md was truncated');
438
512
  if (bootstrap.target_readme?.ok && bootstrap.target_readme.truncated) truncationWarnings.push('bootstrap.target_readme was truncated');
439
513
  if (bootstrap.target_instruction?.ok && bootstrap.target_instruction.truncated) truncationWarnings.push('bootstrap.target_instruction was truncated');
440
514
  if (bootstrap.target_config_json?.ok && bootstrap.target_config_json.truncated) truncationWarnings.push('bootstrap.target_config_json was truncated');
441
- if (bootstrap.target_config_md?.ok && bootstrap.target_config_md.truncated) truncationWarnings.push('bootstrap.target_config_md was truncated');
442
515
 
443
516
  const initStatus = initFailures.length === 0
444
517
  ? `All initialization contexts loaded successfully. mind_root=${getMindRoot()}${targetDir ? `, target_dir=${targetDir}` : ''}${truncationWarnings.length > 0 ? ` ⚠️ ${truncationWarnings.length} files truncated` : ''}`
445
518
  : `Initialization issues:\n${initFailures.join('\n')}\nmind_root=${getMindRoot()}${targetDir ? `, target_dir=${targetDir}` : ''}${truncationWarnings.length > 0 ? `\n⚠️ Warnings:\n${truncationWarnings.join('\n')}` : ''}`;
446
519
 
447
520
  const initContextBlocks: string[] = [];
448
- if (skill.ok) initContextBlocks.push(`## mindos_skill_md\n\n${skill.content}`);
521
+ const skillParts: string[] = [];
522
+ if (skill.ok) skillParts.push(skill.content);
523
+ if (skillWrite.ok) skillParts.push(skillWrite.content);
524
+ if (skillParts.length > 0) {
525
+ initContextBlocks.push(`## mindos_skill_md\n\n${skillParts.join('\n\n---\n\n')}`);
526
+ }
449
527
  if (userSkillRules.ok && !userSkillRules.truncated && userSkillRules.content.trim()) {
450
- initContextBlocks.push(`## user_skill_rules\n\nUser personalization rules (user-skill-rules.md):\n\n${userSkillRules.content}`);
528
+ initContextBlocks.push(`## user_skill_rules\n\nUser personalization preferences (.mindos/user-preferences.md):\n\n${userSkillRules.content}`);
451
529
  }
452
530
  if (bootstrap.instruction.ok) initContextBlocks.push(`## bootstrap_instruction\n\n${bootstrap.instruction.content}`);
453
531
  if (bootstrap.index?.ok) initContextBlocks.push(`## bootstrap_index\n\n${bootstrap.index.content}`);
@@ -463,11 +541,9 @@ export async function POST(req: NextRequest) {
463
541
  } catch { /* keep original if parse fails */ }
464
542
  initContextBlocks.push(`## bootstrap_config_json\n\n${configContent}`);
465
543
  }
466
- if (bootstrap.config_md?.ok) initContextBlocks.push(`## bootstrap_config_md\n\n${bootstrap.config_md.content}`);
467
544
  if (bootstrap.target_readme?.ok) initContextBlocks.push(`## bootstrap_target_readme\n\n${bootstrap.target_readme.content}`);
468
545
  if (bootstrap.target_instruction?.ok) initContextBlocks.push(`## bootstrap_target_instruction\n\n${bootstrap.target_instruction.content}`);
469
546
  if (bootstrap.target_config_json?.ok) initContextBlocks.push(`## bootstrap_target_config_json\n\n${bootstrap.target_config_json.content}`);
470
- if (bootstrap.target_config_md?.ok) initContextBlocks.push(`## bootstrap_target_config_md\n\n${bootstrap.target_config_md.content}`);
471
547
 
472
548
  // Build initial context from attached/current files
473
549
  const contextParts: string[] = [];
@@ -531,7 +607,13 @@ export async function POST(req: NextRequest) {
531
607
  }
532
608
 
533
609
  try {
534
- const { model, modelName, apiKey, provider } = getModelConfig({ hasImages: hasImages(messages) });
610
+ const provOverride = body.providerOverride && isProviderId(body.providerOverride)
611
+ ? body.providerOverride as ProviderId
612
+ : undefined;
613
+ const { model, modelName, apiKey, provider } = getModelConfig({
614
+ provider: provOverride,
615
+ hasImages: hasImages(messages),
616
+ });
535
617
 
536
618
  // Convert frontend messages to AgentMessage[]
537
619
  const agentMessages = toAgentMessages(messages);
@@ -550,7 +632,9 @@ export async function POST(req: NextRequest) {
550
632
  // Capture API key for this request — safe since each POST creates a new Agent instance.
551
633
  const requestApiKey = apiKey;
552
634
  const projectRoot = process.env.MINDOS_PROJECT_ROOT || path.resolve(process.cwd(), '..');
553
- const requestTools = isOrganizeMode ? getOrganizeTools() : await getRequestScopedTools();
635
+ const requestTools = askMode === 'organize' ? getOrganizeTools()
636
+ : askMode === 'chat' ? getChatTools()
637
+ : await getRequestScopedTools();
554
638
  const customTools = toPiCustomToolDefinitions(requestTools);
555
639
 
556
640
  const authStorage = AuthStorage.create();
@@ -11,6 +11,7 @@ interface Message {
11
11
 
12
12
  interface ChatSession {
13
13
  id: string;
14
+ title?: string;
14
15
  currentFile?: string;
15
16
  createdAt: number;
16
17
  updatedAt: number;
@@ -20,8 +20,7 @@ export async function GET(req: NextRequest) {
20
20
  instruction: tryRead('INSTRUCTION.md'),
21
21
  index: tryRead('README.md'),
22
22
  config_json: tryRead('CONFIG.json'),
23
- config_md: tryRead('CONFIG.md'),
24
- user_skill_rules: tryRead('user-skill-rules.md'),
23
+ user_skill_rules: tryRead('.mindos/user-preferences.md'),
25
24
  };
26
25
 
27
26
  if (targetDir) {
@@ -32,7 +31,6 @@ export async function GET(req: NextRequest) {
32
31
  result.target_readme = tryRead(path.join(targetDir, 'README.md'));
33
32
  result.target_instruction = tryRead(path.join(targetDir, 'INSTRUCTION.md'));
34
33
  result.target_config_json = tryRead(path.join(targetDir, 'CONFIG.json'));
35
- result.target_config_md = tryRead(path.join(targetDir, 'CONFIG.md'));
36
34
  }
37
35
 
38
36
  return NextResponse.json(result);
@@ -6,6 +6,7 @@ import { revalidatePath } from 'next/cache';
6
6
  import { resolveSafe } from '@/lib/core/security';
7
7
  import { sanitizeFileName, convertToMarkdown } from '@/lib/core/file-convert';
8
8
  import { effectiveSopRoot } from '@/lib/settings';
9
+ import { SYSTEM_FILES, UNDELETABLE_FILES } from '@/lib/types';
9
10
  import {
10
11
  getFileContent,
11
12
  saveFileContent,
@@ -16,7 +17,7 @@ import {
16
17
  updateLines,
17
18
  insertAfterHeading,
18
19
  updateSection,
19
- deleteFile,
20
+ moveToTrashFile,
20
21
  renameFile,
21
22
  renameSpace,
22
23
  moveFile,
@@ -33,6 +34,18 @@ function err(msg: string, status = 400) {
33
34
  return NextResponse.json({ error: msg }, { status });
34
35
  }
35
36
 
37
+ /** Returns true if the path targets a root-level system file (INSTRUCTION.md, CONFIG.json, etc.). */
38
+ function isSystemFile(filePath: string): boolean {
39
+ const basename = path.posix.basename(filePath);
40
+ return !filePath.includes('/') && SYSTEM_FILES.has(basename);
41
+ }
42
+
43
+ /** Root-level files visible to users but protected from deletion (e.g. TODO.md). */
44
+ function isUndeletable(filePath: string): boolean {
45
+ const basename = path.posix.basename(filePath);
46
+ return !filePath.includes('/') && UNDELETABLE_FILES.has(basename);
47
+ }
48
+
36
49
  function safeRead(filePath: string): string {
37
50
  try {
38
51
  return getFileContent(filePath);
@@ -46,9 +59,17 @@ function sourceFromRequest(req: NextRequest, body: Record<string, unknown>) {
46
59
  if (bodySource === 'agent' || bodySource === 'user' || bodySource === 'system') return bodySource;
47
60
  const headerSource = req.headers.get('x-mindos-source');
48
61
  if (headerSource === 'agent' || headerSource === 'user' || headerSource === 'system') return headerSource;
62
+ // If request has x-mindos-agent header, it's from an agent
63
+ if (req.headers.get('x-mindos-agent')) return 'agent' as const;
49
64
  return 'user' as const;
50
65
  }
51
66
 
67
+ /** Extract agent name from request (MCP client identity, e.g. "claude-code"). */
68
+ function agentNameFromRequest(req: NextRequest): string | undefined {
69
+ const name = req.headers.get('x-mindos-agent');
70
+ return name && name.trim() ? name.trim() : undefined;
71
+ }
72
+
52
73
  // GET /api/file?path=foo.md&op=read_file|read_lines | GET ?op=list_spaces (no path)
53
74
  export async function GET(req: NextRequest) {
54
75
  const filePath = req.nextUrl.searchParams.get('path');
@@ -116,6 +137,12 @@ export async function POST(req: NextRequest) {
116
137
  if (!op || typeof op !== 'string') return err('missing op');
117
138
  if (!filePath || typeof filePath !== 'string') return err('missing path');
118
139
 
140
+ // Block agent writes to root-level system files (INSTRUCTION.md, CONFIG.json, etc.)
141
+ const source = sourceFromRequest(req, body);
142
+ if (source === 'agent' && isSystemFile(filePath)) {
143
+ return err(`System file "${filePath}" is protected and cannot be modified by agents`, 403);
144
+ }
145
+
119
146
  try {
120
147
  let resp: NextResponse;
121
148
  let changeEvent:
@@ -243,16 +270,19 @@ export async function POST(req: NextRequest) {
243
270
  }
244
271
 
245
272
  case 'delete_file': {
273
+ if (isUndeletable(filePath)) {
274
+ return err(`"${filePath}" is a protected file and cannot be deleted`, 403);
275
+ }
246
276
  const before = safeRead(filePath);
247
- deleteFile(filePath);
277
+ const trashMeta = moveToTrashFile(filePath);
248
278
  changeEvent = {
249
279
  op,
250
280
  path: filePath,
251
- summary: 'Deleted file',
281
+ summary: 'Moved to trash',
252
282
  before,
253
283
  after: '',
254
284
  };
255
- resp = NextResponse.json({ ok: true });
285
+ resp = NextResponse.json({ ok: true, trashId: trashMeta.id });
256
286
  break;
257
287
  }
258
288
 
@@ -0,0 +1,61 @@
1
+ export const dynamic = 'force-dynamic';
2
+ export const runtime = 'nodejs';
3
+
4
+ import { NextRequest, NextResponse } from 'next/server';
5
+ import { revalidatePath } from 'next/cache';
6
+ import { effectiveSopRoot } from '@/lib/settings';
7
+ import { listInboxFiles, saveToInbox } from '@/lib/core/inbox';
8
+ import { invalidateCache } from '@/lib/fs';
9
+
10
+ export async function GET() {
11
+ const mindRoot = effectiveSopRoot().trim();
12
+ if (!mindRoot) {
13
+ return NextResponse.json({ error: 'MIND_ROOT is not configured' }, { status: 400 });
14
+ }
15
+
16
+ try {
17
+ const files = listInboxFiles(mindRoot);
18
+ return NextResponse.json({ files });
19
+ } catch (err) {
20
+ return NextResponse.json(
21
+ { error: (err as Error).message },
22
+ { status: 500 },
23
+ );
24
+ }
25
+ }
26
+
27
+ export async function POST(req: NextRequest) {
28
+ const mindRoot = effectiveSopRoot().trim();
29
+ if (!mindRoot) {
30
+ return NextResponse.json({ error: 'MIND_ROOT is not configured' }, { status: 400 });
31
+ }
32
+
33
+ let body: unknown;
34
+ try {
35
+ body = await req.json();
36
+ } catch {
37
+ return NextResponse.json({ error: 'Invalid JSON body' }, { status: 400 });
38
+ }
39
+
40
+ if (!body || typeof body !== 'object' || !Array.isArray((body as { files?: unknown }).files)) {
41
+ return NextResponse.json({ error: 'Request body must contain a files array' }, { status: 400 });
42
+ }
43
+
44
+ const { files } = body as { files: Array<{ name: string; content: string; encoding?: 'text' | 'base64' }> };
45
+
46
+ try {
47
+ const result = saveToInbox(mindRoot, files);
48
+
49
+ if (result.saved.length > 0) {
50
+ invalidateCache();
51
+ try { revalidatePath('/', 'layout'); } catch { /* test env */ }
52
+ }
53
+
54
+ return NextResponse.json(result);
55
+ } catch (err) {
56
+ return NextResponse.json(
57
+ { error: (err as Error).message },
58
+ { status: 500 },
59
+ );
60
+ }
61
+ }