@geminilight/mindos 0.6.53 → 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 (508) 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 +23 -20
  6. package/_standalone/.next/build-manifest.json +3 -3
  7. package/_standalone/.next/cache/.previewinfo +1 -1
  8. package/_standalone/.next/cache/.rscinfo +1 -1
  9. package/_standalone/.next/cache/config.json +3 -3
  10. package/_standalone/.next/prerender-manifest.json +3 -3
  11. package/_standalone/.next/react-loadable-manifest.json +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 +5 -5
  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_client-reference-manifest.js +1 -1
  91. package/_standalone/.next/server/app/api/search/route.js.nft.json +1 -1
  92. package/_standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  93. package/_standalone/.next/server/app/api/settings/list-models/route_client-reference-manifest.js +1 -1
  94. package/_standalone/.next/server/app/api/settings/reset-token/route_client-reference-manifest.js +1 -1
  95. package/_standalone/.next/server/app/api/settings/route.js +1 -1
  96. package/_standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
  97. package/_standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  98. package/_standalone/.next/server/app/api/settings/test-key/route_client-reference-manifest.js +1 -1
  99. package/_standalone/.next/server/app/api/setup/check-path/route_client-reference-manifest.js +1 -1
  100. package/_standalone/.next/server/app/api/setup/check-port/route_client-reference-manifest.js +1 -1
  101. package/_standalone/.next/server/app/api/setup/generate-token/route_client-reference-manifest.js +1 -1
  102. package/_standalone/.next/server/app/api/setup/ls/route_client-reference-manifest.js +1 -1
  103. package/_standalone/.next/server/app/api/setup/route.js +1 -1
  104. package/_standalone/.next/server/app/api/setup/route_client-reference-manifest.js +1 -1
  105. package/_standalone/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  106. package/_standalone/.next/server/app/api/sync/route.js +1 -1
  107. package/_standalone/.next/server/app/api/sync/route_client-reference-manifest.js +1 -1
  108. package/_standalone/.next/server/app/api/tree-version/route.js.nft.json +1 -1
  109. package/_standalone/.next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
  110. package/_standalone/.next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
  111. package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  112. package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
  113. package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
  114. package/_standalone/.next/server/app/api/workflows/route.js.nft.json +1 -1
  115. package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
  116. package/_standalone/.next/server/app/changes/page.js +2 -2
  117. package/_standalone/.next/server/app/changes/page.js.nft.json +1 -1
  118. package/_standalone/.next/server/app/changes/page_client-reference-manifest.js +1 -1
  119. package/_standalone/.next/server/app/echo/[segment]/page.js +3 -3
  120. package/_standalone/.next/server/app/echo/[segment]/page.js.nft.json +1 -1
  121. package/_standalone/.next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
  122. package/_standalone/.next/server/app/echo/page.js +1 -1
  123. package/_standalone/.next/server/app/echo/page.js.nft.json +1 -1
  124. package/_standalone/.next/server/app/echo/page_client-reference-manifest.js +1 -1
  125. package/_standalone/.next/server/app/explore/page.js +2 -2
  126. package/_standalone/.next/server/app/explore/page.js.nft.json +1 -1
  127. package/_standalone/.next/server/app/explore/page_client-reference-manifest.js +1 -1
  128. package/_standalone/.next/server/app/help/page.js +2 -2
  129. package/_standalone/.next/server/app/help/page.js.nft.json +1 -1
  130. package/_standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
  131. package/_standalone/.next/server/app/inbox/history/page.js +2 -0
  132. package/_standalone/.next/server/app/inbox/history/page.js.nft.json +1 -0
  133. package/_standalone/.next/server/app/inbox/history/page_client-reference-manifest.js +1 -0
  134. package/_standalone/.next/server/app/login/page.js +2 -2
  135. package/_standalone/.next/server/app/login/page.js.nft.json +1 -1
  136. package/_standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  137. package/_standalone/.next/server/app/page.js +3 -3
  138. package/_standalone/.next/server/app/page.js.nft.json +1 -1
  139. package/_standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  140. package/_standalone/.next/server/app/setup/page.js +2 -2
  141. package/_standalone/.next/server/app/setup/page.js.nft.json +1 -1
  142. package/_standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  143. package/_standalone/.next/server/app/trash/page.js +3 -3
  144. package/_standalone/.next/server/app/trash/page.js.nft.json +1 -1
  145. package/_standalone/.next/server/app/trash/page_client-reference-manifest.js +1 -1
  146. package/_standalone/.next/server/app/view/[...path]/page.js +3 -3
  147. package/_standalone/.next/server/app/view/[...path]/page.js.nft.json +1 -1
  148. package/_standalone/.next/server/app/view/[...path]/page_client-reference-manifest.js +1 -1
  149. package/_standalone/.next/server/app/wiki/page.js +2 -0
  150. package/_standalone/.next/server/app/wiki/page.js.nft.json +1 -0
  151. package/_standalone/.next/server/app/wiki/page_client-reference-manifest.js +1 -0
  152. package/_standalone/.next/server/app-paths-manifest.json +23 -20
  153. package/_standalone/.next/server/chunks/2190.js +2 -2
  154. package/_standalone/.next/server/chunks/2364.js +2 -0
  155. package/_standalone/.next/server/chunks/357.js +1 -0
  156. package/_standalone/.next/server/chunks/530.js +219 -0
  157. package/_standalone/.next/server/chunks/6054.js +52 -0
  158. package/_standalone/.next/server/chunks/6539.js +1 -1
  159. package/_standalone/.next/server/chunks/8388.js +2 -2
  160. package/_standalone/.next/server/chunks/953.js +4 -4
  161. package/_standalone/.next/server/middleware-build-manifest.js +1 -1
  162. package/_standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  163. package/_standalone/.next/server/next-font-manifest.js +1 -1
  164. package/_standalone/.next/server/next-font-manifest.json +1 -1
  165. package/_standalone/.next/server/pages/500.html +2 -2
  166. package/_standalone/.next/server/server-reference-manifest.js +1 -1
  167. package/_standalone/.next/server/server-reference-manifest.json +1 -1
  168. package/_standalone/.next/static/2hrwFOLEOZhHQHfrIt-Dw/_buildManifest.js +1 -0
  169. package/_standalone/.next/static/chunks/1053-2874859f7caefa0f.js +29 -0
  170. package/_standalone/.next/static/chunks/178-105779afb62d36d9.js +1 -0
  171. package/_standalone/.next/static/chunks/1814.b08e9fb85dd3b13c.js +1 -0
  172. package/_standalone/.next/static/chunks/{1880-3ec02adc80531825.js → 1880-7abf971bcfd2389b.js} +2 -2
  173. package/_standalone/.next/static/chunks/{3160-83a7e0b94414b3ac.js → 2218-d54538000574ffef.js} +1 -1
  174. package/_standalone/.next/static/chunks/254-32719a9bea2e74f0.js +1 -0
  175. package/_standalone/.next/static/chunks/362.a77be2f206db7b19.js +1 -0
  176. package/_standalone/.next/static/chunks/4237-ffc6e7c15d4007b6.js +1 -0
  177. package/_standalone/.next/static/chunks/7035-2af69391c7b1ad95.js +1 -0
  178. package/_standalone/.next/static/chunks/7322-d67d05067544864c.js +1 -0
  179. package/_standalone/.next/static/chunks/{6926-4af497b83952fa87.js → 8409-de5726a4a278d28f.js} +1 -1
  180. package/_standalone/.next/static/chunks/8753-ea9db680b0f70f25.js +1 -0
  181. package/_standalone/.next/static/chunks/app/.well-known/agent-card.json/{route-b07a5983e85bc5e3.js → route-e240db6d5049d336.js} +1 -1
  182. package/_standalone/.next/static/chunks/app/_global-error/{page-b07a5983e85bc5e3.js → page-e240db6d5049d336.js} +1 -1
  183. package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-f006a70f6889eb56.js +1 -0
  184. package/_standalone/.next/static/chunks/app/agents/page-bd522e428e3acb78.js +5 -0
  185. package/_standalone/.next/static/chunks/app/api/a2a/agents/{route-b07a5983e85bc5e3.js → route-e240db6d5049d336.js} +1 -1
  186. package/_standalone/.next/static/chunks/app/api/a2a/delegations/{route-b07a5983e85bc5e3.js → route-e240db6d5049d336.js} +1 -1
  187. package/_standalone/.next/static/chunks/app/api/a2a/discover/route-e240db6d5049d336.js +1 -0
  188. package/_standalone/.next/static/chunks/app/api/a2a/route-e240db6d5049d336.js +1 -0
  189. package/_standalone/.next/static/chunks/app/api/acp/config/route-e240db6d5049d336.js +1 -0
  190. package/_standalone/.next/static/chunks/app/api/acp/detect/route-e240db6d5049d336.js +1 -0
  191. package/_standalone/.next/static/chunks/app/api/acp/install/route-e240db6d5049d336.js +1 -0
  192. package/_standalone/.next/static/chunks/app/api/acp/registry/route-e240db6d5049d336.js +1 -0
  193. package/_standalone/.next/static/chunks/app/api/acp/session/route-e240db6d5049d336.js +1 -0
  194. package/_standalone/.next/static/chunks/app/api/agent-activity/route-e240db6d5049d336.js +1 -0
  195. package/_standalone/.next/static/chunks/app/api/ask/route-e240db6d5049d336.js +1 -0
  196. package/_standalone/.next/static/chunks/app/api/ask-sessions/route-e240db6d5049d336.js +1 -0
  197. package/_standalone/.next/static/chunks/app/api/auth/route-e240db6d5049d336.js +1 -0
  198. package/_standalone/.next/static/chunks/app/api/backlinks/route-e240db6d5049d336.js +1 -0
  199. package/_standalone/.next/static/chunks/app/api/bootstrap/route-e240db6d5049d336.js +1 -0
  200. package/_standalone/.next/static/chunks/app/api/changes/route-e240db6d5049d336.js +1 -0
  201. package/_standalone/.next/static/chunks/app/api/export/route-e240db6d5049d336.js +1 -0
  202. package/_standalone/.next/static/chunks/app/api/extract-pdf/route-e240db6d5049d336.js +1 -0
  203. package/_standalone/.next/static/chunks/app/api/file/import/route-e240db6d5049d336.js +1 -0
  204. package/_standalone/.next/static/chunks/app/api/file/raw/route-e240db6d5049d336.js +1 -0
  205. package/_standalone/.next/static/chunks/app/api/file/route-e240db6d5049d336.js +1 -0
  206. package/_standalone/.next/static/chunks/app/api/files/route-e240db6d5049d336.js +1 -0
  207. package/_standalone/.next/static/chunks/app/api/git/route-e240db6d5049d336.js +1 -0
  208. package/_standalone/.next/static/chunks/app/api/graph/route-e240db6d5049d336.js +1 -0
  209. package/_standalone/.next/static/chunks/app/api/health/route-e240db6d5049d336.js +1 -0
  210. package/_standalone/.next/static/chunks/app/api/inbox/route-e240db6d5049d336.js +1 -0
  211. package/_standalone/.next/static/chunks/app/api/init/route-e240db6d5049d336.js +1 -0
  212. package/_standalone/.next/static/chunks/app/api/mcp/agents/route-e240db6d5049d336.js +1 -0
  213. package/_standalone/.next/static/chunks/app/api/mcp/install/route-e240db6d5049d336.js +1 -0
  214. package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-e240db6d5049d336.js +1 -0
  215. package/_standalone/.next/static/chunks/app/api/mcp/restart/route-e240db6d5049d336.js +1 -0
  216. package/_standalone/.next/static/chunks/app/api/mcp/status/route-e240db6d5049d336.js +1 -0
  217. package/_standalone/.next/static/chunks/app/api/mcp/uninstall/route-e240db6d5049d336.js +1 -0
  218. package/_standalone/.next/static/chunks/app/api/monitoring/route-e240db6d5049d336.js +1 -0
  219. package/_standalone/.next/static/chunks/app/api/recent-files/route-e240db6d5049d336.js +1 -0
  220. package/_standalone/.next/static/chunks/app/api/restart/route-e240db6d5049d336.js +1 -0
  221. package/_standalone/.next/static/chunks/app/api/search/route-e240db6d5049d336.js +1 -0
  222. package/_standalone/.next/static/chunks/app/api/settings/list-models/route-e240db6d5049d336.js +1 -0
  223. package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-e240db6d5049d336.js +1 -0
  224. package/_standalone/.next/static/chunks/app/api/settings/route-e240db6d5049d336.js +1 -0
  225. package/_standalone/.next/static/chunks/app/api/settings/test-key/route-e240db6d5049d336.js +1 -0
  226. package/_standalone/.next/static/chunks/app/api/setup/check-path/route-e240db6d5049d336.js +1 -0
  227. package/_standalone/.next/static/chunks/app/api/setup/check-port/route-e240db6d5049d336.js +1 -0
  228. package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-e240db6d5049d336.js +1 -0
  229. package/_standalone/.next/static/chunks/app/api/setup/ls/route-e240db6d5049d336.js +1 -0
  230. package/_standalone/.next/static/chunks/app/api/setup/route-e240db6d5049d336.js +1 -0
  231. package/_standalone/.next/static/chunks/app/api/skills/route-e240db6d5049d336.js +1 -0
  232. package/_standalone/.next/static/chunks/app/api/sync/route-e240db6d5049d336.js +1 -0
  233. package/_standalone/.next/static/chunks/app/api/tree-version/route-e240db6d5049d336.js +1 -0
  234. package/_standalone/.next/static/chunks/app/api/uninstall/route-e240db6d5049d336.js +1 -0
  235. package/_standalone/.next/static/chunks/app/api/update/route-e240db6d5049d336.js +1 -0
  236. package/_standalone/.next/static/chunks/app/api/update-check/route-e240db6d5049d336.js +1 -0
  237. package/_standalone/.next/static/chunks/app/api/update-status/route-e240db6d5049d336.js +1 -0
  238. package/_standalone/.next/static/chunks/app/api/workflows/route-e240db6d5049d336.js +1 -0
  239. package/_standalone/.next/static/chunks/app/changes/page-5a72144d1080a699.js +1 -0
  240. package/_standalone/.next/static/chunks/app/echo/[segment]/{page-88df174dd64b2c76.js → page-6710da1f581b2854.js} +2 -2
  241. package/_standalone/.next/static/chunks/app/echo/page-e240db6d5049d336.js +1 -0
  242. package/_standalone/.next/static/chunks/app/explore/{page-5eb2835e9e3ab4bb.js → page-d3d99308146c2240.js} +1 -1
  243. package/_standalone/.next/static/chunks/app/global-error-c37d50db6128ec01.js +1 -0
  244. package/_standalone/.next/static/chunks/app/help/page-222df603080b5fab.js +1 -0
  245. package/_standalone/.next/static/chunks/app/inbox/history/page-07819cf95cb0805f.js +1 -0
  246. package/_standalone/.next/static/chunks/app/layout-8eacff5813458190.js +186 -0
  247. package/_standalone/.next/static/chunks/app/loading-e240db6d5049d336.js +1 -0
  248. package/_standalone/.next/static/chunks/app/login/{page-24236460fa7c11d0.js → page-0eeef685052869a6.js} +1 -1
  249. package/_standalone/.next/static/chunks/app/page-5a6c9455efe8a0df.js +7 -0
  250. package/_standalone/.next/static/chunks/app/setup/{page-99f40e9337388cda.js → page-9a81fa4d82c6351b.js} +1 -1
  251. package/_standalone/.next/static/chunks/app/trash/page-72d0ae3649ac4b6c.js +1 -0
  252. package/_standalone/.next/static/chunks/app/view/[...path]/loading-e240db6d5049d336.js +1 -0
  253. package/_standalone/.next/static/chunks/app/view/[...path]/not-found-fc04c2bd4f35bc6f.js +1 -0
  254. package/_standalone/.next/static/chunks/app/view/[...path]/page-e8699f96589c0979.js +12 -0
  255. package/_standalone/.next/static/chunks/app/wiki/page-d492256a93f0b8bc.js +1 -0
  256. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-e240db6d5049d336.js +1 -0
  257. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-e240db6d5049d336.js +1 -0
  258. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-e240db6d5049d336.js +1 -0
  259. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-e240db6d5049d336.js +1 -0
  260. package/_standalone/.next/static/chunks/{webpack-bbd44cbc83dc0aa4.js → webpack-73c9da80c6c1ebfe.js} +1 -1
  261. package/_standalone/.next/static/css/66f8a81e4eda06d4.css +1 -0
  262. package/_standalone/.next/static/css/a4a2b71142b311af.css +31 -0
  263. package/_standalone/.next/trace +64 -64
  264. package/_standalone/.next/types/routes.d.ts +5 -2
  265. package/_standalone/.next/types/validator.ts +27 -0
  266. package/_standalone/__tests__/agents/agents-content-dashboard.test.tsx +1 -0
  267. package/_standalone/__tests__/agents/agents-content-model.test.ts +13 -0
  268. package/_standalone/__tests__/core/inbox.test.ts +168 -0
  269. package/_standalone/__tests__/core/sync.test.ts +37 -0
  270. package/_standalone/__tests__/panels/agents-panel-hub.test.tsx +1 -0
  271. package/_standalone/app/globals.css +29 -3
  272. package/_standalone/components/ActivityBar.tsx +9 -9
  273. package/_standalone/components/AskFab.tsx +1 -1
  274. package/_standalone/components/Backlinks.tsx +1 -1
  275. package/_standalone/components/Breadcrumb.tsx +1 -1
  276. package/_standalone/components/CreateSpaceModal.tsx +1 -1
  277. package/_standalone/components/EchoSpotlight.tsx +14 -10
  278. package/_standalone/components/Editor.tsx +1 -1
  279. package/_standalone/components/ExportModal.tsx +3 -3
  280. package/_standalone/components/FileTree.tsx +6 -11
  281. package/_standalone/components/GuideCard.tsx +1 -1
  282. package/_standalone/components/ImportModal.tsx +1 -2
  283. package/_standalone/components/KeyboardShortcuts.tsx +1 -1
  284. package/_standalone/components/MarkdownEditor.tsx +1 -1
  285. package/_standalone/components/OnboardingView.tsx +2 -2
  286. package/_standalone/components/OrganizeToast.tsx +3 -1
  287. package/_standalone/components/Panel.tsx +27 -6
  288. package/_standalone/components/Sidebar.tsx +1 -1
  289. package/_standalone/components/SidebarLayout.tsx +30 -7
  290. package/_standalone/components/SystemPulse.tsx +16 -16
  291. package/_standalone/components/agents/AgentsOverviewSection.tsx +18 -92
  292. package/_standalone/components/agents/AgentsPanelA2aTab.tsx +67 -66
  293. package/_standalone/components/agents/AgentsPrimitives.tsx +1 -1
  294. package/_standalone/components/agents/RecentActivityFeed.tsx +6 -6
  295. package/_standalone/components/agents/SkillDetailPopover.tsx +1 -1
  296. package/_standalone/components/ask/AskHeader.tsx +1 -1
  297. package/_standalone/components/echo/EchoHero.tsx +1 -1
  298. package/_standalone/components/echo/EchoPageSections.tsx +1 -1
  299. package/_standalone/components/explore/UseCaseCard.tsx +1 -1
  300. package/_standalone/components/home/InboxSection.tsx +262 -54
  301. package/_standalone/components/panels/AgentsPanel.tsx +4 -3
  302. package/_standalone/components/panels/AgentsPanelAgentDetail.tsx +1 -1
  303. package/_standalone/components/panels/AgentsPanelHubNav.tsx +10 -6
  304. package/_standalone/components/panels/PanelHeader.tsx +1 -1
  305. package/_standalone/components/renderers/audio/AudioRenderer.tsx +79 -0
  306. package/_standalone/components/renderers/image/ImageRenderer.tsx +203 -0
  307. package/_standalone/components/renderers/pdf/PdfRenderer.tsx +57 -0
  308. package/_standalone/components/renderers/video/VideoRenderer.tsx +91 -0
  309. package/_standalone/components/settings/McpTab.tsx +154 -28
  310. package/_standalone/components/settings/PluginsTab.tsx +1 -1
  311. package/_standalone/components/settings/SettingsContent.tsx +41 -7
  312. package/_standalone/components/settings/types.ts +7 -1
  313. package/_standalone/components/walkthrough/WalkthroughOverlay.tsx +1 -1
  314. package/_standalone/components/walkthrough/WalkthroughTooltip.tsx +1 -1
  315. package/_standalone/hooks/useAiOrganize.ts +14 -1
  316. package/_standalone/lib/organize-history.ts +6 -0
  317. package/_standalone/tsconfig.tsbuildinfo +1 -1
  318. package/app/app/api/file/raw/route.ts +121 -0
  319. package/app/app/api/file/route.ts +21 -0
  320. package/app/app/api/inbox/route.ts +38 -2
  321. package/app/app/api/mcp/status/route.ts +1 -0
  322. package/app/app/api/settings/route.ts +13 -0
  323. package/app/app/api/setup/route.ts +11 -1
  324. package/app/app/api/sync/route.ts +36 -13
  325. package/app/app/global-error.tsx +3 -3
  326. package/app/app/globals.css +29 -3
  327. package/app/app/inbox/history/page.tsx +250 -0
  328. package/app/app/layout.tsx +5 -11
  329. package/app/app/login/page.tsx +1 -1
  330. package/app/app/view/[...path]/ViewPageClient.tsx +15 -10
  331. package/app/app/view/[...path]/not-found.tsx +1 -1
  332. package/app/app/view/[...path]/page.tsx +32 -1
  333. package/app/app/wiki/page.tsx +58 -0
  334. package/app/components/ActivityBar.tsx +9 -9
  335. package/app/components/AskFab.tsx +1 -1
  336. package/app/components/Backlinks.tsx +1 -1
  337. package/app/components/Breadcrumb.tsx +1 -1
  338. package/app/components/CreateSpaceModal.tsx +1 -1
  339. package/app/components/DirView.tsx +2 -2
  340. package/app/components/EchoSpotlight.tsx +14 -10
  341. package/app/components/Editor.tsx +1 -1
  342. package/app/components/ExportModal.tsx +3 -3
  343. package/app/components/FileTree.tsx +6 -11
  344. package/app/components/GuideCard.tsx +1 -1
  345. package/app/components/HomeContent.tsx +50 -39
  346. package/app/components/ImportModal.tsx +1 -2
  347. package/app/components/KeyboardShortcuts.tsx +1 -1
  348. package/app/components/MarkdownEditor.tsx +1 -1
  349. package/app/components/OnboardingView.tsx +2 -2
  350. package/app/components/OrganizeToast.tsx +3 -1
  351. package/app/components/Panel.tsx +27 -6
  352. package/app/components/Sidebar.tsx +1 -1
  353. package/app/components/SidebarLayout.tsx +30 -7
  354. package/app/components/SystemPulse.tsx +16 -16
  355. package/app/components/TrashPageClient.tsx +8 -6
  356. package/app/components/UpdateOverlay.tsx +1 -1
  357. package/app/components/WikiHomeContent.tsx +273 -0
  358. package/app/components/agents/AgentDetailContent.tsx +5 -5
  359. package/app/components/agents/AgentsContentPage.tsx +14 -3
  360. package/app/components/agents/AgentsOverviewSection.tsx +18 -92
  361. package/app/components/agents/AgentsPanelA2aTab.tsx +67 -66
  362. package/app/components/agents/AgentsPrimitives.tsx +1 -1
  363. package/app/components/agents/RecentActivityFeed.tsx +6 -6
  364. package/app/components/agents/SkillDetailPopover.tsx +1 -1
  365. package/app/components/agents/agents-content-model.ts +4 -1
  366. package/app/components/ask/AskHeader.tsx +1 -1
  367. package/app/components/changes/ChangesContentPage.tsx +10 -6
  368. package/app/components/echo/EchoHero.tsx +1 -1
  369. package/app/components/echo/EchoPageSections.tsx +1 -1
  370. package/app/components/explore/ExploreContent.tsx +1 -1
  371. package/app/components/explore/UseCaseCard.tsx +1 -1
  372. package/app/components/help/HelpContent.tsx +3 -3
  373. package/app/components/home/InboxSection.tsx +262 -54
  374. package/app/components/panels/AgentsPanel.tsx +4 -3
  375. package/app/components/panels/AgentsPanelAgentDetail.tsx +1 -1
  376. package/app/components/panels/AgentsPanelHubNav.tsx +10 -6
  377. package/app/components/panels/PanelHeader.tsx +1 -1
  378. package/app/components/renderers/audio/AudioRenderer.tsx +79 -0
  379. package/app/components/renderers/audio/manifest.ts +17 -0
  380. package/app/components/renderers/image/ImageRenderer.tsx +203 -0
  381. package/app/components/renderers/image/manifest.ts +17 -0
  382. package/app/components/renderers/pdf/PdfRenderer.tsx +57 -0
  383. package/app/components/renderers/pdf/manifest.ts +15 -0
  384. package/app/components/renderers/video/VideoRenderer.tsx +91 -0
  385. package/app/components/renderers/video/manifest.ts +17 -0
  386. package/app/components/settings/McpTab.tsx +154 -28
  387. package/app/components/settings/PluginsTab.tsx +1 -1
  388. package/app/components/settings/SettingsContent.tsx +41 -7
  389. package/app/components/settings/types.ts +7 -1
  390. package/app/components/setup/index.tsx +4 -3
  391. package/app/components/walkthrough/WalkthroughOverlay.tsx +1 -1
  392. package/app/components/walkthrough/WalkthroughTooltip.tsx +1 -1
  393. package/app/hooks/useAiOrganize.ts +14 -1
  394. package/app/lib/core/inbox.ts +131 -2
  395. package/app/lib/core/pdf-text.ts +28 -0
  396. package/app/lib/core/search-index.ts +29 -5
  397. package/app/lib/core/tree.ts +6 -1
  398. package/app/lib/fs.ts +31 -3
  399. package/app/lib/i18n/modules/ai-chat.ts +34 -0
  400. package/app/lib/i18n/modules/knowledge.ts +30 -0
  401. package/app/lib/i18n/modules/navigation.ts +4 -2
  402. package/app/lib/i18n/modules/panels.ts +22 -4
  403. package/app/lib/i18n/modules/settings.ts +26 -0
  404. package/app/lib/organize-history.ts +6 -0
  405. package/app/lib/renderers/index.ts +5 -1
  406. package/app/lib/settings.ts +28 -0
  407. package/bin/commands/doctor.js +12 -6
  408. package/bin/commands/file.js +7 -4
  409. package/bin/commands/logs.js +39 -4
  410. package/bin/commands/onboard.js +1 -1
  411. package/bin/commands/open.js +6 -1
  412. package/bin/commands/space.js +7 -4
  413. package/bin/commands/update.js +8 -18
  414. package/bin/lib/build.js +19 -8
  415. package/bin/lib/cli-shim.js +67 -2
  416. package/bin/lib/config.js +4 -5
  417. package/bin/lib/gateway.js +10 -23
  418. package/bin/lib/jsonc.js +7 -2
  419. package/bin/lib/mcp-agents.js +26 -5
  420. package/bin/lib/path-expand.js +6 -3
  421. package/bin/lib/port.js +5 -1
  422. package/bin/lib/stop.js +72 -51
  423. package/bin/lib/sync.js +1 -1
  424. package/package.json +1 -1
  425. package/scripts/setup.js +7 -5
  426. package/_standalone/.next/server/chunks/3436.js +0 -52
  427. package/_standalone/.next/server/chunks/5648.js +0 -2
  428. package/_standalone/.next/server/chunks/8408.js +0 -219
  429. package/_standalone/.next/static/W-wLgvhPtPJ5Psq9V4i3M/_buildManifest.js +0 -1
  430. package/_standalone/.next/static/chunks/1053-17786066ecd6f216.js +0 -29
  431. package/_standalone/.next/static/chunks/1814.72f7fe7c61e2b647.js +0 -1
  432. package/_standalone/.next/static/chunks/362.4c226d7887d5f696.js +0 -1
  433. package/_standalone/.next/static/chunks/6357-c645842834c0d4cd.js +0 -1
  434. package/_standalone/.next/static/chunks/6981-3d7dcac2d12a5670.js +0 -1
  435. package/_standalone/.next/static/chunks/7035-032641fb6f4e07b2.js +0 -1
  436. package/_standalone/.next/static/chunks/7144-5febf62f1a79fe64.js +0 -1
  437. package/_standalone/.next/static/chunks/9602-423291fdb36396d1.js +0 -1
  438. package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-074d6aafc2606561.js +0 -1
  439. package/_standalone/.next/static/chunks/app/agents/page-710d8c80fa86e93e.js +0 -5
  440. package/_standalone/.next/static/chunks/app/api/a2a/discover/route-b07a5983e85bc5e3.js +0 -1
  441. package/_standalone/.next/static/chunks/app/api/a2a/route-b07a5983e85bc5e3.js +0 -1
  442. package/_standalone/.next/static/chunks/app/api/acp/config/route-b07a5983e85bc5e3.js +0 -1
  443. package/_standalone/.next/static/chunks/app/api/acp/detect/route-b07a5983e85bc5e3.js +0 -1
  444. package/_standalone/.next/static/chunks/app/api/acp/install/route-b07a5983e85bc5e3.js +0 -1
  445. package/_standalone/.next/static/chunks/app/api/acp/registry/route-b07a5983e85bc5e3.js +0 -1
  446. package/_standalone/.next/static/chunks/app/api/acp/session/route-b07a5983e85bc5e3.js +0 -1
  447. package/_standalone/.next/static/chunks/app/api/agent-activity/route-b07a5983e85bc5e3.js +0 -1
  448. package/_standalone/.next/static/chunks/app/api/ask/route-b07a5983e85bc5e3.js +0 -1
  449. package/_standalone/.next/static/chunks/app/api/ask-sessions/route-b07a5983e85bc5e3.js +0 -1
  450. package/_standalone/.next/static/chunks/app/api/auth/route-b07a5983e85bc5e3.js +0 -1
  451. package/_standalone/.next/static/chunks/app/api/backlinks/route-b07a5983e85bc5e3.js +0 -1
  452. package/_standalone/.next/static/chunks/app/api/bootstrap/route-b07a5983e85bc5e3.js +0 -1
  453. package/_standalone/.next/static/chunks/app/api/changes/route-b07a5983e85bc5e3.js +0 -1
  454. package/_standalone/.next/static/chunks/app/api/export/route-b07a5983e85bc5e3.js +0 -1
  455. package/_standalone/.next/static/chunks/app/api/extract-pdf/route-b07a5983e85bc5e3.js +0 -1
  456. package/_standalone/.next/static/chunks/app/api/file/import/route-b07a5983e85bc5e3.js +0 -1
  457. package/_standalone/.next/static/chunks/app/api/file/route-b07a5983e85bc5e3.js +0 -1
  458. package/_standalone/.next/static/chunks/app/api/files/route-b07a5983e85bc5e3.js +0 -1
  459. package/_standalone/.next/static/chunks/app/api/git/route-b07a5983e85bc5e3.js +0 -1
  460. package/_standalone/.next/static/chunks/app/api/graph/route-b07a5983e85bc5e3.js +0 -1
  461. package/_standalone/.next/static/chunks/app/api/health/route-b07a5983e85bc5e3.js +0 -1
  462. package/_standalone/.next/static/chunks/app/api/inbox/route-b07a5983e85bc5e3.js +0 -1
  463. package/_standalone/.next/static/chunks/app/api/init/route-b07a5983e85bc5e3.js +0 -1
  464. package/_standalone/.next/static/chunks/app/api/mcp/agents/route-b07a5983e85bc5e3.js +0 -1
  465. package/_standalone/.next/static/chunks/app/api/mcp/install/route-b07a5983e85bc5e3.js +0 -1
  466. package/_standalone/.next/static/chunks/app/api/mcp/install-skill/route-b07a5983e85bc5e3.js +0 -1
  467. package/_standalone/.next/static/chunks/app/api/mcp/restart/route-b07a5983e85bc5e3.js +0 -1
  468. package/_standalone/.next/static/chunks/app/api/mcp/status/route-b07a5983e85bc5e3.js +0 -1
  469. package/_standalone/.next/static/chunks/app/api/mcp/uninstall/route-b07a5983e85bc5e3.js +0 -1
  470. package/_standalone/.next/static/chunks/app/api/monitoring/route-b07a5983e85bc5e3.js +0 -1
  471. package/_standalone/.next/static/chunks/app/api/recent-files/route-b07a5983e85bc5e3.js +0 -1
  472. package/_standalone/.next/static/chunks/app/api/restart/route-b07a5983e85bc5e3.js +0 -1
  473. package/_standalone/.next/static/chunks/app/api/search/route-b07a5983e85bc5e3.js +0 -1
  474. package/_standalone/.next/static/chunks/app/api/settings/list-models/route-b07a5983e85bc5e3.js +0 -1
  475. package/_standalone/.next/static/chunks/app/api/settings/reset-token/route-b07a5983e85bc5e3.js +0 -1
  476. package/_standalone/.next/static/chunks/app/api/settings/route-b07a5983e85bc5e3.js +0 -1
  477. package/_standalone/.next/static/chunks/app/api/settings/test-key/route-b07a5983e85bc5e3.js +0 -1
  478. package/_standalone/.next/static/chunks/app/api/setup/check-path/route-b07a5983e85bc5e3.js +0 -1
  479. package/_standalone/.next/static/chunks/app/api/setup/check-port/route-b07a5983e85bc5e3.js +0 -1
  480. package/_standalone/.next/static/chunks/app/api/setup/generate-token/route-b07a5983e85bc5e3.js +0 -1
  481. package/_standalone/.next/static/chunks/app/api/setup/ls/route-b07a5983e85bc5e3.js +0 -1
  482. package/_standalone/.next/static/chunks/app/api/setup/route-b07a5983e85bc5e3.js +0 -1
  483. package/_standalone/.next/static/chunks/app/api/skills/route-b07a5983e85bc5e3.js +0 -1
  484. package/_standalone/.next/static/chunks/app/api/sync/route-b07a5983e85bc5e3.js +0 -1
  485. package/_standalone/.next/static/chunks/app/api/tree-version/route-b07a5983e85bc5e3.js +0 -1
  486. package/_standalone/.next/static/chunks/app/api/uninstall/route-b07a5983e85bc5e3.js +0 -1
  487. package/_standalone/.next/static/chunks/app/api/update/route-b07a5983e85bc5e3.js +0 -1
  488. package/_standalone/.next/static/chunks/app/api/update-check/route-b07a5983e85bc5e3.js +0 -1
  489. package/_standalone/.next/static/chunks/app/api/update-status/route-b07a5983e85bc5e3.js +0 -1
  490. package/_standalone/.next/static/chunks/app/api/workflows/route-b07a5983e85bc5e3.js +0 -1
  491. package/_standalone/.next/static/chunks/app/changes/page-350992cf5091bc5b.js +0 -1
  492. package/_standalone/.next/static/chunks/app/echo/page-b07a5983e85bc5e3.js +0 -1
  493. package/_standalone/.next/static/chunks/app/global-error-e1ad0e18236ba26c.js +0 -1
  494. package/_standalone/.next/static/chunks/app/help/page-2325d25b6846ca07.js +0 -1
  495. package/_standalone/.next/static/chunks/app/layout-e5d2fb384207d821.js +0 -186
  496. package/_standalone/.next/static/chunks/app/loading-b07a5983e85bc5e3.js +0 -1
  497. package/_standalone/.next/static/chunks/app/page-54edd045d3448df5.js +0 -7
  498. package/_standalone/.next/static/chunks/app/trash/page-6372bb3f5463affa.js +0 -1
  499. package/_standalone/.next/static/chunks/app/view/[...path]/loading-b07a5983e85bc5e3.js +0 -1
  500. package/_standalone/.next/static/chunks/app/view/[...path]/not-found-61474670d6bb6116.js +0 -1
  501. package/_standalone/.next/static/chunks/app/view/[...path]/page-f3d1d87190dcfe28.js +0 -12
  502. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-b07a5983e85bc5e3.js +0 -1
  503. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-b07a5983e85bc5e3.js +0 -1
  504. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-b07a5983e85bc5e3.js +0 -1
  505. package/_standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-b07a5983e85bc5e3.js +0 -1
  506. package/_standalone/.next/static/css/bbf51803eade6c50.css +0 -31
  507. package/_standalone/.next/static/css/ef1151f74f00d91a.css +0 -1
  508. /package/_standalone/.next/static/{W-wLgvhPtPJ5Psq9V4i3M → 2hrwFOLEOZhHQHfrIt-Dw}/_ssgManifest.js +0 -0
