nomoreide 0.2.0 → 0.3.2

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 (624) hide show
  1. package/README.md +12 -9
  2. package/bin/nomoreide.js +82 -0
  3. package/package.json +24 -132
  4. package/dist/cli/agents.d.ts +0 -2
  5. package/dist/cli/agents.js +0 -43
  6. package/dist/cli/agents.js.map +0 -1
  7. package/dist/cli/commands.d.ts +0 -11
  8. package/dist/cli/commands.js +0 -235
  9. package/dist/cli/commands.js.map +0 -1
  10. package/dist/cli/daemon.d.ts +0 -15
  11. package/dist/cli/daemon.js +0 -139
  12. package/dist/cli/daemon.js.map +0 -1
  13. package/dist/cli/database.d.ts +0 -2
  14. package/dist/cli/database.js +0 -145
  15. package/dist/cli/database.js.map +0 -1
  16. package/dist/cli/errors.d.ts +0 -2
  17. package/dist/cli/errors.js +0 -3
  18. package/dist/cli/errors.js.map +0 -1
  19. package/dist/cli/flags.d.ts +0 -1
  20. package/dist/cli/flags.js +0 -19
  21. package/dist/cli/flags.js.map +0 -1
  22. package/dist/cli/git.d.ts +0 -2
  23. package/dist/cli/git.js +0 -113
  24. package/dist/cli/git.js.map +0 -1
  25. package/dist/cli/profile.d.ts +0 -2
  26. package/dist/cli/profile.js +0 -171
  27. package/dist/cli/profile.js.map +0 -1
  28. package/dist/core/agent-context.d.ts +0 -9
  29. package/dist/core/agent-context.js +0 -43
  30. package/dist/core/agent-context.js.map +0 -1
  31. package/dist/core/agent-env/antigravity-reader.d.ts +0 -7
  32. package/dist/core/agent-env/antigravity-reader.js +0 -86
  33. package/dist/core/agent-env/antigravity-reader.js.map +0 -1
  34. package/dist/core/agent-env/availability.d.ts +0 -6
  35. package/dist/core/agent-env/availability.js +0 -79
  36. package/dist/core/agent-env/availability.js.map +0 -1
  37. package/dist/core/agent-env/claude-reader.d.ts +0 -7
  38. package/dist/core/agent-env/claude-reader.js +0 -101
  39. package/dist/core/agent-env/claude-reader.js.map +0 -1
  40. package/dist/core/agent-env/codex-reader.d.ts +0 -11
  41. package/dist/core/agent-env/codex-reader.js +0 -164
  42. package/dist/core/agent-env/codex-reader.js.map +0 -1
  43. package/dist/core/agent-env/index.d.ts +0 -9
  44. package/dist/core/agent-env/index.js +0 -29
  45. package/dist/core/agent-env/index.js.map +0 -1
  46. package/dist/core/agent-env/managed-plugins.d.ts +0 -18
  47. package/dist/core/agent-env/managed-plugins.js +0 -68
  48. package/dist/core/agent-env/managed-plugins.js.map +0 -1
  49. package/dist/core/agent-env/plugin-reader.d.ts +0 -9
  50. package/dist/core/agent-env/plugin-reader.js +0 -174
  51. package/dist/core/agent-env/plugin-reader.js.map +0 -1
  52. package/dist/core/agent-env/shared.d.ts +0 -26
  53. package/dist/core/agent-env/shared.js +0 -116
  54. package/dist/core/agent-env/shared.js.map +0 -1
  55. package/dist/core/agent-env/types.d.ts +0 -66
  56. package/dist/core/agent-env/types.js +0 -7
  57. package/dist/core/agent-env/types.js.map +0 -1
  58. package/dist/core/agent-env-actions.d.ts +0 -117
  59. package/dist/core/agent-env-actions.js +0 -273
  60. package/dist/core/agent-env-actions.js.map +0 -1
  61. package/dist/core/agent-env-plugin-uninstall.d.ts +0 -11
  62. package/dist/core/agent-env-plugin-uninstall.js +0 -189
  63. package/dist/core/agent-env-plugin-uninstall.js.map +0 -1
  64. package/dist/core/agent-env-writers.d.ts +0 -71
  65. package/dist/core/agent-env-writers.js +0 -632
  66. package/dist/core/agent-env-writers.js.map +0 -1
  67. package/dist/core/agent-profiles/apply.d.ts +0 -57
  68. package/dist/core/agent-profiles/apply.js +0 -209
  69. package/dist/core/agent-profiles/apply.js.map +0 -1
  70. package/dist/core/agent-profiles/builtin.d.ts +0 -8
  71. package/dist/core/agent-profiles/builtin.js +0 -33
  72. package/dist/core/agent-profiles/builtin.js.map +0 -1
  73. package/dist/core/agent-profiles/credentials.d.ts +0 -26
  74. package/dist/core/agent-profiles/credentials.js +0 -151
  75. package/dist/core/agent-profiles/credentials.js.map +0 -1
  76. package/dist/core/agent-profiles/debug-setup.d.ts +0 -18
  77. package/dist/core/agent-profiles/debug-setup.js +0 -237
  78. package/dist/core/agent-profiles/debug-setup.js.map +0 -1
  79. package/dist/core/agent-profiles/index.d.ts +0 -18
  80. package/dist/core/agent-profiles/index.js +0 -19
  81. package/dist/core/agent-profiles/index.js.map +0 -1
  82. package/dist/core/agent-profiles/plugin-apply.d.ts +0 -16
  83. package/dist/core/agent-profiles/plugin-apply.js +0 -383
  84. package/dist/core/agent-profiles/plugin-apply.js.map +0 -1
  85. package/dist/core/agent-profiles/plugin-bundle.d.ts +0 -6
  86. package/dist/core/agent-profiles/plugin-bundle.js +0 -32
  87. package/dist/core/agent-profiles/plugin-bundle.js.map +0 -1
  88. package/dist/core/agent-profiles/publication.d.ts +0 -105
  89. package/dist/core/agent-profiles/publication.js +0 -126
  90. package/dist/core/agent-profiles/publication.js.map +0 -1
  91. package/dist/core/agent-profiles/registry-auth.d.ts +0 -25
  92. package/dist/core/agent-profiles/registry-auth.js +0 -78
  93. package/dist/core/agent-profiles/registry-auth.js.map +0 -1
  94. package/dist/core/agent-profiles/registry-client.d.ts +0 -98
  95. package/dist/core/agent-profiles/registry-client.js +0 -109
  96. package/dist/core/agent-profiles/registry-client.js.map +0 -1
  97. package/dist/core/agent-profiles/registry-config.d.ts +0 -62
  98. package/dist/core/agent-profiles/registry-config.js +0 -221
  99. package/dist/core/agent-profiles/registry-config.js.map +0 -1
  100. package/dist/core/agent-profiles/registry-transfer.d.ts +0 -42
  101. package/dist/core/agent-profiles/registry-transfer.js +0 -133
  102. package/dist/core/agent-profiles/registry-transfer.js.map +0 -1
  103. package/dist/core/agent-profiles/store.d.ts +0 -62
  104. package/dist/core/agent-profiles/store.js +0 -479
  105. package/dist/core/agent-profiles/store.js.map +0 -1
  106. package/dist/core/agent-profiles/transfer.d.ts +0 -27
  107. package/dist/core/agent-profiles/transfer.js +0 -359
  108. package/dist/core/agent-profiles/transfer.js.map +0 -1
  109. package/dist/core/agent-profiles/types.d.ts +0 -364
  110. package/dist/core/agent-profiles/types.js +0 -79
  111. package/dist/core/agent-profiles/types.js.map +0 -1
  112. package/dist/core/agent-runtime.d.ts +0 -114
  113. package/dist/core/agent-runtime.js +0 -494
  114. package/dist/core/agent-runtime.js.map +0 -1
  115. package/dist/core/agent-sessions.d.ts +0 -46
  116. package/dist/core/agent-sessions.js +0 -109
  117. package/dist/core/agent-sessions.js.map +0 -1
  118. package/dist/core/agent-settings.d.ts +0 -31
  119. package/dist/core/agent-settings.js +0 -129
  120. package/dist/core/agent-settings.js.map +0 -1
  121. package/dist/core/agent-terminal.d.ts +0 -22
  122. package/dist/core/agent-terminal.js +0 -62
  123. package/dist/core/agent-terminal.js.map +0 -1
  124. package/dist/core/agent-transcripts.d.ts +0 -29
  125. package/dist/core/agent-transcripts.js +0 -281
  126. package/dist/core/agent-transcripts.js.map +0 -1
  127. package/dist/core/app-settings.d.ts +0 -74
  128. package/dist/core/app-settings.js +0 -118
  129. package/dist/core/app-settings.js.map +0 -1
  130. package/dist/core/app-version.d.ts +0 -2
  131. package/dist/core/app-version.js +0 -16
  132. package/dist/core/app-version.js.map +0 -1
  133. package/dist/core/approval-broker.d.ts +0 -29
  134. package/dist/core/approval-broker.js +0 -48
  135. package/dist/core/approval-broker.js.map +0 -1
  136. package/dist/core/claude-settings.d.ts +0 -18
  137. package/dist/core/claude-settings.js +0 -48
  138. package/dist/core/claude-settings.js.map +0 -1
  139. package/dist/core/cloudflare-actions.d.ts +0 -90
  140. package/dist/core/cloudflare-actions.js +0 -178
  141. package/dist/core/cloudflare-actions.js.map +0 -1
  142. package/dist/core/cloudflare-auth.d.ts +0 -61
  143. package/dist/core/cloudflare-auth.js +0 -149
  144. package/dist/core/cloudflare-auth.js.map +0 -1
  145. package/dist/core/cloudflare-context.d.ts +0 -2
  146. package/dist/core/cloudflare-context.js +0 -106
  147. package/dist/core/cloudflare-context.js.map +0 -1
  148. package/dist/core/cloudflare-manager.d.ts +0 -258
  149. package/dist/core/cloudflare-manager.js +0 -414
  150. package/dist/core/cloudflare-manager.js.map +0 -1
  151. package/dist/core/cloudflare-provider.d.ts +0 -64
  152. package/dist/core/cloudflare-provider.js +0 -348
  153. package/dist/core/cloudflare-provider.js.map +0 -1
  154. package/dist/core/config-files.d.ts +0 -27
  155. package/dist/core/config-files.js +0 -154
  156. package/dist/core/config-files.js.map +0 -1
  157. package/dist/core/config-store.d.ts +0 -181
  158. package/dist/core/config-store.js +0 -1026
  159. package/dist/core/config-store.js.map +0 -1
  160. package/dist/core/context-library.d.ts +0 -53
  161. package/dist/core/context-library.js +0 -605
  162. package/dist/core/context-library.js.map +0 -1
  163. package/dist/core/context-types.d.ts +0 -83
  164. package/dist/core/context-types.js +0 -9
  165. package/dist/core/context-types.js.map +0 -1
  166. package/dist/core/daemon-client.d.ts +0 -84
  167. package/dist/core/daemon-client.js +0 -156
  168. package/dist/core/daemon-client.js.map +0 -1
  169. package/dist/core/daemon-lifecycle.d.ts +0 -59
  170. package/dist/core/daemon-lifecycle.js +0 -147
  171. package/dist/core/daemon-lifecycle.js.map +0 -1
  172. package/dist/core/db/catalog.d.ts +0 -57
  173. package/dist/core/db/catalog.js +0 -38
  174. package/dist/core/db/catalog.js.map +0 -1
  175. package/dist/core/db/data-masking.d.ts +0 -3
  176. package/dist/core/db/data-masking.js +0 -14
  177. package/dist/core/db/data-masking.js.map +0 -1
  178. package/dist/core/db/driver.d.ts +0 -151
  179. package/dist/core/db/driver.js +0 -209
  180. package/dist/core/db/driver.js.map +0 -1
  181. package/dist/core/db/export.d.ts +0 -17
  182. package/dist/core/db/export.js +0 -67
  183. package/dist/core/db/export.js.map +0 -1
  184. package/dist/core/db/mysql-driver.d.ts +0 -33
  185. package/dist/core/db/mysql-driver.js +0 -364
  186. package/dist/core/db/mysql-driver.js.map +0 -1
  187. package/dist/core/db/postgres-driver.d.ts +0 -34
  188. package/dist/core/db/postgres-driver.js +0 -430
  189. package/dist/core/db/postgres-driver.js.map +0 -1
  190. package/dist/core/db/sqlite-driver.d.ts +0 -30
  191. package/dist/core/db/sqlite-driver.js +0 -301
  192. package/dist/core/db/sqlite-driver.js.map +0 -1
  193. package/dist/core/db-peek.d.ts +0 -99
  194. package/dist/core/db-peek.js +0 -322
  195. package/dist/core/db-peek.js.map +0 -1
  196. package/dist/core/db-write.d.ts +0 -45
  197. package/dist/core/db-write.js +0 -190
  198. package/dist/core/db-write.js.map +0 -1
  199. package/dist/core/docker-inspect.d.ts +0 -34
  200. package/dist/core/docker-inspect.js +0 -108
  201. package/dist/core/docker-inspect.js.map +0 -1
  202. package/dist/core/docker-resources.d.ts +0 -28
  203. package/dist/core/docker-resources.js +0 -59
  204. package/dist/core/docker-resources.js.map +0 -1
  205. package/dist/core/docker-service-runner.d.ts +0 -21
  206. package/dist/core/docker-service-runner.js +0 -80
  207. package/dist/core/docker-service-runner.js.map +0 -1
  208. package/dist/core/docker-stats.d.ts +0 -24
  209. package/dist/core/docker-stats.js +0 -76
  210. package/dist/core/docker-stats.js.map +0 -1
  211. package/dist/core/docker.d.ts +0 -75
  212. package/dist/core/docker.js +0 -219
  213. package/dist/core/docker.js.map +0 -1
  214. package/dist/core/env-file.d.ts +0 -24
  215. package/dist/core/env-file.js +0 -123
  216. package/dist/core/env-file.js.map +0 -1
  217. package/dist/core/env-runtime.d.ts +0 -32
  218. package/dist/core/env-runtime.js +0 -42
  219. package/dist/core/env-runtime.js.map +0 -1
  220. package/dist/core/error-inbox.d.ts +0 -91
  221. package/dist/core/error-inbox.js +0 -292
  222. package/dist/core/error-inbox.js.map +0 -1
  223. package/dist/core/extensions.d.ts +0 -78
  224. package/dist/core/extensions.js +0 -41
  225. package/dist/core/extensions.js.map +0 -1
  226. package/dist/core/external-terminal.d.ts +0 -60
  227. package/dist/core/external-terminal.js +0 -429
  228. package/dist/core/external-terminal.js.map +0 -1
  229. package/dist/core/fix-loop.d.ts +0 -55
  230. package/dist/core/fix-loop.js +0 -73
  231. package/dist/core/fix-loop.js.map +0 -1
  232. package/dist/core/git-actions.d.ts +0 -69
  233. package/dist/core/git-actions.js +0 -161
  234. package/dist/core/git-actions.js.map +0 -1
  235. package/dist/core/git-graph-layout.d.ts +0 -34
  236. package/dist/core/git-graph-layout.js +0 -94
  237. package/dist/core/git-graph-layout.js.map +0 -1
  238. package/dist/core/git-identity.d.ts +0 -78
  239. package/dist/core/git-identity.js +0 -178
  240. package/dist/core/git-identity.js.map +0 -1
  241. package/dist/core/git-manager.d.ts +0 -129
  242. package/dist/core/git-manager.js +0 -509
  243. package/dist/core/git-manager.js.map +0 -1
  244. package/dist/core/git-worktrees.d.ts +0 -35
  245. package/dist/core/git-worktrees.js +0 -142
  246. package/dist/core/git-worktrees.js.map +0 -1
  247. package/dist/core/github-auth.d.ts +0 -28
  248. package/dist/core/github-auth.js +0 -134
  249. package/dist/core/github-auth.js.map +0 -1
  250. package/dist/core/github-context.d.ts +0 -12
  251. package/dist/core/github-context.js +0 -36
  252. package/dist/core/github-context.js.map +0 -1
  253. package/dist/core/github-manager.d.ts +0 -230
  254. package/dist/core/github-manager.js +0 -324
  255. package/dist/core/github-manager.js.map +0 -1
  256. package/dist/core/host-metrics.d.ts +0 -41
  257. package/dist/core/host-metrics.js +0 -93
  258. package/dist/core/host-metrics.js.map +0 -1
  259. package/dist/core/http-inspector.d.ts +0 -20
  260. package/dist/core/http-inspector.js +0 -106
  261. package/dist/core/http-inspector.js.map +0 -1
  262. package/dist/core/jetbrains-import.d.ts +0 -85
  263. package/dist/core/jetbrains-import.js +0 -599
  264. package/dist/core/jetbrains-import.js.map +0 -1
  265. package/dist/core/log-sources.d.ts +0 -21
  266. package/dist/core/log-sources.js +0 -219
  267. package/dist/core/log-sources.js.map +0 -1
  268. package/dist/core/log-store.d.ts +0 -33
  269. package/dist/core/log-store.js +0 -94
  270. package/dist/core/log-store.js.map +0 -1
  271. package/dist/core/log-volume.d.ts +0 -41
  272. package/dist/core/log-volume.js +0 -81
  273. package/dist/core/log-volume.js.map +0 -1
  274. package/dist/core/mcp-auth.d.ts +0 -27
  275. package/dist/core/mcp-auth.js +0 -90
  276. package/dist/core/mcp-auth.js.map +0 -1
  277. package/dist/core/metrics-store.d.ts +0 -74
  278. package/dist/core/metrics-store.js +0 -187
  279. package/dist/core/metrics-store.js.map +0 -1
  280. package/dist/core/one-time-skills.d.ts +0 -27
  281. package/dist/core/one-time-skills.js +0 -185
  282. package/dist/core/one-time-skills.js.map +0 -1
  283. package/dist/core/port-utils.d.ts +0 -23
  284. package/dist/core/port-utils.js +0 -83
  285. package/dist/core/port-utils.js.map +0 -1
  286. package/dist/core/process-manager.d.ts +0 -99
  287. package/dist/core/process-manager.js +0 -738
  288. package/dist/core/process-manager.js.map +0 -1
  289. package/dist/core/process-tree.d.ts +0 -17
  290. package/dist/core/process-tree.js +0 -64
  291. package/dist/core/process-tree.js.map +0 -1
  292. package/dist/core/project-overview.d.ts +0 -52
  293. package/dist/core/project-overview.js +0 -122
  294. package/dist/core/project-overview.js.map +0 -1
  295. package/dist/core/providers/api-base.d.ts +0 -24
  296. package/dist/core/providers/api-base.js +0 -44
  297. package/dist/core/providers/api-base.js.map +0 -1
  298. package/dist/core/providers/credentials.d.ts +0 -93
  299. package/dist/core/providers/credentials.js +0 -88
  300. package/dist/core/providers/credentials.js.map +0 -1
  301. package/dist/core/providers/deploy-provider.d.ts +0 -327
  302. package/dist/core/providers/deploy-provider.js +0 -25
  303. package/dist/core/providers/deploy-provider.js.map +0 -1
  304. package/dist/core/providers/egress.d.ts +0 -58
  305. package/dist/core/providers/egress.js +0 -124
  306. package/dist/core/providers/egress.js.map +0 -1
  307. package/dist/core/providers/host-bridge.d.ts +0 -20
  308. package/dist/core/providers/host-bridge.js +0 -57
  309. package/dist/core/providers/host-bridge.js.map +0 -1
  310. package/dist/core/providers/host-provider.d.ts +0 -160
  311. package/dist/core/providers/host-provider.js +0 -2
  312. package/dist/core/providers/host-provider.js.map +0 -1
  313. package/dist/core/providers/oauth.d.ts +0 -97
  314. package/dist/core/providers/oauth.js +0 -238
  315. package/dist/core/providers/oauth.js.map +0 -1
  316. package/dist/core/providers/project-resolution.d.ts +0 -81
  317. package/dist/core/providers/project-resolution.js +0 -101
  318. package/dist/core/providers/project-resolution.js.map +0 -1
  319. package/dist/core/providers/registry.d.ts +0 -73
  320. package/dist/core/providers/registry.js +0 -53
  321. package/dist/core/providers/registry.js.map +0 -1
  322. package/dist/core/providers/strings.d.ts +0 -95
  323. package/dist/core/providers/strings.js +0 -59
  324. package/dist/core/providers/strings.js.map +0 -1
  325. package/dist/core/public-config.d.ts +0 -18
  326. package/dist/core/public-config.js +0 -76
  327. package/dist/core/public-config.js.map +0 -1
  328. package/dist/core/read-only-files.d.ts +0 -28
  329. package/dist/core/read-only-files.js +0 -93
  330. package/dist/core/read-only-files.js.map +0 -1
  331. package/dist/core/repo-create.d.ts +0 -11
  332. package/dist/core/repo-create.js +0 -54
  333. package/dist/core/repo-create.js.map +0 -1
  334. package/dist/core/repo-match.d.ts +0 -12
  335. package/dist/core/repo-match.js +0 -40
  336. package/dist/core/repo-match.js.map +0 -1
  337. package/dist/core/repo-onboard.d.ts +0 -297
  338. package/dist/core/repo-onboard.js +0 -667
  339. package/dist/core/repo-onboard.js.map +0 -1
  340. package/dist/core/repro-bundle.d.ts +0 -30
  341. package/dist/core/repro-bundle.js +0 -116
  342. package/dist/core/repro-bundle.js.map +0 -1
  343. package/dist/core/service-graph.d.ts +0 -50
  344. package/dist/core/service-graph.js +0 -143
  345. package/dist/core/service-graph.js.map +0 -1
  346. package/dist/core/service-health.d.ts +0 -10
  347. package/dist/core/service-health.js +0 -46
  348. package/dist/core/service-health.js.map +0 -1
  349. package/dist/core/service-log-source.d.ts +0 -9
  350. package/dist/core/service-log-source.js +0 -49
  351. package/dist/core/service-log-source.js.map +0 -1
  352. package/dist/core/service-registry.d.ts +0 -52
  353. package/dist/core/service-registry.js +0 -101
  354. package/dist/core/service-registry.js.map +0 -1
  355. package/dist/core/snapshot-manager.d.ts +0 -62
  356. package/dist/core/snapshot-manager.js +0 -219
  357. package/dist/core/snapshot-manager.js.map +0 -1
  358. package/dist/core/ssh-servers.d.ts +0 -89
  359. package/dist/core/ssh-servers.js +0 -251
  360. package/dist/core/ssh-servers.js.map +0 -1
  361. package/dist/core/ssh-service-runner.d.ts +0 -7
  362. package/dist/core/ssh-service-runner.js +0 -36
  363. package/dist/core/ssh-service-runner.js.map +0 -1
  364. package/dist/core/ssh-setup.d.ts +0 -11
  365. package/dist/core/ssh-setup.js +0 -49
  366. package/dist/core/ssh-setup.js.map +0 -1
  367. package/dist/core/system-processes.d.ts +0 -29
  368. package/dist/core/system-processes.js +0 -119
  369. package/dist/core/system-processes.js.map +0 -1
  370. package/dist/core/terminal-manager.d.ts +0 -123
  371. package/dist/core/terminal-manager.js +0 -470
  372. package/dist/core/terminal-manager.js.map +0 -1
  373. package/dist/core/terminal-session.d.ts +0 -122
  374. package/dist/core/terminal-session.js +0 -242
  375. package/dist/core/terminal-session.js.map +0 -1
  376. package/dist/core/terminal-spawn.d.ts +0 -26
  377. package/dist/core/terminal-spawn.js +0 -63
  378. package/dist/core/terminal-spawn.js.map +0 -1
  379. package/dist/core/test-runner.d.ts +0 -69
  380. package/dist/core/test-runner.js +0 -199
  381. package/dist/core/test-runner.js.map +0 -1
  382. package/dist/core/timeline-store.d.ts +0 -20
  383. package/dist/core/timeline-store.js +0 -36
  384. package/dist/core/timeline-store.js.map +0 -1
  385. package/dist/core/tool-call-store.d.ts +0 -25
  386. package/dist/core/tool-call-store.js +0 -62
  387. package/dist/core/tool-call-store.js.map +0 -1
  388. package/dist/core/types.d.ts +0 -312
  389. package/dist/core/types.js +0 -2
  390. package/dist/core/types.js.map +0 -1
  391. package/dist/core/usage-history.d.ts +0 -81
  392. package/dist/core/usage-history.js +0 -149
  393. package/dist/core/usage-history.js.map +0 -1
  394. package/dist/core/vercel-actions.d.ts +0 -71
  395. package/dist/core/vercel-actions.js +0 -109
  396. package/dist/core/vercel-actions.js.map +0 -1
  397. package/dist/core/vercel-auth.d.ts +0 -40
  398. package/dist/core/vercel-auth.js +0 -88
  399. package/dist/core/vercel-auth.js.map +0 -1
  400. package/dist/core/vercel-context.d.ts +0 -2
  401. package/dist/core/vercel-context.js +0 -97
  402. package/dist/core/vercel-context.js.map +0 -1
  403. package/dist/core/vercel-manager.d.ts +0 -268
  404. package/dist/core/vercel-manager.js +0 -401
  405. package/dist/core/vercel-manager.js.map +0 -1
  406. package/dist/core/vercel-oauth.d.ts +0 -37
  407. package/dist/core/vercel-oauth.js +0 -57
  408. package/dist/core/vercel-oauth.js.map +0 -1
  409. package/dist/core/vercel-provider.d.ts +0 -23
  410. package/dist/core/vercel-provider.js +0 -276
  411. package/dist/core/vercel-provider.js.map +0 -1
  412. package/dist/core/vultr-actions.d.ts +0 -52
  413. package/dist/core/vultr-actions.js +0 -62
  414. package/dist/core/vultr-actions.js.map +0 -1
  415. package/dist/core/vultr-auth.d.ts +0 -32
  416. package/dist/core/vultr-auth.js +0 -54
  417. package/dist/core/vultr-auth.js.map +0 -1
  418. package/dist/core/vultr-context.d.ts +0 -2
  419. package/dist/core/vultr-context.js +0 -55
  420. package/dist/core/vultr-context.js.map +0 -1
  421. package/dist/core/vultr-manager.d.ts +0 -113
  422. package/dist/core/vultr-manager.js +0 -170
  423. package/dist/core/vultr-manager.js.map +0 -1
  424. package/dist/core/vultr-provider.d.ts +0 -69
  425. package/dist/core/vultr-provider.js +0 -226
  426. package/dist/core/vultr-provider.js.map +0 -1
  427. package/dist/core/workflow-triggers.d.ts +0 -139
  428. package/dist/core/workflow-triggers.js +0 -208
  429. package/dist/core/workflow-triggers.js.map +0 -1
  430. package/dist/core/workflows.d.ts +0 -290
  431. package/dist/core/workflows.js +0 -190
  432. package/dist/core/workflows.js.map +0 -1
  433. package/dist/index.d.ts +0 -2
  434. package/dist/index.js +0 -66
  435. package/dist/index.js.map +0 -1
  436. package/dist/mcp/server.d.ts +0 -37
  437. package/dist/mcp/server.js +0 -84
  438. package/dist/mcp/server.js.map +0 -1
  439. package/dist/mcp/tools/agent-env.d.ts +0 -9
  440. package/dist/mcp/tools/agent-env.js +0 -160
  441. package/dist/mcp/tools/agent-env.js.map +0 -1
  442. package/dist/mcp/tools/agent-profiles.d.ts +0 -9
  443. package/dist/mcp/tools/agent-profiles.js +0 -197
  444. package/dist/mcp/tools/agent-profiles.js.map +0 -1
  445. package/dist/mcp/tools/agent-registry.d.ts +0 -9
  446. package/dist/mcp/tools/agent-registry.js +0 -81
  447. package/dist/mcp/tools/agent-registry.js.map +0 -1
  448. package/dist/mcp/tools/agent.d.ts +0 -4
  449. package/dist/mcp/tools/agent.js +0 -29
  450. package/dist/mcp/tools/agent.js.map +0 -1
  451. package/dist/mcp/tools/context.d.ts +0 -36
  452. package/dist/mcp/tools/context.js +0 -69
  453. package/dist/mcp/tools/context.js.map +0 -1
  454. package/dist/mcp/tools/database.d.ts +0 -9
  455. package/dist/mcp/tools/database.js +0 -166
  456. package/dist/mcp/tools/database.js.map +0 -1
  457. package/dist/mcp/tools/docs.d.ts +0 -29
  458. package/dist/mcp/tools/docs.js +0 -134
  459. package/dist/mcp/tools/docs.js.map +0 -1
  460. package/dist/mcp/tools/errors.d.ts +0 -12
  461. package/dist/mcp/tools/errors.js +0 -47
  462. package/dist/mcp/tools/errors.js.map +0 -1
  463. package/dist/mcp/tools/git.d.ts +0 -4
  464. package/dist/mcp/tools/git.js +0 -209
  465. package/dist/mcp/tools/git.js.map +0 -1
  466. package/dist/mcp/tools/github.d.ts +0 -4
  467. package/dist/mcp/tools/github.js +0 -196
  468. package/dist/mcp/tools/github.js.map +0 -1
  469. package/dist/mcp/tools/index.d.ts +0 -36
  470. package/dist/mcp/tools/index.js +0 -61
  471. package/dist/mcp/tools/index.js.map +0 -1
  472. package/dist/mcp/tools/onboard.d.ts +0 -10
  473. package/dist/mcp/tools/onboard.js +0 -30
  474. package/dist/mcp/tools/onboard.js.map +0 -1
  475. package/dist/mcp/tools/provider.d.ts +0 -16
  476. package/dist/mcp/tools/provider.js +0 -110
  477. package/dist/mcp/tools/provider.js.map +0 -1
  478. package/dist/mcp/tools/services.d.ts +0 -13
  479. package/dist/mcp/tools/services.js +0 -204
  480. package/dist/mcp/tools/services.js.map +0 -1
  481. package/dist/mcp/tools/snapshots.d.ts +0 -8
  482. package/dist/mcp/tools/snapshots.js +0 -37
  483. package/dist/mcp/tools/snapshots.js.map +0 -1
  484. package/dist/mcp/tools/terminal.d.ts +0 -4
  485. package/dist/mcp/tools/terminal.js +0 -38
  486. package/dist/mcp/tools/terminal.js.map +0 -1
  487. package/dist/tui/app.d.ts +0 -22
  488. package/dist/tui/app.js +0 -138
  489. package/dist/tui/app.js.map +0 -1
  490. package/dist/web/agent-info.d.ts +0 -82
  491. package/dist/web/agent-info.js +0 -775
  492. package/dist/web/agent-info.js.map +0 -1
  493. package/dist/web/client/assets/SymbolsNerdFontMono-Regular-DDncdh2F.ttf +0 -0
  494. package/dist/web/client/assets/code-editor-TE0sjFGO.js +0 -30
  495. package/dist/web/client/assets/context-graph-B9MnBpp6.js +0 -7
  496. package/dist/web/client/assets/core-DhEqZVGG.js +0 -1
  497. package/dist/web/client/assets/event-BK_86lmQ.js +0 -1
  498. package/dist/web/client/assets/index-BhDAhmA1.js +0 -1
  499. package/dist/web/client/assets/index-CSo__8A6.css +0 -1
  500. package/dist/web/client/assets/index-DAJvBqn9.js +0 -352
  501. package/dist/web/client/assets/nomoreide-favicon-Ds7Tgj9p.svg +0 -24
  502. package/dist/web/client/assets/system-process-table-DetWu0Gj.js +0 -1
  503. package/dist/web/client/assets/window-DlR023_X.js +0 -1
  504. package/dist/web/client/index.html +0 -44
  505. package/dist/web/dashboard.d.ts +0 -61
  506. package/dist/web/dashboard.js +0 -221
  507. package/dist/web/dashboard.js.map +0 -1
  508. package/dist/web/directories.d.ts +0 -27
  509. package/dist/web/directories.js +0 -81
  510. package/dist/web/directories.js.map +0 -1
  511. package/dist/web/http-utils.d.ts +0 -13
  512. package/dist/web/http-utils.js +0 -72
  513. package/dist/web/http-utils.js.map +0 -1
  514. package/dist/web/routes/agent-chat-routes.d.ts +0 -3
  515. package/dist/web/routes/agent-chat-routes.js +0 -186
  516. package/dist/web/routes/agent-chat-routes.js.map +0 -1
  517. package/dist/web/routes/agent-env-routes.d.ts +0 -9
  518. package/dist/web/routes/agent-env-routes.js +0 -86
  519. package/dist/web/routes/agent-env-routes.js.map +0 -1
  520. package/dist/web/routes/agent-profile-routes.d.ts +0 -8
  521. package/dist/web/routes/agent-profile-routes.js +0 -211
  522. package/dist/web/routes/agent-profile-routes.js.map +0 -1
  523. package/dist/web/routes/agent-registry-routes.d.ts +0 -2
  524. package/dist/web/routes/agent-registry-routes.js +0 -375
  525. package/dist/web/routes/agent-registry-routes.js.map +0 -1
  526. package/dist/web/routes/agent-routes.d.ts +0 -3
  527. package/dist/web/routes/agent-routes.js +0 -73
  528. package/dist/web/routes/agent-routes.js.map +0 -1
  529. package/dist/web/routes/agent-settings-routes.d.ts +0 -8
  530. package/dist/web/routes/agent-settings-routes.js +0 -67
  531. package/dist/web/routes/agent-settings-routes.js.map +0 -1
  532. package/dist/web/routes/context-library-routes.d.ts +0 -2
  533. package/dist/web/routes/context-library-routes.js +0 -139
  534. package/dist/web/routes/context-library-routes.js.map +0 -1
  535. package/dist/web/routes/context.d.ts +0 -73
  536. package/dist/web/routes/context.js +0 -48
  537. package/dist/web/routes/context.js.map +0 -1
  538. package/dist/web/routes/dashboard-routes.d.ts +0 -3
  539. package/dist/web/routes/dashboard-routes.js +0 -47
  540. package/dist/web/routes/dashboard-routes.js.map +0 -1
  541. package/dist/web/routes/database-routes.d.ts +0 -3
  542. package/dist/web/routes/database-routes.js +0 -341
  543. package/dist/web/routes/database-routes.js.map +0 -1
  544. package/dist/web/routes/docker-routes.d.ts +0 -7
  545. package/dist/web/routes/docker-routes.js +0 -122
  546. package/dist/web/routes/docker-routes.js.map +0 -1
  547. package/dist/web/routes/errors-routes.d.ts +0 -3
  548. package/dist/web/routes/errors-routes.js +0 -77
  549. package/dist/web/routes/errors-routes.js.map +0 -1
  550. package/dist/web/routes/extensions-routes.d.ts +0 -14
  551. package/dist/web/routes/extensions-routes.js +0 -21
  552. package/dist/web/routes/extensions-routes.js.map +0 -1
  553. package/dist/web/routes/git-routes.d.ts +0 -3
  554. package/dist/web/routes/git-routes.js +0 -598
  555. package/dist/web/routes/git-routes.js.map +0 -1
  556. package/dist/web/routes/github-context.d.ts +0 -11
  557. package/dist/web/routes/github-context.js +0 -34
  558. package/dist/web/routes/github-context.js.map +0 -1
  559. package/dist/web/routes/github-routes.d.ts +0 -2
  560. package/dist/web/routes/github-routes.js +0 -699
  561. package/dist/web/routes/github-routes.js.map +0 -1
  562. package/dist/web/routes/host-routes.d.ts +0 -2
  563. package/dist/web/routes/host-routes.js +0 -188
  564. package/dist/web/routes/host-routes.js.map +0 -1
  565. package/dist/web/routes/index.d.ts +0 -10
  566. package/dist/web/routes/index.js +0 -72
  567. package/dist/web/routes/index.js.map +0 -1
  568. package/dist/web/routes/jetbrains-import-routes.d.ts +0 -2
  569. package/dist/web/routes/jetbrains-import-routes.js +0 -121
  570. package/dist/web/routes/jetbrains-import-routes.js.map +0 -1
  571. package/dist/web/routes/log-sources-routes.d.ts +0 -6
  572. package/dist/web/routes/log-sources-routes.js +0 -102
  573. package/dist/web/routes/log-sources-routes.js.map +0 -1
  574. package/dist/web/routes/metrics-routes.d.ts +0 -3
  575. package/dist/web/routes/metrics-routes.js +0 -60
  576. package/dist/web/routes/metrics-routes.js.map +0 -1
  577. package/dist/web/routes/onboard-routes.d.ts +0 -9
  578. package/dist/web/routes/onboard-routes.js +0 -146
  579. package/dist/web/routes/onboard-routes.js.map +0 -1
  580. package/dist/web/routes/overview-routes.d.ts +0 -2
  581. package/dist/web/routes/overview-routes.js +0 -36
  582. package/dist/web/routes/overview-routes.js.map +0 -1
  583. package/dist/web/routes/provider-routes.d.ts +0 -2
  584. package/dist/web/routes/provider-routes.js +0 -558
  585. package/dist/web/routes/provider-routes.js.map +0 -1
  586. package/dist/web/routes/service-routes.d.ts +0 -3
  587. package/dist/web/routes/service-routes.js +0 -511
  588. package/dist/web/routes/service-routes.js.map +0 -1
  589. package/dist/web/routes/settings-routes.d.ts +0 -2
  590. package/dist/web/routes/settings-routes.js +0 -151
  591. package/dist/web/routes/settings-routes.js.map +0 -1
  592. package/dist/web/routes/shell-routes.d.ts +0 -22
  593. package/dist/web/routes/shell-routes.js +0 -75
  594. package/dist/web/routes/shell-routes.js.map +0 -1
  595. package/dist/web/routes/skills-routes.d.ts +0 -2
  596. package/dist/web/routes/skills-routes.js +0 -49
  597. package/dist/web/routes/skills-routes.js.map +0 -1
  598. package/dist/web/routes/snapshot-routes.d.ts +0 -8
  599. package/dist/web/routes/snapshot-routes.js +0 -194
  600. package/dist/web/routes/snapshot-routes.js.map +0 -1
  601. package/dist/web/routes/ssh-server-routes.d.ts +0 -10
  602. package/dist/web/routes/ssh-server-routes.js +0 -163
  603. package/dist/web/routes/ssh-server-routes.js.map +0 -1
  604. package/dist/web/routes/terminal-routes.d.ts +0 -7
  605. package/dist/web/routes/terminal-routes.js +0 -313
  606. package/dist/web/routes/terminal-routes.js.map +0 -1
  607. package/dist/web/routes/workflow-routes.d.ts +0 -8
  608. package/dist/web/routes/workflow-routes.js +0 -45
  609. package/dist/web/routes/workflow-routes.js.map +0 -1
  610. package/dist/web/routes/workflow-trigger-routes.d.ts +0 -9
  611. package/dist/web/routes/workflow-trigger-routes.js +0 -78
  612. package/dist/web/routes/workflow-trigger-routes.js.map +0 -1
  613. package/dist/web/server.d.ts +0 -31
  614. package/dist/web/server.js +0 -325
  615. package/dist/web/server.js.map +0 -1
  616. package/dist/web/service-tester.d.ts +0 -16
  617. package/dist/web/service-tester.js +0 -107
  618. package/dist/web/service-tester.js.map +0 -1
  619. package/dist/web/static-assets.d.ts +0 -9
  620. package/dist/web/static-assets.js +0 -77
  621. package/dist/web/static-assets.js.map +0 -1
  622. package/dist/web/usage-info.d.ts +0 -56
  623. package/dist/web/usage-info.js +0 -265
  624. package/dist/web/usage-info.js.map +0 -1
