@geminilight/mindos 0.6.39 → 0.6.41

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 (759) hide show
  1. package/README.md +31 -15
  2. package/README_zh.md +31 -15
  3. package/_standalone/.mindos-build-version +1 -1
  4. package/_standalone/.next/BUILD_ID +1 -1
  5. package/_standalone/.next/app-path-routes-manifest.json +19 -18
  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 -2
  12. package/_standalone/.next/routes-manifest.json +6 -0
  13. package/_standalone/.next/server/app/.well-known/agent-card.json/route_client-reference-manifest.js +1 -1
  14. package/_standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  15. package/_standalone/.next/server/app/_global-error.html +2 -2
  16. package/_standalone/.next/server/app/_global-error.rsc +1 -1
  17. package/_standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  18. package/_standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  19. package/_standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  20. package/_standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  21. package/_standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  22. package/_standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  23. package/_standalone/.next/server/app/_not-found/page.js +2 -2
  24. package/_standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  25. package/_standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  26. package/_standalone/.next/server/app/agents/[agentKey]/page.js +2 -2
  27. package/_standalone/.next/server/app/agents/[agentKey]/page.js.nft.json +1 -1
  28. package/_standalone/.next/server/app/agents/[agentKey]/page_client-reference-manifest.js +1 -1
  29. package/_standalone/.next/server/app/agents/page.js +3 -3
  30. package/_standalone/.next/server/app/agents/page.js.nft.json +1 -1
  31. package/_standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  32. package/_standalone/.next/server/app/api/a2a/agents/route_client-reference-manifest.js +1 -1
  33. package/_standalone/.next/server/app/api/a2a/delegations/route_client-reference-manifest.js +1 -1
  34. package/_standalone/.next/server/app/api/a2a/discover/route_client-reference-manifest.js +1 -1
  35. package/_standalone/.next/server/app/api/a2a/route_client-reference-manifest.js +1 -1
  36. package/_standalone/.next/server/app/api/acp/config/route.js +1 -1
  37. package/_standalone/.next/server/app/api/acp/config/route.js.nft.json +1 -1
  38. package/_standalone/.next/server/app/api/acp/config/route_client-reference-manifest.js +1 -1
  39. package/_standalone/.next/server/app/api/acp/detect/route.js +1 -1
  40. package/_standalone/.next/server/app/api/acp/detect/route.js.nft.json +1 -1
  41. package/_standalone/.next/server/app/api/acp/detect/route_client-reference-manifest.js +1 -1
  42. package/_standalone/.next/server/app/api/acp/install/route_client-reference-manifest.js +1 -1
  43. package/_standalone/.next/server/app/api/acp/registry/route_client-reference-manifest.js +1 -1
  44. package/_standalone/.next/server/app/api/acp/session/route.js +1 -1
  45. package/_standalone/.next/server/app/api/acp/session/route.js.nft.json +1 -1
  46. package/_standalone/.next/server/app/api/acp/session/route_client-reference-manifest.js +1 -1
  47. package/_standalone/.next/server/app/api/agent-activity/route.js +1 -1
  48. package/_standalone/.next/server/app/api/agent-activity/route.js.nft.json +1 -1
  49. package/_standalone/.next/server/app/api/agent-activity/route_client-reference-manifest.js +1 -1
  50. package/_standalone/.next/server/app/api/ask/route.js +137 -99
  51. package/_standalone/.next/server/app/api/ask/route.js.nft.json +1 -1
  52. package/_standalone/.next/server/app/api/ask/route_client-reference-manifest.js +1 -1
  53. package/_standalone/.next/server/app/api/ask-sessions/route_client-reference-manifest.js +1 -1
  54. package/_standalone/.next/server/app/api/auth/route_client-reference-manifest.js +1 -1
  55. package/_standalone/.next/server/app/api/backlinks/route.js +1 -1
  56. package/_standalone/.next/server/app/api/backlinks/route.js.nft.json +1 -1
  57. package/_standalone/.next/server/app/api/backlinks/route_client-reference-manifest.js +1 -1
  58. package/_standalone/.next/server/app/api/bootstrap/route.js +1 -1
  59. package/_standalone/.next/server/app/api/bootstrap/route.js.nft.json +1 -1
  60. package/_standalone/.next/server/app/api/bootstrap/route_client-reference-manifest.js +1 -1
  61. package/_standalone/.next/server/app/api/changes/route.js +1 -1
  62. package/_standalone/.next/server/app/api/changes/route.js.nft.json +1 -1
  63. package/_standalone/.next/server/app/api/changes/route_client-reference-manifest.js +1 -1
  64. package/_standalone/.next/server/app/api/export/route.js +3 -3
  65. package/_standalone/.next/server/app/api/export/route.js.nft.json +1 -1
  66. package/_standalone/.next/server/app/api/export/route_client-reference-manifest.js +1 -1
  67. package/_standalone/.next/server/app/api/extract-pdf/route_client-reference-manifest.js +1 -1
  68. package/_standalone/.next/server/app/api/file/import/route.js +2 -19
  69. package/_standalone/.next/server/app/api/file/import/route.js.nft.json +1 -1
  70. package/_standalone/.next/server/app/api/file/import/route_client-reference-manifest.js +1 -1
  71. package/_standalone/.next/server/app/api/file/route.js +1 -18
  72. package/_standalone/.next/server/app/api/file/route.js.nft.json +1 -1
  73. package/_standalone/.next/server/app/api/file/route_client-reference-manifest.js +1 -1
  74. package/_standalone/.next/server/app/api/files/route.js +1 -1
  75. package/_standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  76. package/_standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  77. package/_standalone/.next/server/app/api/git/route.js +1 -1
  78. package/_standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  79. package/_standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  80. package/_standalone/.next/server/app/api/graph/route.js +1 -1
  81. package/_standalone/.next/server/app/api/graph/route.js.nft.json +1 -1
  82. package/_standalone/.next/server/app/api/graph/route_client-reference-manifest.js +1 -1
  83. package/_standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  84. package/_standalone/.next/server/app/api/inbox/route.js +1 -0
  85. package/_standalone/.next/server/app/api/inbox/route.js.nft.json +1 -0
  86. package/_standalone/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -0
  87. package/_standalone/.next/server/app/api/init/route.js +1 -1
  88. package/_standalone/.next/server/app/api/init/route.js.nft.json +1 -1
  89. package/_standalone/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  90. package/_standalone/.next/server/app/api/mcp/agents/route.js +1 -1
  91. package/_standalone/.next/server/app/api/mcp/agents/route.js.nft.json +1 -1
  92. package/_standalone/.next/server/app/api/mcp/agents/route_client-reference-manifest.js +1 -1
  93. package/_standalone/.next/server/app/api/mcp/install/route.js +1 -1
  94. package/_standalone/.next/server/app/api/mcp/install/route.js.nft.json +1 -1
  95. package/_standalone/.next/server/app/api/mcp/install/route_client-reference-manifest.js +1 -1
  96. package/_standalone/.next/server/app/api/mcp/install-skill/route.js.nft.json +1 -1
  97. package/_standalone/.next/server/app/api/mcp/install-skill/route_client-reference-manifest.js +1 -1
  98. package/_standalone/.next/server/app/api/mcp/restart/route_client-reference-manifest.js +1 -1
  99. package/_standalone/.next/server/app/api/mcp/status/route.js +1 -1
  100. package/_standalone/.next/server/app/api/mcp/status/route.js.nft.json +1 -1
  101. package/_standalone/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
  102. package/_standalone/.next/server/app/api/monitoring/route.js +1 -1
  103. package/_standalone/.next/server/app/api/monitoring/route.js.nft.json +1 -1
  104. package/_standalone/.next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
  105. package/_standalone/.next/server/app/api/recent-files/route.js +1 -1
  106. package/_standalone/.next/server/app/api/recent-files/route.js.nft.json +1 -1
  107. package/_standalone/.next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
  108. package/_standalone/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
  109. package/_standalone/.next/server/app/api/search/route.js +1 -1
  110. package/_standalone/.next/server/app/api/search/route.js.nft.json +1 -1
  111. package/_standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  112. package/_standalone/.next/server/app/api/settings/list-models/route.js +1 -1
  113. package/_standalone/.next/server/app/api/settings/list-models/route.js.nft.json +1 -1
  114. package/_standalone/.next/server/app/api/settings/list-models/route_client-reference-manifest.js +1 -1
  115. package/_standalone/.next/server/app/api/settings/reset-token/route.js +1 -1
  116. package/_standalone/.next/server/app/api/settings/reset-token/route.js.nft.json +1 -1
  117. package/_standalone/.next/server/app/api/settings/reset-token/route_client-reference-manifest.js +1 -1
  118. package/_standalone/.next/server/app/api/settings/route.js +1 -1
  119. package/_standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
  120. package/_standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  121. package/_standalone/.next/server/app/api/settings/test-key/route.js +1 -1
  122. package/_standalone/.next/server/app/api/settings/test-key/route.js.nft.json +1 -1
  123. package/_standalone/.next/server/app/api/settings/test-key/route_client-reference-manifest.js +1 -1
  124. package/_standalone/.next/server/app/api/setup/check-path/route_client-reference-manifest.js +1 -1
  125. package/_standalone/.next/server/app/api/setup/check-port/route_client-reference-manifest.js +1 -1
  126. package/_standalone/.next/server/app/api/setup/generate-token/route_client-reference-manifest.js +1 -1
  127. package/_standalone/.next/server/app/api/setup/ls/route_client-reference-manifest.js +1 -1
  128. package/_standalone/.next/server/app/api/setup/route.js +1 -1
  129. package/_standalone/.next/server/app/api/setup/route.js.nft.json +1 -1
  130. package/_standalone/.next/server/app/api/setup/route_client-reference-manifest.js +1 -1
  131. package/_standalone/.next/server/app/api/skills/route.js +2 -2
  132. package/_standalone/.next/server/app/api/skills/route.js.nft.json +1 -1
  133. package/_standalone/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  134. package/_standalone/.next/server/app/api/sync/route.js +1 -1
  135. package/_standalone/.next/server/app/api/sync/route_client-reference-manifest.js +1 -1
  136. package/_standalone/.next/server/app/api/tree-version/route.js +1 -1
  137. package/_standalone/.next/server/app/api/tree-version/route.js.nft.json +1 -1
  138. package/_standalone/.next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
  139. package/_standalone/.next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
  140. package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  141. package/_standalone/.next/server/app/api/update-check/route.js +1 -1
  142. package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
  143. package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
  144. package/_standalone/.next/server/app/api/workflows/route.js +2 -2
  145. package/_standalone/.next/server/app/api/workflows/route.js.nft.json +1 -1
  146. package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
  147. package/_standalone/.next/server/app/changes/page.js +2 -2
  148. package/_standalone/.next/server/app/changes/page.js.nft.json +1 -1
  149. package/_standalone/.next/server/app/changes/page_client-reference-manifest.js +1 -1
  150. package/_standalone/.next/server/app/echo/[segment]/page.js +6 -6
  151. package/_standalone/.next/server/app/echo/[segment]/page.js.nft.json +1 -1
  152. package/_standalone/.next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
  153. package/_standalone/.next/server/app/echo/page.js +2 -2
  154. package/_standalone/.next/server/app/echo/page.js.nft.json +1 -1
  155. package/_standalone/.next/server/app/echo/page_client-reference-manifest.js +1 -1
  156. package/_standalone/.next/server/app/explore/page.js +3 -3
  157. package/_standalone/.next/server/app/explore/page.js.nft.json +1 -1
  158. package/_standalone/.next/server/app/explore/page_client-reference-manifest.js +1 -1
  159. package/_standalone/.next/server/app/help/page.js +2 -2
  160. package/_standalone/.next/server/app/help/page.js.nft.json +1 -1
  161. package/_standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
  162. package/_standalone/.next/server/app/login/page.js +2 -2
  163. package/_standalone/.next/server/app/login/page.js.nft.json +1 -1
  164. package/_standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  165. package/_standalone/.next/server/app/page.js +3 -3
  166. package/_standalone/.next/server/app/page.js.nft.json +1 -1
  167. package/_standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  168. package/_standalone/.next/server/app/setup/page.js +2 -2
  169. package/_standalone/.next/server/app/setup/page.js.nft.json +1 -1
  170. package/_standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  171. package/_standalone/.next/server/app/trash/page.js +3 -3
  172. package/_standalone/.next/server/app/trash/page.js.nft.json +1 -1
  173. package/_standalone/.next/server/app/trash/page_client-reference-manifest.js +1 -1
  174. package/_standalone/.next/server/app/view/[...path]/page.js +4 -4
  175. package/_standalone/.next/server/app/view/[...path]/page.js.nft.json +1 -1
  176. package/_standalone/.next/server/app/view/[...path]/page_client-reference-manifest.js +1 -1
  177. package/_standalone/.next/server/app-paths-manifest.json +19 -18
  178. package/_standalone/.next/server/chunks/1550.js +1 -1
  179. package/_standalone/.next/server/chunks/1750.js +1 -0
  180. package/_standalone/.next/server/chunks/{9414.js → 2190.js} +1 -1
  181. package/_standalone/.next/server/chunks/2536.js +52 -0
  182. package/_standalone/.next/server/chunks/5648.js +2 -0
  183. package/_standalone/.next/server/chunks/6539.js +1 -1
  184. package/_standalone/.next/server/chunks/8388.js +15 -0
  185. package/_standalone/.next/server/chunks/953.js +42 -2
  186. package/_standalone/.next/server/chunks/9539.js +219 -0
  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/pages/500.html +2 -2
  192. package/_standalone/.next/server/server-reference-manifest.js +1 -1
  193. package/_standalone/.next/server/server-reference-manifest.json +1 -1
  194. package/_standalone/.next/static/Ij3PFh-a0zi5K_ANoSAW0/_buildManifest.js +1 -0
  195. package/_standalone/.next/static/chunks/1053-b70535785cc5aaee.js +29 -0
  196. package/_standalone/.next/static/chunks/1239.10a0710c2772ab34.js +1 -0
  197. package/_standalone/.next/static/chunks/{1814.e2da5460ded71d71.js → 1814.2ee1d03297c0bccd.js} +1 -1
  198. package/_standalone/.next/static/chunks/{1384-55276d40a9da4e88.js → 1880-c2a9e76201841c86.js} +2 -2
  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.0541ac2d0ea7de1f.js +1 -0
  205. package/_standalone/.next/static/chunks/4033.6666700547b20141.js +1 -0
  206. package/_standalone/.next/static/chunks/4563-b2a2ce80aff845af.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/6357-c645842834c0d4cd.js +1 -0
  211. package/_standalone/.next/static/chunks/6826.7b7d94dd0fd83812.js +1 -0
  212. package/_standalone/.next/static/chunks/{8409-de5726a4a278d28f.js → 6926-4af497b83952fa87.js} +1 -1
  213. package/_standalone/.next/static/chunks/6981-3d7dcac2d12a5670.js +1 -0
  214. package/_standalone/.next/static/chunks/7144-5febf62f1a79fe64.js +1 -0
  215. package/_standalone/.next/static/chunks/7266-bb7be1128eccd48e.js +13 -0
  216. package/_standalone/.next/static/chunks/7753.63831cfc54a55fbb.js +1 -0
  217. package/_standalone/.next/static/chunks/862.9f526e964489e2e5.js +1 -0
  218. package/_standalone/.next/static/chunks/9300.118b8c840634383f.js +28 -0
  219. package/_standalone/.next/static/chunks/95247769.3b5caae1c1a76ce1.js +4 -0
  220. package/_standalone/.next/static/chunks/9602-423291fdb36396d1.js +1 -0
  221. package/_standalone/.next/static/chunks/app/.well-known/agent-card.json/route-400c3c09b1540c14.js +1 -0
  222. package/_standalone/.next/static/chunks/app/_global-error/page-400c3c09b1540c14.js +1 -0
  223. package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-773071a99c4daac2.js +1 -0
  224. package/_standalone/.next/static/chunks/app/agents/page-6102a884b2cb3cfe.js +5 -0
  225. package/_standalone/.next/static/chunks/app/api/a2a/agents/route-400c3c09b1540c14.js +1 -0
  226. package/_standalone/.next/static/chunks/app/api/a2a/delegations/route-400c3c09b1540c14.js +1 -0
  227. package/_standalone/.next/static/chunks/app/api/a2a/discover/route-400c3c09b1540c14.js +1 -0
  228. package/_standalone/.next/static/chunks/app/api/a2a/route-400c3c09b1540c14.js +1 -0
  229. package/_standalone/.next/static/chunks/app/api/acp/config/route-400c3c09b1540c14.js +1 -0
  230. package/_standalone/.next/static/chunks/app/api/acp/detect/route-400c3c09b1540c14.js +1 -0
  231. package/_standalone/.next/static/chunks/app/api/acp/install/route-400c3c09b1540c14.js +1 -0
  232. package/_standalone/.next/static/chunks/app/api/acp/registry/route-400c3c09b1540c14.js +1 -0
  233. package/_standalone/.next/static/chunks/app/api/acp/session/route-400c3c09b1540c14.js +1 -0
  234. package/_standalone/.next/static/chunks/app/api/agent-activity/route-400c3c09b1540c14.js +1 -0
  235. package/_standalone/.next/static/chunks/app/api/ask/route-400c3c09b1540c14.js +1 -0
  236. package/_standalone/.next/static/chunks/app/api/ask-sessions/route-400c3c09b1540c14.js +1 -0
  237. package/_standalone/.next/static/chunks/app/api/auth/route-400c3c09b1540c14.js +1 -0
  238. package/_standalone/.next/static/chunks/app/api/backlinks/route-400c3c09b1540c14.js +1 -0
  239. package/_standalone/.next/static/chunks/app/api/bootstrap/route-400c3c09b1540c14.js +1 -0
  240. package/_standalone/.next/static/chunks/app/api/changes/route-400c3c09b1540c14.js +1 -0
  241. package/_standalone/.next/static/chunks/app/api/export/route-400c3c09b1540c14.js +1 -0
  242. package/_standalone/.next/static/chunks/app/api/extract-pdf/route-400c3c09b1540c14.js +1 -0
  243. package/_standalone/.next/static/chunks/app/api/file/import/route-400c3c09b1540c14.js +1 -0
  244. package/_standalone/.next/static/chunks/app/api/file/route-400c3c09b1540c14.js +1 -0
  245. package/_standalone/.next/static/chunks/app/api/files/route-400c3c09b1540c14.js +1 -0
  246. package/_standalone/.next/static/chunks/app/api/git/route-400c3c09b1540c14.js +1 -0
  247. package/_standalone/.next/static/chunks/app/api/graph/route-400c3c09b1540c14.js +1 -0
  248. package/_standalone/.next/static/chunks/app/api/health/route-400c3c09b1540c14.js +1 -0
  249. package/_standalone/.next/static/chunks/app/api/inbox/route-400c3c09b1540c14.js +1 -0
  250. package/_standalone/.next/static/chunks/app/api/init/route-400c3c09b1540c14.js +1 -0
  251. package/_standalone/.next/static/chunks/app/api/mcp/agents/route-400c3c09b1540c14.js +1 -0
  252. package/_standalone/.next/static/chunks/app/api/mcp/install/route-400c3c09b1540c14.js +1 -0
  253. package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-400c3c09b1540c14.js +1 -0
  254. package/_standalone/.next/static/chunks/app/api/mcp/restart/route-400c3c09b1540c14.js +1 -0
  255. package/_standalone/.next/static/chunks/app/api/mcp/status/route-400c3c09b1540c14.js +1 -0
  256. package/_standalone/.next/static/chunks/app/api/monitoring/route-400c3c09b1540c14.js +1 -0
  257. package/_standalone/.next/static/chunks/app/api/recent-files/route-400c3c09b1540c14.js +1 -0
  258. package/_standalone/.next/static/chunks/app/api/restart/route-400c3c09b1540c14.js +1 -0
  259. package/_standalone/.next/static/chunks/app/api/search/route-400c3c09b1540c14.js +1 -0
  260. package/_standalone/.next/static/chunks/app/api/settings/list-models/route-400c3c09b1540c14.js +1 -0
  261. package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-400c3c09b1540c14.js +1 -0
  262. package/_standalone/.next/static/chunks/app/api/settings/route-400c3c09b1540c14.js +1 -0
  263. package/_standalone/.next/static/chunks/app/api/settings/test-key/route-400c3c09b1540c14.js +1 -0
  264. package/_standalone/.next/static/chunks/app/api/setup/check-path/route-400c3c09b1540c14.js +1 -0
  265. package/_standalone/.next/static/chunks/app/api/setup/check-port/route-400c3c09b1540c14.js +1 -0
  266. package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-400c3c09b1540c14.js +1 -0
  267. package/_standalone/.next/static/chunks/app/api/setup/ls/route-400c3c09b1540c14.js +1 -0
  268. package/_standalone/.next/static/chunks/app/api/setup/route-400c3c09b1540c14.js +1 -0
  269. package/_standalone/.next/static/chunks/app/api/skills/route-400c3c09b1540c14.js +1 -0
  270. package/_standalone/.next/static/chunks/app/api/sync/route-400c3c09b1540c14.js +1 -0
  271. package/_standalone/.next/static/chunks/app/api/tree-version/route-400c3c09b1540c14.js +1 -0
  272. package/_standalone/.next/static/chunks/app/api/uninstall/route-400c3c09b1540c14.js +1 -0
  273. package/_standalone/.next/static/chunks/app/api/update/route-400c3c09b1540c14.js +1 -0
  274. package/_standalone/.next/static/chunks/app/api/update-check/route-400c3c09b1540c14.js +1 -0
  275. package/_standalone/.next/static/chunks/app/api/update-status/route-400c3c09b1540c14.js +1 -0
  276. package/_standalone/.next/static/chunks/app/api/workflows/route-400c3c09b1540c14.js +1 -0
  277. package/_standalone/.next/static/chunks/app/changes/page-350992cf5091bc5b.js +1 -0
  278. package/_standalone/.next/static/chunks/app/echo/[segment]/page-addf014fcf23fad5.js +11 -0
  279. package/_standalone/.next/static/chunks/app/echo/page-400c3c09b1540c14.js +1 -0
  280. package/_standalone/.next/static/chunks/app/explore/page-5eb2835e9e3ab4bb.js +4 -0
  281. package/_standalone/.next/static/chunks/app/help/page-2325d25b6846ca07.js +1 -0
  282. package/_standalone/.next/static/chunks/app/layout-42cdbce19f404567.js +186 -0
  283. package/_standalone/.next/static/chunks/app/login/page-24236460fa7c11d0.js +1 -0
  284. package/_standalone/.next/static/chunks/app/page-8c9643b649e01735.js +7 -0
  285. package/_standalone/.next/static/chunks/app/setup/page-d158b8cb533feb1e.js +1 -0
  286. package/_standalone/.next/static/chunks/app/trash/page-e9ab74ffeb96af41.js +1 -0
  287. package/_standalone/.next/static/chunks/app/view/[...path]/loading-400c3c09b1540c14.js +1 -0
  288. package/_standalone/.next/static/chunks/app/view/[...path]/not-found-61474670d6bb6116.js +1 -0
  289. package/_standalone/.next/static/chunks/app/view/[...path]/page-764a69a1c8bd4eef.js +12 -0
  290. package/_standalone/.next/static/chunks/e71f6c19-4df85185bf989b49.js +1 -0
  291. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-400c3c09b1540c14.js +1 -0
  292. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-400c3c09b1540c14.js +1 -0
  293. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-400c3c09b1540c14.js +1 -0
  294. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-400c3c09b1540c14.js +1 -0
  295. package/_standalone/.next/static/chunks/webpack-7b276daaa930d480.js +1 -0
  296. package/_standalone/.next/static/css/bc9179074eaf65ae.css +1 -0
  297. package/_standalone/.next/trace +63 -53
  298. package/_standalone/.next/types/routes.d.ts +2 -1
  299. package/_standalone/.next/types/validator.ts +9 -0
  300. package/_standalone/__tests__/agent/chat-mode.test.ts +103 -0
  301. package/_standalone/__tests__/agents/agents-content-dashboard.test.tsx +4 -3
  302. package/_standalone/__tests__/api/bootstrap.test.ts +0 -2
  303. package/_standalone/__tests__/api/file.test.ts +22 -1
  304. package/_standalone/__tests__/api/install-skill.test.ts +2 -2
  305. package/_standalone/__tests__/api/mcp-install.test.ts +32 -10
  306. package/_standalone/__tests__/api/setup.test.ts +2 -2
  307. package/_standalone/__tests__/api/test-key.test.ts +73 -147
  308. package/_standalone/__tests__/ask/ask-content-input-during-run.test.tsx +1 -1
  309. package/_standalone/__tests__/ask/mode-capsule.test.ts +95 -0
  310. package/_standalone/__tests__/cli/agent-routing.test.ts +232 -0
  311. package/_standalone/__tests__/cli/file-subcommands.test.ts +379 -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 +8 -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 +66 -80
  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 +41 -16
  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 +88 -22
  345. package/_standalone/components/SearchModal.tsx +1 -1
  346. package/_standalone/components/Sidebar.tsx +4 -4
  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 +10 -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/todo/TodoRenderer.tsx +489 -75
  389. package/_standalone/components/settings/AiTab.tsx +198 -127
  390. package/_standalone/components/settings/AppearanceTab.tsx +48 -50
  391. package/_standalone/components/settings/KnowledgeTab.tsx +92 -27
  392. package/_standalone/components/settings/McpAgentInstall.tsx +95 -28
  393. package/_standalone/components/settings/McpSkillsSection.tsx +2 -2
  394. package/_standalone/components/settings/McpTab.tsx +498 -216
  395. package/_standalone/components/settings/PluginsTab.tsx +1 -1
  396. package/_standalone/components/settings/SettingsContent.tsx +17 -8
  397. package/_standalone/components/settings/SyncTab.tsx +615 -230
  398. package/_standalone/components/settings/UninstallTab.tsx +1 -1
  399. package/_standalone/components/settings/UpdateTab.tsx +2 -2
  400. package/_standalone/components/settings/types.ts +7 -5
  401. package/_standalone/components/setup/StepAI.tsx +70 -49
  402. package/_standalone/components/setup/StepAgents.tsx +113 -47
  403. package/_standalone/components/setup/StepDots.tsx +1 -1
  404. package/_standalone/components/setup/StepReview.tsx +186 -31
  405. package/_standalone/components/setup/types.ts +17 -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 +93 -93
  411. package/_standalone/data/skills/mindos/references/write-supplement.md +119 -0
  412. package/_standalone/data/skills/mindos-zh/SKILL.md +100 -104
  413. package/_standalone/data/skills/mindos-zh/references/write-supplement.md +119 -0
  414. package/_standalone/hooks/useAcpDetection.ts +1 -1
  415. package/_standalone/hooks/useAskChat.ts +248 -0
  416. package/_standalone/hooks/useAskPanel.ts +24 -4
  417. package/_standalone/hooks/useAskSession.ts +15 -0
  418. package/_standalone/lib/acp/types.ts +1 -1
  419. package/_standalone/lib/api.ts +3 -1
  420. package/_standalone/lib/core/types.ts +2 -0
  421. package/_standalone/lib/i18n/modules/ai-chat.ts +35 -13
  422. package/_standalone/lib/i18n/modules/features.ts +5 -5
  423. package/_standalone/lib/i18n/modules/knowledge.ts +86 -2
  424. package/_standalone/lib/i18n/modules/navigation.ts +6 -2
  425. package/_standalone/lib/i18n/modules/onboarding.ts +69 -29
  426. package/_standalone/lib/i18n/modules/panels.ts +78 -29
  427. package/_standalone/lib/i18n/modules/settings.ts +280 -24
  428. package/_standalone/lib/inbox-upload.ts +93 -0
  429. package/_standalone/lib/mcp-snippets.ts +5 -1
  430. package/_standalone/lib/settings-ai-client.ts +13 -12
  431. package/_standalone/lib/space-ai-init.ts +66 -0
  432. package/_standalone/lib/stores/McpStoreInit.tsx +18 -0
  433. package/_standalone/lib/stores/WalkthroughInit.tsx +20 -0
  434. package/_standalone/lib/stores/locale-store.ts +55 -0
  435. package/_standalone/lib/stores/mcp-store.ts +156 -0
  436. package/_standalone/lib/stores/walkthrough-store.ts +118 -0
  437. package/_standalone/package-lock.json +40 -8
  438. package/_standalone/package.json +3 -1
  439. package/_standalone/tsconfig.json +1 -1
  440. package/_standalone/tsconfig.tsbuildinfo +1 -1
  441. package/app/app/api/acp/detect/route.ts +29 -20
  442. package/app/app/api/agent-activity/route.ts +1 -1
  443. package/app/app/api/ask/route.ts +105 -30
  444. package/app/app/api/ask-sessions/route.ts +1 -0
  445. package/app/app/api/bootstrap/route.ts +1 -3
  446. package/app/app/api/file/route.ts +34 -4
  447. package/app/app/api/inbox/route.ts +61 -0
  448. package/app/app/api/mcp/install/route.ts +2 -1
  449. package/app/app/api/mcp/status/route.ts +14 -6
  450. package/app/app/api/settings/list-models/route.ts +73 -53
  451. package/app/app/api/settings/route.ts +46 -55
  452. package/app/app/api/settings/test-key/route.ts +57 -114
  453. package/app/app/api/setup/route.ts +31 -21
  454. package/app/app/api/sync/route.ts +122 -12
  455. package/app/app/api/update-check/route.ts +2 -2
  456. package/app/app/globals.css +11 -1
  457. package/app/app/layout.tsx +2 -3
  458. package/app/app/login/page.tsx +1 -1
  459. package/app/app/view/[...path]/ViewPageClient.tsx +22 -37
  460. package/app/app/view/[...path]/not-found.tsx +1 -1
  461. package/app/components/ActivityBar.tsx +26 -10
  462. package/app/components/AskFab.tsx +1 -1
  463. package/app/components/AskModal.tsx +1 -1
  464. package/app/components/Backlinks.tsx +1 -1
  465. package/app/components/CreateSpaceModal.tsx +7 -55
  466. package/app/components/DirView.tsx +93 -11
  467. package/app/components/EchoSpotlight.tsx +1 -1
  468. package/app/components/ExportModal.tsx +1 -1
  469. package/app/components/FileTree.tsx +66 -80
  470. package/app/components/FindInPage.tsx +1 -1
  471. package/app/components/GuideCard.tsx +1 -1
  472. package/app/components/HomeContent.tsx +21 -14
  473. package/app/components/ImportModal.tsx +1 -1
  474. package/app/components/KeyboardShortcuts.tsx +1 -1
  475. package/app/components/MarkdownView.tsx +41 -16
  476. package/app/components/OnboardingView.tsx +1 -1
  477. package/app/components/OrganizeToast.tsx +1 -1
  478. package/app/components/Panel.tsx +82 -4
  479. package/app/components/QuickSuggestion.tsx +1 -1
  480. package/app/components/RightAgentDetailPanel.tsx +2 -2
  481. package/app/components/RightAskPanel.tsx +88 -22
  482. package/app/components/SearchModal.tsx +1 -1
  483. package/app/components/Sidebar.tsx +4 -4
  484. package/app/components/SidebarLayout.tsx +52 -16
  485. package/app/components/SpaceInitToast.tsx +1 -1
  486. package/app/components/SyncStatusBar.tsx +2 -2
  487. package/app/components/SystemPulse.tsx +12 -6
  488. package/app/components/TableOfContents.tsx +86 -39
  489. package/app/components/TrashPageClient.tsx +1 -1
  490. package/app/components/UpdateOverlay.tsx +2 -2
  491. package/app/components/agents/AgentActivitySection.tsx +225 -0
  492. package/app/components/agents/AgentDetailContent.tsx +234 -3
  493. package/app/components/agents/AgentsContentPage.tsx +13 -2
  494. package/app/components/agents/AgentsMcpSection.tsx +10 -16
  495. package/app/components/agents/AgentsOverviewSection.tsx +28 -27
  496. package/app/components/agents/AgentsPanelA2aTab.tsx +1 -1
  497. package/app/components/agents/AgentsPanelSessionsTab.tsx +6 -1
  498. package/app/components/agents/AgentsSkillsSection.tsx +1 -1
  499. package/app/components/agents/DiscoverAgentModal.tsx +1 -1
  500. package/app/components/agents/RecentActivityFeed.tsx +49 -88
  501. package/app/components/agents/agent-activity-shared.tsx +110 -0
  502. package/app/components/agents/agents-content-model.ts +2 -2
  503. package/app/components/ask/AgentSelectorCapsule.tsx +1 -1
  504. package/app/components/ask/AskContent.tsx +332 -486
  505. package/app/components/ask/AskHeader.tsx +61 -0
  506. package/app/components/ask/FileChip.tsx +9 -5
  507. package/app/components/ask/MessageList.tsx +88 -21
  508. package/app/components/ask/ModeCapsule.tsx +180 -0
  509. package/app/components/ask/ProviderModelCapsule.tsx +284 -0
  510. package/app/components/ask/SessionHistory.tsx +63 -10
  511. package/app/components/ask/SessionTabBar.tsx +1 -1
  512. package/app/components/ask/ThinkingBlock.tsx +1 -1
  513. package/app/components/ask/ToolCallBlock.tsx +28 -24
  514. package/app/components/changes/ChangesBanner.tsx +1 -1
  515. package/app/components/changes/ChangesContentPage.tsx +1 -1
  516. package/app/components/echo/EchoInsightCollapsible.tsx +1 -1
  517. package/app/components/echo/EchoSegmentNav.tsx +1 -1
  518. package/app/components/echo/EchoSegmentPageClient.tsx +1 -1
  519. package/app/components/explore/ExploreContent.tsx +1 -1
  520. package/app/components/help/HelpContent.tsx +2 -1
  521. package/app/components/home/InboxSection.tsx +268 -0
  522. package/app/components/panels/AgentsPanel.tsx +3 -2
  523. package/app/components/panels/AgentsPanelHubNav.tsx +2 -6
  524. package/app/components/panels/DiscoverPanel.tsx +1 -1
  525. package/app/components/panels/EchoPanel.tsx +1 -1
  526. package/app/components/panels/EchoSidebarStats.tsx +1 -1
  527. package/app/components/panels/ImportHistoryPanel.tsx +1 -1
  528. package/app/components/panels/PanelHeader.tsx +1 -1
  529. package/app/components/panels/PluginsPanel.tsx +1 -1
  530. package/app/components/panels/SearchPanel.tsx +5 -2
  531. package/app/components/panels/SyncPopover.tsx +1 -1
  532. package/app/components/panels/WorkflowsPanel.tsx +1 -1
  533. package/app/components/renderers/agent-inspector/AgentInspectorRenderer.tsx +18 -0
  534. package/app/components/renderers/todo/TodoRenderer.tsx +489 -75
  535. package/app/components/settings/AiTab.tsx +198 -127
  536. package/app/components/settings/AppearanceTab.tsx +48 -50
  537. package/app/components/settings/KnowledgeTab.tsx +92 -27
  538. package/app/components/settings/McpAgentInstall.tsx +95 -28
  539. package/app/components/settings/McpSkillsSection.tsx +2 -2
  540. package/app/components/settings/McpTab.tsx +498 -216
  541. package/app/components/settings/PluginsTab.tsx +1 -1
  542. package/app/components/settings/SettingsContent.tsx +17 -8
  543. package/app/components/settings/SyncTab.tsx +615 -230
  544. package/app/components/settings/UninstallTab.tsx +1 -1
  545. package/app/components/settings/UpdateTab.tsx +2 -2
  546. package/app/components/settings/types.ts +7 -5
  547. package/app/components/setup/StepAI.tsx +70 -49
  548. package/app/components/setup/StepAgents.tsx +113 -47
  549. package/app/components/setup/StepDots.tsx +1 -1
  550. package/app/components/setup/StepReview.tsx +186 -31
  551. package/app/components/setup/index.tsx +83 -48
  552. package/app/components/setup/types.ts +17 -8
  553. package/app/components/shared/ProviderSelect.tsx +134 -0
  554. package/app/components/walkthrough/WalkthroughOverlay.tsx +2 -2
  555. package/app/components/walkthrough/WalkthroughTooltip.tsx +2 -2
  556. package/app/components/walkthrough/index.ts +1 -1
  557. package/app/data/skills/mindos/SKILL.md +93 -93
  558. package/app/data/skills/mindos/references/write-supplement.md +119 -0
  559. package/app/data/skills/mindos-zh/SKILL.md +100 -104
  560. package/app/data/skills/mindos-zh/references/write-supplement.md +119 -0
  561. package/app/hooks/useAcpDetection.ts +1 -1
  562. package/app/hooks/useAskChat.ts +248 -0
  563. package/app/hooks/useAskPanel.ts +24 -4
  564. package/app/hooks/useAskSession.ts +15 -0
  565. package/app/lib/acp/types.ts +1 -1
  566. package/app/lib/actions.ts +13 -0
  567. package/app/lib/agent/log.ts +2 -0
  568. package/app/lib/agent/model.ts +69 -81
  569. package/app/lib/agent/prompt.ts +27 -0
  570. package/app/lib/agent/providers.ts +299 -0
  571. package/app/lib/agent/tools.ts +26 -4
  572. package/app/lib/api.ts +3 -1
  573. package/app/lib/core/agent-audit-log.ts +7 -0
  574. package/app/lib/core/fs-ops.ts +9 -4
  575. package/app/lib/core/inbox.ts +181 -0
  576. package/app/lib/core/index.ts +4 -0
  577. package/app/lib/core/tree.ts +3 -0
  578. package/app/lib/core/types.ts +2 -0
  579. package/app/lib/fs.ts +20 -2
  580. package/app/lib/i18n/modules/ai-chat.ts +35 -13
  581. package/app/lib/i18n/modules/features.ts +5 -5
  582. package/app/lib/i18n/modules/knowledge.ts +86 -2
  583. package/app/lib/i18n/modules/navigation.ts +6 -2
  584. package/app/lib/i18n/modules/onboarding.ts +69 -29
  585. package/app/lib/i18n/modules/panels.ts +78 -29
  586. package/app/lib/i18n/modules/settings.ts +280 -24
  587. package/app/lib/inbox-upload.ts +93 -0
  588. package/app/lib/mcp-agents.ts +7 -9
  589. package/app/lib/mcp-snippets.ts +5 -1
  590. package/app/lib/settings-ai-client.ts +13 -12
  591. package/app/lib/settings.ts +48 -33
  592. package/app/lib/space-ai-init.ts +66 -0
  593. package/app/lib/stores/LocaleStoreInit.tsx +18 -0
  594. package/app/lib/stores/McpStoreInit.tsx +18 -0
  595. package/app/lib/stores/WalkthroughInit.tsx +20 -0
  596. package/app/lib/stores/locale-store.ts +55 -0
  597. package/app/lib/stores/mcp-store.ts +156 -0
  598. package/app/lib/stores/walkthrough-store.ts +118 -0
  599. package/app/lib/types.ts +20 -0
  600. package/app/package.json +3 -1
  601. package/app/tsconfig.json +1 -1
  602. package/bin/cli.js +168 -1385
  603. package/bin/commands/agent.js +156 -20
  604. package/bin/commands/api.js +14 -11
  605. package/bin/commands/ask.js +79 -68
  606. package/bin/commands/build.js +26 -0
  607. package/bin/commands/config.js +170 -0
  608. package/bin/commands/dev.js +58 -0
  609. package/bin/commands/doctor.js +205 -0
  610. package/bin/commands/file.js +558 -40
  611. package/bin/commands/gateway.js +42 -0
  612. package/bin/commands/init-skills.js +56 -0
  613. package/bin/commands/logs.js +32 -0
  614. package/bin/commands/mcp-cmd.js +57 -0
  615. package/bin/commands/onboard.js +25 -0
  616. package/bin/commands/open.js +41 -0
  617. package/bin/commands/restart.js +48 -0
  618. package/bin/commands/search.js +16 -14
  619. package/bin/commands/space.js +100 -25
  620. package/bin/commands/start.js +262 -0
  621. package/bin/commands/status.js +2 -2
  622. package/bin/commands/stop.js +14 -0
  623. package/bin/commands/sync-cmd.js +134 -0
  624. package/bin/commands/token.js +98 -0
  625. package/bin/commands/uninstall.js +154 -0
  626. package/bin/commands/update.js +286 -0
  627. package/bin/lib/build.js +1 -1
  628. package/bin/lib/colors.js +8 -7
  629. package/bin/lib/command.js +37 -96
  630. package/bin/lib/config.js +5 -0
  631. package/bin/lib/csv.js +19 -0
  632. package/bin/lib/jsonc.js +12 -0
  633. package/bin/lib/markdown.js +69 -0
  634. package/bin/lib/mcp-agents.js +27 -8
  635. package/bin/lib/mcp-build.js +1 -1
  636. package/bin/lib/mcp-install.js +13 -4
  637. package/bin/lib/one-shot.js +88 -0
  638. package/bin/lib/path-expand.js +9 -0
  639. package/bin/lib/remote.js +65 -0
  640. package/bin/lib/repl.js +167 -0
  641. package/bin/lib/{utils.js → shell.js} +10 -26
  642. package/bin/lib/skill-check.js +1 -1
  643. package/bin/lib/sse-stream.js +167 -0
  644. package/bin/lib/sync.js +140 -34
  645. package/mcp/README.md +2 -2
  646. package/mcp/dist/index.cjs +43 -43
  647. package/mcp/package.json +1 -1
  648. package/mcp/src/index.ts +77 -61
  649. package/package.json +2 -2
  650. package/scripts/setup.js +183 -121
  651. package/skills/mindos/SKILL.md +93 -93
  652. package/skills/mindos/references/preference-capture.md +4 -4
  653. package/skills/mindos/references/write-supplement.md +2 -2
  654. package/skills/mindos-zh/SKILL.md +100 -104
  655. package/skills/mindos-zh/references/preference-capture.md +4 -4
  656. package/skills/mindos-zh/references/write-supplement.md +2 -2
  657. package/templates/empty/INSTRUCTION.md +0 -1
  658. package/templates/en/INSTRUCTION.md +0 -1
  659. package/templates/template-generation-skill.md +0 -1
  660. package/templates/zh/INSTRUCTION.md +0 -1
  661. package/_standalone/.next/server/chunks/1473.js +0 -52
  662. package/_standalone/.next/server/chunks/248.js +0 -15
  663. package/_standalone/.next/server/chunks/359.js +0 -2
  664. package/_standalone/.next/server/chunks/4931.js +0 -202
  665. package/_standalone/.next/server/chunks/7670.js +0 -1
  666. package/_standalone/.next/static/chunks/1038-ed04d6651ec92312.js +0 -1
  667. package/_standalone/.next/static/chunks/1263-6df1734e4273adb1.js +0 -25
  668. package/_standalone/.next/static/chunks/275-ebcaaedabe706903.js +0 -1
  669. package/_standalone/.next/static/chunks/3637.4bcd01a4db78b894.js +0 -1
  670. package/_standalone/.next/static/chunks/5637-b97c869adf70c82e.js +0 -1
  671. package/_standalone/.next/static/chunks/5681-a53362a1cd629dc6.js +0 -1
  672. package/_standalone/.next/static/chunks/9602-35ca17b688f1a4fe.js +0 -1
  673. package/_standalone/.next/static/chunks/9670-d59e4d45ed705f58.js +0 -6
  674. package/_standalone/.next/static/chunks/app/.well-known/agent-card.json/route-d4762cc48529e566.js +0 -1
  675. package/_standalone/.next/static/chunks/app/_global-error/page-d4762cc48529e566.js +0 -1
  676. package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-519d4da1142db5ef.js +0 -1
  677. package/_standalone/.next/static/chunks/app/agents/page-b709cf3103321609.js +0 -5
  678. package/_standalone/.next/static/chunks/app/api/a2a/agents/route-d4762cc48529e566.js +0 -1
  679. package/_standalone/.next/static/chunks/app/api/a2a/delegations/route-d4762cc48529e566.js +0 -1
  680. package/_standalone/.next/static/chunks/app/api/a2a/discover/route-d4762cc48529e566.js +0 -1
  681. package/_standalone/.next/static/chunks/app/api/a2a/route-d4762cc48529e566.js +0 -1
  682. package/_standalone/.next/static/chunks/app/api/acp/config/route-d4762cc48529e566.js +0 -1
  683. package/_standalone/.next/static/chunks/app/api/acp/detect/route-d4762cc48529e566.js +0 -1
  684. package/_standalone/.next/static/chunks/app/api/acp/install/route-d4762cc48529e566.js +0 -1
  685. package/_standalone/.next/static/chunks/app/api/acp/registry/route-d4762cc48529e566.js +0 -1
  686. package/_standalone/.next/static/chunks/app/api/acp/session/route-d4762cc48529e566.js +0 -1
  687. package/_standalone/.next/static/chunks/app/api/agent-activity/route-d4762cc48529e566.js +0 -1
  688. package/_standalone/.next/static/chunks/app/api/ask/route-d4762cc48529e566.js +0 -1
  689. package/_standalone/.next/static/chunks/app/api/ask-sessions/route-d4762cc48529e566.js +0 -1
  690. package/_standalone/.next/static/chunks/app/api/auth/route-d4762cc48529e566.js +0 -1
  691. package/_standalone/.next/static/chunks/app/api/backlinks/route-d4762cc48529e566.js +0 -1
  692. package/_standalone/.next/static/chunks/app/api/bootstrap/route-d4762cc48529e566.js +0 -1
  693. package/_standalone/.next/static/chunks/app/api/changes/route-d4762cc48529e566.js +0 -1
  694. package/_standalone/.next/static/chunks/app/api/export/route-d4762cc48529e566.js +0 -1
  695. package/_standalone/.next/static/chunks/app/api/extract-pdf/route-d4762cc48529e566.js +0 -1
  696. package/_standalone/.next/static/chunks/app/api/file/import/route-d4762cc48529e566.js +0 -1
  697. package/_standalone/.next/static/chunks/app/api/file/route-d4762cc48529e566.js +0 -1
  698. package/_standalone/.next/static/chunks/app/api/files/route-d4762cc48529e566.js +0 -1
  699. package/_standalone/.next/static/chunks/app/api/git/route-d4762cc48529e566.js +0 -1
  700. package/_standalone/.next/static/chunks/app/api/graph/route-d4762cc48529e566.js +0 -1
  701. package/_standalone/.next/static/chunks/app/api/health/route-d4762cc48529e566.js +0 -1
  702. package/_standalone/.next/static/chunks/app/api/init/route-d4762cc48529e566.js +0 -1
  703. package/_standalone/.next/static/chunks/app/api/mcp/agents/route-d4762cc48529e566.js +0 -1
  704. package/_standalone/.next/static/chunks/app/api/mcp/install/route-d4762cc48529e566.js +0 -1
  705. package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-d4762cc48529e566.js +0 -1
  706. package/_standalone/.next/static/chunks/app/api/mcp/restart/route-d4762cc48529e566.js +0 -1
  707. package/_standalone/.next/static/chunks/app/api/mcp/status/route-d4762cc48529e566.js +0 -1
  708. package/_standalone/.next/static/chunks/app/api/monitoring/route-d4762cc48529e566.js +0 -1
  709. package/_standalone/.next/static/chunks/app/api/recent-files/route-d4762cc48529e566.js +0 -1
  710. package/_standalone/.next/static/chunks/app/api/restart/route-d4762cc48529e566.js +0 -1
  711. package/_standalone/.next/static/chunks/app/api/search/route-d4762cc48529e566.js +0 -1
  712. package/_standalone/.next/static/chunks/app/api/settings/list-models/route-d4762cc48529e566.js +0 -1
  713. package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-d4762cc48529e566.js +0 -1
  714. package/_standalone/.next/static/chunks/app/api/settings/route-d4762cc48529e566.js +0 -1
  715. package/_standalone/.next/static/chunks/app/api/settings/test-key/route-d4762cc48529e566.js +0 -1
  716. package/_standalone/.next/static/chunks/app/api/setup/check-path/route-d4762cc48529e566.js +0 -1
  717. package/_standalone/.next/static/chunks/app/api/setup/check-port/route-d4762cc48529e566.js +0 -1
  718. package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-d4762cc48529e566.js +0 -1
  719. package/_standalone/.next/static/chunks/app/api/setup/ls/route-d4762cc48529e566.js +0 -1
  720. package/_standalone/.next/static/chunks/app/api/setup/route-d4762cc48529e566.js +0 -1
  721. package/_standalone/.next/static/chunks/app/api/skills/route-d4762cc48529e566.js +0 -1
  722. package/_standalone/.next/static/chunks/app/api/sync/route-d4762cc48529e566.js +0 -1
  723. package/_standalone/.next/static/chunks/app/api/tree-version/route-d4762cc48529e566.js +0 -1
  724. package/_standalone/.next/static/chunks/app/api/uninstall/route-d4762cc48529e566.js +0 -1
  725. package/_standalone/.next/static/chunks/app/api/update/route-d4762cc48529e566.js +0 -1
  726. package/_standalone/.next/static/chunks/app/api/update-check/route-d4762cc48529e566.js +0 -1
  727. package/_standalone/.next/static/chunks/app/api/update-status/route-d4762cc48529e566.js +0 -1
  728. package/_standalone/.next/static/chunks/app/api/workflows/route-d4762cc48529e566.js +0 -1
  729. package/_standalone/.next/static/chunks/app/changes/page-def5210095f8698d.js +0 -1
  730. package/_standalone/.next/static/chunks/app/echo/[segment]/page-be28eff31b1a186e.js +0 -11
  731. package/_standalone/.next/static/chunks/app/echo/page-d4762cc48529e566.js +0 -1
  732. package/_standalone/.next/static/chunks/app/explore/page-e4b8098dca200389.js +0 -4
  733. package/_standalone/.next/static/chunks/app/help/page-d5e57d73d94bad19.js +0 -1
  734. package/_standalone/.next/static/chunks/app/layout-d91cdbe2ecf135e1.js +0 -173
  735. package/_standalone/.next/static/chunks/app/login/page-321875768b70938a.js +0 -1
  736. package/_standalone/.next/static/chunks/app/page-718fdf170428b43c.js +0 -7
  737. package/_standalone/.next/static/chunks/app/setup/page-01ab1f549d636057.js +0 -1
  738. package/_standalone/.next/static/chunks/app/trash/page-89b1430cc8a16f18.js +0 -1
  739. package/_standalone/.next/static/chunks/app/view/[...path]/loading-d4762cc48529e566.js +0 -1
  740. package/_standalone/.next/static/chunks/app/view/[...path]/not-found-f22c513bbc348cc8.js +0 -1
  741. package/_standalone/.next/static/chunks/app/view/[...path]/page-6e3dc47699a01de1.js +0 -12
  742. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-d4762cc48529e566.js +0 -1
  743. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-d4762cc48529e566.js +0 -1
  744. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-d4762cc48529e566.js +0 -1
  745. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-d4762cc48529e566.js +0 -1
  746. package/_standalone/.next/static/chunks/webpack-3489a2b6c2882b0c.js +0 -1
  747. package/_standalone/.next/static/css/f16595bc58a16d5d.css +0 -1
  748. package/_standalone/.next/static/ushZ_NJ8rE3rG5hZfaYOX/_buildManifest.js +0 -1
  749. package/_standalone/components/walkthrough/WalkthroughProvider.tsx +0 -133
  750. package/_standalone/hooks/useMcpData.tsx +0 -169
  751. package/_standalone/lib/i18n-en.ts +0 -2
  752. package/_standalone/lib/i18n-zh.ts +0 -2
  753. package/_standalone/lib/types.ts +0 -70
  754. package/app/components/walkthrough/WalkthroughProvider.tsx +0 -133
  755. package/app/hooks/useMcpData.tsx +0 -169
  756. package/app/lib/LocaleContext.tsx +0 -60
  757. package/app/lib/i18n-en.ts +0 -2
  758. package/app/lib/i18n-zh.ts +0 -2
  759. /package/_standalone/.next/static/{ushZ_NJ8rE3rG5hZfaYOX → Ij3PFh-a0zi5K_ANoSAW0}/_ssgManifest.js +0 -0