@@ -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) {
@@ -53,6 +53,11 @@ export interface ServerSettings {
53
53
  acpAgents?: Record<string, import('./acp/agent-descriptors').AcpAgentOverride>;
54
54
  /** Proxy compatibility cache: keyed by baseUrl, value is detected mode. */
55
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
+ };
56
61
  }
57
62
 
58
63
  const DEFAULTS: ServerSettings = {
@@ -164,6 +169,26 @@ function parseGuideState(raw: unknown): GuideState | undefined {
164
169
  };
165
170
  }
166
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
+
167
192
  export function readSettings(): ServerSettings {
168
193
  try {
169
194
  const raw = fs.readFileSync(SETTINGS_PATH, 'utf-8');
@@ -190,6 +215,7 @@ export function readSettings(): ServerSettings {
190
215
  }
191
216
  return Object.keys(result).length > 0 ? result : undefined;
192
217
  })(),
218
+ connectionMode: inferConnectionMode(parsed),
193
219
  };
194
220
  } catch {
195
221
  // Config file missing or corrupt → force setup wizard
@@ -197,6 +223,7 @@ export function readSettings(): ServerSettings {
197
223
  ...DEFAULTS,
198
224
  ai: { ...DEFAULTS.ai, providers: { ...DEFAULTS.ai.providers } },
199
225
  setupPending: true,
226
+ connectionMode: { cli: true, mcp: false },
200
227
  };
201
228
  }
