nomoreide 0.1.103 → 0.3.0

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 (621) hide show
  1. package/README.md +72 -20
  2. package/bin/nomoreide.js +82 -0
  3. package/package.json +24 -90
  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 -354
  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 -256
  149. package/dist/core/cloudflare-manager.js +0 -409
  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 -343
  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 -70
  167. package/dist/core/daemon-client.js +0 -136
  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 -223
  254. package/dist/core/github-manager.js +0 -285
  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/credentials.d.ts +0 -93
  296. package/dist/core/providers/credentials.js +0 -88
  297. package/dist/core/providers/credentials.js.map +0 -1
  298. package/dist/core/providers/deploy-provider.d.ts +0 -327
  299. package/dist/core/providers/deploy-provider.js +0 -25
  300. package/dist/core/providers/deploy-provider.js.map +0 -1
  301. package/dist/core/providers/egress.d.ts +0 -58
  302. package/dist/core/providers/egress.js +0 -115
  303. package/dist/core/providers/egress.js.map +0 -1
  304. package/dist/core/providers/host-bridge.d.ts +0 -20
  305. package/dist/core/providers/host-bridge.js +0 -57
  306. package/dist/core/providers/host-bridge.js.map +0 -1
  307. package/dist/core/providers/host-provider.d.ts +0 -160
  308. package/dist/core/providers/host-provider.js +0 -2
  309. package/dist/core/providers/host-provider.js.map +0 -1
  310. package/dist/core/providers/oauth.d.ts +0 -97
  311. package/dist/core/providers/oauth.js +0 -238
  312. package/dist/core/providers/oauth.js.map +0 -1
  313. package/dist/core/providers/project-resolution.d.ts +0 -81
  314. package/dist/core/providers/project-resolution.js +0 -101
  315. package/dist/core/providers/project-resolution.js.map +0 -1
  316. package/dist/core/providers/registry.d.ts +0 -73
  317. package/dist/core/providers/registry.js +0 -53
  318. package/dist/core/providers/registry.js.map +0 -1
  319. package/dist/core/providers/strings.d.ts +0 -95
  320. package/dist/core/providers/strings.js +0 -59
  321. package/dist/core/providers/strings.js.map +0 -1
  322. package/dist/core/public-config.d.ts +0 -18
  323. package/dist/core/public-config.js +0 -76
  324. package/dist/core/public-config.js.map +0 -1
  325. package/dist/core/read-only-files.d.ts +0 -28
  326. package/dist/core/read-only-files.js +0 -93
  327. package/dist/core/read-only-files.js.map +0 -1
  328. package/dist/core/repo-create.d.ts +0 -11
  329. package/dist/core/repo-create.js +0 -54
  330. package/dist/core/repo-create.js.map +0 -1
  331. package/dist/core/repo-match.d.ts +0 -12
  332. package/dist/core/repo-match.js +0 -40
  333. package/dist/core/repo-match.js.map +0 -1
  334. package/dist/core/repo-onboard.d.ts +0 -297
  335. package/dist/core/repo-onboard.js +0 -667
  336. package/dist/core/repo-onboard.js.map +0 -1
  337. package/dist/core/repro-bundle.d.ts +0 -30
  338. package/dist/core/repro-bundle.js +0 -116
  339. package/dist/core/repro-bundle.js.map +0 -1
  340. package/dist/core/service-graph.d.ts +0 -50
  341. package/dist/core/service-graph.js +0 -143
  342. package/dist/core/service-graph.js.map +0 -1
  343. package/dist/core/service-health.d.ts +0 -10
  344. package/dist/core/service-health.js +0 -46
  345. package/dist/core/service-health.js.map +0 -1
  346. package/dist/core/service-log-source.d.ts +0 -9
  347. package/dist/core/service-log-source.js +0 -49
  348. package/dist/core/service-log-source.js.map +0 -1
  349. package/dist/core/service-registry.d.ts +0 -52
  350. package/dist/core/service-registry.js +0 -101
  351. package/dist/core/service-registry.js.map +0 -1
  352. package/dist/core/snapshot-manager.d.ts +0 -62
  353. package/dist/core/snapshot-manager.js +0 -219
  354. package/dist/core/snapshot-manager.js.map +0 -1
  355. package/dist/core/ssh-servers.d.ts +0 -89
  356. package/dist/core/ssh-servers.js +0 -251
  357. package/dist/core/ssh-servers.js.map +0 -1
  358. package/dist/core/ssh-service-runner.d.ts +0 -7
  359. package/dist/core/ssh-service-runner.js +0 -36
  360. package/dist/core/ssh-service-runner.js.map +0 -1
  361. package/dist/core/ssh-setup.d.ts +0 -11
  362. package/dist/core/ssh-setup.js +0 -49
  363. package/dist/core/ssh-setup.js.map +0 -1
  364. package/dist/core/system-processes.d.ts +0 -29
  365. package/dist/core/system-processes.js +0 -119
  366. package/dist/core/system-processes.js.map +0 -1
  367. package/dist/core/terminal-manager.d.ts +0 -123
  368. package/dist/core/terminal-manager.js +0 -470
  369. package/dist/core/terminal-manager.js.map +0 -1
  370. package/dist/core/terminal-session.d.ts +0 -122
  371. package/dist/core/terminal-session.js +0 -242
  372. package/dist/core/terminal-session.js.map +0 -1
  373. package/dist/core/terminal-spawn.d.ts +0 -26
  374. package/dist/core/terminal-spawn.js +0 -63
  375. package/dist/core/terminal-spawn.js.map +0 -1
  376. package/dist/core/test-runner.d.ts +0 -69
  377. package/dist/core/test-runner.js +0 -199
  378. package/dist/core/test-runner.js.map +0 -1
  379. package/dist/core/timeline-store.d.ts +0 -20
  380. package/dist/core/timeline-store.js +0 -36
  381. package/dist/core/timeline-store.js.map +0 -1
  382. package/dist/core/tool-call-store.d.ts +0 -25
  383. package/dist/core/tool-call-store.js +0 -62
  384. package/dist/core/tool-call-store.js.map +0 -1
  385. package/dist/core/types.d.ts +0 -312
  386. package/dist/core/types.js +0 -2
  387. package/dist/core/types.js.map +0 -1
  388. package/dist/core/usage-history.d.ts +0 -81
  389. package/dist/core/usage-history.js +0 -149
  390. package/dist/core/usage-history.js.map +0 -1
  391. package/dist/core/vercel-actions.d.ts +0 -71
  392. package/dist/core/vercel-actions.js +0 -109
  393. package/dist/core/vercel-actions.js.map +0 -1
  394. package/dist/core/vercel-auth.d.ts +0 -40
  395. package/dist/core/vercel-auth.js +0 -88
  396. package/dist/core/vercel-auth.js.map +0 -1
  397. package/dist/core/vercel-context.d.ts +0 -2
  398. package/dist/core/vercel-context.js +0 -97
  399. package/dist/core/vercel-context.js.map +0 -1
  400. package/dist/core/vercel-manager.d.ts +0 -266
  401. package/dist/core/vercel-manager.js +0 -389
  402. package/dist/core/vercel-manager.js.map +0 -1
  403. package/dist/core/vercel-oauth.d.ts +0 -37
  404. package/dist/core/vercel-oauth.js +0 -51
  405. package/dist/core/vercel-oauth.js.map +0 -1
  406. package/dist/core/vercel-provider.d.ts +0 -23
  407. package/dist/core/vercel-provider.js +0 -271
  408. package/dist/core/vercel-provider.js.map +0 -1
  409. package/dist/core/vultr-actions.d.ts +0 -52
  410. package/dist/core/vultr-actions.js +0 -62
  411. package/dist/core/vultr-actions.js.map +0 -1
  412. package/dist/core/vultr-auth.d.ts +0 -32
  413. package/dist/core/vultr-auth.js +0 -54
  414. package/dist/core/vultr-auth.js.map +0 -1
  415. package/dist/core/vultr-context.d.ts +0 -2
  416. package/dist/core/vultr-context.js +0 -55
  417. package/dist/core/vultr-context.js.map +0 -1
  418. package/dist/core/vultr-manager.d.ts +0 -105
  419. package/dist/core/vultr-manager.js +0 -159
  420. package/dist/core/vultr-manager.js.map +0 -1
  421. package/dist/core/vultr-provider.d.ts +0 -69
  422. package/dist/core/vultr-provider.js +0 -224
  423. package/dist/core/vultr-provider.js.map +0 -1
  424. package/dist/core/workflow-triggers.d.ts +0 -139
  425. package/dist/core/workflow-triggers.js +0 -208
  426. package/dist/core/workflow-triggers.js.map +0 -1
  427. package/dist/core/workflows.d.ts +0 -290
  428. package/dist/core/workflows.js +0 -190
  429. package/dist/core/workflows.js.map +0 -1
  430. package/dist/index.d.ts +0 -2
  431. package/dist/index.js +0 -56
  432. package/dist/index.js.map +0 -1
  433. package/dist/mcp/server.d.ts +0 -37
  434. package/dist/mcp/server.js +0 -84
  435. package/dist/mcp/server.js.map +0 -1
  436. package/dist/mcp/tools/agent-env.d.ts +0 -9
  437. package/dist/mcp/tools/agent-env.js +0 -160
  438. package/dist/mcp/tools/agent-env.js.map +0 -1
  439. package/dist/mcp/tools/agent-profiles.d.ts +0 -9
  440. package/dist/mcp/tools/agent-profiles.js +0 -197
  441. package/dist/mcp/tools/agent-profiles.js.map +0 -1
  442. package/dist/mcp/tools/agent-registry.d.ts +0 -9
  443. package/dist/mcp/tools/agent-registry.js +0 -81
  444. package/dist/mcp/tools/agent-registry.js.map +0 -1
  445. package/dist/mcp/tools/agent.d.ts +0 -4
  446. package/dist/mcp/tools/agent.js +0 -29
  447. package/dist/mcp/tools/agent.js.map +0 -1
  448. package/dist/mcp/tools/context.d.ts +0 -36
  449. package/dist/mcp/tools/context.js +0 -69
  450. package/dist/mcp/tools/context.js.map +0 -1
  451. package/dist/mcp/tools/database.d.ts +0 -9
  452. package/dist/mcp/tools/database.js +0 -166
  453. package/dist/mcp/tools/database.js.map +0 -1
  454. package/dist/mcp/tools/docs.d.ts +0 -29
  455. package/dist/mcp/tools/docs.js +0 -125
  456. package/dist/mcp/tools/docs.js.map +0 -1
  457. package/dist/mcp/tools/errors.d.ts +0 -5
  458. package/dist/mcp/tools/errors.js +0 -40
  459. package/dist/mcp/tools/errors.js.map +0 -1
  460. package/dist/mcp/tools/git.d.ts +0 -4
  461. package/dist/mcp/tools/git.js +0 -208
  462. package/dist/mcp/tools/git.js.map +0 -1
  463. package/dist/mcp/tools/github.d.ts +0 -4
  464. package/dist/mcp/tools/github.js +0 -196
  465. package/dist/mcp/tools/github.js.map +0 -1
  466. package/dist/mcp/tools/index.d.ts +0 -20
  467. package/dist/mcp/tools/index.js +0 -60
  468. package/dist/mcp/tools/index.js.map +0 -1
  469. package/dist/mcp/tools/onboard.d.ts +0 -10
  470. package/dist/mcp/tools/onboard.js +0 -30
  471. package/dist/mcp/tools/onboard.js.map +0 -1
  472. package/dist/mcp/tools/provider.d.ts +0 -16
  473. package/dist/mcp/tools/provider.js +0 -110
  474. package/dist/mcp/tools/provider.js.map +0 -1
  475. package/dist/mcp/tools/services.d.ts +0 -11
  476. package/dist/mcp/tools/services.js +0 -200
  477. package/dist/mcp/tools/services.js.map +0 -1
  478. package/dist/mcp/tools/snapshots.d.ts +0 -8
  479. package/dist/mcp/tools/snapshots.js +0 -37
  480. package/dist/mcp/tools/snapshots.js.map +0 -1
  481. package/dist/mcp/tools/terminal.d.ts +0 -4
  482. package/dist/mcp/tools/terminal.js +0 -38
  483. package/dist/mcp/tools/terminal.js.map +0 -1
  484. package/dist/tui/app.d.ts +0 -22
  485. package/dist/tui/app.js +0 -138
  486. package/dist/tui/app.js.map +0 -1
  487. package/dist/web/agent-info.d.ts +0 -82
  488. package/dist/web/agent-info.js +0 -775
  489. package/dist/web/agent-info.js.map +0 -1
  490. package/dist/web/client/assets/SymbolsNerdFontMono-Regular-DDncdh2F.ttf +0 -0
  491. package/dist/web/client/assets/code-editor-B2_SPkzS.js +0 -30
  492. package/dist/web/client/assets/context-graph-DVrWyUaG.js +0 -7
  493. package/dist/web/client/assets/core-DhEqZVGG.js +0 -1
  494. package/dist/web/client/assets/event-BK_86lmQ.js +0 -1
  495. package/dist/web/client/assets/index-BhDAhmA1.js +0 -1
  496. package/dist/web/client/assets/index-DIspyq1R.js +0 -352
  497. package/dist/web/client/assets/index-DT9Uq0bE.css +0 -1
  498. package/dist/web/client/assets/nomoreide-favicon-Ds7Tgj9p.svg +0 -24
  499. package/dist/web/client/assets/system-process-table-CWZIisGo.js +0 -1
  500. package/dist/web/client/assets/window-DlR023_X.js +0 -1
  501. package/dist/web/client/index.html +0 -44
  502. package/dist/web/dashboard.d.ts +0 -61
  503. package/dist/web/dashboard.js +0 -221
  504. package/dist/web/dashboard.js.map +0 -1
  505. package/dist/web/directories.d.ts +0 -27
  506. package/dist/web/directories.js +0 -81
  507. package/dist/web/directories.js.map +0 -1
  508. package/dist/web/http-utils.d.ts +0 -13
  509. package/dist/web/http-utils.js +0 -72
  510. package/dist/web/http-utils.js.map +0 -1
  511. package/dist/web/routes/agent-chat-routes.d.ts +0 -3
  512. package/dist/web/routes/agent-chat-routes.js +0 -186
  513. package/dist/web/routes/agent-chat-routes.js.map +0 -1
  514. package/dist/web/routes/agent-env-routes.d.ts +0 -9
  515. package/dist/web/routes/agent-env-routes.js +0 -86
  516. package/dist/web/routes/agent-env-routes.js.map +0 -1
  517. package/dist/web/routes/agent-profile-routes.d.ts +0 -8
  518. package/dist/web/routes/agent-profile-routes.js +0 -211
  519. package/dist/web/routes/agent-profile-routes.js.map +0 -1
  520. package/dist/web/routes/agent-registry-routes.d.ts +0 -2
  521. package/dist/web/routes/agent-registry-routes.js +0 -361
  522. package/dist/web/routes/agent-registry-routes.js.map +0 -1
  523. package/dist/web/routes/agent-routes.d.ts +0 -3
  524. package/dist/web/routes/agent-routes.js +0 -73
  525. package/dist/web/routes/agent-routes.js.map +0 -1
  526. package/dist/web/routes/agent-settings-routes.d.ts +0 -8
  527. package/dist/web/routes/agent-settings-routes.js +0 -67
  528. package/dist/web/routes/agent-settings-routes.js.map +0 -1
  529. package/dist/web/routes/context-library-routes.d.ts +0 -2
  530. package/dist/web/routes/context-library-routes.js +0 -139
  531. package/dist/web/routes/context-library-routes.js.map +0 -1
  532. package/dist/web/routes/context.d.ts +0 -73
  533. package/dist/web/routes/context.js +0 -48
  534. package/dist/web/routes/context.js.map +0 -1
  535. package/dist/web/routes/dashboard-routes.d.ts +0 -3
  536. package/dist/web/routes/dashboard-routes.js +0 -47
  537. package/dist/web/routes/dashboard-routes.js.map +0 -1
  538. package/dist/web/routes/database-routes.d.ts +0 -3
  539. package/dist/web/routes/database-routes.js +0 -341
  540. package/dist/web/routes/database-routes.js.map +0 -1
  541. package/dist/web/routes/docker-routes.d.ts +0 -7
  542. package/dist/web/routes/docker-routes.js +0 -122
  543. package/dist/web/routes/docker-routes.js.map +0 -1
  544. package/dist/web/routes/errors-routes.d.ts +0 -3
  545. package/dist/web/routes/errors-routes.js +0 -77
  546. package/dist/web/routes/errors-routes.js.map +0 -1
  547. package/dist/web/routes/extensions-routes.d.ts +0 -14
  548. package/dist/web/routes/extensions-routes.js +0 -21
  549. package/dist/web/routes/extensions-routes.js.map +0 -1
  550. package/dist/web/routes/git-routes.d.ts +0 -3
  551. package/dist/web/routes/git-routes.js +0 -598
  552. package/dist/web/routes/git-routes.js.map +0 -1
  553. package/dist/web/routes/github-context.d.ts +0 -11
  554. package/dist/web/routes/github-context.js +0 -34
  555. package/dist/web/routes/github-context.js.map +0 -1
  556. package/dist/web/routes/github-routes.d.ts +0 -2
  557. package/dist/web/routes/github-routes.js +0 -699
  558. package/dist/web/routes/github-routes.js.map +0 -1
  559. package/dist/web/routes/host-routes.d.ts +0 -2
  560. package/dist/web/routes/host-routes.js +0 -188
  561. package/dist/web/routes/host-routes.js.map +0 -1
  562. package/dist/web/routes/index.d.ts +0 -10
  563. package/dist/web/routes/index.js +0 -72
  564. package/dist/web/routes/index.js.map +0 -1
  565. package/dist/web/routes/jetbrains-import-routes.d.ts +0 -2
  566. package/dist/web/routes/jetbrains-import-routes.js +0 -121
  567. package/dist/web/routes/jetbrains-import-routes.js.map +0 -1
  568. package/dist/web/routes/log-sources-routes.d.ts +0 -6
  569. package/dist/web/routes/log-sources-routes.js +0 -102
  570. package/dist/web/routes/log-sources-routes.js.map +0 -1
  571. package/dist/web/routes/metrics-routes.d.ts +0 -3
  572. package/dist/web/routes/metrics-routes.js +0 -60
  573. package/dist/web/routes/metrics-routes.js.map +0 -1
  574. package/dist/web/routes/onboard-routes.d.ts +0 -9
  575. package/dist/web/routes/onboard-routes.js +0 -146
  576. package/dist/web/routes/onboard-routes.js.map +0 -1
  577. package/dist/web/routes/overview-routes.d.ts +0 -2
  578. package/dist/web/routes/overview-routes.js +0 -36
  579. package/dist/web/routes/overview-routes.js.map +0 -1
  580. package/dist/web/routes/provider-routes.d.ts +0 -2
  581. package/dist/web/routes/provider-routes.js +0 -558
  582. package/dist/web/routes/provider-routes.js.map +0 -1
  583. package/dist/web/routes/service-routes.d.ts +0 -3
  584. package/dist/web/routes/service-routes.js +0 -511
  585. package/dist/web/routes/service-routes.js.map +0 -1
  586. package/dist/web/routes/settings-routes.d.ts +0 -2
  587. package/dist/web/routes/settings-routes.js +0 -151
  588. package/dist/web/routes/settings-routes.js.map +0 -1
  589. package/dist/web/routes/shell-routes.d.ts +0 -22
  590. package/dist/web/routes/shell-routes.js +0 -75
  591. package/dist/web/routes/shell-routes.js.map +0 -1
  592. package/dist/web/routes/skills-routes.d.ts +0 -2
  593. package/dist/web/routes/skills-routes.js +0 -49
  594. package/dist/web/routes/skills-routes.js.map +0 -1
  595. package/dist/web/routes/snapshot-routes.d.ts +0 -8
  596. package/dist/web/routes/snapshot-routes.js +0 -194
  597. package/dist/web/routes/snapshot-routes.js.map +0 -1
  598. package/dist/web/routes/ssh-server-routes.d.ts +0 -10
  599. package/dist/web/routes/ssh-server-routes.js +0 -163
  600. package/dist/web/routes/ssh-server-routes.js.map +0 -1
  601. package/dist/web/routes/terminal-routes.d.ts +0 -7
  602. package/dist/web/routes/terminal-routes.js +0 -313
  603. package/dist/web/routes/terminal-routes.js.map +0 -1
  604. package/dist/web/routes/workflow-routes.d.ts +0 -8
  605. package/dist/web/routes/workflow-routes.js +0 -45
  606. package/dist/web/routes/workflow-routes.js.map +0 -1
  607. package/dist/web/routes/workflow-trigger-routes.d.ts +0 -9
  608. package/dist/web/routes/workflow-trigger-routes.js +0 -78
  609. package/dist/web/routes/workflow-trigger-routes.js.map +0 -1
  610. package/dist/web/server.d.ts +0 -31
  611. package/dist/web/server.js +0 -325
  612. package/dist/web/server.js.map +0 -1
  613. package/dist/web/service-tester.d.ts +0 -16
  614. package/dist/web/service-tester.js +0 -107
  615. package/dist/web/service-tester.js.map +0 -1
  616. package/dist/web/static-assets.d.ts +0 -3
  617. package/dist/web/static-assets.js +0 -64
  618. package/dist/web/static-assets.js.map +0 -1
  619. package/dist/web/usage-info.d.ts +0 -56
  620. package/dist/web/usage-info.js +0 -265
  621. 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