@noodleseed/one 0.16.0 → 0.17.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 (275) hide show
  1. package/dist/cli.d.ts.map +1 -1
  2. package/dist/cli.js +49 -5
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/apps-ops.d.ts +17 -0
  5. package/dist/commands/apps-ops.d.ts.map +1 -0
  6. package/dist/commands/apps-ops.js +285 -0
  7. package/dist/commands/apps-ops.js.map +1 -0
  8. package/dist/commands/archive-ops.js +2 -2
  9. package/dist/commands/archive-ops.js.map +1 -1
  10. package/dist/commands/catalog-data-config.d.ts +9 -0
  11. package/dist/commands/catalog-data-config.d.ts.map +1 -0
  12. package/dist/commands/catalog-data-config.js +67 -0
  13. package/dist/commands/catalog-data-config.js.map +1 -0
  14. package/dist/commands/catalog-data-core.d.ts +13 -0
  15. package/dist/commands/catalog-data-core.d.ts.map +1 -0
  16. package/dist/commands/catalog-data-core.js +354 -0
  17. package/dist/commands/catalog-data-core.js.map +1 -0
  18. package/dist/commands/catalog-data-resources.d.ts +8 -0
  19. package/dist/commands/catalog-data-resources.d.ts.map +1 -0
  20. package/dist/commands/catalog-data-resources.js +506 -0
  21. package/dist/commands/catalog-data-resources.js.map +1 -0
  22. package/dist/commands/catalog-dispatch.d.ts +15 -0
  23. package/dist/commands/catalog-dispatch.d.ts.map +1 -0
  24. package/dist/commands/catalog-dispatch.js +95 -0
  25. package/dist/commands/catalog-dispatch.js.map +1 -0
  26. package/dist/commands/catalog-render.d.ts +28 -0
  27. package/dist/commands/catalog-render.d.ts.map +1 -0
  28. package/dist/commands/catalog-render.js +142 -0
  29. package/dist/commands/catalog-render.js.map +1 -0
  30. package/dist/commands/catalog-types.d.ts +46 -0
  31. package/dist/commands/catalog-types.d.ts.map +1 -0
  32. package/dist/commands/catalog-types.js +7 -0
  33. package/dist/commands/catalog-types.js.map +1 -0
  34. package/dist/commands/catalog.d.ts +30 -0
  35. package/dist/commands/catalog.d.ts.map +1 -0
  36. package/dist/commands/catalog.js +108 -0
  37. package/dist/commands/catalog.js.map +1 -0
  38. package/dist/commands/commands-ops.d.ts +2 -0
  39. package/dist/commands/commands-ops.d.ts.map +1 -0
  40. package/dist/commands/commands-ops.js +19 -0
  41. package/dist/commands/commands-ops.js.map +1 -0
  42. package/dist/commands/deploy-ops.d.ts +45 -3
  43. package/dist/commands/deploy-ops.d.ts.map +1 -1
  44. package/dist/commands/deploy-ops.js +200 -227
  45. package/dist/commands/deploy-ops.js.map +1 -1
  46. package/dist/commands/deploy-status-ops.d.ts +13 -0
  47. package/dist/commands/deploy-status-ops.d.ts.map +1 -0
  48. package/dist/commands/deploy-status-ops.js +252 -0
  49. package/dist/commands/deploy-status-ops.js.map +1 -0
  50. package/dist/commands/deployments-ops.d.ts +30 -0
  51. package/dist/commands/deployments-ops.d.ts.map +1 -0
  52. package/dist/commands/deployments-ops.js +248 -0
  53. package/dist/commands/deployments-ops.js.map +1 -0
  54. package/dist/commands/envs-ops.d.ts +8 -0
  55. package/dist/commands/envs-ops.d.ts.map +1 -0
  56. package/dist/commands/envs-ops.js +240 -0
  57. package/dist/commands/envs-ops.js.map +1 -0
  58. package/dist/commands/github-ops.d.ts +15 -0
  59. package/dist/commands/github-ops.d.ts.map +1 -0
  60. package/dist/commands/github-ops.js +296 -0
  61. package/dist/commands/github-ops.js.map +1 -0
  62. package/dist/commands/github-shared.d.ts +60 -0
  63. package/dist/commands/github-shared.d.ts.map +1 -0
  64. package/dist/commands/github-shared.js +175 -0
  65. package/dist/commands/github-shared.js.map +1 -0
  66. package/dist/commands/org-admin.d.ts.map +1 -1
  67. package/dist/commands/org-admin.js +223 -43
  68. package/dist/commands/org-admin.js.map +1 -1
  69. package/dist/commands/output.d.ts +35 -0
  70. package/dist/commands/output.d.ts.map +1 -0
  71. package/dist/commands/output.js +34 -0
  72. package/dist/commands/output.js.map +1 -0
  73. package/dist/commands/resource-shared.d.ts +132 -0
  74. package/dist/commands/resource-shared.d.ts.map +1 -0
  75. package/dist/commands/resource-shared.js +159 -0
  76. package/dist/commands/resource-shared.js.map +1 -0
  77. package/dist/commands/session.d.ts +6 -9
  78. package/dist/commands/session.d.ts.map +1 -1
  79. package/dist/commands/session.js +42 -116
  80. package/dist/commands/session.js.map +1 -1
  81. package/dist/commands/shared.d.ts.map +1 -1
  82. package/dist/commands/shared.js +3 -91
  83. package/dist/commands/shared.js.map +1 -1
  84. package/dist/commands/target-picker.d.ts +44 -0
  85. package/dist/commands/target-picker.d.ts.map +1 -0
  86. package/dist/commands/target-picker.js +88 -0
  87. package/dist/commands/target-picker.js.map +1 -0
  88. package/dist/commands/update-ops.js +1 -1
  89. package/dist/diagnostics.d.ts +5 -0
  90. package/dist/diagnostics.d.ts.map +1 -1
  91. package/dist/diagnostics.js +1 -1
  92. package/dist/diagnostics.js.map +1 -1
  93. package/dist/doctor.d.ts.map +1 -1
  94. package/dist/doctor.js +33 -0
  95. package/dist/doctor.js.map +1 -1
  96. package/dist/fire.d.ts +94 -0
  97. package/dist/fire.d.ts.map +1 -0
  98. package/dist/fire.js +418 -0
  99. package/dist/fire.js.map +1 -0
  100. package/dist/flavor.d.ts +19 -0
  101. package/dist/flavor.d.ts.map +1 -0
  102. package/dist/flavor.js +95 -0
  103. package/dist/flavor.js.map +1 -0
  104. package/dist/project.js +2 -2
  105. package/dist/prompts.d.ts.map +1 -1
  106. package/dist/prompts.js +30 -17
  107. package/dist/prompts.js.map +1 -1
  108. package/dist/relative-time.d.ts +8 -0
  109. package/dist/relative-time.d.ts.map +1 -0
  110. package/dist/relative-time.js +29 -0
  111. package/dist/relative-time.js.map +1 -0
  112. package/dist/table.d.ts +47 -0
  113. package/dist/table.d.ts.map +1 -0
  114. package/dist/table.js +152 -0
  115. package/dist/table.js.map +1 -0
  116. package/dist/update-binary.js +1 -1
  117. package/dist/update-check.d.ts +1 -1
  118. package/dist/update-check.js +1 -1
  119. package/dist/update.js +1 -1
  120. package/dist/watch.d.ts +52 -0
  121. package/dist/watch.d.ts.map +1 -0
  122. package/dist/watch.js +177 -0
  123. package/dist/watch.js.map +1 -0
  124. package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.d.ts.map +1 -1
  125. package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js +23 -1
  126. package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js.map +1 -1
  127. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.d.ts.map +1 -1
  128. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js +5 -0
  129. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js.map +1 -1
  130. package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
  131. package/node_modules/@noodle-borg/authoring/dist/connectors.js +14 -0
  132. package/node_modules/@noodle-borg/authoring/dist/connectors.js.map +1 -1
  133. package/node_modules/@noodle-borg/connector-defs/dist/compile.js +9 -0
  134. package/node_modules/@noodle-borg/connector-defs/dist/compile.js.map +1 -1
  135. package/node_modules/@noodle-borg/openapi-import/dist/index.d.ts.map +1 -1
  136. package/node_modules/@noodle-borg/openapi-import/dist/index.js +3 -1
  137. package/node_modules/@noodle-borg/openapi-import/dist/index.js.map +1 -1
  138. package/node_modules/@noodle-borg/service/dist/github/app-client.d.ts +49 -0
  139. package/node_modules/@noodle-borg/service/dist/github/app-client.d.ts.map +1 -0
  140. package/node_modules/@noodle-borg/service/dist/github/app-client.js +23 -0
  141. package/node_modules/@noodle-borg/service/dist/github/app-client.js.map +1 -0
  142. package/node_modules/@noodle-borg/service/dist/github/install-nonce.d.ts +23 -0
  143. package/node_modules/@noodle-borg/service/dist/github/install-nonce.d.ts.map +1 -0
  144. package/node_modules/@noodle-borg/service/dist/github/install-nonce.js +57 -0
  145. package/node_modules/@noodle-borg/service/dist/github/install-nonce.js.map +1 -0
  146. package/node_modules/@noodle-borg/service/dist/github/pending-installations.d.ts +31 -0
  147. package/node_modules/@noodle-borg/service/dist/github/pending-installations.d.ts.map +1 -0
  148. package/node_modules/@noodle-borg/service/dist/github/pending-installations.js +34 -0
  149. package/node_modules/@noodle-borg/service/dist/github/pending-installations.js.map +1 -0
  150. package/node_modules/@noodle-borg/service/dist/index.d.ts +7 -1
  151. package/node_modules/@noodle-borg/service/dist/index.d.ts.map +1 -1
  152. package/node_modules/@noodle-borg/service/dist/index.js +7 -1
  153. package/node_modules/@noodle-borg/service/dist/index.js.map +1 -1
  154. package/node_modules/@noodle-borg/service/dist/options.d.ts +28 -1
  155. package/node_modules/@noodle-borg/service/dist/options.d.ts.map +1 -1
  156. package/node_modules/@noodle-borg/service/dist/registry-state.d.ts +28 -7
  157. package/node_modules/@noodle-borg/service/dist/registry-state.d.ts.map +1 -1
  158. package/node_modules/@noodle-borg/service/dist/registry-state.js +116 -3
  159. package/node_modules/@noodle-borg/service/dist/registry-state.js.map +1 -1
  160. package/node_modules/@noodle-borg/service/dist/registry.d.ts +14 -1
  161. package/node_modules/@noodle-borg/service/dist/registry.d.ts.map +1 -1
  162. package/node_modules/@noodle-borg/service/dist/registry.js +20 -45
  163. package/node_modules/@noodle-borg/service/dist/registry.js.map +1 -1
  164. package/node_modules/@noodle-borg/service/dist/routes/analytics-dispatch.d.ts +23 -0
  165. package/node_modules/@noodle-borg/service/dist/routes/analytics-dispatch.d.ts.map +1 -0
  166. package/node_modules/@noodle-borg/service/dist/routes/analytics-dispatch.js +53 -0
  167. package/node_modules/@noodle-borg/service/dist/routes/analytics-dispatch.js.map +1 -0
  168. package/node_modules/@noodle-borg/service/dist/routes/apps.d.ts +24 -0
  169. package/node_modules/@noodle-borg/service/dist/routes/apps.d.ts.map +1 -0
  170. package/node_modules/@noodle-borg/service/dist/routes/apps.js +72 -0
  171. package/node_modules/@noodle-borg/service/dist/routes/apps.js.map +1 -0
  172. package/node_modules/@noodle-borg/service/dist/routes/contracts.d.ts +316 -0
  173. package/node_modules/@noodle-borg/service/dist/routes/contracts.d.ts.map +1 -0
  174. package/node_modules/@noodle-borg/service/dist/routes/contracts.js +152 -0
  175. package/node_modules/@noodle-borg/service/dist/routes/contracts.js.map +1 -0
  176. package/node_modules/@noodle-borg/service/dist/routes/deployments.d.ts +12 -1
  177. package/node_modules/@noodle-borg/service/dist/routes/deployments.d.ts.map +1 -1
  178. package/node_modules/@noodle-borg/service/dist/routes/deployments.js +31 -2
  179. package/node_modules/@noodle-borg/service/dist/routes/deployments.js.map +1 -1
  180. package/node_modules/@noodle-borg/service/dist/routes/endpoint-enrichment.d.ts +17 -0
  181. package/node_modules/@noodle-borg/service/dist/routes/endpoint-enrichment.d.ts.map +1 -0
  182. package/node_modules/@noodle-borg/service/dist/routes/endpoint-enrichment.js +15 -0
  183. package/node_modules/@noodle-borg/service/dist/routes/endpoint-enrichment.js.map +1 -0
  184. package/node_modules/@noodle-borg/service/dist/routes/envs.d.ts +22 -0
  185. package/node_modules/@noodle-borg/service/dist/routes/envs.d.ts.map +1 -0
  186. package/node_modules/@noodle-borg/service/dist/routes/envs.js +46 -0
  187. package/node_modules/@noodle-borg/service/dist/routes/envs.js.map +1 -0
  188. package/node_modules/@noodle-borg/service/dist/routes/github-connection.d.ts +29 -0
  189. package/node_modules/@noodle-borg/service/dist/routes/github-connection.d.ts.map +1 -0
  190. package/node_modules/@noodle-borg/service/dist/routes/github-connection.js +202 -0
  191. package/node_modules/@noodle-borg/service/dist/routes/github-connection.js.map +1 -0
  192. package/node_modules/@noodle-borg/service/dist/routes/github-dispatch.d.ts +29 -0
  193. package/node_modules/@noodle-borg/service/dist/routes/github-dispatch.d.ts.map +1 -0
  194. package/node_modules/@noodle-borg/service/dist/routes/github-dispatch.js +60 -0
  195. package/node_modules/@noodle-borg/service/dist/routes/github-dispatch.js.map +1 -0
  196. package/node_modules/@noodle-borg/service/dist/routes/github-setup.d.ts +28 -0
  197. package/node_modules/@noodle-borg/service/dist/routes/github-setup.d.ts.map +1 -0
  198. package/node_modules/@noodle-borg/service/dist/routes/github-setup.js +80 -0
  199. package/node_modules/@noodle-borg/service/dist/routes/github-setup.js.map +1 -0
  200. package/node_modules/@noodle-borg/service/dist/routes/org-admin.d.ts +5 -0
  201. package/node_modules/@noodle-borg/service/dist/routes/org-admin.d.ts.map +1 -1
  202. package/node_modules/@noodle-borg/service/dist/routes/org-admin.js +13 -1
  203. package/node_modules/@noodle-borg/service/dist/routes/org-admin.js.map +1 -1
  204. package/node_modules/@noodle-borg/service/dist/routes/paths.d.ts +44 -0
  205. package/node_modules/@noodle-borg/service/dist/routes/paths.d.ts.map +1 -1
  206. package/node_modules/@noodle-borg/service/dist/routes/paths.js +116 -1
  207. package/node_modules/@noodle-borg/service/dist/routes/paths.js.map +1 -1
  208. package/node_modules/@noodle-borg/service/dist/routes/resource-read-dispatch.d.ts +33 -0
  209. package/node_modules/@noodle-borg/service/dist/routes/resource-read-dispatch.d.ts.map +1 -0
  210. package/node_modules/@noodle-borg/service/dist/routes/resource-read-dispatch.js +69 -0
  211. package/node_modules/@noodle-borg/service/dist/routes/resource-read-dispatch.js.map +1 -0
  212. package/node_modules/@noodle-borg/service/dist/service.d.ts.map +1 -1
  213. package/node_modules/@noodle-borg/service/dist/service.js +60 -45
  214. package/node_modules/@noodle-borg/service/dist/service.js.map +1 -1
  215. package/node_modules/@noodle-borg/service/dist/store/control-plane.d.ts +1 -0
  216. package/node_modules/@noodle-borg/service/dist/store/control-plane.d.ts.map +1 -1
  217. package/node_modules/@noodle-borg/service/dist/store/control-plane.js +3 -0
  218. package/node_modules/@noodle-borg/service/dist/store/control-plane.js.map +1 -1
  219. package/node_modules/@noodle-borg/service/dist/store/github-connections-json-file.d.ts +23 -0
  220. package/node_modules/@noodle-borg/service/dist/store/github-connections-json-file.d.ts.map +1 -0
  221. package/node_modules/@noodle-borg/service/dist/store/github-connections-json-file.js +137 -0
  222. package/node_modules/@noodle-borg/service/dist/store/github-connections-json-file.js.map +1 -0
  223. package/node_modules/@noodle-borg/service/dist/store/github-connections.d.ts +30 -0
  224. package/node_modules/@noodle-borg/service/dist/store/github-connections.d.ts.map +1 -0
  225. package/node_modules/@noodle-borg/service/dist/store/github-connections.js +116 -0
  226. package/node_modules/@noodle-borg/service/dist/store/github-connections.js.map +1 -0
  227. package/node_modules/@noodle-borg/service/dist/store/in-memory.d.ts +32 -0
  228. package/node_modules/@noodle-borg/service/dist/store/in-memory.d.ts.map +1 -0
  229. package/node_modules/@noodle-borg/service/dist/store/in-memory.js +169 -0
  230. package/node_modules/@noodle-borg/service/dist/store/in-memory.js.map +1 -0
  231. package/node_modules/@noodle-borg/service/dist/store/json-file.d.ts +14 -1
  232. package/node_modules/@noodle-borg/service/dist/store/json-file.d.ts.map +1 -1
  233. package/node_modules/@noodle-borg/service/dist/store/json-file.js +54 -1
  234. package/node_modules/@noodle-borg/service/dist/store/json-file.js.map +1 -1
  235. package/node_modules/@noodle-borg/service/dist/store/postgres-apps.d.ts +11 -0
  236. package/node_modules/@noodle-borg/service/dist/store/postgres-apps.d.ts.map +1 -0
  237. package/node_modules/@noodle-borg/service/dist/store/postgres-apps.js +31 -0
  238. package/node_modules/@noodle-borg/service/dist/store/postgres-apps.js.map +1 -0
  239. package/node_modules/@noodle-borg/service/dist/store/postgres-config.d.ts +21 -0
  240. package/node_modules/@noodle-borg/service/dist/store/postgres-config.d.ts.map +1 -0
  241. package/node_modules/@noodle-borg/service/dist/store/postgres-config.js +80 -0
  242. package/node_modules/@noodle-borg/service/dist/store/postgres-config.js.map +1 -0
  243. package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.d.ts +1 -0
  244. package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.d.ts.map +1 -1
  245. package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.js +6 -0
  246. package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.js.map +1 -1
  247. package/node_modules/@noodle-borg/service/dist/store/postgres-envs.d.ts +7 -0
  248. package/node_modules/@noodle-borg/service/dist/store/postgres-envs.d.ts.map +1 -0
  249. package/node_modules/@noodle-borg/service/dist/store/postgres-envs.js +34 -0
  250. package/node_modules/@noodle-borg/service/dist/store/postgres-envs.js.map +1 -0
  251. package/node_modules/@noodle-borg/service/dist/store/postgres-github.d.ts +12 -0
  252. package/node_modules/@noodle-borg/service/dist/store/postgres-github.d.ts.map +1 -0
  253. package/node_modules/@noodle-borg/service/dist/store/postgres-github.js +125 -0
  254. package/node_modules/@noodle-borg/service/dist/store/postgres-github.js.map +1 -0
  255. package/node_modules/@noodle-borg/service/dist/store/postgres-schema.d.ts.map +1 -1
  256. package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js +36 -0
  257. package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js.map +1 -1
  258. package/node_modules/@noodle-borg/service/dist/store/postgres.d.ts +25 -2
  259. package/node_modules/@noodle-borg/service/dist/store/postgres.d.ts.map +1 -1
  260. package/node_modules/@noodle-borg/service/dist/store/postgres.js +56 -75
  261. package/node_modules/@noodle-borg/service/dist/store/postgres.js.map +1 -1
  262. package/node_modules/@noodle-borg/service/dist/store/records.d.ts +56 -3
  263. package/node_modules/@noodle-borg/service/dist/store/records.d.ts.map +1 -1
  264. package/node_modules/@noodle-borg/service/dist/store/records.js +158 -0
  265. package/node_modules/@noodle-borg/service/dist/store/records.js.map +1 -1
  266. package/node_modules/@noodle-borg/service/dist/store/validate.d.ts +2 -0
  267. package/node_modules/@noodle-borg/service/dist/store/validate.d.ts.map +1 -1
  268. package/node_modules/@noodle-borg/service/dist/store/validate.js +7 -0
  269. package/node_modules/@noodle-borg/service/dist/store/validate.js.map +1 -1
  270. package/node_modules/@noodle-borg/service/dist/store.d.ts +161 -17
  271. package/node_modules/@noodle-borg/service/dist/store.d.ts.map +1 -1
  272. package/node_modules/@noodle-borg/service/dist/store.js +8 -118
  273. package/node_modules/@noodle-borg/service/dist/store.js.map +1 -1
  274. package/node_modules/@noodle-borg/service/package.json +2 -1
  275. package/package.json +2 -2
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Agent-native output contract for the resource commands (`apps`/`envs`/`deployments`/`orgs`).
3
+ *
4
+ * The success side of the envelope. The failure side already lives in `shared.ts`
5
+ * (`CliFailure` + `printCliFailure` → `{ ok: false, error: { code, message, cause, fix, next } }`);
6
+ * this is its mirror image so every `--json` command emits one stable, machine-readable shape:
7
+ *
8
+ * success → { ok: true, data: <T>, warnings?: string[] }
9
+ * failure → { ok: false, error: { code, message, cause, fix, next, requestId? } }
10
+ *
11
+ * Exit codes are the same taxonomy `serviceFailure()` already returns, named here so new
12
+ * commands and their tests reference the contract instead of magic numbers.
13
+ */
14
+ /** Stable CLI exit-code taxonomy (superset-compatible with the existing serviceFailure codes). */
15
+ export declare const EXIT: {
16
+ /** Success. */
17
+ readonly OK: 0;
18
+ /** A domain/runtime failure (the request ran but did not succeed). */
19
+ readonly FAILURE: 1;
20
+ /** Bad arguments, a missing required target, or a headless missing-answer. */
21
+ readonly USAGE: 2;
22
+ /** Authentication/authorization failure (HTTP 401/403). */
23
+ readonly AUTH: 3;
24
+ /** The service could not be reached (network error). */
25
+ readonly UNREACHABLE: 4;
26
+ };
27
+ export type ExitCode = (typeof EXIT)[keyof typeof EXIT];
28
+ export interface JsonOk<T> {
29
+ readonly ok: true;
30
+ readonly data: T;
31
+ readonly warnings?: readonly string[];
32
+ }
33
+ /** Print the success envelope to stdout. Adds `warnings` only when non-empty (matches the error shape). */
34
+ export declare function printJsonOk<T>(data: T, warnings?: readonly string[]): void;
35
+ //# sourceMappingURL=output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/commands/output.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,kGAAkG;AAClG,eAAO,MAAM,IAAI;IACf,eAAe;;IAEf,sEAAsE;;IAEtE,8EAA8E;;IAE9E,2DAA2D;;IAE3D,wDAAwD;;CAEhD,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,OAAO,IAAI,CAAC,CAAC;AAExD,MAAM,WAAW,MAAM,CAAC,CAAC;IACvB,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjB,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAED,2GAA2G;AAC3G,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAM1E"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Agent-native output contract for the resource commands (`apps`/`envs`/`deployments`/`orgs`).
3
+ *
4
+ * The success side of the envelope. The failure side already lives in `shared.ts`
5
+ * (`CliFailure` + `printCliFailure` → `{ ok: false, error: { code, message, cause, fix, next } }`);
6
+ * this is its mirror image so every `--json` command emits one stable, machine-readable shape:
7
+ *
8
+ * success → { ok: true, data: <T>, warnings?: string[] }
9
+ * failure → { ok: false, error: { code, message, cause, fix, next, requestId? } }
10
+ *
11
+ * Exit codes are the same taxonomy `serviceFailure()` already returns, named here so new
12
+ * commands and their tests reference the contract instead of magic numbers.
13
+ */
14
+ /** Stable CLI exit-code taxonomy (superset-compatible with the existing serviceFailure codes). */
15
+ export const EXIT = {
16
+ /** Success. */
17
+ OK: 0,
18
+ /** A domain/runtime failure (the request ran but did not succeed). */
19
+ FAILURE: 1,
20
+ /** Bad arguments, a missing required target, or a headless missing-answer. */
21
+ USAGE: 2,
22
+ /** Authentication/authorization failure (HTTP 401/403). */
23
+ AUTH: 3,
24
+ /** The service could not be reached (network error). */
25
+ UNREACHABLE: 4,
26
+ };
27
+ /** Print the success envelope to stdout. Adds `warnings` only when non-empty (matches the error shape). */
28
+ export function printJsonOk(data, warnings) {
29
+ const envelope = warnings !== undefined && warnings.length > 0
30
+ ? { ok: true, data, warnings }
31
+ : { ok: true, data };
32
+ console.log(JSON.stringify(envelope));
33
+ }
34
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/commands/output.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,kGAAkG;AAClG,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,eAAe;IACf,EAAE,EAAE,CAAC;IACL,sEAAsE;IACtE,OAAO,EAAE,CAAC;IACV,8EAA8E;IAC9E,KAAK,EAAE,CAAC;IACR,2DAA2D;IAC3D,IAAI,EAAE,CAAC;IACP,wDAAwD;IACxD,WAAW,EAAE,CAAC;CACN,CAAC;AAUX,2GAA2G;AAC3G,MAAM,UAAU,WAAW,CAAI,IAAO,EAAE,QAA4B;IAClE,MAAM,QAAQ,GACZ,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAC3C,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC9B,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACzB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,132 @@
1
+ import { type RGB } from '../gradient.js';
2
+ import type { TableOptions } from '../table.js';
3
+ import type { CliFailure } from './shared.js';
4
+ /** Mirrors `DeploymentSummary` in `packages/service/src/store.ts`. */
5
+ export interface DeploymentSummary {
6
+ readonly deploymentId: string;
7
+ readonly orgSlug: string;
8
+ readonly appSlug: string;
9
+ readonly environment: string;
10
+ readonly serverVersion?: string;
11
+ readonly active: boolean;
12
+ readonly serverName: string;
13
+ readonly createdAt: string;
14
+ readonly createdByEmail?: string;
15
+ readonly accessMode: string;
16
+ readonly archivedAt?: string;
17
+ /** Tenant MCP endpoint, stamped by the service routes from the request base. */
18
+ readonly endpointUrl?: string;
19
+ }
20
+ /** Mirrors `AppSummary` in `packages/service/src/store.ts`. */
21
+ export interface AppSummary {
22
+ readonly orgSlug: string;
23
+ readonly appSlug: string;
24
+ readonly environments: readonly string[];
25
+ readonly latest?: DeploymentSummary;
26
+ readonly accessMode?: string;
27
+ readonly active: boolean;
28
+ readonly archivedAt?: string;
29
+ readonly createdAt: string;
30
+ readonly lastActivityAt?: string;
31
+ }
32
+ export interface AppsListResponse {
33
+ readonly ok: true;
34
+ readonly data: {
35
+ readonly apps: readonly AppSummary[];
36
+ readonly truncated: boolean;
37
+ };
38
+ }
39
+ export interface AppResponse {
40
+ readonly ok: true;
41
+ readonly data: AppSummary;
42
+ }
43
+ /** Mirrors `EnvSummary` in `packages/service/src/store.ts`. */
44
+ export interface EnvSummary {
45
+ readonly orgSlug: string;
46
+ readonly appSlug: string;
47
+ readonly envName: string;
48
+ readonly latest?: DeploymentSummary;
49
+ readonly accessMode?: string;
50
+ readonly active: boolean;
51
+ readonly archivedAt?: string;
52
+ readonly createdAt: string;
53
+ readonly lastActivityAt?: string;
54
+ readonly deploymentCount: number;
55
+ }
56
+ export interface EnvsListResponse {
57
+ readonly ok: true;
58
+ readonly data: {
59
+ readonly envs: readonly EnvSummary[];
60
+ };
61
+ }
62
+ export interface EnvResponse {
63
+ readonly ok: true;
64
+ readonly data: EnvSummary;
65
+ }
66
+ /** The `GET /v1/orgs/{org}/deployments` collection response — unwrapped (no `data`), long-shipped. */
67
+ export interface DeploymentsListResponse {
68
+ readonly ok: true;
69
+ readonly deployments: readonly DeploymentSummary[];
70
+ }
71
+ /** The `GET /v1/orgs/{org}/deployments/{deploymentId}` item response (deployment inspect). */
72
+ export interface DeploymentResponse {
73
+ readonly ok: true;
74
+ readonly data: DeploymentSummary;
75
+ }
76
+ export interface ResourceArgs {
77
+ readonly org?: string;
78
+ readonly service?: string;
79
+ readonly authToken?: string;
80
+ readonly json: boolean;
81
+ /** `--archived`: opt archived resources into the list (only `list` reads it; `inspect` always shows one). */
82
+ readonly archived: boolean;
83
+ }
84
+ export declare function parseResourceArgs(rest: readonly string[]): {
85
+ readonly common: ResourceArgs;
86
+ readonly positional: string[];
87
+ };
88
+ /** Resolve the target org: `--org` flag > linked project org > `config.defaultOrg`. */
89
+ export declare function resolveOrgTarget(orgFlag: string | undefined, home: string): {
90
+ readonly ok: true;
91
+ readonly org: string;
92
+ readonly serviceUrl?: string;
93
+ } | {
94
+ readonly ok: false;
95
+ readonly error: CliFailure;
96
+ };
97
+ export declare function authRequired(): CliFailure;
98
+ /**
99
+ * Build a `not_found` CLI failure — one shape shared by every resource `list`/`inspect` (apps/envs/
100
+ * deployments today; orgs next). The caller supplies the resource label, its identity, the full
101
+ * `cause` sentence, and the recovery `fix`/`next` text.
102
+ */
103
+ export declare function notFoundFailure(kind: string, name: string, cause: string, fix: string, next: string): CliFailure;
104
+ /** `not_found` for an app with no deployments (also used by `envs list` on an unknown app). */
105
+ export declare function notFoundApp(org: string, app: string): CliFailure;
106
+ /** `not_found` for an env with no deployments. */
107
+ export declare function notFoundEnv(org: string, app: string, envName: string): CliFailure;
108
+ /**
109
+ * `not_found` for an unknown (or cross-org) deployment id. The service 404s a deployment that
110
+ * belongs to a different org identically to an unknown id, so this never distinguishes the two —
111
+ * existence must never leak across tenants.
112
+ */
113
+ export declare function notFoundDeployment(org: string, deploymentId: string): CliFailure;
114
+ /** One entry from `GET /v1/orgs` — just enough to label the interactive org picker. */
115
+ export interface OrgCandidate {
116
+ readonly slug: string;
117
+ readonly displayName?: string;
118
+ }
119
+ export declare function fetchOrgCandidates(serviceUrl: string, token: string): Promise<readonly OrgCandidate[]>;
120
+ export declare function fetchAppCandidates(serviceUrl: string, org: string, token: string): Promise<readonly AppSummary[]>;
121
+ export declare function fetchEnvCandidates(serviceUrl: string, org: string, app: string, token: string): Promise<readonly EnvSummary[]>;
122
+ export declare const ACTIVE_GREEN: RGB;
123
+ export declare const DIM_GRAY: RGB;
124
+ /** Archived-state amber, distinct from the plain active/inactive green/dim (deployments list/inspect). */
125
+ export declare const ARCHIVED_AMBER: RGB;
126
+ export declare const ACCESS_CHIP_COLORS: Record<string, RGB>;
127
+ export declare function dimText(text: string, stream: {
128
+ isTTY?: boolean;
129
+ }): string;
130
+ /** The stdout-derived table options every resource `list` view renders with. */
131
+ export declare function stdoutTableOptions(): TableOptions;
132
+ //# sourceMappingURL=resource-shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-shared.d.ts","sourceRoot":"","sources":["../../src/commands/resource-shared.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,159 @@
1
+ /**
2
+ * Shared substrate for the resource command family (`apps`, `envs`, and `deployments` today; `orgs`
3
+ * next): the hosted wire summary/response types, arg parsing + org-target resolution, the
4
+ * `auth_required`/`not_found` failure builders, and the branded table styling (semantic colours,
5
+ * the access-chip map, `dimText`, and the stdout table-option builder) that every resource `list`
6
+ * view shares. Extracted first so each per-resource command module can build on it without the
7
+ * command modules importing one another.
8
+ */
9
+ import { readConfig } from '../config.js';
10
+ import { serviceJson } from '../control-plane.js';
11
+ import { detectColorMode, detectGlyphMode, paint } from '../gradient.js';
12
+ import { readProjectLink } from '../project.js';
13
+ import { EXIT } from './output.js';
14
+ export function parseResourceArgs(rest) {
15
+ let org;
16
+ let service;
17
+ let authToken;
18
+ let json = false;
19
+ let archived = false;
20
+ const positional = [];
21
+ for (let i = 0; i < rest.length; i++) {
22
+ const arg = rest[i];
23
+ if (arg === '--org')
24
+ org = rest[++i];
25
+ else if (arg === '--service')
26
+ service = rest[++i];
27
+ else if (arg === '--auth-token')
28
+ authToken = rest[++i];
29
+ else if (arg === '--json')
30
+ json = true;
31
+ else if (arg === '--archived')
32
+ archived = true;
33
+ else if (arg !== undefined)
34
+ positional.push(arg);
35
+ }
36
+ return {
37
+ common: {
38
+ ...(org !== undefined ? { org } : {}),
39
+ ...(service !== undefined ? { service } : {}),
40
+ ...(authToken !== undefined ? { authToken } : {}),
41
+ json,
42
+ archived,
43
+ },
44
+ positional,
45
+ };
46
+ }
47
+ /** Resolve the target org: `--org` flag > linked project org > `config.defaultOrg`. */
48
+ export function resolveOrgTarget(orgFlag, home) {
49
+ const project = readProjectLink();
50
+ const config = readConfig(home);
51
+ const org = orgFlag ?? project?.org ?? config.defaultOrg;
52
+ const serviceUrl = project?.serviceUrl ?? config.serviceUrl;
53
+ if (org === undefined) {
54
+ return {
55
+ ok: false,
56
+ error: {
57
+ code: 'target_required',
58
+ message: 'org is required',
59
+ cause: 'No org target was supplied or saved.',
60
+ fix: 'Pass --org, link the project, or set a default target.',
61
+ next: 'noodle target set --org <org>',
62
+ exitCode: EXIT.USAGE,
63
+ },
64
+ };
65
+ }
66
+ return { ok: true, org, ...(serviceUrl !== undefined ? { serviceUrl } : {}) };
67
+ }
68
+ // --- failure builders ----------------------------------------------------------
69
+ export function authRequired() {
70
+ return {
71
+ code: 'auth_required',
72
+ message: 'No control-plane login token is available.',
73
+ cause: 'Hosted apps commands require an authenticated Noodle Seed Cloud identity.',
74
+ fix: 'Sign in to the target service.',
75
+ next: 'noodle login',
76
+ exitCode: EXIT.AUTH,
77
+ };
78
+ }
79
+ /**
80
+ * Build a `not_found` CLI failure — one shape shared by every resource `list`/`inspect` (apps/envs/
81
+ * deployments today; orgs next). The caller supplies the resource label, its identity, the full
82
+ * `cause` sentence, and the recovery `fix`/`next` text.
83
+ */
84
+ export function notFoundFailure(kind, name, cause, fix, next) {
85
+ return {
86
+ code: 'not_found',
87
+ message: `${kind} "${name}" was not found`,
88
+ cause,
89
+ fix,
90
+ next,
91
+ exitCode: EXIT.FAILURE,
92
+ };
93
+ }
94
+ /** `not_found` for an app with no deployments (also used by `envs list` on an unknown app). */
95
+ export function notFoundApp(org, app) {
96
+ return notFoundFailure('app', app, `${org}/${app} has no deployments.`, 'Check the app slug and org, or list the org’s apps.', `noodle apps list --org ${org}`);
97
+ }
98
+ /** `not_found` for an env with no deployments. */
99
+ export function notFoundEnv(org, app, envName) {
100
+ return notFoundFailure('env', envName, `${org}/${app}/${envName} has no deployments.`, 'Check the env name, org, and app, or list the app’s envs.', `noodle envs list --org ${org} --app ${app}`);
101
+ }
102
+ /**
103
+ * `not_found` for an unknown (or cross-org) deployment id. The service 404s a deployment that
104
+ * belongs to a different org identically to an unknown id, so this never distinguishes the two —
105
+ * existence must never leak across tenants.
106
+ */
107
+ export function notFoundDeployment(org, deploymentId) {
108
+ return notFoundFailure('deployment', deploymentId, `${org}/${deploymentId} was not found.`, 'Check the deployment id and org, or list the org’s deployments.', `noodle deployments list --org ${org}`);
109
+ }
110
+ export async function fetchOrgCandidates(serviceUrl, token) {
111
+ try {
112
+ const body = await serviceJson(`${serviceUrl}/v1/orgs`, token);
113
+ return body.orgs;
114
+ }
115
+ catch {
116
+ return [];
117
+ }
118
+ }
119
+ export async function fetchAppCandidates(serviceUrl, org, token) {
120
+ try {
121
+ const body = await serviceJson(`${serviceUrl}/v1/orgs/${encodeURIComponent(org)}/apps`, token);
122
+ return body.data.apps;
123
+ }
124
+ catch {
125
+ return [];
126
+ }
127
+ }
128
+ export async function fetchEnvCandidates(serviceUrl, org, app, token) {
129
+ try {
130
+ const body = await serviceJson(`${serviceUrl}/v1/orgs/${encodeURIComponent(org)}/apps/${encodeURIComponent(app)}/envs`, token);
131
+ return body.data.envs;
132
+ }
133
+ catch {
134
+ return [];
135
+ }
136
+ }
137
+ // --- table styling -------------------------------------------------------------
138
+ export const ACTIVE_GREEN = [34, 197, 94];
139
+ export const DIM_GRAY = [115, 115, 115];
140
+ /** Archived-state amber, distinct from the plain active/inactive green/dim (deployments list/inspect). */
141
+ export const ARCHIVED_AMBER = [245, 158, 11];
142
+ export const ACCESS_CHIP_COLORS = {
143
+ 'owner-only': DIM_GRAY,
144
+ 'org-members': [56, 189, 248], // sky-400
145
+ authenticated: [167, 139, 250], // violet-400
146
+ customers: [45, 212, 191], // teal-400
147
+ };
148
+ export function dimText(text, stream) {
149
+ return paint(DIM_GRAY, text, detectColorMode(stream));
150
+ }
151
+ /** The stdout-derived table options every resource `list` view renders with. */
152
+ export function stdoutTableOptions() {
153
+ return {
154
+ color: detectColorMode(process.stdout),
155
+ glyph: detectGlyphMode(),
156
+ maxTableWidth: process.stdout.columns,
157
+ };
158
+ }
159
+ //# sourceMappingURL=resource-shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-shared.js","sourceRoot":"","sources":["../../src/commands/resource-shared.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,17 @@
1
1
  export declare function runLogin(rest: readonly string[], env: NodeJS.ProcessEnv, home: string): Promise<number>;
