@geminilight/mindos 0.6.52 → 0.6.54

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 (529) hide show
  1. package/README.md +27 -5
  2. package/README_zh.md +27 -5
  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 +17 -14
  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 +18 -2
  12. package/_standalone/.next/routes-manifest.json +18 -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.js +1 -1
  15. package/_standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  16. package/_standalone/.next/server/app/_global-error.html +2 -2
  17. package/_standalone/.next/server/app/_global-error.rsc +2 -2
  18. package/_standalone/.next/server/app/_global-error.segments/_full.segment.rsc +2 -2
  19. package/_standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  20. package/_standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  21. package/_standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  22. package/_standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  23. package/_standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  24. package/_standalone/.next/server/app/_not-found/page.js +1 -1
  25. package/_standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  26. package/_standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  27. package/_standalone/.next/server/app/agents/[agentKey]/page.js +1 -1
  28. package/_standalone/.next/server/app/agents/[agentKey]/page.js.nft.json +1 -1
  29. package/_standalone/.next/server/app/agents/[agentKey]/page_client-reference-manifest.js +1 -1
  30. package/_standalone/.next/server/app/agents/page.js +3 -3
  31. package/_standalone/.next/server/app/agents/page.js.nft.json +1 -1
  32. package/_standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  33. package/_standalone/.next/server/app/api/a2a/agents/route_client-reference-manifest.js +1 -1
  34. package/_standalone/.next/server/app/api/a2a/delegations/route_client-reference-manifest.js +1 -1
  35. package/_standalone/.next/server/app/api/a2a/discover/route_client-reference-manifest.js +1 -1
  36. package/_standalone/.next/server/app/api/a2a/route_client-reference-manifest.js +1 -1
  37. package/_standalone/.next/server/app/api/acp/config/route_client-reference-manifest.js +1 -1
  38. package/_standalone/.next/server/app/api/acp/detect/route_client-reference-manifest.js +1 -1
  39. package/_standalone/.next/server/app/api/acp/install/route_client-reference-manifest.js +1 -1
  40. package/_standalone/.next/server/app/api/acp/registry/route_client-reference-manifest.js +1 -1
  41. package/_standalone/.next/server/app/api/acp/session/route_client-reference-manifest.js +1 -1
  42. package/_standalone/.next/server/app/api/agent-activity/route_client-reference-manifest.js +1 -1
  43. package/_standalone/.next/server/app/api/ask/route.js +44 -16
  44. package/_standalone/.next/server/app/api/ask/route.js.nft.json +1 -1
  45. package/_standalone/.next/server/app/api/ask/route_client-reference-manifest.js +1 -1
  46. package/_standalone/.next/server/app/api/ask-sessions/route_client-reference-manifest.js +1 -1
  47. package/_standalone/.next/server/app/api/auth/route_client-reference-manifest.js +1 -1
  48. package/_standalone/.next/server/app/api/backlinks/route.js.nft.json +1 -1
  49. package/_standalone/.next/server/app/api/backlinks/route_client-reference-manifest.js +1 -1
  50. package/_standalone/.next/server/app/api/bootstrap/route.js.nft.json +1 -1
  51. package/_standalone/.next/server/app/api/bootstrap/route_client-reference-manifest.js +1 -1
  52. package/_standalone/.next/server/app/api/changes/route.js.nft.json +1 -1
  53. package/_standalone/.next/server/app/api/changes/route_client-reference-manifest.js +1 -1
  54. package/_standalone/.next/server/app/api/export/route.js +2 -2
  55. package/_standalone/.next/server/app/api/export/route.js.nft.json +1 -1
  56. package/_standalone/.next/server/app/api/export/route_client-reference-manifest.js +1 -1
  57. package/_standalone/.next/server/app/api/extract-pdf/route_client-reference-manifest.js +1 -1
  58. package/_standalone/.next/server/app/api/file/import/route.js.nft.json +1 -1
  59. package/_standalone/.next/server/app/api/file/import/route_client-reference-manifest.js +1 -1
  60. package/_standalone/.next/server/app/api/file/raw/route.js +1 -0
  61. package/_standalone/.next/server/app/api/file/raw/route.js.nft.json +1 -0
  62. package/_standalone/.next/server/app/api/file/raw/route_client-reference-manifest.js +1 -0
  63. package/_standalone/.next/server/app/api/file/route.js +1 -1
  64. package/_standalone/.next/server/app/api/file/route.js.nft.json +1 -1
  65. package/_standalone/.next/server/app/api/file/route_client-reference-manifest.js +1 -1
  66. package/_standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  67. package/_standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  68. package/_standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  69. package/_standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  70. package/_standalone/.next/server/app/api/graph/route.js.nft.json +1 -1
  71. package/_standalone/.next/server/app/api/graph/route_client-reference-manifest.js +1 -1
  72. package/_standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  73. package/_standalone/.next/server/app/api/inbox/route.js +1 -1
  74. package/_standalone/.next/server/app/api/inbox/route.js.nft.json +1 -1
  75. package/_standalone/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -1
  76. package/_standalone/.next/server/app/api/init/route.js.nft.json +1 -1
  77. package/_standalone/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  78. package/_standalone/.next/server/app/api/mcp/agents/route.js.nft.json +1 -1
  79. package/_standalone/.next/server/app/api/mcp/agents/route_client-reference-manifest.js +1 -1
  80. package/_standalone/.next/server/app/api/mcp/install/route_client-reference-manifest.js +1 -1
  81. package/_standalone/.next/server/app/api/mcp/install-skill/route_client-reference-manifest.js +1 -1
  82. package/_standalone/.next/server/app/api/mcp/restart/route_client-reference-manifest.js +1 -1
  83. package/_standalone/.next/server/app/api/mcp/status/route.js +1 -1
  84. package/_standalone/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
  85. package/_standalone/.next/server/app/api/mcp/uninstall/route_client-reference-manifest.js +1 -1
  86. package/_standalone/.next/server/app/api/monitoring/route.js.nft.json +1 -1
  87. package/_standalone/.next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
  88. package/_standalone/.next/server/app/api/recent-files/route.js.nft.json +1 -1
  89. package/_standalone/.next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
  90. package/_standalone/.next/server/app/api/restart/route.js +1 -1
  91. package/_standalone/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
  92. package/_standalone/.next/server/app/api/search/route.js.nft.json +1 -1
  93. package/_standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  94. package/_standalone/.next/server/app/api/settings/list-models/route_client-reference-manifest.js +1 -1
  95. package/_standalone/.next/server/app/api/settings/reset-token/route_client-reference-manifest.js +1 -1
  96. package/_standalone/.next/server/app/api/settings/route.js +1 -1
  97. package/_standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
  98. package/_standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  99. package/_standalone/.next/server/app/api/settings/test-key/route.js +1 -1
  100. package/_standalone/.next/server/app/api/settings/test-key/route_client-reference-manifest.js +1 -1
  101. package/_standalone/.next/server/app/api/setup/check-path/route_client-reference-manifest.js +1 -1
  102. package/_standalone/.next/server/app/api/setup/check-port/route_client-reference-manifest.js +1 -1
  103. package/_standalone/.next/server/app/api/setup/generate-token/route_client-reference-manifest.js +1 -1
  104. package/_standalone/.next/server/app/api/setup/ls/route_client-reference-manifest.js +1 -1
  105. package/_standalone/.next/server/app/api/setup/route.js +1 -1
  106. package/_standalone/.next/server/app/api/setup/route_client-reference-manifest.js +1 -1
  107. package/_standalone/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  108. package/_standalone/.next/server/app/api/sync/route.js +1 -1
  109. package/_standalone/.next/server/app/api/sync/route_client-reference-manifest.js +1 -1
  110. package/_standalone/.next/server/app/api/tree-version/route.js.nft.json +1 -1
  111. package/_standalone/.next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
  112. package/_standalone/.next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
  113. package/_standalone/.next/server/app/api/update/route.js +1 -1
  114. package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  115. package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
  116. package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
  117. package/_standalone/.next/server/app/api/workflows/route.js.nft.json +1 -1
  118. package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
  119. package/_standalone/.next/server/app/changes/page.js +2 -2
  120. package/_standalone/.next/server/app/changes/page.js.nft.json +1 -1
  121. package/_standalone/.next/server/app/changes/page_client-reference-manifest.js +1 -1
  122. package/_standalone/.next/server/app/echo/[segment]/page.js +3 -3
  123. package/_standalone/.next/server/app/echo/[segment]/page.js.nft.json +1 -1
  124. package/_standalone/.next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
  125. package/_standalone/.next/server/app/echo/page.js +1 -1
  126. package/_standalone/.next/server/app/echo/page.js.nft.json +1 -1
  127. package/_standalone/.next/server/app/echo/page_client-reference-manifest.js +1 -1
  128. package/_standalone/.next/server/app/explore/page.js +2 -2
  129. package/_standalone/.next/server/app/explore/page.js.nft.json +1 -1
  130. package/_standalone/.next/server/app/explore/page_client-reference-manifest.js +1 -1
  131. package/_standalone/.next/server/app/help/page.js +2 -2
  132. package/_standalone/.next/server/app/help/page.js.nft.json +1 -1
  133. package/_standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
  134. package/_standalone/.next/server/app/inbox/history/page.js +2 -0
  135. package/_standalone/.next/server/app/inbox/history/page.js.nft.json +1 -0
  136. package/_standalone/.next/server/app/inbox/history/page_client-reference-manifest.js +1 -0
  137. package/_standalone/.next/server/app/login/page.js +2 -2
  138. package/_standalone/.next/server/app/login/page.js.nft.json +1 -1
  139. package/_standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  140. package/_standalone/.next/server/app/page.js +3 -3
  141. package/_standalone/.next/server/app/page.js.nft.json +1 -1
  142. package/_standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  143. package/_standalone/.next/server/app/setup/page.js +2 -2
  144. package/_standalone/.next/server/app/setup/page.js.nft.json +1 -1
  145. package/_standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  146. package/_standalone/.next/server/app/trash/page.js +3 -3
  147. package/_standalone/.next/server/app/trash/page.js.nft.json +1 -1
  148. package/_standalone/.next/server/app/trash/page_client-reference-manifest.js +1 -1
  149. package/_standalone/.next/server/app/view/[...path]/page.js +3 -3
  150. package/_standalone/.next/server/app/view/[...path]/page.js.nft.json +1 -1
  151. package/_standalone/.next/server/app/view/[...path]/page_client-reference-manifest.js +1 -1
  152. package/_standalone/.next/server/app/wiki/page.js +2 -0
  153. package/_standalone/.next/server/app/wiki/page.js.nft.json +1 -0
  154. package/_standalone/.next/server/app/wiki/page_client-reference-manifest.js +1 -0
  155. package/_standalone/.next/server/app-paths-manifest.json +17 -14
  156. package/_standalone/.next/server/chunks/2190.js +2 -2
  157. package/_standalone/.next/server/chunks/2364.js +2 -0
  158. package/_standalone/.next/server/chunks/357.js +1 -0
  159. package/_standalone/.next/server/chunks/530.js +219 -0
  160. package/_standalone/.next/server/chunks/6054.js +52 -0
  161. package/_standalone/.next/server/chunks/6539.js +1 -1
  162. package/_standalone/.next/server/chunks/8388.js +2 -2
  163. package/_standalone/.next/server/chunks/953.js +4 -4
  164. package/_standalone/.next/server/middleware-build-manifest.js +1 -1
  165. package/_standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  166. package/_standalone/.next/server/next-font-manifest.js +1 -1
  167. package/_standalone/.next/server/next-font-manifest.json +1 -1
  168. package/_standalone/.next/server/pages/500.html +2 -2
  169. package/_standalone/.next/server/server-reference-manifest.js +1 -1
  170. package/_standalone/.next/server/server-reference-manifest.json +1 -1
  171. package/_standalone/.next/static/2hrwFOLEOZhHQHfrIt-Dw/_buildManifest.js +1 -0
  172. package/_standalone/.next/static/chunks/1053-2874859f7caefa0f.js +29 -0
  173. package/_standalone/.next/static/chunks/178-105779afb62d36d9.js +1 -0
  174. package/_standalone/.next/static/chunks/1814.b08e9fb85dd3b13c.js +1 -0
  175. package/_standalone/.next/static/chunks/{1880-3ec02adc80531825.js → 1880-7abf971bcfd2389b.js} +2 -2
  176. package/_standalone/.next/static/chunks/{3160-83a7e0b94414b3ac.js → 2218-d54538000574ffef.js} +1 -1
  177. package/_standalone/.next/static/chunks/254-32719a9bea2e74f0.js +1 -0
  178. package/_standalone/.next/static/chunks/362.a77be2f206db7b19.js +1 -0
  179. package/_standalone/.next/static/chunks/4237-ffc6e7c15d4007b6.js +1 -0
  180. package/_standalone/.next/static/chunks/7035-2af69391c7b1ad95.js +1 -0
  181. package/_standalone/.next/static/chunks/7322-d67d05067544864c.js +1 -0
  182. package/_standalone/.next/static/chunks/{6926-4af497b83952fa87.js → 8409-de5726a4a278d28f.js} +1 -1
  183. package/_standalone/.next/static/chunks/8753-ea9db680b0f70f25.js +1 -0
  184. package/_standalone/.next/static/chunks/app/.well-known/agent-card.json/{route-b07a5983e85bc5e3.js → route-e240db6d5049d336.js} +1 -1
  185. package/_standalone/.next/static/chunks/app/_global-error/{page-b07a5983e85bc5e3.js → page-e240db6d5049d336.js} +1 -1
  186. package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-f006a70f6889eb56.js +1 -0
  187. package/_standalone/.next/static/chunks/app/agents/page-bd522e428e3acb78.js +5 -0
  188. package/_standalone/.next/static/chunks/app/api/a2a/agents/{route-b07a5983e85bc5e3.js → route-e240db6d5049d336.js} +1 -1
  189. package/_standalone/.next/static/chunks/app/api/a2a/delegations/{route-b07a5983e85bc5e3.js → route-e240db6d5049d336.js} +1 -1
  190. package/_standalone/.next/static/chunks/app/api/a2a/discover/route-e240db6d5049d336.js +1 -0
  191. package/_standalone/.next/static/chunks/app/api/a2a/route-e240db6d5049d336.js +1 -0
  192. package/_standalone/.next/static/chunks/app/api/acp/config/route-e240db6d5049d336.js +1 -0
  193. package/_standalone/.next/static/chunks/app/api/acp/detect/route-e240db6d5049d336.js +1 -0
  194. package/_standalone/.next/static/chunks/app/api/acp/install/route-e240db6d5049d336.js +1 -0
  195. package/_standalone/.next/static/chunks/app/api/acp/registry/route-e240db6d5049d336.js +1 -0
  196. package/_standalone/.next/static/chunks/app/api/acp/session/route-e240db6d5049d336.js +1 -0
  197. package/_standalone/.next/static/chunks/app/api/agent-activity/route-e240db6d5049d336.js +1 -0
  198. package/_standalone/.next/static/chunks/app/api/ask/route-e240db6d5049d336.js +1 -0
  199. package/_standalone/.next/static/chunks/app/api/ask-sessions/route-e240db6d5049d336.js +1 -0
  200. package/_standalone/.next/static/chunks/app/api/auth/route-e240db6d5049d336.js +1 -0
  201. package/_standalone/.next/static/chunks/app/api/backlinks/route-e240db6d5049d336.js +1 -0
  202. package/_standalone/.next/static/chunks/app/api/bootstrap/route-e240db6d5049d336.js +1 -0
  203. package/_standalone/.next/static/chunks/app/api/changes/route-e240db6d5049d336.js +1 -0
  204. package/_standalone/.next/static/chunks/app/api/export/route-e240db6d5049d336.js +1 -0
  205. package/_standalone/.next/static/chunks/app/api/extract-pdf/route-e240db6d5049d336.js +1 -0
  206. package/_standalone/.next/static/chunks/app/api/file/import/route-e240db6d5049d336.js +1 -0
  207. package/_standalone/.next/static/chunks/app/api/file/raw/route-e240db6d5049d336.js +1 -0
  208. package/_standalone/.next/static/chunks/app/api/file/route-e240db6d5049d336.js +1 -0
  209. package/_standalone/.next/static/chunks/app/api/files/route-e240db6d5049d336.js +1 -0
  210. package/_standalone/.next/static/chunks/app/api/git/route-e240db6d5049d336.js +1 -0
  211. package/_standalone/.next/static/chunks/app/api/graph/route-e240db6d5049d336.js +1 -0
  212. package/_standalone/.next/static/chunks/app/api/health/route-e240db6d5049d336.js +1 -0
  213. package/_standalone/.next/static/chunks/app/api/inbox/route-e240db6d5049d336.js +1 -0
  214. package/_standalone/.next/static/chunks/app/api/init/route-e240db6d5049d336.js +1 -0
  215. package/_standalone/.next/static/chunks/app/api/mcp/agents/route-e240db6d5049d336.js +1 -0
  216. package/_standalone/.next/static/chunks/app/api/mcp/install/route-e240db6d5049d336.js +1 -0
  217. package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-e240db6d5049d336.js +1 -0
  218. package/_standalone/.next/static/chunks/app/api/mcp/restart/route-e240db6d5049d336.js +1 -0
  219. package/_standalone/.next/static/chunks/app/api/mcp/status/route-e240db6d5049d336.js +1 -0
  220. package/_standalone/.next/static/chunks/app/api/mcp/uninstall/route-e240db6d5049d336.js +1 -0
  221. package/_standalone/.next/static/chunks/app/api/monitoring/route-e240db6d5049d336.js +1 -0
  222. package/_standalone/.next/static/chunks/app/api/recent-files/route-e240db6d5049d336.js +1 -0
  223. package/_standalone/.next/static/chunks/app/api/restart/route-e240db6d5049d336.js +1 -0
  224. package/_standalone/.next/static/chunks/app/api/search/route-e240db6d5049d336.js +1 -0
  225. package/_standalone/.next/static/chunks/app/api/settings/list-models/route-e240db6d5049d336.js +1 -0
  226. package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-e240db6d5049d336.js +1 -0
  227. package/_standalone/.next/static/chunks/app/api/settings/route-e240db6d5049d336.js +1 -0
  228. package/_standalone/.next/static/chunks/app/api/settings/test-key/route-e240db6d5049d336.js +1 -0
  229. package/_standalone/.next/static/chunks/app/api/setup/check-path/route-e240db6d5049d336.js +1 -0
  230. package/_standalone/.next/static/chunks/app/api/setup/check-port/route-e240db6d5049d336.js +1 -0
  231. package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-e240db6d5049d336.js +1 -0
  232. package/_standalone/.next/static/chunks/app/api/setup/ls/route-e240db6d5049d336.js +1 -0
  233. package/_standalone/.next/static/chunks/app/api/setup/route-e240db6d5049d336.js +1 -0
  234. package/_standalone/.next/static/chunks/app/api/skills/route-e240db6d5049d336.js +1 -0
  235. package/_standalone/.next/static/chunks/app/api/sync/route-e240db6d5049d336.js +1 -0
  236. package/_standalone/.next/static/chunks/app/api/tree-version/route-e240db6d5049d336.js +1 -0
  237. package/_standalone/.next/static/chunks/app/api/uninstall/route-e240db6d5049d336.js +1 -0
  238. package/_standalone/.next/static/chunks/app/api/update/route-e240db6d5049d336.js +1 -0
  239. package/_standalone/.next/static/chunks/app/api/update-check/route-e240db6d5049d336.js +1 -0
  240. package/_standalone/.next/static/chunks/app/api/update-status/route-e240db6d5049d336.js +1 -0
  241. package/_standalone/.next/static/chunks/app/api/workflows/route-e240db6d5049d336.js +1 -0
  242. package/_standalone/.next/static/chunks/app/changes/page-5a72144d1080a699.js +1 -0
  243. package/_standalone/.next/static/chunks/app/echo/[segment]/{page-88df174dd64b2c76.js → page-6710da1f581b2854.js} +2 -2
  244. package/_standalone/.next/static/chunks/app/echo/page-e240db6d5049d336.js +1 -0
  245. package/_standalone/.next/static/chunks/app/explore/{page-5eb2835e9e3ab4bb.js → page-d3d99308146c2240.js} +1 -1
  246. package/_standalone/.next/static/chunks/app/global-error-c37d50db6128ec01.js +1 -0
  247. package/_standalone/.next/static/chunks/app/help/page-222df603080b5fab.js +1 -0
  248. package/_standalone/.next/static/chunks/app/inbox/history/page-07819cf95cb0805f.js +1 -0
  249. package/_standalone/.next/static/chunks/app/layout-8eacff5813458190.js +186 -0
  250. package/_standalone/.next/static/chunks/app/loading-e240db6d5049d336.js +1 -0
  251. package/_standalone/.next/static/chunks/app/login/{page-24236460fa7c11d0.js → page-0eeef685052869a6.js} +1 -1
  252. package/_standalone/.next/static/chunks/app/page-5a6c9455efe8a0df.js +7 -0
  253. package/_standalone/.next/static/chunks/app/setup/{page-99f40e9337388cda.js → page-9a81fa4d82c6351b.js} +1 -1
  254. package/_standalone/.next/static/chunks/app/trash/page-72d0ae3649ac4b6c.js +1 -0
  255. package/_standalone/.next/static/chunks/app/view/[...path]/loading-e240db6d5049d336.js +1 -0
  256. package/_standalone/.next/static/chunks/app/view/[...path]/not-found-fc04c2bd4f35bc6f.js +1 -0
  257. package/_standalone/.next/static/chunks/app/view/[...path]/page-e8699f96589c0979.js +12 -0
  258. package/_standalone/.next/static/chunks/app/wiki/page-d492256a93f0b8bc.js +1 -0
  259. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-e240db6d5049d336.js +1 -0
  260. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-e240db6d5049d336.js +1 -0
  261. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-e240db6d5049d336.js +1 -0
  262. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-e240db6d5049d336.js +1 -0
  263. package/_standalone/.next/static/chunks/{webpack-bbd44cbc83dc0aa4.js → webpack-73c9da80c6c1ebfe.js} +1 -1
  264. package/_standalone/.next/static/css/66f8a81e4eda06d4.css +1 -0
  265. package/_standalone/.next/static/css/a4a2b71142b311af.css +31 -0
  266. package/_standalone/.next/trace +64 -64
  267. package/_standalone/.next/types/routes.d.ts +5 -2
  268. package/_standalone/.next/types/validator.ts +27 -0
  269. package/_standalone/__tests__/agents/agents-content-dashboard.test.tsx +1 -0
  270. package/_standalone/__tests__/agents/agents-content-model.test.ts +13 -0
  271. package/_standalone/__tests__/core/inbox.test.ts +168 -0
  272. package/_standalone/__tests__/core/sync.test.ts +37 -0
  273. package/_standalone/__tests__/panels/agents-panel-hub.test.tsx +1 -0
  274. package/_standalone/app/globals.css +29 -3
  275. package/_standalone/components/ActivityBar.tsx +9 -9
  276. package/_standalone/components/AskFab.tsx +1 -1
  277. package/_standalone/components/Backlinks.tsx +1 -1
  278. package/_standalone/components/Breadcrumb.tsx +1 -1
  279. package/_standalone/components/CreateSpaceModal.tsx +1 -1
  280. package/_standalone/components/EchoSpotlight.tsx +14 -10
  281. package/_standalone/components/Editor.tsx +1 -1
  282. package/_standalone/components/ExportModal.tsx +3 -3
  283. package/_standalone/components/FileTree.tsx +6 -11
  284. package/_standalone/components/GuideCard.tsx +1 -1
  285. package/_standalone/components/ImportModal.tsx +1 -2
  286. package/_standalone/components/KeyboardShortcuts.tsx +1 -1
  287. package/_standalone/components/MarkdownEditor.tsx +1 -1
  288. package/_standalone/components/OnboardingView.tsx +2 -2
  289. package/_standalone/components/OrganizeToast.tsx +3 -1
  290. package/_standalone/components/Panel.tsx +27 -6
  291. package/_standalone/components/Sidebar.tsx +1 -1
  292. package/_standalone/components/SidebarLayout.tsx +30 -7
  293. package/_standalone/components/SystemPulse.tsx +16 -16
  294. package/_standalone/components/agents/AgentsOverviewSection.tsx +18 -92
  295. package/_standalone/components/agents/AgentsPanelA2aTab.tsx +67 -66
  296. package/_standalone/components/agents/AgentsPrimitives.tsx +1 -1
  297. package/_standalone/components/agents/RecentActivityFeed.tsx +6 -6
  298. package/_standalone/components/agents/SkillDetailPopover.tsx +1 -1
  299. package/_standalone/components/ask/AskHeader.tsx +1 -1
  300. package/_standalone/components/echo/EchoHero.tsx +1 -1
  301. package/_standalone/components/echo/EchoPageSections.tsx +1 -1
  302. package/_standalone/components/explore/UseCaseCard.tsx +1 -1
  303. package/_standalone/components/home/InboxSection.tsx +262 -54
  304. package/_standalone/components/panels/AgentsPanel.tsx +4 -3
  305. package/_standalone/components/panels/AgentsPanelAgentDetail.tsx +1 -1
  306. package/_standalone/components/panels/AgentsPanelHubNav.tsx +10 -6
  307. package/_standalone/components/panels/PanelHeader.tsx +1 -1
  308. package/_standalone/components/renderers/audio/AudioRenderer.tsx +79 -0
  309. package/_standalone/components/renderers/image/ImageRenderer.tsx +203 -0
  310. package/_standalone/components/renderers/pdf/PdfRenderer.tsx +57 -0
  311. package/_standalone/components/renderers/video/VideoRenderer.tsx +91 -0
  312. package/_standalone/components/settings/McpTab.tsx +154 -28
  313. package/_standalone/components/settings/PluginsTab.tsx +1 -1
  314. package/_standalone/components/settings/SettingsContent.tsx +41 -7
  315. package/_standalone/components/settings/types.ts +7 -1
  316. package/_standalone/components/walkthrough/WalkthroughOverlay.tsx +40 -11
  317. package/_standalone/components/walkthrough/WalkthroughTooltip.tsx +1 -1
  318. package/_standalone/hooks/useAiOrganize.ts +14 -1
  319. package/_standalone/lib/organize-history.ts +6 -0
  320. package/_standalone/lib/stores/walkthrough-store.ts +33 -1
  321. package/_standalone/tsconfig.tsbuildinfo +1 -1
  322. package/app/app/api/ask/route.ts +193 -3
  323. package/app/app/api/file/raw/route.ts +121 -0
  324. package/app/app/api/file/route.ts +21 -0
  325. package/app/app/api/inbox/route.ts +38 -2
  326. package/app/app/api/mcp/status/route.ts +1 -0
  327. package/app/app/api/restart/route.ts +26 -21
  328. package/app/app/api/settings/route.ts +13 -0
  329. package/app/app/api/setup/route.ts +11 -1
  330. package/app/app/api/sync/route.ts +36 -13
  331. package/app/app/api/update/route.ts +24 -10
  332. package/app/app/global-error.tsx +3 -3
  333. package/app/app/globals.css +29 -3
  334. package/app/app/inbox/history/page.tsx +250 -0
  335. package/app/app/layout.tsx +5 -11
  336. package/app/app/login/page.tsx +1 -1
  337. package/app/app/view/[...path]/ViewPageClient.tsx +15 -10
  338. package/app/app/view/[...path]/not-found.tsx +1 -1
  339. package/app/app/view/[...path]/page.tsx +32 -1
  340. package/app/app/wiki/page.tsx +58 -0
  341. package/app/components/ActivityBar.tsx +9 -9
  342. package/app/components/AskFab.tsx +1 -1
  343. package/app/components/Backlinks.tsx +1 -1
  344. package/app/components/Breadcrumb.tsx +1 -1
  345. package/app/components/CreateSpaceModal.tsx +1 -1
  346. package/app/components/DirView.tsx +2 -2
  347. package/app/components/EchoSpotlight.tsx +14 -10
  348. package/app/components/Editor.tsx +1 -1
  349. package/app/components/ExportModal.tsx +3 -3
  350. package/app/components/FileTree.tsx +6 -11
  351. package/app/components/GuideCard.tsx +1 -1
  352. package/app/components/HomeContent.tsx +50 -39
  353. package/app/components/ImportModal.tsx +1 -2
  354. package/app/components/KeyboardShortcuts.tsx +1 -1
  355. package/app/components/MarkdownEditor.tsx +1 -1
  356. package/app/components/OnboardingView.tsx +2 -2
  357. package/app/components/OrganizeToast.tsx +3 -1
  358. package/app/components/Panel.tsx +27 -6
  359. package/app/components/Sidebar.tsx +1 -1
  360. package/app/components/SidebarLayout.tsx +30 -7
  361. package/app/components/SystemPulse.tsx +16 -16
  362. package/app/components/TrashPageClient.tsx +8 -6
  363. package/app/components/UpdateOverlay.tsx +1 -1
  364. package/app/components/WikiHomeContent.tsx +273 -0
  365. package/app/components/agents/AgentDetailContent.tsx +5 -5
  366. package/app/components/agents/AgentsContentPage.tsx +14 -3
  367. package/app/components/agents/AgentsOverviewSection.tsx +18 -92
  368. package/app/components/agents/AgentsPanelA2aTab.tsx +67 -66
  369. package/app/components/agents/AgentsPrimitives.tsx +1 -1
  370. package/app/components/agents/RecentActivityFeed.tsx +6 -6
  371. package/app/components/agents/SkillDetailPopover.tsx +1 -1
  372. package/app/components/agents/agents-content-model.ts +4 -1
  373. package/app/components/ask/AskHeader.tsx +1 -1
  374. package/app/components/changes/ChangesContentPage.tsx +10 -6
  375. package/app/components/echo/EchoHero.tsx +1 -1
  376. package/app/components/echo/EchoPageSections.tsx +1 -1
  377. package/app/components/explore/ExploreContent.tsx +1 -1
  378. package/app/components/explore/UseCaseCard.tsx +1 -1
  379. package/app/components/help/HelpContent.tsx +3 -3
  380. package/app/components/home/InboxSection.tsx +262 -54
  381. package/app/components/panels/AgentsPanel.tsx +4 -3
  382. package/app/components/panels/AgentsPanelAgentDetail.tsx +1 -1
  383. package/app/components/panels/AgentsPanelHubNav.tsx +10 -6
  384. package/app/components/panels/PanelHeader.tsx +1 -1
  385. package/app/components/renderers/audio/AudioRenderer.tsx +79 -0
  386. package/app/components/renderers/audio/manifest.ts +17 -0
  387. package/app/components/renderers/image/ImageRenderer.tsx +203 -0
  388. package/app/components/renderers/image/manifest.ts +17 -0
  389. package/app/components/renderers/pdf/PdfRenderer.tsx +57 -0
  390. package/app/components/renderers/pdf/manifest.ts +15 -0
  391. package/app/components/renderers/video/VideoRenderer.tsx +91 -0
  392. package/app/components/renderers/video/manifest.ts +17 -0
  393. package/app/components/settings/McpTab.tsx +154 -28
  394. package/app/components/settings/PluginsTab.tsx +1 -1
  395. package/app/components/settings/SettingsContent.tsx +41 -7
  396. package/app/components/settings/types.ts +7 -1
  397. package/app/components/setup/index.tsx +4 -3
  398. package/app/components/walkthrough/WalkthroughOverlay.tsx +40 -11
  399. package/app/components/walkthrough/WalkthroughTooltip.tsx +1 -1
  400. package/app/hooks/useAiOrganize.ts +14 -1
  401. package/app/lib/agent/model.ts +2 -1
  402. package/app/lib/core/inbox.ts +131 -2
  403. package/app/lib/core/pdf-text.ts +28 -0
  404. package/app/lib/core/search-index.ts +29 -5
  405. package/app/lib/core/tree.ts +6 -1
  406. package/app/lib/fs.ts +31 -3
  407. package/app/lib/i18n/modules/ai-chat.ts +42 -0
  408. package/app/lib/i18n/modules/knowledge.ts +30 -0
  409. package/app/lib/i18n/modules/navigation.ts +4 -2
  410. package/app/lib/i18n/modules/panels.ts +22 -4
  411. package/app/lib/i18n/modules/settings.ts +26 -0
  412. package/app/lib/organize-history.ts +6 -0
  413. package/app/lib/renderers/index.ts +5 -1
  414. package/app/lib/settings.ts +60 -0
  415. package/app/lib/stores/walkthrough-store.ts +33 -1
  416. package/bin/commands/doctor.js +12 -6
  417. package/bin/commands/file.js +7 -4
  418. package/bin/commands/logs.js +39 -4
  419. package/bin/commands/onboard.js +1 -1
  420. package/bin/commands/open.js +6 -1
  421. package/bin/commands/space.js +7 -4
  422. package/bin/commands/update.js +31 -29
  423. package/bin/lib/build.js +19 -8
  424. package/bin/lib/clean-env.js +38 -0
  425. package/bin/lib/cli-shim.js +67 -2
  426. package/bin/lib/config.js +4 -5
  427. package/bin/lib/gateway.js +51 -27
  428. package/bin/lib/jsonc.js +7 -2
  429. package/bin/lib/mcp-agents.js +26 -5
  430. package/bin/lib/path-expand.js +6 -3
  431. package/bin/lib/port.js +5 -1
  432. package/bin/lib/stop.js +98 -41
  433. package/bin/lib/sync.js +1 -1
  434. package/package.json +1 -1
  435. package/scripts/setup.js +7 -5
  436. package/_standalone/.next/server/chunks/2673.js +0 -52
  437. package/_standalone/.next/server/chunks/5648.js +0 -2
  438. package/_standalone/.next/server/chunks/8408.js +0 -219
  439. package/_standalone/.next/static/IiTZbEzZo8l5MSUxlDwKp/_buildManifest.js +0 -1
  440. package/_standalone/.next/static/chunks/1053-c519cb347faa75e2.js +0 -29
  441. package/_standalone/.next/static/chunks/1814.72f7fe7c61e2b647.js +0 -1
  442. package/_standalone/.next/static/chunks/362.4c226d7887d5f696.js +0 -1
  443. package/_standalone/.next/static/chunks/6357-c645842834c0d4cd.js +0 -1
  444. package/_standalone/.next/static/chunks/6981-3d7dcac2d12a5670.js +0 -1
  445. package/_standalone/.next/static/chunks/7035-032641fb6f4e07b2.js +0 -1
  446. package/_standalone/.next/static/chunks/7144-5febf62f1a79fe64.js +0 -1
  447. package/_standalone/.next/static/chunks/9602-423291fdb36396d1.js +0 -1
  448. package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-074d6aafc2606561.js +0 -1
  449. package/_standalone/.next/static/chunks/app/agents/page-710d8c80fa86e93e.js +0 -5
  450. package/_standalone/.next/static/chunks/app/api/a2a/discover/route-b07a5983e85bc5e3.js +0 -1
  451. package/_standalone/.next/static/chunks/app/api/a2a/route-b07a5983e85bc5e3.js +0 -1
  452. package/_standalone/.next/static/chunks/app/api/acp/config/route-b07a5983e85bc5e3.js +0 -1
  453. package/_standalone/.next/static/chunks/app/api/acp/detect/route-b07a5983e85bc5e3.js +0 -1
  454. package/_standalone/.next/static/chunks/app/api/acp/install/route-b07a5983e85bc5e3.js +0 -1
  455. package/_standalone/.next/static/chunks/app/api/acp/registry/route-b07a5983e85bc5e3.js +0 -1
  456. package/_standalone/.next/static/chunks/app/api/acp/session/route-b07a5983e85bc5e3.js +0 -1
  457. package/_standalone/.next/static/chunks/app/api/agent-activity/route-b07a5983e85bc5e3.js +0 -1
  458. package/_standalone/.next/static/chunks/app/api/ask/route-b07a5983e85bc5e3.js +0 -1
  459. package/_standalone/.next/static/chunks/app/api/ask-sessions/route-b07a5983e85bc5e3.js +0 -1
  460. package/_standalone/.next/static/chunks/app/api/auth/route-b07a5983e85bc5e3.js +0 -1
  461. package/_standalone/.next/static/chunks/app/api/backlinks/route-b07a5983e85bc5e3.js +0 -1
  462. package/_standalone/.next/static/chunks/app/api/bootstrap/route-b07a5983e85bc5e3.js +0 -1
  463. package/_standalone/.next/static/chunks/app/api/changes/route-b07a5983e85bc5e3.js +0 -1
  464. package/_standalone/.next/static/chunks/app/api/export/route-b07a5983e85bc5e3.js +0 -1
  465. package/_standalone/.next/static/chunks/app/api/extract-pdf/route-b07a5983e85bc5e3.js +0 -1
  466. package/_standalone/.next/static/chunks/app/api/file/import/route-b07a5983e85bc5e3.js +0 -1
  467. package/_standalone/.next/static/chunks/app/api/file/route-b07a5983e85bc5e3.js +0 -1
  468. package/_standalone/.next/static/chunks/app/api/files/route-b07a5983e85bc5e3.js +0 -1
  469. package/_standalone/.next/static/chunks/app/api/git/route-b07a5983e85bc5e3.js +0 -1
  470. package/_standalone/.next/static/chunks/app/api/graph/route-b07a5983e85bc5e3.js +0 -1
  471. package/_standalone/.next/static/chunks/app/api/health/route-b07a5983e85bc5e3.js +0 -1
  472. package/_standalone/.next/static/chunks/app/api/inbox/route-b07a5983e85bc5e3.js +0 -1
  473. package/_standalone/.next/static/chunks/app/api/init/route-b07a5983e85bc5e3.js +0 -1
  474. package/_standalone/.next/static/chunks/app/api/mcp/agents/route-b07a5983e85bc5e3.js +0 -1
  475. package/_standalone/.next/static/chunks/app/api/mcp/install/route-b07a5983e85bc5e3.js +0 -1
  476. package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-b07a5983e85bc5e3.js +0 -1
  477. package/_standalone/.next/static/chunks/app/api/mcp/restart/route-b07a5983e85bc5e3.js +0 -1
  478. package/_standalone/.next/static/chunks/app/api/mcp/status/route-b07a5983e85bc5e3.js +0 -1
  479. package/_standalone/.next/static/chunks/app/api/mcp/uninstall/route-b07a5983e85bc5e3.js +0 -1
  480. package/_standalone/.next/static/chunks/app/api/monitoring/route-b07a5983e85bc5e3.js +0 -1
  481. package/_standalone/.next/static/chunks/app/api/recent-files/route-b07a5983e85bc5e3.js +0 -1
  482. package/_standalone/.next/static/chunks/app/api/restart/route-b07a5983e85bc5e3.js +0 -1
  483. package/_standalone/.next/static/chunks/app/api/search/route-b07a5983e85bc5e3.js +0 -1
  484. package/_standalone/.next/static/chunks/app/api/settings/list-models/route-b07a5983e85bc5e3.js +0 -1
  485. package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-b07a5983e85bc5e3.js +0 -1
  486. package/_standalone/.next/static/chunks/app/api/settings/route-b07a5983e85bc5e3.js +0 -1
  487. package/_standalone/.next/static/chunks/app/api/settings/test-key/route-b07a5983e85bc5e3.js +0 -1
  488. package/_standalone/.next/static/chunks/app/api/setup/check-path/route-b07a5983e85bc5e3.js +0 -1
  489. package/_standalone/.next/static/chunks/app/api/setup/check-port/route-b07a5983e85bc5e3.js +0 -1
  490. package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-b07a5983e85bc5e3.js +0 -1
  491. package/_standalone/.next/static/chunks/app/api/setup/ls/route-b07a5983e85bc5e3.js +0 -1
  492. package/_standalone/.next/static/chunks/app/api/setup/route-b07a5983e85bc5e3.js +0 -1
  493. package/_standalone/.next/static/chunks/app/api/skills/route-b07a5983e85bc5e3.js +0 -1
  494. package/_standalone/.next/static/chunks/app/api/sync/route-b07a5983e85bc5e3.js +0 -1
  495. package/_standalone/.next/static/chunks/app/api/tree-version/route-b07a5983e85bc5e3.js +0 -1
  496. package/_standalone/.next/static/chunks/app/api/uninstall/route-b07a5983e85bc5e3.js +0 -1
  497. package/_standalone/.next/static/chunks/app/api/update/route-b07a5983e85bc5e3.js +0 -1
  498. package/_standalone/.next/static/chunks/app/api/update-check/route-b07a5983e85bc5e3.js +0 -1
  499. package/_standalone/.next/static/chunks/app/api/update-status/route-b07a5983e85bc5e3.js +0 -1
  500. package/_standalone/.next/static/chunks/app/api/workflows/route-b07a5983e85bc5e3.js +0 -1
  501. package/_standalone/.next/static/chunks/app/changes/page-350992cf5091bc5b.js +0 -1
  502. package/_standalone/.next/static/chunks/app/echo/page-b07a5983e85bc5e3.js +0 -1
  503. package/_standalone/.next/static/chunks/app/global-error-e1ad0e18236ba26c.js +0 -1
  504. package/_standalone/.next/static/chunks/app/help/page-2325d25b6846ca07.js +0 -1
  505. package/_standalone/.next/static/chunks/app/layout-e706f9a963b177ba.js +0 -186
  506. package/_standalone/.next/static/chunks/app/loading-b07a5983e85bc5e3.js +0 -1
  507. package/_standalone/.next/static/chunks/app/page-2595175820acfd65.js +0 -7
  508. package/_standalone/.next/static/chunks/app/trash/page-61c6210fac1e9710.js +0 -1
  509. package/_standalone/.next/static/chunks/app/view/[...path]/loading-b07a5983e85bc5e3.js +0 -1
  510. package/_standalone/.next/static/chunks/app/view/[...path]/not-found-61474670d6bb6116.js +0 -1
  511. package/_standalone/.next/static/chunks/app/view/[...path]/page-798359c36f10ef8d.js +0 -12
  512. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-b07a5983e85bc5e3.js +0 -1
  513. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-b07a5983e85bc5e3.js +0 -1
  514. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-b07a5983e85bc5e3.js +0 -1
  515. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-b07a5983e85bc5e3.js +0 -1
  516. package/_standalone/.next/static/css/bbf51803eade6c50.css +0 -31
  517. package/_standalone/.next/static/css/ef1151f74f00d91a.css +0 -1
  518. package/_standalone/lib/i18n/generated/explore-i18n.generated.ts +0 -138
  519. package/_standalone/lib/i18n/index.ts +0 -38
  520. package/_standalone/lib/i18n/modules/ai-chat.ts +0 -237
  521. package/_standalone/lib/i18n/modules/common.ts +0 -71
  522. package/_standalone/lib/i18n/modules/features.ts +0 -153
  523. package/_standalone/lib/i18n/modules/knowledge.ts +0 -727
  524. package/_standalone/lib/i18n/modules/navigation.ts +0 -157
  525. package/_standalone/lib/i18n/modules/onboarding.ts +0 -445
  526. package/_standalone/lib/i18n/modules/panels.ts +0 -1255
  527. package/_standalone/lib/i18n/modules/settings.ts +0 -889
  528. package/_standalone/lib/i18n.ts +0 -3
  529. /package/_standalone/.next/static/{IiTZbEzZo8l5MSUxlDwKp → 2hrwFOLEOZhHQHfrIt-Dw}/_ssgManifest.js +0 -0
