@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
@@ -66,6 +66,65 @@ exit 127
66
66
  try { chmodSync(shimPath(), 0o755); } catch { /* ignore */ }
67
67
  }
68
68
 
69
+ function writeWindowsShim(cliJs) {
70
+ const script = `@echo off\r
71
+ rem Generated by MindOS CLI — overwritten on each mindos start.\r
72
+ setlocal\r
73
+ set "CLI=${cliJs}"\r
74
+ if not exist "%CLI%" (\r
75
+ for /f "delims=" %%R in ('npm root -g 2^>nul') do set "NPM_CLI=%%R\\@geminilight\\mindos\\bin\\cli.js"\r
76
+ if defined NPM_CLI if exist "%NPM_CLI%" set "CLI=%NPM_CLI%"\r
77
+ )\r
78
+ if not exist "%CLI%" (\r
79
+ echo mindos: CLI not found. Reinstall: npm install -g @geminilight/mindos >&2\r
80
+ exit /b 127\r
81
+ )\r
82
+ set "MINDOS_NODE=%USERPROFILE%\\.mindos\\node\\node.exe"\r
83
+ if exist "%MINDOS_NODE%" (\r
84
+ "%MINDOS_NODE%" "%CLI%" %*\r
85
+ exit /b %ERRORLEVEL%\r
86
+ )\r
87
+ where node >nul 2>nul\r
88
+ if %ERRORLEVEL% equ 0 (\r
89
+ node "%CLI%" %*\r
90
+ exit /b %ERRORLEVEL%\r
91
+ )\r
92
+ echo mindos: Node.js not found. Install Node 18+ or run MindOS Desktop. >&2\r
93
+ exit /b 127\r
94
+ `;
95
+ mkdirSync(shimDir(), { recursive: true });
96
+ writeFileSync(shimPath(), script, 'utf-8');
97
+ }
98
+
99
+ /**
100
+ * On Windows, add ~/.mindos/bin to user PATH via PowerShell profile (idempotent).
101
+ * Falls back gracefully if PowerShell is not available.
102
+ */
103
+ function appendPathWindows() {
104
+ const binDir = shimDir();
105
+ const dirs = (process.env.PATH || '').split(';');
106
+ if (dirs.some(d => d === binDir)) return false;
107
+
108
+ // Write a PowerShell profile snippet
109
+ try {
110
+ const psProfileDir = resolve(home, 'Documents', 'WindowsPowerShell');
111
+ mkdirSync(psProfileDir, { recursive: true });
112
+ const psProfile = resolve(psProfileDir, 'Microsoft.PowerShell_profile.ps1');
113
+ const psBlock = `\n${SHELL_MARKER}\n$env:PATH = "$env:USERPROFILE\\.mindos\\bin;$env:PATH"\n`;
114
+
115
+ let needsWrite = !existsSync(psProfile);
116
+ if (!needsWrite) {
117
+ const content = readFileSync(psProfile, 'utf-8');
118
+ needsWrite = !content.includes(SHELL_MARKER) && !content.includes('.mindos\\bin');
119
+ }
120
+ if (needsWrite) {
121
+ appendFileSync(psProfile, psBlock, 'utf-8');
122
+ return true;
123
+ }
124
+ } catch { /* best effort */ }
125
+ return false;
126
+ }
127
+
69
128
  /**
70
129
  * Append ~/.mindos/bin to PATH in relevant shell rc files (idempotent).
71
130
  * AI Agents run commands via non-interactive shells:
@@ -74,7 +133,9 @@ exit 127
74
133
  * - Fish reads ~/.config/fish/conf.d/*.fish always
75
134
  */