2
2
  export declare function runLogout(home: string): number;
3
3
  export declare function runWhoami(env: NodeJS.ProcessEnv, home: string, rest?: readonly string[]): Promise<number>;
4
- export declare function runList(rest: readonly string[], env: NodeJS.ProcessEnv, home: string): Promise<number>;
4
+ /** Where an effective `target show` field's value came from. */
5
+ export type TargetFieldSource = 'link' | 'config' | 'default' | 'unset';
6
+ export interface ResolvedTargetField {
7
+ readonly value: string | null;
8
+ readonly source: TargetFieldSource;
9
+ }
5
10
  export declare function runTarget(rest: readonly string[], home: string): number;
6
11
  export declare function parseServiceFlags(rest: readonly string[]): {
7
12
  readonly serviceFlag?: string;
8
13
  readonly authFlag?: string;
9
14
  };
10
- export declare function parseListArgs(rest: readonly string[]): {
11
- readonly serviceFlag?: string;
12
- readonly authFlag?: string;
13
- readonly org?: string;
14
- readonly app?: string;
15
- readonly targetEnv?: string;
16
- readonly archived: boolean;
17
- };
18
15
  export declare function parseTargetArgs(rest: readonly string[]): {
19
16
  readonly runtime?: 'local' | 'cloud' | 'other';
20
17
  readonly service?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"AAmBA,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,CAmEjB;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI9C;AAED,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,SAAS,MAAM,EAAO,GAC3B,OAAO,CAAC,MAAM,CAAC,CAmCjB;AA6DD,wBAAsB,OAAO,CAC3B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,CAmFjB;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CA0DvE;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG;IAC1D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B,CAYA;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG;IACtD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B,CAwBA;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG;IACxD,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;IAC/C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B,CAuBA"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"AAqBA,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,CAmEjB;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI9C;AAED,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,SAAS,MAAM,EAAO,GAC3B,OAAO,CAAC,MAAM,CAAC,CAmCjB;AA6DD,gEAAgE;AAChE,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;AAExE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;CACpC;AA0BD,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAuDvE;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG;IAC1D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B,CAYA;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG;IACxD,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;IAC/C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B,CAuBA"}
