@geminilight/mindos 0.6.40 → 0.6.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (287) hide show
  1. package/_standalone/.mindos-build-version +1 -1
  2. package/_standalone/.next/BUILD_ID +1 -1
  3. package/_standalone/.next/app-path-routes-manifest.json +18 -18
  4. package/_standalone/.next/build-manifest.json +3 -3
  5. package/_standalone/.next/cache/.previewinfo +1 -1
  6. package/_standalone/.next/cache/.rscinfo +1 -1
  7. package/_standalone/.next/cache/config.json +3 -3
  8. package/_standalone/.next/prerender-manifest.json +3 -3
  9. package/_standalone/.next/react-loadable-manifest.json +5 -1
  10. package/_standalone/.next/server/app/.well-known/agent-card.json/route_client-reference-manifest.js +1 -1
  11. package/_standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  12. package/_standalone/.next/server/app/_global-error.html +2 -2
  13. package/_standalone/.next/server/app/_global-error.rsc +1 -1
  14. package/_standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  15. package/_standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  16. package/_standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  17. package/_standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  18. package/_standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  19. package/_standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  20. package/_standalone/.next/server/app/_not-found/page.js +1 -1
  21. package/_standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  22. package/_standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  23. package/_standalone/.next/server/app/agents/[agentKey]/page.js +1 -1
  24. package/_standalone/.next/server/app/agents/[agentKey]/page.js.nft.json +1 -1
  25. package/_standalone/.next/server/app/agents/[agentKey]/page_client-reference-manifest.js +1 -1
  26. package/_standalone/.next/server/app/agents/page.js +2 -2
  27. package/_standalone/.next/server/app/agents/page.js.nft.json +1 -1
  28. package/_standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  29. package/_standalone/.next/server/app/api/a2a/agents/route_client-reference-manifest.js +1 -1
  30. package/_standalone/.next/server/app/api/a2a/delegations/route_client-reference-manifest.js +1 -1
  31. package/_standalone/.next/server/app/api/a2a/discover/route_client-reference-manifest.js +1 -1
  32. package/_standalone/.next/server/app/api/a2a/route_client-reference-manifest.js +1 -1
  33. package/_standalone/.next/server/app/api/acp/config/route_client-reference-manifest.js +1 -1
  34. package/_standalone/.next/server/app/api/acp/detect/route_client-reference-manifest.js +1 -1
  35. package/_standalone/.next/server/app/api/acp/install/route_client-reference-manifest.js +1 -1
  36. package/_standalone/.next/server/app/api/acp/registry/route_client-reference-manifest.js +1 -1
  37. package/_standalone/.next/server/app/api/acp/session/route_client-reference-manifest.js +1 -1
  38. package/_standalone/.next/server/app/api/agent-activity/route_client-reference-manifest.js +1 -1
  39. package/_standalone/.next/server/app/api/ask/route.js +1 -1
  40. package/_standalone/.next/server/app/api/ask/route.js.nft.json +1 -1
  41. package/_standalone/.next/server/app/api/ask/route_client-reference-manifest.js +1 -1
  42. package/_standalone/.next/server/app/api/ask-sessions/route_client-reference-manifest.js +1 -1
  43. package/_standalone/.next/server/app/api/auth/route_client-reference-manifest.js +1 -1
  44. package/_standalone/.next/server/app/api/backlinks/route.js.nft.json +1 -1
  45. package/_standalone/.next/server/app/api/backlinks/route_client-reference-manifest.js +1 -1
  46. package/_standalone/.next/server/app/api/bootstrap/route.js.nft.json +1 -1
  47. package/_standalone/.next/server/app/api/bootstrap/route_client-reference-manifest.js +1 -1
  48. package/_standalone/.next/server/app/api/changes/route.js.nft.json +1 -1
  49. package/_standalone/.next/server/app/api/changes/route_client-reference-manifest.js +1 -1
  50. package/_standalone/.next/server/app/api/export/route.js.nft.json +1 -1
  51. package/_standalone/.next/server/app/api/export/route_client-reference-manifest.js +1 -1
  52. package/_standalone/.next/server/app/api/extract-pdf/route_client-reference-manifest.js +1 -1
  53. package/_standalone/.next/server/app/api/file/import/route.js.nft.json +1 -1
  54. package/_standalone/.next/server/app/api/file/import/route_client-reference-manifest.js +1 -1
  55. package/_standalone/.next/server/app/api/file/route.js.nft.json +1 -1
  56. package/_standalone/.next/server/app/api/file/route_client-reference-manifest.js +1 -1
  57. package/_standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  58. package/_standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  59. package/_standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  60. package/_standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  61. package/_standalone/.next/server/app/api/graph/route.js.nft.json +1 -1
  62. package/_standalone/.next/server/app/api/graph/route_client-reference-manifest.js +1 -1
  63. package/_standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
  64. package/_standalone/.next/server/app/api/inbox/route.js.nft.json +1 -1
  65. package/_standalone/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -1
  66. package/_standalone/.next/server/app/api/init/route.js.nft.json +1 -1
  67. package/_standalone/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
  68. package/_standalone/.next/server/app/api/mcp/agents/route.js.nft.json +1 -1
  69. package/_standalone/.next/server/app/api/mcp/agents/route_client-reference-manifest.js +1 -1
  70. package/_standalone/.next/server/app/api/mcp/install/route.js +1 -1
  71. package/_standalone/.next/server/app/api/mcp/install/route_client-reference-manifest.js +1 -1
  72. package/_standalone/.next/server/app/api/mcp/install-skill/route.js.nft.json +1 -1
  73. package/_standalone/.next/server/app/api/mcp/install-skill/route_client-reference-manifest.js +1 -1
  74. package/_standalone/.next/server/app/api/mcp/restart/route_client-reference-manifest.js +1 -1
  75. package/_standalone/.next/server/app/api/mcp/status/route.js +1 -1
  76. package/_standalone/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
  77. package/_standalone/.next/server/app/api/monitoring/route.js.nft.json +1 -1
  78. package/_standalone/.next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
  79. package/_standalone/.next/server/app/api/recent-files/route.js.nft.json +1 -1
  80. package/_standalone/.next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
  81. package/_standalone/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
  82. package/_standalone/.next/server/app/api/search/route.js.nft.json +1 -1
  83. package/_standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
  84. package/_standalone/.next/server/app/api/settings/list-models/route_client-reference-manifest.js +1 -1
  85. package/_standalone/.next/server/app/api/settings/reset-token/route_client-reference-manifest.js +1 -1
  86. package/_standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
  87. package/_standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  88. package/_standalone/.next/server/app/api/settings/test-key/route_client-reference-manifest.js +1 -1
  89. package/_standalone/.next/server/app/api/setup/check-path/route_client-reference-manifest.js +1 -1
  90. package/_standalone/.next/server/app/api/setup/check-port/route_client-reference-manifest.js +1 -1
  91. package/_standalone/.next/server/app/api/setup/generate-token/route_client-reference-manifest.js +1 -1
  92. package/_standalone/.next/server/app/api/setup/ls/route_client-reference-manifest.js +1 -1
  93. package/_standalone/.next/server/app/api/setup/route_client-reference-manifest.js +1 -1
  94. package/_standalone/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
  95. package/_standalone/.next/server/app/api/sync/route_client-reference-manifest.js +1 -1
  96. package/_standalone/.next/server/app/api/tree-version/route.js.nft.json +1 -1
  97. package/_standalone/.next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
  98. package/_standalone/.next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
  99. package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  100. package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
  101. package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
  102. package/_standalone/.next/server/app/api/workflows/route.js.nft.json +1 -1
  103. package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
  104. package/_standalone/.next/server/app/changes/page.js +1 -1
  105. package/_standalone/.next/server/app/changes/page.js.nft.json +1 -1
  106. package/_standalone/.next/server/app/changes/page_client-reference-manifest.js +1 -1
  107. package/_standalone/.next/server/app/echo/[segment]/page.js +1 -1
  108. package/_standalone/.next/server/app/echo/[segment]/page.js.nft.json +1 -1
  109. package/_standalone/.next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
  110. package/_standalone/.next/server/app/echo/page.js +1 -1
  111. package/_standalone/.next/server/app/echo/page.js.nft.json +1 -1
  112. package/_standalone/.next/server/app/echo/page_client-reference-manifest.js +1 -1
  113. package/_standalone/.next/server/app/explore/page.js +1 -1
  114. package/_standalone/.next/server/app/explore/page.js.nft.json +1 -1
  115. package/_standalone/.next/server/app/explore/page_client-reference-manifest.js +1 -1
  116. package/_standalone/.next/server/app/help/page.js +2 -2
  117. package/_standalone/.next/server/app/help/page.js.nft.json +1 -1
  118. package/_standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
  119. package/_standalone/.next/server/app/login/page.js +1 -1
  120. package/_standalone/.next/server/app/login/page.js.nft.json +1 -1
  121. package/_standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
  122. package/_standalone/.next/server/app/page.js +2 -2
  123. package/_standalone/.next/server/app/page.js.nft.json +1 -1
  124. package/_standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  125. package/_standalone/.next/server/app/setup/page.js +2 -2
  126. package/_standalone/.next/server/app/setup/page.js.nft.json +1 -1
  127. package/_standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  128. package/_standalone/.next/server/app/trash/page.js +3 -3
  129. package/_standalone/.next/server/app/trash/page.js.nft.json +1 -1
  130. package/_standalone/.next/server/app/trash/page_client-reference-manifest.js +1 -1
  131. package/_standalone/.next/server/app/view/[...path]/page.js +3 -3
  132. package/_standalone/.next/server/app/view/[...path]/page.js.nft.json +1 -1
  133. package/_standalone/.next/server/app/view/[...path]/page_client-reference-manifest.js +1 -1
  134. package/_standalone/.next/server/app-paths-manifest.json +18 -18
  135. package/_standalone/.next/server/chunks/1550.js +1 -1
  136. package/_standalone/.next/server/chunks/2190.js +11 -0
  137. package/_standalone/.next/server/chunks/{6365.js → 2536.js} +2 -2
  138. package/_standalone/.next/server/chunks/5648.js +2 -0
  139. package/_standalone/.next/server/chunks/8388.js +1 -1
  140. package/_standalone/.next/server/chunks/953.js +1 -1
  141. package/_standalone/.next/server/chunks/9539.js +219 -0
  142. package/_standalone/.next/server/middleware-build-manifest.js +1 -1
  143. package/_standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  144. package/_standalone/.next/server/next-font-manifest.js +1 -1
  145. package/_standalone/.next/server/next-font-manifest.json +1 -1
  146. package/_standalone/.next/server/pages/500.html +2 -2
  147. package/_standalone/.next/server/server-reference-manifest.js +1 -1
  148. package/_standalone/.next/server/server-reference-manifest.json +1 -1
  149. package/_standalone/.next/static/chunks/1053-b70535785cc5aaee.js +29 -0
  150. package/_standalone/.next/static/chunks/{8663-de911d2d395622be.js → 1880-c2a9e76201841c86.js} +1 -1
  151. package/_standalone/.next/static/chunks/3637.0541ac2d0ea7de1f.js +1 -0
  152. package/_standalone/.next/static/chunks/4563-b2a2ce80aff845af.js +6 -0
  153. package/_standalone/.next/static/chunks/6981-3d7dcac2d12a5670.js +1 -0
  154. package/_standalone/.next/static/chunks/7144-5febf62f1a79fe64.js +1 -0
  155. package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-773071a99c4daac2.js +1 -0
  156. package/_standalone/.next/static/chunks/app/agents/page-6102a884b2cb3cfe.js +5 -0
  157. package/_standalone/.next/static/chunks/app/help/page-2325d25b6846ca07.js +1 -0
  158. package/_standalone/.next/static/chunks/app/{layout-9378c1c8d3e5761b.js → layout-42cdbce19f404567.js} +34 -34
  159. package/_standalone/.next/static/chunks/app/{page-9bae420fbbdc5fff.js → page-8c9643b649e01735.js} +1 -1
  160. package/_standalone/.next/static/chunks/app/setup/page-d158b8cb533feb1e.js +1 -0
  161. package/_standalone/.next/static/chunks/app/trash/{page-b61ef2d5cd4f8d73.js → page-e9ab74ffeb96af41.js} +1 -1
  162. package/_standalone/.next/static/chunks/app/view/[...path]/page-764a69a1c8bd4eef.js +12 -0
  163. package/_standalone/.next/static/chunks/{webpack-c28c55d0a6021a6b.js → webpack-7b276daaa930d480.js} +1 -1
  164. package/_standalone/.next/static/css/bc9179074eaf65ae.css +1 -0
  165. package/_standalone/.next/trace +63 -63
  166. package/_standalone/__tests__/api/mcp-install.test.ts +23 -0
  167. package/_standalone/__tests__/cli/agent-routing.test.ts +232 -0
  168. package/_standalone/__tests__/cli/file-subcommands.test.ts +379 -0
  169. package/_standalone/__tests__/core/tools.test.ts +3 -6
  170. package/_standalone/components/FileTree.tsx +3 -2
  171. package/_standalone/components/MarkdownView.tsx +30 -15
  172. package/_standalone/components/RightAskPanel.tsx +36 -6
  173. package/_standalone/components/Sidebar.tsx +3 -3
  174. package/_standalone/components/agents/AgentsMcpSection.tsx +3 -0
  175. package/_standalone/components/settings/McpAgentInstall.tsx +94 -27
  176. package/_standalone/components/settings/McpSkillsSection.tsx +1 -1
  177. package/_standalone/components/settings/McpTab.tsx +484 -340
  178. package/_standalone/components/settings/SettingsContent.tsx +12 -6
  179. package/_standalone/components/settings/types.ts +3 -0
  180. package/_standalone/components/setup/StepAgents.tsx +113 -47
  181. package/_standalone/components/setup/StepReview.tsx +14 -27
  182. package/_standalone/components/setup/types.ts +6 -0
  183. package/_standalone/data/skills/mindos/SKILL.md +92 -92
  184. package/_standalone/data/skills/mindos/references/write-supplement.md +119 -0
  185. package/_standalone/data/skills/mindos-zh/SKILL.md +100 -104
  186. package/_standalone/data/skills/mindos-zh/references/write-supplement.md +119 -0
  187. package/_standalone/lib/i18n/modules/features.ts +4 -4
  188. package/_standalone/lib/i18n/modules/knowledge.ts +4 -0
  189. package/_standalone/lib/i18n/modules/onboarding.ts +40 -30
  190. package/_standalone/lib/i18n/modules/settings.ts +78 -6
  191. package/_standalone/lib/mcp-snippets.ts +5 -1
  192. package/_standalone/tsconfig.tsbuildinfo +1 -1
  193. package/app/app/api/ask/route.ts +3 -2
  194. package/app/app/api/mcp/install/route.ts +2 -1
  195. package/app/app/api/mcp/status/route.ts +14 -6
  196. package/app/app/view/[...path]/ViewPageClient.tsx +12 -27
  197. package/app/components/FileTree.tsx +3 -2
  198. package/app/components/MarkdownView.tsx +30 -15
  199. package/app/components/RightAskPanel.tsx +36 -6
  200. package/app/components/Sidebar.tsx +3 -3
  201. package/app/components/agents/AgentsMcpSection.tsx +3 -0
  202. package/app/components/help/HelpContent.tsx +1 -0
  203. package/app/components/settings/McpAgentInstall.tsx +94 -27
  204. package/app/components/settings/McpSkillsSection.tsx +1 -1
  205. package/app/components/settings/McpTab.tsx +484 -340
  206. package/app/components/settings/SettingsContent.tsx +12 -6
  207. package/app/components/settings/types.ts +3 -0
  208. package/app/components/setup/StepAgents.tsx +113 -47
  209. package/app/components/setup/StepReview.tsx +14 -27
  210. package/app/components/setup/index.tsx +12 -11
  211. package/app/components/setup/types.ts +6 -0
  212. package/app/data/skills/mindos/SKILL.md +92 -92
  213. package/app/data/skills/mindos/references/write-supplement.md +119 -0
  214. package/app/data/skills/mindos-zh/SKILL.md +100 -104
  215. package/app/data/skills/mindos-zh/references/write-supplement.md +119 -0
  216. package/app/lib/fs.ts +0 -6
  217. package/app/lib/i18n/modules/features.ts +4 -4
  218. package/app/lib/i18n/modules/knowledge.ts +4 -0
  219. package/app/lib/i18n/modules/onboarding.ts +40 -30
  220. package/app/lib/i18n/modules/settings.ts +78 -6
  221. package/app/lib/mcp-agents.ts +1 -2
  222. package/app/lib/mcp-snippets.ts +5 -1
  223. package/app/lib/renderers/index.ts +2 -1
  224. package/bin/cli.js +168 -1404
  225. package/bin/commands/agent.js +156 -20
  226. package/bin/commands/api.js +14 -11
  227. package/bin/commands/ask.js +79 -68
  228. package/bin/commands/build.js +26 -0
  229. package/bin/commands/config.js +170 -0
  230. package/bin/commands/dev.js +58 -0
  231. package/bin/commands/doctor.js +205 -0
  232. package/bin/commands/file.js +551 -36
  233. package/bin/commands/gateway.js +42 -0
  234. package/bin/commands/init-skills.js +56 -0
  235. package/bin/commands/logs.js +32 -0
  236. package/bin/commands/mcp-cmd.js +57 -0
  237. package/bin/commands/onboard.js +25 -0
  238. package/bin/commands/open.js +41 -0
  239. package/bin/commands/restart.js +48 -0
  240. package/bin/commands/search.js +16 -14
  241. package/bin/commands/space.js +96 -25
  242. package/bin/commands/start.js +262 -0
  243. package/bin/commands/status.js +2 -2
  244. package/bin/commands/stop.js +14 -0
  245. package/bin/commands/sync-cmd.js +134 -0
  246. package/bin/commands/token.js +98 -0
  247. package/bin/commands/uninstall.js +154 -0
  248. package/bin/commands/update.js +286 -0
  249. package/bin/lib/build.js +1 -1
  250. package/bin/lib/colors.js +8 -7
  251. package/bin/lib/command.js +37 -96
  252. package/bin/lib/config.js +5 -0
  253. package/bin/lib/csv.js +19 -0
  254. package/bin/lib/jsonc.js +12 -0
  255. package/bin/lib/markdown.js +69 -0
  256. package/bin/lib/mcp-agents.js +1 -6
  257. package/bin/lib/mcp-build.js +1 -1
  258. package/bin/lib/mcp-install.js +2 -1
  259. package/bin/lib/one-shot.js +88 -0
  260. package/bin/lib/path-expand.js +9 -0
  261. package/bin/lib/remote.js +65 -0
  262. package/bin/lib/repl.js +167 -0
  263. package/bin/lib/{utils.js → shell.js} +10 -26
  264. package/bin/lib/skill-check.js +1 -1
  265. package/bin/lib/sse-stream.js +167 -0
  266. package/package.json +2 -2
  267. package/scripts/setup.js +182 -120
  268. package/skills/mindos/SKILL.md +92 -92
  269. package/skills/mindos-zh/SKILL.md +100 -104
  270. package/_standalone/.next/server/chunks/1955.js +0 -11
  271. package/_standalone/.next/server/chunks/3680.js +0 -1
  272. package/_standalone/.next/server/chunks/4497.js +0 -219
  273. package/_standalone/.next/server/chunks/5560.js +0 -2
  274. package/_standalone/.next/static/chunks/1053-0adaccc98a752a58.js +0 -29
  275. package/_standalone/.next/static/chunks/3637.f9a42cca59fd5bb5.js +0 -1
  276. package/_standalone/.next/static/chunks/4563-c2afaeacb241d1d0.js +0 -6
  277. package/_standalone/.next/static/chunks/6090-c98268ca726a68d3.js +0 -1
  278. package/_standalone/.next/static/chunks/9371-575600301da5d6bb.js +0 -1
  279. package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-3e08abb495ecd5fd.js +0 -1
  280. package/_standalone/.next/static/chunks/app/agents/page-e7e0f87ad3d765ac.js +0 -5
  281. package/_standalone/.next/static/chunks/app/help/page-3d0e1ceaa4abc243.js +0 -1
  282. package/_standalone/.next/static/chunks/app/setup/page-99ed3d1bb6b8f4ef.js +0 -1
  283. package/_standalone/.next/static/chunks/app/view/[...path]/page-44fa78cbea613a78.js +0 -12
  284. package/_standalone/.next/static/css/d300701f384db50d.css +0 -1
  285. package/_standalone/components/renderers/agent-inspector/manifest.ts +0 -16
  286. /package/_standalone/.next/static/{rZLs1krFuduixvcVNe6q3 → Ij3PFh-a0zi5K_ANoSAW0}/_buildManifest.js +0 -0
  287. /package/_standalone/.next/static/{rZLs1krFuduixvcVNe6q3 → Ij3PFh-a0zi5K_ANoSAW0}/_ssgManifest.js +0 -0