@@ -1,738 +0,0 @@
1
- import { spawn } from "node:child_process";
2
- import { readDockerServiceLogs, readDockerServiceStatus, startDockerService, stopDockerService, } from "./docker-service-runner.js";
3
- import { startHttpInspector, } from "./http-inspector.js";
4
- import { getPortHolder, isPortAvailable } from "./port-utils.js";
5
- import { readProcessTree } from "./process-tree.js";
6
- import { resolveStartOrder } from "./service-graph.js";
7
- import { isPidAlive, } from "./service-registry.js";
8
- import { createSshCommand } from "./ssh-service-runner.js";
9
- import { entriesFromLines, envFilePath, readEnvFile } from "./env-file.js";
10
- export class PortConflictError extends Error {
11
- code = "PORT_IN_USE";
12
- service;
13
- port;
14
- holder;
15
- constructor(service, port, holder) {
16
- const owner = holder ? ` (held by pid ${holder.pid} — ${holder.command})` : "";
17
- super(`Port ${port} is already in use for ${service}${owner}.`);
18
- this.name = "PortConflictError";
19
- this.service = service;
20
- this.port = port;
21
- this.holder = holder;
22
- }
23
- }
24
- export class ProcessManager {
25
- runtimes = new Map();
26
- configStore;
27
- logStore;
28
- stopTimeoutMs;
29
- timelineStore;
30
- registry;
31
- pendingWrites = new Set();
32
- constructor(options) {
33
- this.configStore = options.configStore;
34
- this.logStore = options.logStore;
35
- this.stopTimeoutMs = options.stopTimeoutMs ?? 3000;
36
- this.timelineStore = options.timelineStore;
37
- this.registry = options.registry;
38
- }
39
- async startService(name, options = {}) {
40
- const service = await this.getService(name);
41
- const existing = this.runtimes.get(name);
42
- if (existing?.status.state === "running") {
43
- return { ...existing.status };
44
- }
45
- const kind = resolveKind(service);
46
- if (kind === "docker-compose") {
47
- return this.startDockerComposeService(name, service);
48
- }
49
- // Another session may already be running this exact service. Adopt its
50
- // status instead of spawning a duplicate — this also covers portless
51
- // services, where the port check below cannot detect the conflict.
52
- const tracked = this.registry?.get(name);
53
- if (tracked) {
54
- return registryEntryToStatus(tracked);
55
- }
56
- if (service.port && !(await isPortAvailable(service.port))) {
57
- const holder = await getPortHolder(service.port);
58
- if (options.killHolder && holder) {
59
- await killHolder(holder);
60
- if (!(await waitForPortFree(service.port, 3000))) {
61
- throw new PortConflictError(name, service.port, holder);
62
- }
63
- }
64
- else {
65
- throw new PortConflictError(name, service.port, holder);
66
- }
67
- }
68
- const child = await spawnService(name, service, kind);
69
- const runtime = {
70
- child,
71
- stopping: false,
72
- status: {
73
- name,
74
- state: "running",
75
- kind,
76
- host: kind === "ssh" ? service.host : undefined,
77
- pid: child.pid,
78
- startedAt: new Date().toISOString(),
79
- },
80
- };
81
- this.runtimes.set(name, runtime);
82
- if (child.pid) {
83
- this.registry?.record({
84
- name,
85
- pid: child.pid,
86
- pgid: child.pid, // detached spawn → child.pid is the process-group leader
87
- port: service.port,
88
- kind,
89
- host: kind === "ssh" ? service.host : undefined,
90
- startedAt: runtime.status.startedAt ?? new Date().toISOString(),
91
- ownerPid: process.pid,
92
- });
93
- }
94
- this.appendTimeline({
95
- kind: "service.lifecycle",
96
- service: name,
97
- severity: "info",
98
- title: `${name} started`,
99
- data: {
100
- pid: child.pid,
101
- },
102
- });
103
- this.captureStream(name, "stdout", child.stdout);
104
- this.captureStream(name, "stderr", child.stderr);
105
- child.once("exit", (exitCode, signal) => {
106
- const nextState = runtime.stopping ? "stopped" : "exited";
107
- runtime.status = {
108
- ...runtime.status,
109
- state: nextState,
110
- exitedAt: new Date().toISOString(),
111
- exitCode,
112
- signal,
113
- };
114
- runtime.child = undefined;
115
- this.registry?.remove(name);
116
- void this.stopInspector(runtime);
117
- this.appendTimeline({
118
- kind: "service.lifecycle",
119
- service: name,
120
- severity: nextState === "exited" && exitCode ? "error" : "info",
121
- title: `${name} ${nextState}`,
122
- data: {
123
- exitCode,
124
- signal,
125
- },
126
- });
127
- });
128
- child.once("error", (error) => {
129
- runtime.status = {
130
- ...runtime.status,
131
- state: "exited",
132
- exitedAt: new Date().toISOString(),
133
- exitCode: 1,
134
- signal: null,
135
- };
136
- this.registry?.remove(name);
137
- this.trackWrite(this.logStore.append(name, "stderr", error.message));
138
- this.appendTimeline({
139
- kind: "service.lifecycle",
140
- service: name,
141
- severity: "error",
142
- title: `${name} failed`,
143
- detail: error.message,
144
- });
145
- });
146
- return { ...runtime.status };
147
- }
148
- async stopService(name) {
149
- const runtime = this.runtimes.get(name);
150
- if (runtime?.status.kind === "docker-compose" && runtime.status.state === "running") {
151
- return this.stopDockerComposeService(name, runtime);
152
- }
153
- if (!runtime?.child || runtime.status.state !== "running") {
154
- // No live child in this session — a sibling session may own it. If the
155
- // registry has a live entry, signal its process group to stop it.
156
- const tracked = this.registry?.get(name);
157
- if (tracked) {
158
- await stopByPid(tracked.pid, tracked.pgid, this.stopTimeoutMs);
159
- this.registry?.remove(name);
160
- }
161
- const stopped = { name, state: "stopped" };
162
- this.runtimes.set(name, { status: stopped, stopping: false });
163
- this.appendTimeline({
164
- kind: "service.lifecycle",
165
- service: name,
166
- severity: "info",
167
- title: `${name} stopped`,
168
- });
169
- return stopped;
170
- }
171
- runtime.stopping = true;
172
- await stopChild(runtime.child, this.stopTimeoutMs);
173
- const stopped = {
174
- ...runtime.status,
175
- state: "stopped",
176
- exitedAt: runtime.status.exitedAt ?? new Date().toISOString(),
177
- };
178
- runtime.status = stopped;
179
- runtime.child = undefined;
180
- this.appendTimeline({
181
- kind: "service.lifecycle",
182
- service: name,
183
- severity: "info",
184
- title: `${name} stopped`,
185
- });
186
- return { ...stopped };
187
- }
188
- async restartService(name, options = {}) {
189
- await this.stopService(name);
190
- return this.startService(name, options);
191
- }
192
- async setInspectorEnabled(name, enabled) {
193
- const runtime = this.runtimes.get(name);
194
- if (!runtime) {
195
- throw new Error(`Service "${name}" is not running.`);
196
- }
197
- runtime.inspectorEnabled = enabled;
198
- if (enabled) {
199
- await this.maybeStartInspector(name);
200
- }
201
- else {
202
- await this.stopInspector(runtime);
203
- }
204
- runtime.status = {
205
- ...runtime.status,
206
- inspector: this.inspectorStatus(runtime),
207
- };
208
- return { ...runtime.status };
209
- }
210
- async maybeStartInspector(name) {
211
- const runtime = this.runtimes.get(name);
212
- if (!runtime?.inspectorEnabled || runtime.inspectorHandle)
213
- return;
214
- const upstreamPort = portFromUrl(runtime.status.url);
215
- if (!upstreamPort)
216
- return;
217
- const handle = await startHttpInspector({
218
- upstreamPort,
219
- onEvent: (event) => this.recordInspectorEvent(name, event),
220
- });
221
- runtime.inspectorHandle = handle;
222
- runtime.status = {
223
- ...runtime.status,
224
- inspector: { enabled: true, port: handle.port, upstreamPort },
225
- };
226
- this.appendTimeline({
227
- kind: "service.lifecycle",
228
- service: name,
229
- severity: "info",
230
- title: `${name} HTTP inspector on :${handle.port}`,
231
- detail: `Proxying to upstream :${upstreamPort}`,
232
- });
233
- }
234
- async stopInspector(runtime) {
235
- if (!runtime.inspectorHandle)
236
- return;
237
- const handle = runtime.inspectorHandle;
238
- runtime.inspectorHandle = undefined;
239
- await handle.stop();
240
- }
241
- inspectorStatus(runtime) {
242
- if (!runtime.inspectorEnabled)
243
- return undefined;
244
- return {
245
- enabled: true,
246
- port: runtime.inspectorHandle?.port,
247
- upstreamPort: portFromUrl(runtime.status.url),
248
- };
249
- }
250
- recordInspectorEvent(name, event) {
251
- const severity = event.status >= 500 ? "error" : event.status >= 400 ? "warning" : "info";
252
- this.appendTimeline({
253
- kind: "service.http",
254
- service: name,
255
- severity,
256
- title: `${event.method} ${event.path} → ${event.status}`,
257
- detail: `${event.durationMs} ms`,
258
- timestamp: event.startedAt,
259
- data: {
260
- id: event.id,
261
- method: event.method,
262
- path: event.path,
263
- status: event.status,
264
- durationMs: event.durationMs,
265
- reqBytes: event.reqBytes,
266
- resBytes: event.resBytes,
267
- },
268
- });
269
- }
270
- async startBundle(name) {
271
- const bundle = await this.getBundle(name);
272
- const config = await this.configStore.load();
273
- // Topologically order the bundle (and any transitive deps it declares) so
274
- // dependencies come up before dependents. Throws DependencyCycleError on a
275
- // cycle, surfacing a clear message instead of a half-started bundle.
276
- const order = resolveStartOrder(config.services, bundle.services);
277
- const byName = new Map(config.services.map((service) => [service.name, service]));
278
- const statuses = [];
279
- for (const serviceName of order) {
280
- // Each declared dependency precedes this service in `order` and is thus
281
- // already started; wait for it to report ready before the dependent.
282
- for (const dep of byName.get(serviceName)?.dependsOn ?? []) {
283
- if (byName.has(dep))
284
- await this.waitForServiceReady(dep);
285
- }
286
- statuses.push(await this.startService(serviceName));
287
- }
288
- return statuses;
289
- }
290
- async stopBundle(name) {
291
- const bundle = await this.getBundle(name);
292
- const order = await this.safeStopOrder(bundle);
293
- const statuses = [];
294
- // Reverse dependency order: stop dependents before the services they need.
295
- for (const serviceName of order.reverse()) {
296
- statuses.push(await this.stopService(serviceName));
297
- }
298
- return statuses;
299
- }
300
- /**
301
- * Stop order scoped to the bundle's own members, in dependency order so we
302
- * can reverse it. Falls back to declaration order if a cycle makes a topo
303
- * sort impossible — stopping must never throw the way a start can.
304
- */
305
- async safeStopOrder(bundle) {
306
- try {
307
- const config = await this.configStore.load();
308
- const resolved = resolveStartOrder(config.services, bundle.services);
309
- const inBundle = new Set(bundle.services);
310
- return resolved.filter((serviceName) => inBundle.has(serviceName));
311
- }
312
- catch {
313
- return bundle.services.slice();
314
- }
315
- }
316
- /**
317
- * Wait until a dependency looks ready before starting services that depend on
318
- * it. A service with a port is "ready" once that port is bound; portless
319
- * services have no probe, so we return immediately. Times out (warning, not
320
- * error) so a slow/never-binding dependency can't wedge a bundle start.
321
- */
322
- async waitForServiceReady(name, timeoutMs = 15000) {
323
- const service = await this.getService(name).catch(() => undefined);
324
- if (!service?.port)
325
- return;
326
- const deadline = Date.now() + timeoutMs;
327
- while (Date.now() < deadline) {
328
- if (this.runtimes.get(name)?.status.state === "exited")
329
- return;
330
- if (!(await isPortAvailable(service.port)))
331
- return; // port bound → ready
332
- await new Promise((resolve) => setTimeout(resolve, 250));
333
- }
334
- this.appendTimeline({
335
- kind: "service.health",
336
- service: name,
337
- severity: "warning",
338
- title: `${name} did not become ready in ${Math.round(timeoutMs / 1000)}s`,
339
- detail: `Port ${service.port} never came up; starting dependents anyway.`,
340
- });
341
- }
342
- async restartBundle(name) {
343
- await this.stopBundle(name);
344
- return this.startBundle(name);
345
- }
346
- async stopAll() {
347
- await Promise.all([...this.runtimes.keys()].map((name) => this.stopService(name)));
348
- await this.flushWrites();
349
- }
350
- /**
351
- * Resolves once every log/timeline write started so far has settled. Exit
352
- * handlers append after the child is gone, so without this a caller that
353
- * tears down the log directory right after `stopAll()` races those writes.
354
- */
355
- async flushWrites() {
356
- while (this.pendingWrites.size > 0) {
357
- await Promise.all([...this.pendingWrites]);
358
- }
359
- }
360
- killAllSync(signal = "SIGTERM") {
361
- for (const runtime of this.runtimes.values()) {
362
- if (!runtime.child || runtime.child.exitCode !== null)
363
- continue;
364
- signalProcessTree(runtime.child, signal);
365
- }
366
- // Drop this session's entries synchronously; the async exit handlers above
367
- // may not run before the host process exits.
368
- this.registry?.removeOwnedBy(process.pid);
369
- }
370
- installShutdownHandlers() {
371
- let firing = false;
372
- const handle = (signal) => () => {
373
- if (firing)
374
- return;
375
- firing = true;
376
- this.killAllSync("SIGTERM");
377
- // Re-raise the signal with default behavior so the host exits.
378
- setTimeout(() => process.kill(process.pid, signal), 50);
379
- };
380
- const onExit = () => this.killAllSync("SIGTERM");
381
- const sigint = handle("SIGINT");
382
- const sigterm = handle("SIGTERM");
383
- const sighup = handle("SIGHUP");
384
- process.once("SIGINT", sigint);
385
- process.once("SIGTERM", sigterm);
386
- process.once("SIGHUP", sighup);
387
- process.once("exit", onExit);
388
- return () => {
389
- process.removeListener("SIGINT", sigint);
390
- process.removeListener("SIGTERM", sigterm);
391
- process.removeListener("SIGHUP", sighup);
392
- process.removeListener("exit", onExit);
393
- };
394
- }
395
- status() {
396
- const services = {};
397
- for (const [name, runtime] of this.runtimes.entries()) {
398
- services[name] = { ...runtime.status };
399
- }
400
- this.mergeRegistry(services);
401
- return { services };
402
- }
403
- async statusWithResources() {
404
- const services = {};
405
- for (const [name, runtime] of this.runtimes.entries()) {
406
- const status = { ...runtime.status };
407
- if (status.pid && status.state === "running") {
408
- status.processTree = await readProcessTree(status.pid);
409
- }
410
- status.inspector = this.inspectorStatus(runtime);
411
- services[name] = status;
412
- }
413
- this.mergeRegistry(services);
414
- for (const status of Object.values(services)) {
415
- if (status.pid && status.state === "running" && !status.processTree) {
416
- status.processTree = await readProcessTree(status.pid);
417
- }
418
- }
419
- return { services };
420
- }
421
- /**
422
- * Fold in services started by sibling sessions. A registry entry wins only
423
- * when this session has no running view of that service, so a locally-owned
424
- * "running" status is never overwritten by the shared snapshot.
425
- */
426
- mergeRegistry(services) {
427
- if (!this.registry)
428
- return;
429
- for (const entry of this.registry.list()) {
430
- const local = services[entry.name];
431
- if (!local || local.state !== "running") {
432
- services[entry.name] = registryEntryToStatus(entry);
433
- }
434
- }
435
- }
436
- async startDockerComposeService(name, service) {
437
- const target = toDockerTarget(name, service);
438
- const info = await startDockerService(target);
439
- const status = {
440
- name,
441
- state: "running",
442
- kind: "docker-compose",
443
- startedAt: new Date().toISOString(),
444
- containerId: info.containerId,
445
- };
446
- this.runtimes.set(name, { status, stopping: false });
447
- this.appendTimeline({
448
- kind: "service.lifecycle",
449
- service: name,
450
- severity: "info",
451
- title: `${name} started`,
452
- data: { containerId: info.containerId },
453
- });
454
- return { ...status };
455
- }
456
- async stopDockerComposeService(name, runtime) {
457
- const service = await this.getService(name);
458
- runtime.stopping = true;
459
- await stopDockerService(toDockerTarget(name, service));
460
- const stopped = {
461
- ...runtime.status,
462
- state: "stopped",
463
- exitedAt: new Date().toISOString(),
464
- };
465
- runtime.status = stopped;
466
- this.appendTimeline({
467
- kind: "service.lifecycle",
468
- service: name,
469
- severity: "info",
470
- title: `${name} stopped`,
471
- });
472
- return { ...stopped };
473
- }
474
- async readDockerServiceLogs(name, tail = 120) {
475
- const service = await this.getService(name);
476
- if (resolveKind(service) !== "docker-compose") {
477
- throw new Error(`Service "${name}" is not a docker-compose service.`);
478
- }
479
- return readDockerServiceLogs(toDockerTarget(name, service), tail);
480
- }
481
- async readDockerServiceStatus(name) {
482
- const service = await this.getService(name);
483
- if (resolveKind(service) !== "docker-compose") {
484
- throw new Error(`Service "${name}" is not a docker-compose service.`);
485
- }
486
- return readDockerServiceStatus(toDockerTarget(name, service));
487
- }
488
- async getService(name) {
489
- const config = await this.configStore.load();
490
- const service = config.services.find((item) => item.name === name);
491
- if (!service) {
492
- throw new Error(`Service "${name}" is not registered.`);
493
- }
494
- return service;
495
- }
496
- async getBundle(name) {
497
- const config = await this.configStore.load();
498
- const bundle = config.bundles.find((item) => item.name === name);
499
- if (!bundle) {
500
- throw new Error(`Bundle "${name}" is not registered.`);
501
- }
502
- return bundle;
503
- }
504
- captureStream(service, stream, readable) {
505
- if (!readable) {
506
- return;
507
- }
508
- let buffer = "";
509
- readable.on("data", (chunk) => {
510
- buffer += chunk.toString();
511
- const lines = buffer.split(/\r?\n/);
512
- buffer = lines.pop() ?? "";
513
- for (const line of lines) {
514
- if (line.length > 0) {
515
- const url = localUrlFromLine(line);
516
- if (url) {
517
- const runtime = this.runtimes.get(service);
518
- if (runtime) {
519
- runtime.status = { ...runtime.status, url };
520
- this.registry?.update(service, { url });
521
- void this.maybeStartInspector(service);
522
- }
523
- this.appendTimeline({
524
- kind: "service.port",
525
- service,
526
- severity: "info",
527
- title: `${service} reported ${url}`,
528
- detail: url,
529
- });
530
- }
531
- this.trackWrite(this.logStore.append(service, stream, line));
532
- }
533
- }
534
- });
535
- readable.on("end", () => {
536
- if (buffer.length > 0) {
537
- this.trackWrite(this.logStore.append(service, stream, buffer));
538
- buffer = "";
539
- }
540
- });
541
- }
542
- appendTimeline(event) {
543
- if (!this.timelineStore)
544
- return;
545
- this.trackWrite(this.timelineStore.append(event));
546
- }
547
- /**
548
- * Register a fire-and-forget log/timeline write so `flushWrites()` can wait
549
- * for it. These are telemetry about an operation, not the operation itself,
550
- * so a failed write is dropped rather than escalated into an unhandled
551
- * rejection that would take down the daemon (or fail an unrelated test).
552
- */
553
- trackWrite(write) {
554
- const pending = write.then(() => undefined, () => undefined);
555
- this.pendingWrites.add(pending);
556
- void pending.then(() => this.pendingWrites.delete(pending));
557
- }
558
- }
559
- function resolveKind(service) {
560
- return service.kind ?? "local";
561
- }
562
- function registryEntryToStatus(entry) {
563
- return {
564
- name: entry.name,
565
- state: "running",
566
- kind: entry.kind,
567
- pid: entry.pid,
568
- url: entry.url,
569
- host: entry.host,
570
- startedAt: entry.startedAt,
571
- };
572
- }
573
- /**
574
- * Stop a process by pid when we hold no ChildProcess handle for it (it was
575
- * spawned by another session). Signals the whole process group, then escalates
576
- * to SIGKILL if it has not exited within the timeout.
577
- */
578
- async function stopByPid(pid, pgid, timeoutMs) {
579
- signalPid(pid, pgid, "SIGTERM");
580
- const deadline = Date.now() + timeoutMs;
581
- while (Date.now() < deadline) {
582
- if (!isPidAlive(pid))
583
- return;
584
- await new Promise((resolve) => setTimeout(resolve, 50));
585
- }
586
- signalPid(pid, pgid, "SIGKILL");
587
- }
588
- function signalPid(pid, pgid, signal) {
589
- const group = pgid ?? pid;
590
- try {
591
- // Negative pid signals the whole process group (detached spawn → pgid===pid).
592
- process.kill(-group, signal);
593
- }
594
- catch (error) {
595
- if (error.code === "ESRCH")
596
- return;
597
- try {
598
- process.kill(pid, signal);
599
- }
600
- catch {
601
- // ignore
602
- }
603
- }
604
- }
605
- function toDockerTarget(name, service) {
606
- if (!service.cwd || !service.composeService) {
607
- throw new Error(`Service "${name}" is missing docker-compose cwd or composeService.`);
608
- }
609
- return {
610
- cwd: service.cwd,
611
- composeFile: service.composeFile,
612
- composeService: service.composeService,
613
- };
614
- }
615
- async function spawnService(name, service, kind) {
616
- if (kind === "ssh") {
617
- if (!service.host || !service.cwd || !service.command) {
618
- throw new Error(`Service "${name}" is missing ssh host, cwd, or command.`);
619
- }
620
- const [bin, args] = createSshCommand({
621
- host: service.host,
622
- cwd: service.cwd,
623
- command: service.command,
624
- env: service.env,
625
- });
626
- return spawn(bin, args, {
627
- env: { ...process.env },
628
- stdio: ["ignore", "pipe", "pipe"],
629
- detached: true,
630
- });
631
- }
632
- if (!service.command || !service.cwd) {
633
- throw new Error(`Service "${name}" is missing command or cwd.`);
634
- }
635
- const envFile = await readEnvFile(envFilePath(service.cwd));
636
- const fileEnv = envFile.exists
637
- ? Object.fromEntries(entriesFromLines(envFile.lines).map((entry) => [entry.key, entry.value]))
638
- : {};
639
- const directArgs = service.args;
640
- return spawn(service.command, directArgs ?? [], {
641
- cwd: service.cwd,
642
- // Load the conventional .env next to the service, while allowing values
643
- // configured explicitly in NoMoreIDE to override it.
644
- env: { ...process.env, ...fileEnv, ...service.env },
645
- shell: directArgs === undefined,
646
- stdio: ["ignore", "pipe", "pipe"],
647
- detached: true,
648
- });
649
- }
650
- function localUrlFromLine(line) {
651
- return line.match(/https?:\/\/(?:localhost|127\.0\.0\.1):\d+\/?/)?.[0];
652
- }
653
- function portFromUrl(url) {
654
- if (!url)
655
- return undefined;
656
- const match = url.match(/:(\d+)/);
657
- return match ? Number(match[1]) : undefined;
658
- }
659
- async function stopChild(child, timeoutMs) {
660
- if (child.exitCode !== null || child.signalCode !== null) {
661
- return;
662
- }
663
- await new Promise((resolve) => {
664
- let resolved = false;
665
- const finish = () => {
666
- if (!resolved) {
667
- resolved = true;
668
- clearTimeout(timer);
669
- resolve();
670
- }
671
- };
672
- const timer = setTimeout(() => {
673
- signalProcessTree(child, "SIGKILL");
674
- finish();
675
- }, timeoutMs);
676
- child.once("exit", finish);
677
- signalProcessTree(child, "SIGTERM");
678
- });
679
- }
680
- async function killHolder(holder) {
681
- const target = holder.pgid ? -holder.pgid : holder.pid;
682
- try {
683
- process.kill(target, "SIGTERM");
684
- }
685
- catch (error) {
686
- const code = error.code;
687
- if (code !== "ESRCH")
688
- throw error;
689
- }
690
- // Give the process a moment to exit cleanly before escalating.
691
- for (let i = 0; i < 20; i += 1) {
692
- await new Promise((resolve) => setTimeout(resolve, 100));
693
- try {
694
- process.kill(holder.pid, 0);
695
- }
696
- catch {
697
- return;
698
- }
699
- }
700
- try {
701
- process.kill(target, "SIGKILL");
702
- }
703
- catch {
704
- // ignore
705
- }
706
- }
707
- async function waitForPortFree(port, timeoutMs) {
708
- const deadline = Date.now() + timeoutMs;
709
- while (Date.now() < deadline) {
710
- if (await isPortAvailable(port))
711
- return true;
712
- await new Promise((resolve) => setTimeout(resolve, 100));
713
- }
714
- return isPortAvailable(port);
715
- }
716
- function signalProcessTree(child, signal) {
717
- const pid = child.pid;
718
- if (!pid)
719
- return;
720
- try {
721
- // Negative PID = signal the whole process group whose leader is `pid`.
722
- // The service was spawned with detached: true so child.pid === PGID.
723
- process.kill(-pid, signal);
724
- }
725
- catch (error) {
726
- const code = error.code;
727
- if (code === "ESRCH")
728
- return;
729
- // Fall back to signaling the direct child if the group is gone.
730
- try {
731
- child.kill(signal);
732
- }
733
- catch {
734
- // ignore
735
- }
736
- }
737
- }
738
- //# sourceMappingURL=process-manager.js.map