@@ -1,13 +1,16 @@
1
1
  /**
2
2
  * Login/session and control-plane account commands: login, logout, whoami,
3
- * list, target — plus their flag parsers. The org administration commands
4
- * (orgs, members) live in `org-admin.ts`.
3
+ * target — plus their flag parsers. The deployment listing/inspection commands moved to
4
+ * `deployments-ops.ts` (ADR 0128 D4, promoting `noodle list` to `noodle deployments list`); the org
5
+ * administration commands (orgs, members) live in `org-admin.ts`.
5
6
  */
6
- import { clearConfig, maskToken, readConfig, readServers, resolveServiceUrl, writeConfig, } from '../config.js';
7
+ import { clearConfig, maskToken, readConfig, resolveServiceUrl, writeConfig, } from '../config.js';
7
8
  import { browserLogin, resolveControlPlaneToken, serviceJson } from '../control-plane.js';
8
9
  import { DEFAULT_SERVICE_URL } from '../deploy.js';
9
10
  import { errorMessage, printRecovery } from '../diagnostics.js';
10
- import { printCliFailure, serviceFailure, usage } from './shared.js';
11
+ import { readProjectLink } from '../project.js';
12
+ import { printJsonOk } from './output.js';
13
+ import { usage } from './shared.js';
11
14
  export async function runLogin(rest, env, home) {
12
15
  let service;
13
16
  let token;
@@ -152,72 +155,27 @@ function persistAccountDefaults(body, home) {
152
155
  ...(defaultOrg !== undefined ? { defaultOrg } : {}),
153
156
  };
154
157
  }