@@ -0,0 +1,42 @@
1
+ /**
2
+ * mindos gateway — Manage MindOS as a background OS service
3
+ */
4
+
5
+ import { bold, dim, cyan } from '../lib/colors.js';
6
+
7
+ export const meta = {
8
+ name: 'gateway',
9
+ group: 'Gateway',
10
+ summary: 'Manage background service (launchd/systemd)',
11
+ usage: 'mindos gateway <subcommand>',
12
+ examples: [
13
+ 'mindos gateway install',
14
+ 'mindos gateway start',
15
+ 'mindos gateway stop',
16
+ 'mindos gateway status',
17
+ 'mindos gateway logs',
18
+ ],
19
+ };
20
+
21
+ export const run = async (args) => {
22
+ const sub = args[0];
23
+ if (!sub) {
24
+ const row = (c, d) => ` ${cyan(c.padEnd(32))}${dim(d)}`;
25
+ console.log(`
26
+ ${bold('mindos gateway')} — manage MindOS as a background OS service
27
+
28
+ ${bold('Subcommands:')}
29
+ ${row('mindos gateway install', 'Install and enable the service (systemd/launchd)')}
30
+ ${row('mindos gateway uninstall', 'Disable and remove the service')}
31
+ ${row('mindos gateway start', 'Start the service')}
32
+ ${row('mindos gateway stop', 'Stop the service')}
33
+ ${row('mindos gateway status', 'Show service status')}
34
+ ${row('mindos gateway logs', 'Tail service logs')}
35
+
36
+ ${dim('Shortcut: mindos start --daemon → install + start in one step')}
37
+ `);
38
+ return;
39
+ }
40
+ const { runGatewayCommand } = await import('../lib/gateway.js');
41
+ await runGatewayCommand(sub);
42
+ };
@@ -0,0 +1,56 @@
1
+ /**
2
+ * mindos init-skills — Initialize skill rules
3
+ */
4
+
5
+ import { existsSync, readFileSync, mkdirSync, cpSync } from 'node:fs';
6
+ import { resolve } from 'node:path';
7
+ import { ROOT, CONFIG_PATH } from '../lib/constants.js';
8
+ import { bold, dim, cyan, green, red } from '../lib/colors.js';
9
+ import { EXIT } from '../lib/command.js';
10
+
11
+ export const meta = {
12
+ name: 'init-skills',
13
+ group: 'Config',
14
+ summary: 'Initialize skill rules',
15
+ usage: 'mindos init-skills',
16
+ hidden: true,
17
+ };
18
+
19
+ export const run = () => {
20
+ console.log(`\n${bold('ðŸ“Ķ Initialize Skill Rules')}\n`);
21
+
22
+ if (!existsSync(CONFIG_PATH)) {
23
+ console.log(` ${red('✘')} Config not found. Run ${cyan('mindos onboard')} first.\n`);
24
+ process.exit(EXIT.ERROR);
25
+ }
26
+ let config;
27
+ try {
28
+ config = JSON.parse(readFileSync(CONFIG_PATH, 'utf-8'));
29
+ } catch {
30
+ console.log(` ${red('✘')} Failed to parse config at ${dim(CONFIG_PATH)}\n`);
31
+ process.exit(EXIT.ERROR);
32
+ }
33
+ const mindRoot = config.mindRoot;
34
+ if (!mindRoot || !existsSync(mindRoot)) {
35
+ console.log(` ${red('✘')} Knowledge base not found: ${dim(mindRoot || '(not set)')}\n`);
36
+ process.exit(EXIT.ERROR);
37
+ }
38
+
39
+ const mindosDir = resolve(mindRoot, '.mindos');
40
+ const dest = resolve(mindosDir, 'user-preferences.md');
41
+ if (existsSync(dest)) {
42
+ console.log(` ${dim('skip')} .mindos/user-preferences.md (already exists)\n`);
43
+ } else {
44
+ if (!existsSync(mindosDir)) mkdirSync(mindosDir, { recursive: true });
45
+ const isZh = config.disabledSkills?.includes('mindos');
46
+ const lang = isZh ? 'zh' : 'en';
47
+ const src = resolve(ROOT, 'templates', 'skill-rules', lang, 'user-rules.md');
48
+ if (existsSync(src)) {
49
+ cpSync(src, dest);
50
+ console.log(` ${green('✓')} .mindos/user-preferences.md created at ${dim(mindosDir)}\n`);
51
+ } else {
52
+ console.log(` ${dim('skip')} Template not found, create .mindos/user-preferences.md manually if needed.\n`);
53
+ }
54
+ }
55
+ console.log(` ${dim('Note: Operating rules are now built into the app. No install needed.')}\n`);
56
+ };
@@ -0,0 +1,32 @@
1
+ /**
2
+ * mindos logs — Tail service logs
3
+ */
4
+
5
+ import { execSync } from 'node:child_process';
6
+ import { existsSync } from 'node:fs';
7
+ import { LOG_PATH } from '../lib/constants.js';
8
+ import { dim } from '../lib/colors.js';
9
+
10
+ export const meta = {
11
+ name: 'logs',
12
+ group: 'Config',
13
+ summary: 'Tail service logs',
14
+ usage: 'mindos logs',
15
+ examples: [
16
+ 'mindos logs',
17
+ ],
18
+ };
19
+
20
+ export const run = async (args, flags) => {
21
+ const { ensureMindosDir } = await import('../lib/gateway.js');
22
+ await ensureMindosDir();
23
+
24
+ if (!existsSync(LOG_PATH)) {
25
+ console.log(dim(`No log file yet at ${LOG_PATH}`));
26
+ console.log(dim('Logs are created when starting MindOS (mindos start, mindos onboard, or daemon mode).'));
27
+ process.exit(0);
28
+ }
29
+
30
+ const noFollow = flags['no-follow'] === true;
31
+ execSync(noFollow ? `tail -n 100 ${LOG_PATH}` : `tail -f ${LOG_PATH}`, { stdio: 'inherit' });
32
+ };
@@ -0,0 +1,57 @@
1
+ /**
2
+ * mindos mcp — MCP server management
3
+ */
4
+
5
+ import { resolve } from 'node:path';
6
+ import { ROOT } from '../lib/constants.js';
7
+ import { loadConfig } from '../lib/config.js';
8
+ import { execInherited } from '../lib/shell.js';
9
+ import { printCommandHelp } from '../lib/command.js';
10
+
11
+ export const meta = {
12
+ name: 'mcp',
13
+ group: 'Connections',
14
+ summary: 'Manage AI agent connections',
15
+ usage: 'mindos mcp [install [agent]]',
16
+ examples: [
17
+ 'mindos mcp',
18
+ 'mindos mcp install',
19
+ 'mindos mcp install cursor',
20
+ ],
21
+ };
22
+
23
+ export const run = async (args) => {
24
+ const sub = args[0];
25
+ const hasInstallFlags = args.some(a => ['-g', '--global', '-y', '--yes'].includes(a));
26
+
27
+ if (sub === 'install' || hasInstallFlags) {
28
+ const { mcpInstall } = await import('../lib/mcp-install.js');
29
+ await mcpInstall();
30
+ return;
31
+ }
32
+
33
+ // No subcommand in interactive terminal → show help
34
+ // (stdio mode is only meaningful when piped by an AI agent)
35
+ if (!sub && process.stdin.isTTY) {
36
+ printCommandHelp({ meta });
37
+ return;
38
+ }
39
+
40
+ loadConfig();
41
+
42
+ const { ensureMcpBundle } = await import('../lib/mcp-build.js');
43
+ await ensureMcpBundle();
44
+
45
+ if (!process.env.MCP_TRANSPORT) {
46
+ process.env.MCP_TRANSPORT = 'stdio';
47
+ }
48
+
49
+ const webPort = process.env.MINDOS_WEB_PORT || '3456';
50
+ process.env.MINDOS_URL = process.env.MINDOS_URL || `http://localhost:${webPort}`;
51
+
52
+ if (process.env.MCP_TRANSPORT === 'http') {
53
+ process.env.MCP_PORT = process.env.MINDOS_MCP_PORT || '8781';
54
+ }
55
+
56
+ execInherited(`node dist/index.cjs`, resolve(ROOT, 'mcp'));
57
+ };
@@ -0,0 +1,25 @@
1
+ /**
2
+ * mindos onboard — Interactive setup wizard
3
+ */
4
+
5
+ import { resolve } from 'node:path';
6
+ import { ROOT } from '../lib/constants.js';
7
+ import { execInherited } from '../lib/shell.js';
8
+
9
+ export const meta = {
10
+ name: 'onboard',
11
+ aliases: ['init', 'setup'],
12
+ group: 'Config',
13
+ summary: 'First-time setup wizard',
14
+ usage: 'mindos onboard',
15
+ examples: [
16
+ 'mindos onboard',
17
+ 'mindos init',
18
+ 'mindos setup',
19
+ ],
20
+ };
21
+
22
+ export const run = (args, flags) => {
23
+ const daemonFlag = flags['install-daemon'] ? ' --install-daemon' : '';
24
+ execInherited(`node ${resolve(ROOT, 'scripts/setup.js')}${daemonFlag}`);
25
+ };
@@ -0,0 +1,41 @@
1
+ /**
2
+ * mindos open — Open Web UI in browser
3
+ */
4
+
5
+ import { execSync } from 'node:child_process';
6
+ import { loadConfig } from '../lib/config.js';
7
+ import { cyan, green, dim } from '../lib/colors.js';
8
+
9
+ export const meta = {
10
+ name: 'open',
11
+ group: 'Service',
12
+ summary: 'Open Web UI in browser',
13
+ usage: 'mindos open',
14
+ };
15
+
16
+ export const run = () => {
17
+ loadConfig();
18
+ const webPort = process.env.MINDOS_WEB_PORT || '3456';
19
+ const url = `http://localhost:${webPort}`;
20
+
21
+ let cmd;
22
+ if (process.platform === 'darwin') {
23
+ cmd = 'open';
24
+ } else if (process.platform === 'linux') {
25
+ try {
26
+ const uname = execSync('uname -r', { encoding: 'utf-8' });
27
+ cmd = uname.toLowerCase().includes('microsoft') ? 'wslview' : 'xdg-open';
28
+ } catch {
29
+ cmd = 'xdg-open';
30
+ }
31
+ } else {
32
+ cmd = 'start';
33
+ }
34
+
35
+ try {
36
+ execSync(`${cmd} ${url}`, { stdio: 'ignore' });
37
+ console.log(`${green('✔')} Opening ${cyan(url)}`);
38
+ } catch {
39
+ console.log(dim(`Could not open browser automatically. Visit: ${cyan(url)}`));
40
+ }
41
+ };
@@ -0,0 +1,48 @@
1
+ /**
2
+ * mindos restart — Stop then start again
3
+ */
4
+
5
+ import { loadConfig, getStartMode } from '../lib/config.js';
6
+ import { stopMindos } from '../lib/stop.js';
7
+ import { isPortInUse } from '../lib/port.js';
8
+
9
+ export const meta = {
10
+ name: 'restart',
11
+ group: 'Service',
12
+ summary: 'Restart services',
13
+ usage: 'mindos restart',
14
+ };
15
+
16
+ export const run = async (args, flags) => {
17
+ const oldWebPort = process.env.MINDOS_OLD_WEB_PORT || process.env.MINDOS_WEB_PORT;
18
+ const oldMcpPort = process.env.MINDOS_OLD_MCP_PORT || process.env.MINDOS_MCP_PORT;
19
+
20
+ loadConfig();
21
+
22
+ const newWebPort = Number(process.env.MINDOS_WEB_PORT || '3456');
23
+ const newMcpPort = Number(process.env.MINDOS_MCP_PORT || '8781');
24
+
25
+ const extraPorts = [];
26
+ if (oldWebPort && Number(oldWebPort) !== newWebPort) extraPorts.push(oldWebPort);
27
+ if (oldMcpPort && Number(oldMcpPort) !== newMcpPort) extraPorts.push(oldMcpPort);
28
+
29
+ stopMindos({ extraPorts });
30
+
31
+ const allPorts = new Set([newWebPort, newMcpPort]);
32
+ for (const p of extraPorts) allPorts.add(Number(p));
33
+
34
+ const deadline = Date.now() + 15_000;
35
+ while (Date.now() < deadline) {
36
+ let anyBusy = false;
37
+ for (const p of allPorts) {
38
+ if (await isPortInUse(p)) { anyBusy = true; break; }
39
+ }
40
+ if (!anyBusy) break;
41
+ await new Promise((r) => setTimeout(r, 500));
42
+ }
43
+
44
+ // Dynamically resolve start mode and dispatch
45
+ const mode = getStartMode();
46
+ const startCmd = await import(`./${mode}.js`);
47
+ await startCmd.run(args, flags);
48
+ };
@@ -1,32 +1,34 @@
1
1
  import { bold, dim, cyan, red } from '../lib/colors.js';
