@noodleseed/one 0.16.0 → 0.18.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 (348) hide show
  1. package/dist/cli.d.ts.map +1 -1
  2. package/dist/cli.js +52 -5
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/alerts-ops.d.ts +2 -0
  5. package/dist/commands/alerts-ops.d.ts.map +1 -0
  6. package/dist/commands/alerts-ops.js +249 -0
  7. package/dist/commands/alerts-ops.js.map +1 -0
  8. package/dist/commands/analytics-ops.d.ts +13 -0
  9. package/dist/commands/analytics-ops.d.ts.map +1 -1
  10. package/dist/commands/analytics-ops.js +5 -2
  11. package/dist/commands/analytics-ops.js.map +1 -1
  12. package/dist/commands/apps-ops.d.ts +17 -0
  13. package/dist/commands/apps-ops.d.ts.map +1 -0
  14. package/dist/commands/apps-ops.js +285 -0
  15. package/dist/commands/apps-ops.js.map +1 -0
  16. package/dist/commands/archive-ops.js +2 -2
  17. package/dist/commands/archive-ops.js.map +1 -1
  18. package/dist/commands/catalog-data-config.d.ts +9 -0
  19. package/dist/commands/catalog-data-config.d.ts.map +1 -0
  20. package/dist/commands/catalog-data-config.js +67 -0
  21. package/dist/commands/catalog-data-config.js.map +1 -0
  22. package/dist/commands/catalog-data-core.d.ts +13 -0
  23. package/dist/commands/catalog-data-core.d.ts.map +1 -0
  24. package/dist/commands/catalog-data-core.js +354 -0
  25. package/dist/commands/catalog-data-core.js.map +1 -0
  26. package/dist/commands/catalog-data-resources.d.ts +8 -0
  27. package/dist/commands/catalog-data-resources.d.ts.map +1 -0
  28. package/dist/commands/catalog-data-resources.js +551 -0
  29. package/dist/commands/catalog-data-resources.js.map +1 -0
  30. package/dist/commands/catalog-dispatch.d.ts +15 -0
  31. package/dist/commands/catalog-dispatch.d.ts.map +1 -0
  32. package/dist/commands/catalog-dispatch.js +95 -0
  33. package/dist/commands/catalog-dispatch.js.map +1 -0
  34. package/dist/commands/catalog-render.d.ts +28 -0
  35. package/dist/commands/catalog-render.d.ts.map +1 -0
  36. package/dist/commands/catalog-render.js +142 -0
  37. package/dist/commands/catalog-render.js.map +1 -0
  38. package/dist/commands/catalog-types.d.ts +46 -0
  39. package/dist/commands/catalog-types.d.ts.map +1 -0
  40. package/dist/commands/catalog-types.js +7 -0
  41. package/dist/commands/catalog-types.js.map +1 -0
  42. package/dist/commands/catalog.d.ts +30 -0
  43. package/dist/commands/catalog.d.ts.map +1 -0
  44. package/dist/commands/catalog.js +108 -0
  45. package/dist/commands/catalog.js.map +1 -0
  46. package/dist/commands/commands-ops.d.ts +2 -0
  47. package/dist/commands/commands-ops.d.ts.map +1 -0
  48. package/dist/commands/commands-ops.js +19 -0
  49. package/dist/commands/commands-ops.js.map +1 -0
  50. package/dist/commands/deploy-ops.d.ts +45 -3
  51. package/dist/commands/deploy-ops.d.ts.map +1 -1
  52. package/dist/commands/deploy-ops.js +200 -227
  53. package/dist/commands/deploy-ops.js.map +1 -1
  54. package/dist/commands/deploy-status-ops.d.ts +13 -0
  55. package/dist/commands/deploy-status-ops.d.ts.map +1 -0
  56. package/dist/commands/deploy-status-ops.js +252 -0
  57. package/dist/commands/deploy-status-ops.js.map +1 -0
  58. package/dist/commands/deployments-ops.d.ts +30 -0
  59. package/dist/commands/deployments-ops.d.ts.map +1 -0
  60. package/dist/commands/deployments-ops.js +248 -0
  61. package/dist/commands/deployments-ops.js.map +1 -0
  62. package/dist/commands/envs-ops.d.ts +8 -0
  63. package/dist/commands/envs-ops.d.ts.map +1 -0
  64. package/dist/commands/envs-ops.js +240 -0
  65. package/dist/commands/envs-ops.js.map +1 -0
  66. package/dist/commands/github-ops.d.ts +15 -0
  67. package/dist/commands/github-ops.d.ts.map +1 -0
  68. package/dist/commands/github-ops.js +316 -0
  69. package/dist/commands/github-ops.js.map +1 -0
  70. package/dist/commands/github-runs-ops.d.ts +32 -0
  71. package/dist/commands/github-runs-ops.d.ts.map +1 -0
  72. package/dist/commands/github-runs-ops.js +132 -0
  73. package/dist/commands/github-runs-ops.js.map +1 -0
  74. package/dist/commands/github-shared.d.ts +60 -0
  75. package/dist/commands/github-shared.d.ts.map +1 -0
  76. package/dist/commands/github-shared.js +175 -0
  77. package/dist/commands/github-shared.js.map +1 -0
  78. package/dist/commands/org-admin.d.ts.map +1 -1
  79. package/dist/commands/org-admin.js +223 -43
  80. package/dist/commands/org-admin.js.map +1 -1
  81. package/dist/commands/output.d.ts +35 -0
  82. package/dist/commands/output.d.ts.map +1 -0
  83. package/dist/commands/output.js +34 -0
  84. package/dist/commands/output.js.map +1 -0
  85. package/dist/commands/resource-shared.d.ts +132 -0
  86. package/dist/commands/resource-shared.d.ts.map +1 -0
  87. package/dist/commands/resource-shared.js +159 -0
  88. package/dist/commands/resource-shared.js.map +1 -0
  89. package/dist/commands/session.d.ts +6 -9
  90. package/dist/commands/session.d.ts.map +1 -1
  91. package/dist/commands/session.js +42 -116
  92. package/dist/commands/session.js.map +1 -1
  93. package/dist/commands/shared.d.ts.map +1 -1
  94. package/dist/commands/shared.js +3 -91
  95. package/dist/commands/shared.js.map +1 -1
  96. package/dist/commands/target-picker.d.ts +44 -0
  97. package/dist/commands/target-picker.d.ts.map +1 -0
  98. package/dist/commands/target-picker.js +88 -0
  99. package/dist/commands/target-picker.js.map +1 -0
  100. package/dist/commands/update-ops.js +1 -1
  101. package/dist/diagnostics.d.ts +5 -0
  102. package/dist/diagnostics.d.ts.map +1 -1
  103. package/dist/diagnostics.js +1 -1
  104. package/dist/diagnostics.js.map +1 -1
  105. package/dist/doctor.d.ts.map +1 -1
  106. package/dist/doctor.js +33 -0
  107. package/dist/doctor.js.map +1 -1
  108. package/dist/fire.d.ts +94 -0
  109. package/dist/fire.d.ts.map +1 -0
  110. package/dist/fire.js +418 -0
  111. package/dist/fire.js.map +1 -0
  112. package/dist/flavor.d.ts +19 -0
  113. package/dist/flavor.d.ts.map +1 -0
  114. package/dist/flavor.js +95 -0
  115. package/dist/flavor.js.map +1 -0
  116. package/dist/project.js +2 -2
  117. package/dist/prompts.d.ts.map +1 -1
  118. package/dist/prompts.js +30 -17
  119. package/dist/prompts.js.map +1 -1
  120. package/dist/relative-time.d.ts +8 -0
  121. package/dist/relative-time.d.ts.map +1 -0
  122. package/dist/relative-time.js +29 -0
  123. package/dist/relative-time.js.map +1 -0
  124. package/dist/table.d.ts +47 -0
  125. package/dist/table.d.ts.map +1 -0
  126. package/dist/table.js +152 -0
  127. package/dist/table.js.map +1 -0
  128. package/dist/update-binary.js +1 -1
  129. package/dist/update-check.d.ts +1 -1
  130. package/dist/update-check.js +1 -1
  131. package/dist/update.js +1 -1
  132. package/dist/watch.d.ts +52 -0
  133. package/dist/watch.d.ts.map +1 -0
  134. package/dist/watch.js +177 -0
  135. package/dist/watch.js.map +1 -0
  136. package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.d.ts.map +1 -1
  137. package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js +28 -1
  138. package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js.map +1 -1
  139. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.d.ts.map +1 -1
  140. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js +6 -0
  141. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js.map +1 -1
  142. package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
  143. package/node_modules/@noodle-borg/authoring/dist/connectors.js +14 -0
  144. package/node_modules/@noodle-borg/authoring/dist/connectors.js.map +1 -1
  145. package/node_modules/@noodle-borg/authoring/dist/recording.js +18 -23
  146. package/node_modules/@noodle-borg/authoring/dist/recording.js.map +1 -1
  147. package/node_modules/@noodle-borg/connector-defs/dist/compile.js +9 -0
  148. package/node_modules/@noodle-borg/connector-defs/dist/compile.js.map +1 -1
  149. package/node_modules/@noodle-borg/openapi-import/dist/index.d.ts.map +1 -1
  150. package/node_modules/@noodle-borg/openapi-import/dist/index.js +3 -1
  151. package/node_modules/@noodle-borg/openapi-import/dist/index.js.map +1 -1
  152. package/node_modules/@noodle-borg/service/dist/alert-evaluator.d.ts +57 -0
  153. package/node_modules/@noodle-borg/service/dist/alert-evaluator.d.ts.map +1 -0
  154. package/node_modules/@noodle-borg/service/dist/alert-evaluator.js +158 -0
  155. package/node_modules/@noodle-borg/service/dist/alert-evaluator.js.map +1 -0
  156. package/node_modules/@noodle-borg/service/dist/alert-webhook.d.ts +72 -0
  157. package/node_modules/@noodle-borg/service/dist/alert-webhook.d.ts.map +1 -0
  158. package/node_modules/@noodle-borg/service/dist/alert-webhook.js +138 -0
  159. package/node_modules/@noodle-borg/service/dist/alert-webhook.js.map +1 -0
  160. package/node_modules/@noodle-borg/service/dist/github/app-client.d.ts +49 -0
  161. package/node_modules/@noodle-borg/service/dist/github/app-client.d.ts.map +1 -0
  162. package/node_modules/@noodle-borg/service/dist/github/app-client.js +23 -0
  163. package/node_modules/@noodle-borg/service/dist/github/app-client.js.map +1 -0
  164. package/node_modules/@noodle-borg/service/dist/github/install-nonce.d.ts +23 -0
  165. package/node_modules/@noodle-borg/service/dist/github/install-nonce.d.ts.map +1 -0
  166. package/node_modules/@noodle-borg/service/dist/github/install-nonce.js +57 -0
  167. package/node_modules/@noodle-borg/service/dist/github/install-nonce.js.map +1 -0
  168. package/node_modules/@noodle-borg/service/dist/github/pending-installations.d.ts +38 -0
  169. package/node_modules/@noodle-borg/service/dist/github/pending-installations.d.ts.map +1 -0
  170. package/node_modules/@noodle-borg/service/dist/github/pending-installations.js +41 -0
  171. package/node_modules/@noodle-borg/service/dist/github/pending-installations.js.map +1 -0
  172. package/node_modules/@noodle-borg/service/dist/index.d.ts +15 -1
  173. package/node_modules/@noodle-borg/service/dist/index.d.ts.map +1 -1
  174. package/node_modules/@noodle-borg/service/dist/index.js +15 -1
  175. package/node_modules/@noodle-borg/service/dist/index.js.map +1 -1
  176. package/node_modules/@noodle-borg/service/dist/options.d.ts +47 -1
  177. package/node_modules/@noodle-borg/service/dist/options.d.ts.map +1 -1
  178. package/node_modules/@noodle-borg/service/dist/registry-state.d.ts +28 -7
  179. package/node_modules/@noodle-borg/service/dist/registry-state.d.ts.map +1 -1
  180. package/node_modules/@noodle-borg/service/dist/registry-state.js +116 -3
  181. package/node_modules/@noodle-borg/service/dist/registry-state.js.map +1 -1
  182. package/node_modules/@noodle-borg/service/dist/registry.d.ts +14 -1
  183. package/node_modules/@noodle-borg/service/dist/registry.d.ts.map +1 -1
  184. package/node_modules/@noodle-borg/service/dist/registry.js +20 -45
  185. package/node_modules/@noodle-borg/service/dist/registry.js.map +1 -1
  186. package/node_modules/@noodle-borg/service/dist/routes/alerts-dispatch.d.ts +28 -0
  187. package/node_modules/@noodle-borg/service/dist/routes/alerts-dispatch.d.ts.map +1 -0
  188. package/node_modules/@noodle-borg/service/dist/routes/alerts-dispatch.js +50 -0
  189. package/node_modules/@noodle-borg/service/dist/routes/alerts-dispatch.js.map +1 -0
  190. package/node_modules/@noodle-borg/service/dist/routes/alerts.d.ts +39 -0
  191. package/node_modules/@noodle-borg/service/dist/routes/alerts.d.ts.map +1 -0
  192. package/node_modules/@noodle-borg/service/dist/routes/alerts.js +204 -0
  193. package/node_modules/@noodle-borg/service/dist/routes/alerts.js.map +1 -0
  194. package/node_modules/@noodle-borg/service/dist/routes/analytics-dispatch.d.ts +23 -0
  195. package/node_modules/@noodle-borg/service/dist/routes/analytics-dispatch.d.ts.map +1 -0
  196. package/node_modules/@noodle-borg/service/dist/routes/analytics-dispatch.js +53 -0
  197. package/node_modules/@noodle-borg/service/dist/routes/analytics-dispatch.js.map +1 -0
  198. package/node_modules/@noodle-borg/service/dist/routes/apps.d.ts +24 -0
  199. package/node_modules/@noodle-borg/service/dist/routes/apps.d.ts.map +1 -0
  200. package/node_modules/@noodle-borg/service/dist/routes/apps.js +72 -0
  201. package/node_modules/@noodle-borg/service/dist/routes/apps.js.map +1 -0
  202. package/node_modules/@noodle-borg/service/dist/routes/contracts.d.ts +465 -0
  203. package/node_modules/@noodle-borg/service/dist/routes/contracts.d.ts.map +1 -0
  204. package/node_modules/@noodle-borg/service/dist/routes/contracts.js +233 -0
  205. package/node_modules/@noodle-borg/service/dist/routes/contracts.js.map +1 -0
  206. package/node_modules/@noodle-borg/service/dist/routes/deployments.d.ts +12 -1
  207. package/node_modules/@noodle-borg/service/dist/routes/deployments.d.ts.map +1 -1
  208. package/node_modules/@noodle-borg/service/dist/routes/deployments.js +31 -2
  209. package/node_modules/@noodle-borg/service/dist/routes/deployments.js.map +1 -1
  210. package/node_modules/@noodle-borg/service/dist/routes/endpoint-enrichment.d.ts +17 -0
  211. package/node_modules/@noodle-borg/service/dist/routes/endpoint-enrichment.d.ts.map +1 -0
  212. package/node_modules/@noodle-borg/service/dist/routes/endpoint-enrichment.js +15 -0
  213. package/node_modules/@noodle-borg/service/dist/routes/endpoint-enrichment.js.map +1 -0
  214. package/node_modules/@noodle-borg/service/dist/routes/envs.d.ts +22 -0
  215. package/node_modules/@noodle-borg/service/dist/routes/envs.d.ts.map +1 -0
  216. package/node_modules/@noodle-borg/service/dist/routes/envs.js +46 -0
  217. package/node_modules/@noodle-borg/service/dist/routes/envs.js.map +1 -0
  218. package/node_modules/@noodle-borg/service/dist/routes/github-connection.d.ts +29 -0
  219. package/node_modules/@noodle-borg/service/dist/routes/github-connection.d.ts.map +1 -0
  220. package/node_modules/@noodle-borg/service/dist/routes/github-connection.js +202 -0
  221. package/node_modules/@noodle-borg/service/dist/routes/github-connection.js.map +1 -0
  222. package/node_modules/@noodle-borg/service/dist/routes/github-dispatch.d.ts +30 -0
  223. package/node_modules/@noodle-borg/service/dist/routes/github-dispatch.d.ts.map +1 -0
  224. package/node_modules/@noodle-borg/service/dist/routes/github-dispatch.js +95 -0
  225. package/node_modules/@noodle-borg/service/dist/routes/github-dispatch.js.map +1 -0
  226. package/node_modules/@noodle-borg/service/dist/routes/github-runs.d.ts +8 -0
  227. package/node_modules/@noodle-borg/service/dist/routes/github-runs.d.ts.map +1 -0
  228. package/node_modules/@noodle-borg/service/dist/routes/github-runs.js +33 -0
  229. package/node_modules/@noodle-borg/service/dist/routes/github-runs.js.map +1 -0
  230. package/node_modules/@noodle-borg/service/dist/routes/github-setup.d.ts +28 -0
  231. package/node_modules/@noodle-borg/service/dist/routes/github-setup.d.ts.map +1 -0
  232. package/node_modules/@noodle-borg/service/dist/routes/github-setup.js +80 -0
  233. package/node_modules/@noodle-borg/service/dist/routes/github-setup.js.map +1 -0
  234. package/node_modules/@noodle-borg/service/dist/routes/github-webhook.d.ts +29 -0
  235. package/node_modules/@noodle-borg/service/dist/routes/github-webhook.d.ts.map +1 -0
  236. package/node_modules/@noodle-borg/service/dist/routes/github-webhook.js +355 -0
  237. package/node_modules/@noodle-borg/service/dist/routes/github-webhook.js.map +1 -0
  238. package/node_modules/@noodle-borg/service/dist/routes/org-admin-dispatch.d.ts +27 -0
  239. package/node_modules/@noodle-borg/service/dist/routes/org-admin-dispatch.d.ts.map +1 -0
  240. package/node_modules/@noodle-borg/service/dist/routes/org-admin-dispatch.js +61 -0
  241. package/node_modules/@noodle-borg/service/dist/routes/org-admin-dispatch.js.map +1 -0
  242. package/node_modules/@noodle-borg/service/dist/routes/org-admin.d.ts +5 -0
  243. package/node_modules/@noodle-borg/service/dist/routes/org-admin.d.ts.map +1 -1
  244. package/node_modules/@noodle-borg/service/dist/routes/org-admin.js +13 -1
  245. package/node_modules/@noodle-borg/service/dist/routes/org-admin.js.map +1 -1
  246. package/node_modules/@noodle-borg/service/dist/routes/paths.d.ts +64 -1
  247. package/node_modules/@noodle-borg/service/dist/routes/paths.d.ts.map +1 -1
  248. package/node_modules/@noodle-borg/service/dist/routes/paths.js +170 -1
  249. package/node_modules/@noodle-borg/service/dist/routes/paths.js.map +1 -1
  250. package/node_modules/@noodle-borg/service/dist/routes/resource-read-dispatch.d.ts +33 -0
  251. package/node_modules/@noodle-borg/service/dist/routes/resource-read-dispatch.d.ts.map +1 -0
  252. package/node_modules/@noodle-borg/service/dist/routes/resource-read-dispatch.js +69 -0
  253. package/node_modules/@noodle-borg/service/dist/routes/resource-read-dispatch.js.map +1 -0
  254. package/node_modules/@noodle-borg/service/dist/serve.d.ts.map +1 -1
  255. package/node_modules/@noodle-borg/service/dist/serve.js +42 -1
  256. package/node_modules/@noodle-borg/service/dist/serve.js.map +1 -1
  257. package/node_modules/@noodle-borg/service/dist/service.d.ts.map +1 -1
  258. package/node_modules/@noodle-borg/service/dist/service.js +81 -82
  259. package/node_modules/@noodle-borg/service/dist/service.js.map +1 -1
  260. package/node_modules/@noodle-borg/service/dist/store/alert-rules-json-file.d.ts +21 -0
  261. package/node_modules/@noodle-borg/service/dist/store/alert-rules-json-file.d.ts.map +1 -0
  262. package/node_modules/@noodle-borg/service/dist/store/alert-rules-json-file.js +115 -0
  263. package/node_modules/@noodle-borg/service/dist/store/alert-rules-json-file.js.map +1 -0
  264. package/node_modules/@noodle-borg/service/dist/store/alert-rules.d.ts +108 -0
  265. package/node_modules/@noodle-borg/service/dist/store/alert-rules.d.ts.map +1 -0
  266. package/node_modules/@noodle-borg/service/dist/store/alert-rules.js +181 -0
  267. package/node_modules/@noodle-borg/service/dist/store/alert-rules.js.map +1 -0
  268. package/node_modules/@noodle-borg/service/dist/store/control-plane.d.ts +1 -0
  269. package/node_modules/@noodle-borg/service/dist/store/control-plane.d.ts.map +1 -1
  270. package/node_modules/@noodle-borg/service/dist/store/control-plane.js +3 -0
  271. package/node_modules/@noodle-borg/service/dist/store/control-plane.js.map +1 -1
  272. package/node_modules/@noodle-borg/service/dist/store/github-connections-json-file.d.ts +24 -0
  273. package/node_modules/@noodle-borg/service/dist/store/github-connections-json-file.d.ts.map +1 -0
  274. package/node_modules/@noodle-borg/service/dist/store/github-connections-json-file.js +141 -0
  275. package/node_modules/@noodle-borg/service/dist/store/github-connections-json-file.js.map +1 -0
  276. package/node_modules/@noodle-borg/service/dist/store/github-connections.d.ts +31 -0
  277. package/node_modules/@noodle-borg/service/dist/store/github-connections.d.ts.map +1 -0
  278. package/node_modules/@noodle-borg/service/dist/store/github-connections.js +120 -0
  279. package/node_modules/@noodle-borg/service/dist/store/github-connections.js.map +1 -0
  280. package/node_modules/@noodle-borg/service/dist/store/github-runs-json-file.d.ts +22 -0
  281. package/node_modules/@noodle-borg/service/dist/store/github-runs-json-file.d.ts.map +1 -0
  282. package/node_modules/@noodle-borg/service/dist/store/github-runs-json-file.js +116 -0
  283. package/node_modules/@noodle-borg/service/dist/store/github-runs-json-file.js.map +1 -0
  284. package/node_modules/@noodle-borg/service/dist/store/github-runs.d.ts +51 -0
  285. package/node_modules/@noodle-borg/service/dist/store/github-runs.d.ts.map +1 -0
  286. package/node_modules/@noodle-borg/service/dist/store/github-runs.js +158 -0
  287. package/node_modules/@noodle-borg/service/dist/store/github-runs.js.map +1 -0
  288. package/node_modules/@noodle-borg/service/dist/store/in-memory.d.ts +32 -0
  289. package/node_modules/@noodle-borg/service/dist/store/in-memory.d.ts.map +1 -0
  290. package/node_modules/@noodle-borg/service/dist/store/in-memory.js +169 -0
  291. package/node_modules/@noodle-borg/service/dist/store/in-memory.js.map +1 -0
  292. package/node_modules/@noodle-borg/service/dist/store/json-file.d.ts +14 -1
  293. package/node_modules/@noodle-borg/service/dist/store/json-file.d.ts.map +1 -1
  294. package/node_modules/@noodle-borg/service/dist/store/json-file.js +54 -1
  295. package/node_modules/@noodle-borg/service/dist/store/json-file.js.map +1 -1
  296. package/node_modules/@noodle-borg/service/dist/store/pending-installations-postgres.d.ts +19 -0
  297. package/node_modules/@noodle-borg/service/dist/store/pending-installations-postgres.d.ts.map +1 -0
  298. package/node_modules/@noodle-borg/service/dist/store/pending-installations-postgres.js +46 -0
  299. package/node_modules/@noodle-borg/service/dist/store/pending-installations-postgres.js.map +1 -0
  300. package/node_modules/@noodle-borg/service/dist/store/postgres-alerts.d.ts +26 -0
  301. package/node_modules/@noodle-borg/service/dist/store/postgres-alerts.d.ts.map +1 -0
  302. package/node_modules/@noodle-borg/service/dist/store/postgres-alerts.js +142 -0
  303. package/node_modules/@noodle-borg/service/dist/store/postgres-alerts.js.map +1 -0
  304. package/node_modules/@noodle-borg/service/dist/store/postgres-apps.d.ts +11 -0
  305. package/node_modules/@noodle-borg/service/dist/store/postgres-apps.d.ts.map +1 -0
  306. package/node_modules/@noodle-borg/service/dist/store/postgres-apps.js +31 -0
  307. package/node_modules/@noodle-borg/service/dist/store/postgres-apps.js.map +1 -0
  308. package/node_modules/@noodle-borg/service/dist/store/postgres-config.d.ts +21 -0
  309. package/node_modules/@noodle-borg/service/dist/store/postgres-config.d.ts.map +1 -0
  310. package/node_modules/@noodle-borg/service/dist/store/postgres-config.js +80 -0
  311. package/node_modules/@noodle-borg/service/dist/store/postgres-config.js.map +1 -0
  312. package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.d.ts +1 -0
  313. package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.d.ts.map +1 -1
  314. package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.js +6 -0
  315. package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.js.map +1 -1
  316. package/node_modules/@noodle-borg/service/dist/store/postgres-envs.d.ts +7 -0
  317. package/node_modules/@noodle-borg/service/dist/store/postgres-envs.d.ts.map +1 -0
  318. package/node_modules/@noodle-borg/service/dist/store/postgres-envs.js +34 -0
  319. package/node_modules/@noodle-borg/service/dist/store/postgres-envs.js.map +1 -0
  320. package/node_modules/@noodle-borg/service/dist/store/postgres-github-runs.d.ts +9 -0
  321. package/node_modules/@noodle-borg/service/dist/store/postgres-github-runs.d.ts.map +1 -0
  322. package/node_modules/@noodle-borg/service/dist/store/postgres-github-runs.js +113 -0
  323. package/node_modules/@noodle-borg/service/dist/store/postgres-github-runs.js.map +1 -0
  324. package/node_modules/@noodle-borg/service/dist/store/postgres-github.d.ts +13 -0
  325. package/node_modules/@noodle-borg/service/dist/store/postgres-github.d.ts.map +1 -0
  326. package/node_modules/@noodle-borg/service/dist/store/postgres-github.js +130 -0
  327. package/node_modules/@noodle-borg/service/dist/store/postgres-github.js.map +1 -0
  328. package/node_modules/@noodle-borg/service/dist/store/postgres-schema.d.ts.map +1 -1
  329. package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js +85 -0
  330. package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js.map +1 -1
  331. package/node_modules/@noodle-borg/service/dist/store/postgres.d.ts +32 -2
  332. package/node_modules/@noodle-borg/service/dist/store/postgres.d.ts.map +1 -1
  333. package/node_modules/@noodle-borg/service/dist/store/postgres.js +72 -75
  334. package/node_modules/@noodle-borg/service/dist/store/postgres.js.map +1 -1
  335. package/node_modules/@noodle-borg/service/dist/store/records.d.ts +56 -3
  336. package/node_modules/@noodle-borg/service/dist/store/records.d.ts.map +1 -1
  337. package/node_modules/@noodle-borg/service/dist/store/records.js +158 -0
  338. package/node_modules/@noodle-borg/service/dist/store/records.js.map +1 -1
  339. package/node_modules/@noodle-borg/service/dist/store/validate.d.ts +2 -0
  340. package/node_modules/@noodle-borg/service/dist/store/validate.d.ts.map +1 -1
  341. package/node_modules/@noodle-borg/service/dist/store/validate.js +7 -0
  342. package/node_modules/@noodle-borg/service/dist/store/validate.js.map +1 -1
  343. package/node_modules/@noodle-borg/service/dist/store.d.ts +265 -17
  344. package/node_modules/@noodle-borg/service/dist/store.d.ts.map +1 -1
  345. package/node_modules/@noodle-borg/service/dist/store.js +10 -118
  346. package/node_modules/@noodle-borg/service/dist/store.js.map +1 -1
  347. package/node_modules/@noodle-borg/service/package.json +2 -1
  348. package/package.json +2 -2