@@ -2,164 +2,160 @@
2
2
  name: mindos-zh
3
3
  description: >
4
4
  操作 MindOS 知识库:更新笔记, 搜索知识库, 整理文件, 执行SOP/工作流, 复盘, 追加CSV, 跨Agent交接,
5
- 路由非结构化输入到对应文件, 提炼经验, 同步关联文档.
6
- update notes, search knowledge base, organize, SOP, retrospective, CSV, handoff, route notes, distill experience.
5
+ 路由非结构化输入到对应文件, 提炼经验, 同步关联文档. update notes, search knowledge base, organize,
6
+ SOP, retrospective, CSV, handoff, route notes, distill experience.
7
7
  仅 mindRoot 知识库内任务。不用于:改代码仓库/项目文档/KB 外路径。
8
8
  核心概念:空间、指令(INSTRUCTION.md)、技能(SKILL.md);笔记可承载指令与技能。
9
- 当用户说"帮我记下来"、"搜一下我的笔记"、"更新知识库"、"整理文件"、"执行工作流"、
10
- "记录这次会议的决策"、"追加到表格"、"交接给下一个 Agent" 时触发。
11
- 也适用于:save/record a note, search KB, update/edit files, run SOP, capture decisions,
12
- append CSV rows, cross-agent handoff — 所有 mindRoot 知识库内的读写操作。
13
9
  ---
