@software-dlc/cli 0.157.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (701) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/LICENSE +105 -0
  3. package/README.md +31 -0
  4. package/dist/checkout.d.ts +43 -0
  5. package/dist/checkout.d.ts.map +1 -0
  6. package/dist/checkout.js +92 -0
  7. package/dist/checkout.js.map +1 -0
  8. package/dist/cli-arguments.d.ts +13 -0
  9. package/dist/cli-arguments.d.ts.map +1 -0
  10. package/dist/cli-arguments.js +67 -0
  11. package/dist/cli-arguments.js.map +1 -0
  12. package/dist/cli-branch-history.d.ts +48 -0
  13. package/dist/cli-branch-history.d.ts.map +1 -0
  14. package/dist/cli-branch-history.js +319 -0
  15. package/dist/cli-branch-history.js.map +1 -0
  16. package/dist/cli-branches.d.ts +22 -0
  17. package/dist/cli-branches.d.ts.map +1 -0
  18. package/dist/cli-branches.js +59 -0
  19. package/dist/cli-branches.js.map +1 -0
  20. package/dist/cli-deploy.d.ts +14 -0
  21. package/dist/cli-deploy.d.ts.map +1 -0
  22. package/dist/cli-deploy.js +164 -0
  23. package/dist/cli-deploy.js.map +1 -0
  24. package/dist/cli-health.d.ts +3 -0
  25. package/dist/cli-health.d.ts.map +1 -0
  26. package/dist/cli-health.js +73 -0
  27. package/dist/cli-health.js.map +1 -0
  28. package/dist/cli-help.d.ts +21 -0
  29. package/dist/cli-help.d.ts.map +1 -0
  30. package/dist/cli-help.js +176 -0
  31. package/dist/cli-help.js.map +1 -0
  32. package/dist/cli-login.d.ts +76 -0
  33. package/dist/cli-login.d.ts.map +1 -0
  34. package/dist/cli-login.js +634 -0
  35. package/dist/cli-login.js.map +1 -0
  36. package/dist/cli-operation.d.ts +2 -0
  37. package/dist/cli-operation.d.ts.map +1 -0
  38. package/dist/cli-operation.js +66 -0
  39. package/dist/cli-operation.js.map +1 -0
  40. package/dist/cli-org.d.ts +12 -0
  41. package/dist/cli-org.d.ts.map +1 -0
  42. package/dist/cli-org.js +218 -0
  43. package/dist/cli-org.js.map +1 -0
  44. package/dist/cli-rebuild.d.ts +20 -0
  45. package/dist/cli-rebuild.d.ts.map +1 -0
  46. package/dist/cli-rebuild.js +29 -0
  47. package/dist/cli-rebuild.js.map +1 -0
  48. package/dist/cli-reset.d.ts +27 -0
  49. package/dist/cli-reset.d.ts.map +1 -0
  50. package/dist/cli-reset.js +44 -0
  51. package/dist/cli-reset.js.map +1 -0
  52. package/dist/cli-snapshot.d.ts +398 -0
  53. package/dist/cli-snapshot.d.ts.map +1 -0
  54. package/dist/cli-snapshot.js +45 -0
  55. package/dist/cli-snapshot.js.map +1 -0
  56. package/dist/cli-task-context.d.ts +3 -0
  57. package/dist/cli-task-context.d.ts.map +1 -0
  58. package/dist/cli-task-context.js +112 -0
  59. package/dist/cli-task-context.js.map +1 -0
  60. package/dist/cli.d.ts +3 -0
  61. package/dist/cli.d.ts.map +1 -0
  62. package/dist/cli.js +1004 -0
  63. package/dist/cli.js.map +1 -0
  64. package/dist/graph-packages-lock.d.ts +169 -0
  65. package/dist/graph-packages-lock.d.ts.map +1 -0
  66. package/dist/graph-packages-lock.js +503 -0
  67. package/dist/graph-packages-lock.js.map +1 -0
  68. package/dist/index.d.ts +2 -0
  69. package/dist/index.d.ts.map +1 -0
  70. package/dist/index.js +2 -0
  71. package/dist/index.js.map +1 -0
  72. package/dist/local/aggregate-preflight.d.ts +12 -0
  73. package/dist/local/aggregate-preflight.d.ts.map +1 -0
  74. package/dist/local/aggregate-preflight.js +22 -0
  75. package/dist/local/aggregate-preflight.js.map +1 -0
  76. package/dist/local/allow-mcp.d.ts +77 -0
  77. package/dist/local/allow-mcp.d.ts.map +1 -0
  78. package/dist/local/allow-mcp.js +394 -0
  79. package/dist/local/allow-mcp.js.map +1 -0
  80. package/dist/local/api-client.d.ts +15 -0
  81. package/dist/local/api-client.d.ts.map +1 -0
  82. package/dist/local/api-client.js +87 -0
  83. package/dist/local/api-client.js.map +1 -0
  84. package/dist/local/app-contract-readers.d.ts +229 -0
  85. package/dist/local/app-contract-readers.d.ts.map +1 -0
  86. package/dist/local/app-contract-readers.js +450 -0
  87. package/dist/local/app-contract-readers.js.map +1 -0
  88. package/dist/local/app-org-reader.d.ts +21 -0
  89. package/dist/local/app-org-reader.d.ts.map +1 -0
  90. package/dist/local/app-org-reader.js +66 -0
  91. package/dist/local/app-org-reader.js.map +1 -0
  92. package/dist/local/app-shell-readers.d.ts +96 -0
  93. package/dist/local/app-shell-readers.d.ts.map +1 -0
  94. package/dist/local/app-shell-readers.js +381 -0
  95. package/dist/local/app-shell-readers.js.map +1 -0
  96. package/dist/local/app-tasks-read.d.ts +202 -0
  97. package/dist/local/app-tasks-read.d.ts.map +1 -0
  98. package/dist/local/app-tasks-read.js +290 -0
  99. package/dist/local/app-tasks-read.js.map +1 -0
  100. package/dist/local/app-worktrees.d.ts +69 -0
  101. package/dist/local/app-worktrees.d.ts.map +1 -0
  102. package/dist/local/app-worktrees.js +554 -0
  103. package/dist/local/app-worktrees.js.map +1 -0
  104. package/dist/local/base-sync-manifest.d.ts +12 -0
  105. package/dist/local/base-sync-manifest.d.ts.map +1 -0
  106. package/dist/local/base-sync-manifest.js +57 -0
  107. package/dist/local/base-sync-manifest.js.map +1 -0
  108. package/dist/local/blast-radius.d.ts +191 -0
  109. package/dist/local/blast-radius.d.ts.map +1 -0
  110. package/dist/local/blast-radius.js +585 -0
  111. package/dist/local/blast-radius.js.map +1 -0
  112. package/dist/local/canonical.d.ts +2 -0
  113. package/dist/local/canonical.d.ts.map +1 -0
  114. package/dist/local/canonical.js +2 -0
  115. package/dist/local/canonical.js.map +1 -0
  116. package/dist/local/config.d.ts +22 -0
  117. package/dist/local/config.d.ts.map +1 -0
  118. package/dist/local/config.js +57 -0
  119. package/dist/local/config.js.map +1 -0
  120. package/dist/local/document-commands.d.ts +163 -0
  121. package/dist/local/document-commands.d.ts.map +1 -0
  122. package/dist/local/document-commands.js +620 -0
  123. package/dist/local/document-commands.js.map +1 -0
  124. package/dist/local/document-embeds.d.ts +21 -0
  125. package/dist/local/document-embeds.d.ts.map +1 -0
  126. package/dist/local/document-embeds.js +38 -0
  127. package/dist/local/document-embeds.js.map +1 -0
  128. package/dist/local/environment-context.d.ts +39 -0
  129. package/dist/local/environment-context.d.ts.map +1 -0
  130. package/dist/local/environment-context.js +193 -0
  131. package/dist/local/environment-context.js.map +1 -0
  132. package/dist/local/environment-exclude.d.ts +7 -0
  133. package/dist/local/environment-exclude.d.ts.map +1 -0
  134. package/dist/local/environment-exclude.js +82 -0
  135. package/dist/local/environment-exclude.js.map +1 -0
  136. package/dist/local/environment-sidecar.d.ts +126 -0
  137. package/dist/local/environment-sidecar.d.ts.map +1 -0
  138. package/dist/local/environment-sidecar.js +442 -0
  139. package/dist/local/environment-sidecar.js.map +1 -0
  140. package/dist/local/environment-switch.d.ts +22 -0
  141. package/dist/local/environment-switch.d.ts.map +1 -0
  142. package/dist/local/environment-switch.js +385 -0
  143. package/dist/local/environment-switch.js.map +1 -0
  144. package/dist/local/exact-remote-projection.d.ts +17 -0
  145. package/dist/local/exact-remote-projection.d.ts.map +1 -0
  146. package/dist/local/exact-remote-projection.js +53 -0
  147. package/dist/local/exact-remote-projection.js.map +1 -0
  148. package/dist/local/experimental/path-object-store.d.ts +66 -0
  149. package/dist/local/experimental/path-object-store.d.ts.map +1 -0
  150. package/dist/local/experimental/path-object-store.js +135 -0
  151. package/dist/local/experimental/path-object-store.js.map +1 -0
  152. package/dist/local/external-worktree-binding.d.ts +21 -0
  153. package/dist/local/external-worktree-binding.d.ts.map +1 -0
  154. package/dist/local/external-worktree-binding.js +56 -0
  155. package/dist/local/external-worktree-binding.js.map +1 -0
  156. package/dist/local/folder-members.d.ts +34 -0
  157. package/dist/local/folder-members.d.ts.map +1 -0
  158. package/dist/local/folder-members.js +168 -0
  159. package/dist/local/folder-members.js.map +1 -0
  160. package/dist/local/git-ref-authority.d.ts +11 -0
  161. package/dist/local/git-ref-authority.d.ts.map +1 -0
  162. package/dist/local/git-ref-authority.js +76 -0
  163. package/dist/local/git-ref-authority.js.map +1 -0
  164. package/dist/local/git.d.ts +88 -0
  165. package/dist/local/git.d.ts.map +1 -0
  166. package/dist/local/git.js +413 -0
  167. package/dist/local/git.js.map +1 -0
  168. package/dist/local/graph-read.d.ts +168 -0
  169. package/dist/local/graph-read.d.ts.map +1 -0
  170. package/dist/local/graph-read.js +360 -0
  171. package/dist/local/graph-read.js.map +1 -0
  172. package/dist/local/graph-sync.d.ts +39 -0
  173. package/dist/local/graph-sync.d.ts.map +1 -0
  174. package/dist/local/graph-sync.js +186 -0
  175. package/dist/local/graph-sync.js.map +1 -0
  176. package/dist/local/guide-commands.d.ts +79 -0
  177. package/dist/local/guide-commands.d.ts.map +1 -0
  178. package/dist/local/guide-commands.js +247 -0
  179. package/dist/local/guide-commands.js.map +1 -0
  180. package/dist/local/health-files.d.ts +24 -0
  181. package/dist/local/health-files.d.ts.map +1 -0
  182. package/dist/local/health-files.js +133 -0
  183. package/dist/local/health-files.js.map +1 -0
  184. package/dist/local/health-inspection.d.ts +12 -0
  185. package/dist/local/health-inspection.d.ts.map +1 -0
  186. package/dist/local/health-inspection.js +407 -0
  187. package/dist/local/health-inspection.js.map +1 -0
  188. package/dist/local/health-policy.d.ts +11 -0
  189. package/dist/local/health-policy.d.ts.map +1 -0
  190. package/dist/local/health-policy.js +257 -0
  191. package/dist/local/health-policy.js.map +1 -0
  192. package/dist/local/health-projection.d.ts +14 -0
  193. package/dist/local/health-projection.d.ts.map +1 -0
  194. package/dist/local/health-projection.js +102 -0
  195. package/dist/local/health-projection.js.map +1 -0
  196. package/dist/local/health-schema.d.ts +338 -0
  197. package/dist/local/health-schema.d.ts.map +1 -0
  198. package/dist/local/health-schema.js +213 -0
  199. package/dist/local/health-schema.js.map +1 -0
  200. package/dist/local/health-store.d.ts +61 -0
  201. package/dist/local/health-store.d.ts.map +1 -0
  202. package/dist/local/health-store.js +218 -0
  203. package/dist/local/health-store.js.map +1 -0
  204. package/dist/local/index.d.ts +66 -0
  205. package/dist/local/index.d.ts.map +1 -0
  206. package/dist/local/index.js +66 -0
  207. package/dist/local/index.js.map +1 -0
  208. package/dist/local/journey-commands.d.ts +65 -0
  209. package/dist/local/journey-commands.d.ts.map +1 -0
  210. package/dist/local/journey-commands.js +138 -0
  211. package/dist/local/journey-commands.js.map +1 -0
  212. package/dist/local/local-org-store.d.ts +46 -0
  213. package/dist/local/local-org-store.d.ts.map +1 -0
  214. package/dist/local/local-org-store.js +132 -0
  215. package/dist/local/local-org-store.js.map +1 -0
  216. package/dist/local/local-org.d.ts +389 -0
  217. package/dist/local/local-org.d.ts.map +1 -0
  218. package/dist/local/local-org.js +855 -0
  219. package/dist/local/local-org.js.map +1 -0
  220. package/dist/local/media-upload.d.ts +5 -0
  221. package/dist/local/media-upload.d.ts.map +1 -0
  222. package/dist/local/media-upload.js +41 -0
  223. package/dist/local/media-upload.js.map +1 -0
  224. package/dist/local/operation.d.ts +155 -0
  225. package/dist/local/operation.d.ts.map +1 -0
  226. package/dist/local/operation.js +340 -0
  227. package/dist/local/operation.js.map +1 -0
  228. package/dist/local/ownership-reader-schema.d.ts +117 -0
  229. package/dist/local/ownership-reader-schema.d.ts.map +1 -0
  230. package/dist/local/ownership-reader-schema.js +105 -0
  231. package/dist/local/ownership-reader-schema.js.map +1 -0
  232. package/dist/local/ownership-reader-worker.d.ts +2 -0
  233. package/dist/local/ownership-reader-worker.d.ts.map +1 -0
  234. package/dist/local/ownership-reader-worker.js +341 -0
  235. package/dist/local/ownership-reader-worker.js.map +1 -0
  236. package/dist/local/ownership-reader.d.ts +10 -0
  237. package/dist/local/ownership-reader.d.ts.map +1 -0
  238. package/dist/local/ownership-reader.js +93 -0
  239. package/dist/local/ownership-reader.js.map +1 -0
  240. package/dist/local/package-uses-check.d.ts +33 -0
  241. package/dist/local/package-uses-check.d.ts.map +1 -0
  242. package/dist/local/package-uses-check.js +62 -0
  243. package/dist/local/package-uses-check.js.map +1 -0
  244. package/dist/local/pending-recovery.d.ts +22 -0
  245. package/dist/local/pending-recovery.d.ts.map +1 -0
  246. package/dist/local/pending-recovery.js +171 -0
  247. package/dist/local/pending-recovery.js.map +1 -0
  248. package/dist/local/portable-commit-store.d.ts +28 -0
  249. package/dist/local/portable-commit-store.d.ts.map +1 -0
  250. package/dist/local/portable-commit-store.js +187 -0
  251. package/dist/local/portable-commit-store.js.map +1 -0
  252. package/dist/local/portable-commit.d.ts +109 -0
  253. package/dist/local/portable-commit.d.ts.map +1 -0
  254. package/dist/local/portable-commit.js +209 -0
  255. package/dist/local/portable-commit.js.map +1 -0
  256. package/dist/local/portable-remote.d.ts +432 -0
  257. package/dist/local/portable-remote.d.ts.map +1 -0
  258. package/dist/local/portable-remote.js +280 -0
  259. package/dist/local/portable-remote.js.map +1 -0
  260. package/dist/local/project-deleted.d.ts +4 -0
  261. package/dist/local/project-deleted.d.ts.map +1 -0
  262. package/dist/local/project-deleted.js +13 -0
  263. package/dist/local/project-deleted.js.map +1 -0
  264. package/dist/local/projection.d.ts +166 -0
  265. package/dist/local/projection.d.ts.map +1 -0
  266. package/dist/local/projection.js +709 -0
  267. package/dist/local/projection.js.map +1 -0
  268. package/dist/local/read-operation.d.ts +3 -0
  269. package/dist/local/read-operation.d.ts.map +1 -0
  270. package/dist/local/read-operation.js +19 -0
  271. package/dist/local/read-operation.js.map +1 -0
  272. package/dist/local/rebuild.d.ts +11 -0
  273. package/dist/local/rebuild.d.ts.map +1 -0
  274. package/dist/local/rebuild.js +42 -0
  275. package/dist/local/rebuild.js.map +1 -0
  276. package/dist/local/remote-base.d.ts +25 -0
  277. package/dist/local/remote-base.d.ts.map +1 -0
  278. package/dist/local/remote-base.js +68 -0
  279. package/dist/local/remote-base.js.map +1 -0
  280. package/dist/local/save-layout-worker.d.ts +19 -0
  281. package/dist/local/save-layout-worker.d.ts.map +1 -0
  282. package/dist/local/save-layout-worker.js +28 -0
  283. package/dist/local/save-layout-worker.js.map +1 -0
  284. package/dist/local/save-layout.d.ts +84 -0
  285. package/dist/local/save-layout.d.ts.map +1 -0
  286. package/dist/local/save-layout.js +221 -0
  287. package/dist/local/save-layout.js.map +1 -0
  288. package/dist/local/scope-impact.d.ts +31 -0
  289. package/dist/local/scope-impact.d.ts.map +1 -0
  290. package/dist/local/scope-impact.js +32 -0
  291. package/dist/local/scope-impact.js.map +1 -0
  292. package/dist/local/source-evidence/filesystem-worker.d.ts +2 -0
  293. package/dist/local/source-evidence/filesystem-worker.d.ts.map +1 -0
  294. package/dist/local/source-evidence/filesystem-worker.js +139 -0
  295. package/dist/local/source-evidence/filesystem-worker.js.map +1 -0
  296. package/dist/local/source-evidence/processes.d.ts +20 -0
  297. package/dist/local/source-evidence/processes.d.ts.map +1 -0
  298. package/dist/local/source-evidence/processes.js +133 -0
  299. package/dist/local/source-evidence/processes.js.map +1 -0
  300. package/dist/local/source-evidence/protocol.d.ts +52 -0
  301. package/dist/local/source-evidence/protocol.d.ts.map +1 -0
  302. package/dist/local/source-evidence/protocol.js +72 -0
  303. package/dist/local/source-evidence/protocol.js.map +1 -0
  304. package/dist/local/source-evidence/reader.d.ts +14 -0
  305. package/dist/local/source-evidence/reader.d.ts.map +1 -0
  306. package/dist/local/source-evidence/reader.js +308 -0
  307. package/dist/local/source-evidence/reader.js.map +1 -0
  308. package/dist/local/source-evidence/schema.d.ts +2504 -0
  309. package/dist/local/source-evidence/schema.d.ts.map +1 -0
  310. package/dist/local/source-evidence/schema.js +99 -0
  311. package/dist/local/source-evidence/schema.js.map +1 -0
  312. package/dist/local/source-policy/loader.d.ts +29 -0
  313. package/dist/local/source-policy/loader.d.ts.map +1 -0
  314. package/dist/local/source-policy/loader.js +209 -0
  315. package/dist/local/source-policy/loader.js.map +1 -0
  316. package/dist/local/source-policy/process.d.ts +7 -0
  317. package/dist/local/source-policy/process.d.ts.map +1 -0
  318. package/dist/local/source-policy/process.js +53 -0
  319. package/dist/local/source-policy/process.js.map +1 -0
  320. package/dist/local/source-policy/protocol.d.ts +27 -0
  321. package/dist/local/source-policy/protocol.d.ts.map +1 -0
  322. package/dist/local/source-policy/protocol.js +48 -0
  323. package/dist/local/source-policy/protocol.js.map +1 -0
  324. package/dist/local/source-policy/worker.d.ts +2 -0
  325. package/dist/local/source-policy/worker.d.ts.map +1 -0
  326. package/dist/local/source-policy/worker.js +100 -0
  327. package/dist/local/source-policy/worker.js.map +1 -0
  328. package/dist/local/state-directory.d.ts +17 -0
  329. package/dist/local/state-directory.d.ts.map +1 -0
  330. package/dist/local/state-directory.js +68 -0
  331. package/dist/local/state-directory.js.map +1 -0
  332. package/dist/local/store-database.d.ts +13 -0
  333. package/dist/local/store-database.d.ts.map +1 -0
  334. package/dist/local/store-database.js +187 -0
  335. package/dist/local/store-database.js.map +1 -0
  336. package/dist/local/store.d.ts +181 -0
  337. package/dist/local/store.d.ts.map +1 -0
  338. package/dist/local/store.js +585 -0
  339. package/dist/local/store.js.map +1 -0
  340. package/dist/local/sync.d.ts +47 -0
  341. package/dist/local/sync.d.ts.map +1 -0
  342. package/dist/local/sync.js +518 -0
  343. package/dist/local/sync.js.map +1 -0
  344. package/dist/local/task-context-inspection.d.ts +23 -0
  345. package/dist/local/task-context-inspection.d.ts.map +1 -0
  346. package/dist/local/task-context-inspection.js +165 -0
  347. package/dist/local/task-context-inspection.js.map +1 -0
  348. package/dist/local/task-context-observations.d.ts +9553 -0
  349. package/dist/local/task-context-observations.d.ts.map +1 -0
  350. package/dist/local/task-context-observations.js +232 -0
  351. package/dist/local/task-context-observations.js.map +1 -0
  352. package/dist/local/task-context-provider.d.ts +18 -0
  353. package/dist/local/task-context-provider.d.ts.map +1 -0
  354. package/dist/local/task-context-provider.js +231 -0
  355. package/dist/local/task-context-provider.js.map +1 -0
  356. package/dist/local/task-context-schema.d.ts +847 -0
  357. package/dist/local/task-context-schema.d.ts.map +1 -0
  358. package/dist/local/task-context-schema.js +305 -0
  359. package/dist/local/task-context-schema.js.map +1 -0
  360. package/dist/local/task-context-source.d.ts +16 -0
  361. package/dist/local/task-context-source.d.ts.map +1 -0
  362. package/dist/local/task-context-source.js +45 -0
  363. package/dist/local/task-context-source.js.map +1 -0
  364. package/dist/local/task-context.d.ts +14 -0
  365. package/dist/local/task-context.d.ts.map +1 -0
  366. package/dist/local/task-context.js +570 -0
  367. package/dist/local/task-context.js.map +1 -0
  368. package/dist/local/test-commands.d.ts +71 -0
  369. package/dist/local/test-commands.d.ts.map +1 -0
  370. package/dist/local/test-commands.js +292 -0
  371. package/dist/local/test-commands.js.map +1 -0
  372. package/dist/local/tree-save.d.ts +117 -0
  373. package/dist/local/tree-save.d.ts.map +1 -0
  374. package/dist/local/tree-save.js +615 -0
  375. package/dist/local/tree-save.js.map +1 -0
  376. package/dist/local/variants.d.ts +125 -0
  377. package/dist/local/variants.d.ts.map +1 -0
  378. package/dist/local/variants.js +267 -0
  379. package/dist/local/variants.js.map +1 -0
  380. package/dist/local/workspace-admission.d.ts +61 -0
  381. package/dist/local/workspace-admission.d.ts.map +1 -0
  382. package/dist/local/workspace-admission.js +112 -0
  383. package/dist/local/workspace-admission.js.map +1 -0
  384. package/dist/local/workspace-authority-guard.d.ts +18 -0
  385. package/dist/local/workspace-authority-guard.d.ts.map +1 -0
  386. package/dist/local/workspace-authority-guard.js +69 -0
  387. package/dist/local/workspace-authority-guard.js.map +1 -0
  388. package/dist/local/workspace-authority.d.ts +33 -0
  389. package/dist/local/workspace-authority.d.ts.map +1 -0
  390. package/dist/local/workspace-authority.js +33 -0
  391. package/dist/local/workspace-authority.js.map +1 -0
  392. package/dist/local/workspace-branch-runtime.d.ts +61 -0
  393. package/dist/local/workspace-branch-runtime.d.ts.map +1 -0
  394. package/dist/local/workspace-branch-runtime.js +216 -0
  395. package/dist/local/workspace-branch-runtime.js.map +1 -0
  396. package/dist/local/workspace-built-content.d.ts +137 -0
  397. package/dist/local/workspace-built-content.d.ts.map +1 -0
  398. package/dist/local/workspace-built-content.js +393 -0
  399. package/dist/local/workspace-built-content.js.map +1 -0
  400. package/dist/local/workspace-claim-status-read.d.ts +53 -0
  401. package/dist/local/workspace-claim-status-read.d.ts.map +1 -0
  402. package/dist/local/workspace-claim-status-read.js +118 -0
  403. package/dist/local/workspace-claim-status-read.js.map +1 -0
  404. package/dist/local/workspace-claim-status.d.ts +172 -0
  405. package/dist/local/workspace-claim-status.d.ts.map +1 -0
  406. package/dist/local/workspace-claim-status.js +721 -0
  407. package/dist/local/workspace-claim-status.js.map +1 -0
  408. package/dist/local/workspace-claim-views.d.ts +45 -0
  409. package/dist/local/workspace-claim-views.d.ts.map +1 -0
  410. package/dist/local/workspace-claim-views.js +45 -0
  411. package/dist/local/workspace-claim-views.js.map +1 -0
  412. package/dist/local/workspace-cli.d.ts +46 -0
  413. package/dist/local/workspace-cli.d.ts.map +1 -0
  414. package/dist/local/workspace-cli.js +1524 -0
  415. package/dist/local/workspace-cli.js.map +1 -0
  416. package/dist/local/workspace-commit-resolver.d.ts +19 -0
  417. package/dist/local/workspace-commit-resolver.d.ts.map +1 -0
  418. package/dist/local/workspace-commit-resolver.js +47 -0
  419. package/dist/local/workspace-commit-resolver.js.map +1 -0
  420. package/dist/local/workspace-decision-store.d.ts +184 -0
  421. package/dist/local/workspace-decision-store.d.ts.map +1 -0
  422. package/dist/local/workspace-decision-store.js +510 -0
  423. package/dist/local/workspace-decision-store.js.map +1 -0
  424. package/dist/local/workspace-environment-runtime.d.ts +107 -0
  425. package/dist/local/workspace-environment-runtime.d.ts.map +1 -0
  426. package/dist/local/workspace-environment-runtime.js +135 -0
  427. package/dist/local/workspace-environment-runtime.js.map +1 -0
  428. package/dist/local/workspace-evidence-drop.d.ts +21 -0
  429. package/dist/local/workspace-evidence-drop.d.ts.map +1 -0
  430. package/dist/local/workspace-evidence-drop.js +58 -0
  431. package/dist/local/workspace-evidence-drop.js.map +1 -0
  432. package/dist/local/workspace-evidence-sign-tool.d.ts +20 -0
  433. package/dist/local/workspace-evidence-sign-tool.d.ts.map +1 -0
  434. package/dist/local/workspace-evidence-sign-tool.js +85 -0
  435. package/dist/local/workspace-evidence-sign-tool.js.map +1 -0
  436. package/dist/local/workspace-evidence-status.d.ts +89 -0
  437. package/dist/local/workspace-evidence-status.d.ts.map +1 -0
  438. package/dist/local/workspace-evidence-status.js +141 -0
  439. package/dist/local/workspace-evidence-status.js.map +1 -0
  440. package/dist/local/workspace-evidence.d.ts +145 -0
  441. package/dist/local/workspace-evidence.d.ts.map +1 -0
  442. package/dist/local/workspace-evidence.js +347 -0
  443. package/dist/local/workspace-evidence.js.map +1 -0
  444. package/dist/local/workspace-graph-store.d.ts +32 -0
  445. package/dist/local/workspace-graph-store.d.ts.map +1 -0
  446. package/dist/local/workspace-graph-store.js +249 -0
  447. package/dist/local/workspace-graph-store.js.map +1 -0
  448. package/dist/local/workspace-handoff.d.ts +32 -0
  449. package/dist/local/workspace-handoff.d.ts.map +1 -0
  450. package/dist/local/workspace-handoff.js +144 -0
  451. package/dist/local/workspace-handoff.js.map +1 -0
  452. package/dist/local/workspace-history-journal.d.ts +70 -0
  453. package/dist/local/workspace-history-journal.d.ts.map +1 -0
  454. package/dist/local/workspace-history-journal.js +131 -0
  455. package/dist/local/workspace-history-journal.js.map +1 -0
  456. package/dist/local/workspace-history-store.d.ts +98 -0
  457. package/dist/local/workspace-history-store.d.ts.map +1 -0
  458. package/dist/local/workspace-history-store.js +632 -0
  459. package/dist/local/workspace-history-store.js.map +1 -0
  460. package/dist/local/workspace-history-types.d.ts +307 -0
  461. package/dist/local/workspace-history-types.d.ts.map +1 -0
  462. package/dist/local/workspace-history-types.js +2 -0
  463. package/dist/local/workspace-history-types.js.map +1 -0
  464. package/dist/local/workspace-integration-runtime.d.ts +48 -0
  465. package/dist/local/workspace-integration-runtime.d.ts.map +1 -0
  466. package/dist/local/workspace-integration-runtime.js +419 -0
  467. package/dist/local/workspace-integration-runtime.js.map +1 -0
  468. package/dist/local/workspace-lock.d.ts +7 -0
  469. package/dist/local/workspace-lock.d.ts.map +1 -0
  470. package/dist/local/workspace-lock.js +211 -0
  471. package/dist/local/workspace-lock.js.map +1 -0
  472. package/dist/local/workspace-merge.d.ts +77 -0
  473. package/dist/local/workspace-merge.d.ts.map +1 -0
  474. package/dist/local/workspace-merge.js +703 -0
  475. package/dist/local/workspace-merge.js.map +1 -0
  476. package/dist/local/workspace-mixed-history.d.ts +33 -0
  477. package/dist/local/workspace-mixed-history.d.ts.map +1 -0
  478. package/dist/local/workspace-mixed-history.js +107 -0
  479. package/dist/local/workspace-mixed-history.js.map +1 -0
  480. package/dist/local/workspace-overlap-allocation.d.ts +33 -0
  481. package/dist/local/workspace-overlap-allocation.d.ts.map +1 -0
  482. package/dist/local/workspace-overlap-allocation.js +69 -0
  483. package/dist/local/workspace-overlap-allocation.js.map +1 -0
  484. package/dist/local/workspace-overlap-impact.d.ts +46 -0
  485. package/dist/local/workspace-overlap-impact.d.ts.map +1 -0
  486. package/dist/local/workspace-overlap-impact.js +162 -0
  487. package/dist/local/workspace-overlap-impact.js.map +1 -0
  488. package/dist/local/workspace-overlap.d.ts +109 -0
  489. package/dist/local/workspace-overlap.d.ts.map +1 -0
  490. package/dist/local/workspace-overlap.js +327 -0
  491. package/dist/local/workspace-overlap.js.map +1 -0
  492. package/dist/local/workspace-paths.d.ts +4 -0
  493. package/dist/local/workspace-paths.d.ts.map +1 -0
  494. package/dist/local/workspace-paths.js +8 -0
  495. package/dist/local/workspace-paths.js.map +1 -0
  496. package/dist/local/workspace-pick-runtime.d.ts +70 -0
  497. package/dist/local/workspace-pick-runtime.d.ts.map +1 -0
  498. package/dist/local/workspace-pick-runtime.js +177 -0
  499. package/dist/local/workspace-pick-runtime.js.map +1 -0
  500. package/dist/local/workspace-pick-store.d.ts +33 -0
  501. package/dist/local/workspace-pick-store.d.ts.map +1 -0
  502. package/dist/local/workspace-pick-store.js +43 -0
  503. package/dist/local/workspace-pick-store.js.map +1 -0
  504. package/dist/local/workspace-pick.d.ts +73 -0
  505. package/dist/local/workspace-pick.d.ts.map +1 -0
  506. package/dist/local/workspace-pick.js +253 -0
  507. package/dist/local/workspace-pick.js.map +1 -0
  508. package/dist/local/workspace-portable-authoring.d.ts +43 -0
  509. package/dist/local/workspace-portable-authoring.d.ts.map +1 -0
  510. package/dist/local/workspace-portable-authoring.js +128 -0
  511. package/dist/local/workspace-portable-authoring.js.map +1 -0
  512. package/dist/local/workspace-prune.d.ts +63 -0
  513. package/dist/local/workspace-prune.d.ts.map +1 -0
  514. package/dist/local/workspace-prune.js +267 -0
  515. package/dist/local/workspace-prune.js.map +1 -0
  516. package/dist/local/workspace-remote-fetch.d.ts +82 -0
  517. package/dist/local/workspace-remote-fetch.d.ts.map +1 -0
  518. package/dist/local/workspace-remote-fetch.js +409 -0
  519. package/dist/local/workspace-remote-fetch.js.map +1 -0
  520. package/dist/local/workspace-remote-provider.d.ts +97 -0
  521. package/dist/local/workspace-remote-provider.d.ts.map +1 -0
  522. package/dist/local/workspace-remote-provider.js +400 -0
  523. package/dist/local/workspace-remote-provider.js.map +1 -0
  524. package/dist/local/workspace-remote-pull-request-journal.d.ts +49 -0
  525. package/dist/local/workspace-remote-pull-request-journal.d.ts.map +1 -0
  526. package/dist/local/workspace-remote-pull-request-journal.js +63 -0
  527. package/dist/local/workspace-remote-pull-request-journal.js.map +1 -0
  528. package/dist/local/workspace-remote-pull-request.d.ts +36 -0
  529. package/dist/local/workspace-remote-pull-request.d.ts.map +1 -0
  530. package/dist/local/workspace-remote-pull-request.js +158 -0
  531. package/dist/local/workspace-remote-pull-request.js.map +1 -0
  532. package/dist/local/workspace-remote-push.d.ts +88 -0
  533. package/dist/local/workspace-remote-push.d.ts.map +1 -0
  534. package/dist/local/workspace-remote-push.js +297 -0
  535. package/dist/local/workspace-remote-push.js.map +1 -0
  536. package/dist/local/workspace-remote-topic-journal.d.ts +56 -0
  537. package/dist/local/workspace-remote-topic-journal.d.ts.map +1 -0
  538. package/dist/local/workspace-remote-topic-journal.js +121 -0
  539. package/dist/local/workspace-remote-topic-journal.js.map +1 -0
  540. package/dist/local/workspace-remote-topic.d.ts +45 -0
  541. package/dist/local/workspace-remote-topic.d.ts.map +1 -0
  542. package/dist/local/workspace-remote-topic.js +204 -0
  543. package/dist/local/workspace-remote-topic.js.map +1 -0
  544. package/dist/local/workspace-remote-transfer.d.ts +76 -0
  545. package/dist/local/workspace-remote-transfer.d.ts.map +1 -0
  546. package/dist/local/workspace-remote-transfer.js +270 -0
  547. package/dist/local/workspace-remote-transfer.js.map +1 -0
  548. package/dist/local/workspace-resolution.d.ts +145 -0
  549. package/dist/local/workspace-resolution.d.ts.map +1 -0
  550. package/dist/local/workspace-resolution.js +479 -0
  551. package/dist/local/workspace-resolution.js.map +1 -0
  552. package/dist/local/workspace-resolver-provider.d.ts +72 -0
  553. package/dist/local/workspace-resolver-provider.d.ts.map +1 -0
  554. package/dist/local/workspace-resolver-provider.js +312 -0
  555. package/dist/local/workspace-resolver-provider.js.map +1 -0
  556. package/dist/local/workspace-runtime-handoff.d.ts +52 -0
  557. package/dist/local/workspace-runtime-handoff.d.ts.map +1 -0
  558. package/dist/local/workspace-runtime-handoff.js +237 -0
  559. package/dist/local/workspace-runtime-handoff.js.map +1 -0
  560. package/dist/local/workspace-runtime-lease.d.ts +26 -0
  561. package/dist/local/workspace-runtime-lease.d.ts.map +1 -0
  562. package/dist/local/workspace-runtime-lease.js +123 -0
  563. package/dist/local/workspace-runtime-lease.js.map +1 -0
  564. package/dist/local/workspace-runtime.d.ts +690 -0
  565. package/dist/local/workspace-runtime.d.ts.map +1 -0
  566. package/dist/local/workspace-runtime.js +2124 -0
  567. package/dist/local/workspace-runtime.js.map +1 -0
  568. package/dist/local/workspace-scope.d.ts +70 -0
  569. package/dist/local/workspace-scope.d.ts.map +1 -0
  570. package/dist/local/workspace-scope.js +206 -0
  571. package/dist/local/workspace-scope.js.map +1 -0
  572. package/dist/local/workspace-sources.d.ts +159 -0
  573. package/dist/local/workspace-sources.d.ts.map +1 -0
  574. package/dist/local/workspace-sources.js +570 -0
  575. package/dist/local/workspace-sources.js.map +1 -0
  576. package/dist/local/workspace-store-database.d.ts +5 -0
  577. package/dist/local/workspace-store-database.d.ts.map +1 -0
  578. package/dist/local/workspace-store-database.js +726 -0
  579. package/dist/local/workspace-store-database.js.map +1 -0
  580. package/dist/local/workspace-store.d.ts +261 -0
  581. package/dist/local/workspace-store.d.ts.map +1 -0
  582. package/dist/local/workspace-store.js +831 -0
  583. package/dist/local/workspace-store.js.map +1 -0
  584. package/dist/local/workspace-topology-runtime.d.ts +27 -0
  585. package/dist/local/workspace-topology-runtime.d.ts.map +1 -0
  586. package/dist/local/workspace-topology-runtime.js +396 -0
  587. package/dist/local/workspace-topology-runtime.js.map +1 -0
  588. package/dist/local/workspace-topology.d.ts +140 -0
  589. package/dist/local/workspace-topology.d.ts.map +1 -0
  590. package/dist/local/workspace-topology.js +359 -0
  591. package/dist/local/workspace-topology.js.map +1 -0
  592. package/dist/local/workspace-upstream-inspection.d.ts +60 -0
  593. package/dist/local/workspace-upstream-inspection.d.ts.map +1 -0
  594. package/dist/local/workspace-upstream-inspection.js +189 -0
  595. package/dist/local/workspace-upstream-inspection.js.map +1 -0
  596. package/dist/local/workspace-upstream-runtime.d.ts +91 -0
  597. package/dist/local/workspace-upstream-runtime.d.ts.map +1 -0
  598. package/dist/local/workspace-upstream-runtime.js +270 -0
  599. package/dist/local/workspace-upstream-runtime.js.map +1 -0
  600. package/dist/local/workspace-upstream-store.d.ts +51 -0
  601. package/dist/local/workspace-upstream-store.d.ts.map +1 -0
  602. package/dist/local/workspace-upstream-store.js +475 -0
  603. package/dist/local/workspace-upstream-store.js.map +1 -0
  604. package/dist/local/workspace-viewer-server.d.ts +136 -0
  605. package/dist/local/workspace-viewer-server.d.ts.map +1 -0
  606. package/dist/local/workspace-viewer-server.js +1097 -0
  607. package/dist/local/workspace-viewer-server.js.map +1 -0
  608. package/dist/local/workspace-viewer-snapshot.d.ts +49 -0
  609. package/dist/local/workspace-viewer-snapshot.d.ts.map +1 -0
  610. package/dist/local/workspace-viewer-snapshot.js +91 -0
  611. package/dist/local/workspace-viewer-snapshot.js.map +1 -0
  612. package/dist/local/worktree-projection.d.ts +76 -0
  613. package/dist/local/worktree-projection.d.ts.map +1 -0
  614. package/dist/local/worktree-projection.js +470 -0
  615. package/dist/local/worktree-projection.js.map +1 -0
  616. package/dist/mcp/client-identity.d.ts +8 -0
  617. package/dist/mcp/client-identity.d.ts.map +1 -0
  618. package/dist/mcp/client-identity.js +33 -0
  619. package/dist/mcp/client-identity.js.map +1 -0
  620. package/dist/mcp/graph-to-code.d.ts +53 -0
  621. package/dist/mcp/graph-to-code.d.ts.map +1 -0
  622. package/dist/mcp/graph-to-code.js +1624 -0
  623. package/dist/mcp/graph-to-code.js.map +1 -0
  624. package/dist/mcp/index.d.ts +3 -0
  625. package/dist/mcp/index.d.ts.map +1 -0
  626. package/dist/mcp/index.js +3 -0
  627. package/dist/mcp/index.js.map +1 -0
  628. package/dist/mcp/stdio/graph-to-code.d.ts +3 -0
  629. package/dist/mcp/stdio/graph-to-code.d.ts.map +1 -0
  630. package/dist/mcp/stdio/graph-to-code.js +55 -0
  631. package/dist/mcp/stdio/graph-to-code.js.map +1 -0
  632. package/dist/mcp/stdio/worktree.d.ts +3 -0
  633. package/dist/mcp/stdio/worktree.d.ts.map +1 -0
  634. package/dist/mcp/stdio/worktree.js +67 -0
  635. package/dist/mcp/stdio/worktree.js.map +1 -0
  636. package/dist/mcp/worktree-claim-status.d.ts +162 -0
  637. package/dist/mcp/worktree-claim-status.d.ts.map +1 -0
  638. package/dist/mcp/worktree-claim-status.js +113 -0
  639. package/dist/mcp/worktree-claim-status.js.map +1 -0
  640. package/dist/mcp/worktree-dispatch.d.ts +13 -0
  641. package/dist/mcp/worktree-dispatch.d.ts.map +1 -0
  642. package/dist/mcp/worktree-dispatch.js +52 -0
  643. package/dist/mcp/worktree-dispatch.js.map +1 -0
  644. package/dist/mcp/worktree-errors.d.ts +15 -0
  645. package/dist/mcp/worktree-errors.d.ts.map +1 -0
  646. package/dist/mcp/worktree-errors.js +17 -0
  647. package/dist/mcp/worktree-errors.js.map +1 -0
  648. package/dist/mcp/worktree-health.d.ts +12 -0
  649. package/dist/mcp/worktree-health.d.ts.map +1 -0
  650. package/dist/mcp/worktree-health.js +32 -0
  651. package/dist/mcp/worktree-health.js.map +1 -0
  652. package/dist/mcp/worktree-results.d.ts +15 -0
  653. package/dist/mcp/worktree-results.d.ts.map +1 -0
  654. package/dist/mcp/worktree-results.js +12 -0
  655. package/dist/mcp/worktree-results.js.map +1 -0
  656. package/dist/mcp/worktree-task-context.d.ts +57 -0
  657. package/dist/mcp/worktree-task-context.d.ts.map +1 -0
  658. package/dist/mcp/worktree-task-context.js +45 -0
  659. package/dist/mcp/worktree-task-context.js.map +1 -0
  660. package/dist/mcp/worktree-tools.d.ts +2648 -0
  661. package/dist/mcp/worktree-tools.d.ts.map +1 -0
  662. package/dist/mcp/worktree-tools.js +192 -0
  663. package/dist/mcp/worktree-tools.js.map +1 -0
  664. package/dist/mcp/worktree.d.ts +33 -0
  665. package/dist/mcp/worktree.d.ts.map +1 -0
  666. package/dist/mcp/worktree.js +551 -0
  667. package/dist/mcp/worktree.js.map +1 -0
  668. package/dist/own-package.d.ts +13 -0
  669. package/dist/own-package.d.ts.map +1 -0
  670. package/dist/own-package.js +32 -0
  671. package/dist/own-package.js.map +1 -0
  672. package/dist/packages-browse.d.ts +107 -0
  673. package/dist/packages-browse.d.ts.map +1 -0
  674. package/dist/packages-browse.js +646 -0
  675. package/dist/packages-browse.js.map +1 -0
  676. package/dist/packages-cli.d.ts +8 -0
  677. package/dist/packages-cli.d.ts.map +1 -0
  678. package/dist/packages-cli.js +184 -0
  679. package/dist/packages-cli.js.map +1 -0
  680. package/dist/packages-uses.d.ts +46 -0
  681. package/dist/packages-uses.d.ts.map +1 -0
  682. package/dist/packages-uses.js +737 -0
  683. package/dist/packages-uses.js.map +1 -0
  684. package/dist/portable.d.ts +7 -0
  685. package/dist/portable.d.ts.map +1 -0
  686. package/dist/portable.js +14 -0
  687. package/dist/portable.js.map +1 -0
  688. package/dist/quiet-warnings.d.ts +3 -0
  689. package/dist/quiet-warnings.d.ts.map +1 -0
  690. package/dist/quiet-warnings.js +21 -0
  691. package/dist/quiet-warnings.js.map +1 -0
  692. package/dist/view-seam.d.ts +62 -0
  693. package/dist/view-seam.d.ts.map +1 -0
  694. package/dist/view-seam.js +70 -0
  695. package/dist/view-seam.js.map +1 -0
  696. package/generated/graph-packages/index.json +5 -0
  697. package/graph-packages.lock.json +4 -0
  698. package/package.json +81 -0
  699. package/viewer/assets/index-BZKGDARF.css +1 -0
  700. package/viewer/assets/index-DWu0CbZZ.js +272 -0
  701. package/viewer/index.html +13 -0