202
229
  }
@@ -218,6 +245,7 @@ export function writeSettings(settings: ServerSettings): void {
218
245
  if (settings.guideState !== undefined) merged.guideState = settings.guideState;
219
246
  if (settings.acpAgents !== undefined) merged.acpAgents = settings.acpAgents;
220
247
  if (settings.baseUrlCompat !== undefined) merged.baseUrlCompat = settings.baseUrlCompat;
248
+ if (settings.connectionMode !== undefined) merged.connectionMode = settings.connectionMode;
221
249
  // setupPending: false/undefined → remove the field (cleanup); true → set it
222
250
  if ('setupPending' in settings) {
223
251
  if (settings.setupPending) merged.setupPending = true;
@@ -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)}`));
@@ -7,7 +7,7 @@
7
7
  */
8
8
 
9
9
  import { existsSync, readdirSync, statSync, mkdirSync, writeFileSync, rmSync, renameSync } from 'node:fs';
10
- import { resolve, basename } from 'node:path';
10
+ import { resolve, basename, relative, sep } from 'node:path';
11
11
  import { bold, dim, cyan, green, red, yellow } from '../lib/colors.js';
12
12
  import { loadConfig } from '../lib/config.js';
13
13
  import { output, isJsonMode, EXIT } from '../lib/command.js';
@@ -93,9 +93,12 @@ function countFiles(dir) {
93
93
 
94
94
  function resolvePath(root, relPath) {
95
95
  const full = relPath ? resolve(root, relPath) : root;
96
- if (full !== root && !full.startsWith(root + '/')) {
97
- console.error(red(`Access denied: path outside knowledge base`));
98
- process.exit(EXIT.ERROR);
96
+ if (full !== root) {
97
+ const rel = relative(root, full);
98
+ if (rel === '..' || rel.startsWith(`..${sep}`) || rel.startsWith('../')) {
99
+ console.error(red(`Access denied: path outside knowledge base`));
100
+ process.exit(EXIT.ERROR);
101
+ }
99
102
  }
100
103
  if (!existsSync(full)) {
101
104
  console.error(red(`Not found: ${relPath || '(root)'}`));
@@ -5,7 +5,7 @@
5
5
  */
6
6
 
7
7
  import { execSync, spawn as nodeSpawn } from 'node:child_process';
8
- import { existsSync, readFileSync, writeFileSync, rmSync } from 'node:fs';
8
+ import { existsSync, readFileSync, writeFileSync, rmSync, realpathSync } from 'node:fs';
9
9
  import { dirname, resolve } from 'node:path';
10
10
 
11
11
  import { ROOT, BUILD_STAMP, CONFIG_PATH, LOG_PATH } from '../lib/constants.js';
@@ -16,6 +16,7 @@ import { stopMindos } from '../lib/stop.js';
16
16
  import { getLocalIP } from '../lib/startup.js';
17
17
  import { isPortInUse } from '../lib/port.js';
18
18
  import { cleanEnvForRestart } from '../lib/clean-env.js';
19
+ import { stripBom } from '../lib/jsonc.js';
19
20
 
20
21
  /**
21
22
  * Dynamically resolve the new ROOT after `npm install -g`.
@@ -23,27 +24,16 @@ import { cleanEnvForRestart } from '../lib/clean-env.js';
23
24
  */
24
25
  function getUpdatedRoot() {
25
26
  try {
26
- const mindosBin = execSync('which mindos', { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'ignore'] }).trim();
27
+ const whichCmd = process.platform === 'win32' ? 'where mindos' : 'which mindos';
28
+ const mindosBin = execSync(whichCmd, { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'ignore'] }).trim().split(/\r?\n/)[0];
27
29
  if (mindosBin) {
28
- // mindos bin is usually at <root>/bin/cli.js or a symlink to it
29
30
  let cliPath;
30
- try {
31
- cliPath = execSync(`readlink -f "${mindosBin}"`, { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'ignore'] }).trim();
32
- } catch {
33
- try {
34
- cliPath = execSync(`realpath "${mindosBin}"`, { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'ignore'] }).trim();
35
- } catch {
36
- cliPath = mindosBin;
37
- }
38
- }
31
+ try { cliPath = realpathSync(mindosBin); } catch { cliPath = mindosBin; }
39
32
  if (cliPath) {
40
- // cliPath is like /path/to/node_modules/@geminilight/mindos/bin/cli.js
41
- // ROOT is /path/to/node_modules/@geminilight/mindos
42
33
  return resolve(dirname(cliPath), '..');
43
34
  }
44
35
  }
45
36
  } catch {}
46
- // Fallback to static ROOT
47
37
  return ROOT;
48
38
  }
49
39
 
@@ -85,7 +75,7 @@ function buildIfNeeded(newRoot) {
85
75
  }
86
76
  const nextDir = resolve(newRoot, 'app', '.next');
87
77
  if (existsSync(nextDir)) {
88
- execInherited(`rm -rf "${nextDir}"`, newRoot);
78
+ rmSync(nextDir, { recursive: true, force: true });
89
79
  }
90
80
  execInherited('node scripts/gen-renderer-index.js', newRoot);
91
81
  execInherited(`${newNextBin} build`, resolve(newRoot, 'app'));
@@ -176,7 +166,7 @@ export const run = async () => {
176
166
  writeUpdateStatus('restarting', vOpts);
177
167
  await gateway.runGatewayCommand('install');
178
168
  const updateConfig = (() => {
179
- try { return JSON.parse(readFileSync(CONFIG_PATH, 'utf-8')); } catch { return {}; }
169
+ try { return JSON.parse(stripBom(readFileSync(CONFIG_PATH, 'utf-8'))); } catch { return {}; }
180
170
  })();
181
171
  const webPort = updateConfig.port ?? 3456;
182
172
  const mcpPort = updateConfig.mcpPort ?? 8781;
@@ -205,7 +195,7 @@ export const run = async () => {
205
195
  // (e.g. user started via `mindos start`, or GUI triggered this update).
206
196
  // If so, stop it and restart from the NEW installation path.
207
197
  const updateConfig = (() => {
208
- try { return JSON.parse(readFileSync(CONFIG_PATH, 'utf-8')); } catch { return {}; }
198
+ try { return JSON.parse(stripBom(readFileSync(CONFIG_PATH, 'utf-8'))); } catch { return {}; }
209
199
  })();
210
200
  const webPort = Number(updateConfig.port ?? 3456);
211
201
  const mcpPort = Number(updateConfig.mcpPort ?? 8781);
package/bin/lib/build.js CHANGED
@@ -118,13 +118,19 @@ export function ensureAppDeps({ force = false } = {}) {
118
118
  } catch {
119
119
  console.error(red('\n\u2718 npm not found in PATH.\n'));
120
120
  console.error(' MindOS needs npm to install its app dependencies on first run.');
121
- console.error(' This usually means Node.js is installed via a version manager (nvm, fnm, volta, etc.)');
122
- console.error(' that only loads in interactive shells, but not in /bin/sh.\n');
123
- console.error(' Fix: add your Node.js bin directory to a profile that /bin/sh reads (~/.profile).');
124
- console.error(' Example:');
125
- console.error(dim(' echo \'export PATH="$HOME/.nvm/versions/node/$(node --version)/bin:$PATH"\' >> ~/.profile'));
126
- console.error(dim(' source ~/.profile\n'));
127
- console.error(' Then run `mindos start` again.\n');
121
+ if (process.platform === 'win32') {
122
+ console.error(' Ensure Node.js is installed and added to your system PATH.\n');
123
+ console.error(' Fix: reinstall Node.js from https://nodejs.org (the installer adds it to PATH).');
124
+ console.error(' Then open a new terminal and run `mindos start` again.\n');
125
+ } else {
126
+ console.error(' This usually means Node.js is installed via a version manager (nvm, fnm, volta, etc.)');
127
+ console.error(' that only loads in interactive shells, but not in /bin/sh.\n');
128
+ console.error(' Fix: add your Node.js bin directory to a profile that /bin/sh reads (~/.profile).');
129
+ console.error(' Example:');
130
+ console.error(dim(' echo \'export PATH="$HOME/.nvm/versions/node/$(node --version)/bin:$PATH"\' >> ~/.profile'));
131
+ console.error(dim(' source ~/.profile\n'));
132
+ console.error(' Then run `mindos start` again.\n');
133
+ }
128
134
  process.exit(1);
129
135
  }
130
136
 
@@ -142,7 +148,12 @@ export function ensureAppDeps({ force = false } = {}) {
142
148
  run('npm install --no-workspaces', resolve(ROOT, 'app'));
143
149
  if (!verifyDeps()) {
144
150
  console.error(red('\n✘ Failed to install dependencies after retry.\n'));
145
- console.error(' Try manually: cd ' + resolve(ROOT, 'app') + ' && rm -rf node_modules && npm install');
151
+ const appDir = resolve(ROOT, 'app');
152
+ if (process.platform === 'win32') {
153
+ console.error(` Try manually: cd "${appDir}" && rmdir /s /q node_modules && npm install`);
154
+ } else {
155
+ console.error(` Try manually: cd ${appDir} && rm -rf node_modules && npm install`);
156
+ }
146
157
  process.exit(1);
147
158
  }
148
159
  }