14
10
 
15
- # MindOS Skill
11
+ # MindOS 技能
16
12
 
17
- <!-- version: 1.3.2 -->
13
+ <!-- version: 3.0.0 — CLI 优先,MCP 可选 -->
18
14
 
19
- **每次任务前,内化这 5 条规则:**
15
+ ## CLI 命令
20
16
 
21
- 1. **bootstrap 目录树是首要索引** 先从目录名和层级推断,再搜索。大多数定位不需要工具调用。
22
- 2. **默认只读。** 只有用户明确要求保存、记录、整理、修改时才调写入工具。查阅/总结/引用 = 不写。
23
- 3. **规则优先级**(越上越优先):用户当轮指令 → `user-skill-rules.md` → 就近目录 `INSTRUCTION.md` → 根 `INSTRUCTION.md` → 本 SKILL 默认。
24
- 4. **多文件编辑必须先出计划。** 展示完整变更清单,确认后再执行。
25
- 5. 增删/移动/重命名后 → **自动同步受影响 README**。
17
+ 使用 `mindos file <子命令>` 完成所有知识库操作。加 `--json` 获取结构化输出。
26
18
 
27
- ---
19
+ | 操作 | 命令 |
20
+ |------|------|
21
+ | 列出文件 | `mindos file list` |
22
+ | 读取文件 | `mindos file read <路径>` |
23
+ | 写入/覆盖 | `mindos file write <路径> --content "..."` |
24
+ | 创建新文件 | `mindos file create <路径> --content "..."` |
25
+ | 追加内容 | `mindos file append <路径> --content "..."` |
26
+ | 编辑段落 | `mindos file edit-section <路径> -H "## 标题" --content "..."` |
27
+ | 标题后插入 | `mindos file insert-heading <路径> -H "## 标题" --content "..."` |
28
+ | 追加 CSV 行 | `mindos file append-csv <路径> --row "列1,列2,列3"` |
29
+ | 删除文件 | `mindos file delete <路径>` |
30
+ | 重命名/移动 | `mindos file rename <旧> <新>` |
31
+ | 搜索 | `mindos search "关键词"` |
32
+ | 反向链接 | `mindos file backlinks <路径>` |
33
+ | 最近文件 | `mindos file recent --limit 10` |
34
+ | Git 历史 | `mindos file history <路径>` |
35
+ | 列出空间 | `mindos space list` |
36
+ | 创建空间 | `mindos space create "名称"` |
37
+
38
+ > **MCP 用户:** 如果只有 MCP 工具(`mindos_*`),直接使用——工具的 schema 已自带说明。有 CLI 时优先用 CLI(更省 token)。
28
39
 