@@ -0,0 +1,240 @@
1
+ /**
2
+ * The `envs` resource commands: `noodle envs list` / `noodle envs inspect`. Read-only, org- and
3
+ * app-scoped views over the hosted `GET /v1/orgs/{org}/apps/{app}/envs[/{env}]` routes (see
4
+ * `packages/service/src/routes/envs.ts`); each `EnvSummary` narrows the app aggregation to one
5
+ * environment. The wire types, target resolution, failure builders, and branded table styling live
6
+ * in `resource-shared.ts` (`envs` parses its own `--app` flag, below); the interactive org/app/env
7
+ * pickers for an unresolved target live in `target-picker.ts`.
8
+ */
9
+ import { readConfig } from '../config.js';
10
+ import { resolveControlPlaneToken, ServiceRequestError, serviceJson } from '../control-plane.js';
11
+ import { readProjectLink } from '../project.js';
12
+ import { relativeTime } from '../relative-time.js';
13
+ import { renderTable } from '../table.js';
14
+ import { EXIT, printJsonOk } from './output.js';
15
+ import { ACCESS_CHIP_COLORS, ACTIVE_GREEN, authRequired, DIM_GRAY, notFoundApp, notFoundEnv, stdoutTableOptions, } from './resource-shared.js';
16
+ import { printCliFailure, resolveTenantTarget, serviceFailure, usage } from './shared.js';
17
+ import { pickAppInteractively, pickEnvInteractively, pickOrgInteractively, } from './target-picker.js';
18
+ export async function runEnvs(rest, env, home) {
19
+ const [subcommand, ...tail] = rest;
20
+ if (subcommand === 'list')
21
+ return runEnvsList(tail, env, home);
22
+ if (subcommand === 'inspect')
23
+ return runEnvsInspect(tail, env, home);
24
+ usage();
25
+ return EXIT.USAGE;
26
+ }
27
+ function parseCommonEnvsArgs(rest) {
28
+ let org;
29
+ let app;
30
+ let service;
31
+ let authToken;
32
+ let json = false;
33
+ let archived = false;
34
+ const positional = [];
35
+ for (let i = 0; i < rest.length; i++) {
36
+ const arg = rest[i];
37
+ if (arg === '--org')
38
+ org = rest[++i];
39
+ else if (arg === '--app')
40
+ app = rest[++i];
41
+ else if (arg === '--service')
42
+ service = rest[++i];
43
+ else if (arg === '--auth-token')
44
+ authToken = rest[++i];
45
+ else if (arg === '--json')
46
+ json = true;
47
+ else if (arg === '--archived')
48
+ archived = true;
49
+ else if (arg !== undefined)
50
+ positional.push(arg);
51
+ }
52
+ return {
53
+ common: {
54
+ ...(org !== undefined ? { org } : {}),
55
+ ...(app !== undefined ? { app } : {}),
56
+ ...(service !== undefined ? { service } : {}),
57
+ ...(authToken !== undefined ? { authToken } : {}),
58
+ json,
59
+ archived,
60
+ },
61
+ positional,
62
+ };
63
+ }
64
+ /**
65
+ * Resolve org/app the same way `resolveTenantTarget` does (flag > link > config), but without
66
+ * failing when one is still missing — the caller uses this to know which picker(s) to attempt
67
+ * before falling back to `resolveTenantTarget`'s combined `target_required` failure.
68
+ */
69
+ function partialEnvsTarget(common, home) {
70
+ const project = readProjectLink();
71
+ const config = readConfig(home);
72
+ const org = common.org ?? project?.org ?? config.defaultOrg;
73
+ const app = common.app ?? project?.app ?? config.defaultApp;
74
+ const serviceUrl = common.service ?? project?.serviceUrl ?? config.serviceUrl;
75
+ return {
76
+ ...(org !== undefined ? { org } : {}),
77
+ ...(app !== undefined ? { app } : {}),
78
+ ...(serviceUrl !== undefined ? { serviceUrl } : {}),
79
+ };
80
+ }
81
+ // --- list ----------------------------------------------------------------------
82
+ export async function runEnvsList(rest, env, home) {
83
+ const { common } = parseCommonEnvsArgs(rest);
84
+ const target = resolveTenantTarget({
85
+ ...(common.org !== undefined ? { org: common.org } : {}),
86
+ ...(common.app !== undefined ? { app: common.app } : {}),
87
+ }, home);
88
+ const partial = partialEnvsTarget(common, home);
89
+ const resolved = await resolveControlPlaneToken({
90
+ serviceFlag: common.service ?? (target.ok ? target.serviceUrl : partial.serviceUrl),
91
+ authFlag: common.authToken,
92
+ env,
93
+ home,
94
+ });
95
+ let org;
96
+ let app;
97
+ if (target.ok) {
98
+ org = target.org;
99
+ app = target.app;
100
+ }
101
+ else {
102
+ let pickedOrg = partial.org;
103
+ let pickedApp = partial.app;
104
+ if (pickedOrg === undefined) {
105
+ pickedOrg = await pickOrgInteractively(resolved, common.json, (o) => `noodle envs list --org ${o}`);
106
+ }
107
+ if (pickedOrg !== undefined && pickedApp === undefined) {
108
+ const resolvedOrg = pickedOrg;
109
+ pickedApp = await pickAppInteractively(resolved, resolvedOrg, common.json, (a) => `noodle envs list --org ${resolvedOrg} --app ${a}`);
110
+ }
111
+ if (pickedOrg === undefined || pickedApp === undefined) {
112
+ return printCliFailure('envs', target.error, common.json);
113
+ }
114
+ org = pickedOrg;
115
+ app = pickedApp;
116
+ }
117
+ if (resolved.token === undefined)
118
+ return printCliFailure('envs', authRequired(), common.json);
119
+ try {
120
+ const url = new URL(`${resolved.serviceUrl}/v1/orgs/${encodeURIComponent(org)}` +
121
+ `/apps/${encodeURIComponent(app)}/envs`);
122
+ if (common.archived)
123
+ url.searchParams.set('archived', 'true');
124
+ const body = await serviceJson(url.toString(), resolved.token);
125
+ if (common.json) {
126
+ printJsonOk(body.data);
127
+ return EXIT.OK;
128
+ }
129
+ if (body.data.envs.length === 0) {
130
+ console.log(`No environments for ${org}/${app}. Deploy with \`noodle deploy\`.`);
131
+ return EXIT.OK;
132
+ }
133
+ console.log(renderEnvsTable(body.data.envs, stdoutTableOptions()));
134
+ return EXIT.OK;
135
+ }
136
+ catch (error) {
137
+ if (error instanceof ServiceRequestError && error.status === 404) {
138
+ return printCliFailure('envs', notFoundApp(org, app), common.json);
139
+ }
140
+ return printCliFailure('envs', serviceFailure('envs', error, 'noodle doctor'), common.json);
141
+ }
142
+ }
143
+ // --- inspect -------------------------------------------------------------------
144
+ export async function runEnvsInspect(rest, env, home) {
145
+ const { common, positional } = parseCommonEnvsArgs(rest);
146
+ let envName = positional[0];
147
+ const target = resolveTenantTarget({
148
+ ...(common.org !== undefined ? { org: common.org } : {}),
149
+ ...(common.app !== undefined ? { app: common.app } : {}),
150
+ }, home);
151
+ if (!target.ok) {
152
+ if (envName === undefined) {
153
+ usage();
154
+ return EXIT.USAGE;
155
+ }
156
+ return printCliFailure('envs', target.error, common.json);
157
+ }
158
+ const resolved = await resolveControlPlaneToken({
159
+ serviceFlag: common.service ?? target.serviceUrl,
160
+ authFlag: common.authToken,
161
+ env,
162
+ home,
163
+ });
164
+ if (envName === undefined) {
165
+ const picked = await pickEnvInteractively(resolved, target.org, target.app, common.json, (e) => `noodle envs inspect ${e} --org ${target.org} --app ${target.app}`);
166
+ if (picked === undefined) {
167
+ usage();
168
+ return EXIT.USAGE;
169
+ }
170
+ envName = picked;
171
+ }
172
+ if (resolved.token === undefined)
173
+ return printCliFailure('envs', authRequired(), common.json);
174
+ try {
175
+ const url = `${resolved.serviceUrl}/v1/orgs/${encodeURIComponent(target.org)}` +
176
+ `/apps/${encodeURIComponent(target.app)}/envs/${encodeURIComponent(envName)}`;
177
+ const body = await serviceJson(url, resolved.token);
178
+ if (common.json) {
179
+ printJsonOk(body.data);
180
+ return EXIT.OK;
181
+ }
182
+ printEnvDetail(target.org, target.app, body.data);
183
+ return EXIT.OK;
184
+ }
185
+ catch (error) {
186
+ if (error instanceof ServiceRequestError && error.status === 404) {
187
+ return printCliFailure('envs', notFoundEnv(target.org, target.app, envName), common.json);
188
+ }
189
+ return printCliFailure('envs', serviceFailure('envs', error, 'noodle envs list'), common.json);
190
+ }
191
+ }
192
+ function printEnvDetail(org, app, envSummary) {
193
+ console.log(`env: ${envSummary.envName}`);
194
+ console.log(`org: ${org}`);
195
+ console.log(`app: ${app}`);
196
+ console.log(`access: ${envSummary.accessMode ?? '—'}`);
197
+ console.log(`active: ${envSummary.active ? 'yes' : 'no'}`);
198
+ console.log(`deploys: ${envSummary.deploymentCount}`);
199
+ console.log(`created: ${envSummary.createdAt}`);
200
+ console.log(`updated: ${envSummary.lastActivityAt ?? '—'}`);
201
+ if (envSummary.latest !== undefined) {
202
+ const version = envSummary.latest.serverVersion !== undefined ? ` (v${envSummary.latest.serverVersion})` : '';
203
+ console.log(`latest: ${envSummary.latest.deploymentId}${version}`);
204
+ }
205
+ else {
206
+ console.log('latest: no deploys');
207
+ }
208
+ if (envSummary.archivedAt !== undefined)
209
+ console.log(`archived: ${envSummary.archivedAt}`);
210
+ }
211
+ // --- table rendering -----------------------------------------------------------
212
+ const ENVS_COLUMNS = [
213
+ { header: 'ENV', get: (e) => e.envName },
214
+ {
215
+ header: 'STATUS',
216
+ get: (e) => (e.latest === undefined ? 'no deploys' : e.active ? 'active' : 'inactive'),
217
+ color: (e) => (e.latest !== undefined && e.active ? ACTIVE_GREEN : DIM_GRAY),
218
+ },
219
+ {
220
+ header: 'ACCESS',
221
+ get: (e) => e.accessMode ?? '—',
222
+ color: (e) => (e.accessMode !== undefined ? ACCESS_CHIP_COLORS[e.accessMode] : undefined),
223
+ },
224
+ {
225
+ header: 'DEPLOYS',
226
+ get: (e) => String(e.deploymentCount),
227
+ align: 'right',
228
+ },
229
+ {
230
+ header: 'UPDATED',
231
+ get: (e) => (e.lastActivityAt !== undefined ? relativeTime(e.lastActivityAt) : '—'),
232
+ align: 'right',
233
+ color: (e) => (e.lastActivityAt === undefined ? DIM_GRAY : undefined),
234
+ },
235
+ ];
236
+ /** Render the `envs list` table. Exported so tests (and the contract drift gate) can call it directly. */
237
+ export function renderEnvsTable(envs, opts) {
238
+ return renderTable(ENVS_COLUMNS, envs, opts);
239
+ }
240
+ //# sourceMappingURL=envs-ops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"envs-ops.js","sourceRoot":"","sources":["../../src/commands/envs-ops.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export interface GithubConnectDeps {
2
+ /** Injectable browser opener seam (tests spy/inject; production defaults to the real `open`/`xdg-open`). */
3
+ readonly openBrowser?: (url: string) => void | Promise<void>;
4
+ /** Poll interval for the install hand-off. Default 2000ms. */
5
+ readonly pollIntervalMs?: number;
6
+ /** Total time to wait for the browser install to land before giving up. Default 5 minutes. */
7
+ readonly pollTimeoutMs?: number;
8
+ /** Injectable sleep, so tests never depend on real timers. */
9
+ readonly sleep?: (ms: number) => Promise<void>;
10
+ }
11
+ export declare function runGithubConnect(rest: readonly string[], env: NodeJS.ProcessEnv, home: string, deps?: GithubConnectDeps): Promise<number>;
12
+ export declare function runGithubStatus(rest: readonly string[], env: NodeJS.ProcessEnv, home: string): Promise<number>;
13
+ export declare function runGithubDisconnect(rest: readonly string[], env: NodeJS.ProcessEnv, home: string): Promise<number>;
14
+ export declare function runGithub(rest: readonly string[], env: NodeJS.ProcessEnv, home: string): Promise<number>;
15
+ //# sourceMappingURL=github-ops.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-ops.d.ts","sourceRoot":"","sources":["../../src/commands/github-ops.ts"],"names":[],"mappings":"AAoCA,MAAM,WAAW,iBAAiB;IAChC,4GAA4G;IAC5G,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,8DAA8D;IAC9D,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,8FAA8F;IAC9F,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,8DAA8D;IAC9D,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD;AAyCD,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC,MAAM,CAAC,CAwIjB;AAID,wBAAsB,eAAe,CACnC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,CAsEjB;AAID,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,CAgEjB;AAID,wBAAsB,SAAS,CAC7B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,CAmBjB"}
@@ -0,0 +1,316 @@
1
+ /**
2
+ * `noodle github connect|status|disconnect` (GHD-1.4): browser-driven GitHub App installation plus the
3
+ * service-backed repository-connection APIs (`packages/service/src/routes/github-connection.ts` +
4
+ * `github-setup.ts`). `connect` never writes any local state before its final `POST .../github/connection`
5
+ * call — every earlier step (install-url, opening the browser, polling, claiming) is read-only or lives
6
+ * entirely in the service's short-lived nonce/pending state, so a Ctrl-C at any point before that last
7
+ * network call leaves nothing to clean up locally or remotely. Wire types, target resolution, arg
8
+ * parsing, and the failure builders live in the sibling `github-shared.ts`.
9
+ */
10
+ import { resolveControlPlaneToken, ServiceRequestError, serviceJson } from '../control-plane.js';
11
+ import { AbortPromptError, confirm, isInteractive, select } from '../prompts.js';
12
+ import { relativeTime } from '../relative-time.js';
13
+ import { printStep } from '../status.js';
14
+ import { openUrl, shouldOpenBrowser } from './deploy-ops.js';
15
+ import { runGithubRuns } from './github-runs-ops.js';
16
+ import { authRequired, conflictFailure, githubAppNotConfiguredFailure, installTimeoutFailure, missingRepoAnswerFailure, noRepositoriesFailure, ownerRoleFailure, parseGithubArgs, repoNotFoundFailure, resolveGithubTarget, serviceErrorFailure, } from './github-shared.js';
17
+ import { EXIT, printJsonOk } from './output.js';
18
+ import { dimText } from './resource-shared.js';
19
+ import { printCliFailure } from './shared.js';
20
+ const DEFAULT_POLL_INTERVAL_MS = 2000;
21
+ const DEFAULT_POLL_TIMEOUT_MS = 5 * 60 * 1000;
22
+ function defaultSleep(ms) {
23
+ return new Promise((resolve) => setTimeout(resolve, ms));
24
+ }
25
+ /**
26
+ * Poll `GET /v1/github/installations/pending?state=` until the browser install flow lands the GitHub
27
+ * Setup URL redirect on the service (`packages/service/src/routes/github-setup.ts` stores the
28
+ * installationId keyed by the signed state nonce). 404 = not landed yet, keep polling; anything else
29
+ * propagates. Resolves `undefined` on timeout.
30
+ */
31
+ async function pollPendingInstallation(serviceUrl, token, state, opts) {
32
+ const deadline = Date.now() + opts.timeoutMs;
33
+ for (;;) {
34
+ try {
35
+ const body = await serviceJson(`${serviceUrl}/v1/github/installations/pending?state=${encodeURIComponent(state)}`, token);
36
+ return body.data.installationId;
37
+ }
38
+ catch (error) {
39
+ if (!(error instanceof ServiceRequestError) || error.status !== 404)
40
+ throw error;
41
+ }
42
+ if (Date.now() >= deadline)
43
+ return undefined;
44
+ await opts.sleep(opts.intervalMs);
45
+ }
46
+ }
47
+ export async function runGithubConnect(rest, env, home, deps = {}) {
48
+ const args = parseGithubArgs(rest);
49
+ const json = args.json;
50
+ const resolved = resolveGithubTarget(args, home);
51
+ if (!resolved.ok)
52
+ return printCliFailure('github', resolved.error, json);
53
+ const { org, app, source } = resolved.target;
54
+ if (!json)
55
+ printStep('done', `Target: ${org}/${app} (from ${source})`);
56
+ const tokenResolution = await resolveControlPlaneToken({
57
+ serviceFlag: args.service ?? resolved.target.serviceUrl,
58
+ authFlag: args.authToken,
59
+ env,
60
+ home,
61
+ });
62
+ if (tokenResolution.token === undefined)
63
+ return printCliFailure('github', authRequired(), json);
64
+ const { serviceUrl, token } = tokenResolution;
65
+ let installUrl;
66
+ let state;
67
+ try {
68
+ const body = await serviceJson(`${serviceUrl}/v1/github/install-url?org=${encodeURIComponent(org)}&app=${encodeURIComponent(app)}`, token);
69
+ installUrl = body.data.installUrl;
70
+ state = body.data.state;
71
+ }
72
+ catch (error) {
73
+ if (error instanceof ServiceRequestError && error.status === 409) {
74
+ return printCliFailure('github', githubAppNotConfiguredFailure(), json);
75
+ }
76
+ return printCliFailure('github', serviceErrorFailure('noodle github connect', error), json);
77
+ }
78
+ if (!json) {
79
+ printStep('done', 'Opening GitHub to install Noodle Seed Deploys…');
80
+ console.log(dimText(installUrl, process.stdout));
81
+ }
82
+ const opener = deps.openBrowser ?? ((url) => (shouldOpenBrowser(env) ? openUrl(url) : undefined));
83
+ await Promise.resolve(opener(installUrl));
84
+ let landed;
85
+ try {
86
+ landed = await pollPendingInstallation(serviceUrl, token, state, {
87
+ intervalMs: deps.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS,
88
+ timeoutMs: deps.pollTimeoutMs ?? DEFAULT_POLL_TIMEOUT_MS,
89
+ sleep: deps.sleep ?? defaultSleep,
90
+ });
91
+ }
92
+ catch (error) {
93
+ return printCliFailure('github', serviceErrorFailure('noodle github connect', error), json);
94
+ }
95
+ if (landed === undefined)
96
+ return printCliFailure('github', installTimeoutFailure(), json);
97
+ // The claim body carries only the state: the service derives the installationId from the landed
98
+ // setup redirect itself and returns it — a client-supplied id is never trusted.
99
+ let repos;
100
+ let installationId;
101
+ try {
102
+ const claimBody = await serviceJson(`${serviceUrl}/v1/github/installations/claim`, token, {
103
+ method: 'POST',
104
+ headers: { 'content-type': 'application/json' },
105
+ body: JSON.stringify({ state }),
106
+ });
107
+ repos = claimBody.data.repositories;
108
+ installationId = claimBody.data.installationId;
109
+ }
110
+ catch (error) {
111
+ if (error instanceof ServiceRequestError && error.status === 403) {
112
+ return printCliFailure('github', ownerRoleFailure(org), json);
113
+ }
114
+ return printCliFailure('github', serviceErrorFailure('noodle github connect', error), json);
115
+ }
116
+ let chosen;
117
+ if (args.repo !== undefined) {
118
+ const match = repos.find((r) => r.fullName === args.repo);
119
+ if (match === undefined)
120
+ return printCliFailure('github', repoNotFoundFailure(args.repo, repos), json);
121
+ chosen = match;
122
+ }
123
+ else if (repos.length === 0) {
124
+ return printCliFailure('github', noRepositoriesFailure(), json);
125
+ }
126
+ else if (repos.length === 1) {
127
+ chosen = repos[0];
128
+ if (!json)
129
+ printStep('done', `Repository: ${chosen.fullName} (only repository in this installation)`);
130
+ }
131
+ else if (json || !isInteractive()) {
132
+ return printCliFailure('github', missingRepoAnswerFailure(repos), json);
133
+ }
134
+ else {
135
+ const options = repos.map((r) => ({
136
+ value: r,
137
+ label: r.fullName,
138
+ }));
139
+ try {
140
+ chosen = await select('Which repository?', options);
141
+ }
142
+ catch (error) {
143
+ if (error instanceof AbortPromptError) {
144
+ console.error('github connect: cancelled');
145
+ return EXIT.USAGE;
146
+ }
147
+ throw error;
148
+ }
149
+ }
150
+ let record;
151
+ try {
152
+ const connectBody = await serviceJson(`${serviceUrl}/v1/orgs/${encodeURIComponent(org)}/apps/${encodeURIComponent(app)}/github/connection`, token, {
153
+ method: 'POST',
154
+ headers: { 'content-type': 'application/json' },
155
+ body: JSON.stringify({ installationId, githubRepositoryId: chosen.id }),
156
+ });
157
+ record = connectBody.data;
158
+ }
159
+ catch (error) {
160
+ if (error instanceof ServiceRequestError) {
161
+ if (error.status === 403)
162
+ return printCliFailure('github', ownerRoleFailure(org), json);
163
+ if (error.status === 409)
164
+ return printCliFailure('github', conflictFailure(org, app, error.message), json);
165
+ }
166
+ return printCliFailure('github', serviceErrorFailure('noodle github connect', error), json);
167
+ }
168
+ if (json) {
169
+ printJsonOk(record);
170
+ return EXIT.OK;
171
+ }
172
+ printStep('done', `Connected ${record.repoName} → ${org}/${app}`);
173
+ console.log(`repo: ${record.repoName}`);
174
+ console.log(`branch: ${record.defaultBranch} → prod`);
175
+ console.log('PRs: pr-{number} preview environments (activates with deploy-on-push rollout)');
176
+ console.log('Next: git push deploys once rollout completes — check with noodle github status');
177
+ return EXIT.OK;
178
+ }
179
+ // --- status --------------------------------------------------------------------------------------
180
+ export async function runGithubStatus(rest, env, home) {
181
+ const args = parseGithubArgs(rest);
182
+ const json = args.json;
183
+ const resolved = resolveGithubTarget(args, home);
184
+ if (!resolved.ok)
185
+ return printCliFailure('github', resolved.error, json);
186
+ const { org, app } = resolved.target;
187
+ const tokenResolution = await resolveControlPlaneToken({
188
+ serviceFlag: args.service ?? resolved.target.serviceUrl,
189
+ authFlag: args.authToken,
190
+ env,
191
+ home,
192
+ });
193
+ if (tokenResolution.token === undefined)
194
+ return printCliFailure('github', authRequired(), json);
195
+ const { serviceUrl, token } = tokenResolution;
196
+ try {
197
+ const body = await serviceJson(`${serviceUrl}/v1/orgs/${encodeURIComponent(org)}/apps/${encodeURIComponent(app)}/github/connection`, token);
198
+ const record = body.data;
199
+ // Best-effort last-run line (GHD-2): the runs feed exists now, so status can surface it. A read
200
+ // failure here must never break status itself.
201
+ let lastRun;
202
+ try {
203
+ const runsBody = await serviceJson(`${serviceUrl}/v1/orgs/${encodeURIComponent(org)}/apps/${encodeURIComponent(app)}/github/runs?limit=1`, token);
204
+ lastRun = runsBody.data.runs[0];
205
+ }
206
+ catch {
207
+ lastRun = undefined;
208
+ }
209
+ if (json) {
210
+ printJsonOk({
211
+ connected: true,
212
+ connection: record,
213
+ ...(lastRun !== undefined ? { lastRun } : {}),
214
+ });
215
+ return EXIT.OK;
216
+ }
217
+ console.log(`repo: ${record.repoName} #${record.githubRepositoryId}`);
218
+ console.log(`target: ${org}/${app}`);
219
+ console.log(`branch: ${record.defaultBranch} → prod`);
220
+ console.log('state: connected');
221
+ console.log(`installation: ${record.installationId}`);
222
+ console.log(lastRun !== undefined
223
+ ? `last run: ${lastRun.commitSha.slice(0, 7)} → ${lastRun.envName} (${lastRun.status}, ${relativeTime(lastRun.createdAt)}) — noodle github runs`
224
+ : 'last run: — (no deploy runs yet)');
225
+ return EXIT.OK;
226
+ }
227
+ catch (error) {
228
+ if (error instanceof ServiceRequestError && error.status === 404) {
229
+ // Not-connected is a read result, not an error — exit 0 with the connect pointer.
230
+ if (json) {
231
+ printJsonOk({ connected: false });
232
+ return EXIT.OK;
233
+ }
234
+ console.log(`target: ${org}/${app}`);
235
+ console.log('state: not connected');
236
+ console.log('Next: noodle github connect');
237
+ return EXIT.OK;
238
+ }
239
+ return printCliFailure('github', serviceErrorFailure('noodle github status', error), json);
240
+ }
241
+ }
242
+ // --- disconnect ------------------------------------------------------------------------------------
243
+ export async function runGithubDisconnect(rest, env, home) {
244
+ const args = parseGithubArgs(rest);
245
+ const json = args.json;
246
+ const resolved = resolveGithubTarget(args, home);
247
+ if (!resolved.ok)
248
+ return printCliFailure('github', resolved.error, json);
249
+ const { org, app } = resolved.target;
250
+ if (!args.yes) {
251
+ const interactive = !json && process.stdin.isTTY === true && process.stdout.isTTY === true;
252
+ if (!interactive) {
253
+ return printCliFailure('github', {
254
+ code: 'confirmation_required',
255
+ message: 'disconnect requires confirmation',
256
+ cause: 'This stops GitHub-triggered deploys for the app. Reconnect any time.',
257
+ fix: 'Re-run with --yes to confirm non-interactively.',
258
+ next: `noodle github disconnect --org ${org} --app ${app} --yes`,
259
+ exitCode: EXIT.USAGE,
260
+ }, json);
261
+ }
262
+ const confirmed = await confirm(`This stops GitHub-triggered deploys for ${org}/${app}. Reconnect any time. Disconnect?`, { initial: false });
263
+ if (!confirmed) {
264
+ console.error('github disconnect: cancelled');
265
+ return EXIT.USAGE;
266
+ }
267
+ }
268
+ const tokenResolution = await resolveControlPlaneToken({
269
+ serviceFlag: args.service ?? resolved.target.serviceUrl,
270
+ authFlag: args.authToken,
271
+ env,
272
+ home,
273
+ });
274
+ if (tokenResolution.token === undefined)
275
+ return printCliFailure('github', authRequired(), json);
276
+ const { serviceUrl, token } = tokenResolution;
277
+ try {
278
+ const body = await serviceJson(`${serviceUrl}/v1/orgs/${encodeURIComponent(org)}/apps/${encodeURIComponent(app)}/github/connection`, token, { method: 'DELETE' });
279
+ if (json) {
280
+ printJsonOk(body.data);
281
+ return EXIT.OK;
282
+ }
283
+ console.log(body.data.disabled
284
+ ? `Disconnected ${org}/${app}. Reconnect any time with: noodle github connect --org ${org} --app ${app}`
285
+ : `${org}/${app} was already disconnected.`);
286
+ return EXIT.OK;
287
+ }
288
+ catch (error) {
289
+ if (error instanceof ServiceRequestError && error.status === 403) {
290
+ return printCliFailure('github', ownerRoleFailure(org), json);
291
+ }
292
+ return printCliFailure('github', serviceErrorFailure('noodle github disconnect', error), json);
293
+ }
294
+ }
295
+ // --- dispatch ------------------------------------------------------------------------------------
296
+ export async function runGithub(rest, env, home) {
297
+ const [action, ...actionRest] = rest;
298
+ if (action === 'connect')
299
+ return runGithubConnect(actionRest, env, home);
300
+ if (action === 'status')
301
+ return runGithubStatus(actionRest, env, home);
302
+ if (action === 'disconnect')
303
+ return runGithubDisconnect(actionRest, env, home);
304
+ if (action === 'runs')
305
+ return runGithubRuns(actionRest, env, home);
306
+ const json = rest.includes('--json');
307
+ return printCliFailure('github', {
308
+ code: 'usage_error',
309
+ message: 'usage: noodle github connect|status|disconnect|runs',
310
+ cause: 'usage: noodle github connect|status|disconnect|runs',
311
+ fix: 'Check the command arguments.',
312
+ next: 'noodle github --help',
313
+ exitCode: EXIT.USAGE,
314
+ }, json);
315
+ }
316
+ //# sourceMappingURL=github-ops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-ops.js","sourceRoot":"","sources":["../../src/commands/github-ops.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { TableOptions } from '../table.js';
2
+ /**
3
+ * `noodle github runs [--org --app --limit N --json --watch]` (GHD-2): the deploy-runs feed behind
4
+ * `GET /v1/orgs/{org}/apps/{app}/github/runs`. Pulled forward from GHD-4.4 so Phase 2 is observable
5
+ * the moment webhook intake lands — a queued/blocked run is visible here (and in the console feed)
6
+ * even though nothing builds it until GHD-3. Split from `github-ops.ts` for the size gate.
7
+ */
8
+ /** Wire shape of one deploy run — mirrors `DeployRunSchema` (`contract/v1/github-runs-response.json`). */
9
+ export interface DeployRun {
10
+ readonly runId: string;
11
+ readonly orgSlug: string;
12
+ readonly appSlug: string;
13
+ readonly envName: string;
14
+ readonly sourceEvent: 'push' | 'pull_request';
15
+ readonly deliveryId: string;
16
+ readonly githubRepositoryId: number;
17
+ readonly commitSha: string;
18
+ readonly ref: string;
19
+ readonly prNumber?: number;
20
+ readonly status: 'queued' | 'building' | 'deploying' | 'deployed' | 'failed' | 'canceled' | 'superseded';
21
+ readonly blockedReason?: string;
22
+ readonly deploymentId?: string;
23
+ readonly actorLogin: string;
24
+ readonly errorSummary?: string;
25
+ readonly createdAt: string;
26
+ readonly startedAt?: string;
27
+ readonly finishedAt?: string;
28
+ }
29
+ /** Render the `github runs` table. Exported for tests and the contract drift gate. */
30
+ export declare function renderRunsTable(runs: readonly DeployRun[], opts: TableOptions): string;
31
+ export declare function runGithubRuns(rest: readonly string[], env: NodeJS.ProcessEnv, home: string): Promise<number>;
32
+ //# sourceMappingURL=github-runs-ops.d.ts.map