@@ -0,0 +1,319 @@
1
+ import { setTimeout as sleep } from 'node:timers/promises';
2
+ import { parseArgs } from 'node:util';
3
+ import { z } from 'zod';
4
+ import { applyWorkspaceProposal, approvePullRequest, buildPullRequestReviewEvidence, commitBranch, getBranchSummary, getPullRequest, GraphBranchHistoryError, mergePullRequest, preparePullRequestReview } from '@software-dlc/graph/client';
5
+ import { BRANCH_APPLY_USAGE, BRANCH_COMMIT_USAGE, PULL_REQUEST_USAGE } from './cli-help.js';
6
+ import { checkOperation, operationSignal } from './local/operation.js';
7
+ const uuid = z.string().uuid();
8
+ function parseOptions(input) {
9
+ const option_names = Object.keys(input.schema.shape);
10
+ let parsed;
11
+ try {
12
+ parsed = parseArgs({
13
+ args: input.args,
14
+ options: Object.fromEntries(option_names.map((name) => [name, { type: 'string' }])),
15
+ strict: true,
16
+ allowPositionals: false,
17
+ tokens: true
18
+ });
19
+ }
20
+ catch (error) {
21
+ throw new Error(`${error instanceof Error ? error.message : String(error)}\n${input.usage}`);
22
+ }
23
+ const seen = new Set();
24
+ for (const token of parsed.tokens ?? []) {
25
+ if (token.kind !== 'option')
26
+ continue;
27
+ if (seen.has(token.name)) {
28
+ throw new Error(`Duplicate --${token.name}.\n${input.usage}`);
29
+ }
30
+ seen.add(token.name);
31
+ }
32
+ const result = input.schema.strict().safeParse(parsed.values);
33
+ if (!result.success) {
34
+ const issue = result.error.issues[0];
35
+ throw new Error(`Invalid --${String(issue?.path[0] ?? 'option')}: ${issue?.message ?? 'invalid value'}\n${input.usage}`);
36
+ }
37
+ return result.data;
38
+ }
39
+ async function call(request) {
40
+ checkOperation();
41
+ try {
42
+ return await request();
43
+ }
44
+ catch (error) {
45
+ if (error instanceof GraphBranchHistoryError) {
46
+ throw new Error(`${error.message} (status ${error.status}${error.reason ? `, reason ${error.reason}` : ''})`);
47
+ }
48
+ throw error;
49
+ }
50
+ finally {
51
+ checkOperation();
52
+ }
53
+ }
54
+ function requireProject(input) {
55
+ if (input.project_id !== input.expected_project_id) {
56
+ throw new Error(`${input.what} belongs to project ${input.project_id}, not this checkout's project ${input.expected_project_id}.`);
57
+ }
58
+ }
59
+ function localRevision(local_workspace, workspace_id) {
60
+ return local_workspace?.worktree_id === workspace_id
61
+ ? local_workspace.revision
62
+ : null;
63
+ }
64
+ /**
65
+ * The apply command for a workspace. Its key names the proposal and Working
66
+ * revisions, so after an apply moves the Working graph the next suggestion is
67
+ * a new key, not a replay of the finished one.
68
+ */
69
+ function applyCommand(input) {
70
+ const branch = input.explicit_branch ? ` --branch-id ${input.branch_id}` : '';
71
+ return input.revision === null || input.working_revision === null
72
+ ? `sdlc branch apply --idempotency-key <key> --expected-workspace-revision <n>${branch}`
73
+ : `sdlc branch apply --idempotency-key apply-${input.workspace_id}-r${input.revision}-w${input.working_revision}${branch}`;
74
+ }
75
+ /** About 100 seconds of waits for a commit whose graph validation is running. */
76
+ const VALIDATION_WAIT_MS = [2, 3, 5, 5, 10, 15, 20, 20, 20].map((seconds) => seconds * 1000);
77
+ /** `sdlc branch commit`: commits the bound (or named) branch's Working changes. */
78
+ export async function branchCommitCommand(input) {
79
+ const options = parseOptions({
80
+ args: input.args,
81
+ usage: BRANCH_COMMIT_USAGE,
82
+ schema: z.object({
83
+ message: z.string().trim().min(1).max(5_000),
84
+ 'expected-head': uuid,
85
+ 'branch-id': uuid.optional()
86
+ })
87
+ });
88
+ const branch_id = options['branch-id'] ?? input.bound_branch_id;
89
+ if (!branch_id) {
90
+ throw new Error(`Current Git branch is not bound; pass --branch-id.\n${BRANCH_COMMIT_USAGE}`);
91
+ }
92
+ if (!options['branch-id']) {
93
+ // Say which branch the binding chose before writing to it.
94
+ process.stderr.write(`[sdlc] committing bound branch ${branch_id}\n`);
95
+ }
96
+ const branch = await call(() => getBranchSummary(input.client, branch_id, { signal: operationSignal() }));
97
+ requireProject({
98
+ what: `Branch ${branch_id}`,
99
+ project_id: branch.repository_id,
100
+ expected_project_id: input.project_id
101
+ });
102
+ // A commit waits while the branch's graph validation runs: answered 202, or
103
+ // 409 when the graph changed while committing. Neither writes, so the
104
+ // command asks again after each delay instead of making the caller loop
105
+ // (iss-493).
106
+ const delays = input.validation_wait_ms ?? VALIDATION_WAIT_MS;
107
+ let response;
108
+ for (let attempt = 0;; attempt += 1) {
109
+ const last = attempt >= delays.length;
110
+ const answer = await call(async () => {
111
+ try {
112
+ return await commitBranch(input.client, {
113
+ branch_id,
114
+ message: options.message,
115
+ expected_head_commit_id: options['expected-head']
116
+ }, { signal: operationSignal() });
117
+ }
118
+ catch (error) {
119
+ if (!last &&
120
+ error instanceof GraphBranchHistoryError &&
121
+ error.reason === 'graph_validation_pending') {
122
+ return null;
123
+ }
124
+ throw error;
125
+ }
126
+ });
127
+ const waiting = answer === null ||
128
+ ('reason' in answer && answer.reason === 'graph_validation_pending');
129
+ if (answer !== null && (!waiting || last)) {
130
+ response = answer;
131
+ break;
132
+ }
133
+ const delay = delays[attempt];
134
+ process.stderr.write(`[sdlc] graph validation is still running; asking again in ${Math.round(delay / 1000)}s\n`);
135
+ await sleep(delay, undefined, { signal: operationSignal() });
136
+ }
137
+ const pending = 'reason' in response && response.reason === 'graph_validation_pending';
138
+ if ('reason' in response &&
139
+ response.reason === 'no_changes' &&
140
+ branch.worktree_id) {
141
+ // sdlc save writes the AI workspace proposal, not the Working graph, so a
142
+ // commit right after a save finds nothing until the proposal is applied.
143
+ // The branch summary does not say whether a proposal waits, so the hint
144
+ // is conditional.
145
+ const apply_command = applyCommand({
146
+ branch_id,
147
+ workspace_id: branch.worktree_id,
148
+ revision: localRevision(input.local_workspace ?? null, branch.worktree_id),
149
+ working_revision: branch.working_revision,
150
+ explicit_branch: Boolean(options['branch-id'])
151
+ });
152
+ const hint = `The Working graph has no uncommitted changes. If you saved changes with sdlc save since the last apply, they wait in the branch's AI workspace ${branch.worktree_id}: run ${apply_command}, then commit again.`;
153
+ process.stderr.write(`[sdlc] ${hint}\n`);
154
+ return {
155
+ output: { branch_id, ...response, hint, apply_command },
156
+ exit_code: 0
157
+ };
158
+ }
159
+ return { output: { branch_id, ...response }, exit_code: pending ? 2 : 0 };
160
+ }
161
+ const revision = z
162
+ .string()
163
+ .regex(/^\d+$/, 'expected a non-negative integer')
164
+ .transform(Number)
165
+ .refine(Number.isSafeInteger, 'expected a safe integer');
166
+ /**
167
+ * `sdlc branch apply`: applies the bound (or named) branch's AI workspace
168
+ * proposal to its Working graph. --expected-workspace-revision is the proposal
169
+ * revision the caller approved, by default the one this checkout last saved or
170
+ * synced; the workspace and the Working revision default to the branch's
171
+ * current ones.
172
+ */
173
+ export async function branchApplyCommand(input) {
174
+ const options = parseOptions({
175
+ args: input.args,
176
+ usage: BRANCH_APPLY_USAGE,
177
+ schema: z.object({
178
+ 'idempotency-key': z.string().trim().min(16).max(200),
179
+ 'expected-workspace-revision': revision.optional(),
180
+ 'expected-workspace-id': uuid.optional(),
181
+ 'expected-branch-revision': revision.optional(),
182
+ 'branch-id': uuid.optional()
183
+ })
184
+ });
185
+ const branch_id = options['branch-id'] ?? input.bound_branch_id;
186
+ if (!branch_id) {
187
+ throw new Error(`Current Git branch is not bound; pass --branch-id.\n${BRANCH_APPLY_USAGE}`);
188
+ }
189
+ if (!options['branch-id']) {
190
+ // Say which branch the binding chose before writing to it.
191
+ process.stderr.write(`[sdlc] applying to bound branch ${branch_id}\n`);
192
+ }
193
+ const branch = await call(() => getBranchSummary(input.client, branch_id, { signal: operationSignal() }));
194
+ requireProject({
195
+ what: `Branch ${branch_id}`,
196
+ project_id: branch.repository_id,
197
+ expected_project_id: input.project_id
198
+ });
199
+ const workspace_id = options['expected-workspace-id'] ?? branch.worktree_id;
200
+ const branch_revision = options['expected-branch-revision'] ?? branch.working_revision;
201
+ if (!workspace_id) {
202
+ throw new Error(`Branch ${branch_id} has no AI workspace to apply.`);
203
+ }
204
+ if (branch_revision === null) {
205
+ throw new Error(`Branch ${branch_id} did not report its Working revision; pass --expected-branch-revision.`);
206
+ }
207
+ let workspace_revision = options['expected-workspace-revision'];
208
+ if (workspace_revision === undefined) {
209
+ const saved = localRevision(input.local_workspace ?? null, workspace_id);
210
+ if (saved === null) {
211
+ throw new Error(`This checkout has no saved or synced revision of workspace ${workspace_id}; pass --expected-workspace-revision.\n${BRANCH_APPLY_USAGE}`);
212
+ }
213
+ workspace_revision = saved;
214
+ process.stderr.write(`[sdlc] applying workspace revision ${saved}, the one this checkout last saved or synced\n`);
215
+ }
216
+ const expected_workspace_revision = workspace_revision;
217
+ // The apply runs as a job the client polls; each step it reaches is said
218
+ // once, so a long apply shows it is still moving.
219
+ let reported_step = null;
220
+ const response = await call(() => applyWorkspaceProposal(input.client, {
221
+ branch_id,
222
+ idempotency_key: options['idempotency-key'],
223
+ expected_workspace_id: workspace_id,
224
+ expected_workspace_revision,
225
+ expected_branch_graph_revision: branch_revision
226
+ }, {
227
+ signal: operationSignal(),
228
+ on_progress: (running) => {
229
+ if (running.step === reported_step)
230
+ return;
231
+ reported_step = running.step;
232
+ process.stderr.write(`[sdlc] apply job ${running.job_id}: ${running.step}\n`);
233
+ }
234
+ }));
235
+ return { output: { branch_id, ...response }, exit_code: 0 };
236
+ }
237
+ /** `sdlc pr review|approve|merge`: pull-request steps as the key's user. */
238
+ export async function pullRequestCommand(input) {
239
+ const [subcommand, ...args] = input.args;
240
+ const request_options = { signal: operationSignal() };
241
+ const readPullRequest = async (pull_request_id) => {
242
+ const pull_request = await call(() => getPullRequest(input.client, pull_request_id, request_options));
243
+ requireProject({
244
+ what: `Pull request ${pull_request_id}`,
245
+ project_id: pull_request.repository_id,
246
+ expected_project_id: input.project_id
247
+ });
248
+ return pull_request;
249
+ };
250
+ if (subcommand === 'review') {
251
+ const options = parseOptions({
252
+ args,
253
+ usage: PULL_REQUEST_USAGE,
254
+ schema: z.object({
255
+ 'pr-id': uuid,
256
+ 'comparison-diff-id': uuid.optional(),
257
+ 'comparison-manifest-hash': z
258
+ .string()
259
+ .regex(/^sha256:[0-9a-f]{64}$/)
260
+ .optional(),
261
+ 'expected-source': uuid.optional(),
262
+ 'expected-target': uuid.optional()
263
+ })
264
+ });
265
+ const evidence_flags = [
266
+ options['comparison-diff-id'],
267
+ options['comparison-manifest-hash'],
268
+ options['expected-source'],
269
+ options['expected-target']
270
+ ];
271
+ const given = evidence_flags.filter((flag) => flag !== undefined).length;
272
+ if (given !== 0 && given !== evidence_flags.length) {
273
+ throw new Error(`Pass all four evidence options, or none to read the pull request's evidence.\n${PULL_REQUEST_USAGE}`);
274
+ }
275
+ const pull_request = await readPullRequest(options['pr-id']);
276
+ const evidence = given === 0
277
+ ? await call(() => buildPullRequestReviewEvidence(input.client, pull_request, request_options))
278
+ : {
279
+ comparison_diff_id: options['comparison-diff-id'],
280
+ comparison_manifest_hash: options['comparison-manifest-hash'],
281
+ expected_source_commit_id: options['expected-source'],
282
+ expected_target_commit_id: options['expected-target']
283
+ };
284
+ const output = await call(() => preparePullRequestReview(input.client, { pull_request_id: options['pr-id'], ...evidence }, request_options));
285
+ return { output, exit_code: 0 };
286
+ }
287
+ if (subcommand === 'approve') {
288
+ const options = parseOptions({
289
+ args,
290
+ usage: PULL_REQUEST_USAGE,
291
+ schema: z.object({
292
+ 'pr-id': uuid,
293
+ 'expected-source': uuid,
294
+ 'expected-target': uuid,
295
+ 'review-hash': z.string().min(1).max(200)
296
+ })
297
+ });
298
+ await readPullRequest(options['pr-id']);
299
+ const output = await call(() => approvePullRequest(input.client, {
300
+ pull_request_id: options['pr-id'],
301
+ expected_source_commit_id: options['expected-source'],
302
+ expected_target_commit_id: options['expected-target'],
303
+ expected_review_hash: options['review-hash']
304
+ }, request_options));
305
+ return { output, exit_code: 0 };
306
+ }
307
+ if (subcommand === 'merge') {
308
+ const options = parseOptions({
309
+ args,
310
+ usage: PULL_REQUEST_USAGE,
311
+ schema: z.object({ 'pr-id': uuid })
312
+ });
313
+ await readPullRequest(options['pr-id']);
314
+ const output = await call(() => mergePullRequest(input.client, { pull_request_id: options['pr-id'] }, request_options));
315
+ return { output, exit_code: 0 };
316
+ }
317
+ throw new Error(PULL_REQUEST_USAGE);
318
+ }
319
+ //# sourceMappingURL=cli-branch-history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-branch-history.js","sourceRoot":"","sources":["../src/cli-branch-history.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { type GraphClientOptions } from '@software-dlc/graph/client';
2
+ import { OperationRefusalError } from './local/operation.js';
3
+ export declare const BRANCHES_USAGE = "Usage: sdlc branches [--timeout-ms <1000..600000>]";
4
+ /**
5
+ * The refusal for a command that needs this Git ref's binding. It is an
6
+ * OperationRefusalError so checkout and refresh show it instead of a bare
7
+ * operation_failed.
8
+ */
9
+ export declare function unboundBranchError(): OperationRefusalError;
10
+ /**
11
+ * `sdlc branches`: the active project's hosted branches, with the one this Git
12
+ * ref is bound to marked. Read-only; it needs no binding.
13
+ */
14
+ export declare function branchesCommand(input: {
15
+ args: string[];
16
+ client: GraphClientOptions;
17
+ project_id: string;
18
+ bound_branch_id: string | null;
19
+ /** The checkout's named Git ref; null on a detached HEAD, which cannot be bound. */
20
+ source_ref: string | null;
21
+ }): Promise<unknown>;
22
+ //# sourceMappingURL=cli-branches.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-branches.d.ts","sourceRoot":"","sources":["../src/cli-branches.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAGL,qBAAqB,EACtB,MAAM,sBAAsB,CAAC;AAE9B,eAAO,MAAM,cAAc,uDAC2B,CAAC;AAWvD;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,qBAAqB,CAI1D;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE;IAC3C,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,kBAAkB,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,oFAAoF;IACpF,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,GAAG,OAAO,CAAC,OAAO,CAAC,CA+BnB"}
@@ -0,0 +1,59 @@
1
+ import { GraphBranchHistoryError, listProjectBranches } from '@software-dlc/graph/client';
2
+ import { checkOperation, operationSignal, OperationRefusalError } from './local/operation.js';
3
+ export const BRANCHES_USAGE = 'Usage: sdlc branches [--timeout-ms <1000..600000>]';
4
+ /** Only --timeout-ms is taken; runCliOperation reads and enforces it. */
5
+ function onlyTimeout(args) {
6
+ for (let index = 0; index < args.length; index++) {
7
+ if (args[index] === '--timeout-ms')
8
+ index++;
9
+ else if (!args[index].startsWith('--timeout-ms='))
10
+ return false;
11
+ }
12
+ return true;
13
+ }
14
+ /**
15
+ * The refusal for a command that needs this Git ref's binding. It is an
16
+ * OperationRefusalError so checkout and refresh show it instead of a bare
17
+ * operation_failed.
18
+ */
19
+ export function unboundBranchError() {
20
+ return new OperationRefusalError('Current Git branch is not bound to an SDLC branch. Run sdlc branches to list this project\'s branches, then sdlc branch bind --branch-id <id>.');
21
+ }
22
+ /**
23
+ * `sdlc branches`: the active project's hosted branches, with the one this Git
24
+ * ref is bound to marked. Read-only; it needs no binding.
25
+ */
26
+ export async function branchesCommand(input) {
27
+ if (!onlyTimeout(input.args))
28
+ throw new Error(BRANCHES_USAGE);
29
+ checkOperation();
30
+ let branches;
31
+ try {
32
+ branches = await listProjectBranches(input.client, input.project_id, {
33
+ signal: operationSignal()
34
+ });
35
+ }
36
+ catch (error) {
37
+ if (error instanceof GraphBranchHistoryError) {
38
+ throw new Error(`${error.message} (status ${error.status}${error.reason ? `, reason ${error.reason}` : ''})`);
39
+ }
40
+ throw error;
41
+ }
42
+ finally {
43
+ checkOperation();
44
+ }
45
+ return {
46
+ project_id: input.project_id,
47
+ bound_branch_id: input.bound_branch_id,
48
+ branches: branches.map((branch) => ({
49
+ ...branch,
50
+ bound: branch.id === input.bound_branch_id
51
+ })),
52
+ next: input.bound_branch_id
53
+ ? null
54
+ : input.source_ref
55
+ ? 'sdlc branch bind --branch-id <id> binds this Git ref to one of them.'
56
+ : 'This checkout is a detached HEAD, which cannot be bound: check out a named Git branch, then run sdlc branch bind --branch-id <id>.'
57
+ };
58
+ }
59
+ //# sourceMappingURL=cli-branches.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-branches.js","sourceRoot":"","sources":["../src/cli-branches.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EAEpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,cAAc,EACd,eAAe,EACf,qBAAqB,EACtB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,CAAC,MAAM,cAAc,GACzB,oDAAoD,CAAC;AAEvD,yEAAyE;AACzE,SAAS,WAAW,CAAC,IAAc;IACjC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACjD,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,cAAc;YAAE,KAAK,EAAE,CAAC;aACvC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC;YAAE,OAAO,KAAK,CAAC;IAClE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,IAAI,qBAAqB,CAC9B,gJAAgJ,CACjJ,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAOrC;IACC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;IAC9D,cAAc,EAAE,CAAC;IACjB,IAAI,QAAQ,CAAC;IACb,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,mBAAmB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE;YACnE,MAAM,EAAE,eAAe,EAAE;SAC1B,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,uBAAuB,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,CAAC,OAAO,YAAY,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAC7F,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QACT,cAAc,EAAE,CAAC;IACnB,CAAC;IACD,OAAO;QACL,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAClC,GAAG,MAAM;YACT,KAAK,EAAE,MAAM,CAAC,EAAE,KAAK,KAAK,CAAC,eAAe;SAC3C,CAAC,CAAC;QACH,IAAI,EAAE,KAAK,CAAC,eAAe;YACzB,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,KAAK,CAAC,UAAU;gBAChB,CAAC,CAAC,sEAAsE;gBACxE,CAAC,CAAC,oIAAoI;KAC3I,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ export declare const SDLC_DEPLOY_USAGE = "Usage: sdlc deploy record --environment <key> --revision <sha> --organization <id> --project <id> [--source-id <id>] [--url <https url>] [--at <iso time>] [--origin <origin>]";
2
+ export declare const SDLC_DEPLOY_HELP = "Usage: sdlc deploy record --environment <key> --revision <sha> --organization <id> --project <id> [--source-id <id>] [--url <https url>] [--at <iso time>] [--origin <origin>]\nRecords that the Environment began running the revision (a full commit id), with the deployments:write API key in SDLC_API_KEY (create one with Record deployments under Developers \u2192 API keys), acting as the key's user. API keys are for CI; people sign in with sdlc login. It posts to https://www.softwaredlc.com unless --origin names another; the environment never chooses where the key goes, and no redirect is followed. Prints the recorded deployment as JSON and exits 0, also when the same --source-id or the Environment's newest revision is sent again; on a refusal prints {code, error} and exits 1. Pass --source-id (your CI's deployment or run id) so a late retry is never recorded as a rollback.";
3
+ export type DeployDeps = {
4
+ fetch: typeof fetch;
5
+ environment: Readonly<Record<string, string | undefined>>;
6
+ out: (text: string) => void;
7
+ note: (text: string) => void;
8
+ };
9
+ /**
10
+ * Runs sdlc deploy. Returns null for any other command, else the exit code:
11
+ * 0 when the deployment is recorded, 1 when the server refused it.
12
+ */
13
+ export declare function runCliDeploy(args: string[], overrides?: Partial<DeployDeps>): Promise<number | null>;
14
+ //# sourceMappingURL=cli-deploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-deploy.d.ts","sourceRoot":"","sources":["../src/cli-deploy.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,iBAAiB,mLACoJ,CAAC;AACnL,eAAO,MAAM,gBAAgB,w3BAA0tB,CAAC;AAgBxvB,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,OAAO,KAAK,CAAC;IACpB,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAE1D,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B,CAAC;AAIF;;;GAGG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EAAE,EACd,SAAS,GAAE,OAAO,CAAC,UAAU,CAAM,GAClC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAqFxB"}
@@ -0,0 +1,164 @@
1
+ import { ApiVersionRefusedError } from '@software-dlc/graph/client/api-version';
2
+ import { normalizeServiceOrigin } from './local/environment-sidecar.js';
3
+ import { ProjectDeletedError, sdlcPlatformFetch } from './local/api-client.js';
4
+ import { SDLC_LOGIN_DEFAULT_ORIGIN } from './cli-login.js';
5
+ // sdlc deploy record: CI tells SoftwareDLC that a project's Environment began
6
+ // running a revision, through the v1 deployments route with a user API key.
7
+ // docs/specs/release-environments-and-deployments.md (CLI).
8
+ export const SDLC_DEPLOY_USAGE = 'Usage: sdlc deploy record --environment <key> --revision <sha> --organization <id> --project <id> [--source-id <id>] [--url <https url>] [--at <iso time>] [--origin <origin>]';
9
+ export const SDLC_DEPLOY_HELP = `${SDLC_DEPLOY_USAGE}\nRecords that the Environment began running the revision (a full commit id), with the deployments:write API key in SDLC_API_KEY (create one with Record deployments under Developers → API keys), acting as the key's user. API keys are for CI; people sign in with sdlc login. It posts to ${SDLC_LOGIN_DEFAULT_ORIGIN} unless --origin names another; the environment never chooses where the key goes, and no redirect is followed. Prints the recorded deployment as JSON and exits 0, also when the same --source-id or the Environment's newest revision is sent again; on a refusal prints {code, error} and exits 1. Pass --source-id (your CI's deployment or run id) so a late retry is never recorded as a rollback.`;
10
+ const KEY_VARIABLE = 'SDLC_API_KEY';
11
+ const REQUEST_TIMEOUT_MS = 30_000;
12
+ const OPTIONS = {
13
+ '--environment': 'environment',
14
+ '--revision': 'revision',
15
+ '--organization': 'organization',
16
+ '--project': 'project',
17
+ '--source-id': 'source_id',
18
+ '--url': 'url',
19
+ '--at': 'at',
20
+ '--origin': 'origin'
21
+ };
22
+ class DeployError extends Error {
23
+ }
24
+ /**
25
+ * Runs sdlc deploy. Returns null for any other command, else the exit code:
26
+ * 0 when the deployment is recorded, 1 when the server refused it.
27
+ */
28
+ export async function runCliDeploy(args, overrides = {}) {
29
+ const [command, subcommand, ...rest] = args;
30
+ if (command !== 'deploy')
31
+ return null;
32
+ if (subcommand !== 'record')
33
+ throw new DeployError(SDLC_DEPLOY_USAGE);
34
+ const deps = { ...defaultDeps(), ...overrides };
35
+ const options = parseOptions(rest);
36
+ const required = ['environment', 'revision', 'organization', 'project'];
37
+ const missing = required.filter((name) => !options[name]);
38
+ if (missing.length > 0) {
39
+ throw new DeployError(`Missing ${missing.map((name) => `--${name}`).join(', ')}.\n${SDLC_DEPLOY_USAGE}`);
40
+ }
41
+ const key = deps.environment[KEY_VARIABLE]?.trim();
42
+ if (!key) {
43
+ throw new DeployError(`Set ${KEY_VARIABLE} to an API key with the deployments:write scope (Record deployments under Developers → API keys).`);
44
+ }
45
+ // A header refuses a control character with an error quoting the value, so
46
+ // refuse it here, without the key, before it can reach a CI log.
47
+ if (!/^[\x21-\x7e]+$/.test(key)) {
48
+ throw new DeployError(`${KEY_VARIABLE} holds spaces, line breaks or other characters an API key never has.`);
49
+ }
50
+ const origin = deployOrigin(options.origin);
51
+ if (!options.source_id) {
52
+ deps.note('No --source-id: a retry that arrives after a newer deployment is recorded again, as a rollback.\n');
53
+ }
54
+ const path = ['organizations', options.organization, 'projects', options.project, 'environments', options.environment, 'deployments']
55
+ .map(encodeURIComponent)
56
+ .join('/');
57
+ const url = new URL(`/api/v1/${path}`, origin);
58
+ const send = sdlcPlatformFetch({
59
+ fetch_impl: deps.fetch,
60
+ environment: deps.environment
61
+ });
62
+ let response;
63
+ try {
64
+ response = await send(url, {
65
+ method: 'POST',
66
+ headers: {
67
+ authorization: `Bearer ${key}`,
68
+ 'content-type': 'application/json'
69
+ },
70
+ body: JSON.stringify({
71
+ revision: options.revision,
72
+ source_deployment_id: options.source_id ?? null,
73
+ url: options.url ?? null,
74
+ reported_at: options.at ?? null,
75
+ channel: 'cli'
76
+ }),
77
+ redirect: 'manual',
78
+ signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS)
79
+ });
80
+ }
81
+ catch (error) {
82
+ // The server answered, refusing this CLI's API version: a refusal like any other.
83
+ if (error instanceof ApiVersionRefusedError) {
84
+ deps.out(json({ code: error.refusal.code, error: error.message }));
85
+ return 1;
86
+ }
87
+ // So is a deleted project's 410. Deploy binds no checkout, so it prints the
88
+ // server's own answer rather than the checkout's reconnect advice.
89
+ if (error instanceof ProjectDeletedError) {
90
+ deps.out(json({ code: 'project_deleted', error: 'The project was deleted.' }));
91
+ return 1;
92
+ }
93
+ // A header error quotes the value it refused, which may be a secret.
94
+ let message = error instanceof Error ? error.message : String(error);
95
+ for (const secret of [key, deps.environment.SDLC_PROTECTION_BYPASS?.trim()]) {
96
+ if (secret)
97
+ message = message.split(secret).join('[redacted]');
98
+ }
99
+ throw new DeployError(`Could not reach ${origin}: ${message}.`);
100
+ }
101
+ const body = await response.json().catch(() => null);
102
+ if (response.status === 200 || response.status === 201) {
103
+ deps.out(json(body));
104
+ return 0;
105
+ }
106
+ deps.out(json(refusal(response, body, origin)));
107
+ return 1;
108
+ }
109
+ function parseOptions(args) {
110
+ const options = {};
111
+ for (let index = 0; index < args.length; index++) {
112
+ const match = /^(--[a-z-]+)(?:=(.*))?$/.exec(args[index]);
113
+ const name = match ? OPTIONS[match[1]] : undefined;
114
+ const value = match ? (match[2] ?? args[++index]) : undefined;
115
+ if (!name || options[name] !== undefined) {
116
+ throw new DeployError(SDLC_DEPLOY_USAGE);
117
+ }
118
+ // A dot segment would move the request to another route.
119
+ if (!value || value.startsWith('--') || value === '.' || value === '..') {
120
+ throw new DeployError(`${match[1]} needs a value.\n${SDLC_DEPLOY_USAGE}`);
121
+ }
122
+ options[name] = value;
123
+ }
124
+ return options;
125
+ }
126
+ // An origin only: a path would let a flag send the key to a page of a host.
127
+ function deployOrigin(value) {
128
+ const origin = normalizeServiceOrigin(value ?? SDLC_LOGIN_DEFAULT_ORIGIN);
129
+ if (new URL(origin).pathname !== '/') {
130
+ throw new DeployError(`--origin must be an origin like https://host[:port].`);
131
+ }
132
+ return origin;
133
+ }
134
+ // The route's {code, error}, or one made from the status for any other answer.
135
+ function refusal(response, body, origin) {
136
+ if (body &&
137
+ typeof body === 'object' &&
138
+ typeof body.code === 'string' &&
139
+ typeof body.error === 'string') {
140
+ return body;
141
+ }
142
+ if (response.status >= 300 && response.status < 400) {
143
+ return {
144
+ code: 'redirected',
145
+ error: `${origin} answered with a redirect, which sdlc deploy record does not follow; pass the origin it serves the API from with --origin.`
146
+ };
147
+ }
148
+ return {
149
+ code: `http_${response.status}`,
150
+ error: `${origin} answered HTTP ${response.status}.`
151
+ };
152
+ }
153
+ function json(value) {
154
+ return `${JSON.stringify(value, null, 2)}\n`;
155
+ }
156
+ function defaultDeps() {
157
+ return {
158
+ fetch: globalThis.fetch,
159
+ environment: process.env,
160
+ out: (text) => process.stdout.write(text),
161
+ note: (text) => process.stderr.write(text)
162
+ };
163
+ }
164
+ //# sourceMappingURL=cli-deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-deploy.js","sourceRoot":"","sources":["../src/cli-deploy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Dispatch before ordinary context bootstrap; the inspector owns the sole budget. */
2
+ export declare function runCliHealth(args: string[]): Promise<boolean>;
3
+ //# sourceMappingURL=cli-health.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-health.d.ts","sourceRoot":"","sources":["../src/cli-health.ts"],"names":[],"mappings":"AAIA,sFAAsF;AACtF,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAwEnE"}