2
2
  import { loadConfig } from '../lib/config.js';
3
- import { output, isJsonMode, EXIT } from '../lib/command.js';
3
+ import { output, isJsonMode, EXIT, printCommandHelp } from '../lib/command.js';
4
+ import { getBaseUrl, getAuthHeaders } from '../lib/remote.js';
4
5
 
5
6
  export const meta = {
6
7
  name: 'search', group: 'Knowledge',
7
- summary: 'Search knowledge base via API',
8
+ summary: 'Search your knowledge base',
8
9
  usage: 'mindos search "<query>"',
9
- examples: ['mindos search "meeting notes"', 'mindos search "RAG" --limit 5 --json'],
10
+ flags: {
11
+ '--limit <n>': 'Max results (default: 20)',
12
+ '--json': 'Output as JSON',
13
+ },
14
+ examples: [
15
+ 'mindos search "meeting notes"',
16
+ 'mindos search "RAG" --limit 5 --json',
17
+ ],
10
18
  };
11
19
 
12
20
  export async function run(args, flags) {
13
21
  const query = args.join(' ');
14
- if (!query || flags.help || flags.h) {
15
- console.log(bold('mindos search') + ' — Knowledge base search');
16
- console.log('');
17
- console.log('Usage: mindos search "<query>"');
18
- console.log('Flags: --limit <n> (default 20), --json');
19
- console.log('Note: MindOS must be running. Offline: mindos file search "<query>"');
22
+ if (!query) {
23
+ printCommandHelp({ meta });
20
24
  return;
21
25
  }
22
26
  loadConfig();
23
- const port = flags.port || process.env.MINDOS_WEB_PORT || '3456';
24
- const token = process.env.MINDOS_AUTH_TOKEN || '';
27
+ const baseUrl = getBaseUrl();
25
28
  const limit = parseInt(flags.limit) || 20;
26
- const headers = {};
27
- if (token) headers['Authorization'] = 'Bearer ' + token;
29
+ const headers = getAuthHeaders();
28
30
  try {
29
- const res = await fetch('http://localhost:' + port + '/api/search?q=' + encodeURIComponent(query) + '&limit=' + limit, { headers });
31
+ const res = await fetch(`${baseUrl}/api/search?q=${encodeURIComponent(query)}&limit=${limit}`, { headers });
30
32
  if (!res.ok) throw new Error('API error (' + res.status + ')');
31
33
  const data = await res.json();
32
34
  const results = data.results || data || [];
@@ -11,6 +11,7 @@ import { resolve, basename } 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';
14
+ import { isRemoteMode, apiCall } from '../lib/remote.js';
14
15
 
15
16
  function getMindRoot() {
16
17
  loadConfig();
@@ -25,7 +26,7 @@ function getMindRoot() {
25
26
  export const meta = {
26
27
  name: 'space',
27
28
  group: 'Knowledge',
28
- summary: 'Knowledge base structure (ls, mkdir, rmdir, init, info, tree)',
29
+ summary: 'Manage spaces (list, tree, create, rename)',
29
30
  usage: 'mindos space <subcommand>',
30
31
  examples: [
31
32
  'mindos space ls',
@@ -42,34 +43,20 @@ export const meta = {
42
43
 
43
44
  export async function run(args, flags) {
44
45
  const sub = args[0];
45
- const root = getMindRoot();
46
-
47
- if (!sub || flags.help || flags.h) {
48
- console.log(`
49
- ${bold('mindos space')} — Knowledge base structure management
50
-
51
- ${bold('Browse:')}
52
- ${cyan('ls [path]'.padEnd(24))}${dim('List contents of a directory (default: root)')}
53
- ${cyan('tree [path]'.padEnd(24))}${dim('Show directory tree recursively')}
54
- ${cyan('info <path>'.padEnd(24))}${dim('Show directory details (type, files, modified)')}
55
-
56
- ${bold('Structure:')}
57
- ${cyan('create <name>'.padEnd(24))}${dim('Create a new Space (directory + INSTRUCTION.md)')}
58
- ${cyan('mkdir <path>'.padEnd(24))}${dim('Create a directory (no INSTRUCTION.md)')}
59
- ${cyan('rmdir <path>'.padEnd(24))}${dim('Delete a directory and all its contents')}
60
- ${cyan('rename <old> <new>'.padEnd(24))}${dim('Rename or move a directory')}
61
- ${cyan('init <path>'.padEnd(24))}${dim('Upgrade a directory to a Space (add INSTRUCTION.md)')}
46
+ loadConfig();
62
47
 
63
- ${bold('Examples:')}
64
- ${dim('mindos space ls')}
65
- ${dim('mindos space ls "📝 įŽ”čŪ°" --json')}
66
- ${dim('mindos space tree "⚙ïļ é…į―Ū"')}
67
- ${dim('mindos space mkdir "📝 įŽ”čŪ°/新分įąŧ/子分įąŧ"')}
68
- ${dim('mindos space init "exploration"')}
69
- `);
48
+ if (!sub) {
49
+ printHelp();
70
50
  return;
71
51
  }
72
52
 
53
+ // Remote mode: delegate to HTTP API
54
+ if (isRemoteMode()) {
55
+ return remoteSpaceDispatch(sub, args, flags);
56
+ }
57
+
58
+ const root = getMindRoot();
59
+
73
60
  switch (sub) {
74
61
  case 'ls': case 'list': return spaceLs(root, args[1], flags);
75
62
  case 'tree': return spaceTree(root, args[1], flags);
@@ -381,3 +368,87 @@ function spaceInit(root, relPath, flags) {
381
368
  }
382
369
  console.log(`${green('✔')} Initialized Space: ${cyan(relPath)}`);
383
370
  }
371
+
372
+ // ── Remote mode: space operations via HTTP API ─────────────────────────────
373
+
374
+ async function remoteSpaceDispatch(sub, args, flags) {
375
+ try {
376
+ switch (sub) {
377
+ case 'ls':
378
+ case 'list': {
379
+ const res = await apiCall('/api/file?op=list_spaces');
380
+ const data = await res.json();
381
+ const spaces = data.spaces || [];
382
+ if (isJsonMode(flags)) { output({ count: spaces.length, spaces }, flags); return; }
383
+ if (spaces.length === 0) { console.log(dim('No spaces found.')); return; }
384
+ console.log(`\n${bold(`Spaces (${spaces.length}):`)}\n`);
385
+ for (const s of spaces) {
386
+ const name = s.name || s.path || s;
387
+ const files = s.fileCount != null ? dim(` (${s.fileCount} files)`) : '';
388
+ console.log(` ${cyan(name)}${files}`);
389
+ }
390
+ console.log();
391
+ return;
392
+ }
393
+
394
+ case 'create': {
395
+ const name = args[1];
396
+ if (!name) { console.error(red('Usage: mindos space create <name>')); process.exit(EXIT.ERROR); }
397
+ const res = await apiCall('/api/file', {
398
+ method: 'POST',
399
+ body: JSON.stringify({ action: 'create_space', name }),
400
+ });
401
+ await res.json();
402
+ if (isJsonMode(flags)) { output({ ok: true, name }, flags); return; }
403
+ console.log(`${green('✔')} Created Space: ${cyan(name)}`);
404
+ return;
405
+ }
406
+
407
+ case 'rename':
408
+ case 'mv': {
409
+ const oldName = args[1], newName = args[2];
410
+ if (!oldName || !newName) { console.error(red('Usage: mindos space rename <old> <new>')); process.exit(EXIT.ERROR); }
411
+ const res = await apiCall('/api/file', {
412
+ method: 'POST',
413
+ body: JSON.stringify({ action: 'rename_space', oldName, newName }),
414
+ });
415
+ await res.json();
416
+ if (isJsonMode(flags)) { output({ ok: true, from: oldName, to: newName }, flags); return; }
417
+ console.log(`${green('✔')} Renamed: ${oldName} → ${cyan(newName)}`);
418
+ return;
419
+ }
420
+
421
+ default:
422
+ console.error(red(`Remote mode does not support 'space ${sub}'. Use: list, create, rename`));
423
+ process.exit(EXIT.ERROR);
424
+ }
425
+ } catch (e) {
426
+ console.error(red(`Remote error: ${e.message}`));
427
+ process.exit(EXIT.ERROR);
428
+ }
429
+ }
430
+
431
+ export function printHelp() {
432
+ console.log(`
433
+ ${bold('mindos space')} — Knowledge base structure management
434
+
435
+ ${bold('Browse:')}
436
+ ${cyan('ls [path]'.padEnd(24))}${dim('List contents of a directory (default: root)')}
437
+ ${cyan('tree [path]'.padEnd(24))}${dim('Show directory tree recursively')}
438
+ ${cyan('info <path>'.padEnd(24))}${dim('Show directory details (type, files, modified)')}
439
+
440
+ ${bold('Structure:')}
441
+ ${cyan('create <name>'.padEnd(24))}${dim('Create a new Space (directory + INSTRUCTION.md)')}
442
+ ${cyan('mkdir <path>'.padEnd(24))}${dim('Create a directory (no INSTRUCTION.md)')}
443
+ ${cyan('rmdir <path>'.padEnd(24))}${dim('Delete a directory and all its contents')}
444
+ ${cyan('rename <old> <new>'.padEnd(24))}${dim('Rename or move a directory')}
445
+ ${cyan('init <path>'.padEnd(24))}${dim('Upgrade a directory to a Space (add INSTRUCTION.md)')}
446
+
447
+ ${bold('Examples:')}
448
+ ${dim('mindos space ls')}
449
+ ${dim('mindos space ls "📝 įŽ”čŪ°" --json')}
450
+ ${dim('mindos space tree "⚙ïļ é…į―Ū"')}
451
+ ${dim('mindos space mkdir "📝 įŽ”čŪ°/新分įąŧ/子分įąŧ"')}
452
+ ${dim('mindos space init "exploration"')}
453
+ `);
454
+ }