@@ -30,6 +30,10 @@ export const aiChatEn = {
30
30
  errorNoResponse: 'AI returned no content. Possible causes: model does not support streaming, proxy compatibility issue, or request exceeds context limit.',
31
31
  reconnecting: (attempt: number, max: number) => `Connection lost. Reconnecting (${attempt}/${max})...`,
32
32
  reconnectFailed: 'Connection failed after multiple attempts.',
33
+ proxyCompatMode: 'Using compatibility mode (non-streaming)...',
34
+ proxyCompatFailed: (err: string) => `Compatibility mode failed: ${err}. Please check your Base URL, API key, and model name.`,
35
+ proxyCompatDetecting: 'Detecting proxy compatibility, switching to non-streaming mode...',
36
+ proxyCompatAlsoFailed: (err: string) => `Compatibility mode also failed: ${err}. Please check your Base URL, API key, and model name.`,
33
37
  retry: 'Retry',
34
38
  suggestions: [
35
39
  'Summarize this document',
@@ -79,6 +83,23 @@ export const aiChatEn = {
79
83
  empty: 'No content changes yet.',
80
84
  open: 'Open',
81
85
  unchangedLines: (n: number) => `... ${n} unchanged lines ...`,
86
+ operations: {
87
+ save_file: 'Save file',
88
+ append_to_file: 'Append to file',
89
+ insert_lines: 'Insert lines',
90
+ update_lines: 'Update lines',
91
+ insert_after_heading: 'Insert after heading',
92
+ update_section: 'Update section',
93
+ create_file: 'Create file',
94
+ delete_file: 'Delete file',
95
+ rename_file: 'Rename file',
96
+ move_file: 'Move file',
97
+ create_space: 'Create space',
98
+ rename_space: 'Rename space',
99
+ append_csv: 'Append to CSV',
100
+ import_file: 'Import file',
101
+ legacy_agent_diff_import: 'Import from Agent Diff',
102
+ },
82
103
  relativeTime: {
83
104
  justNow: 'just now',
84
105
  minutesAgo: (n: number) => `${n}m ago`,
@@ -148,6 +169,10 @@ export const aiChatZh = {
148
169
  errorNoResponse: 'AI 未返回有效内容。可能原因:模型不支持流式输出、中转站兼容性问题、或请求超出上下文限制。',
149
170
  reconnecting: (attempt: number, max: number) => `连接中断,正在重连 (${attempt}/${max})...`,
150
171
  reconnectFailed: '多次重连失败,请检查网络后重试。',
172
+ proxyCompatMode: '正在以兼容模式调用...',
173
+ proxyCompatFailed: (err: string) => `兼容模式失败:${err}。请检查 Base URL、API Key 和模型名称。`,
174
+ proxyCompatDetecting: '正在检测接口兼容性,切换到兼容模式重试...',
175
+ proxyCompatAlsoFailed: (err: string) => `兼容模式也失败了:${err}。请检查 Base URL、API Key 和模型名称。`,
151
176
  retry: '重试',
152
177
  suggestions: [
153
178
  '总结这篇文档',
@@ -197,6 +222,23 @@ export const aiChatZh = {
197
222
  empty: '暂无内容变更。',
198
223
  open: '打开',
199
224
  unchangedLines: (n: number) => `... ${n} 行未变更 ...`,
225
+ operations: {
226
+ save_file: '保存文件',
227
+ append_to_file: '追加到文件',
228
+ insert_lines: '插入行',
229
+ update_lines: '更新行',
230
+ insert_after_heading: '标题后插入',
231
+ update_section: '更新章节',
232
+ create_file: '创建文件',
233
+ delete_file: '删除文件',
234
+ rename_file: '重命名文件',
235
+ move_file: '移动文件',
236
+ create_space: '创建空间',
237
+ rename_space: '重命名空间',
238
+ append_csv: '追加到 CSV',
239
+ import_file: '导入文件',
240
+ legacy_agent_diff_import: '从 Agent Diff 导入',
241
+ },
200
242
  relativeTime: {
201
243
  justNow: '刚刚',
202
244
  minutesAgo: (n: number) => `${n} 分钟前`,
@@ -52,6 +52,10 @@ export const knowledgeEn = {
52
52
  showMore: 'Show more',
53
53
  showLess: 'Show less',
54
54
  viewAll: 'View all',
55
+ wikiTagline: 'Your knowledge spaces, organized.',
56
+ sortRecent: 'Recent',
57
+ sortName: 'A-Z',
58
+ sortCount: 'File Count',
55
59
  createToActivate: 'Create {file} to activate',
56
60
  shortcuts: {
57
61
  searchFiles: 'Search files',
@@ -95,6 +99,8 @@ export const knowledgeEn = {
95
99
  organizing: 'Organizing...',
96
100
  viewAll: 'View all',
97
101
  more: (n: number) => `${n} more`,
102
+ viewAllFiles: (n: number) => `View all ${n} files in Inbox`,
103
+ viewAllHistory: (n: number) => `View all ${n} records →`,
98
104
  agingHint: '7+ days',
99
105
  savedToast: (n: number) => `${n} file${n === 1 ? '' : 's'} saved to Capture`,
100
106
  savedWithSkipped: (saved: number, skipped: number) =>
@@ -324,8 +330,17 @@ export const knowledgeEn = {
324
330
  importHistory: {
325
331
  title: 'Import History',
326
332
  clearAll: 'Clear history',
333
+ clearConfirm: 'Clear all history? This cannot be undone.',
327
334
  emptyTitle: 'No import history yet',
328
335
  emptyDesc: 'AI organize results will appear here',
336
+ back: '← Back',
337
+ sourceLabel: 'Source',
338
+ changesCount: (ok: number, total: number) => `${ok}/${total} changes`,
339
+ recordCount: (n: number) => `${n} record${n !== 1 ? 's' : ''}`,
340
+ today: 'Today',
341
+ yesterday: 'Yesterday',
342
+ older: 'Older',
343
+ processedArchive: 'Processed files are archived in Inbox/.processed/',
329
344
  },
330
345
  dirView: {
331
346
  gridView: 'Grid view',
@@ -415,6 +430,10 @@ export const knowledgeZh = {
415
430
  showMore: '查看更多',
416
431
  showLess: '收起',
417
432
  viewAll: '查看全部',
433
+ wikiTagline: '你的知识空间,井然有序。',
434
+ sortRecent: '最近',
435
+ sortName: '字母序',
436
+ sortCount: '文件数',
418
437
  createToActivate: '创建 {file} 以启用',
419
438
  shortcuts: {
420
439
  searchFiles: '搜索文件',
@@ -458,6 +477,8 @@ export const knowledgeZh = {
458
477
  organizing: '整理中...',
459
478
  viewAll: '查看全部',
460
479
  more: (n: number) => `还有 ${n} 个`,
480
+ viewAllFiles: (n: number) => `查看 Inbox 中全部 ${n} 个文件`,
481
+ viewAllHistory: (n: number) => `查看全部 ${n} 条记录 →`,
461
482
  agingHint: '7天+',
462
483
  savedToast: (n: number) => `${n} 个文件已保存到暂存台`,
463
484
  savedWithSkipped: (saved: number, skipped: number) =>
@@ -687,8 +708,17 @@ export const knowledgeZh = {
687
708
  importHistory: {
688
709
  title: '导入历史',
689
710
  clearAll: '清空历史',
711
+ clearConfirm: '清空所有历史记录?此操作不可撤销。',
690
712
  emptyTitle: '暂无导入记录',
691
713
  emptyDesc: 'AI 整理的结果会出现在这里',
714
+ back: '← 返回',
715
+ sourceLabel: '来源',
716
+ changesCount: (ok: number, total: number) => `${ok}/${total} 处变更`,
717
+ recordCount: (n: number) => `${n} 条记录`,
718
+ today: '今天',
719
+ yesterday: '昨天',
720
+ older: '更早',
721
+ processedArchive: '已处理的文件归档在 Inbox/.processed/ 中',
692
722
  },
693
723
  dirView: {
694
724
  gridView: '网格视图',
@@ -2,7 +2,7 @@
2
2
 
3
3
  export const navigationEn = {
4
4
  sidebar: {
5
- files: 'Spaces',
5
+ files: 'Wiki',
6
6
  search: 'Search',
7
7
  searchTitle: 'Search',
8
8
  askTitle: 'MindOS Agent',
@@ -26,6 +26,7 @@ export const navigationEn = {
26
26
  newFile: 'New file',
27
27
  newSpace: 'New Space',
28
28
  more: 'More',
29
+ capture: 'Capture',
29
30
  showHiddenFiles: 'Show hidden files',
30
31
  sync: {
31
32
  synced: 'Synced',
@@ -80,7 +81,7 @@ export const navigationEn = {
80
81
 
81
82
  export const navigationZh = {
82
83
  sidebar: {
83
- files: '空间',
84
+ files: '知识库',
84
85
  search: '搜索',
85
86
  searchTitle: '搜索',
86
87
  askTitle: 'MindOS Agent',
@@ -104,6 +105,7 @@ export const navigationZh = {
104
105
  newFile: '新建文件',
105
106
  newSpace: '新建空间',
106
107
  more: '更多',
108
+ capture: '暂存台',
107
109
  showHiddenFiles: '显示隐藏文件',
108
110
  sync: {
109
111
  synced: '已同步',
@@ -88,8 +88,15 @@ export const panelsEn = {
88
88
  a2aDelegationFailed: 'Failed',
89
89
  a2aDelegationPending: 'Pending',
90
90
  // ACP / Network tab
91
- acpSectionTitle: 'ACP Agents',
92
- acpSectionDesc: (n: number) => `${n} agent${n !== 1 ? 's' : ''} available`,
91
+ acpSectionTitle: 'Installed Agents',
92
+ acpSectionDesc: (n: number) => `${n} agent${n !== 1 ? 's' : ''} detected`,
93
+ acpNoInstalled: 'No coding agents detected. Install one to delegate tasks directly from MindOS.',
94
+ acpAvailableTitle: 'Available in Registry',
95
+ acpAvailableDesc: (n: number) => `${n} more agent${n !== 1 ? 's' : ''} available`,
96
+ acpShowAvailable: 'Show',
97
+ acpHideAvailable: 'Hide',
98
+ acpCopyCmd: 'Copy',
99
+ acpCopied: 'Copied',
93
100
  acpTransportNpx: 'npx',
94
101
  acpTransportBinary: 'binary',
95
102
  acpTransportUvx: 'uvx',
@@ -380,6 +387,8 @@ export const panelsEn = {
380
387
  reconnectAllRunning: 'Reconnecting...',
381
388
  reconnectAllDone: (ok: number, failed: number) => `Done: ${ok} reconnected${failed > 0 ? `, ${failed} failed` : ''}.`,
382
389
  serverTransport: (t: string) => `Transport: ${t}`,
390
+ mcpDisabledMessage: 'MCP mode is not enabled.',
391
+ mcpDisabledHint: 'Enable it in Settings → Connections to use MCP agents.',
383
392
  },
384
393
  skills: {
385
394
  title: 'Skills',
@@ -715,8 +724,15 @@ export const panelsZh = {
715
724
  a2aDelegationFailed: '失败',
716
725
  a2aDelegationPending: '进行中',
717
726
  // ACP / Network tab
718
- acpSectionTitle: 'ACP 智能体',
719
- acpSectionDesc: (n: number) => `${n} 个智能体可用`,
727
+ acpSectionTitle: '已安装智能体',
728
+ acpSectionDesc: (n: number) => `已检测到 ${n} 个智能体`,
729
+ acpNoInstalled: '未检测到编程智能体。安装一个即可在 MindOS 中直接委派任务。',
730
+ acpAvailableTitle: '注册表中可用',
731
+ acpAvailableDesc: (n: number) => `还有 ${n} 个智能体可安装`,
732
+ acpShowAvailable: '展开',
733
+ acpHideAvailable: '收起',
734
+ acpCopyCmd: '复制',
735
+ acpCopied: '已复制',
720
736
  acpTransportNpx: 'npx',
721
737
  acpTransportBinary: '二进制',
722
738
  acpTransportUvx: 'uvx',
@@ -1007,6 +1023,8 @@ export const panelsZh = {
1007
1023
  reconnectAllRunning: '正在重连...',
1008
1024
  reconnectAllDone: (ok: number, failed: number) => `完成:${ok} 已重连${failed > 0 ? `,${failed} 失败` : ''}。`,
1009
1025
  serverTransport: (t: string) => `传输:${t}`,
1026
+ mcpDisabledMessage: 'MCP 模式未启用。',
1027
+ mcpDisabledHint: '请在设置 → 连接中启用,以使用 MCP 智能体。',
1010
1028
  },
1011
1029
  skills: {
1012
1030
  title: '技能',
@@ -193,6 +193,19 @@ export const settingsEn = {
193
193
  comingSoon: 'Plugin marketplace coming soon.',
194
194
  },
195
195
  mcp: {
196
+ // Connection Mode Card
197
+ modeCardTitle: 'Connection Mode',
198
+ modeCardDesc: 'Choose how agents connect to MindOS.',
199
+ cliLabel: 'CLI',
200
+ cliModeDesc: 'Claude Code, Gemini CLI, Codex, etc.',
201
+ mcpLabel: 'MCP',
202
+ mcpModeDesc: 'Claude Desktop, Cursor, Windsurf, etc.',
203
+ alwaysOn: 'Always On',
204
+ mcpRunning: 'Running',
205
+ mcpStopped: 'Stopped',
206
+ mcpEnabledHint: 'MCP mode enabled. Disable to simplify the interface if you only use CLI agents.',
207
+ mcpDisabledHint: 'Enable MCP to connect Desktop clients like Claude Desktop or Cursor.',
208
+ // Rest of existing MCP section...
196
209
  serverTitle: 'MindOS MCP Server',
197
210
  status: 'Status',
198
211
  running: 'Running',
@@ -637,6 +650,19 @@ export const settingsZh = {
637
650
  comingSoon: '插件市场即将上线。',
638
651
  },
639
652
  mcp: {
653
+ // 连接模式卡片
654
+ modeCardTitle: '连接模式',
655
+ modeCardDesc: '选择 Agent 如何连接到 MindOS。',
656
+ cliLabel: 'CLI',
657
+ cliModeDesc: 'Claude Code、Gemini CLI、Codex 等。',
658
+ mcpLabel: 'MCP',
659
+ mcpModeDesc: 'Claude Desktop、Cursor、Windsurf 等。',
660
+ alwaysOn: '始终开启',
661
+ mcpRunning: '运行中',
662
+ mcpStopped: '已停止',
663
+ mcpEnabledHint: 'MCP 模式已启用。若仅使用 CLI Agent,可禁用此项以简化界面。',
664
+ mcpDisabledHint: '启用 MCP 以连接 Claude Desktop 或 Cursor 等桌面客户端。',
665
+ // 其余 MCP 配置...
640
666
  serverTitle: 'MindOS MCP 服务',
641
667
  status: '状态',
642
668
  running: '运行中',
@@ -12,6 +12,8 @@ export interface OrganizeHistoryFile {
12
12
  undone?: boolean;
13
13
  }
14
14
 
15
+ export type OrganizeSource = 'upload' | 'drag-drop' | 'inbox-organize' | 'import-modal' | 'plugin' | 'web-clipper';
16
+
15
17
  export interface OrganizeHistoryEntry {
16
18
  id: string;
17
19
  /** Unix ms */
@@ -20,6 +22,10 @@ export interface OrganizeHistoryEntry {
20
22
  sourceFiles: string[];
21
23
  files: OrganizeHistoryFile[];
22
24
  status: 'completed' | 'partial' | 'undone';
25
+ /** How the files were ingested */
26
+ source?: OrganizeSource;
27
+ /** Processing time in milliseconds */
28
+ durationMs?: number;
23
29
  }
24
30
 
25
31
  const STORAGE_KEY = 'mindos:organize-history';
@@ -4,17 +4,21 @@
4
4
  */
5
5
  import { registerRenderer } from './registry';
6
6
  import { manifest as agentInspector } from '@/components/renderers/agent-inspector/manifest';
7
+ import { manifest as audio } from '@/components/renderers/audio/manifest';
7
8
  import { manifest as backlinks } from '@/components/renderers/backlinks/manifest';
8
9
  import { manifest as config } from '@/components/renderers/config/manifest';
9
10
  import { manifest as csv } from '@/components/renderers/csv/manifest';
11
+ import { manifest as image } from '@/components/renderers/image/manifest';
12
+ import { manifest as pdf } from '@/components/renderers/pdf/manifest';
10
13
  import { manifest as summary } from '@/components/renderers/summary/manifest';
11
14
  import { manifest as timeline } from '@/components/renderers/timeline/manifest';
12
15
  import { manifest as todo } from '@/components/renderers/todo/manifest';
16
+ import { manifest as video } from '@/components/renderers/video/manifest';
13
17
  import { manifest as workflowYaml } from '@/components/renderers/workflow-yaml/manifest';
14
18
  import { manifest as graph } from '@/components/renderers/graph/manifest';
15
19
 
16
20
  const manifests = [
17
- agentInspector, backlinks, config, csv, summary, timeline, todo, workflowYaml, graph,
21
+ agentInspector, audio, backlinks, config, csv, image, pdf, summary, timeline, todo, video, workflowYaml, graph,
18
22
  ];
19
23
 
20
24
  for (const m of manifests) {
@@ -51,6 +51,13 @@ export interface ServerSettings {
51
51
  guideState?: GuideState;
52
52
  /** Per-agent ACP overrides (command, args, env, enabled). Keyed by agent ID. */
53
53
  acpAgents?: Record<string, import('./acp/agent-descriptors').AcpAgentOverride>;
54
+ /** Proxy compatibility cache: keyed by baseUrl, value is detected mode. */
55
+ baseUrlCompat?: Record<string, 'streaming' | 'non-streaming'>;
56
+ /** User's connection mode preference: CLI always on, MCP is optional */
57
+ connectionMode?: {
58
+ cli: boolean; // Always true (CLI is mandatory)
59
+ mcp: boolean; // User's explicit choice during onboarding
60
+ };
54
61
  }
55
62
 
56
63
  const DEFAULTS: ServerSettings = {
@@ -162,6 +169,26 @@ function parseGuideState(raw: unknown): GuideState | undefined {
162
169
  };
163
170
  }
164
171
 
172
+ /** Infer connectionMode from old config.
173
+ * Old configs don't have connectionMode — both CLI and MCP were always available.
174
+ * So we default to { cli: true, mcp: true } for existing users to avoid breaking change. */
175
+ function inferConnectionMode(parsed: Record<string, unknown>): { cli: boolean; mcp: boolean } {
176
+ // If already has explicit connectionMode, return it
177
+ if (parsed.connectionMode && typeof parsed.connectionMode === 'object') {
178
+ const obj = parsed.connectionMode as Record<string, unknown>;
179
+ if (typeof obj.cli === 'boolean' && typeof obj.mcp === 'boolean') {
180
+ return { cli: obj.cli, mcp: obj.mcp };
181
+ }
182
+ }
183
+ // Old config without connectionMode: default to both enabled (backwards-compat)
184
+ // Only fresh installs (setupPending=true or missing config) get mcp: false
185
+ const isNewInstall = parsed.setupPending === true || !parsed.mindRoot;
186
+ return {
187
+ cli: true,
188
+ mcp: !isNewInstall, // Existing users keep MCP, new users start with CLI-only
189
+ };
190
+ }
191
+
165
192
  export function readSettings(): ServerSettings {
166
193
  try {
167
194
  const raw = fs.readFileSync(SETTINGS_PATH, 'utf-8');
@@ -179,6 +206,16 @@ export function readSettings(): ServerSettings {
179
206
  setupPending: parsed.setupPending === true ? true : undefined,
180
207
  disabledSkills: Array.isArray(parsed.disabledSkills) ? parsed.disabledSkills as string[] : undefined,
181
208
  guideState: parseGuideState(parsed.guideState),
209
+ baseUrlCompat: (() => {
210
+ const raw = parsed.baseUrlCompat;
211
+ if (!raw || typeof raw !== 'object') return undefined;
212
+ const result: Record<string, 'streaming' | 'non-streaming'> = {};
213
+ for (const [k, v] of Object.entries(raw)) {
214
+ if (v === 'streaming' || v === 'non-streaming') result[k] = v;
215
+ }
216
+ return Object.keys(result).length > 0 ? result : undefined;
217
+ })(),
218
+ connectionMode: inferConnectionMode(parsed),
182
219
  };
183
220
  } catch {
184
221
  // Config file missing or corrupt → force setup wizard
@@ -186,6 +223,7 @@ export function readSettings(): ServerSettings {
186
223
  ...DEFAULTS,
187
224
  ai: { ...DEFAULTS.ai, providers: { ...DEFAULTS.ai.providers } },
188
225
  setupPending: true,
226
+ connectionMode: { cli: true, mcp: false },
189
227
  };
190
228
  }
191
229
  }
@@ -206,6 +244,8 @@ export function writeSettings(settings: ServerSettings): void {
206
244
  if (settings.disabledSkills !== undefined) merged.disabledSkills = settings.disabledSkills;
207
245
  if (settings.guideState !== undefined) merged.guideState = settings.guideState;
208
246
  if (settings.acpAgents !== undefined) merged.acpAgents = settings.acpAgents;
247
+ if (settings.baseUrlCompat !== undefined) merged.baseUrlCompat = settings.baseUrlCompat;
248
+ if (settings.connectionMode !== undefined) merged.connectionMode = settings.connectionMode;
209
249
  // setupPending: false/undefined → remove the field (cleanup); true → set it
210
250
  if ('setupPending' in settings) {
211
251
  if (settings.setupPending) merged.setupPending = true;
@@ -287,3 +327,23 @@ export function effectiveSopRoot(): string {
287
327
  const s = readSettings();
288
328
  return s.mindRoot || process.env.MIND_ROOT || path.join(os.homedir(), 'MindOS', 'mind');
289
329
  }
330
+
331
+ /** Read the baseUrl → compat mode cache from config. Never throws. */
332
+ export function readBaseUrlCompat(): Record<string, 'streaming' | 'non-streaming'> {
333
+ try {
334
+ const s = readSettings();
335
+ return s.baseUrlCompat ?? {};
336
+ } catch {
337
+ return {};
338
+ }
339
+ }
340
+
341
+ /** Persist a baseUrl compatibility detection result. Thread-safe via merge-write. */
342
+ export function writeBaseUrlCompat(baseUrl: string, mode: 'streaming' | 'non-streaming'): void {
343
+ const s = readSettings();
344
+ const updated: Record<string, 'streaming' | 'non-streaming'> = {
345
+ ...(s.baseUrlCompat ?? {}),
346
+ [baseUrl]: mode,
347
+ };
348
+ writeSettings({ ...s, baseUrlCompat: updated });
349
+ }
@@ -21,7 +21,20 @@ export interface WalkthroughStoreState {
21
21
 
22
22
  /* ── Helpers ── */
23
23
 
24
+ const LS_KEY = 'mindos_walkthrough_done';
25
+
26
+ /**
27
+ * Persist walkthrough state to server AND localStorage.
28
+ * localStorage acts as a safety net: even if the server persist fails
29
+ * (e.g. during update restart, network blip), the completion state
30
+ * survives page reload and prevents the "stuck overlay" bug.
31
+ */
24
32
  function persistStep(step: number, dismissed: boolean) {
33
+ // Local safety net — instant, survives server outage
34
+ if (step >= walkthroughSteps.length || dismissed) {
35
+ try { localStorage.setItem(LS_KEY, '1'); } catch {}
36
+ }
37
+ // Server persist — fire-and-forget (localStorage is the safety net)
25
38
  fetch('/api/setup', {
26
39
  method: 'PATCH',
27
40
  headers: { 'Content-Type': 'application/json' },
@@ -31,6 +44,11 @@ function persistStep(step: number, dismissed: boolean) {
31
44
  }).catch((err) => { console.warn('[walkthrough-store] persist failed:', err); });
32
45
  }
33
46
 
47
+ /** Check if walkthrough was completed/dismissed (fast, sync, local) */
48
+ function isLocallyDone(): boolean {
49
+ try { return localStorage.getItem(LS_KEY) === '1'; } catch { return false; }
50
+ }
51
+
34
52
  /* ── Store ── */
35
53
 
36
54
  export const useWalkthroughStore = create<WalkthroughStoreState>((set, get) => {
@@ -84,12 +102,26 @@ export const useWalkthroughStore = create<WalkthroughStoreState>((set, get) => {
84
102
  // Only auto-start on desktop
85
103
  if (window.innerWidth < 768) return () => {};
86
104
 
105
+ // Fast local check: if walkthrough was completed/dismissed, never reactivate.
106
+ // This prevents the "stuck overlay" bug where server persist failed during
107
+ // update restart but localStorage recorded the completion.
108
+ if (isLocallyDone()) return () => {};
109
+
87
110
  fetch('/api/setup')
88
111
  .then(r => r.json())
89
112
  .then(data => {
90
113
  const gs = data.guideState;
91
114
  if (!gs) return;
92
- if (gs.walkthroughDismissed) return;
115
+ if (gs.walkthroughDismissed) {
116
+ try { localStorage.setItem(LS_KEY, '1'); } catch {} // sync local
117
+ return;
118
+ }
119
+
120
+ // If server says completed (step >= totalSteps), mark locally done
121
+ if (typeof gs.walkthroughStep === 'number' && gs.walkthroughStep >= totalSteps) {
122
+ try { localStorage.setItem(LS_KEY, '1'); } catch {};
123
+ return;
124
+ }
93
125
 
94
126
  if (gs.active && !gs.dismissed && gs.walkthroughStep === undefined) {
95
127
  if (isWelcome) {
@@ -5,12 +5,13 @@
5
5
 
6
6
  import { execSync } from 'node:child_process';
7
7
  import { existsSync, readFileSync } from 'node:fs';
8
- import { resolve } from 'node:path';
8
+ import { resolve, delimiter } from 'node:path';
9
9
  import { homedir } from 'node:os';
10
10
  import { CONFIG_PATH, ROOT } from '../lib/constants.js';
11
11
  import { bold, dim, cyan, green, red, yellow } from '../lib/colors.js';
12
12
  import { isPortInUse } from '../lib/port.js';
13
13
  import { EXIT } from '../lib/command.js';
14
+ import { stripBom } from '../lib/jsonc.js';
14
15
 
15
16
  export const meta = {
16
17
  name: 'doctor',
@@ -45,7 +46,7 @@ export const run = async (_args, flags) => {
45
46
  }
46
47
  let config;
47
48
  try {
48
- config = JSON.parse(readFileSync(CONFIG_PATH, 'utf-8'));
49
+ config = JSON.parse(stripBom(readFileSync(CONFIG_PATH, 'utf-8')));
49
50
  ok(`Config file found and valid JSON ${dim(CONFIG_PATH)}`, 'config');
50
51
  } catch {
51
52
  err(`Config file exists but failed to parse ${dim(CONFIG_PATH)}`, 'config');
@@ -58,7 +59,7 @@ export const run = async (_args, flags) => {
58
59
  if (!mindRoot) {
59
60
  err('Config missing required field: mindRoot');
60
61
  hasError = true;
61
- } else if (!existsSync(mindRoot.replace(/^~/, homedir()))) {
62
+ } else if (!existsSync(mindRoot === '~' ? homedir() : mindRoot.replace(/^~[/\\]/, homedir() + '/'))) {
62
63
  warn(`mindRoot path does not exist: ${dim(mindRoot)} (will be created on first start)`);
63
64
  } else {
64
65
  ok(`Knowledge base path exists ${dim(mindRoot)}`);
@@ -100,14 +101,19 @@ export const run = async (_args, flags) => {
100
101
  ok(`npm ${npmVersion} reachable`);
101
102
  } catch {
102
103
  err('npm not found in PATH — app dependencies cannot be installed');
103
- console.log(dim(' Node.js may be installed via nvm/fnm/volta and not visible to /bin/sh.'));
104
- console.log(dim(' Fix: add your Node.js bin path to ~/.profile so non-interactive shells can find it.'));
104
+ if (process.platform === 'win32') {
105
+ console.log(dim(' Ensure Node.js is installed and its bin directory is in your system PATH.'));
106
+ console.log(dim(' Fix: reinstall Node.js from https://nodejs.org (the installer adds it to PATH).'));
107
+ } else {
108
+ console.log(dim(' Node.js may be installed via nvm/fnm/volta and not visible to /bin/sh.'));
109
+ console.log(dim(' Fix: add your Node.js bin path to ~/.profile so non-interactive shells can find it.'));
110
+ }
105
111
  hasError = true;
106
112
  }
107
113
 
108
114
  // 4c. ~/.mindos/bin in PATH (CLI shim)
109
115
  const mindosBin = resolve(homedir(), '.mindos', 'bin');
110
- const pathDirs = (process.env.PATH || '').split(':');
116
+ const pathDirs = (process.env.PATH || '').split(delimiter);
111
117
  if (pathDirs.some(d => d === mindosBin || d === '$HOME/.mindos/bin' || d === '~/.mindos/bin')) {
112
118
  ok(`~/.mindos/bin is in PATH`);
113
119
  } else {
@@ -7,7 +7,7 @@
7
7
  */
8
8
 
9
9
  import { existsSync, readFileSync, writeFileSync, appendFileSync, unlinkSync, renameSync, mkdirSync, readdirSync, statSync, openSync, readSync, closeSync } from 'node:fs';
10
- import { resolve, basename, dirname, relative } from 'node:path';
10
+ import { resolve, basename, dirname, relative, sep } from 'node:path';
11
11
  import { execFileSync } from 'node:child_process';
12
12
  import { bold, dim, cyan, green, red, yellow } from '../lib/colors.js';
13
13
  import { loadConfig } from '../lib/config.js';
@@ -28,9 +28,12 @@ function getMindRoot() {
28
28
 
29
29
  function resolvePath(root, filePath) {
30
30
  const resolved = resolve(root, filePath);
31
- if (resolved !== root && !resolved.startsWith(root + '/')) {
32
- console.error(red(`Access denied: path outside knowledge base`));
33
- process.exit(EXIT.ERROR);
31
+ if (resolved !== root) {
32
+ const rel = relative(root, resolved);
33
+ if (rel === '..' || rel.startsWith(`..${sep}`) || rel.startsWith('../')) {
34
+ console.error(red(`Access denied: path outside knowledge base`));
35
+ process.exit(EXIT.ERROR);
36
+ }
34
37
  }
35
38
  return resolved;
36
39
  }
@@ -1,9 +1,8 @@
1
1
  /**
2
- * mindos logs — Tail service logs
2
+ * mindos logs — Tail service logs (cross-platform, no external tools)
3
3
  */
4
4
 
5
- import { execSync } from 'node:child_process';
6
- import { existsSync } from 'node:fs';
5
+ import { existsSync, readFileSync, statSync, watch as fsWatch, openSync, readSync, closeSync } from 'node:fs';
7
6
  import { LOG_PATH } from '../lib/constants.js';
8
7
  import { dim } from '../lib/colors.js';
9
8
 
@@ -17,6 +16,38 @@ export const meta = {
17
16
  ],
18
17
  };
19
18
 
19
+ function tailLines(filePath, count) {
20
+ const content = readFileSync(filePath, 'utf-8');
21
+ const lines = content.split('\n');
22
+ return lines.slice(-count).join('\n');
23
+ }
24
+
25
+ function followFile(filePath) {
26
+ let size = statSync(filePath).size;
27
+
28
+ const readNew = () => {
29
+ let newSize;
30
+ try { newSize = statSync(filePath).size; } catch { return; }
31
+ if (newSize <= size) { size = newSize; return; }
32
+ const fd = openSync(filePath, 'r');
33
+ try {
34
+ const buf = Buffer.alloc(newSize - size);
35
+ readSync(fd, buf, 0, buf.length, size);
36
+ process.stdout.write(buf.toString('utf-8'));
37
+ } finally {
38
+ closeSync(fd);
39
+ }
40
+ size = newSize;
41
+ };
42
+
43
+ const watcher = fsWatch(filePath, { persistent: true }, readNew);
44
+ // Also poll as a fallback — fs.watch is unreliable on some network/VM mounts
45
+ const interval = setInterval(readNew, 1000);
46
+
47
+ process.on('SIGINT', () => { watcher.close(); clearInterval(interval); process.exit(0); });
48
+ process.on('SIGTERM', () => { watcher.close(); clearInterval(interval); process.exit(0); });
49
+ }
50
+
20
51
  export const run = async (args, flags) => {
21
52
  const { ensureMindosDir } = await import('../lib/gateway.js');
22
53
  await ensureMindosDir();
@@ -28,5 +59,9 @@ export const run = async (args, flags) => {
28
59
  }
29
60
 
30
61
  const noFollow = flags['no-follow'] === true;
31
- execSync(noFollow ? `tail -n 100 ${LOG_PATH}` : `tail -f ${LOG_PATH}`, { stdio: 'inherit' });
62
+ console.log(tailLines(LOG_PATH, 100));
63
+
64
+ if (!noFollow) {
65
+ followFile(LOG_PATH);
66
+ }
32
67
  };
@@ -21,5 +21,5 @@ export const meta = {
21
21
 
22
22
  export const run = (args, flags) => {
23
23
  const daemonFlag = flags['install-daemon'] ? ' --install-daemon' : '';
24
- execInherited(`node ${resolve(ROOT, 'scripts/setup.js')}${daemonFlag}`);
24
+ execInherited(`node "${resolve(ROOT, 'scripts/setup.js')}"${daemonFlag}`);
25
25
  };
@@ -33,7 +33,12 @@ export const run = () => {
33
33
  }
34
34
 
35
35
  try {
36
- execSync(`${cmd} ${url}`, { stdio: 'ignore' });
36
+ if (process.platform === 'win32') {
37
+ // Windows `start` treats the first quoted arg as a window title
38
+ execSync(`start "" "${url}"`, { stdio: 'ignore' });
39
+ } else {
40
+ execSync(`${cmd} ${url}`, { stdio: 'ignore' });
41
+ }
37
42
  console.log(`${green('✔')} Opening ${cyan(url)}`);
38
43
  } catch {
39
44
  console.log(dim(`Could not open browser automatically. Visit: ${cyan(url)}`));