@mannyc1/ts-release 0.0.7 → 0.2.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 (635) hide show
  1. package/ARCHITECTURE.md +124 -92
  2. package/CHANGELOG.md +115 -0
  3. package/LICENSE +21 -0
  4. package/README.md +278 -324
  5. package/SPEC.md +206 -310
  6. package/apps/release-ts/README.md +32 -0
  7. package/apps/release-ts/src/cli/command.ts +164 -0
  8. package/apps/release-ts/src/cli/commands.ts +351 -0
  9. package/apps/release-ts/src/cli/main.ts +43 -0
  10. package/apps/release-ts/src/cli/node-main.ts +49 -0
  11. package/apps/ts-release-agents/LICENSE +21 -0
  12. package/apps/ts-release-agents/README.md +21 -0
  13. package/apps/ts-release-agents/evals/cases.json +11 -0
  14. package/apps/ts-release-agents/manifests/claude.json +5 -0
  15. package/apps/ts-release-agents/manifests/codex.json +5 -0
  16. package/apps/ts-release-agents/package.json +11 -0
  17. package/apps/ts-release-agents/skills/release/SKILL.md +48 -0
  18. package/apps/ts-release-agents/skills/release/references/configuration.md +18 -0
  19. package/apps/ts-release-agents/skills/release/references/recovery.md +10 -0
  20. package/apps/ts-release-agents/skills/release/references/staged-workflow.md +12 -0
  21. package/apps/ts-release-agents/skills/release/references/target-selection.md +13 -0
  22. package/apps/ts-release-agents/skills/release/references/verification.md +14 -0
  23. package/apps/ts-release-agents/src/build.ts +105 -0
  24. package/apps/ts-release-agents/src/check.ts +117 -0
  25. package/apps/ts-release-agents/src/install.ts +121 -0
  26. package/apps/ts-release-agents/test/contract.test.ts +56 -0
  27. package/apps/ts-release-agents/tsconfig.json +5 -0
  28. package/dist/api/api.d.ts +15 -0
  29. package/dist/api/api.d.ts.map +1 -0
  30. package/dist/api/api.js +244 -0
  31. package/dist/api/api.js.map +1 -0
  32. package/dist/api/errors.d.ts +39 -0
  33. package/dist/api/errors.d.ts.map +1 -0
  34. package/dist/api/errors.js +32 -0
  35. package/dist/api/errors.js.map +1 -0
  36. package/dist/api/input.d.ts +10 -0
  37. package/dist/api/input.d.ts.map +1 -0
  38. package/dist/api/input.js +73 -0
  39. package/dist/api/input.js.map +1 -0
  40. package/dist/api/runtime.d.ts +18 -0
  41. package/dist/api/runtime.d.ts.map +1 -0
  42. package/dist/api/runtime.js +7 -0
  43. package/dist/api/runtime.js.map +1 -0
  44. package/dist/api/types.d.ts +76 -0
  45. package/dist/api/types.d.ts.map +1 -0
  46. package/dist/api/types.js +17 -0
  47. package/dist/api/types.js.map +1 -0
  48. package/dist/bin/ts-release.js +39239 -0
  49. package/dist/capabilities/bun-targets.d.ts +3 -0
  50. package/dist/capabilities/bun-targets.d.ts.map +1 -0
  51. package/dist/capabilities/bun-targets.js +3 -0
  52. package/dist/capabilities/bun-targets.js.map +1 -0
  53. package/dist/capabilities/field-ownership.d.ts +17 -0
  54. package/dist/capabilities/field-ownership.d.ts.map +1 -0
  55. package/dist/capabilities/field-ownership.js +40 -0
  56. package/dist/capabilities/field-ownership.js.map +1 -0
  57. package/dist/capabilities/module.d.ts +91 -0
  58. package/dist/capabilities/module.d.ts.map +1 -0
  59. package/dist/capabilities/module.js +2 -0
  60. package/dist/capabilities/module.js.map +1 -0
  61. package/dist/capabilities/registry.d.ts +829 -0
  62. package/dist/capabilities/registry.d.ts.map +1 -0
  63. package/dist/capabilities/registry.js +291 -0
  64. package/dist/capabilities/registry.js.map +1 -0
  65. package/dist/config/config.d.ts +6 -0
  66. package/dist/config/config.d.ts.map +1 -0
  67. package/dist/config/config.js +42 -0
  68. package/dist/config/config.js.map +1 -0
  69. package/dist/correction/coordinator.d.ts +248 -0
  70. package/dist/correction/coordinator.d.ts.map +1 -0
  71. package/dist/correction/coordinator.js +274 -0
  72. package/dist/correction/coordinator.js.map +1 -0
  73. package/dist/correction/index.d.ts +3 -0
  74. package/dist/correction/index.d.ts.map +1 -0
  75. package/dist/correction/index.js +3 -0
  76. package/dist/correction/index.js.map +1 -0
  77. package/dist/correction/intent.d.ts +111 -0
  78. package/dist/correction/intent.d.ts.map +1 -0
  79. package/dist/correction/intent.js +146 -0
  80. package/dist/correction/intent.js.map +1 -0
  81. package/dist/drivers/archive.d.ts +8 -0
  82. package/dist/drivers/archive.d.ts.map +1 -0
  83. package/dist/drivers/archive.js +101 -0
  84. package/dist/drivers/archive.js.map +1 -0
  85. package/dist/drivers/contain.d.ts +6 -0
  86. package/dist/drivers/contain.d.ts.map +1 -0
  87. package/dist/drivers/contain.js +17 -0
  88. package/dist/drivers/contain.js.map +1 -0
  89. package/dist/drivers/environment.d.ts +4 -0
  90. package/dist/drivers/environment.d.ts.map +1 -0
  91. package/dist/drivers/environment.js +18 -0
  92. package/dist/drivers/environment.js.map +1 -0
  93. package/dist/drivers/errors.d.ts +9 -0
  94. package/dist/drivers/errors.d.ts.map +1 -0
  95. package/dist/drivers/errors.js +6 -0
  96. package/dist/drivers/errors.js.map +1 -0
  97. package/dist/drivers/glob.d.ts +2 -0
  98. package/dist/drivers/glob.d.ts.map +1 -0
  99. package/dist/drivers/glob.js +162 -0
  100. package/dist/drivers/glob.js.map +1 -0
  101. package/dist/drivers/process.d.ts +48 -0
  102. package/dist/drivers/process.d.ts.map +1 -0
  103. package/dist/drivers/process.js +257 -0
  104. package/dist/drivers/process.js.map +1 -0
  105. package/dist/drivers/redact.d.ts +4 -0
  106. package/dist/drivers/redact.d.ts.map +1 -0
  107. package/dist/drivers/redact.js +24 -0
  108. package/dist/drivers/redact.js.map +1 -0
  109. package/dist/drivers/seccomp-helper-source.d.ts +7 -0
  110. package/dist/drivers/seccomp-helper-source.d.ts.map +1 -0
  111. package/dist/drivers/seccomp-helper-source.js +121 -0
  112. package/dist/drivers/seccomp-helper-source.js.map +1 -0
  113. package/dist/drivers/utils.d.ts +4 -0
  114. package/dist/drivers/utils.d.ts.map +1 -0
  115. package/dist/drivers/utils.js +5 -0
  116. package/dist/drivers/utils.js.map +1 -0
  117. package/dist/drivers/workspace.d.ts +6 -0
  118. package/dist/drivers/workspace.d.ts.map +1 -0
  119. package/dist/drivers/workspace.js +49 -0
  120. package/dist/drivers/workspace.js.map +1 -0
  121. package/dist/extensions/provider-adapter.d.ts +48 -0
  122. package/dist/extensions/provider-adapter.d.ts.map +1 -0
  123. package/dist/extensions/provider-adapter.js +64 -0
  124. package/dist/extensions/provider-adapter.js.map +1 -0
  125. package/dist/host.d.ts +33 -0
  126. package/dist/host.d.ts.map +1 -0
  127. package/dist/host.js +20 -0
  128. package/dist/host.js.map +1 -0
  129. package/dist/index.d.ts +19 -1
  130. package/dist/index.d.ts.map +1 -1
  131. package/dist/index.js +12 -1
  132. package/dist/index.js.map +1 -1
  133. package/dist/model/artifact-collection.d.ts +84 -0
  134. package/dist/model/artifact-collection.d.ts.map +1 -0
  135. package/dist/model/artifact-collection.js +185 -0
  136. package/dist/model/artifact-collection.js.map +1 -0
  137. package/dist/model/authority.d.ts +89 -0
  138. package/dist/model/authority.d.ts.map +1 -0
  139. package/dist/model/authority.js +80 -0
  140. package/dist/model/authority.js.map +1 -0
  141. package/dist/model/bun-targets.d.ts +34 -0
  142. package/dist/model/bun-targets.d.ts.map +1 -0
  143. package/dist/model/bun-targets.js +17 -0
  144. package/dist/model/bun-targets.js.map +1 -0
  145. package/dist/model/canonical.d.ts +8 -0
  146. package/dist/model/canonical.d.ts.map +1 -0
  147. package/dist/model/canonical.js +205 -0
  148. package/dist/model/canonical.js.map +1 -0
  149. package/dist/model/catalog.d.ts +76 -0
  150. package/dist/model/catalog.d.ts.map +1 -0
  151. package/dist/model/catalog.js +174 -0
  152. package/dist/model/catalog.js.map +1 -0
  153. package/dist/model/digest.d.ts +53 -0
  154. package/dist/model/digest.d.ts.map +1 -0
  155. package/dist/model/digest.js +127 -0
  156. package/dist/model/digest.js.map +1 -0
  157. package/dist/model/errors.d.ts +14 -0
  158. package/dist/model/errors.d.ts.map +1 -0
  159. package/dist/model/errors.js +8 -0
  160. package/dist/model/errors.js.map +1 -0
  161. package/dist/model/primitives.d.ts +19 -0
  162. package/dist/model/primitives.d.ts.map +1 -0
  163. package/dist/model/primitives.js +18 -0
  164. package/dist/model/primitives.js.map +1 -0
  165. package/dist/model/pypi.d.ts +12 -0
  166. package/dist/model/pypi.d.ts.map +1 -0
  167. package/dist/model/pypi.js +20 -0
  168. package/dist/model/pypi.js.map +1 -0
  169. package/dist/model/python-distribution.d.ts +33 -0
  170. package/dist/model/python-distribution.d.ts.map +1 -0
  171. package/dist/model/python-distribution.js +367 -0
  172. package/dist/model/python-distribution.js.map +1 -0
  173. package/dist/model/secret-patterns.d.ts +2 -0
  174. package/dist/model/secret-patterns.d.ts.map +1 -0
  175. package/dist/model/secret-patterns.js +12 -0
  176. package/dist/model/secret-patterns.js.map +1 -0
  177. package/dist/platform/bun.d.ts +7 -0
  178. package/dist/platform/bun.d.ts.map +1 -0
  179. package/dist/platform/bun.js +15 -0
  180. package/dist/platform/bun.js.map +1 -0
  181. package/dist/platform/credentials.d.ts +32 -0
  182. package/dist/platform/credentials.d.ts.map +1 -0
  183. package/dist/platform/credentials.js +772 -0
  184. package/dist/platform/credentials.js.map +1 -0
  185. package/dist/platform/host-support.d.ts +2 -0
  186. package/dist/platform/host-support.d.ts.map +1 -0
  187. package/dist/platform/host-support.js +4 -0
  188. package/dist/platform/host-support.js.map +1 -0
  189. package/dist/platform/node.d.ts +7 -0
  190. package/dist/platform/node.d.ts.map +1 -0
  191. package/dist/platform/node.js +15 -0
  192. package/dist/platform/node.js.map +1 -0
  193. package/dist/platform/release-runtime.d.ts +11 -0
  194. package/dist/platform/release-runtime.d.ts.map +1 -0
  195. package/dist/platform/release-runtime.js +34 -0
  196. package/dist/platform/release-runtime.js.map +1 -0
  197. package/dist/platform/services.d.ts +15 -0
  198. package/dist/platform/services.d.ts.map +1 -0
  199. package/dist/platform/services.js +30 -0
  200. package/dist/platform/services.js.map +1 -0
  201. package/dist/platform/source-observer.d.ts +5 -0
  202. package/dist/platform/source-observer.d.ts.map +1 -0
  203. package/dist/platform/source-observer.js +159 -0
  204. package/dist/platform/source-observer.js.map +1 -0
  205. package/dist/provider-sdk.d.ts +14 -0
  206. package/dist/provider-sdk.d.ts.map +1 -0
  207. package/dist/provider-sdk.js +10 -0
  208. package/dist/provider-sdk.js.map +1 -0
  209. package/dist/publication/adapter.d.ts +212 -0
  210. package/dist/publication/adapter.d.ts.map +1 -0
  211. package/dist/publication/adapter.js +83 -0
  212. package/dist/publication/adapter.js.map +1 -0
  213. package/dist/publication/authority.d.ts +137 -0
  214. package/dist/publication/authority.d.ts.map +1 -0
  215. package/dist/publication/authority.js +233 -0
  216. package/dist/publication/authority.js.map +1 -0
  217. package/dist/publication/catalog-git.d.ts +37 -0
  218. package/dist/publication/catalog-git.d.ts.map +1 -0
  219. package/dist/publication/catalog-git.js +451 -0
  220. package/dist/publication/catalog-git.js.map +1 -0
  221. package/dist/publication/claim.d.ts +39 -0
  222. package/dist/publication/claim.d.ts.map +1 -0
  223. package/dist/publication/claim.js +31 -0
  224. package/dist/publication/claim.js.map +1 -0
  225. package/dist/publication/coordinator.d.ts +246 -0
  226. package/dist/publication/coordinator.d.ts.map +1 -0
  227. package/dist/publication/coordinator.js +370 -0
  228. package/dist/publication/coordinator.js.map +1 -0
  229. package/dist/publication/github.d.ts +36 -0
  230. package/dist/publication/github.d.ts.map +1 -0
  231. package/dist/publication/github.js +644 -0
  232. package/dist/publication/github.js.map +1 -0
  233. package/dist/publication/http.d.ts +69 -0
  234. package/dist/publication/http.d.ts.map +1 -0
  235. package/dist/publication/http.js +29 -0
  236. package/dist/publication/http.js.map +1 -0
  237. package/dist/publication/index.d.ts +5 -0
  238. package/dist/publication/index.d.ts.map +1 -0
  239. package/dist/publication/index.js +5 -0
  240. package/dist/publication/index.js.map +1 -0
  241. package/dist/publication/npm.d.ts +40 -0
  242. package/dist/publication/npm.d.ts.map +1 -0
  243. package/dist/publication/npm.js +359 -0
  244. package/dist/publication/npm.js.map +1 -0
  245. package/dist/publication/profiles.d.ts +136 -0
  246. package/dist/publication/profiles.d.ts.map +1 -0
  247. package/dist/publication/profiles.js +90 -0
  248. package/dist/publication/profiles.js.map +1 -0
  249. package/dist/publication/publisher.d.ts +82 -0
  250. package/dist/publication/publisher.d.ts.map +1 -0
  251. package/dist/publication/publisher.js +53 -0
  252. package/dist/publication/publisher.js.map +1 -0
  253. package/dist/publication/pypi.d.ts +45 -0
  254. package/dist/publication/pypi.d.ts.map +1 -0
  255. package/dist/publication/pypi.js +369 -0
  256. package/dist/publication/pypi.js.map +1 -0
  257. package/dist/publication/recovery.d.ts +663 -0
  258. package/dist/publication/recovery.d.ts.map +1 -0
  259. package/dist/publication/recovery.js +252 -0
  260. package/dist/publication/recovery.js.map +1 -0
  261. package/dist/publication/report.d.ts +1061 -0
  262. package/dist/publication/report.d.ts.map +1 -0
  263. package/dist/publication/report.js +441 -0
  264. package/dist/publication/report.js.map +1 -0
  265. package/dist/recipes/config.d.ts +296 -0
  266. package/dist/recipes/config.d.ts.map +1 -0
  267. package/dist/recipes/config.js +325 -0
  268. package/dist/recipes/config.js.map +1 -0
  269. package/dist/release/capabilities.d.ts +12 -0
  270. package/dist/release/capabilities.d.ts.map +1 -0
  271. package/dist/release/capabilities.js +395 -0
  272. package/dist/release/capabilities.js.map +1 -0
  273. package/dist/release/compiler.d.ts +5 -0
  274. package/dist/release/compiler.d.ts.map +1 -0
  275. package/dist/release/compiler.js +19 -0
  276. package/dist/release/compiler.js.map +1 -0
  277. package/dist/release/config.d.ts +5 -0
  278. package/dist/release/config.d.ts.map +1 -0
  279. package/dist/release/config.js +10 -0
  280. package/dist/release/config.js.map +1 -0
  281. package/dist/release/context.d.ts +96 -0
  282. package/dist/release/context.d.ts.map +1 -0
  283. package/dist/release/context.js +168 -0
  284. package/dist/release/context.js.map +1 -0
  285. package/dist/release/graph.d.ts +271 -0
  286. package/dist/release/graph.d.ts.map +1 -0
  287. package/dist/release/graph.js +766 -0
  288. package/dist/release/graph.js.map +1 -0
  289. package/dist/release/inspect.d.ts +88 -0
  290. package/dist/release/inspect.d.ts.map +1 -0
  291. package/dist/release/inspect.js +75 -0
  292. package/dist/release/inspect.js.map +1 -0
  293. package/dist/release/prepare.d.ts +24 -0
  294. package/dist/release/prepare.d.ts.map +1 -0
  295. package/dist/release/prepare.js +1116 -0
  296. package/dist/release/prepare.js.map +1 -0
  297. package/dist/release/prepared-ref.d.ts +60 -0
  298. package/dist/release/prepared-ref.d.ts.map +1 -0
  299. package/dist/release/prepared-ref.js +131 -0
  300. package/dist/release/prepared-ref.js.map +1 -0
  301. package/dist/release/prepared-store.d.ts +90 -0
  302. package/dist/release/prepared-store.d.ts.map +1 -0
  303. package/dist/release/prepared-store.js +337 -0
  304. package/dist/release/prepared-store.js.map +1 -0
  305. package/dist/release/prepared.d.ts +172 -0
  306. package/dist/release/prepared.d.ts.map +1 -0
  307. package/dist/release/prepared.js +268 -0
  308. package/dist/release/prepared.js.map +1 -0
  309. package/dist/release/staging.d.ts +31 -0
  310. package/dist/release/staging.d.ts.map +1 -0
  311. package/dist/release/staging.js +218 -0
  312. package/dist/release/staging.js.map +1 -0
  313. package/dist/resolve/authored.d.ts +53 -0
  314. package/dist/resolve/authored.d.ts.map +1 -0
  315. package/dist/resolve/authored.js +55 -0
  316. package/dist/resolve/authored.js.map +1 -0
  317. package/dist/resolve/encode.d.ts +3 -0
  318. package/dist/resolve/encode.d.ts.map +1 -0
  319. package/dist/resolve/encode.js +21 -0
  320. package/dist/resolve/encode.js.map +1 -0
  321. package/dist/resolve/errors.d.ts +7 -0
  322. package/dist/resolve/errors.d.ts.map +1 -0
  323. package/dist/resolve/errors.js +17 -0
  324. package/dist/resolve/errors.js.map +1 -0
  325. package/dist/resolve/facts.d.ts +12 -0
  326. package/dist/resolve/facts.d.ts.map +1 -0
  327. package/dist/resolve/facts.js +18 -0
  328. package/dist/resolve/facts.js.map +1 -0
  329. package/dist/resolve/resolve.d.ts +10 -0
  330. package/dist/resolve/resolve.d.ts.map +1 -0
  331. package/dist/resolve/resolve.js +242 -0
  332. package/dist/resolve/resolve.js.map +1 -0
  333. package/dist/store.d.ts +11 -0
  334. package/dist/store.d.ts.map +1 -0
  335. package/dist/store.js +9 -0
  336. package/dist/store.js.map +1 -0
  337. package/examples/README.md +20 -30
  338. package/examples/github-release/release.config.json +11 -18
  339. package/examples/homebrew-tap/README.md +11 -0
  340. package/examples/homebrew-tap/release.config.json +40 -28
  341. package/examples/multi-target/release.config.json +28 -53
  342. package/examples/npm-first-publish/release.config.json +23 -25
  343. package/examples/npm-only/release.config.json +22 -30
  344. package/examples/portable-cli/README.md +17 -0
  345. package/examples/portable-cli/artifacts/portable-example-0.1.0-darwin-arm64 +1 -0
  346. package/examples/portable-cli/artifacts/portable-example-0.1.0-darwin-x64 +1 -0
  347. package/examples/portable-cli/artifacts/portable-example-0.1.0-linux-arm64 +1 -0
  348. package/examples/portable-cli/artifacts/portable-example-0.1.0-linux-x64 +1 -0
  349. package/examples/portable-cli/artifacts/portable-example-0.1.0-windows-x64.exe +1 -0
  350. package/examples/portable-cli/artifacts/portable_example-0.1.0-py3-none-macosx_10_15_x86_64.whl +1 -0
  351. package/examples/portable-cli/artifacts/portable_example-0.1.0-py3-none-macosx_11_0_arm64.whl +1 -0
  352. package/examples/portable-cli/artifacts/portable_example-0.1.0-py3-none-manylinux2014_aarch64.whl +1 -0
  353. package/examples/portable-cli/artifacts/portable_example-0.1.0-py3-none-manylinux2014_x86_64.whl +1 -0
  354. package/examples/portable-cli/artifacts/portable_example-0.1.0-py3-none-win_amd64.whl +1 -0
  355. package/examples/portable-cli/package.json +9 -0
  356. package/examples/portable-cli/release.config.json +53 -0
  357. package/examples/portable-cli/src/cli.ts +3 -0
  358. package/examples/pypi-registry/README.md +8 -0
  359. package/examples/scoop-bucket/README.md +10 -0
  360. package/examples/scoop-bucket/release.config.json +40 -30
  361. package/package.json +60 -156
  362. package/src/api/api.ts +365 -0
  363. package/src/api/errors.ts +36 -0
  364. package/src/api/input.ts +92 -0
  365. package/src/api/runtime.ts +14 -0
  366. package/src/api/types.ts +103 -0
  367. package/src/capabilities/bun-targets.ts +2 -0
  368. package/src/capabilities/field-ownership.ts +60 -0
  369. package/src/capabilities/module.ts +158 -0
  370. package/src/capabilities/registry.ts +333 -0
  371. package/src/config/config.ts +48 -0
  372. package/src/correction/coordinator.ts +336 -0
  373. package/src/correction/index.ts +2 -0
  374. package/src/correction/intent.ts +172 -0
  375. package/src/drivers/archive.ts +102 -0
  376. package/src/drivers/contain.ts +20 -0
  377. package/src/drivers/environment.ts +28 -0
  378. package/src/drivers/errors.ts +6 -0
  379. package/src/drivers/glob.ts +137 -0
  380. package/src/drivers/process.ts +340 -0
  381. package/src/drivers/redact.ts +31 -0
  382. package/src/drivers/seccomp-helper-source.ts +121 -0
  383. package/src/drivers/utils.ts +10 -0
  384. package/src/drivers/workspace.ts +40 -0
  385. package/src/extensions/provider-adapter.ts +99 -0
  386. package/src/host.ts +140 -0
  387. package/src/index.ts +64 -0
  388. package/src/model/artifact-collection.ts +237 -0
  389. package/src/model/authority.ts +116 -0
  390. package/src/model/bun-targets.ts +34 -0
  391. package/src/model/canonical.ts +205 -0
  392. package/src/model/catalog.ts +220 -0
  393. package/src/model/digest.ts +172 -0
  394. package/src/model/errors.ts +6 -0
  395. package/src/model/primitives.ts +37 -0
  396. package/src/model/pypi.ts +30 -0
  397. package/src/model/python-distribution.ts +360 -0
  398. package/src/model/secret-patterns.ts +11 -0
  399. package/src/platform/bun.ts +38 -0
  400. package/src/platform/credentials.ts +1083 -0
  401. package/src/platform/host-support.ts +4 -0
  402. package/src/platform/node.ts +38 -0
  403. package/src/platform/release-runtime.ts +47 -0
  404. package/src/platform/services.ts +57 -0
  405. package/src/platform/source-observer.ts +193 -0
  406. package/src/provider-sdk.ts +48 -0
  407. package/src/publication/adapter.ts +132 -0
  408. package/src/publication/authority.ts +397 -0
  409. package/src/publication/catalog-git.ts +603 -0
  410. package/src/publication/claim.ts +51 -0
  411. package/src/publication/coordinator.ts +578 -0
  412. package/src/publication/github.ts +954 -0
  413. package/src/publication/http.ts +101 -0
  414. package/src/publication/index.ts +4 -0
  415. package/src/publication/npm.ts +525 -0
  416. package/src/publication/profiles.ts +94 -0
  417. package/src/publication/publisher.ts +130 -0
  418. package/src/publication/pypi.ts +463 -0
  419. package/src/publication/recovery.ts +349 -0
  420. package/src/publication/report.ts +628 -0
  421. package/src/recipes/config.ts +395 -0
  422. package/src/release/capabilities.ts +459 -0
  423. package/src/release/compiler.ts +28 -0
  424. package/src/release/config.ts +12 -0
  425. package/src/release/context.ts +223 -0
  426. package/src/release/graph.ts +866 -0
  427. package/src/release/inspect.ts +83 -0
  428. package/src/release/prepare.ts +1331 -0
  429. package/src/release/prepared-ref.ts +193 -0
  430. package/src/release/prepared-store.ts +377 -0
  431. package/src/release/prepared.ts +299 -0
  432. package/src/release/staging.ts +257 -0
  433. package/src/resolve/authored.ts +64 -0
  434. package/src/resolve/encode.ts +22 -0
  435. package/src/resolve/errors.ts +15 -0
  436. package/src/resolve/facts.ts +18 -0
  437. package/src/resolve/resolve.ts +328 -0
  438. package/src/store.ts +28 -0
  439. package/templates/README.md +55 -72
  440. package/templates/bun-cli-github/README.md +7 -9
  441. package/templates/bun-cli-github/release.config.json +35 -73
  442. package/templates/github-actions/release.yml +57 -0
  443. package/templates/github-actions/reviewed-release.yml +80 -0
  444. package/templates/multi-target-homebrew/README.md +10 -0
  445. package/templates/multi-target-homebrew/release.config.json +43 -60
  446. package/templates/multi-target-scoop/README.md +10 -0
  447. package/templates/multi-target-scoop/release.config.json +43 -62
  448. package/templates/npm-github/release.config.json +25 -38
  449. package/templates/npm-github/reviewed-release.config.json +37 -0
  450. package/templates/npm-only/README.md +10 -0
  451. package/templates/npm-only/release.config.json +15 -30
  452. package/templates/portable-cli/README.md +13 -0
  453. package/templates/portable-cli/release.config.json +53 -0
  454. package/dist/artifacts/adapter.d.ts +0 -39
  455. package/dist/artifacts/adapter.d.ts.map +0 -1
  456. package/dist/artifacts/adapter.js +0 -23
  457. package/dist/artifacts/adapter.js.map +0 -1
  458. package/dist/artifacts/registry.d.ts +0 -21
  459. package/dist/artifacts/registry.d.ts.map +0 -1
  460. package/dist/artifacts/registry.js +0 -21
  461. package/dist/artifacts/registry.js.map +0 -1
  462. package/dist/config/errors.d.ts +0 -24
  463. package/dist/config/errors.d.ts.map +0 -1
  464. package/dist/config/errors.js +0 -19
  465. package/dist/config/errors.js.map +0 -1
  466. package/dist/config/load.d.ts +0 -9
  467. package/dist/config/load.d.ts.map +0 -1
  468. package/dist/config/load.js +0 -29
  469. package/dist/config/load.js.map +0 -1
  470. package/dist/config/schema.d.ts +0 -12
  471. package/dist/config/schema.d.ts.map +0 -1
  472. package/dist/config/schema.js +0 -19
  473. package/dist/config/schema.js.map +0 -1
  474. package/dist/domain/artifact.d.ts +0 -118
  475. package/dist/domain/artifact.d.ts.map +0 -1
  476. package/dist/domain/artifact.js +0 -197
  477. package/dist/domain/artifact.js.map +0 -1
  478. package/dist/domain/evidence.d.ts +0 -59
  479. package/dist/domain/evidence.d.ts.map +0 -1
  480. package/dist/domain/evidence.js +0 -51
  481. package/dist/domain/evidence.js.map +0 -1
  482. package/dist/domain/operation.d.ts +0 -143
  483. package/dist/domain/operation.d.ts.map +0 -1
  484. package/dist/domain/operation.js +0 -198
  485. package/dist/domain/operation.js.map +0 -1
  486. package/dist/domain/release.d.ts +0 -93
  487. package/dist/domain/release.d.ts.map +0 -1
  488. package/dist/domain/release.js +0 -82
  489. package/dist/domain/release.js.map +0 -1
  490. package/dist/domain/remote-state.d.ts +0 -58
  491. package/dist/domain/remote-state.d.ts.map +0 -1
  492. package/dist/domain/remote-state.js +0 -55
  493. package/dist/domain/remote-state.js.map +0 -1
  494. package/dist/domain/target.d.ts +0 -148
  495. package/dist/domain/target.d.ts.map +0 -1
  496. package/dist/domain/target.js +0 -151
  497. package/dist/domain/target.js.map +0 -1
  498. package/dist/host/host.d.ts +0 -32
  499. package/dist/host/host.d.ts.map +0 -1
  500. package/dist/host/host.js +0 -24
  501. package/dist/host/host.js.map +0 -1
  502. package/dist/host/http-live.d.ts +0 -6
  503. package/dist/host/http-live.d.ts.map +0 -1
  504. package/dist/host/http-live.js +0 -86
  505. package/dist/host/http-live.js.map +0 -1
  506. package/dist/host/http.d.ts +0 -43
  507. package/dist/host/http.d.ts.map +0 -1
  508. package/dist/host/http.js +0 -59
  509. package/dist/host/http.js.map +0 -1
  510. package/dist/host/platform.d.ts +0 -10
  511. package/dist/host/platform.d.ts.map +0 -1
  512. package/dist/host/platform.js +0 -114
  513. package/dist/host/platform.js.map +0 -1
  514. package/dist/host/test.d.ts +0 -23
  515. package/dist/host/test.d.ts.map +0 -1
  516. package/dist/host/test.js +0 -222
  517. package/dist/host/test.js.map +0 -1
  518. package/dist/internal/workspace-path.d.ts +0 -15
  519. package/dist/internal/workspace-path.d.ts.map +0 -1
  520. package/dist/internal/workspace-path.js +0 -36
  521. package/dist/internal/workspace-path.js.map +0 -1
  522. package/dist/planner/artifact-inventory.d.ts +0 -9
  523. package/dist/planner/artifact-inventory.d.ts.map +0 -1
  524. package/dist/planner/artifact-inventory.js +0 -86
  525. package/dist/planner/artifact-inventory.js.map +0 -1
  526. package/dist/planner/create-release-plan.d.ts +0 -5
  527. package/dist/planner/create-release-plan.d.ts.map +0 -1
  528. package/dist/planner/create-release-plan.js +0 -25
  529. package/dist/planner/create-release-plan.js.map +0 -1
  530. package/dist/planner/errors.d.ts +0 -67
  531. package/dist/planner/errors.d.ts.map +0 -1
  532. package/dist/planner/errors.js +0 -58
  533. package/dist/planner/errors.js.map +0 -1
  534. package/dist/planner/evidence-recorder.d.ts +0 -28
  535. package/dist/planner/evidence-recorder.d.ts.map +0 -1
  536. package/dist/planner/evidence-recorder.js +0 -362
  537. package/dist/planner/evidence-recorder.js.map +0 -1
  538. package/dist/planner/executor.d.ts +0 -58
  539. package/dist/planner/executor.d.ts.map +0 -1
  540. package/dist/planner/executor.js +0 -147
  541. package/dist/planner/executor.js.map +0 -1
  542. package/dist/planner/normalize-release.d.ts +0 -19
  543. package/dist/planner/normalize-release.d.ts.map +0 -1
  544. package/dist/planner/normalize-release.js +0 -342
  545. package/dist/planner/normalize-release.js.map +0 -1
  546. package/dist/planner/reconcile.d.ts +0 -17
  547. package/dist/planner/reconcile.d.ts.map +0 -1
  548. package/dist/planner/reconcile.js +0 -259
  549. package/dist/planner/reconcile.js.map +0 -1
  550. package/dist/planner/render-plan.d.ts +0 -15
  551. package/dist/planner/render-plan.d.ts.map +0 -1
  552. package/dist/planner/render-plan.js +0 -231
  553. package/dist/planner/render-plan.js.map +0 -1
  554. package/dist/targets/adapter-helpers.d.ts +0 -79
  555. package/dist/targets/adapter-helpers.d.ts.map +0 -1
  556. package/dist/targets/adapter-helpers.js +0 -194
  557. package/dist/targets/adapter-helpers.js.map +0 -1
  558. package/dist/targets/adapter.d.ts +0 -17
  559. package/dist/targets/adapter.d.ts.map +0 -1
  560. package/dist/targets/adapter.js +0 -2
  561. package/dist/targets/adapter.js.map +0 -1
  562. package/dist/targets/github-release.d.ts +0 -25
  563. package/dist/targets/github-release.d.ts.map +0 -1
  564. package/dist/targets/github-release.js +0 -82
  565. package/dist/targets/github-release.js.map +0 -1
  566. package/dist/targets/github.d.ts +0 -11
  567. package/dist/targets/github.d.ts.map +0 -1
  568. package/dist/targets/github.js +0 -117
  569. package/dist/targets/github.js.map +0 -1
  570. package/dist/targets/homebrew.d.ts +0 -11
  571. package/dist/targets/homebrew.d.ts.map +0 -1
  572. package/dist/targets/homebrew.js +0 -210
  573. package/dist/targets/homebrew.js.map +0 -1
  574. package/dist/targets/live.d.ts +0 -5
  575. package/dist/targets/live.d.ts.map +0 -1
  576. package/dist/targets/live.js +0 -50
  577. package/dist/targets/live.js.map +0 -1
  578. package/dist/targets/npm.d.ts +0 -10
  579. package/dist/targets/npm.d.ts.map +0 -1
  580. package/dist/targets/npm.js +0 -112
  581. package/dist/targets/npm.js.map +0 -1
  582. package/dist/targets/pypi.d.ts +0 -11
  583. package/dist/targets/pypi.d.ts.map +0 -1
  584. package/dist/targets/pypi.js +0 -141
  585. package/dist/targets/pypi.js.map +0 -1
  586. package/dist/targets/registry.d.ts +0 -25
  587. package/dist/targets/registry.d.ts.map +0 -1
  588. package/dist/targets/registry.js +0 -34
  589. package/dist/targets/registry.js.map +0 -1
  590. package/dist/targets/scoop.d.ts +0 -11
  591. package/dist/targets/scoop.d.ts.map +0 -1
  592. package/dist/targets/scoop.js +0 -88
  593. package/dist/targets/scoop.js.map +0 -1
  594. package/dist/types/effect-internal.d.ts +0 -5
  595. package/dist/types/effect-internal.d.ts.map +0 -1
  596. package/dist/types/effect-internal.js +0 -2
  597. package/dist/types/effect-internal.js.map +0 -1
  598. package/dist/workflows/config.d.ts +0 -202
  599. package/dist/workflows/config.d.ts.map +0 -1
  600. package/dist/workflows/config.js +0 -420
  601. package/dist/workflows/config.js.map +0 -1
  602. package/dist/workflows/diagnostics.d.ts +0 -62
  603. package/dist/workflows/diagnostics.d.ts.map +0 -1
  604. package/dist/workflows/diagnostics.js +0 -530
  605. package/dist/workflows/diagnostics.js.map +0 -1
  606. package/dist/workflows/distribution.d.ts +0 -25
  607. package/dist/workflows/distribution.d.ts.map +0 -1
  608. package/dist/workflows/distribution.js +0 -24
  609. package/dist/workflows/distribution.js.map +0 -1
  610. package/dist/workflows/evidence.d.ts +0 -17
  611. package/dist/workflows/evidence.d.ts.map +0 -1
  612. package/dist/workflows/evidence.js +0 -32
  613. package/dist/workflows/evidence.js.map +0 -1
  614. package/dist/workflows/index.d.ts +0 -8
  615. package/dist/workflows/index.d.ts.map +0 -1
  616. package/dist/workflows/index.js +0 -7
  617. package/dist/workflows/index.js.map +0 -1
  618. package/dist/workflows/init.d.ts +0 -84
  619. package/dist/workflows/init.d.ts.map +0 -1
  620. package/dist/workflows/init.js +0 -487
  621. package/dist/workflows/init.js.map +0 -1
  622. package/dist/workflows/live.d.ts +0 -9
  623. package/dist/workflows/live.d.ts.map +0 -1
  624. package/dist/workflows/live.js +0 -7
  625. package/dist/workflows/live.js.map +0 -1
  626. package/dist/workflows/options.d.ts +0 -30
  627. package/dist/workflows/options.d.ts.map +0 -1
  628. package/dist/workflows/options.js +0 -16
  629. package/dist/workflows/options.js.map +0 -1
  630. package/examples/non-strict-skips/artifacts/release-example-skips-0.1.0.tgz +0 -1
  631. package/examples/non-strict-skips/release.config.json +0 -31
  632. package/examples/pypi-registry/release.config.json +0 -31
  633. package/templates/github-actions/plan-and-approved-execute.yml +0 -58
  634. package/templates/github-actions/plan-only.yml +0 -33
  635. package/templates/github-actions/trusted-publishing.yml +0 -61
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@mannyc1/ts-release",
3
- "version": "0.0.7",
3
+ "version": "0.2.2",
4
4
  "type": "module",
