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,667 +0,0 @@
1
- import { execFile, spawn } from "node:child_process";
2
- import { mkdir, readFile, readdir } from "node:fs/promises";
3
- import { homedir } from "node:os";
4
- import { join, relative, resolve } from "node:path";
5
- import { promisify } from "node:util";
6
- import yaml from "js-yaml";
7
- import { z } from "zod";
8
- const execFileAsync = promisify(execFile);
9
- const UNSAFE_NAME = /[^a-zA-Z0-9._-]+/g;
10
- const SCP_LIKE = /^(?:[\w.-]+@)?([\w.-]+):(.+)$/;
11
- function sanitizeName(raw) {
12
- return raw
13
- .trim()
14
- .toLowerCase()
15
- .replace(/\.git$/, "")
16
- .replace(UNSAFE_NAME, "-")
17
- .replace(/^-+|-+$/g, "");
18
- }
19
- /** Parse https / ssh / scp-style git URLs and derive a safe service name. */
20
- export function parseRepoUrl(input) {
21
- const url = input.trim();
22
- if (!url)
23
- throw new Error("Repository URL is required.");
24
- let host;
25
- let path;
26
- if (/^[a-zA-Z][\w+.-]*:\/\//.test(url)) {
27
- let parsed;
28
- try {
29
- parsed = new URL(url);
30
- }
31
- catch {
32
- throw new Error(`Invalid repository URL: ${input}`);
33
- }
34
- if (!["http:", "https:", "ssh:", "git:", "file:"].includes(parsed.protocol)) {
35
- throw new Error(`Unsupported repository URL scheme: ${parsed.protocol}`);
36
- }
37
- host = parsed.host;
38
- path = parsed.pathname;
39
- }
40
- else {
41
- const scp = SCP_LIKE.exec(url);
42
- if (!scp)
43
- throw new Error(`Unrecognized repository URL: ${input}`);
44
- host = scp[1];
45
- path = scp[2];
46
- }
47
- const segments = path
48
- .replace(/\.git\/?$/, "")
49
- .split("/")
50
- .filter(Boolean);
51
- if (segments.length === 0) {
52
- throw new Error(`Repository URL has no path: ${input}`);
53
- }
54
- const repo = segments[segments.length - 1];
55
- const owner = segments.length >= 2 ? segments[segments.length - 2] : undefined;
56
- const name = sanitizeName(repo);
57
- if (!name) {
58
- throw new Error(`Could not derive a service name from URL: ${input}`);
59
- }
60
- return { name, normalizedUrl: url, owner, host };
61
- }
62
- // ---------------------------------------------------------------------------
63
- // Clone
64
- // ---------------------------------------------------------------------------
65
- /** Where onboarded repos are cloned. Override with `NOMOREIDE_REPOS_DIR`. */
66
- export function defaultReposDir() {
67
- const override = process.env.NOMOREIDE_REPOS_DIR?.trim();
68
- if (override)
69
- return resolve(override);
70
- return join(homedir(), ".nomoreide", "repos");
71
- }
72
- /** True when `path` resolves inside `root` (containment guard for endpoints). */
73
- export function isInsideReposDir(path, root = defaultReposDir()) {
74
- const rel = relative(resolve(root), resolve(path));
75
- return rel === "" ? false : !rel.startsWith("..") && !resolve(path).includes("\0");
76
- }
77
- async function isNonEmptyDir(path) {
78
- try {
79
- const entries = await readdir(path);
80
- return entries.length > 0;
81
- }
82
- catch (error) {
83
- if (error.code === "ENOENT")
84
- return false;
85
- throw error;
86
- }
87
- }
88
- /**
89
- * One-shot git auth header for HTTPS github.com clones, reusing the app's stored
90
- * GitHub token. Passed via `git -c` (command-scoped) so it is NOT written into
91
- * the cloned repo's `.git/config` — the token never lands on disk. No-ops for
92
- * SSH URLs (which use the host's keys) or any non-github.com host.
93
- */
94
- function githubAuthArgs(parsed, token) {
95
- if (!token)
96
- return [];
97
- const isHttpsGithub = /^https:\/\//i.test(parsed.normalizedUrl) && parsed.host === "github.com";
98
- if (!isHttpsGithub)
99
- return [];
100
- const basic = Buffer.from(`x-access-token:${token}`).toString("base64");
101
- return ["-c", `http.https://github.com/.extraheader=Authorization: Basic ${basic}`];
102
- }
103
- /**
104
- * Shallow-clone a repository into `destRoot/<name>`. Refuses to overwrite a
105
- * non-empty destination, and disables interactive credential prompts so a
106
- * private repo fails fast instead of hanging. When a `githubToken` is supplied
107
- * and the URL is an HTTPS github.com URL, the token authenticates the clone so
108
- * private GitHub repos work without SSH keys.
109
- */
110
- export async function cloneRepository(url, destRoot = defaultReposDir(), githubToken) {
111
- const parsed = parseRepoUrl(url);
112
- const clonePath = join(destRoot, parsed.name);
113
- if (await isNonEmptyDir(clonePath)) {
114
- throw new Error(`Destination already exists and is not empty: ${clonePath}. Remove it or pick another repo.`);
115
- }
116
- await mkdir(destRoot, { recursive: true });
117
- await execFileAsync("git", [
118
- ...githubAuthArgs(parsed, githubToken),
119
- "clone",
120
- "--depth",
121
- "1",
122
- parsed.normalizedUrl,
123
- clonePath,
124
- ], { env: { ...process.env, GIT_TERMINAL_PROMPT: "0" } });
125
- return { name: parsed.name, clonePath, url: parsed.normalizedUrl };
126
- }
127
- // ---------------------------------------------------------------------------
128
- // Scan → RepoProfile
129
- // ---------------------------------------------------------------------------
130
- const nodeSignalSchema = z.object({
131
- packageManager: z.enum(["npm", "yarn", "pnpm", "bun"]),
132
- scripts: z.record(z.string()),
133
- hasDevScript: z.boolean(),
134
- hasStartScript: z.boolean(),
135
- });
136
- const pythonSignalSchema = z.object({
137
- hasRequirements: z.boolean(),
138
- hasPyproject: z.boolean(),
139
- hasManagePy: z.boolean(),
140
- framework: z.enum(["django", "fastapi", "flask", "unknown"]),
141
- });
142
- const composeServiceDetailSchema = z.object({
143
- name: z.string(),
144
- image: z.string().optional(),
145
- ports: z.array(z.string()),
146
- environment: z.record(z.string()),
147
- });
148
- const dockerSignalSchema = z.object({
149
- hasDockerfile: z.boolean(),
150
- composeFile: z.string().optional(),
151
- composeServices: z.array(z.string()),
152
- /** Per-service compose details (image/ports/env), used for DB detection. */
153
- services: z.array(composeServiceDetailSchema).optional(),
154
- });
155
- export const repoProfileSchema = z.object({
156
- name: z.string(),
157
- clonePath: z.string(),
158
- languages: z.array(z.string()),
159
- node: nodeSignalSchema.optional(),
160
- python: pythonSignalSchema.optional(),
161
- docker: dockerSignalSchema.optional(),
162
- /** Env var names from `.env.example` (values intentionally dropped). */
163
- envKeys: z.array(z.string()),
164
- readmeExcerpt: z.string().optional(),
165
- });
166
- async function readTextIfPresent(path) {
167
- try {
168
- return await readFile(path, "utf8");
169
- }
170
- catch {
171
- return undefined;
172
- }
173
- }
174
- function detectPackageManager(files) {
175
- if (files.has("pnpm-lock.yaml"))
176
- return "pnpm";
177
- if (files.has("yarn.lock"))
178
- return "yarn";
179
- if (files.has("bun.lockb"))
180
- return "bun";
181
- return "npm";
182
- }
183
- async function scanNode(clonePath, files) {
184
- if (!files.has("package.json"))
185
- return undefined;
186
- const raw = await readTextIfPresent(join(clonePath, "package.json"));
187
- let scripts = {};
188
- if (raw) {
189
- try {
190
- const parsed = JSON.parse(raw);
191
- if (parsed.scripts && typeof parsed.scripts === "object") {
192
- scripts = parsed.scripts;
193
- }
194
- }
195
- catch {
196
- // malformed package.json — treat as scriptless
197
- }
198
- }
199
- return {
200
- packageManager: detectPackageManager(files),
201
- scripts,
202
- hasDevScript: typeof scripts.dev === "string",
203
- hasStartScript: typeof scripts.start === "string",
204
- };
205
- }
206
- async function scanPython(clonePath, files) {
207
- const hasRequirements = files.has("requirements.txt");
208
- const hasPyproject = files.has("pyproject.toml");
209
- const hasManagePy = files.has("manage.py");
210
- if (!hasRequirements && !hasPyproject && !hasManagePy)
211
- return undefined;
212
- let framework = "unknown";
213
- if (hasManagePy) {
214
- framework = "django";
215
- }
216
- else {
217
- const deps = (await readTextIfPresent(join(clonePath, "requirements.txt")))?.toLowerCase() ??
218
- (await readTextIfPresent(join(clonePath, "pyproject.toml")))?.toLowerCase() ??
219
- "";
220
- if (deps.includes("fastapi") || deps.includes("uvicorn"))
221
- framework = "fastapi";
222
- else if (deps.includes("flask"))
223
- framework = "flask";
224
- else if (deps.includes("django"))
225
- framework = "django";
226
- }
227
- return { hasRequirements, hasPyproject, hasManagePy, framework };
228
- }
229
- const COMPOSE_FILES = [
230
- "docker-compose.yml",
231
- "docker-compose.yaml",
232
- "compose.yml",
233
- "compose.yaml",
234
- ];
235
- async function scanDocker(clonePath, files) {
236
- const composeFile = COMPOSE_FILES.find((file) => files.has(file));
237
- const hasDockerfile = files.has("Dockerfile");
238
- if (!composeFile && !hasDockerfile)
239
- return undefined;
240
- let composeServices = [];
241
- let services = [];
242
- if (composeFile) {
243
- const raw = await readTextIfPresent(join(clonePath, composeFile));
244
- if (raw) {
245
- services = parseComposeServiceDetails(raw);
246
- composeServices = services.map((service) => service.name);
247
- }
248
- }
249
- return { hasDockerfile, composeFile, composeServices, services };
250
- }
251
- /** Parse top-level compose services with the details we use downstream. */
252
- export function parseComposeServiceDetails(raw) {
253
- try {
254
- const doc = yaml.load(raw);
255
- const services = doc?.services;
256
- if (!services || typeof services !== "object")
257
- return [];
258
- return Object.entries(services).map(([name, def]) => {
259
- const service = (def ?? {});
260
- return {
261
- name,
262
- image: typeof service.image === "string" ? service.image : undefined,
263
- ports: normalizeComposePorts(service.ports),
264
- environment: normalizeComposeEnvironment(service.environment),
265
- };
266
- });
267
- }
268
- catch {
269
- // fall through to empty list on malformed YAML
270
- }
271
- return [];
272
- }
273
- /** Extract top-level service names from a compose file. */
274
- export function parseComposeServices(raw) {
275
- return parseComposeServiceDetails(raw).map((service) => service.name);
276
- }
277
- /** Normalize compose `ports` (short string, number, or long object form) to strings. */
278
- function normalizeComposePorts(ports) {
279
- if (!Array.isArray(ports))
280
- return [];
281
- const out = [];
282
- for (const entry of ports) {
283
- if (typeof entry === "number")
284
- out.push(String(entry));
285
- else if (typeof entry === "string")
286
- out.push(entry);
287
- else if (entry && typeof entry === "object") {
288
- const target = entry.target;
289
- const published = entry.published;
290
- if (published != null && target != null)
291
- out.push(`${published}:${target}`);
292
- else if (target != null)
293
- out.push(String(target));
294
- }
295
- }
296
- return out;
297
- }
298
- /** Normalize compose `environment` (map or `KEY=value` list) to a record. */
299
- function normalizeComposeEnvironment(env) {
300
- const out = {};
301
- if (Array.isArray(env)) {
302
- for (const item of env) {
303
- if (typeof item !== "string")
304
- continue;
305
- const eq = item.indexOf("=");
306
- if (eq > 0)
307
- out[item.slice(0, eq).trim()] = item.slice(eq + 1).trim();
308
- }
309
- }
310
- else if (env && typeof env === "object") {
311
- for (const [key, value] of Object.entries(env)) {
312
- out[key] = value == null ? "" : String(value);
313
- }
314
- }
315
- return out;
316
- }
317
- function parseEnvKeys(raw) {
318
- const keys = [];
319
- for (const line of raw.split(/\r?\n/)) {
320
- const trimmed = line.trim();
321
- if (!trimmed || trimmed.startsWith("#"))
322
- continue;
323
- const match = /^(?:export\s+)?([A-Za-z_][A-Za-z0-9_]*)\s*=/.exec(trimmed);
324
- if (match)
325
- keys.push(match[1]);
326
- }
327
- return keys;
328
- }
329
- const README_FILES = ["README.md", "readme.md", "README.MD", "README"];
330
- const README_HEADING = /^#{1,3}\s+.*(getting started|usage|quick\s?start|running|setup|develop|install)/i;
331
- function extractReadmeExcerpt(raw) {
332
- const lines = raw.split(/\r?\n/);
333
- const start = lines.findIndex((line) => README_HEADING.test(line));
334
- const slice = start >= 0 ? lines.slice(start, start + 40) : lines.slice(0, 30);
335
- return slice.join("\n").slice(0, 2000).trim();
336
- }
337
- /** Read-only scan of a cloned repo into a structured profile. */
338
- export async function scanRepo(clonePath) {
339
- const entries = await readdir(clonePath).catch(() => {
340
- throw new Error(`Cannot scan repository at ${clonePath}.`);
341
- });
342
- const files = new Set(entries);
343
- const [node, python, docker] = await Promise.all([
344
- scanNode(clonePath, files),
345
- scanPython(clonePath, files),
346
- scanDocker(clonePath, files),
347
- ]);
348
- let envKeys = [];
349
- for (const candidate of [".env.example", ".env.sample", ".env.template"]) {
350
- if (files.has(candidate)) {
351
- const raw = await readTextIfPresent(join(clonePath, candidate));
352
- if (raw) {
353
- envKeys = parseEnvKeys(raw);
354
- break;
355
- }
356
- }
357
- }
358
- let readmeExcerpt;
359
- const readmeName = README_FILES.find((file) => files.has(file));
360
- if (readmeName) {
361
- const raw = await readTextIfPresent(join(clonePath, readmeName));
362
- if (raw)
363
- readmeExcerpt = extractReadmeExcerpt(raw);
364
- }
365
- const languages = [];
366
- if (node)
367
- languages.push("node");
368
- if (python)
369
- languages.push("python");
370
- if (docker)
371
- languages.push("docker");
372
- return {
373
- name: sanitizeName(clonePath.split(/[\\/]/).filter(Boolean).pop() ?? "service"),
374
- clonePath,
375
- languages,
376
- node,
377
- python,
378
- docker,
379
- envKeys,
380
- readmeExcerpt,
381
- };
382
- }
383
- // ---------------------------------------------------------------------------
384
- // Heuristic proposals
385
- // ---------------------------------------------------------------------------
386
- export const proposedServiceSchema = z.object({
387
- name: z.string(),
388
- kind: z.enum(["local", "docker-compose"]),
389
- command: z.string().optional(),
390
- cwd: z.string(),
391
- port: z.number().int().positive().max(65535).optional(),
392
- env: z.record(z.string()).optional(),
393
- description: z.string().optional(),
394
- composeFile: z.string().optional(),
395
- composeService: z.string().optional(),
396
- /** One-shot install step to run before first start (not persisted). */
397
- installCommand: z.string().optional(),
398
- confidence: z.enum(["high", "medium", "low"]),
399
- reason: z.string(),
400
- });
401
- const PORT_PATTERNS = [
402
- /--port[ =](\d{2,5})/i,
403
- /-p[ =](\d{2,5})/i,
404
- /\bport[ =:](\d{2,5})/i,
405
- /:(\d{4,5})\b/,
406
- ];
407
- function sniffPort(text) {
408
- for (const pattern of PORT_PATTERNS) {
409
- const match = pattern.exec(text);
410
- if (match) {
411
- const port = Number(match[1]);
412
- if (port >= 1 && port <= 65535)
413
- return port;
414
- }
415
- }
416
- return undefined;
417
- }
418
- function runScript(pm, script) {
419
- switch (pm) {
420
- case "pnpm":
421
- return `pnpm ${script}`;
422
- case "yarn":
423
- return `yarn ${script}`;
424
- case "bun":
425
- return `bun run ${script}`;
426
- default:
427
- return `npm run ${script}`;
428
- }
429
- }
430
- function installCmd(pm) {
431
- switch (pm) {
432
- case "pnpm":
433
- return "pnpm install";
434
- case "yarn":
435
- return "yarn install";
436
- case "bun":
437
- return "bun install";
438
- default:
439
- return "npm install";
440
- }
441
- }
442
- /**
443
- * Best-effort service proposals, ordered most-confident first. Docker Compose
444
- * is the strongest signal (run command + ports are declared), so a compose
445
- * repo yields one proposal per service; Node/Python yield a single proposal.
446
- */
447
- export function proposeServices(profile) {
448
- const proposals = [];
449
- const { clonePath, name } = profile;
450
- if (profile.docker?.composeFile && profile.docker.composeServices.length > 0) {
451
- const services = profile.docker.composeServices;
452
- const details = profile.docker.services ?? [];
453
- const primary = services.find((service) => sanitizeName(service) === name) ?? services[0];
454
- for (const service of services) {
455
- const detail = details.find((entry) => entry.name === service);
456
- proposals.push({
457
- name: service === primary ? name : `${name}-${sanitizeName(service)}`,
458
- kind: "docker-compose",
459
- cwd: clonePath,
460
- composeFile: profile.docker.composeFile,
461
- composeService: service,
462
- // Published host port (left side of a `5433:5432` mapping), not container.
463
- port: detail ? firstHostPort(detail.ports) : undefined,
464
- confidence: service === primary ? "high" : "low",
465
- reason: `docker-compose service "${service}"`,
466
- });
467
- }
468
- }
469
- if (profile.node) {
470
- const { packageManager, scripts, hasDevScript, hasStartScript } = profile.node;
471
- const script = hasDevScript ? "dev" : hasStartScript ? "start" : undefined;
472
- if (script) {
473
- proposals.push({
474
- name,
475
- kind: "local",
476
- command: runScript(packageManager, script),
477
- cwd: clonePath,
478
- port: sniffPort(scripts[script] ?? ""),
479
- installCommand: installCmd(packageManager),
480
- confidence: hasDevScript ? "high" : "medium",
481
- reason: `package.json "${script}" script (${packageManager})`,
482
- });
483
- }
484
- }
485
- if (profile.python) {
486
- const command = pythonCommand(profile.python);
487
- proposals.push({
488
- name,
489
- kind: "local",
490
- command,
491
- cwd: clonePath,
492
- port: defaultPythonPort(profile.python),
493
- installCommand: profile.python.hasRequirements
494
- ? "pip install -r requirements.txt"
495
- : profile.python.hasPyproject
496
- ? "pip install ."
497
- : undefined,
498
- confidence: profile.python.framework === "unknown" ? "low" : "medium",
499
- reason: `python ${profile.python.framework} project`,
500
- });
501
- }
502
- return dedupeByName(proposals).sort((a, b) => confidenceRank(b.confidence) - confidenceRank(a.confidence));
503
- }
504
- function pythonCommand(python) {
505
- switch (python.framework) {
506
- case "django":
507
- return "python manage.py runserver";
508
- case "fastapi":
509
- return "uvicorn main:app --reload";
510
- case "flask":
511
- return "flask run";
512
- default:
513
- return "python main.py";
514
- }
515
- }
516
- function defaultPythonPort(python) {
517
- if (python.framework === "django")
518
- return 8000;
519
- if (python.framework === "fastapi")
520
- return 8000;
521
- if (python.framework === "flask")
522
- return 5000;
523
- return undefined;
524
- }
525
- function confidenceRank(confidence) {
526
- return confidence === "high" ? 2 : confidence === "medium" ? 1 : 0;
527
- }
528
- function dedupeByName(items) {
529
- const seen = new Set();
530
- const result = [];
531
- for (const item of items) {
532
- if (seen.has(item.name))
533
- continue;
534
- seen.add(item.name);
535
- result.push(item);
536
- }
537
- return result;
538
- }
539
- // ---------------------------------------------------------------------------
540
- // Database proposals (auto-register a DB when a compose service is one)
541
- // ---------------------------------------------------------------------------
542
- export const proposedDatabaseSchema = z.object({
543
- name: z.string(),
544
- engine: z.enum(["postgres", "mysql"]),
545
- url: z.string(),
546
- composeService: z.string().optional(),
547
- confidence: z.enum(["high", "medium", "low"]),
548
- reason: z.string(),
549
- });
550
- /** Recognise common database container images. */
551
- function detectDbImage(image) {
552
- if (!image)
553
- return undefined;
554
- if (/postgres|pgvector|postgis|timescale/i.test(image)) {
555
- return { engine: "postgres", defaultPort: 5432 };
556
- }
557
- if (/mysql|mariadb|percona/i.test(image)) {
558
- return { engine: "mysql", defaultPort: 3306 };
559
- }
560
- return undefined;
561
- }
562
- /**
563
- * Propose a registrable DB connection for each compose service backed by a known
564
- * database image — host port from the published mapping, credentials from the
565
- * service environment. This is what lets onboarding light up the Database tab.
566
- */
567
- export function proposeDatabases(profile) {
568
- const details = profile.docker?.services ?? [];
569
- const proposals = [];
570
- for (const service of details) {
571
- const match = detectDbImage(service.image);
572
- if (!match)
573
- continue;
574
- const hostPort = publishedHostPort(service.ports, match.defaultPort) ?? match.defaultPort;
575
- const { user, password, database } = dbCredentials(match.engine, service.environment);
576
- proposals.push({
577
- name: `${profile.name}-db`,
578
- engine: match.engine,
579
- url: buildDbUrl(match.engine, user, password, hostPort, database),
580
- composeService: service.name,
581
- confidence: database ? "high" : "medium",
582
- reason: `${match.engine} database from compose service "${service.name}"${service.image ? ` (${service.image})` : ""}`,
583
- });
584
- }
585
- return dedupeByName(proposals);
586
- }
587
- /** The host port published for `containerPort` (e.g. 5433 from "5433:5432"). */
588
- function publishedHostPort(ports, containerPort) {
589
- for (const entry of ports) {
590
- const parts = entry.split(":");
591
- if (parts.length < 2)
592
- continue;
593
- const container = Number(parts[parts.length - 1].replace(/\/.*$/, ""));
594
- const published = Number(parts[parts.length - 2]);
595
- if (container === containerPort && Number.isFinite(published))
596
- return published;
597
- }
598
- return firstHostPort(ports);
599
- }
600
- /** The host port of the first published mapping (left side of `host:container`). */
601
- function firstHostPort(ports) {
602
- for (const entry of ports) {
603
- const parts = entry.split(":");
604
- const raw = parts.length >= 2 ? parts[parts.length - 2] : parts[0];
605
- const value = Number(String(raw).replace(/\/.*$/, ""));
606
- if (Number.isFinite(value))
607
- return value;
608
- }
609
- return undefined;
610
- }
611
- function dbCredentials(engine, env) {
612
- if (engine === "postgres") {
613
- const user = env.POSTGRES_USER ?? "postgres";
614
- return { user, password: env.POSTGRES_PASSWORD ?? "", database: env.POSTGRES_DB ?? user };
615
- }
616
- return {
617
- user: env.MYSQL_USER ?? "root",
618
- password: env.MYSQL_PASSWORD ?? env.MYSQL_ROOT_PASSWORD ?? "",
619
- database: env.MYSQL_DATABASE ?? "",
620
- };
621
- }
622
- function buildDbUrl(engine, user, password, port, database) {
623
- const scheme = engine === "mysql" ? "mysql" : "postgres";
624
- const auth = password
625
- ? `${encodeURIComponent(user)}:${encodeURIComponent(password)}`
626
- : encodeURIComponent(user);
627
- return `${scheme}://${auth}@127.0.0.1:${port}/${database}`;
628
- }
629
- /**
630
- * Run a one-shot install command in `cwd`, streaming each output line to
631
- * `onLine`. Modeled on the TestRunner spawn pattern (shell + line buffering)
632
- * but stateless — the caller (an SSE route) owns delivery.
633
- */
634
- export function runInstall(options) {
635
- return new Promise((resolvePromise) => {
636
- const child = spawn(options.command, {
637
- cwd: options.cwd,
638
- env: process.env,
639
- shell: true,
640
- stdio: ["ignore", "pipe", "pipe"],
641
- });
642
- const buffers = { stdout: "", stderr: "" };
643
- const emit = (stream, text) => {
644
- if (text.trim())
645
- options.onLine?.({ stream, text });
646
- };
647
- const onChunk = (stream) => (chunk) => {
648
- buffers[stream] += chunk.toString();
649
- const lines = buffers[stream].split(/\r?\n/);
650
- buffers[stream] = lines.pop() ?? "";
651
- for (const line of lines)
652
- emit(stream, line);
653
- };
654
- child.stdout?.on("data", onChunk("stdout"));
655
- child.stderr?.on("data", onChunk("stderr"));
656
- child.once("error", (error) => {
657
- emit("stderr", error.message);
658
- resolvePromise({ exitCode: null });
659
- });
660
- child.once("exit", (exitCode) => {
661
- emit("stdout", buffers.stdout);
662
- emit("stderr", buffers.stderr);
663
- resolvePromise({ exitCode });
664
- });
665
- });
666
- }
667
- //# sourceMappingURL=repo-onboard.js.map