76
135
  function appendPathToShellRc() {
77
- if (platform() === 'win32') return false;
136
+ if (platform() === 'win32') {
137
+ return appendPathWindows();
138
+ }
78
139
 
79
140
  const block = `\n${SHELL_MARKER}\nexport PATH="$HOME/.mindos/bin:$PATH"\n`;
80
141
 
@@ -144,7 +205,11 @@ function appendPathToShellRc() {
144
205
  */
145
206
  export function ensureCliShim() {
146
207
  try {
147
- writeUnixShim(CLI_PATH);
208
+ if (platform() === 'win32') {
209
+ writeWindowsShim(CLI_PATH);
210
+ } else {
211
+ writeUnixShim(CLI_PATH);
212
+ }
148
213
  } catch (e) {
149
214
  console.warn('[MindOS] Failed to write CLI shim:', e instanceof Error ? e.message : e);
150
215
  return false;
package/bin/lib/config.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { existsSync, readFileSync } from 'node:fs';
2
2
  import { CONFIG_PATH } from './constants.js';
3
+ import { stripBom } from './jsonc.js';
3
4
 
4
5
  let loaded = false;
5
6
 
@@ -9,7 +10,7 @@ export function loadConfig() {
9
10
  if (!existsSync(CONFIG_PATH)) return;
10
11
  let config;
11
12
  try {
12
- config = JSON.parse(readFileSync(CONFIG_PATH, 'utf-8'));
13
+ config = JSON.parse(stripBom(readFileSync(CONFIG_PATH, 'utf-8')));
13
14
  } catch {
14
15
  console.error(`Warning: failed to parse ${CONFIG_PATH}`);
15
16
  return;
@@ -49,9 +50,7 @@ export function loadConfig() {
49
50
 
50
51
  export function getStartMode() {
51
52
  try {
52
- const mode = JSON.parse(readFileSync(CONFIG_PATH, 'utf-8')).startMode || 'start';
53
- // 'daemon' is stored in config when user chose background service;
54
- // CLI maps it to the 'start' command with --daemon flag
53
+ const mode = JSON.parse(stripBom(readFileSync(CONFIG_PATH, 'utf-8'))).startMode || 'start';
55
54
  return mode === 'daemon' ? 'start' : mode;
56
55
  } catch {
57
56
  return 'start';
@@ -60,7 +59,7 @@ export function getStartMode() {
60
59
 
61
60
  export function isDaemonMode() {
62
61
  try {
63
- return JSON.parse(readFileSync(CONFIG_PATH, 'utf-8')).startMode === 'daemon';
62
+ return JSON.parse(stripBom(readFileSync(CONFIG_PATH, 'utf-8'))).startMode === 'daemon';
64
63
  } catch {
65
64
  return false;
66
65
  }
@@ -1,10 +1,11 @@
1
1
  import { execSync } from 'node:child_process';
2
- import { existsSync, readFileSync, writeFileSync, rmSync, mkdirSync, statSync, renameSync, unlinkSync, openSync, readSync, closeSync } from 'node:fs';
2
+ import { existsSync, readFileSync, writeFileSync, rmSync, mkdirSync, statSync, renameSync, unlinkSync, openSync, readSync, closeSync, realpathSync } from 'node:fs';
3
3
  import { resolve, dirname } from 'node:path';
4
4
  import { homedir } from 'node:os';
5
5
  import { MINDOS_DIR, LOG_PATH, CLI_PATH, NODE_BIN, CONFIG_PATH } from './constants.js';
6
6
  import { green, red, dim, cyan, yellow } from './colors.js';
7
7
  import { isPortInUse } from './port.js';
8
+ import { stripBom } from './jsonc.js';
8
9
 
9
10
  // ── Helpers ──────────────────────────────────────────────────────────────────
10
11
 
@@ -15,31 +16,17 @@ import { isPortInUse } from './port.js';
15
16
  */
16
17
  function getCurrentCliPath() {
17
18
  try {
18
- // Try to find mindos in PATH
19
- const mindosBin = execSync('which mindos', { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'ignore'] }).trim();
19
+ const whichCmd = process.platform === 'win32' ? 'where mindos' : 'which mindos';
20
+ // `where` on Windows can return multiple lines; take the first match
21
+ const mindosBin = execSync(whichCmd, { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'ignore'] }).trim().split(/\r?\n/)[0];
20
22
  if (mindosBin) {
21
- // mindos is usually a symlink, resolve it
22
23
  try {
23
- const realPath = execSync(`readlink -f "${mindosBin}"`, { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'ignore'] }).trim();
24
- if (realPath && existsSync(realPath)) {
25
- return realPath;
26
- }
27
- } catch {
28
- // readlink -f not available on macOS, fallback to realpath
29
- try {
30
- const realPath = execSync(`realpath "${mindosBin}"`, { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'ignore'] }).trim();
31
- if (realPath && existsSync(realPath)) {
32
- return realPath;
33
- }
34
- } catch {}
35
- }
36
- // Fallback: use the symlink target itself
37
- if (existsSync(mindosBin)) {
38
- return mindosBin;
39
- }
24
+ const realPath = realpathSync(mindosBin);
25
+ if (existsSync(realPath)) return realPath;
26
+ } catch {}
27
+ if (existsSync(mindosBin)) return mindosBin;
40
28
  }
41
29
  } catch {}
42
- // Fallback to static CLI_PATH if dynamic resolution fails
43
30
  return CLI_PATH;
44
31
  }
45
32
 
@@ -390,7 +377,7 @@ const launchd = {
390
377
  // Read ports before bootout so we can wait for them to be freed
391
378
  let webPort = 3456, mcpPort = 8781;
392
379
  try {
393
- const config = JSON.parse(readFileSync(CONFIG_PATH, 'utf-8'));
380
+ const config = JSON.parse(stripBom(readFileSync(CONFIG_PATH, 'utf-8')));
394
381
  if (config.port) webPort = Number(config.port);
395
382
  if (config.mcpPort) mcpPort = Number(config.mcpPort);
396
383
  } catch {}
package/bin/lib/jsonc.js CHANGED
@@ -1,11 +1,16 @@
1
1
  /**
2
- * JSONC parser — strips comments before JSON.parse.
2
+ * JSONC parser — strips BOM and comments before JSON.parse.
3
3
  *
4
4
  * VS Code-based editors (Cursor, Windsurf, Cline) use JSONC for config files.
5
+ * Windows editors (Notepad) may prepend a UTF-8 BOM (\uFEFF).
5
6
  */
6
7
 
8
+ export function stripBom(text) {
9
+ return text.charCodeAt(0) === 0xFEFF ? text.slice(1) : text;
10
+ }
11
+
7
12
  export const parseJsonc = (text) => {
8
- let stripped = text.replace(/\\"|"(?:\\"|[^"])*"|(\/\/.*$)/gm, (m, g) => g ? '' : m);
13
+ let stripped = stripBom(text).replace(/\\"|"(?:\\"|[^"])*"|(\/\/.*$)/gm, (m, g) => g ? '' : m);
9
14
  stripped = stripped.replace(/\/\*[\s\S]*?\*\//g, '');
10
15
  if (!stripped.trim()) return {};
11
16
  return JSON.parse(stripped);
@@ -9,8 +9,14 @@
9
9
 
10
10
  import { existsSync } from 'node:fs';
11
11
  import { execSync } from 'node:child_process';
12
+ import { resolve } from 'node:path';
12
13
  import { expandHome } from './path-expand.js';
13
14
 
15
+ function winAppData(...segments) {
16
+ const appData = process.env.APPDATA || resolve(process.env.USERPROFILE || '', 'AppData', 'Roaming');
17
+ return resolve(appData, ...segments);
18
+ }
19
+
14
20
  export const MCP_AGENTS = {
15
21
  'claude-code': {
16
22
  name: 'Claude Code',
@@ -42,12 +48,15 @@ export const MCP_AGENTS = {
42
48
  project: null,
43
49
  global: process.platform === 'darwin'
44
50
  ? '~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json'
45
- : '~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json',
51
+ : process.platform === 'win32'
52
+ ? winAppData('Code', 'User', 'globalStorage', 'saoudrizwan.claude-dev', 'settings', 'cline_mcp_settings.json')
53
+ : '~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json',
46
54
  key: 'mcpServers',
47
55
  preferredTransport: 'stdio',
48
56
  presenceDirs: [
49
57
  '~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/',
50
58
  '~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/',
59
+ ...(process.platform === 'win32' ? [winAppData('Code', 'User', 'globalStorage', 'saoudrizwan.claude-dev')] : []),
51
60
  ],
52
61
  },
53
62
  'trae': {
@@ -153,13 +162,16 @@ export const MCP_AGENTS = {
153
162
  project: '.trae/mcp.json',
154
163
  global: process.platform === 'darwin'
155
164
  ? '~/Library/Application Support/Trae CN/User/mcp.json'
156
- : '~/.config/Trae CN/User/mcp.json',
165
+ : process.platform === 'win32'
166
+ ? winAppData('Trae CN', 'User', 'mcp.json')
167
+ : '~/.config/Trae CN/User/mcp.json',
157
168
  key: 'mcpServers',
158
169
  preferredTransport: 'stdio',
159
170
  presenceCli: 'trae-cli',
160
171
  presenceDirs: [
161
172
  '~/Library/Application Support/Trae CN/',
162
173
  '~/.config/Trae CN/',
174
+ ...(process.platform === 'win32' ? [winAppData('Trae CN')] : []),
163
175
  ],
164
176
  },
165
177
  'roo': {
@@ -167,12 +179,15 @@ export const MCP_AGENTS = {
167
179
  project: '.roo/mcp.json',
168
180
  global: process.platform === 'darwin'
169
181
  ? '~/Library/Application Support/Code/User/globalStorage/rooveterinaryinc.roo-cline/settings/mcp_settings.json'
170
- : '~/.config/Code/User/globalStorage/rooveterinaryinc.roo-cline/settings/mcp_settings.json',
182
+ : process.platform === 'win32'
183
+ ? winAppData('Code', 'User', 'globalStorage', 'rooveterinaryinc.roo-cline', 'settings', 'mcp_settings.json')
184
+ : '~/.config/Code/User/globalStorage/rooveterinaryinc.roo-cline/settings/mcp_settings.json',
171
185
  key: 'mcpServers',
172
186
  preferredTransport: 'stdio',
173
187
  presenceDirs: [
174
188
  '~/Library/Application Support/Code/User/globalStorage/rooveterinaryinc.roo-cline/',
175
189
  '~/.config/Code/User/globalStorage/rooveterinaryinc.roo-cline/',
190
+ ...(process.platform === 'win32' ? [winAppData('Code', 'User', 'globalStorage', 'rooveterinaryinc.roo-cline')] : []),
176
191
  ],
177
192
  },
178
193
  'github-copilot': {
@@ -180,12 +195,15 @@ export const MCP_AGENTS = {
180
195
  project: '.vscode/mcp.json',
181
196
  global: process.platform === 'darwin'
182
197
  ? '~/Library/Application Support/Code/User/mcp.json'
183
- : '~/.config/Code/User/mcp.json',
198
+ : process.platform === 'win32'
199
+ ? winAppData('Code', 'User', 'mcp.json')
200
+ : '~/.config/Code/User/mcp.json',
184
201
  key: 'servers',
185
202
  preferredTransport: 'stdio',
186
203
  presenceDirs: [
187
204
  '~/Library/Application Support/Code/',
188
205
  '~/.config/Code/',
206
+ ...(process.platform === 'win32' ? [winAppData('Code')] : []),
189
207
  ],
190
208
  presenceCli: 'code',
191
209
  },
@@ -239,6 +257,9 @@ export function detectAgentPresence(agentKey) {
239
257
  return true;
240
258
  } catch { /* not found */ }
241
259
  }
242
- if (agent.presenceDirs?.some(d => existsSync(expandHome(d)))) return true;
260
+ if (agent.presenceDirs?.some(d => {
261
+ // Paths from winAppData() are already absolute; expandHome only handles ~/
262
+ try { return existsSync(d.startsWith('~') ? expandHome(d) : d); } catch { return false; }
263
+ })) return true;
243
264
  return false;
244
265
  }
@@ -1,9 +1,12 @@
1
1
  /**
2
- * Path expansion — resolve `~/...` to absolute paths.
2
+ * Path expansion — resolve `~/...` or `~\...` to absolute paths.
3
3
  */
4
4
 
5
5
  import { resolve } from 'node:path';
6
6
  import { homedir } from 'node:os';
7
7
 
8
- export const expandHome = (p) =>
9
- p.startsWith('~/') ? resolve(homedir(), p.slice(2)) : p;
8
+ export const expandHome = (p) => {
9
+ if (p === '~') return homedir();
10
+ if (p.startsWith('~/') || p.startsWith('~\\')) return resolve(homedir(), p.slice(2));
11
+ return p;
12
+ };
package/bin/lib/port.js CHANGED
@@ -33,7 +33,11 @@ export async function assertPortFree(port, name) {
33
33
  if (await isPortInUse(port)) {
34
34
  console.error(`\n${red('\u2718')} ${bold(`Port ${port} is still in use after cleanup`)} ${dim(`(${name})`)}`);
35
35
  console.error(`\n ${dim('Stop MindOS:')} mindos stop`);
36
- console.error(` ${dim('Find the process:')} lsof -i :${port}\n`);
36
+ if (process.platform === 'win32') {
37
+ console.error(` ${dim('Find the process:')} netstat -ano | findstr :${port}\n`);
38
+ } else {
39
+ console.error(` ${dim('Find the process:')} lsof -i :${port}\n`);
40
+ }
37
41
  process.exit(1);
38
42
  }
39
43
  console.log(` ${dim('Cleaned up orphaned processes on port')} ${port}`);
package/bin/lib/stop.js CHANGED
@@ -3,78 +3,93 @@ import { readFileSync } from 'node:fs';
3
3
  import { green, yellow, dim } from './colors.js';
4
4
  import { loadPids, clearPids } from './pid.js';
5
5
  import { CONFIG_PATH } from './constants.js';
6
+ import { stripBom } from './jsonc.js';
7
+
8
+ const isWin = process.platform === 'win32';
6
9
 
7
10
  /**
8
11
  * Portable synchronous sleep using SharedArrayBuffer + Atomics.wait.
9
- * Falls back to execSync('sleep N') on platforms without SharedArrayBuffer.
12
+ * Falls back to a busy-wait loop on platforms without SharedArrayBuffer.
10
13
  */
11
14
  function syncSleep(ms) {
12
15
  try {
13
16
  const sab = new SharedArrayBuffer(4);
14
17
  Atomics.wait(new Int32Array(sab), 0, 0, ms);
15
18
  } catch {
16
- try { execSync(`sleep ${Math.ceil(ms / 1000)}`, { stdio: 'ignore' }); } catch {}
19
+ // Busy-wait fallback only used when SharedArrayBuffer is unavailable
20
+ const end = Date.now() + ms;
21
+ while (Date.now() < end) { /* spin */ }
17
22
  }
18
23
  }
19
24
 
20
25
  /**
21
26
  * Kill processes listening on the given port.
22
- * Tries lsof first, then falls back to parsing `ss` output.
27
+ * Uses platform-appropriate tools: lsof/ss on Unix, netstat on Windows.
23
28
  * Returns number of processes killed.
24
29
  */
25
30
  export function killByPort(port) {
26
31
  const pidsToKill = new Set();
27
32
 
28
- // Method 1: lsof
29
- try {
30
- const output = execSync(`lsof -ti :${port} 2>/dev/null`, { encoding: 'utf-8' }).trim();
31
- if (output) {
32
- for (const p of output.split('\n')) {
33
- const pid = Number(p);
33
+ if (isWin) {
34
+ // Windows: parse `netstat -ano` output for LISTENING on the target port
35
+ try {
36
+ const output = execSync(`netstat -ano`, { encoding: 'utf-8' });
37
+ for (const line of output.split('\r\n')) {
38
+ if (!line.includes(`:${port} `) && !line.includes(`:${port}\t`)) continue;
39
+ if (!/LISTENING/i.test(line)) continue;
40
+ const parts = line.trim().split(/\s+/);
41
+ const pid = Number(parts[parts.length - 1]);
34
42
  if (pid > 0) pidsToKill.add(pid);
35
43
  }
36
- }
37
- } catch {
38
- // lsof not available or no processes found
39
- }
40
-
41
- // Method 2: ss -tlnp (fallback — works when lsof can't see the process)
42
- if (pidsToKill.size === 0) {
44
+ } catch { /* netstat unavailable */ }
45
+ } else {
46
+ // Unix Method 1: lsof
43
47
  try {
44
- const output = execSync(`ss -tlnp 2>/dev/null`, { encoding: 'utf-8' });
45
- // Match lines like: LISTEN ... *:3003 ... users:(("next-server",pid=12345,fd=21))
46
- // Match `:PORT` followed by a non-digit to avoid partial matches
47
- // (e.g. port 80 must not match :8080)
48
- const portRe = new RegExp(`:${port}(?!\\d)`);
49
- for (const line of output.split('\n')) {
50
- if (!portRe.test(line)) continue;
51
- const pidMatch = line.match(/pid=(\d+)/g);
52
- if (pidMatch) {
53
- for (const m of pidMatch) {
54
- const pid = Number(m.slice(4));
55
- if (pid > 0) pidsToKill.add(pid);
56
- }
48
+ const output = execSync(`lsof -ti :${port} 2>/dev/null`, { encoding: 'utf-8' }).trim();
49
+ if (output) {
50
+ for (const p of output.split('\n')) {
51
+ const pid = Number(p);
52
+ if (pid > 0) pidsToKill.add(pid);
57
53
  }
58
54
  }
59
- } catch {
60
- // ss not available
55
+ } catch { /* lsof not available */ }
56
+
57
+ // Unix Method 2: ss -tlnp (fallback)
58
+ if (pidsToKill.size === 0) {
59
+ try {
60
+ const output = execSync(`ss -tlnp 2>/dev/null`, { encoding: 'utf-8' });
61
+ const portRe = new RegExp(`:${port}(?!\\d)`);
62
+ for (const line of output.split('\n')) {
63
+ if (!portRe.test(line)) continue;
64
+ const pidMatch = line.match(/pid=(\d+)/g);
65
+ if (pidMatch) {
66
+ for (const m of pidMatch) {
67
+ const pid = Number(m.slice(4));
68
+ if (pid > 0) pidsToKill.add(pid);
69
+ }
70
+ }
71
+ }
72
+ } catch { /* ss not available */ }
61
73
  }
62
74
  }
63
75
 
64
76
  let killed = 0;
65
- for (const pid of pidsToKill) {
66
- try { process.kill(pid, 'SIGTERM'); killed++; } catch {}
67
- }
68
-
69
- // SIGKILL fallback: if processes survive SIGTERM, force-kill after 2s.
70
- // Next.js workers can ignore SIGTERM during request handling.
71
- if (killed > 0) {
72
- syncSleep(2000);
77
+ if (isWin) {
73
78
  for (const pid of pidsToKill) {
74
- try {
75
- process.kill(pid, 0); // check if still alive
76
- process.kill(pid, 'SIGKILL'); // force kill
77
- } catch { /* already dead, good */ }
79
+ try { execSync(`taskkill /PID ${pid} /T /F`, { stdio: 'ignore' }); killed++; } catch {}
80
+ }
81
+ } else {
82
+ for (const pid of pidsToKill) {
83
+ try { process.kill(pid, 'SIGTERM'); killed++; } catch {}
84
+ }
85
+ if (killed > 0) {
86
+ syncSleep(2000);
87
+ for (const pid of pidsToKill) {
88
+ try {
89
+ process.kill(pid, 0);
90
+ process.kill(pid, 'SIGKILL');
91
+ } catch { /* already dead */ }
92
+ }
78
93
  }
79
94
  }
80
95
 
@@ -83,14 +98,17 @@ export function killByPort(port) {
83
98
 
84
99
  /**
85
100
  * Kill a process and all its children (process group).
101
+ * On Windows, uses taskkill /T for tree kill; on Unix, uses negative PID.
86
102
  */
87
103
  function killTree(pid) {
88
- // Try to kill the entire process group first
104
+ if (isWin) {
105
+ try { execSync(`taskkill /PID ${pid} /T /F`, { stdio: 'ignore' }); } catch {}
106
+ return true;
107
+ }
108
+
89
109
  try { process.kill(-pid, 'SIGTERM'); } catch {}
90
- // Also kill individual process
91
110
  try { process.kill(pid, 'SIGTERM'); } catch {}
92
111
 
93
- // Wait briefly then SIGKILL if still alive
94
112
  syncSleep(2000);
95
113
 
96
114
  let alive = false;
@@ -120,7 +138,7 @@ export function stopMindos(opts = {}) {
120
138
  // Read ports from config for port-based cleanup
121
139
  let webPort = '3456', mcpPort = '8781', setupPort = null;
122
140
  try {
123
- const config = JSON.parse(readFileSync(CONFIG_PATH, 'utf-8'));
141
+ const config = JSON.parse(stripBom(readFileSync(CONFIG_PATH, 'utf-8')));
124
142
  if (config.port) webPort = String(config.port);
125
143
  if (config.mcpPort) mcpPort = String(config.mcpPort);
126
144
  // Temporary port used by GUI setup — may still have a zombie process
@@ -155,11 +173,14 @@ export function stopMindos(opts = {}) {
155
173
  }
156
174
 
157
175
  if (!pids.length && portKilled === 0) {
158
- // Last resort: pattern match (for envs without lsof)
159
- // Skip in test environment to avoid killing unrelated dev servers
176
+ // Last resort: pattern match (for envs without lsof/netstat)
160
177
  if (process.env.NODE_ENV !== 'test') {
161
- try { execSync('pkill -f "next start|next dev" 2>/dev/null || true', { stdio: ['ignore', 'inherit', 'inherit'] }); } catch {}
162
- try { execSync('pkill -f "mcp/(src/index|dist/index)" 2>/dev/null || true', { stdio: ['ignore', 'inherit', 'inherit'] }); } catch {}
178
+ if (isWin) {
179
+ try { execSync('taskkill /FI "IMAGENAME eq node.exe" /F', { stdio: 'ignore' }); } catch {}
180
+ } else {
181
+ try { execSync('pkill -f "next start|next dev" 2>/dev/null || true', { stdio: ['ignore', 'inherit', 'inherit'] }); } catch {}
182
+ try { execSync('pkill -f "mcp/(src/index|dist/index)" 2>/dev/null || true', { stdio: ['ignore', 'inherit', 'inherit'] }); } catch {}
183
+ }
163
184
  }
164
185
  }
165
186
 
package/bin/lib/sync.js CHANGED
@@ -470,7 +470,7 @@ export async function startSyncDaemon(mindRoot) {
470
470
  if (shutdownInProgress) return;
471
471
  shutdownInProgress = true;
472
472
  if (commitTimer) { clearTimeout(commitTimer); commitTimer = null; }
473
- try { autoCommitAndPush(mindRoot); } catch {}
473
+ try { autoCommitAndPush(mindRoot, isSshUrl); } catch {}
474
474
  stopSyncDaemon();
475
475
  };
476
476
  process.on('SIGTERM', gracefulShutdown);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geminilight/mindos",
3
- "version": "0.6.53",
3
+ "version": "0.6.54",
4
4
  "description": "MindOS — Human-Agent Collaborative Mind System. Local-first knowledge base that syncs your mind to all AI Agents via MCP.",
5
5
  "keywords": [
6
6
  "mindos",
package/scripts/setup.js CHANGED
@@ -1064,10 +1064,11 @@ async function main() {
1064
1064
 
1065
1065
  while (true) {
1066
1066
  const input = (await askText('pathPrompt', kbDefault)).trim();
1067
- // If absolute path entered, use as-is; if relative (no leading /), resolve from home
1068
- const resolved = input.startsWith('/') || input.startsWith('~/')
1069
- ? (input.startsWith('~/') ? resolve(HOME, input.slice(2)) : input)
1070
- : resolve(HOME, input);
1067
+ // Handle absolute paths for all platforms (Unix: /path, Windows: C:\path or C:/path)
1068
+ const isAbsolute = input.startsWith('/') || /^[A-Za-z]:[/\\]/.test(input);
1069
+ const resolved = input.startsWith('~/')
1070
+ ? resolve(HOME, input.slice(2))
1071
+ : isAbsolute ? resolve(input) : resolve(HOME, input);
1071
1072
  write(tf('pathResolved', resolved) + '\n');
1072
1073
  mindDir = resolved;
1073
1074
 
@@ -1323,7 +1324,8 @@ async function main() {
1323
1324
 
1324
1325
  function ensureCliInPath() {
1325
1326
  try {
1326
- execSync('command -v mindos', { stdio: 'ignore' });
1327
+ const checkCmd = process.platform === 'win32' ? 'where mindos' : 'command -v mindos';
1328
+ execSync(checkCmd, { stdio: 'ignore' });
1327
1329
  return; // already in PATH (npm -g install or previous link)
1328
1330
  } catch { /* not found */ }
1329
1331