29
- ## 绝对不要(踩坑清单)
40
+ ### CLI 安装
30
41
 
31
- - **绝不写入 KB 根目录**,除非用户明确要求。根目录只放治理文件(`README.md`、`INSTRUCTION.md`、`CONFIG`)。新内容放语义最合适的子目录。
32
- - **绝不假设目录名。** 不要写死 `Workflows/`、`Projects/`、`Contacts/` — 必须从实际收到的 bootstrap 目录树推断。用户可能用中文名、扁平结构或独特层级。
33
- - **绝不用 `mindos_write_file` 做小修改。** `update_section`、`update_lines` `insert_after_heading` 整文件覆写破坏 git diff,变更无法审计。
34
- - **绝不单关键词搜索。** 必须并行 2-4 条搜索(同义词、缩写、中英文变体)。单条命中率太低。
35
- - **绝不未经确认就改 `INSTRUCTION.md` 或 `README.md`。** 它们是治理文档,即使看起来只是修个错别字。
36
- - **绝不在没看过邻居文件的情况下创建新文件。** 至少读 1-2 个同目录文件,学习本地命名/标题/CSV 格式。自创新规是不一致的常见根源。
37
- - **绝不留孤链。** 重命名/移动后必须 `get_backlinks` 并更新每一个引用方。这是知识库断链的首因。
38
- - **绝不跳过多文件写入的路由确认。** 即使目标看起来很明显——用户的心智模型可能和你不同。
42
+ ```bash
43
+ npm install -g @geminilight/mindos
44
+ # 远程模式:mindos config set url http://<IP>:<端口> && mindos config set authToken <token>
45
+ ```
39
46
 
