@geminilight/mindos 0.6.39 → 0.6.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (714) hide show
  1. package/README.md +31 -15
  2. package/README_zh.md +31 -15
  3. package/_standalone/.mindos-build-version +1 -1
  4. package/_standalone/.next/BUILD_ID +1 -1
  5. package/_standalone/.next/app-path-routes-manifest.json +18 -17
  6. package/_standalone/.next/build-manifest.json +3 -3
  7. package/_standalone/.next/cache/.previewinfo +1 -1
  8. package/_standalone/.next/cache/.rscinfo +1 -1
  9. package/_standalone/.next/cache/config.json +3 -3
  10. package/_standalone/.next/prerender-manifest.json +3 -3
  11. package/_standalone/.next/react-loadable-manifest.json +68 -6
  12. package/_standalone/.next/routes-manifest.json +6 -0
  13. package/_standalone/.next/server/app/.well-known/agent-card.json/route_client-reference-manifest.js +1 -1
  14. package/_standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  15. package/_standalone/.next/server/app/_global-error.html +2 -2
  16. package/_standalone/.next/server/app/_global-error.rsc +1 -1
  17. package/_standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  18. package/_standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  19. package/_standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  20. package/_standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  21. package/_standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  22. package/_standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  23. package/_standalone/.next/server/app/_not-found/page.js +2 -2
  24. package/_standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  25. package/_standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  26. package/_standalone/.next/server/app/agents/[agentKey]/page.js +2 -2
  27. package/_standalone/.next/server/app/agents/[agentKey]/page.js.nft.json +1 -1
  28. package/_standalone/.next/server/app/agents/[agentKey]/page_client-reference-manifest.js +1 -1
  29. package/_standalone/.next/server/app/agents/page.js +3 -3
  30. package/_standalone/.next/server/app/agents/page.js.nft.json +1 -1
  31. package/_standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  32. package/_standalone/.next/server/app/api/a2a/agents/route_client-reference-manifest.js +1 -1
  33. package/_standalone/.next/server/app/api/a2a/delegations/route_client-reference-manifest.js +1 -1
  34. package/_standalone/.next/server/app/api/a2a/discover/route_client-reference-manifest.js +1 -1
  35. package/_standalone/.next/server/app/api/a2a/route_client-reference-manifest.js +1 -1
  36. package/_standalone/.next/server/app/api/acp/config/route.js +1 -1
  37. package/_standalone/.next/server/app/api/acp/config/route.js.nft.json +1 -1
  38. package/_standalone/.next/server/app/api/acp/config/route_client-reference-manifest.js +1 -1
  39. package/_standalone/.next/server/app/api/acp/detect/route.js +1 -1
  40. package/_standalone/.next/server/app/api/acp/detect/route.js.nft.json +1 -1
  41. package/_standalone/.next/server/app/api/acp/detect/route_client-reference-manifest.js +1 -1
  42. package/_standalone/.next/server/app/api/acp/install/route_client-reference-manifest.js +1 -1
  43. package/_standalone/.next/server/app/api/acp/registry/route_client-reference-manifest.js +1 -1
  44. package/_standalone/.next/server/app/api/acp/session/route.js +1 -1
  45. package/_standalone/.next/server/app/api/acp/session/route.js.nft.json +1 -1
  46. package/_standalone/.next/server/app/api/acp/session/route_client-reference-manifest.js +1 -1
  47. package/_standalone/.next/server/app/api/agent-activity/route.js +1 -1
  48. package/_standalone/.next/server/app/api/agent-activity/route.js.nft.json +1 -1
  49. package/_standalone/.next/server/app/api/agent-activity/route_client-reference-manifest.js +1 -1
  50. package/_standalone/.next/server/app/api/ask/route.js +137 -99
  51. package/_standalone/.next/server/app/api/ask/route.js.nft.json +1 -1
  52. package/_standalone/.next/server/app/api/ask/route_client-reference-manifest.js +1 -1
  53. package/_standalone/.next/server/app/api/ask-sessions/route_client-reference-manifest.js +1 -1
  54. package/_standalone/.next/server/app/api/auth/route_client-reference-manifest.js +1 -1
  55. package/_standalone/.next/server/app/api/backlinks/route.js +1 -1
  56. package/_standalone/.next/server/app/api/backlinks/route.js.nft.json +1 -1
  57. package/_standalone/.next/server/app/api/backlinks/route_client-reference-manifest.js +1 -1
  58. package/_standalone/.next/server/app/api/bootstrap/route.js +1 -1
  59. package/_standalone/.next/server/app/api/bootstrap/route.js.nft.json +1 -1
  60. package/_standalone/.next/server/app/api/bootstrap/route_client-reference-manifest.js +1 -1
  61. package/_standalone/.next/server/app/api/changes/route.js +1 -1
  62. package/_standalone/.next/server/app/api/changes/route.js.nft.json +1 -1
  63. package/_standalone/.next/server/app/api/changes/route_client-reference-manifest.js +1 -1
  64. package/_standalone/.next/server/app/api/export/route.js +3 -3
  65. package/_standalone/.next/server/app/api/export/route.js.nft.json +1 -1
  66. package/_standalone/.next/server/app/api/export/route_client-reference-manifest.js +1 -1
  67. package/_standalone/.next/server/app/api/extract-pdf/route_client-reference-manifest.js +1 -1
  68. package/_standalone/.next/server/app/api/file/import/route.js +2 -19
  69. package/_standalone/.next/server/app/api/file/import/route.js.nft.json +1 -1
  70. package/_standalone/.next/server/app/api/file/import/route_client-reference-manifest.js +1 -1
  71. package/_standalone/.next/server/app/api/file/route.js +1 -18
  72. package/_standalone/.next/server/app/api/file/route.js.nft.json +1 -1
  73. package/_standalone/.next/server/app/api/file/route_client-reference-manifest.js +1 -1
  74. package/_standalone/.next/server/app/api/files/route.js +1 -1
  75. package/_standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  76. package/_standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  77. package/_standalone/.next/server/app/api/git/route.js +1 -1
  78. package/_standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  79. package/_standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  80. package/_standalone/.next/server/app/api/graph/route.js +1 -1
  81. package/_standalone/.next/server/app/api/graph/route.js.nft.json +1 -1
  82. package/_standalone/.next/server/app/api/graph/route_client-reference-manifest.js +1 -1
  83. package/_standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  84. package/_standalone/.next/server/app/api/inbox/route.js +1 -0
  85. package/_standalone/.next/server/app/api/inbox/route.js.nft.json +1 -0
  86. package/_standalone/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -0
  87. package/_standalone/.next/server/app/api/init/route.js +1 -1
  88. package/_standalone/.next/server/app/api/init/route.js.nft.json +1 -1
  89. package/_standalone/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  90. package/_standalone/.next/server/app/api/mcp/agents/route.js +1 -1
  91. package/_standalone/.next/server/app/api/mcp/agents/route.js.nft.json +1 -1
  92. package/_standalone/.next/server/app/api/mcp/agents/route_client-reference-manifest.js +1 -1
  93. package/_standalone/.next/server/app/api/mcp/install/route.js +1 -1
  94. package/_standalone/.next/server/app/api/mcp/install/route.js.nft.json +1 -1
  95. package/_standalone/.next/server/app/api/mcp/install/route_client-reference-manifest.js +1 -1
  96. package/_standalone/.next/server/app/api/mcp/install-skill/route_client-reference-manifest.js +1 -1
  97. package/_standalone/.next/server/app/api/mcp/restart/route_client-reference-manifest.js +1 -1
  98. package/_standalone/.next/server/app/api/mcp/status/route.js +1 -1
  99. package/_standalone/.next/server/app/api/mcp/status/route.js.nft.json +1 -1
  100. package/_standalone/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
  101. package/_standalone/.next/server/app/api/monitoring/route.js +1 -1
  102. package/_standalone/.next/server/app/api/monitoring/route.js.nft.json +1 -1
  103. package/_standalone/.next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
  104. package/_standalone/.next/server/app/api/recent-files/route.js +1 -1
  105. package/_standalone/.next/server/app/api/recent-files/route.js.nft.json +1 -1
  106. package/_standalone/.next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
  107. package/_standalone/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
  108. package/_standalone/.next/server/app/api/search/route.js +1 -1
  109. package/_standalone/.next/server/app/api/search/route.js.nft.json +1 -1
  110. package/_standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  111. package/_standalone/.next/server/app/api/settings/list-models/route.js +1 -1
  112. package/_standalone/.next/server/app/api/settings/list-models/route.js.nft.json +1 -1
  113. package/_standalone/.next/server/app/api/settings/list-models/route_client-reference-manifest.js +1 -1
  114. package/_standalone/.next/server/app/api/settings/reset-token/route.js +1 -1
  115. package/_standalone/.next/server/app/api/settings/reset-token/route.js.nft.json +1 -1
  116. package/_standalone/.next/server/app/api/settings/reset-token/route_client-reference-manifest.js +1 -1
  117. package/_standalone/.next/server/app/api/settings/route.js +1 -1
  118. package/_standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
  119. package/_standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  120. package/_standalone/.next/server/app/api/settings/test-key/route.js +1 -1
  121. package/_standalone/.next/server/app/api/settings/test-key/route.js.nft.json +1 -1
  122. package/_standalone/.next/server/app/api/settings/test-key/route_client-reference-manifest.js +1 -1
  123. package/_standalone/.next/server/app/api/setup/check-path/route_client-reference-manifest.js +1 -1
  124. package/_standalone/.next/server/app/api/setup/check-port/route_client-reference-manifest.js +1 -1
  125. package/_standalone/.next/server/app/api/setup/generate-token/route_client-reference-manifest.js +1 -1
  126. package/_standalone/.next/server/app/api/setup/ls/route_client-reference-manifest.js +1 -1
  127. package/_standalone/.next/server/app/api/setup/route.js +1 -1
  128. package/_standalone/.next/server/app/api/setup/route.js.nft.json +1 -1
  129. package/_standalone/.next/server/app/api/setup/route_client-reference-manifest.js +1 -1
  130. package/_standalone/.next/server/app/api/skills/route.js +2 -2
  131. package/_standalone/.next/server/app/api/skills/route.js.nft.json +1 -1
  132. package/_standalone/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  133. package/_standalone/.next/server/app/api/sync/route.js +1 -1
  134. package/_standalone/.next/server/app/api/sync/route_client-reference-manifest.js +1 -1
  135. package/_standalone/.next/server/app/api/tree-version/route.js +1 -1
  136. package/_standalone/.next/server/app/api/tree-version/route.js.nft.json +1 -1
  137. package/_standalone/.next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
  138. package/_standalone/.next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
  139. package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  140. package/_standalone/.next/server/app/api/update-check/route.js +1 -1
  141. package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
  142. package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
  143. package/_standalone/.next/server/app/api/workflows/route.js +2 -2
  144. package/_standalone/.next/server/app/api/workflows/route.js.nft.json +1 -1
  145. package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
  146. package/_standalone/.next/server/app/changes/page.js +2 -2
  147. package/_standalone/.next/server/app/changes/page.js.nft.json +1 -1
  148. package/_standalone/.next/server/app/changes/page_client-reference-manifest.js +1 -1
  149. package/_standalone/.next/server/app/echo/[segment]/page.js +6 -6
  150. package/_standalone/.next/server/app/echo/[segment]/page.js.nft.json +1 -1
  151. package/_standalone/.next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
  152. package/_standalone/.next/server/app/echo/page.js +2 -2
  153. package/_standalone/.next/server/app/echo/page.js.nft.json +1 -1
  154. package/_standalone/.next/server/app/echo/page_client-reference-manifest.js +1 -1
  155. package/_standalone/.next/server/app/explore/page.js +3 -3
  156. package/_standalone/.next/server/app/explore/page.js.nft.json +1 -1
  157. package/_standalone/.next/server/app/explore/page_client-reference-manifest.js +1 -1
  158. package/_standalone/.next/server/app/help/page.js +2 -2
  159. package/_standalone/.next/server/app/help/page.js.nft.json +1 -1
  160. package/_standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
  161. package/_standalone/.next/server/app/login/page.js +2 -2
  162. package/_standalone/.next/server/app/login/page.js.nft.json +1 -1
  163. package/_standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  164. package/_standalone/.next/server/app/page.js +3 -3
  165. package/_standalone/.next/server/app/page.js.nft.json +1 -1
  166. package/_standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  167. package/_standalone/.next/server/app/setup/page.js +2 -2
  168. package/_standalone/.next/server/app/setup/page.js.nft.json +1 -1
  169. package/_standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  170. package/_standalone/.next/server/app/trash/page.js +3 -3
  171. package/_standalone/.next/server/app/trash/page.js.nft.json +1 -1
  172. package/_standalone/.next/server/app/trash/page_client-reference-manifest.js +1 -1
  173. package/_standalone/.next/server/app/view/[...path]/page.js +4 -4
  174. package/_standalone/.next/server/app/view/[...path]/page.js.nft.json +1 -1
  175. package/_standalone/.next/server/app/view/[...path]/page_client-reference-manifest.js +1 -1
  176. package/_standalone/.next/server/app-paths-manifest.json +18 -17
  177. package/_standalone/.next/server/chunks/1550.js +1 -1
  178. package/_standalone/.next/server/chunks/1750.js +1 -0
  179. package/_standalone/.next/server/chunks/1955.js +11 -0
  180. package/_standalone/.next/server/chunks/3680.js +1 -0
  181. package/_standalone/.next/server/chunks/4497.js +219 -0
  182. package/_standalone/.next/server/chunks/5560.js +2 -0
  183. package/_standalone/.next/server/chunks/6365.js +52 -0
  184. package/_standalone/.next/server/chunks/6539.js +1 -1
  185. package/_standalone/.next/server/chunks/8388.js +15 -0
  186. package/_standalone/.next/server/chunks/953.js +42 -2
  187. package/_standalone/.next/server/functions-config-manifest.json +2 -1
  188. package/_standalone/.next/server/instrumentation.js +1 -1
  189. package/_standalone/.next/server/middleware-build-manifest.js +1 -1
  190. package/_standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  191. package/_standalone/.next/server/next-font-manifest.js +1 -1
  192. package/_standalone/.next/server/next-font-manifest.json +1 -1
  193. package/_standalone/.next/server/pages/500.html +2 -2
  194. package/_standalone/.next/server/server-reference-manifest.js +1 -1
  195. package/_standalone/.next/server/server-reference-manifest.json +1 -1
  196. package/_standalone/.next/static/chunks/1053-0adaccc98a752a58.js +29 -0
  197. package/_standalone/.next/static/chunks/1239.10a0710c2772ab34.js +1 -0
  198. package/_standalone/.next/static/chunks/{1814.e2da5460ded71d71.js → 1814.2ee1d03297c0bccd.js} +1 -1
  199. package/_standalone/.next/static/chunks/{1a258343-030e4d6735874dd4.js → 1a258343-9803591e4aaee1f6.js} +1 -1
  200. package/_standalone/.next/static/chunks/2631.dc56e83472bde281.js +1 -0
  201. package/_standalone/.next/static/chunks/2872.045858d00bd8307f.js +8 -0
  202. package/_standalone/.next/static/chunks/2968.f10ccee9e7e2324d.js +2 -0
  203. package/_standalone/.next/static/chunks/3160-83a7e0b94414b3ac.js +1 -0
  204. package/_standalone/.next/static/chunks/{3637.4bcd01a4db78b894.js → 3637.f9a42cca59fd5bb5.js} +1 -1
  205. package/_standalone/.next/static/chunks/4033.6666700547b20141.js +1 -0
  206. package/_standalone/.next/static/chunks/4563-c2afaeacb241d1d0.js +6 -0
  207. package/_standalone/.next/static/chunks/516.24ee058b1d4b1fed.js +8 -0
  208. package/_standalone/.next/static/chunks/5627.c4337d7289acb31f.js +1 -0
  209. package/_standalone/.next/static/chunks/5956.b445072b35915129.js +1 -0
  210. package/_standalone/.next/static/chunks/6090-c98268ca726a68d3.js +1 -0
  211. package/_standalone/.next/static/chunks/6357-c645842834c0d4cd.js +1 -0
  212. package/_standalone/.next/static/chunks/6826.7b7d94dd0fd83812.js +1 -0
  213. package/_standalone/.next/static/chunks/{8409-de5726a4a278d28f.js → 6926-4af497b83952fa87.js} +1 -1
  214. package/_standalone/.next/static/chunks/7266-bb7be1128eccd48e.js +13 -0
  215. package/_standalone/.next/static/chunks/7753.63831cfc54a55fbb.js +1 -0
  216. package/_standalone/.next/static/chunks/862.9f526e964489e2e5.js +1 -0
  217. package/_standalone/.next/static/chunks/{1384-55276d40a9da4e88.js → 8663-de911d2d395622be.js} +2 -2
  218. package/_standalone/.next/static/chunks/9300.118b8c840634383f.js +28 -0
  219. package/_standalone/.next/static/chunks/9371-575600301da5d6bb.js +1 -0
  220. package/_standalone/.next/static/chunks/95247769.3b5caae1c1a76ce1.js +4 -0
  221. package/_standalone/.next/static/chunks/9602-423291fdb36396d1.js +1 -0
  222. package/_standalone/.next/static/chunks/app/.well-known/agent-card.json/route-400c3c09b1540c14.js +1 -0
  223. package/_standalone/.next/static/chunks/app/_global-error/page-400c3c09b1540c14.js +1 -0
  224. package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-3e08abb495ecd5fd.js +1 -0
  225. package/_standalone/.next/static/chunks/app/agents/page-e7e0f87ad3d765ac.js +5 -0
  226. package/_standalone/.next/static/chunks/app/api/a2a/agents/route-400c3c09b1540c14.js +1 -0
  227. package/_standalone/.next/static/chunks/app/api/a2a/delegations/route-400c3c09b1540c14.js +1 -0
  228. package/_standalone/.next/static/chunks/app/api/a2a/discover/route-400c3c09b1540c14.js +1 -0
  229. package/_standalone/.next/static/chunks/app/api/a2a/route-400c3c09b1540c14.js +1 -0
  230. package/_standalone/.next/static/chunks/app/api/acp/config/route-400c3c09b1540c14.js +1 -0
  231. package/_standalone/.next/static/chunks/app/api/acp/detect/route-400c3c09b1540c14.js +1 -0
  232. package/_standalone/.next/static/chunks/app/api/acp/install/route-400c3c09b1540c14.js +1 -0
  233. package/_standalone/.next/static/chunks/app/api/acp/registry/route-400c3c09b1540c14.js +1 -0
  234. package/_standalone/.next/static/chunks/app/api/acp/session/route-400c3c09b1540c14.js +1 -0
  235. package/_standalone/.next/static/chunks/app/api/agent-activity/route-400c3c09b1540c14.js +1 -0
  236. package/_standalone/.next/static/chunks/app/api/ask/route-400c3c09b1540c14.js +1 -0
  237. package/_standalone/.next/static/chunks/app/api/ask-sessions/route-400c3c09b1540c14.js +1 -0
  238. package/_standalone/.next/static/chunks/app/api/auth/route-400c3c09b1540c14.js +1 -0
  239. package/_standalone/.next/static/chunks/app/api/backlinks/route-400c3c09b1540c14.js +1 -0
  240. package/_standalone/.next/static/chunks/app/api/bootstrap/route-400c3c09b1540c14.js +1 -0
  241. package/_standalone/.next/static/chunks/app/api/changes/route-400c3c09b1540c14.js +1 -0
  242. package/_standalone/.next/static/chunks/app/api/export/route-400c3c09b1540c14.js +1 -0
  243. package/_standalone/.next/static/chunks/app/api/extract-pdf/route-400c3c09b1540c14.js +1 -0
  244. package/_standalone/.next/static/chunks/app/api/file/import/route-400c3c09b1540c14.js +1 -0
  245. package/_standalone/.next/static/chunks/app/api/file/route-400c3c09b1540c14.js +1 -0
  246. package/_standalone/.next/static/chunks/app/api/files/route-400c3c09b1540c14.js +1 -0
  247. package/_standalone/.next/static/chunks/app/api/git/route-400c3c09b1540c14.js +1 -0
  248. package/_standalone/.next/static/chunks/app/api/graph/route-400c3c09b1540c14.js +1 -0
  249. package/_standalone/.next/static/chunks/app/api/health/route-400c3c09b1540c14.js +1 -0
  250. package/_standalone/.next/static/chunks/app/api/inbox/route-400c3c09b1540c14.js +1 -0
  251. package/_standalone/.next/static/chunks/app/api/init/route-400c3c09b1540c14.js +1 -0
  252. package/_standalone/.next/static/chunks/app/api/mcp/agents/route-400c3c09b1540c14.js +1 -0
  253. package/_standalone/.next/static/chunks/app/api/mcp/install/route-400c3c09b1540c14.js +1 -0
  254. package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-400c3c09b1540c14.js +1 -0
  255. package/_standalone/.next/static/chunks/app/api/mcp/restart/route-400c3c09b1540c14.js +1 -0
  256. package/_standalone/.next/static/chunks/app/api/mcp/status/route-400c3c09b1540c14.js +1 -0
  257. package/_standalone/.next/static/chunks/app/api/monitoring/route-400c3c09b1540c14.js +1 -0
  258. package/_standalone/.next/static/chunks/app/api/recent-files/route-400c3c09b1540c14.js +1 -0
  259. package/_standalone/.next/static/chunks/app/api/restart/route-400c3c09b1540c14.js +1 -0
  260. package/_standalone/.next/static/chunks/app/api/search/route-400c3c09b1540c14.js +1 -0
  261. package/_standalone/.next/static/chunks/app/api/settings/list-models/route-400c3c09b1540c14.js +1 -0
  262. package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-400c3c09b1540c14.js +1 -0
  263. package/_standalone/.next/static/chunks/app/api/settings/route-400c3c09b1540c14.js +1 -0
  264. package/_standalone/.next/static/chunks/app/api/settings/test-key/route-400c3c09b1540c14.js +1 -0
  265. package/_standalone/.next/static/chunks/app/api/setup/check-path/route-400c3c09b1540c14.js +1 -0
  266. package/_standalone/.next/static/chunks/app/api/setup/check-port/route-400c3c09b1540c14.js +1 -0
  267. package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-400c3c09b1540c14.js +1 -0
  268. package/_standalone/.next/static/chunks/app/api/setup/ls/route-400c3c09b1540c14.js +1 -0
  269. package/_standalone/.next/static/chunks/app/api/setup/route-400c3c09b1540c14.js +1 -0
  270. package/_standalone/.next/static/chunks/app/api/skills/route-400c3c09b1540c14.js +1 -0
  271. package/_standalone/.next/static/chunks/app/api/sync/route-400c3c09b1540c14.js +1 -0
  272. package/_standalone/.next/static/chunks/app/api/tree-version/route-400c3c09b1540c14.js +1 -0
  273. package/_standalone/.next/static/chunks/app/api/uninstall/route-400c3c09b1540c14.js +1 -0
  274. package/_standalone/.next/static/chunks/app/api/update/route-400c3c09b1540c14.js +1 -0
  275. package/_standalone/.next/static/chunks/app/api/update-check/route-400c3c09b1540c14.js +1 -0
  276. package/_standalone/.next/static/chunks/app/api/update-status/route-400c3c09b1540c14.js +1 -0
  277. package/_standalone/.next/static/chunks/app/api/workflows/route-400c3c09b1540c14.js +1 -0
  278. package/_standalone/.next/static/chunks/app/changes/page-350992cf5091bc5b.js +1 -0
  279. package/_standalone/.next/static/chunks/app/echo/[segment]/page-addf014fcf23fad5.js +11 -0
  280. package/_standalone/.next/static/chunks/app/echo/page-400c3c09b1540c14.js +1 -0
  281. package/_standalone/.next/static/chunks/app/explore/page-5eb2835e9e3ab4bb.js +4 -0
  282. package/_standalone/.next/static/chunks/app/help/page-3d0e1ceaa4abc243.js +1 -0
  283. package/_standalone/.next/static/chunks/app/layout-9378c1c8d3e5761b.js +186 -0
  284. package/_standalone/.next/static/chunks/app/login/page-24236460fa7c11d0.js +1 -0
  285. package/_standalone/.next/static/chunks/app/page-9bae420fbbdc5fff.js +7 -0
  286. package/_standalone/.next/static/chunks/app/setup/page-99ed3d1bb6b8f4ef.js +1 -0
  287. package/_standalone/.next/static/chunks/app/trash/page-b61ef2d5cd4f8d73.js +1 -0
  288. package/_standalone/.next/static/chunks/app/view/[...path]/loading-400c3c09b1540c14.js +1 -0
  289. package/_standalone/.next/static/chunks/app/view/[...path]/not-found-61474670d6bb6116.js +1 -0
  290. package/_standalone/.next/static/chunks/app/view/[...path]/page-44fa78cbea613a78.js +12 -0
  291. package/_standalone/.next/static/chunks/e71f6c19-4df85185bf989b49.js +1 -0
  292. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-400c3c09b1540c14.js +1 -0
  293. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-400c3c09b1540c14.js +1 -0
  294. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-400c3c09b1540c14.js +1 -0
  295. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-400c3c09b1540c14.js +1 -0
  296. package/_standalone/.next/static/chunks/webpack-c28c55d0a6021a6b.js +1 -0
  297. package/_standalone/.next/static/css/d300701f384db50d.css +1 -0
  298. package/_standalone/.next/static/rZLs1krFuduixvcVNe6q3/_buildManifest.js +1 -0
  299. package/_standalone/.next/trace +63 -53
  300. package/_standalone/.next/types/routes.d.ts +2 -1
  301. package/_standalone/.next/types/validator.ts +9 -0
  302. package/_standalone/__tests__/agent/chat-mode.test.ts +103 -0
  303. package/_standalone/__tests__/agents/agents-content-dashboard.test.tsx +4 -3
  304. package/_standalone/__tests__/api/bootstrap.test.ts +0 -2
  305. package/_standalone/__tests__/api/file.test.ts +22 -1
  306. package/_standalone/__tests__/api/install-skill.test.ts +2 -2
  307. package/_standalone/__tests__/api/mcp-install.test.ts +9 -10
  308. package/_standalone/__tests__/api/setup.test.ts +2 -2
  309. package/_standalone/__tests__/api/test-key.test.ts +73 -147
  310. package/_standalone/__tests__/ask/ask-content-input-during-run.test.tsx +1 -1
  311. package/_standalone/__tests__/ask/mode-capsule.test.ts +95 -0
  312. package/_standalone/__tests__/core/inbox.test.ts +250 -0
  313. package/_standalone/__tests__/core/skill-install-logic.test.ts +3 -3
  314. package/_standalone/__tests__/core/sync-status.test.ts +1 -1
  315. package/_standalone/__tests__/core/tools.test.ts +11 -6
  316. package/_standalone/__tests__/lib/echo-pages-visual-i18n.test.ts +2 -2
  317. package/_standalone/__tests__/lib/i18n-new-keys.test.ts +2 -2
  318. package/_standalone/__tests__/panels/agents-panel-hub.test.tsx +2 -2
  319. package/_standalone/__tests__/settings/activity-bar-update-badge.test.tsx +1 -1
  320. package/_standalone/__tests__/settings/settings-update-badge.test.tsx +1 -1
  321. package/_standalone/__tests__/settings/update-tab-availability-sync.test.tsx +1 -1
  322. package/_standalone/__tests__/settings/update-tab-browser.test.tsx +1 -1
  323. package/_standalone/__tests__/settings/update-tab-desktop.test.tsx +1 -1
  324. package/_standalone/__tests__/setup.ts +3 -5
  325. package/_standalone/app/globals.css +11 -1
  326. package/_standalone/components/ActivityBar.tsx +26 -10
  327. package/_standalone/components/AskFab.tsx +1 -1
  328. package/_standalone/components/AskModal.tsx +1 -1
  329. package/_standalone/components/Backlinks.tsx +1 -1
  330. package/_standalone/components/CreateSpaceModal.tsx +7 -55
  331. package/_standalone/components/EchoSpotlight.tsx +1 -1
  332. package/_standalone/components/ExportModal.tsx +1 -1
  333. package/_standalone/components/FileTree.tsx +64 -79
  334. package/_standalone/components/FindInPage.tsx +1 -1
  335. package/_standalone/components/GuideCard.tsx +1 -1
  336. package/_standalone/components/ImportModal.tsx +1 -1
  337. package/_standalone/components/KeyboardShortcuts.tsx +1 -1
  338. package/_standalone/components/MarkdownView.tsx +11 -1
  339. package/_standalone/components/OnboardingView.tsx +1 -1
  340. package/_standalone/components/OrganizeToast.tsx +1 -1
  341. package/_standalone/components/Panel.tsx +82 -4
  342. package/_standalone/components/QuickSuggestion.tsx +1 -1
  343. package/_standalone/components/RightAgentDetailPanel.tsx +2 -2
  344. package/_standalone/components/RightAskPanel.tsx +58 -22
  345. package/_standalone/components/SearchModal.tsx +1 -1
  346. package/_standalone/components/Sidebar.tsx +1 -1
  347. package/_standalone/components/SidebarLayout.tsx +52 -16
  348. package/_standalone/components/SpaceInitToast.tsx +1 -1
  349. package/_standalone/components/SyncStatusBar.tsx +2 -2
  350. package/_standalone/components/SystemPulse.tsx +12 -6
  351. package/_standalone/components/TableOfContents.tsx +86 -39
  352. package/_standalone/components/agents/AgentActivitySection.tsx +225 -0
  353. package/_standalone/components/agents/AgentsMcpSection.tsx +7 -16
  354. package/_standalone/components/agents/AgentsOverviewSection.tsx +28 -27
  355. package/_standalone/components/agents/AgentsPanelA2aTab.tsx +1 -1
  356. package/_standalone/components/agents/AgentsPanelSessionsTab.tsx +6 -1
  357. package/_standalone/components/agents/AgentsSkillsSection.tsx +1 -1
  358. package/_standalone/components/agents/DiscoverAgentModal.tsx +1 -1
  359. package/_standalone/components/agents/RecentActivityFeed.tsx +49 -88
  360. package/_standalone/components/agents/agent-activity-shared.tsx +110 -0
  361. package/_standalone/components/ask/AgentSelectorCapsule.tsx +1 -1
  362. package/_standalone/components/ask/AskContent.tsx +332 -486
  363. package/_standalone/components/ask/AskHeader.tsx +61 -0
  364. package/_standalone/components/ask/FileChip.tsx +9 -5
  365. package/_standalone/components/ask/MessageList.tsx +88 -21
  366. package/_standalone/components/ask/ModeCapsule.tsx +180 -0
  367. package/_standalone/components/ask/ProviderModelCapsule.tsx +284 -0
  368. package/_standalone/components/ask/SessionHistory.tsx +63 -10
  369. package/_standalone/components/ask/SessionTabBar.tsx +1 -1
  370. package/_standalone/components/ask/ThinkingBlock.tsx +1 -1
  371. package/_standalone/components/ask/ToolCallBlock.tsx +28 -24
  372. package/_standalone/components/changes/ChangesBanner.tsx +1 -1
  373. package/_standalone/components/echo/EchoInsightCollapsible.tsx +1 -1
  374. package/_standalone/components/echo/EchoSegmentNav.tsx +1 -1
  375. package/_standalone/components/home/InboxSection.tsx +268 -0
  376. package/_standalone/components/panels/AgentsPanel.tsx +3 -2
  377. package/_standalone/components/panels/AgentsPanelHubNav.tsx +2 -6
  378. package/_standalone/components/panels/DiscoverPanel.tsx +1 -1
  379. package/_standalone/components/panels/EchoPanel.tsx +1 -1
  380. package/_standalone/components/panels/EchoSidebarStats.tsx +1 -1
  381. package/_standalone/components/panels/ImportHistoryPanel.tsx +1 -1
  382. package/_standalone/components/panels/PanelHeader.tsx +1 -1
  383. package/_standalone/components/panels/PluginsPanel.tsx +1 -1
  384. package/_standalone/components/panels/SearchPanel.tsx +5 -2
  385. package/_standalone/components/panels/SyncPopover.tsx +1 -1
  386. package/_standalone/components/panels/WorkflowsPanel.tsx +1 -1
  387. package/_standalone/components/renderers/agent-inspector/AgentInspectorRenderer.tsx +18 -0
  388. package/_standalone/components/renderers/agent-inspector/manifest.ts +16 -0
  389. package/_standalone/components/renderers/todo/TodoRenderer.tsx +489 -75
  390. package/_standalone/components/settings/AiTab.tsx +198 -127
  391. package/_standalone/components/settings/AppearanceTab.tsx +48 -50
  392. package/_standalone/components/settings/KnowledgeTab.tsx +92 -27
  393. package/_standalone/components/settings/McpAgentInstall.tsx +1 -1
  394. package/_standalone/components/settings/McpSkillsSection.tsx +1 -1
  395. package/_standalone/components/settings/McpTab.tsx +145 -7
  396. package/_standalone/components/settings/PluginsTab.tsx +1 -1
  397. package/_standalone/components/settings/SettingsContent.tsx +5 -2
  398. package/_standalone/components/settings/SyncTab.tsx +615 -230
  399. package/_standalone/components/settings/UninstallTab.tsx +1 -1
  400. package/_standalone/components/settings/UpdateTab.tsx +2 -2
  401. package/_standalone/components/settings/types.ts +4 -5
  402. package/_standalone/components/setup/StepAI.tsx +70 -49
  403. package/_standalone/components/setup/StepDots.tsx +1 -1
  404. package/_standalone/components/setup/StepReview.tsx +176 -8
  405. package/_standalone/components/setup/types.ts +11 -8
  406. package/_standalone/components/shared/ProviderSelect.tsx +134 -0
  407. package/_standalone/components/walkthrough/WalkthroughOverlay.tsx +2 -2
  408. package/_standalone/components/walkthrough/WalkthroughTooltip.tsx +2 -2
  409. package/_standalone/components/walkthrough/index.ts +1 -1
  410. package/_standalone/data/skills/mindos/SKILL.md +3 -3
  411. package/_standalone/data/skills/mindos-zh/SKILL.md +3 -3
  412. package/_standalone/hooks/useAcpDetection.ts +1 -1
  413. package/_standalone/hooks/useAskChat.ts +248 -0
  414. package/_standalone/hooks/useAskPanel.ts +24 -4
  415. package/_standalone/hooks/useAskSession.ts +15 -0
  416. package/_standalone/lib/acp/types.ts +1 -1
  417. package/_standalone/lib/api.ts +3 -1
  418. package/_standalone/lib/core/types.ts +2 -0
  419. package/_standalone/lib/i18n/modules/ai-chat.ts +35 -13
  420. package/_standalone/lib/i18n/modules/features.ts +2 -2
  421. package/_standalone/lib/i18n/modules/knowledge.ts +82 -2
  422. package/_standalone/lib/i18n/modules/navigation.ts +6 -2
  423. package/_standalone/lib/i18n/modules/onboarding.ts +39 -9
  424. package/_standalone/lib/i18n/modules/panels.ts +78 -29
  425. package/_standalone/lib/i18n/modules/settings.ts +207 -23
  426. package/_standalone/lib/inbox-upload.ts +93 -0
  427. package/_standalone/lib/settings-ai-client.ts +13 -12
  428. package/_standalone/lib/space-ai-init.ts +66 -0
  429. package/_standalone/lib/stores/McpStoreInit.tsx +18 -0
  430. package/_standalone/lib/stores/WalkthroughInit.tsx +20 -0
  431. package/_standalone/lib/stores/locale-store.ts +55 -0
  432. package/_standalone/lib/stores/mcp-store.ts +156 -0
  433. package/_standalone/lib/stores/walkthrough-store.ts +118 -0
  434. package/_standalone/package-lock.json +40 -8
  435. package/_standalone/package.json +3 -1
  436. package/_standalone/tsconfig.json +1 -1
  437. package/_standalone/tsconfig.tsbuildinfo +1 -1
  438. package/app/app/api/acp/detect/route.ts +29 -20
  439. package/app/app/api/agent-activity/route.ts +1 -1
  440. package/app/app/api/ask/route.ts +103 -29
  441. package/app/app/api/ask-sessions/route.ts +1 -0
  442. package/app/app/api/bootstrap/route.ts +1 -3
  443. package/app/app/api/file/route.ts +34 -4
  444. package/app/app/api/inbox/route.ts +61 -0
  445. package/app/app/api/settings/list-models/route.ts +73 -53
  446. package/app/app/api/settings/route.ts +46 -55
  447. package/app/app/api/settings/test-key/route.ts +57 -114
  448. package/app/app/api/setup/route.ts +31 -21
  449. package/app/app/api/sync/route.ts +122 -12
  450. package/app/app/api/update-check/route.ts +2 -2
  451. package/app/app/globals.css +11 -1
  452. package/app/app/layout.tsx +2 -3
  453. package/app/app/login/page.tsx +1 -1
  454. package/app/app/view/[...path]/ViewPageClient.tsx +10 -10
  455. package/app/app/view/[...path]/not-found.tsx +1 -1
  456. package/app/components/ActivityBar.tsx +26 -10
  457. package/app/components/AskFab.tsx +1 -1
  458. package/app/components/AskModal.tsx +1 -1
  459. package/app/components/Backlinks.tsx +1 -1
  460. package/app/components/CreateSpaceModal.tsx +7 -55
  461. package/app/components/DirView.tsx +93 -11
  462. package/app/components/EchoSpotlight.tsx +1 -1
  463. package/app/components/ExportModal.tsx +1 -1
  464. package/app/components/FileTree.tsx +64 -79
  465. package/app/components/FindInPage.tsx +1 -1
  466. package/app/components/GuideCard.tsx +1 -1
  467. package/app/components/HomeContent.tsx +21 -14
  468. package/app/components/ImportModal.tsx +1 -1
  469. package/app/components/KeyboardShortcuts.tsx +1 -1
  470. package/app/components/MarkdownView.tsx +11 -1
  471. package/app/components/OnboardingView.tsx +1 -1
  472. package/app/components/OrganizeToast.tsx +1 -1
  473. package/app/components/Panel.tsx +82 -4
  474. package/app/components/QuickSuggestion.tsx +1 -1
  475. package/app/components/RightAgentDetailPanel.tsx +2 -2
  476. package/app/components/RightAskPanel.tsx +58 -22
  477. package/app/components/SearchModal.tsx +1 -1
  478. package/app/components/Sidebar.tsx +1 -1
  479. package/app/components/SidebarLayout.tsx +52 -16
  480. package/app/components/SpaceInitToast.tsx +1 -1
  481. package/app/components/SyncStatusBar.tsx +2 -2
  482. package/app/components/SystemPulse.tsx +12 -6
  483. package/app/components/TableOfContents.tsx +86 -39
  484. package/app/components/TrashPageClient.tsx +1 -1
  485. package/app/components/UpdateOverlay.tsx +2 -2
  486. package/app/components/agents/AgentActivitySection.tsx +225 -0
  487. package/app/components/agents/AgentDetailContent.tsx +234 -3
  488. package/app/components/agents/AgentsContentPage.tsx +13 -2
  489. package/app/components/agents/AgentsMcpSection.tsx +7 -16
  490. package/app/components/agents/AgentsOverviewSection.tsx +28 -27
  491. package/app/components/agents/AgentsPanelA2aTab.tsx +1 -1
  492. package/app/components/agents/AgentsPanelSessionsTab.tsx +6 -1
  493. package/app/components/agents/AgentsSkillsSection.tsx +1 -1
  494. package/app/components/agents/DiscoverAgentModal.tsx +1 -1
  495. package/app/components/agents/RecentActivityFeed.tsx +49 -88
  496. package/app/components/agents/agent-activity-shared.tsx +110 -0
  497. package/app/components/agents/agents-content-model.ts +2 -2
  498. package/app/components/ask/AgentSelectorCapsule.tsx +1 -1
  499. package/app/components/ask/AskContent.tsx +332 -486
  500. package/app/components/ask/AskHeader.tsx +61 -0
  501. package/app/components/ask/FileChip.tsx +9 -5
  502. package/app/components/ask/MessageList.tsx +88 -21
  503. package/app/components/ask/ModeCapsule.tsx +180 -0
  504. package/app/components/ask/ProviderModelCapsule.tsx +284 -0
  505. package/app/components/ask/SessionHistory.tsx +63 -10
  506. package/app/components/ask/SessionTabBar.tsx +1 -1
  507. package/app/components/ask/ThinkingBlock.tsx +1 -1
  508. package/app/components/ask/ToolCallBlock.tsx +28 -24
  509. package/app/components/changes/ChangesBanner.tsx +1 -1
  510. package/app/components/changes/ChangesContentPage.tsx +1 -1
  511. package/app/components/echo/EchoInsightCollapsible.tsx +1 -1
  512. package/app/components/echo/EchoSegmentNav.tsx +1 -1
  513. package/app/components/echo/EchoSegmentPageClient.tsx +1 -1
  514. package/app/components/explore/ExploreContent.tsx +1 -1
  515. package/app/components/help/HelpContent.tsx +1 -1
  516. package/app/components/home/InboxSection.tsx +268 -0
  517. package/app/components/panels/AgentsPanel.tsx +3 -2
  518. package/app/components/panels/AgentsPanelHubNav.tsx +2 -6
  519. package/app/components/panels/DiscoverPanel.tsx +1 -1
  520. package/app/components/panels/EchoPanel.tsx +1 -1
  521. package/app/components/panels/EchoSidebarStats.tsx +1 -1
  522. package/app/components/panels/ImportHistoryPanel.tsx +1 -1
  523. package/app/components/panels/PanelHeader.tsx +1 -1
  524. package/app/components/panels/PluginsPanel.tsx +1 -1
  525. package/app/components/panels/SearchPanel.tsx +5 -2
  526. package/app/components/panels/SyncPopover.tsx +1 -1
  527. package/app/components/panels/WorkflowsPanel.tsx +1 -1
  528. package/app/components/renderers/agent-inspector/AgentInspectorRenderer.tsx +18 -0
  529. package/app/components/renderers/todo/TodoRenderer.tsx +489 -75
  530. package/app/components/settings/AiTab.tsx +198 -127
  531. package/app/components/settings/AppearanceTab.tsx +48 -50
  532. package/app/components/settings/KnowledgeTab.tsx +92 -27
  533. package/app/components/settings/McpAgentInstall.tsx +1 -1
  534. package/app/components/settings/McpSkillsSection.tsx +1 -1
  535. package/app/components/settings/McpTab.tsx +145 -7
  536. package/app/components/settings/PluginsTab.tsx +1 -1
  537. package/app/components/settings/SettingsContent.tsx +5 -2
  538. package/app/components/settings/SyncTab.tsx +615 -230
  539. package/app/components/settings/UninstallTab.tsx +1 -1
  540. package/app/components/settings/UpdateTab.tsx +2 -2
  541. package/app/components/settings/types.ts +4 -5
  542. package/app/components/setup/StepAI.tsx +70 -49
  543. package/app/components/setup/StepDots.tsx +1 -1
  544. package/app/components/setup/StepReview.tsx +176 -8
  545. package/app/components/setup/index.tsx +73 -39
  546. package/app/components/setup/types.ts +11 -8
  547. package/app/components/shared/ProviderSelect.tsx +134 -0
  548. package/app/components/walkthrough/WalkthroughOverlay.tsx +2 -2
  549. package/app/components/walkthrough/WalkthroughTooltip.tsx +2 -2
  550. package/app/components/walkthrough/index.ts +1 -1
  551. package/app/data/skills/mindos/SKILL.md +3 -3
  552. package/app/data/skills/mindos-zh/SKILL.md +3 -3
  553. package/app/hooks/useAcpDetection.ts +1 -1
  554. package/app/hooks/useAskChat.ts +248 -0
  555. package/app/hooks/useAskPanel.ts +24 -4
  556. package/app/hooks/useAskSession.ts +15 -0
  557. package/app/lib/acp/types.ts +1 -1
  558. package/app/lib/actions.ts +13 -0
  559. package/app/lib/agent/log.ts +2 -0
  560. package/app/lib/agent/model.ts +69 -81
  561. package/app/lib/agent/prompt.ts +27 -0
  562. package/app/lib/agent/providers.ts +299 -0
  563. package/app/lib/agent/tools.ts +26 -4
  564. package/app/lib/api.ts +3 -1
  565. package/app/lib/core/agent-audit-log.ts +7 -0
  566. package/app/lib/core/fs-ops.ts +9 -4
  567. package/app/lib/core/inbox.ts +181 -0
  568. package/app/lib/core/index.ts +4 -0
  569. package/app/lib/core/tree.ts +3 -0
  570. package/app/lib/core/types.ts +2 -0
  571. package/app/lib/fs.ts +26 -2
  572. package/app/lib/i18n/modules/ai-chat.ts +35 -13
  573. package/app/lib/i18n/modules/features.ts +2 -2
  574. package/app/lib/i18n/modules/knowledge.ts +82 -2
  575. package/app/lib/i18n/modules/navigation.ts +6 -2
  576. package/app/lib/i18n/modules/onboarding.ts +39 -9
  577. package/app/lib/i18n/modules/panels.ts +78 -29
  578. package/app/lib/i18n/modules/settings.ts +207 -23
  579. package/app/lib/inbox-upload.ts +93 -0
  580. package/app/lib/mcp-agents.ts +6 -7
  581. package/app/lib/renderers/index.ts +1 -2
  582. package/app/lib/settings-ai-client.ts +13 -12
  583. package/app/lib/settings.ts +48 -33
  584. package/app/lib/space-ai-init.ts +66 -0
  585. package/app/lib/stores/LocaleStoreInit.tsx +18 -0
  586. package/app/lib/stores/McpStoreInit.tsx +18 -0
  587. package/app/lib/stores/WalkthroughInit.tsx +20 -0
  588. package/app/lib/stores/locale-store.ts +55 -0
  589. package/app/lib/stores/mcp-store.ts +156 -0
  590. package/app/lib/stores/walkthrough-store.ts +118 -0
  591. package/app/lib/types.ts +20 -0
  592. package/app/package.json +3 -1
  593. package/app/tsconfig.json +1 -1
  594. package/bin/cli.js +46 -27
  595. package/bin/commands/file.js +7 -4
  596. package/bin/commands/space.js +4 -0
  597. package/bin/lib/mcp-agents.js +26 -2
  598. package/bin/lib/mcp-install.js +11 -3
  599. package/bin/lib/sync.js +140 -34
  600. package/mcp/README.md +2 -2
  601. package/mcp/dist/index.cjs +43 -43
  602. package/mcp/package.json +1 -1
  603. package/mcp/src/index.ts +77 -61
  604. package/package.json +1 -1
  605. package/scripts/setup.js +1 -1
  606. package/skills/mindos/SKILL.md +3 -3
  607. package/skills/mindos/references/preference-capture.md +4 -4
  608. package/skills/mindos/references/write-supplement.md +2 -2
  609. package/skills/mindos-zh/SKILL.md +3 -3
  610. package/skills/mindos-zh/references/preference-capture.md +4 -4
  611. package/skills/mindos-zh/references/write-supplement.md +2 -2
  612. package/templates/empty/INSTRUCTION.md +0 -1
  613. package/templates/en/INSTRUCTION.md +0 -1
  614. package/templates/template-generation-skill.md +0 -1
  615. package/templates/zh/INSTRUCTION.md +0 -1
  616. package/_standalone/.next/server/chunks/1473.js +0 -52
  617. package/_standalone/.next/server/chunks/248.js +0 -15
  618. package/_standalone/.next/server/chunks/359.js +0 -2
  619. package/_standalone/.next/server/chunks/4931.js +0 -202
  620. package/_standalone/.next/server/chunks/7670.js +0 -1
  621. package/_standalone/.next/server/chunks/9414.js +0 -11
  622. package/_standalone/.next/static/chunks/1038-ed04d6651ec92312.js +0 -1
  623. package/_standalone/.next/static/chunks/1263-6df1734e4273adb1.js +0 -25
  624. package/_standalone/.next/static/chunks/275-ebcaaedabe706903.js +0 -1
  625. package/_standalone/.next/static/chunks/5637-b97c869adf70c82e.js +0 -1
  626. package/_standalone/.next/static/chunks/5681-a53362a1cd629dc6.js +0 -1
  627. package/_standalone/.next/static/chunks/9602-35ca17b688f1a4fe.js +0 -1
  628. package/_standalone/.next/static/chunks/9670-d59e4d45ed705f58.js +0 -6
  629. package/_standalone/.next/static/chunks/app/.well-known/agent-card.json/route-d4762cc48529e566.js +0 -1
  630. package/_standalone/.next/static/chunks/app/_global-error/page-d4762cc48529e566.js +0 -1
  631. package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-519d4da1142db5ef.js +0 -1
  632. package/_standalone/.next/static/chunks/app/agents/page-b709cf3103321609.js +0 -5
  633. package/_standalone/.next/static/chunks/app/api/a2a/agents/route-d4762cc48529e566.js +0 -1
  634. package/_standalone/.next/static/chunks/app/api/a2a/delegations/route-d4762cc48529e566.js +0 -1
  635. package/_standalone/.next/static/chunks/app/api/a2a/discover/route-d4762cc48529e566.js +0 -1
  636. package/_standalone/.next/static/chunks/app/api/a2a/route-d4762cc48529e566.js +0 -1
  637. package/_standalone/.next/static/chunks/app/api/acp/config/route-d4762cc48529e566.js +0 -1
  638. package/_standalone/.next/static/chunks/app/api/acp/detect/route-d4762cc48529e566.js +0 -1
  639. package/_standalone/.next/static/chunks/app/api/acp/install/route-d4762cc48529e566.js +0 -1
  640. package/_standalone/.next/static/chunks/app/api/acp/registry/route-d4762cc48529e566.js +0 -1
  641. package/_standalone/.next/static/chunks/app/api/acp/session/route-d4762cc48529e566.js +0 -1
  642. package/_standalone/.next/static/chunks/app/api/agent-activity/route-d4762cc48529e566.js +0 -1
  643. package/_standalone/.next/static/chunks/app/api/ask/route-d4762cc48529e566.js +0 -1
  644. package/_standalone/.next/static/chunks/app/api/ask-sessions/route-d4762cc48529e566.js +0 -1
  645. package/_standalone/.next/static/chunks/app/api/auth/route-d4762cc48529e566.js +0 -1
  646. package/_standalone/.next/static/chunks/app/api/backlinks/route-d4762cc48529e566.js +0 -1
  647. package/_standalone/.next/static/chunks/app/api/bootstrap/route-d4762cc48529e566.js +0 -1
  648. package/_standalone/.next/static/chunks/app/api/changes/route-d4762cc48529e566.js +0 -1
  649. package/_standalone/.next/static/chunks/app/api/export/route-d4762cc48529e566.js +0 -1
  650. package/_standalone/.next/static/chunks/app/api/extract-pdf/route-d4762cc48529e566.js +0 -1
  651. package/_standalone/.next/static/chunks/app/api/file/import/route-d4762cc48529e566.js +0 -1
  652. package/_standalone/.next/static/chunks/app/api/file/route-d4762cc48529e566.js +0 -1
  653. package/_standalone/.next/static/chunks/app/api/files/route-d4762cc48529e566.js +0 -1
  654. package/_standalone/.next/static/chunks/app/api/git/route-d4762cc48529e566.js +0 -1
  655. package/_standalone/.next/static/chunks/app/api/graph/route-d4762cc48529e566.js +0 -1
  656. package/_standalone/.next/static/chunks/app/api/health/route-d4762cc48529e566.js +0 -1
  657. package/_standalone/.next/static/chunks/app/api/init/route-d4762cc48529e566.js +0 -1
  658. package/_standalone/.next/static/chunks/app/api/mcp/agents/route-d4762cc48529e566.js +0 -1
  659. package/_standalone/.next/static/chunks/app/api/mcp/install/route-d4762cc48529e566.js +0 -1
  660. package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-d4762cc48529e566.js +0 -1
  661. package/_standalone/.next/static/chunks/app/api/mcp/restart/route-d4762cc48529e566.js +0 -1
  662. package/_standalone/.next/static/chunks/app/api/mcp/status/route-d4762cc48529e566.js +0 -1
  663. package/_standalone/.next/static/chunks/app/api/monitoring/route-d4762cc48529e566.js +0 -1
  664. package/_standalone/.next/static/chunks/app/api/recent-files/route-d4762cc48529e566.js +0 -1
  665. package/_standalone/.next/static/chunks/app/api/restart/route-d4762cc48529e566.js +0 -1
  666. package/_standalone/.next/static/chunks/app/api/search/route-d4762cc48529e566.js +0 -1
  667. package/_standalone/.next/static/chunks/app/api/settings/list-models/route-d4762cc48529e566.js +0 -1
  668. package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-d4762cc48529e566.js +0 -1
  669. package/_standalone/.next/static/chunks/app/api/settings/route-d4762cc48529e566.js +0 -1
  670. package/_standalone/.next/static/chunks/app/api/settings/test-key/route-d4762cc48529e566.js +0 -1
  671. package/_standalone/.next/static/chunks/app/api/setup/check-path/route-d4762cc48529e566.js +0 -1
  672. package/_standalone/.next/static/chunks/app/api/setup/check-port/route-d4762cc48529e566.js +0 -1
  673. package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-d4762cc48529e566.js +0 -1
  674. package/_standalone/.next/static/chunks/app/api/setup/ls/route-d4762cc48529e566.js +0 -1
  675. package/_standalone/.next/static/chunks/app/api/setup/route-d4762cc48529e566.js +0 -1
  676. package/_standalone/.next/static/chunks/app/api/skills/route-d4762cc48529e566.js +0 -1
  677. package/_standalone/.next/static/chunks/app/api/sync/route-d4762cc48529e566.js +0 -1
  678. package/_standalone/.next/static/chunks/app/api/tree-version/route-d4762cc48529e566.js +0 -1
  679. package/_standalone/.next/static/chunks/app/api/uninstall/route-d4762cc48529e566.js +0 -1
  680. package/_standalone/.next/static/chunks/app/api/update/route-d4762cc48529e566.js +0 -1
  681. package/_standalone/.next/static/chunks/app/api/update-check/route-d4762cc48529e566.js +0 -1
  682. package/_standalone/.next/static/chunks/app/api/update-status/route-d4762cc48529e566.js +0 -1
  683. package/_standalone/.next/static/chunks/app/api/workflows/route-d4762cc48529e566.js +0 -1
  684. package/_standalone/.next/static/chunks/app/changes/page-def5210095f8698d.js +0 -1
  685. package/_standalone/.next/static/chunks/app/echo/[segment]/page-be28eff31b1a186e.js +0 -11
  686. package/_standalone/.next/static/chunks/app/echo/page-d4762cc48529e566.js +0 -1
  687. package/_standalone/.next/static/chunks/app/explore/page-e4b8098dca200389.js +0 -4
  688. package/_standalone/.next/static/chunks/app/help/page-d5e57d73d94bad19.js +0 -1
  689. package/_standalone/.next/static/chunks/app/layout-d91cdbe2ecf135e1.js +0 -173
  690. package/_standalone/.next/static/chunks/app/login/page-321875768b70938a.js +0 -1
  691. package/_standalone/.next/static/chunks/app/page-718fdf170428b43c.js +0 -7
  692. package/_standalone/.next/static/chunks/app/setup/page-01ab1f549d636057.js +0 -1
  693. package/_standalone/.next/static/chunks/app/trash/page-89b1430cc8a16f18.js +0 -1
  694. package/_standalone/.next/static/chunks/app/view/[...path]/loading-d4762cc48529e566.js +0 -1
  695. package/_standalone/.next/static/chunks/app/view/[...path]/not-found-f22c513bbc348cc8.js +0 -1
  696. package/_standalone/.next/static/chunks/app/view/[...path]/page-6e3dc47699a01de1.js +0 -12
  697. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-d4762cc48529e566.js +0 -1
  698. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-d4762cc48529e566.js +0 -1
  699. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-d4762cc48529e566.js +0 -1
  700. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-d4762cc48529e566.js +0 -1
  701. package/_standalone/.next/static/chunks/webpack-3489a2b6c2882b0c.js +0 -1
  702. package/_standalone/.next/static/css/f16595bc58a16d5d.css +0 -1
  703. package/_standalone/.next/static/ushZ_NJ8rE3rG5hZfaYOX/_buildManifest.js +0 -1
  704. package/_standalone/components/walkthrough/WalkthroughProvider.tsx +0 -133
  705. package/_standalone/hooks/useMcpData.tsx +0 -169
  706. package/_standalone/lib/i18n-en.ts +0 -2
  707. package/_standalone/lib/i18n-zh.ts +0 -2
  708. package/_standalone/lib/types.ts +0 -70
  709. package/app/components/walkthrough/WalkthroughProvider.tsx +0 -133
  710. package/app/hooks/useMcpData.tsx +0 -169
  711. package/app/lib/LocaleContext.tsx +0 -60
  712. package/app/lib/i18n-en.ts +0 -2
  713. package/app/lib/i18n-zh.ts +0 -2
  714. /package/_standalone/.next/static/{ushZ_NJ8rE3rG5hZfaYOX → rZLs1krFuduixvcVNe6q3}/_ssgManifest.js +0 -0