5
5
  "packageManager": "bun@1.3.14",
6
- "description": "Portable artifact and package-manager distribution planning for TypeScript projects.",
6
+ "description": "Prepare, publish, observe, and safely resume npm, PyPI, GitHub, Homebrew, and Scoop releases.",
7
7
  "license": "MIT",
8
8
  "repository": {
9
9
  "type": "git",
@@ -28,201 +28,105 @@
28
28
  "apps/*"
29
29
  ],
30
30
  "engines": {
31
- "bun": ">=1.3.14"
31
+ "bun": ">=1.3.14",
32
+ "node": "^22.22.2 || ^24.15.0 || >=26.0.0"
33
+ },
34
+ "bin": {
35
+ "ts-release": "./dist/bin/ts-release.js"
32
36
  },
33
37
  "exports": {
34
38
  ".": {
35
39
  "types": "./dist/index.d.ts",
36
40
  "default": "./dist/index.js"
37
41
  },
38
- "./artifacts/adapter": {
39
- "types": "./dist/artifacts/adapter.d.ts",
40
- "default": "./dist/artifacts/adapter.js"
41
- },
42
- "./artifacts/registry": {
43
- "types": "./dist/artifacts/registry.d.ts",
44
- "default": "./dist/artifacts/registry.js"
45
- },
46
- "./config/errors": {
47
- "types": "./dist/config/errors.d.ts",
48
- "default": "./dist/config/errors.js"
49
- },
50
- "./config/load": {
51
- "types": "./dist/config/load.d.ts",
52
- "default": "./dist/config/load.js"
53
- },
54
- "./config/schema": {
55
- "types": "./dist/config/schema.d.ts",
56
- "default": "./dist/config/schema.js"
42
+ "./node": {
43
+ "types": "./dist/platform/node.d.ts",
44
+ "default": "./dist/platform/node.js"
57
45
  },
58
- "./domain/artifact": {
59
- "types": "./dist/domain/artifact.d.ts",
60
- "default": "./dist/domain/artifact.js"
46
+ "./bun": {
47
+ "types": "./dist/platform/bun.d.ts",
48
+ "default": "./dist/platform/bun.js"
61
49
  },
62
- "./domain/evidence": {
63
- "types": "./dist/domain/evidence.d.ts",
64
- "default": "./dist/domain/evidence.js"
65
- },
66
- "./domain/operation": {
67
- "types": "./dist/domain/operation.d.ts",
68
- "default": "./dist/domain/operation.js"
69
- },
70
- "./domain/release": {
71
- "types": "./dist/domain/release.d.ts",
72
- "default": "./dist/domain/release.js"
73
- },
74
- "./domain/target": {
75
- "types": "./dist/domain/target.d.ts",
76
- "default": "./dist/domain/target.js"
50
+ "./store": {
51
+ "types": "./dist/store.d.ts",
52
+ "default": "./dist/store.js"
77
53
  },
78
54
  "./host": {
79
- "types": "./dist/host/host.d.ts",
80
- "default": "./dist/host/host.js"
81
- },
82
- "./host/http": {
83
- "types": "./dist/host/http.d.ts",
84
- "default": "./dist/host/http.js"
85
- },
86
- "./host/http-live": {
87
- "types": "./dist/host/http-live.d.ts",
88
- "default": "./dist/host/http-live.js"
89
- },
90
- "./host/platform": {
91
- "types": "./dist/host/platform.d.ts",
92
- "default": "./dist/host/platform.js"
93
- },
94
- "./host/test": {
95
- "types": "./dist/host/test.d.ts",
96
- "default": "./dist/host/test.js"
97
- },
98
- "./planner/create-release-plan": {
99
- "types": "./dist/planner/create-release-plan.d.ts",
100
- "default": "./dist/planner/create-release-plan.js"
101
- },
102
- "./planner/errors": {
103
- "types": "./dist/planner/errors.d.ts",
104
- "default": "./dist/planner/errors.js"
105
- },
106
- "./planner/evidence-recorder": {
107
- "types": "./dist/planner/evidence-recorder.d.ts",
108
- "default": "./dist/planner/evidence-recorder.js"
109
- },
110
- "./planner/executor": {
111
- "types": "./dist/planner/executor.d.ts",
112
- "default": "./dist/planner/executor.js"
113
- },
114
- "./planner/normalize-release": {
115
- "types": "./dist/planner/normalize-release.d.ts",
116
- "default": "./dist/planner/normalize-release.js"
117
- },
118
- "./planner/render-plan": {
119
- "types": "./dist/planner/render-plan.d.ts",
120
- "default": "./dist/planner/render-plan.js"
55
+ "types": "./dist/host.d.ts",
56
+ "default": "./dist/host.js"
121
57
  },
122
- "./targets/adapter": {
123
- "types": "./dist/targets/adapter.d.ts",
124
- "default": "./dist/targets/adapter.js"
125
- },
126
- "./targets/github": {
127
- "types": "./dist/targets/github.d.ts",
128
- "default": "./dist/targets/github.js"
129
- },
130
- "./targets/homebrew": {
131
- "types": "./dist/targets/homebrew.d.ts",
132
- "default": "./dist/targets/homebrew.js"
133
- },
134
- "./targets/live": {
135
- "types": "./dist/targets/live.d.ts",
136
- "default": "./dist/targets/live.js"
137
- },
138
- "./targets/npm": {
139
- "types": "./dist/targets/npm.d.ts",
140
- "default": "./dist/targets/npm.js"
141
- },
142
- "./targets/pypi": {
143
- "types": "./dist/targets/pypi.d.ts",
144
- "default": "./dist/targets/pypi.js"
145
- },
146
- "./targets/registry": {
147
- "types": "./dist/targets/registry.d.ts",
148
- "default": "./dist/targets/registry.js"
149
- },
150
- "./targets/scoop": {
151
- "types": "./dist/targets/scoop.d.ts",
152
- "default": "./dist/targets/scoop.js"
153
- },
154
- "./workflows": {
155
- "types": "./dist/workflows/index.d.ts",
156
- "default": "./dist/workflows/index.js"
157
- },
158
- "./workflows/config": {
159
- "types": "./dist/workflows/config.d.ts",
160
- "default": "./dist/workflows/config.js"
161
- },
162
- "./workflows/evidence": {
163
- "types": "./dist/workflows/evidence.d.ts",
164
- "default": "./dist/workflows/evidence.js"
165
- },
166
- "./workflows/diagnostics": {
167
- "types": "./dist/workflows/diagnostics.d.ts",
168
- "default": "./dist/workflows/diagnostics.js"
169
- },
170
- "./workflows/distribution": {
171
- "types": "./dist/workflows/distribution.d.ts",
172
- "default": "./dist/workflows/distribution.js"
173
- },
174
- "./workflows/init": {
175
- "types": "./dist/workflows/init.d.ts",
176
- "default": "./dist/workflows/init.js"
177
- },
178
- "./workflows/live": {
179
- "types": "./dist/workflows/live.d.ts",
180
- "default": "./dist/workflows/live.js"
58
+ "./provider-sdk": {
59
+ "types": "./dist/provider-sdk.d.ts",
60
+ "default": "./dist/provider-sdk.js"
181
61
  }
182
62
  },
183
63
  "files": [
184
64
  "ARCHITECTURE.md",
65
+ "CHANGELOG.md",
66
+ "apps/release-ts/src",
185
67
  "dist",
186
68
  "examples",
69
+ "apps/ts-release-agents",
70
+ "src",
187
71
  "templates",
188
72
  "SPEC.md",
189
73
  "README.md"
190
74
  ],
191
75
  "scripts": {
192
76
  "check": "tsc --noEmit",
193
- "build": "bun run scripts/clean-dist.ts && tsc -p tsconfig.build.json",
77
+ "build": "bun -e \"await (await import('node:fs/promises')).rm('dist', { recursive: true, force: true })\" && tsc -p tsconfig.build.json && bun run scripts/build-cli-bundle.ts",
194
78
  "test": "bun test",
195
- "test:integration:tools": "RELEASE_INTEGRATION_TOOLS=1 bun test integration-tools.test.ts",
196
- "test:integration:github": "RELEASE_INTEGRATION_TOOLS=1 RELEASE_INTEGRATION_GITHUB=1 bun test integration-tools.test.ts",
197
79
  "test:coverage": "bun test --coverage",
198
80
  "check:package-exports": "bun run scripts/check-package-exports.ts",
199
- "check:effect-imports": "bun run scripts/check-effect-imports.ts",
81
+ "check:packed-consumers": "bun run scripts/check-packed-consumers.ts",
82
+ "check:import-rules": "bun run scripts/check-import-rules.ts",
200
83
  "check:tree-shaking": "bun run scripts/check-tree-shaking.ts",
201
84
  "check:examples": "bun run scripts/check-examples.ts",
202
85
  "check:readme": "bun run scripts/check-readme.ts",
203
- "check:self-release-config": "bun run apps/release-ts/scripts/check-self-release-config.ts",
204
- "check:self-release-ci": "bun run cli check-ci --config apps/release-ts/release.config.json --workflow .github/workflows/release.yml --format text",
205
- "check:self-release-live": "bun run apps/release-ts/scripts/check-self-release-live-readiness.ts",
86
+ "check:self-release-context": "bun run apps/release-ts/scripts/check-self-release-context.ts",
87
+ "check:self-release-prepare": "bun run apps/release-ts/scripts/check-self-release-prepare.ts",
88
+ "check:self-release-reproducibility": "bun run apps/release-ts/scripts/check-self-release-reproducibility.ts",
89
+ "check:self-release-readiness": "bun run apps/release-ts/scripts/check-self-release-readiness.ts",
206
90
  "check:self-release-artifacts": "bun run apps/release-ts/scripts/check-self-release-artifacts.ts",
91
+ "check:self-release-correction": "bun run apps/release-ts/scripts/check-self-release-correction.ts",
207
92
  "check:action-bundle": "bun run scripts/check-action-bundle.ts",
208
- "check:core": "bun run check && bun test && bun audit && bun run check:effect-imports && bun run check:tree-shaking && bun run build && bun run check:examples && bun run check:readme && bun run check:package-exports",
209
- "check:app": "bun run --cwd apps/release-ts check && bun test test/cli-command.test.ts",
210
- "check:action": "bun run --cwd apps/ts-release-action check && bun run check:action-bundle && bun test test/action-command.test.ts",
211
- "check:portable": "bun run check:core && bun run check:app && bun run check:action",
212
- "check:release": "bun run check:self-release-config && bun run check:self-release-ci && bun run check:portable",
213
- "release:artifacts": "bun run cli stage-artifacts --config apps/release-ts/release.config.json --format text",
214
- "release:catalogs": "bun run cli render --config apps/release-ts/release.config.json --execute",
93
+ "check:cli-bundle": "bun run scripts/check-cli-bundle.ts",
94
+ "check:config-schema": "bun run scripts/check-config-schema.ts",
95
+ "check:capabilities": "bun run scripts/check-capabilities.ts",
96
+ "check:recovery-docs": "bun run scripts/check-recovery-docs.ts",
97
+ "check:feature-translation": "bun run scripts/check-feature-translation.ts",
98
+ "generate:capabilities": "bun run scripts/generate-capabilities.ts",
99
+ "generate:recovery-docs": "bun run scripts/generate-recovery-docs.ts",
100
+ "generate:config-schema": "bun run scripts/generate-config-schema.ts",
101
+ "build:agents": "bun run apps/ts-release-agents/src/build.ts",
102
+ "check:agents": "bun run --cwd apps/ts-release-agents check && bun run --cwd apps/ts-release-agents build && bun run --cwd apps/ts-release-agents check:generated && bun test ./apps/ts-release-agents/test/contract.test.ts",
103
+ "check:core": "bun run check:versions && bun run check:capabilities && bun run check:recovery-docs && bun run check:feature-translation && bun run check:import-rules && bun run check:tree-shaking && bun run check && bun test && bun run build && bun run check:cli-bundle && bun run check:config-schema && bun run check:examples && bun run check:readme && bun run check:package-exports && bun run check:packed-consumers",
104
+ "check:versions": "bun run scripts/check-versions.ts",
105
+ "check:summary": "bun run scripts/run-gates.ts",
106
+ "measure:release-candidate": "bun run scripts/measure-release-candidate.ts",
107
+ "replay:provider-reads": "bun run scripts/replay-provider-reads.ts",
108
+ "check:app": "bun run --cwd apps/release-ts check && bun test test/core/cli-cutover.test.ts test/cli-command.test.ts",
109
+ "check:action": "bun run --cwd apps/ts-release-action check && bun run check:action-bundle && bun test test/core/action-cutover.test.ts test/action-command.test.ts test/action-launcher.test.ts test/action-artifact-bridge.test.ts",
110
+ "check:portable": "bun run check:core && bun run check:agents && bun run check:app && bun run check:action",
111
+ "check:release-candidate": "bun run build && bun run check:self-release-context && bun run check:self-release-prepare && bun run check:self-release-reproducibility && bun run check:self-release-readiness && bun run check:self-release-artifacts && bun run check:self-release-correction && bun run check:portable",
215
112
  "cli": "bun run apps/release-ts/src/cli/main.ts"
216
113
  },
217
114
  "dependencies": {
218
- "effect": "4.0.0-beta.83",
115
+ "@effect/platform-node-shared": "4.0.0-beta.83",
219
116
  "semver": "^7.8.5"
220
117
  },
118
+ "peerDependencies": {
119
+ "@effect/platform-bun": "4.0.0-beta.83",
120
+ "@effect/platform-node": "4.0.0-beta.83",
121
+ "effect": "4.0.0-beta.83"
122
+ },
221
123
  "devDependencies": {
222
124
  "@effect/bun-test": "file:vendor/effect-bun-test",
223
125
  "@effect/platform-bun": "4.0.0-beta.83",
126
+ "@effect/platform-node": "4.0.0-beta.83",
224
127
  "@types/bun": "^1.3.14",
225
128
  "@types/semver": "^7.7.1",
129
+ "effect": "4.0.0-beta.83",
226
130
  "bun-types": "^1.3.14",
227
131
  "typescript": "^6.0.3"
228
132
  }
package/src/api/api.ts ADDED
@@ -0,0 +1,365 @@
1
+ import * as Cause from "effect/Cause"
2
+ import * as Effect from "effect/Effect"
3
+ import * as ManagedRuntime from "effect/ManagedRuntime"
4
+ import { decodeConfig } from "../config/config.js"
5
+ import { releaseIdentityCapability } from "../capabilities/registry.js"
6
+ import { secretPatterns } from "../model/secret-patterns.js"
7
+ import { CredentialProvider } from "../publication/authority.js"
8
+ import { AuthorizedMutationHttp, HttpAuthorizer } from "../publication/http.js"
9
+ import { bindAuthoredCorrection, correctPreparedRelease } from "../correction/coordinator.js"
10
+ import { NonEmptyName, SafeRelativePath, Version, WorkspaceRoot } from "../model/primitives.js"
11
+ import {
12
+ observePreparedRelease,
13
+ publishPreparedRelease
14
+ } from "../publication/adapter.js"
15
+ import { SafeReason } from "../publication/report.js"
16
+ import { compileReleaseGraph } from "../release/compiler.js"
17
+ import type { VerifiedReleaseContext } from "../release/context.js"
18
+ import { inspectPreparedRelease, inspectRelease } from "../release/inspect.js"
19
+ import { prepareRelease } from "../release/prepare.js"
20
+ import { PreparationError } from "../release/prepare.js"
21
+ import type { CompletePreparedReleaseRef } from "../release/prepared-ref.js"
22
+ import {
23
+ PreparedReleaseStore,
24
+ type CommittedPreparedRelease
25
+ } from "../release/prepared-store.js"
26
+ import { ObservedFacts } from "../resolve/facts.js"
27
+ import {
28
+ PreparationModeUnsupported,
29
+ ReleaseAbortedError,
30
+ ReleaseInputError,
31
+ ReleasePreparationError
32
+ } from "./errors.js"
33
+ import {
34
+ decodeCorrectInput,
35
+ decodeInspectInput,
36
+ decodeObserveInput,
37
+ decodePrepareInput,
38
+ decodePublishInput,
39
+ decodeReleaseInput,
40
+ workspaceRoot
41
+ } from "./input.js"
42
+ import { ReleaseRuntime } from "./runtime.js"
43
+ import {
44
+ CorrectionReport,
45
+ type CorrectInput,
46
+ type InspectInput,
47
+ type ObserveInput,
48
+ type PrepareInput,
49
+ type PublishInput,
50
+ type ReleaseApi,
51
+ type ReleaseApiLayer,
52
+ type ReleaseApiOptions,
53
+ type ReleaseApiServices,
54
+ type ReleaseInput
55
+ } from "./types.js"
56
+
57
+ export type {
58
+ CorrectInput,
59
+ InspectInput,
60
+ ObserveInput,
61
+ PrepareInput,
62
+ PublishInput,
63
+ ReleaseApi,
64
+ ReleaseApiLayer,
65
+ ReleaseApiOptions,
66
+ ReleaseInput
67
+ } from "./types.js"
68
+ export { CorrectionReport } from "./types.js"
69
+ export { ReleaseInputError } from "./errors.js"
70
+ export { ReleaseRuntime } from "./runtime.js"
71
+
72
+ const safeFailure = (failure: unknown, fallback: string): string => {
73
+ const value = typeof failure === "object" && failure !== null &&
74
+ "reason" in failure && typeof failure.reason === "string"
75
+ ? failure.reason
76
+ : failure instanceof Error
77
+ ? failure.message
78
+ : typeof failure === "string"
79
+ ? failure
80
+ : fallback
81
+ const normalized = [...value]
82
+ .map((character) => {
83
+ const codePoint = character.codePointAt(0) ?? 0
84
+ return codePoint === 9 || codePoint === 10 || codePoint === 13 || codePoint >= 0x20
85
+ ? character
86
+ : "?"
87
+ })
88
+ .slice(0, 2048)
89
+ .join("")
90
+ return normalized.length === 0 || secretPatterns.some((pattern) => pattern.test(normalized))
91
+ ? fallback
92
+ : normalized
93
+ }
94
+
95
+ const inputFailure = (cause: unknown): ReleaseInputError => new ReleaseInputError({
96
+ reason: safeFailure(cause, "Release input is invalid.")
97
+ })
98
+
99
+ const manifestPath = (config: {
100
+ readonly npmPackage?: { readonly path?: SafeRelativePath }
101
+ }): SafeRelativePath => {
102
+ const directory = String(config.npmPackage?.path ?? ".")
103
+ return SafeRelativePath.make(directory === "." ? "package.json" : `${directory}/package.json`)
104
+ }
105
+
106
+ const releaseTagVersion = (
107
+ tags: ReadonlyArray<{ toString(): string }>
108
+ ): string | undefined => {
109
+ const values = tags
110
+ .map((tag) => /^v?(\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?)$/u.exec(tag.toString())?.[1])
111
+ .filter((value): value is string => value !== undefined)
112
+ return values.length === 1 ? values[0] : undefined
113
+ }
114
+
115
+ const observeAndCompile = Effect.fn("observeAndCompileRelease")(function*(input: {
116
+ readonly config: unknown
117
+ readonly workspace: string
118
+ }) {
119
+ const runtime = yield* ReleaseRuntime
120
+ const authored = yield* decodeConfig(input.config).pipe(Effect.mapError(inputFailure))
121
+ const root = yield* Effect.try({
122
+ try: () => workspaceRoot(input.workspace),
123
+ catch: inputFailure
124
+ })
125
+ const context = yield* runtime.source.observe(
126
+ WorkspaceRoot.make(root),
127
+ manifestPath(authored)
128
+ )
129
+ const observedTagVersion = releaseTagVersion(context.source.headTags)
130
+ const facts = ObservedFacts.make({
131
+ commit: context.source.commit,
132
+ manifestName: context.package.name,
133
+ manifestVersion: context.package.version,
134
+ ...(observedTagVersion === undefined
135
+ ? {}
136
+ : { headTagVersion: Version.make(observedTagVersion) }),
137
+ ...(context.source.repository === undefined
138
+ ? {}
139
+ : { repository: context.source.repository })
140
+ })
141
+ const resolved = yield* Effect.try({
142
+ try: () => releaseIdentityCapability.resolve(input.config, facts),
143
+ catch: inputFailure
144
+ })
145
+ const graph = yield* Effect.try({
146
+ try: () => compileReleaseGraph(resolved, context),
147
+ catch: inputFailure
148
+ })
149
+ return {
150
+ context,
151
+ config: resolved,
152
+ graph
153
+ }
154
+ })
155
+
156
+ const prepareProgram = Effect.fn("prepareProgram")(function*(
157
+ input: PrepareInput,
158
+ options: { readonly allowEmpty: boolean }
159
+ ) {
160
+ const compiled = yield* observeAndCompile({
161
+ config: input.config,
162
+ workspace: input.workspace
163
+ })
164
+ if (!options.allowEmpty &&
165
+ compiled.graph.artifacts.length === 0 &&
166
+ compiled.graph.publications.length === 0) {
167
+ return yield* new ReleaseInputError({
168
+ reason: "release resolved to no artifacts and no publication subjects; use allowEmpty only for an explicit diagnostic run."
169
+ })
170
+ }
171
+ const runtime = yield* ReleaseRuntime
172
+ const store = yield* PreparedReleaseStore
173
+ const sourceWorkspace = compiled.context.workspace
174
+ return yield* prepareRelease({
175
+ context: compiled.context,
176
+ graph: compiled.graph,
177
+ store,
178
+ run: runtime.run,
179
+ materializeSource: (_context: VerifiedReleaseContext, destination) =>
180
+ runtime.source.materialize(sourceWorkspace, compiled.context.source, destination)
181
+ })
182
+ })
183
+
184
+ const loadPrepared = Effect.fn("loadPreparedForApi")(function*(
185
+ prepared: CompletePreparedReleaseRef
186
+ ) {
187
+ const store = yield* PreparedReleaseStore
188
+ return yield* store.load(prepared)
189
+ })
190
+
191
+ const safeCause = <E>(cause: Cause.Cause<E>, fallback: string): string => {
192
+ return safeFailure(Cause.squash(cause), fallback)
193
+ }
194
+
195
+ const preparationFailure = <A, E, R>(
196
+ effect: Effect.Effect<A, E, R>
197
+ ): Effect.Effect<A, ReleaseInputError | ReleasePreparationError | ReleaseAbortedError, R> => effect.pipe(
198
+ Effect.catchCause((cause): Effect.Effect<
199
+ A,
200
+ ReleaseInputError | ReleasePreparationError | ReleaseAbortedError
201
+ > => {
202
+ const failure = Cause.squash(cause)
203
+ if (failure instanceof ReleaseInputError) {
204
+ return Effect.fail<ReleaseInputError | ReleasePreparationError | ReleaseAbortedError>(failure)
205
+ }
206
+ if (failure instanceof PreparationError && failure.prepared !== undefined) {
207
+ return Effect.fail(new ReleaseAbortedError({
208
+ prepared: failure.prepared,
209
+ cause: safeCause(cause, "The durable prepared reference could not be handed to the host.")
210
+ }))
211
+ }
212
+ return Effect.fail(new ReleasePreparationError({
213
+ cause: safeCause(cause, "Release preparation failed before a durable prepared reference was committed.")
214
+ }))
215
+ })
216
+ )
217
+
218
+ const afterCommitFailure = <A, E, R>(
219
+ prepared: CompletePreparedReleaseRef,
220
+ effect: Effect.Effect<A, E, R>
221
+ ): Effect.Effect<A, ReleaseAbortedError, R> => effect.pipe(
222
+ Effect.catchCause((cause) => Effect.fail(new ReleaseAbortedError({
223
+ prepared,
224
+ cause: safeCause(cause, "The release operation stopped before a total report was available.")
225
+ })))
226
+ )
227
+
228
+ const observeProgram = (
229
+ prepared: CompletePreparedReleaseRef,
230
+ adapters: NonNullable<ReleaseApiOptions["providerAdapters"]>
231
+ ) => afterCommitFailure(
232
+ prepared,
233
+ loadPrepared(prepared).pipe(Effect.flatMap((bundle) => observePreparedRelease(bundle, adapters)))
234
+ )
235
+
236
+ const publishCommitted = Effect.fn("publishCommittedRelease")(function*(
237
+ committed: CommittedPreparedRelease,
238
+ adapters: NonNullable<ReleaseApiOptions["providerAdapters"]>
239
+ ) {
240
+ const report = yield* publishPreparedRelease(committed.bundle, adapters)
241
+ return { prepared: committed.ref, report }
242
+ })
243
+
244
+ const publishProgram = Effect.fn("publishProgram")(function*(
245
+ prepared: CompletePreparedReleaseRef,
246
+ adapters: NonNullable<ReleaseApiOptions["providerAdapters"]>
247
+ ) {
248
+ const result = yield* afterCommitFailure(
249
+ prepared,
250
+ loadPrepared(prepared).pipe(
251
+ Effect.flatMap((bundle) => publishCommitted({ ref: prepared, bundle }, adapters))
252
+ )
253
+ )
254
+ return result.report
255
+ })
256
+
257
+ const releaseProgram = Effect.fn("releaseProgram")(function*(
258
+ input: ReleaseInput,
259
+ adapters: NonNullable<ReleaseApiOptions["providerAdapters"]>
260
+ ) {
261
+ const committed = yield* preparationFailure(prepareProgram(input, {
262
+ allowEmpty: input.allowEmpty === true
263
+ }))
264
+ return yield* afterCommitFailure(committed.ref, publishCommitted(committed, adapters))
265
+ })
266
+
267
+ const correctProgram = Effect.fn("correctProgram")(function*(input: CorrectInput) {
268
+ const bundle = yield* loadPrepared(input.prepared)
269
+ const credentials = yield* CredentialProvider
270
+ const http = yield* HttpAuthorizer
271
+ const mutationHttp = yield* AuthorizedMutationHttp
272
+ const outcome = yield* Effect.try({
273
+ try: () => bindAuthoredCorrection(bundle, input.correction),
274
+ catch: inputFailure
275
+ }).pipe(Effect.flatMap((intent) => correctPreparedRelease({
276
+ bundle,
277
+ intent,
278
+ services: { credentials, http, mutationHttp }
279
+ })))
280
+ if (outcome._tag === "CorrectionExecuted") return new CorrectionReport({
281
+ prepared: input.prepared,
282
+ status: outcome.report.status,
283
+ provider: outcome.provider,
284
+ reason: SafeReason.make("Catalog correction completed through the exact conditional Git-data subject report."),
285
+ proposal: "",
286
+ report: outcome.report
287
+ })
288
+ return new CorrectionReport({
289
+ prepared: input.prepared,
290
+ status: "unsupported",
291
+ provider: outcome.provider,
292
+ reason: SafeReason.make(outcome.reason),
293
+ proposal: outcome.proposal ?? ""
294
+ })
295
+ })
296
+
297
+ export const makeReleaseApi = (layer: ReleaseApiLayer, options: ReleaseApiOptions = {}): ReleaseApi => {
298
+ const runtime = ManagedRuntime.make(layer)
299
+ const adapters = options.providerAdapters ?? []
300
+ const run = <A, E>(effect: Effect.Effect<A, E, ReleaseApiServices>): Promise<A> =>
301
+ runtime.runPromise(effect)
302
+
303
+ const inspect = async (value: InspectInput) => {
304
+ const input = decodeInspectInput(value)
305
+ if ("prepared" in input) {
306
+ return inspectPreparedRelease(await run(afterCommitFailure(
307
+ input.prepared,
308
+ loadPrepared(input.prepared)
309
+ )))
310
+ }
311
+ const compiled = await run(observeAndCompile({
312
+ config: input.config,
313
+ workspace: input.workspace
314
+ }))
315
+ return inspectRelease(compiled.context, compiled.graph)
316
+ }
317
+
318
+ const prepare = async (value: PrepareInput) => {
319
+ const input = decodePrepareInput(value)
320
+ const committed = await run(preparationFailure(prepareProgram(input, { allowEmpty: true })))
321
+ return committed.ref
322
+ }
323
+
324
+ const observe = async (value: ObserveInput) => {
325
+ const input = decodeObserveInput(value)
326
+ return run(observeProgram(input.prepared, adapters))
327
+ }
328
+
329
+ const publish = async (value: PublishInput) => {
330
+ const input = decodePublishInput(value)
331
+ return run(publishProgram(input.prepared, adapters))
332
+ }
333
+
334
+ const release = async (value: ReleaseInput) => {
335
+ const input = decodeReleaseInput(value)
336
+ return run(releaseProgram(input, adapters))
337
+ }
338
+
339
+ const correct = async (value: CorrectInput) => {
340
+ const input = decodeCorrectInput(value)
341
+ return run(afterCommitFailure(input.prepared, correctProgram(input)))
342
+ }
343
+
344
+ return Object.freeze({
345
+ inspect,
346
+ prepare,
347
+ observe,
348
+ publish,
349
+ release,
350
+ correct,
351
+ dispose: () => runtime.dispose()
352
+ })
353
+ }
354
+
355
+ export const makeDefaultReleaseApi = (layer: ReleaseApiLayer): ReleaseApi =>
356
+ makeReleaseApi(layer)
357
+
358
+ import { NodeReleaseLayer } from "../platform/node.js"
359
+ const defaultApi = makeReleaseApi(NodeReleaseLayer)
360
+ export const inspect = defaultApi.inspect
361
+ export const prepare = defaultApi.prepare
362
+ export const observe = defaultApi.observe
363
+ export const publish = defaultApi.publish
364
+ export const release = defaultApi.release
365
+ export const correct = defaultApi.correct
@@ -0,0 +1,36 @@
1
+ import * as Schema from "effect/Schema"
2
+ import { CompletePreparedReleaseRef } from "../release/prepared-ref.js"
3
+
4
+ export class ReleaseInputError
5
+ extends Schema.TaggedErrorClass<ReleaseInputError>()("ReleaseInputError", { reason: Schema.String }) {}
6
+
7
+ /**
8
+ * Cross-host preparation is deliberately reserved for plan 235. Recognizing
9
+ * these two tags before strict input decoding gives callers an actionable,
10
+ * typed refusal without publishing a partial-bundle shape prematurely.
11
+ */
12
+ export class PreparationModeUnsupported
13
+ extends Schema.TaggedErrorClass<PreparationModeUnsupported>()("PreparationModeUnsupported", {
14
+ mode: Schema.Literals(["partition", "merge"]),
15
+ owner: Schema.Literal("plan-235"),
16
+ reason: Schema.String
17
+ }) {}
18
+
19
+ export class ReleasePreparationError
20
+ extends Schema.TaggedErrorClass<ReleasePreparationError>()("ReleasePreparationError", {
21
+ cause: Schema.String
22
+ }) {}
23
+
24
+ export class ReleaseAbortedError
25
+ extends Schema.TaggedErrorClass<ReleaseAbortedError>()("ReleaseAbortedError", {
26
+ prepared: Schema.optionalKey(CompletePreparedReleaseRef),
27
+ cause: Schema.String
28
+ }) {}
29
+
30
+ /** Product-boundary failure after a truthful total report has been emitted. */
31
+ export class ReleaseIncompleteError
32
+ extends Schema.TaggedErrorClass<ReleaseIncompleteError>()("ReleaseIncompleteError", {
33
+ prepared: CompletePreparedReleaseRef,
34
+ status: Schema.Literals(["blocked", "uncertain"]),
35
+ reason: Schema.String
36
+ }) {}