40
47
  ---
41
48
 
42
- ## MindOS 核心概念
49
+ ## 规则
50
+
51
+ 1. **先了解结构** — 列出知识库目录树,再搜索或写入。
52
+ 2. **默认只读。** 只有用户明确要求保存、记录、整理、编辑时才写入。
53
+ 3. **规则优先级**(从高到低):用户当前指令 → `.mindos/user-preferences.md` → 最近目录 `INSTRUCTION.md` → 根 `INSTRUCTION.md` → 本技能默认。
54
+ 4. **多文件编辑先出方案。** 展示完整变更列表,获批后再执行。
55
+ 5. 创建/删除/移动/重命名后 → **自动同步相关 README**。
56
+ 6. **写入前先读取。** 不基于假设写入。
57
+
58
+ ---
43
59
 
44
- - **空间(Space)** — 按你的思维方式组织的知识分区。Agent 遵循同样的结构。
45
- - **指令(Instruction)** — 所有接入 Agent 都遵守的规则文件。写一次,全局生效。
46
- - **技能(Skill)** — 教 Agent 如何读写、整理知识库。Agent 按安装的 Skill 执行,不是瞎猜。
60
+ ## 禁止事项(血泪教训)
47
61
 
48
- **笔记即指令 / 技能** — `INSTRUCTION.md` 和 `SKILL.md` 就是目录树里的 Markdown 文件。笔记可以是随笔,也可以是 Agent 必须遵守的治理规则,或 Agent 按步骤执行的程序包。
62
+ - **禁止写入知识库根目录**(除非明确要求)。根目录仅放治理文件,新内容放最合适的子目录。
63
+ - **禁止假设目录名。** 从实际目录树推断——知识库可能用中文名或扁平结构。
64
+ - **禁止用整文件覆盖做小修改。** 用 `mindos file edit-section` 或 `mindos file insert-heading` 做精准修改,整文件覆盖破坏 git diff。
65
+ - **禁止单关键词搜索。** 至少 2-4 个并行搜索(同义词、缩写、中英文变体)。
66
+ - **禁止未确认就修改 `INSTRUCTION.md` 或 `README.md`。** 治理文档——高敏感度。
67
+ - **禁止不看邻居就创建文件。** 先读目标目录 1-2 个文件,了解命名和风格。
68
+ - **禁止遗留孤立引用。** 重命名/移动后检查反向链接并更新所有引用。
69
+ - **禁止跳过多文件写入确认。** 用户的心理模型可能和你不同。
49
70
 