package/bin/cli.js CHANGED
@@ -39,7 +39,7 @@
39
39
  */
40
40
 
41
41
  import { execSync, execFileSync, spawn as nodeSpawn } from 'node:child_process';
42
- import { existsSync, readFileSync, writeFileSync, rmSync, cpSync } from 'node:fs';
42
+ import { existsSync, readFileSync, writeFileSync, rmSync, cpSync, unlinkSync, mkdirSync } from 'node:fs';
43
43
  import { dirname, resolve } from 'node:path';
44
44
  import { homedir } from 'node:os';
45
45
 
@@ -371,21 +371,41 @@ const commands = {
371
371
  killByPort(Number(startupCfg.setupPort));
372
372
  }
373
373
 
374
- // ── Auto-migrate user-rules.md to root user-skill-rules.md ─────────────
374
+ // ── Auto-migrate user preferences .mindos/user-preferences.md ────────
375
375
  try {
376
376
  const mr = startupCfg.mindRoot;
377
377
  if (mr && existsSync(mr)) {
378
- const isZh = startupCfg.disabledSkills?.includes('mindos');
379
- const sName = isZh ? 'mindos-zh' : 'mindos';
380
- const sDir = resolve(mr, '.agents', 'skills', sName);
381
- const rootUserRules = resolve(mr, 'user-skill-rules.md');
382
-
383
- // Migrate: .agents/skills/{name}/user-rules.md {mindRoot}/user-skill-rules.md
384
- if (!existsSync(rootUserRules)) {
385
- const oldUserRules = resolve(sDir, 'user-rules.md');
386
- if (existsSync(oldUserRules)) {
387
- cpSync(oldUserRules, rootUserRules);
388
- console.log(` ${green('✓')} ${dim('Migrated user-rules.md → user-skill-rules.md')}`);
378
+ const mindosDir = resolve(mr, '.mindos');
379
+ const newPath = resolve(mindosDir, 'user-preferences.md');
380
+
381
+ if (!existsSync(newPath)) {
382
+ // Ensure .mindos/ directory exists
383
+ if (!existsSync(mindosDir)) mkdirSync(mindosDir, { recursive: true });
384
+
385
+ // Try migrate from previous locations (newest → oldest)
386
+ const prevPaths = [
387
+ resolve(mindosDir, 'user-rules.md'), // v0.6.x interim
388
+ resolve(mr, 'user-skill-rules.md'), // v0.5.x root
389
+ ];
390
+ let migrated = false;
391
+ for (const prev of prevPaths) {
392
+ if (existsSync(prev)) {
393
+ cpSync(prev, newPath);
394
+ unlinkSync(prev);
395
+ console.log(` ${green('✓')} ${dim(`Migrated ${prev.split('/').pop()} → .mindos/user-preferences.md`)}`);
396
+ migrated = true;
397
+ break;
398
+ }
399
+ }
400
+ if (!migrated) {
401
+ // Try legacy location (.agents/skills/{name}/user-rules.md)
402
+ const isZh = startupCfg.disabledSkills?.includes('mindos');
403
+ const sName = isZh ? 'mindos-zh' : 'mindos';
404
+ const oldPath = resolve(mr, '.agents', 'skills', sName, 'user-rules.md');
405
+ if (existsSync(oldPath)) {
406
+ cpSync(oldPath, newPath);
407
+ console.log(` ${green('✓')} ${dim('Migrated .agents/skills/ user-rules.md → .mindos/user-preferences.md')}`);
408
+ }
389
409
  }
390
410
  }
391
411
  }
@@ -567,19 +587,21 @@ ${dim('Shortcut: mindos start --daemon → install + start in one step')}
567
587
  }
568
588
 
569
589
  // Skill operating rules are now built into SKILL.md (shipped with the app).
570
- // This command only initializes user-skill-rules.md for personalization.
571
- const dest = resolve(mindRoot, 'user-skill-rules.md');
590
+ // This command only initializes .mindos/user-preferences.md for personalization.
591
+ const mindosDir = resolve(mindRoot, '.mindos');
592
+ const dest = resolve(mindosDir, 'user-preferences.md');
572
593
  if (existsSync(dest)) {
573
- console.log(` ${dim('skip')} user-skill-rules.md (already exists)\n`);
594
+ console.log(` ${dim('skip')} .mindos/user-preferences.md (already exists)\n`);
574
595
  } else {
596
+ if (!existsSync(mindosDir)) mkdirSync(mindosDir, { recursive: true });
575
597
  const isZh = config.disabledSkills?.includes('mindos');
576
598
  const lang = isZh ? 'zh' : 'en';
577
599
  const src = resolve(ROOT, 'templates', 'skill-rules', lang, 'user-rules.md');
578
600
  if (existsSync(src)) {
579
601
  cpSync(src, dest);
580
- console.log(` ${green('✓')} user-skill-rules.md created at ${dim(mindRoot)}\n`);
602
+ console.log(` ${green('✓')} .mindos/user-preferences.md created at ${dim(mindosDir)}\n`);
581
603
  } else {
582
- console.log(` ${dim('skip')} Template not found, create user-skill-rules.md manually if needed.\n`);
604
+ console.log(` ${dim('skip')} Template not found, create .mindos/user-preferences.md manually if needed.\n`);
583
605
  }
584
606
  }
585
607
  console.log(` ${dim('Note: Operating rules are now built into the app. No install needed.')}\n`);
@@ -841,7 +863,7 @@ ${dim('Shortcut: mindos start --daemon → install + start in one step')}
841
863
  const webPort = updateConfig.port ?? 3456;
842
864
  const mcpPort = updateConfig.mcpPort ?? 8781;
843
865
  console.log(dim(' (Waiting for Web UI to come back up — first run after update includes a rebuild...)'));
844
- const ready = await waitForHttp(Number(webPort), { retries: 180, intervalMs: 2000, label: 'Web UI', logFile: LOG_PATH });
866
+ const ready = await waitForHttp(Number(webPort), { retries: 450, intervalMs: 2000, label: 'Web UI', logFile: LOG_PATH });
845
867
  if (ready) {
846
868
  const localIP = getLocalIP();
847
869
  console.log(`\n${'─'.repeat(53)}`);
@@ -1268,18 +1290,15 @@ ${bold('Examples:')}
1268
1290
  const mindRoot = process.env.MIND_ROOT;
1269
1291
 
1270
1292
  if (sub === 'init') {
1271
- // Parse --non-interactive --remote <url> --branch <branch> --token <token>
1272
- const args = cliArgs.slice(1);
1273
- const flagIdx = (flag) => args.indexOf(flag);
1274
- const flagVal = (flag) => { const i = flagIdx(flag); return i >= 0 && i + 1 < args.length ? args[i + 1] : ''; };
1275
- const nonInteractive = args.includes('--non-interactive');
1293
+ // Flags are already parsed by parseArgs into cliFlags
1294
+ const nonInteractive = cliFlags['non-interactive'] === true;
1276
1295
 
1277
1296
  if (nonInteractive) {
1278
1297
  await initSync(mindRoot, {
1279
1298
  nonInteractive: true,
1280
- remote: flagVal('--remote'),
1281
- token: flagVal('--token'),
1282
- branch: flagVal('--branch') || 'main',
1299
+ remote: typeof cliFlags.remote === 'string' ? cliFlags.remote : '',
1300
+ token: typeof cliFlags.token === 'string' ? cliFlags.token : '',
1301
+ branch: (typeof cliFlags.branch === 'string' ? cliFlags.branch : '') || 'main',
1283
1302
  });
1284
1303
  } else {
1285
1304
  await initSync(mindRoot);
@@ -22,9 +22,12 @@ function getMindRoot() {
22
22
  }
23
23
 
24
24
  function resolvePath(root, filePath) {
25
- // Accept both relative (to mind root) and absolute paths
26
- if (filePath.startsWith('/')) return filePath;
27
- return resolve(root, filePath);
25
+ const resolved = resolve(root, filePath);
26
+ if (resolved !== root && !resolved.startsWith(root + '/')) {
27
+ console.error(red(`Access denied: path outside knowledge base`));
28
+ process.exit(EXIT.ERROR);
29
+ }
30
+ return resolved;
28
31
  }
29
32
 
30
33
  export const meta = {
@@ -128,7 +131,7 @@ function walkFiles(dir, root, opts = {}) {
128
131
 
129
132
  function fileList(root, _args, flags) {
130
133
  const files = walkFiles(root, root, {
131
- recursive: flags.recursive || flags.r || true,
134
+ recursive: flags.recursive ?? flags.r ?? true,
132
135
  space: flags.space || null,
133
136
  });
134
137
 
@@ -106,6 +106,10 @@ function countFiles(dir) {
106
106
 
107
107
  function resolvePath(root, relPath) {
108
108
  const full = relPath ? resolve(root, relPath) : root;
109
+ if (full !== root && !full.startsWith(root + '/')) {
110
+ console.error(red(`Access denied: path outside knowledge base`));
111
+ process.exit(EXIT.ERROR);
112
+ }
109
113
  if (!existsSync(full)) {
110
114
  console.error(red(`Not found: ${relPath || '(root)'}`));
111
115
  process.exit(EXIT.NOT_FOUND);
@@ -32,7 +32,7 @@ export const MCP_AGENTS = {
32
32
  global: '~/.cursor/mcp.json',
33
33
  key: 'mcpServers',
34
34
  preferredTransport: 'stdio',
35
- presenceDirs: ['~/.cursor/'],
35
+ presenceDirs: ['~/.cursor/extensions/'],
36
36
  },
37
37
  'windsurf': {
38
38
  name: 'Windsurf',
@@ -180,6 +180,30 @@ export const MCP_AGENTS = {
180
180
  '~/.config/Code/User/globalStorage/rooveterinaryinc.roo-cline/',
181
181
  ],
182
182
  },
183
+ 'github-copilot': {
184
+ name: 'GitHub Copilot',
185
+ project: '.vscode/mcp.json',
186
+ global: process.platform === 'darwin'
187
+ ? '~/Library/Application Support/Code/User/mcp.json'
188
+ : '~/.config/Code/User/mcp.json',
189
+ key: 'servers',
190
+ preferredTransport: 'stdio',
191
+ presenceDirs: [
192
+ '~/Library/Application Support/Code/',
193
+ '~/.config/Code/',
194
+ ],
195
+ presenceCli: 'code',
196
+ },
197
+ 'codex': {
198
+ name: 'Codex',
199
+ project: null,
200
+ global: '~/.codex/config.toml',
201
+ key: 'mcp_servers',
202
+ format: 'toml',
203
+ preferredTransport: 'stdio',
204
+ presenceCli: 'codex',
205
+ presenceDirs: ['~/.codex/'],
206
+ },
183
207
  };
184
208
 
185
209
  /**
@@ -204,7 +228,7 @@ export const SKILL_AGENT_REGISTRY = {
204
228
  'qoder': { mode: 'additional', skillAgentName: 'qoder' },
205
229
  'trae-cn': { mode: 'additional', skillAgentName: 'trae-cn' },
206
230
  'roo': { mode: 'additional', skillAgentName: 'roo' },
207
- 'vscode': { mode: 'universal' },
231
+ 'github-copilot': { mode: 'universal' },
208
232
  'codex': { mode: 'universal' },
209
233
  };
210
234
 
@@ -309,8 +309,8 @@ export async function mcpInstall() {
309
309
  continue;
310
310
  }
311
311
 
312
- // read + merge
313
- const absPath = expandHome(configPath);
312
+ // read + merge — resolve to absolute path for cross-platform safety
313
+ const absPath = resolve(expandHome(configPath));
314
314
  let config = {};
315
315
  if (existsSync(absPath)) {
316
316
  try { config = parseJsonc(readFileSync(absPath, 'utf-8')); } catch {
@@ -331,5 +331,13 @@ export async function mcpInstall() {
331
331
  console.log(`${green('✔')} ${existed ? 'Updated' : 'Installed'} MindOS MCP for ${bold(agent.name)} ${dim(`→ ${absPath}`)}`);
332
332
  }
333
333
 
334
- console.log(`\n${green('Done!')} ${agentKeys.length} agent(s) configured.\n`);
334
+ console.log(`\n${green('Done!')} ${agentKeys.length} agent(s) configured.`);
335
+
336
+ // Agents that require manual restart to pick up config changes
337
+ const needsRestart = new Set(['cursor', 'windsurf', 'trae', 'cline', 'roo-code']);
338
+ const restartAgents = agentKeys.filter(k => needsRestart.has(k)).map(k => MCP_AGENTS[k].name);
339
+ if (restartAgents.length > 0) {
340
+ console.log(`\n${yellow('Tip:')} ${restartAgents.join(', ')} must be restarted to load the new MCP config.`);
341
+ }
342
+ console.log();
335
343
  }
package/bin/lib/sync.js CHANGED
@@ -66,6 +66,54 @@ function gitExec(args, cwd) {
66
66
  return execFileSync('git', args, { cwd, encoding: 'utf-8', stdio: 'pipe' }).trim();
67
67
  }
68
68
 
69
+ /** Check if URL is SSH format (git@host:path) */
70
+ function isSSHUrl(url) {
71
+ return /^git@[\w.-]+:.+/.test(url);
72
+ }
73
+
74
+ /** Get SSH environment for git commands to auto-accept new hosts */
75
+ function getSshEnv() {
76
+ // StrictHostKeyChecking=accept-new: auto-add unknown hosts to known_hosts
77
+ // BatchMode=yes: no interactive prompts (fail fast if key not available)
78
+ const sshCmd = 'ssh -o StrictHostKeyChecking=accept-new -o BatchMode=yes';
79
+ return { GIT_SSH_COMMAND: sshCmd };
80
+ }
81
+
82
+ /** Validate SSH setup before attempting to use SSH URL */
83
+ function validateSSHSetup(url, mindRoot, nonInteractive) {
84
+ if (!isSSHUrl(url)) return { isSSH: false };
85
+
86
+ const sshDir = resolve(homedir(), '.ssh');
87
+ const id_rsa = resolve(sshDir, 'id_rsa');
88
+ const id_ed25519 = resolve(sshDir, 'id_ed25519');
89
+ const hasKey = existsSync(id_rsa) || existsSync(id_ed25519);
90
+ const hasAgent = !!process.env.SSH_AUTH_SOCK;
91
+
92
+ if (!hasKey && !hasAgent) {
93
+ const hint = isSSHUrl(url)
94
+ ? `SSH key not found at ${sshDir}/id_rsa or id_ed25519. Create one with:\n` +
95
+ ` ssh-keygen -t ed25519 -f ${id_rsa}\n` +
96
+ `Then verify with: ssh -T git@github.com`
97
+ : '';
98
+ return {
99
+ isSSH: true,
100
+ isValid: false,
101
+ error: `No SSH credentials found. ${hint}`,
102
+ };
103
+ }
104
+
105
+ return { isSSH: true, isValid: true };
106
+ }
107
+
108
+ /** Execute git command with SSH support (auto-add to known_hosts on first connection) */
109
+ function gitExecSSH(args, cwd, isSSH = false, timeoutMs = 15000) {
110
+ const opts = { cwd, encoding: 'utf-8', stdio: 'pipe', timeout: timeoutMs };
111
+ if (isSSH) {
112
+ opts.env = { ...process.env, ...getSshEnv() };
113
+ }
114
+ return execFileSync('git', args, opts).trim();
115
+ }
116
+
69
117
  function getRemoteUrl(cwd) {
70
118
  try {
71
119
  return gitExec(['remote', 'get-url', 'origin'], cwd);
@@ -92,23 +140,37 @@ function getUnpushedCount(cwd) {
92
140
 
93
141
  // ── Core sync functions ─────────────────────────────────────────────────────
94
142
 
95
- function autoCommitAndPush(mindRoot) {
143
+ function autoCommitAndPush(mindRoot, isSshUrl = false) {
144
+ const sshEnv = isSshUrl ? getSshEnv() : {};
145
+ const pushEnv = { ...process.env, ...sshEnv };
146
+
147
+ // Stage and commit any pending changes
96
148
  try {
97
149
  execFileSync('git', ['add', '-A'], { cwd: mindRoot, stdio: 'pipe' });
98
150
  const status = gitExec(['status', '--porcelain'], mindRoot);
99
- if (!status) return;
100
- const timestamp = new Date().toISOString().replace('T', ' ').slice(0, 19);
101
- execFileSync('git', ['commit', '-m', `auto-sync: ${timestamp}`], { cwd: mindRoot, stdio: 'pipe' });
102
- execFileSync('git', ['push', '-u', 'origin', 'HEAD'], { cwd: mindRoot, stdio: 'pipe' });
151
+ if (status) {
152
+ const timestamp = new Date().toISOString().replace('T', ' ').slice(0, 19);
153
+ execFileSync('git', ['commit', '-m', `auto-sync: ${timestamp}`], { cwd: mindRoot, stdio: 'pipe' });
154
+ }
155
+ } catch (err) {
156
+ saveSyncState({ ...loadSyncState(), lastError: `Commit failed: ${err.message}`, lastErrorTime: new Date().toISOString() });
157
+ return;
158
+ }
159
+
160
+ // Always try to push (even if no new commit — there may be unpushed commits from previous runs)
161
+ try {
162
+ execFileSync('git', ['push', '-u', 'origin', 'HEAD'], { cwd: mindRoot, stdio: 'pipe', env: pushEnv });
103
163
  saveSyncState({ ...loadSyncState(), lastSync: new Date().toISOString(), lastError: null });
104
164
  } catch (err) {
105
- saveSyncState({ ...loadSyncState(), lastError: err.message, lastErrorTime: new Date().toISOString() });
165
+ saveSyncState({ ...loadSyncState(), lastError: `Push failed: ${err.message}`, lastErrorTime: new Date().toISOString() });
166
+ throw err; // Let caller know push failed
106
167
  }
107
168
  }
108
169
 
109
- function autoPull(mindRoot) {
170
+ function autoPull(mindRoot, isSshUrl = false) {
171
+ const sshEnv = isSshUrl ? getSshEnv() : {};
110
172
  try {
111
- execFileSync('git', ['pull', '--rebase', '--autostash'], { cwd: mindRoot, stdio: 'pipe' });
173
+ execFileSync('git', ['pull', '--rebase', '--autostash'], { cwd: mindRoot, stdio: 'pipe', env: { ...process.env, ...sshEnv } });
112
174
  saveSyncState({ ...loadSyncState(), lastPull: new Date().toISOString() });
113
175
  } catch {
114
176
  // rebase conflict → abort → merge
@@ -118,9 +180,10 @@ function autoPull(mindRoot) {
118
180
  saveSyncState({ ...loadSyncState(), lastPull: new Date().toISOString() });
119
181
  } catch {
120
182
  // merge conflict → keep both versions
183
+ let conflicts = [];
184
+ let conflictWarnings = [];
121
185
  try {
122
- const conflicts = gitExec(['diff', '--name-only', '--diff-filter=U'], mindRoot).split('\n').filter(Boolean);
123
- const conflictWarnings = [];
186
+ conflicts = gitExec(['diff', '--name-only', '--diff-filter=U'], mindRoot).split('\n').filter(Boolean);
124
187
  for (const file of conflicts) {
125
188
  try {
126
189
  const theirs = execFileSync('git', ['show', `:3:${file}`], { cwd: mindRoot, encoding: 'utf-8' });
@@ -131,27 +194,36 @@ function autoPull(mindRoot) {
131
194
  try { execFileSync('git', ['checkout', '--ours', file], { cwd: mindRoot, stdio: 'pipe' }); } catch {}
132
195
  }
133
196
  execFileSync('git', ['add', '-A'], { cwd: mindRoot, stdio: 'pipe' });
134
- execFileSync('git', ['commit', '-m', 'auto-sync: resolved conflicts (kept both versions)'], { cwd: mindRoot, stdio: 'pipe' });
197
+ // --no-edit avoids editor prompt for merge commit; --allow-empty handles edge case where ours == theirs
198
+ try {
199
+ execFileSync('git', ['-c', 'core.editor=true', 'commit', '--no-edit'], { cwd: mindRoot, stdio: 'pipe' });
200
+ } catch {
201
+ // If merge commit fails (e.g. nothing to commit), try explicit message
202
+ try {
203
+ execFileSync('git', ['commit', '-m', 'auto-sync: resolved conflicts (kept local versions)', '--allow-empty'], { cwd: mindRoot, stdio: 'pipe' });
204
+ } catch {}
205
+ }
206
+ } catch (err) {
207
+ // Even if commit fails, record the error — conflicts are still saved below
208
+ saveSyncState({ ...loadSyncState(), lastError: err.message, lastErrorTime: new Date().toISOString() });
209
+ }
210
+ // Always save conflicts (even if commit failed) so UI can show resolution buttons
211
+ if (conflicts.length > 0) {
135
212
  saveSyncState({
136
213
  ...loadSyncState(),
137
214
  lastPull: new Date().toISOString(),
138
215
  conflicts: conflicts.map(f => ({ file: f, time: new Date().toISOString(), noBackup: conflictWarnings.includes(f) })),
139
216
  });
140
- } catch (err) {
141
- saveSyncState({ ...loadSyncState(), lastError: err.message, lastErrorTime: new Date().toISOString() });
142
217
  }
143
218
  }
144
219
  }
145
220
 
146
221
  // Retry any pending pushes (handles previous push failures)
147
222
  try {
148
- const unpushed = gitExec(['rev-list', '--count', '@{u}..HEAD'], mindRoot);
149
- if (parseInt(unpushed) > 0) {
150
- execFileSync('git', ['push'], { cwd: mindRoot, stdio: 'pipe' });
151
- saveSyncState({ ...loadSyncState(), lastSync: new Date().toISOString(), lastError: null });
152
- }
223
+ execFileSync('git', ['push', '-u', 'origin', 'HEAD'], { cwd: mindRoot, stdio: 'pipe', env: { ...process.env, ...sshEnv } });
224
+ saveSyncState({ ...loadSyncState(), lastSync: new Date().toISOString(), lastError: null });
153
225
  } catch {
154
- // No upstream tracking or push failed ignore silently, autoCommitAndPush handles primary pushes
226
+ // Push failed will be retried next cycle or by manualSync
155
227
  }
156
228
  }
157
229
 
@@ -205,7 +277,15 @@ export async function initSync(mindRoot, opts = {}) {
205
277
  rl.close();
206
278
  }
207
279
 
208
- // 1. Ensure git repo
280
+ // Pre-flight SSH validation (before git init)
281
+ const sshValidation = validateSSHSetup(remoteUrl, mindRoot, nonInteractive);
282
+ if (sshValidation.isSSH && !sshValidation.isValid) {
283
+ const err = sshValidation.error;
284
+ if (nonInteractive) throw new Error(err);
285
+ console.error(red(`✘ ${err}`));
286
+ process.exit(1);
287
+ }
288
+ const isSshUrl = sshValidation.isSSH;
209
289
  if (!isGitRepo(mindRoot)) {
210
290
  if (!nonInteractive) console.log(dim('Initializing git repository...'));
211
291
  execFileSync('git', ['init'], { cwd: mindRoot, stdio: 'pipe' });
@@ -213,7 +293,11 @@ export async function initSync(mindRoot, opts = {}) {
213
293
  }
214
294
 
215
295
  // 1b. Ensure .gitignore exists
296
+ // 1b. Ensure .gitignore has system file exclusions
216
297
  const gitignorePath = resolve(mindRoot, '.gitignore');
298
+ const SYSTEM_IGNORES = [
299
+ 'INSTRUCTION.md',
300
+ ];
217
301
  if (!existsSync(gitignorePath)) {
218
302
  writeFileSync(gitignorePath, [
219
303
  '# MindOS auto-generated',
@@ -226,7 +310,23 @@ export async function initSync(mindRoot, opts = {}) {
226
310
  'node_modules/',
227
311
  '.obsidian/',
228
312
  '',
313
+ '# MindOS system files (regenerated on update, not user content)',
314
+ ...SYSTEM_IGNORES,
315
+ '',
229
316
  ].join('\n'), 'utf-8');
317
+ } else {
318
+ // Existing .gitignore — append missing system file entries
319
+ const existing = readFileSync(gitignorePath, 'utf-8');
320
+ const missing = SYSTEM_IGNORES.filter(f => !existing.includes(f));
321
+ if (missing.length > 0) {
322
+ const append = '\n# MindOS system files (auto-added)\n' + missing.join('\n') + '\n';
323
+ writeFileSync(gitignorePath, existing.trimEnd() + '\n' + append, 'utf-8');
324
+ }
325
+ }
326
+
327
+ // Remove system files from git tracking if already committed
328
+ for (const file of SYSTEM_IGNORES) {
329
+ try { execFileSync('git', ['rm', '--cached', '--ignore-unmatch', file], { cwd: mindRoot, stdio: 'pipe' }); } catch {}
230
330
  }
231
331
 
232
332
  // Handle token for HTTPS
@@ -283,12 +383,11 @@ export async function initSync(mindRoot, opts = {}) {
283
383
  execFileSync('git', ['remote', 'set-url', 'origin', remoteUrl], { cwd: mindRoot, stdio: 'pipe' });
284
384
  }
285
385
 
286
- // 5. Test connection
386
+ // 5. Test connection (also captures refs to avoid a second SSH round-trip)
287
387
  if (!nonInteractive) console.log(dim('Testing connection...'));
388
+ let remoteRefs = '';
288
389
  try {
289
- // `git ls-remote --exit-code origin` returns non-zero for an empty remote,
290
- // which breaks first-time setup against a freshly created repository.
291
- execFileSync('git', ['ls-remote', 'origin'], { cwd: mindRoot, stdio: 'pipe', timeout: 15000 });
390
+ remoteRefs = gitExecSSH(['ls-remote', 'origin'], mindRoot, isSshUrl, 15000);
292
391
  if (!nonInteractive) console.log(green('✔ Connection successful'));
293
392
  } catch (lsErr) {
294
393
  const detail = lsErr.stderr ? lsErr.stderr.toString().trim() : '';
@@ -311,22 +410,24 @@ export async function initSync(mindRoot, opts = {}) {
311
410
  if (!nonInteractive) console.log(green('✔ Sync configured'));
312
411
 
313
412
  // 7. First sync: pull if remote has content, push otherwise
413
+ // Reuse remoteRefs from step 5 to avoid redundant SSH connection (~3-4s saved)
414
+ const hasRemoteContent = remoteRefs.includes('refs/heads/');
314
415
  try {
315
- const refs = gitExec(['ls-remote', '--heads', 'origin'], mindRoot);
316
- if (refs) {
416
+ if (hasRemoteContent) {
317
417
  if (!nonInteractive) console.log(dim('Pulling from remote...'));
318
418
  try {
319
- execFileSync('git', ['pull', 'origin', syncConfig.branch, '--allow-unrelated-histories'], { cwd: mindRoot, stdio: nonInteractive ? 'pipe' : 'inherit' });
419
+ const pullEnv = isSshUrl ? { ...process.env, ...getSshEnv() } : process.env;
420
+ execFileSync('git', ['pull', 'origin', syncConfig.branch, '--allow-unrelated-histories'], { cwd: mindRoot, stdio: nonInteractive ? 'pipe' : 'inherit', env: pullEnv });
320
421
  } catch {
321
422
  if (!nonInteractive) console.log(yellow('Pull completed with warnings. Check for conflicts.'));
322
423
  }
323
424
  } else {
324
425
  if (!nonInteractive) console.log(dim('Pushing to remote...'));
325
- autoCommitAndPush(mindRoot);
426
+ autoCommitAndPush(mindRoot, isSshUrl);
326
427
  }
327
428
  } catch {
328
429
  if (!nonInteractive) console.log(dim('Performing initial push...'));
329
- autoCommitAndPush(mindRoot);
430
+ autoCommitAndPush(mindRoot, isSshUrl);
330
431
  }
331
432
  if (!nonInteractive) console.log(green('✔ Initial sync complete\n'));
332
433
  }
@@ -340,6 +441,9 @@ export async function startSyncDaemon(mindRoot) {
340
441
  if (!config.enabled) return null;
341
442
  if (!mindRoot || !isGitRepo(mindRoot)) return null;
342
443
 
444
+ const remoteUrl = getRemoteUrl(mindRoot) || '';
445
+ const isSshUrl = isSSHUrl(remoteUrl);
446
+
343
447
  const chokidar = await import('chokidar');
344
448
 
345
449
  // File watcher → debounced auto-commit + push
@@ -351,14 +455,14 @@ export async function startSyncDaemon(mindRoot) {
351
455
  });
352
456
  watcher.on('all', () => {
353
457
  clearTimeout(commitTimer);
354
- commitTimer = setTimeout(() => autoCommitAndPush(mindRoot), (config.autoCommitInterval || 30) * 1000);
458
+ commitTimer = setTimeout(() => autoCommitAndPush(mindRoot, isSshUrl), (config.autoCommitInterval || 30) * 1000);
355
459
  });
356
460
 
357
461
  // Periodic pull
358
- const pullInterval = setInterval(() => autoPull(mindRoot), (config.autoPullInterval || 300) * 1000);
462
+ const pullInterval = setInterval(() => autoPull(mindRoot, isSshUrl), (config.autoPullInterval || 300) * 1000);
359
463
 
360
464
  // Pull on startup
361
- autoPull(mindRoot);
465
+ autoPull(mindRoot, isSshUrl);
362
466
 
363
467
  // Graceful shutdown: flush pending changes before exit
364
468
  let shutdownInProgress = false;
@@ -435,8 +539,10 @@ export function manualSync(mindRoot) {
435
539
  if (!mindRoot || !isGitRepo(mindRoot)) {
436
540
  throw new Error('Not a git repository. Run `mindos sync init` first.');
437
541
  }
438
- autoPull(mindRoot);
439
- autoCommitAndPush(mindRoot);
542
+ const remoteUrl = getRemoteUrl(mindRoot) || '';
543
+ const isSshUrl = isSSHUrl(remoteUrl);
544
+ autoPull(mindRoot, isSshUrl);
545
+ autoCommitAndPush(mindRoot, isSshUrl); // throws on push failure → API returns error
440
546
  }
441
547
 
442
548
  /**
package/mcp/README.md CHANGED
@@ -37,7 +37,7 @@ MCP_TRANSPORT=stdio mindos mcp # stdio mode
37
37
  | `MINDOS_URL` | `http://localhost:3456` | App server base URL |
38
38
  | `AUTH_TOKEN` | — | Optional: bearer token (must match App's `AUTH_TOKEN`) |
39
39
  | `MCP_TRANSPORT` | `http` | Transport mode: `http` or `stdio` |
40
- | `MCP_HOST` | `127.0.0.1` | HTTP bind address (`0.0.0.0` for remote access) |
40
+ | `MCP_HOST` | `0.0.0.0` | HTTP bind address (`127.0.0.1` for local only) |
41
41
  | `MCP_PORT` | `8781` | HTTP listen port (configurable via `mindos onboard`) |
42
42
  | `MCP_ENDPOINT` | `/mcp` | HTTP endpoint path |
43
43
 
@@ -52,7 +52,7 @@ MCP_TRANSPORT=stdio mindos mcp # stdio mode
52
52
  | `mindos_create_file` | `POST /api/file` op=create_file | Create a new .md or .csv file |
53
53
  | `mindos_create_space` | `POST /api/file` op=create_space | Create a Mind Space (README + INSTRUCTION scaffold) |
54
54
  | `mindos_rename_space` | `POST /api/file` op=rename_space | Rename a Space directory (folder only) |
55
- | `mindos_delete_file` | `POST /api/file` op=delete_file | Delete a file |
55
+ | `mindos_delete_file` | `POST /api/file` op=delete_file | Delete a file (moved to trash, recoverable for 30 days) |
56
56
  | `mindos_rename_file` | `POST /api/file` op=rename_file | Rename a file (same directory) |
57
57
  | `mindos_move_file` | `POST /api/file` op=move_file | Move a file to a new path |
58
58
  | `mindos_search_notes` | `GET /api/search?q=...` | Full-text search across all files |