155
- export async function runList(rest, env, home) {
156
- const { serviceFlag, authFlag, org, app, targetEnv, archived } = parseListArgs(rest);
157
- const json = rest.includes('--json');
158
- const { serviceUrl, token } = await resolveControlPlaneToken({
159
- serviceFlag,
160
- authFlag,
161
- env,
162
- home,
163
- });
164
- if (org !== undefined && token !== undefined) {
165
- try {
166
- const url = new URL(`${serviceUrl}/v1/orgs/${encodeURIComponent(org)}/deployments`);
167
- if (app !== undefined)
168
- url.searchParams.set('app', app);
169
- if (targetEnv !== undefined)
170
- url.searchParams.set('env', targetEnv);
171
- if (archived)
172
- url.searchParams.set('archived', 'true');
173
- const body = await serviceJson(url.toString(), token);
174
- if (json) {
175
- console.log(JSON.stringify({
176
- ok: true,
177
- target: {
178
- service: serviceUrl,
179
- org,
180
- ...(app !== undefined ? { app } : {}),
181
- ...(targetEnv !== undefined ? { env: targetEnv } : {}),
182
- },
183
- deployments: body.deployments,
184
- }));
185
- return 0;
186
- }
187
- console.log(`service: ${serviceUrl}`);
188
- console.log(`target: ${org}${app !== undefined ? `/${app}` : ''}${targetEnv !== undefined ? `/${targetEnv}` : ''}`);
189
- for (const d of body.deployments) {
190
- console.log(`${d.deploymentId}\t${d.appSlug}\t${d.environment}\t${d.accessMode}\t${d.archivedAt !== undefined
191
- ? `archived ${d.archivedAt}`
192
- : d.active
193
- ? 'active'
194
- : 'inactive'}\t${d.createdAt}`);
195
- }
196
- console.log(`\n${body.deployments.length} deployment(s) from ${serviceUrl}.`);
197
- return 0;
198
- }
199
- catch (error) {
200
- return printCliFailure('list', serviceFailure('list', error, 'noodle doctor'), json);
201
- }
202
- }
203
- const servers = readServers(home);
204
- if (servers.length === 0) {
205
- if (json) {
206
- console.log(JSON.stringify({ ok: true, target: { runtime: 'local' }, deployments: [] }));
207
- return 0;
208
- }
209
- console.log('No saved servers. Deploy a linked project with `noodle deploy` to remember one locally.');
210
- return 0;
211
- }
212
- if (json) {
213
- console.log(JSON.stringify({ ok: true, target: { runtime: 'local' }, deployments: servers }));
214
- return 0;
215
- }
216
- for (const s of servers) {
217
- console.log(`${s.deploymentId}\t${s.url}\t${s.createdAt}`);
218
- }
219
- console.log(`\n${servers.length} server(s) cached in ~/.noodle/servers.json.`);
220
- return 0;
158
+ /** Resolve one target field: linked project value > saved config value > built-in default. */
159
+ function resolveTargetField(link, config, fallback) {
160
+ if (link !== undefined)
161
+ return { value: link, source: 'link' };
162
+ if (config !== undefined)
163
+ return { value: config, source: 'config' };
164
+ if (fallback !== undefined)
165
+ return { value: fallback, source: 'default' };
166
+ return { value: null, source: 'unset' };
167
+ }
168
+ function sourceLabel(source) {
169
+ if (source === 'unset')
170
+ return '';
171
+ if (source === 'default')
172
+ return '(default)';
173
+ return `(from ${source})`;
174
+ }
175
+ function printTargetLine(label, field) {
176
+ const value = field.value ?? '—';
177
+ const suffix = sourceLabel(field.source);
178
+ console.log(`${label.padEnd(9)}${value.padEnd(suffix ? 15 : 0)}${suffix ? ` ${suffix}` : ''}`);
221
179
  }
222
180
  export function runTarget(rest, home) {
223
181
  const [action, ...tail] = rest;
@@ -225,24 +183,23 @@ export function runTarget(rest, home) {
225
183
  const config = readConfig(home);
226
184
  const json = tail.includes('--json');
227
185
  if (action === 'show') {
186
+ const project = readProjectLink();
187
+ const target = {
188
+ runtime: resolveTargetField(undefined, config.defaultRuntime, 'local'),
189
+ service: resolveTargetField(project?.serviceUrl, config.serviceUrl, DEFAULT_SERVICE_URL),
190
+ org: resolveTargetField(project?.org, config.defaultOrg),
191
+ app: resolveTargetField(project?.app, config.defaultApp),
192
+ env: resolveTargetField(project?.env, config.defaultEnv, 'prod'),
193
+ };
228
194
  if (json) {
229
- console.log(JSON.stringify({
230
- ok: true,
231
- target: {
232
- runtime: config.defaultRuntime ?? 'local',
233
- service: config.serviceUrl ?? null,
234
- org: config.defaultOrg ?? null,
235
- app: config.defaultApp ?? null,
236
- env: config.defaultEnv ?? null,
237
- },
238
- }));
195
+ printJsonOk({ target });
239
196
  return 0;
240
197
  }
241
- console.log(`runtime: ${config.defaultRuntime ?? 'local'}`);
242
- console.log(`service: ${config.serviceUrl ?? '(none)'}`);
243
- console.log(`org: ${config.defaultOrg ?? '(none)'}`);
244
- console.log(`app: ${config.defaultApp ?? '(none)'}`);
245
- console.log(`env: ${config.defaultEnv ?? '(none)'}`);
198
+ printTargetLine('runtime:', target.runtime);
199
+ printTargetLine('service:', target.service);
200
+ printTargetLine('org:', target.org);
201
+ printTargetLine('app:', target.app);
202
+ printTargetLine('env:', target.env);
246
203
  return 0;
247
204
  }
248
205
  if (action === 'set') {
@@ -289,37 +246,6 @@ export function parseServiceFlags(rest) {
289
246
  ...(authFlag !== undefined ? { authFlag } : {}),
290
247
  };
291
248
  }
292
- export function parseListArgs(rest) {
293
- let serviceFlag;
294
- let authFlag;
295
- let org;
296
- let app;
297
- let targetEnv;
298
- let archived = false;
299
- for (let i = 0; i < rest.length; i++) {
300
- const arg = rest[i];
301
- if (arg === '--service')
302
- serviceFlag = rest[++i];
303
- else if (arg === '--auth-token')
304
- authFlag = rest[++i];
305
- else if (arg === '--org')
306
- org = rest[++i];
307
- else if (arg === '--app')
308
- app = rest[++i];
309
- else if (arg === '--env')
310
- targetEnv = rest[++i];
311
- else if (arg === '--archived')
312
- archived = true;
313
- }
314
- return {
315
- ...(serviceFlag !== undefined ? { serviceFlag } : {}),
316
- ...(authFlag !== undefined ? { authFlag } : {}),
317
- ...(org !== undefined ? { org } : {}),
318
- ...(app !== undefined ? { app } : {}),
319
- ...(targetEnv !== undefined ? { targetEnv } : {}),
320
- archived,
321
- };
322
- }
323
249
  export function parseTargetArgs(rest) {
324
250
  let runtime;
325
251
  let service;