50
71
  ---
51
72
 
52
- ## 思维框架
73
+ ## MindOS 概念
53
74
 
54
- 动手前,问自己:
75
+ - **空间 (Space)** — 按你的思维方式组织的知识分区。Agent 遵循相同结构。
76
+ - **指令 (Instruction)** — `INSTRUCTION.md`,所有连接的 Agent 都遵守的规则文件。
77
+ - **技能 (Skill)** — 教 Agent 如何读写和整理知识库。
55
78
 
56
- 1. **用户意图属于哪类?** → 只读查阅 | 单文件编辑 | 多文件路由 | 结构变更 | SOP 执行。决定走下面哪条路径。
57
- 2. **这个内容该放哪?** → 扫目录树。如果看名字 5 秒内定不下来,大概率要问用户确认。
58
- 3. **附近有什么?** → 写之前读 1-2 个同级文件,照它们的风格。
59
- 4. **改这里会打断什么?** → 重命名/移动:`get_backlinks`。内容修改:想想谁引用了这个事实。
60
- 5. **用户让我写了吗,还是我自作主张?** → 没让你写就别写。
79
+ 笔记可以同时承载指令和技能——它们只是目录树中的 Markdown 文件。
61
80
 
62
81
  ---
63
82
 
64
- ## 任务路由决策树
83
+ ## 决策树
65
84
 
66
85
  ```
67
86
  用户请求
68
87
 
69
- ├─ 只是查找 / 总结 / 引用?
70
- │ └─ 是 → [只读路径]:搜索 + 读取 + 标注来源。不写入。跳过 Hooks。
88
+ ├─ 查找 / 总结 / 引用?
89
+ │ └─ [只读路径]:搜索 读取 带引用回答。不写入。
71
90
 
72
- ├─ 要求保存 / 记录 / 更新 / 整理具体内容?
73
- │ ├─ 单文件目标? → [单文件编辑]
74
- │ └─ 多文件或目标不明? → [多文件路由]
91
+ ├─ 保存 / 记录 / 更新 / 整理具体内容?
92
+ │ ├─ 单文件 → [单文件编辑]
93
+ │ └─ 多文件或不确定 → [多文件路由] — 先出方案
75
94
 
76
95
  ├─ 结构变更(重命名 / 移动 / 删除 / 重组)?
77
- │ └─ [结构路径]
96
+ │ └─ [结构路径] — 变更前后检查反向链接
78
97
 
79
- ├─ 流程性 / 可重复的任务?
80
- │ └─ [SOP 路径]
98
+ ├─ 流程性 / 可重复任务?
99
+ │ └─ [SOP 路径] — 找到并执行现有 SOP,或创建新的
81
100
 
82
101
  ├─ 复盘 / 提炼 / 交接?
83
102
  │ └─ [复盘路径]
84
103
 
85
- └─ 模糊或范围过大?
86
- └─ 先问清楚。基于 KB 状态提出 2-3 个具体选项。不要开始编辑。
104
+ └─ 模糊?
105
+ └─ 提问。基于知识库状态提出 2-3 个具体选项。
87
106
  ```
88
107
 
89
- **以上任何写入 / SOP / 结构路径 → 写入补充已加载到上下文(见下方或下一个上下文块中的 `## 写入与工作流补充` 章节)。**
90
-
91
108
  ---
92
109
 
93
- ## 工具选型
110
+ ## 判断启发
94
111
 
95
- | 意图 | 推荐工具 | 避免 |
96
- |------|----------|------|
97
- | 启动时加载上下文 | `mindos_bootstrap` | 不 bootstrap 就随机读文件 |
98
- | 列出顶层心智空间 | `mindos_list_spaces` | 只需分区概览却拉整棵 `list_files` |
99
- | 找文件 | `mindos_search_notes`(2-4 条并行关键词变体)| 单关键词搜索 |
100
- | 读内容 | `mindos_read_file` 或 `mindos_read_lines`(大文件) | 只需 10 行却读整文件 |
112
+ **保存意图边界:**
113
+ - "帮我记下来" / "保存" = 写入
114
+ - "搜一下" / "总结" = 只读
115
+ - "整理一下" 先问:仅展示,还是写回知识库?
101
116
 
102
- 写入、结构变更、历史工具 → 见写入与工作流补充(已加载到下方或下一个上下文块)。
117
+ **文件位置不确定:**
118
+ - 5 秒内定不了 → 用最近的现有目录,告知用户
119
+ - "随便放哪" → 收件箱,之后提议分类
103
120
 
104
- ### 回退
121
+ **范围蔓延:**
122
+ - 输入路由到 >5 个文件 → 暂停确认
123
+ - "全部更新" + 跨多个主题 → 分批确认
105
124
 
106
- - `mindos_bootstrap` 不可用 → 手动读根 `INSTRUCTION.md` + `README.md`。
107
- - 搜索无结果 → 不放弃:(1) 扫上下文中的树;(2) 直接读候选文件;(3) `mindos_list_files` 细化子目录;(4) 用同义词/中英文变体重试。
125
+ **引用规范:** 引用知识库内容必须附带文件路径。
108
126
 
109
127
  ---
110
128
 
111
- ## 执行模式
129
+ ## 任务后钩子
112
130
 
113
- | 模式 | 适用场景 | 关键步骤 |
114
- |------|----------|----------|
115
- | **只读问答** | 查找 / 总结 / 引用 | 目录树推断 → 搜索 → 读取 → 标注来源 → 明确说信息缺口 |
131
+ 写入任务(非简单读取)后扫描此表。最多 1 个提议;优先级最高的优先。先检查 `.mindos/user-preferences.md` 抑制项。
116
132
 
117
- 写入模式详细执行步骤 见写入与工作流补充(已加载到下方或下一个上下文块)。
133
+ | 钩子 | 优先级 | 条件 |
134
+ |------|--------|------|
135
+ | 经验沉淀 | 高 | 调试、排错或多轮工作 |
136
+ | 一致性同步 | 高 | 编辑的文件有反向链接 |
137
+ | SOP 偏移 | 中 | 按 SOP 执行但实际偏离了步骤 |
138
+ | 关联更新 | 中 | 更改了 CSV/TODO 状态且有关联文档 |
139
+ | 结构分类 | 中 | 在临时位置或收件箱创建了文件 |
140
+ | 模式提取 | 低 | 本次会话中 3+ 个结构相似的操作 |
118
141
 
119
- ---
142
+ 触发时 → 读取 [references/post-task-hooks.md](./references/post-task-hooks.md)。
120
143
 
121
- ## 判断启发式规则
122
-
123
- **保存意图 — 读写边界识别**
124
- - "帮我记下来" / "记录一下" / "保存这个" = 写入
125
- - "搜一下有没有关于 X 的笔记" / "总结上周的工作" = 只读
126
- - 模糊边界("整理一下这些内容")→ 先问:是读取展示,还是写回 KB?
144
+ ## 偏好捕获
127
145
 
128
- **文件位置不确定时**
129
- - 扫目录树 5 秒内定不下来 → 不要自创新目录;放语义最近的已有目录,告知用户
130
- - 用户说"随便放个地方" → 放 inbox 或最顶层通用目录,任务后提议归类(触发 Structure classification hook)
146
+ 用户表达持久偏好时 → 读取 [references/preference-capture.md](./references/preference-capture.md),按确认-写入流程操作。
131
147
 
132
- **范围蔓延信号**
133
- - 单条输入导致路由表 > 5 个文件 → 暂停,先确认范围;用户鲜少意图批量重写
134
- - "把这些都更新一下" + 内容跨越多个主题 → 拆成批次确认,不一次性执行
148
+ ## SOP 编写
135
149
 
136
- **引用纪律**
137
- - KB 中引用的事实必须附带文件路径,便于用户核查
150
+ 创建/重写工作流 SOP 时 → 读取 [references/sop-template.md](./references/sop-template.md)。
138
151
 
139
152
  ---
140
153
 
141
- ## 任务后 Hooks
142
-
143
- **写入任务**完成后(简单单文件修改或只读查阅跳过),扫描下表。命中则发起一句话提议,最多 1 条,选优先级最高项。先查 `user-skill-rules.md` 的抑制区;用户要求安静模式时全部跳过。
144
-
145
- | Hook | 优先级 | 触发条件 |
146
- |------|--------|---------|
147
- | 经验沉淀 | 高 | 调试、排错、踩坑,或多轮才解决 |
148
- | 一致性同步 | 高 | 编辑了有反链的文件(查 `get_backlinks`) |
149
- | SOP 偏差 | 中 | 按 SOP 执行但实际步骤与文档不符 |
150
- | 联动更新 | 中 | 改了 CSV/TODO 状态且存在关联文档 |
151
- | 结构归类 | 中 | 在临时目录或收件箱新建了文件 |
152
- | 模式提炼 | 低 | 本会话 3+ 次结构相似操作 |
153
- | 对话复盘 | 低 | 会话 >10 轮且涉及决策或权衡 |
154
-
155
- 有 hook 命中 → 读 [references/post-task-hooks.md](./references/post-task-hooks.md) 获取提议措辞和用户自定义 hooks。都不命中则安静结束,不读此文件。
156
-
157
- ## 偏好捕获
158
-
159
- 用户表达要长期记住的偏好(「以后不要…」「这个该放在…」)时,读 [references/preference-capture.md](./references/preference-capture.md) 并按确认后写入流程存入 `user-skill-rules.md`。
160
- **不要读** preference-capture 除非用户真的表达了要持久化的偏好。
154
+ ## 错误处理(CLI)
161
155
 
162
- ## SOP 编写
163
-
164
- 创建或改写工作流 SOP 时,**必须 [references/sop-template.md](./references/sop-template.md)**(前置条件、分支步骤、退出条件、踩坑记录)。
165
- **不要读** sop-template 用于 SOP 执行(仅用于 SOP 创建/编辑)。
156
+ ```bash
157
+ "command not found: mindos" → npm install -g @geminilight/mindos
158
+ "Mind root not configured" → mindos onboard
159
+ "401 Unauthorized" → 检查 AUTH_TOKEN:在服务器运行 mindos token
160
+ "ECONNREFUSED" → 在服务器启动:mindos start
161
+ ```
@@ -0,0 +1,119 @@
1
+ # MindOS 写入与工作流补充
2
+
3
+ <!-- 随 SKILL.md 一起由 route.ts 注入到每次请求的上下文中。 -->
4
+ <!-- 只读查阅、问答、总结时此上下文同样可用。 -->
5
+
6
+ ---
7
+
8
+ ## 绝对不要(写路径专属)
9
+
10
+ - **绝不把 `mindos_write_file` 当第一步。** 没读过当前内容就覆写 = 在黑暗中操作。哪怕你"应该知道"文件里有什么,也先读——你的假设可能已过时。
11
+ - **绝不用 `mindos_create_file` 创建心智空间。** 这只会建一个普通目录,缺少 README + INSTRUCTION 脚手架。缺少治理文件的空间从诞生起就是残缺的。必须用 `mindos_create_space`。
12
+ - **绝不 bootstrap 后直接写入。** Bootstrap 告诉你顶层结构,不代表目标路径附近的局部 `INSTRUCTION.md` 没有覆盖全局规则。写入前必须读目标路径附近的治理文件。
13
+ - **绝不在没有展示路由表的情况下执行多文件写入。** 即使目标看起来显而易见——用户的心智模型和你的判断不一致的概率远高于你的直觉。展示路由表,等确认。
14
+ - **绝不把 `mindos_append_to_file` 用于有结构要求的文件。** 盲目追加会忽略章节顺序。如果文件有标题层级、必填字段或 schema 约束,用 `insert_after_heading` 或 `update_section` 把内容落在正确位置。
15
+
16
+ ---
17
+
18
+ ## 写入工具选型
19
+
20
+ | 意图 | 推荐工具 | 避免 |
21
+ |------|----------|------|
22
+ | 小范围文字修改 | `mindos_update_section` / `mindos_update_lines` / `mindos_insert_after_heading` | 小修改用 `mindos_write_file` |
23
+ | 追加到末尾 | `mindos_append_to_file` | 为了加一行重写整文件 |
24
+ | 整文件替换 | `mindos_write_file` | 用它做章节级编辑 |
25
+ | 新建文件 | `mindos_create_file` | 自动创建父目录,但不会生成空间脚手架文件 |
26
+ | 新建心智空间(目录 + README + INSTRUCTION)| `mindos_create_space` | 创建空间的唯一方式。`create_file` 只创建普通目录 |
27
+ | 重命名空间目录 | `mindos_rename_space` | `rename_file`(仅文件,不能重命名文件夹)|
28
+ | 追加 CSV | `mindos_append_csv`(校验表头)| 手动拼字符串不校验 |
29
+ | 重命名前查影响 | `mindos_get_backlinks` | 不查引用就重命名 |
30
+ | 查看近期变动 | `mindos_get_recent` | 猜最近改了什么 |
31
+ | 恢复历史版本 | `mindos_get_file_at_version` | 让用户回忆之前内容 |
32
+
33
+ **回退:** 行级/章节级工具不可用 → 读 + 受限 `mindos_write_file`(模拟最小修改)。
34
+
35
+ ---
36
+
37
+ ## 启动协议
38
+
39
+ 所有写入任务执行前运行:
40
+
41
+ 1. **Bootstrap** — `mindos_bootstrap`(首选),或手动读根 `INSTRUCTION.md` + `README.md`。
42
+ 2. **发现结构**
43
+ - 只需确认顶层分区 → `mindos_list_spaces`(更轻量,含 README 摘要)
44
+ - 需要找具体文件路径 → 先用 `mindos_list_spaces` 确认目标分区,再在该分区下 `mindos_list_files`
45
+ - 已知关键词 → 并行 2-4 条 `mindos_search_notes`,覆盖中英文和缩写变体
46
+ - **绝不假设顶层目录名**——用户可能用中文、拼音或自定义层级
47
+ 3. **加载局部治理** — 读取目标路径附近的 `README.md` / `INSTRUCTION.md`。局部约定覆盖全局假设。
48
+ 4. **匹配已有 SOP** — 任务偏流程时:从树中识别存放流程的目录(`Workflows/`、`SOPs/`、`流程/` 等仅为常见名,不假设一定存在)。用关键词 + `<!-- keywords: -->` 元数据搜索。找到则读取并执行;偏差则任务后提议更新。
49
+ 5. **写前检查** — 确认:路径存在或应创建;位置在子目录下(非根);现有内容已读;修改范围最小;路径变更的反链影响已评估。
50
+ 6. **执行编辑。**
51
+
52
+ 上下文缺失时,按最佳努力继续并明确写出假设。
53
+
54
+ ---
55
+
56
+ ## 执行模式
57
+
58
+ | 模式 | 适用场景 | 关键步骤 |
59
+ |------|----------|----------|
60
+ | **单文件编辑** | 目标文件明确 | 启动协议 → 读目标 + 局部约定 → 最小修改 → 验证 → 总结 |
61
+ | **多文件路由** | 非结构化输入,多个目的地 | 解析为语义单元 → 路由表 → 确认 → 编辑 → 汇总 |
62
+ | **对话复盘** | 提炼 / 沉淀会话 | 确认范围 → 抽取决策/踩坑/下一步 → 路由 → 记录变更 |
63
+ | **SOP 执行** | 可重复流程 | 完整读 SOP → 分步执行 → 更新过时段落 → 偏差则提议更新 |
64
+ | **结构变更** | 重命名 / 移动 / 删除 | `get_backlinks` → 影响报告 → 确认 → 执行 → 更新引用 → 同步 README |
65
+ | **CSV 追加** | 追加表格行 | 读表头 → 校验字段 → `mindos_append_csv` |
66
+ | **跨 Agent 接力** | 继续其他 Agent 的工作 | 读任务状态+决策 → 无需重新探索直接接续 → 回写进度 |
67
+ | **周期性回顾** | 汇总近期变动 | `get_recent`/`get_history` → 读变动文件 → 结构化总结 |
68
+ | **交接文档** | 创建简报 | 读来源 → 合成(背景、决策、状态、待办)→ 放项目目录 |
69
+
70
+ ---
71
+
72
+ ## 详细执行步骤
73
+
74
+ ### 单文件编辑
75
+ 搜索 → 读目标文件 + 读 1-2 个同目录文件了解本地约定 → 应用最小修改(优先 `update_section` / `update_lines` / `insert_after_heading`,避免整文件覆写)→ 验证标题/风格匹配 → 总结改了什么。
76
+
77
+ ### 多文件路由
78
+ 将非结构化输入拆解为离散语义单元 → 每个单元并行搜索 2-4 个关键词变体找最合适文件 → **展示路由表**(内容片段 → 目标文件 → 插入位置)→ 等用户确认 → 逐文件执行编辑 → 用文件路径汇总全部变更。
79
+
80
+ ### 对话复盘
81
+ 确认范围(哪次会话?哪些主题?)→ 抽取:已做决策、决策理由、遇到的坑、下一步行动 → 为每个产物通过搜索找最合适的现有文件 → 各归其位 → 每个改动文件追加一行变更说明。
82
+
83
+ ### SOP 执行
84
+ 开始前完整读 SOP(不要略读)→ 逐步执行,完成一步确认一步 → 遇到过时或与当前 KB 状态不符的步骤,记录下来 → 完成后,针对偏差步骤提议定向 SOP 更新。
85
+ **创建新 SOP** → 先读 [references/sop-template.md](./references/sop-template.md) 了解必需结构。
86
+
87
+ ### 结构变更
88
+ 对要变更的路径执行 `get_backlinks` → 展示影响报告(N 个文件需要更新)→ 等确认 → 执行重命名/移动/删除 → 更新每一条反链 → 同步受影响的 `README.md`。
89
+
90
+ ### 交接 / 跨 Agent 接力
91
+ 读交接文档或上一个 Agent 的进度记录 → 识别:当前状态、已做决策、待处理事项 → 从该状态直接接续,不重复已完成的探索 → 完成后将进度回写到同一份交接文档。
92
+
93
+ ---
94
+
95
+ ## 任务后 Hooks
96
+
97
+ **写入任务**完成后(简单单文件修改或只读查阅跳过),扫描下表。命中则发起一句话提议,最多 1 条,选优先级最高项。先查 `.mindos/user-preferences.md` 的抑制区;用户要求安静模式时全部跳过。
98
+
99
+ | Hook | 优先级 | 触发条件 |
100
+ |------|--------|---------|
101
+ | 经验沉淀 | 高 | 调试、排错、踩坑,或多轮才解决 |
102
+ | 一致性同步 | 高 | 编辑了有反链的文件(查 `get_backlinks`) |
103
+ | SOP 偏差 | 中 | 按 SOP 执行但实际步骤与文档不符 |
104
+ | 联动更新 | 中 | 改了 CSV/TODO 状态且存在关联文档 |
105
+ | 结构归类 | 中 | 在临时目录或收件箱新建了文件 |
106
+ | 模式提炼 | 低 | 本会话 3+ 次结构相似操作 |
107
+ | 对话复盘 | 低 | 会话 >10 轮且涉及决策或权衡 |
108
+
109
+ 有 hook 命中 → 读 [references/post-task-hooks.md](./references/post-task-hooks.md) 获取提议措辞和用户自定义 hooks。都不命中则安静结束,不读此文件。
110
+
111
+ ## 偏好捕获
112
+
113
+ 用户表达要长期记住的偏好(「以后不要…」「这个该放在…」)时,读 [references/preference-capture.md](./references/preference-capture.md) 并按确认后写入流程存入 `.mindos/user-preferences.md`。
114
+ **不要读** preference-capture 除非用户真的表达了要持久化的偏好。
115
+
116
+ ## SOP 编写
117
+
118
+ 创建或改写工作流 SOP 时,**必须 — 读 [references/sop-template.md](./references/sop-template.md)**(前置条件、分支步骤、退出条件、踩坑记录)。
119
+ **不要读** sop-template 用于 SOP 执行(仅用于 SOP 创建/编辑)。
@@ -30,7 +30,7 @@ interface AcpDetectionState {
30
30
 
31
31
  const STORAGE_KEY = 'mindos:acp-detection';
32
32
  const STALE_TTL_MS = 30 * 60 * 1000;
33
- const REVALIDATE_TTL_MS = 5 * 60 * 1000;
33
+ const REVALIDATE_TTL_MS = 30 * 60 * 1000;
34
34
 
35
35
  interface DetectionCache {
36
36
  installed: DetectedAgent[];
@@ -0,0 +1,248 @@
1
+ 'use client';
2
+
3
+ import { useRef, useState, useCallback } from 'react';
4
+ import type { Message, ImagePart, AskMode } from '@/lib/types';
5
+ import type { ProviderId } from '@/lib/agent/providers';
6
+ import { consumeUIMessageStream } from '@/lib/agent/stream-consumer';
7
+ import { isRetryableError, retryDelay, sleep } from '@/lib/agent/reconnect';
8
+
9
+ export type LoadingPhase = 'connecting' | 'thinking' | 'streaming' | 'reconnecting';
10
+
11
+ export interface AskChatRefs {
12
+ inputValueRef: React.RefObject<string>;
13
+ mentionRef: React.RefObject<{ mentionQuery: string | null }>;
14
+ slashRef: React.RefObject<{ slashQuery: string | null }>;
15
+ imageUploadRef: React.RefObject<{ images: ImagePart[]; clearImages: () => void }>;
16
+ sessionRef: React.RefObject<{
17
+ messages: Message[];
18
+ setMessages: React.Dispatch<React.SetStateAction<Message[]>>;
19
+ }>;
20
+ uploadRef: React.RefObject<{
21
+ localAttachments: { name: string; content: string }[];
22
+ }>;
23
+ selectedSkillRef: React.RefObject<{ name: string } | null>;
24
+ selectedAcpAgentRef: React.RefObject<unknown>;
25
+ attachedFilesRef: React.RefObject<string[]>;
26
+ }
27
+
28
+ interface UseAskChatOpts {
29
+ currentFile?: string;
30
+ chatMode: AskMode;
31
+ providerOverride: ProviderId | null;
32
+ onFirstMessage?: () => void;
33
+ refs: AskChatRefs;
34
+ errorLabels: { noResponse: string; stopped: string };
35
+ resetInputState: () => void;
36
+ }
37
+
38
+ export function useAskChat({
39
+ currentFile,
40
+ chatMode,
41
+ providerOverride,
42
+ onFirstMessage,
43
+ refs,
44
+ errorLabels,
45
+ resetInputState,
46
+ }: UseAskChatOpts) {
47
+ const [isLoading, setIsLoading] = useState(false);
48
+ const [loadingPhase, setLoadingPhase] = useState<LoadingPhase>('connecting');
49
+ const [reconnectAttempt, setReconnectAttempt] = useState(0);
50
+ const reconnectMaxRef = useRef(3);
51
+ const abortRef = useRef<AbortController | null>(null);
52
+ const firstMessageFired = useRef(false);
53
+
54
+ const stop = useCallback(() => { abortRef.current?.abort(); }, []);
55
+
56
+ const submit = useCallback(async (e: React.FormEvent) => {
57
+ e.preventDefault();
58
+ const m = refs.mentionRef.current;
59
+ const s = refs.slashRef.current;
60
+ const img = refs.imageUploadRef.current;
61
+ const sess = refs.sessionRef.current;
62
+ const upl = refs.uploadRef.current;
63
+ if (!m || !s || !img || !sess || !upl) return;
64
+ if (m.mentionQuery !== null || s.slashQuery !== null) return;
65
+ const text = refs.inputValueRef.current?.trim() ?? '';
66
+ if ((!text && img.images.length === 0) || isLoadingRef.current) return;
67
+
68
+ const skill = refs.selectedSkillRef.current;
69
+ const acpAgent = refs.selectedAcpAgentRef.current;
70
+ const pendingImages = img.images.length > 0 ? [...img.images] : undefined;
71
+ const userMsg: Message = {
72
+ role: 'user',
73
+ content: text,
74
+ timestamp: Date.now(),
75
+ ...(skill && { skillName: skill.name }),
76
+ ...(pendingImages && { images: pendingImages }),
77
+ };
78
+ img.clearImages();
79
+ const requestMessages = [...sess.messages, userMsg];
80
+ sess.setMessages([...requestMessages, { role: 'assistant', content: '', timestamp: Date.now() }]);
81
+
82
+ resetInputState();
83
+
84
+ if (onFirstMessage && !firstMessageFired.current) {
85
+ firstMessageFired.current = true;
86
+ onFirstMessage();
87
+ }
88
+ setIsLoading(true);
89
+ setLoadingPhase('connecting');
90
+ setReconnectAttempt(0);
91
+
92
+ const controller = new AbortController();
93
+ abortRef.current = controller;
94
+
95
+ let maxRetries = 3;
96
+ try {
97
+ const stored = localStorage.getItem('mindos-reconnect-retries');
98
+ if (stored !== null) { const n = parseInt(stored, 10); if (Number.isFinite(n)) maxRetries = Math.max(0, Math.min(10, n)); }
99
+ } catch { /* localStorage unavailable */ }
100
+ reconnectMaxRef.current = maxRetries;
101
+
102
+ const requestBody = JSON.stringify({
103
+ messages: requestMessages,
104
+ currentFile,
105
+ attachedFiles: refs.attachedFilesRef.current,
106
+ uploadedFiles: upl.localAttachments.map(f => ({
107
+ name: f.name,
108
+ content: f.content.length > 20_000
109
+ ? f.content.slice(0, 20_000) + '\n\n[...truncated to first ~20000 chars]'
110
+ : f.content,
111
+ })),
112
+ selectedAcpAgent: acpAgent,
113
+ mode: chatMode,
114
+ providerOverride: providerOverride ?? undefined,
115
+ });
116
+
117
+ const doFetch = async (): Promise<{ finalMessage: Message }> => {
118
+ const res = await fetch('/api/ask', {
119
+ method: 'POST',
120
+ headers: { 'Content-Type': 'application/json' },
121
+ body: requestBody,
122
+ signal: controller.signal,
123
+ });
124
+
125
+ if (!res.ok) {
126
+ let errorMsg = `Request failed (${res.status})`;
127
+ try {
128
+ const errBody = await res.json() as { error?: { message?: string } | string; message?: string };
129
+ if (typeof errBody?.error === 'string' && errBody.error.trim()) {
130
+ errorMsg = errBody.error;
131
+ } else if (typeof errBody?.error === 'object' && typeof errBody.error?.message === 'string' && errBody.error.message.trim()) {
132
+ errorMsg = errBody.error.message;
133
+ } else if (typeof errBody?.message === 'string' && errBody.message.trim()) {
134
+ errorMsg = errBody.message;
135
+ }
136
+ } catch (err) { console.warn("[useAskChat] error body parse failed:", err); }
137
+ const err = new Error(errorMsg);
138
+ (err as Error & { httpStatus?: number }).httpStatus = res.status;
139
+ throw err;
140
+ }
141
+
142
+ if (!res.body) throw new Error('No response body');
143
+
144
+ setLoadingPhase('thinking');
145
+
146
+ const finalMessage = await consumeUIMessageStream(
147
+ res.body,
148
+ (msg) => {
149
+ setLoadingPhase('streaming');
150
+ refs.sessionRef.current?.setMessages(prev => {
151
+ const updated = [...prev];
152
+ updated[updated.length - 1] = msg;
153
+ return updated;
154
+ });
155
+ },
156
+ controller.signal,
157
+ );
158
+ return { finalMessage };
159
+ };
160
+
161
+ try {
162
+ let lastError: Error | null = null;
163
+
164
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
165
+ if (controller.signal.aborted) break;
166
+
167
+ if (attempt > 0) {
168
+ setReconnectAttempt(attempt);
169
+ setLoadingPhase('reconnecting');
170
+ refs.sessionRef.current?.setMessages(prev => {
171
+ const updated = [...prev];
172
+ updated[updated.length - 1] = { role: 'assistant', content: '', timestamp: Date.now() };
173
+ return updated;
174
+ });
175
+ await sleep(retryDelay(attempt - 1), controller.signal);
176
+ setLoadingPhase('connecting');
177
+ }
178
+
179
+ try {
180
+ const { finalMessage } = await doFetch();
181
+ if (!finalMessage.content.trim() && (!finalMessage.parts || finalMessage.parts.length === 0)) {
182
+ refs.sessionRef.current?.setMessages(prev => {
183
+ const updated = [...prev];
184
+ updated[updated.length - 1] = { role: 'assistant', content: `__error__${errorLabels.noResponse}` };
185
+ return updated;
186
+ });
187
+ }
188
+ return;
189
+ } catch (err) {
190
+ lastError = err instanceof Error ? err : new Error(String(err));
191
+ const httpStatus = (err as Error & { httpStatus?: number }).httpStatus;
192
+ if (!isRetryableError(err, httpStatus) || attempt >= maxRetries) break;
193
+ }
194
+ }
195
+
196
+ if (lastError) throw lastError;
197
+ } catch (err) {
198
+ if ((err as Error).name === 'AbortError') {
199
+ refs.sessionRef.current?.setMessages(prev => {
200
+ const updated = [...prev];
201
+ const lastIdx = updated.length - 1;
202
+ if (lastIdx >= 0 && updated[lastIdx].role === 'assistant') {
203
+ const last = updated[lastIdx];
204
+ const hasContent = last.content.trim() || (last.parts && last.parts.length > 0);
205
+ if (!hasContent) {
206
+ updated[lastIdx] = { role: 'assistant', content: `__error__${errorLabels.stopped}` };
207
+ }
208
+ }
209
+ return updated;
210
+ });
211
+ } else {
212
+ const errMsg = err instanceof Error ? err.message : 'Something went wrong';
213
+ refs.sessionRef.current?.setMessages(prev => {
214
+ const updated = [...prev];
215
+ const lastIdx = updated.length - 1;
216
+ if (lastIdx >= 0 && updated[lastIdx].role === 'assistant') {
217
+ const last = updated[lastIdx];
218
+ const hasContent = last.content.trim() || (last.parts && last.parts.length > 0);
219
+ if (!hasContent) {
220
+ updated[lastIdx] = { role: 'assistant', content: `__error__${errMsg}` };
221
+ return updated;
222
+ }
223
+ }
224
+ return [...updated, { role: 'assistant', content: `__error__${errMsg}` }];
225
+ });
226
+ }
227
+ } finally {
228
+ setIsLoading(false);
229
+ setReconnectAttempt(0);
230
+ abortRef.current = null;
231
+ }
232
+ }, [currentFile, chatMode, providerOverride, errorLabels.noResponse, errorLabels.stopped, onFirstMessage, refs, resetInputState]);
233
+
234
+ const isLoadingRef = useRef(isLoading);
235
+ isLoadingRef.current = isLoading;
236
+
237
+ return {
238
+ isLoading,
239
+ isLoadingRef,
240
+ loadingPhase,
241
+ reconnectAttempt,
242
+ reconnectMaxRef,
243
+ abortRef,
244
+ firstMessageFired,
245
+ submit,
246
+ stop,
247
+ };
248
+ }