@msn-control/liftoff 0.10.4 → 0.11.1

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 (643) hide show
  1. package/DEVELOPER.md +220 -77
  2. package/README.md +28 -28
  3. package/assets/supported-stack.json +3 -136
  4. package/dist/adapters/azure/governance-assessment.d.ts +2 -0
  5. package/dist/adapters/azure/governance-assessment.js +21 -0
  6. package/dist/adapters/azure/governance-assessment.js.map +1 -0
  7. package/dist/adapters/filesystem/atomic-write.d.ts +2 -0
  8. package/dist/adapters/filesystem/atomic-write.js +74 -0
  9. package/dist/adapters/filesystem/atomic-write.js.map +1 -0
  10. package/dist/adapters/filesystem/errors.d.ts +2 -0
  11. package/dist/adapters/filesystem/errors.js +8 -0
  12. package/dist/adapters/filesystem/errors.js.map +1 -0
  13. package/dist/adapters/filesystem/manifest-file.d.ts +1 -0
  14. package/dist/adapters/filesystem/manifest-file.js +21 -0
  15. package/dist/adapters/filesystem/manifest-file.js.map +1 -0
  16. package/dist/adapters/filesystem/project-config.d.ts +4 -0
  17. package/dist/adapters/filesystem/project-config.js +157 -0
  18. package/dist/adapters/filesystem/project-config.js.map +1 -0
  19. package/dist/adapters/filesystem/project-discovery.d.ts +2 -0
  20. package/dist/adapters/filesystem/project-discovery.js +30 -0
  21. package/dist/adapters/filesystem/project-discovery.js.map +1 -0
  22. package/dist/adapters/filesystem/project-files.d.ts +6 -0
  23. package/dist/adapters/filesystem/project-files.js +68 -0
  24. package/dist/adapters/filesystem/project-files.js.map +1 -0
  25. package/dist/adapters/filesystem/project-lock.d.ts +8 -0
  26. package/dist/adapters/filesystem/project-lock.js +164 -0
  27. package/dist/adapters/filesystem/project-lock.js.map +1 -0
  28. package/dist/adapters/filesystem/project-paths.d.ts +2 -0
  29. package/dist/adapters/filesystem/project-paths.js +60 -0
  30. package/dist/adapters/filesystem/project-paths.js.map +1 -0
  31. package/dist/adapters/filesystem/project-transaction.d.ts +23 -0
  32. package/dist/adapters/filesystem/project-transaction.js +158 -0
  33. package/dist/adapters/filesystem/project-transaction.js.map +1 -0
  34. package/dist/adapters/git/governance-assessment.d.ts +22 -0
  35. package/dist/adapters/git/governance-assessment.js +161 -0
  36. package/dist/adapters/git/governance-assessment.js.map +1 -0
  37. package/dist/adapters/github/governance-assessment.d.ts +2 -0
  38. package/dist/adapters/github/governance-assessment.js +18 -0
  39. package/dist/adapters/github/governance-assessment.js.map +1 -0
  40. package/dist/adapters/packaged-assets/package-root.d.ts +3 -0
  41. package/dist/adapters/packaged-assets/package-root.js +21 -0
  42. package/dist/adapters/packaged-assets/package-root.js.map +1 -0
  43. package/dist/adapters/packaged-assets/supported-stack.d.ts +4 -0
  44. package/dist/adapters/packaged-assets/supported-stack.js +18 -0
  45. package/dist/adapters/packaged-assets/supported-stack.js.map +1 -0
  46. package/dist/adapters/packaged-assets/template-assets.d.ts +23 -0
  47. package/dist/adapters/packaged-assets/template-assets.js +36 -0
  48. package/dist/adapters/packaged-assets/template-assets.js.map +1 -0
  49. package/dist/adapters/process/shell-command.d.ts +5 -0
  50. package/dist/adapters/process/shell-command.js +21 -0
  51. package/dist/adapters/process/shell-command.js.map +1 -0
  52. package/dist/application/context.d.ts +20 -0
  53. package/dist/application/context.js +2 -0
  54. package/dist/application/context.js.map +1 -0
  55. package/dist/application/diagnose/doctor.d.ts +21 -0
  56. package/dist/application/diagnose/doctor.js +586 -0
  57. package/dist/application/diagnose/doctor.js.map +1 -0
  58. package/dist/application/diagnose/generated-project.d.ts +1 -0
  59. package/dist/application/diagnose/generated-project.js +105 -0
  60. package/dist/application/diagnose/generated-project.js.map +1 -0
  61. package/dist/application/diagnose/validate.d.ts +6 -0
  62. package/dist/application/diagnose/validate.js +27 -0
  63. package/dist/application/diagnose/validate.js.map +1 -0
  64. package/dist/application/initialize/fixture.d.ts +2 -0
  65. package/dist/application/initialize/fixture.js +39 -0
  66. package/dist/application/initialize/fixture.js.map +1 -0
  67. package/dist/application/initialize/inputs.d.ts +3 -0
  68. package/dist/application/initialize/inputs.js +35 -0
  69. package/dist/application/initialize/inputs.js.map +1 -0
  70. package/dist/application/initialize/use-case.d.ts +23 -0
  71. package/dist/application/initialize/use-case.js +360 -0
  72. package/dist/application/initialize/use-case.js.map +1 -0
  73. package/dist/application/migrate/use-case.d.ts +7 -0
  74. package/dist/application/migrate/use-case.js +378 -0
  75. package/dist/application/migrate/use-case.js.map +1 -0
  76. package/dist/application/project/catalog.d.ts +46 -0
  77. package/dist/application/project/catalog.js +12 -0
  78. package/dist/application/project/catalog.js.map +1 -0
  79. package/dist/application/project/manifest.d.ts +2 -0
  80. package/dist/application/project/manifest.js +29 -0
  81. package/dist/application/project/manifest.js.map +1 -0
  82. package/dist/application/project/planning.d.ts +6 -0
  83. package/dist/application/project/planning.js +12 -0
  84. package/dist/application/project/planning.js.map +1 -0
  85. package/dist/application/update/planning.d.ts +40 -0
  86. package/dist/application/update/planning.js +293 -0
  87. package/dist/application/update/planning.js.map +1 -0
  88. package/dist/application/update/reporting.d.ts +42 -0
  89. package/dist/application/update/reporting.js +325 -0
  90. package/dist/application/update/reporting.js.map +1 -0
  91. package/dist/application/update/use-case.d.ts +8 -0
  92. package/dist/application/update/use-case.js +600 -0
  93. package/dist/application/update/use-case.js.map +1 -0
  94. package/dist/application/upgrade/use-case.d.ts +6 -0
  95. package/dist/application/upgrade/use-case.js +82 -0
  96. package/dist/application/upgrade/use-case.js.map +1 -0
  97. package/dist/args.d.ts +5 -65
  98. package/dist/args.js +4 -472
  99. package/dist/args.js.map +1 -1
  100. package/dist/artifact-lifecycle.d.ts +1 -21
  101. package/dist/artifact-lifecycle.js +1 -75
  102. package/dist/artifact-lifecycle.js.map +1 -1
  103. package/dist/catalogs.d.ts +1 -50
  104. package/dist/catalogs.js +1 -472
  105. package/dist/catalogs.js.map +1 -1
  106. package/dist/cli/args/contracts.d.ts +51 -0
  107. package/dist/cli/args/contracts.js +2 -0
  108. package/dist/cli/args/contracts.js.map +1 -0
  109. package/dist/cli/args/definitions.d.ts +6 -0
  110. package/dist/cli/args/definitions.js +187 -0
  111. package/dist/cli/args/definitions.js.map +1 -0
  112. package/dist/cli/args/help.d.ts +5 -0
  113. package/dist/cli/args/help.js +130 -0
  114. package/dist/cli/args/help.js.map +1 -0
  115. package/dist/cli/args/parser.d.ts +5 -0
  116. package/dist/cli/args/parser.js +145 -0
  117. package/dist/cli/args/parser.js.map +1 -0
  118. package/dist/cli/args/readers.d.ts +4 -0
  119. package/dist/cli/args/readers.js +19 -0
  120. package/dist/cli/args/readers.js.map +1 -0
  121. package/dist/cli/commands/diagnose.d.ts +4 -0
  122. package/dist/cli/commands/diagnose.js +12 -0
  123. package/dist/cli/commands/diagnose.js.map +1 -0
  124. package/dist/cli/commands/dispatch.d.ts +3 -0
  125. package/dist/cli/commands/dispatch.js +94 -0
  126. package/dist/cli/commands/dispatch.js.map +1 -0
  127. package/dist/cli/commands/help.d.ts +3 -0
  128. package/dist/cli/commands/help.js +32 -0
  129. package/dist/cli/commands/help.js.map +1 -0
  130. package/dist/cli/commands/helpers.d.ts +8 -0
  131. package/dist/cli/commands/helpers.js +97 -0
  132. package/dist/cli/commands/helpers.js.map +1 -0
  133. package/dist/cli/commands/initialize.d.ts +3 -0
  134. package/dist/cli/commands/initialize.js +7 -0
  135. package/dist/cli/commands/initialize.js.map +1 -0
  136. package/dist/cli/commands/migrate.d.ts +3 -0
  137. package/dist/cli/commands/migrate.js +8 -0
  138. package/dist/cli/commands/migrate.js.map +1 -0
  139. package/dist/cli/commands/plan.d.ts +3 -0
  140. package/dist/cli/commands/plan.js +34 -0
  141. package/dist/cli/commands/plan.js.map +1 -0
  142. package/dist/cli/commands/reference.d.ts +5 -0
  143. package/dist/cli/commands/reference.js +43 -0
  144. package/dist/cli/commands/reference.js.map +1 -0
  145. package/dist/cli/commands/update.d.ts +3 -0
  146. package/dist/cli/commands/update.js +9 -0
  147. package/dist/cli/commands/update.js.map +1 -0
  148. package/dist/cli/commands/upgrade.d.ts +3 -0
  149. package/dist/cli/commands/upgrade.js +7 -0
  150. package/dist/cli/commands/upgrade.js.map +1 -0
  151. package/dist/cli/context.d.ts +1 -0
  152. package/dist/cli/context.js +2 -0
  153. package/dist/cli/context.js.map +1 -0
  154. package/dist/cli/project-options.d.ts +3 -0
  155. package/dist/cli/project-options.js +41 -0
  156. package/dist/cli/project-options.js.map +1 -0
  157. package/dist/cli.d.ts +3 -3
  158. package/dist/cli.js +2 -2
  159. package/dist/cli.js.map +1 -1
  160. package/dist/commands.d.ts +4 -35
  161. package/dist/commands.js +3 -2969
  162. package/dist/commands.js.map +1 -1
  163. package/dist/container-validation.d.ts +1 -1
  164. package/dist/domain/governance/activation/approvals.d.ts +351 -0
  165. package/dist/domain/governance/activation/approvals.js +528 -0
  166. package/dist/domain/governance/activation/approvals.js.map +1 -0
  167. package/dist/domain/governance/activation/canonical-json.d.ts +4 -0
  168. package/dist/domain/governance/activation/canonical-json.js +39 -0
  169. package/dist/domain/governance/activation/canonical-json.js.map +1 -0
  170. package/dist/domain/governance/activation/capabilities.d.ts +7 -0
  171. package/dist/domain/governance/activation/capabilities.js +33 -0
  172. package/dist/domain/governance/activation/capabilities.js.map +1 -0
  173. package/dist/domain/governance/activation/evidence.d.ts +63 -0
  174. package/dist/domain/governance/activation/evidence.js +444 -0
  175. package/dist/domain/governance/activation/evidence.js.map +1 -0
  176. package/dist/domain/governance/activation/graph.d.ts +397 -0
  177. package/dist/domain/governance/activation/graph.js +441 -0
  178. package/dist/domain/governance/activation/graph.js.map +1 -0
  179. package/dist/domain/governance/activation/inputs.d.ts +25 -0
  180. package/dist/domain/governance/activation/inputs.js +63 -0
  181. package/dist/domain/governance/activation/inputs.js.map +1 -0
  182. package/dist/domain/governance/activation/operations.d.ts +19 -0
  183. package/dist/domain/governance/activation/operations.js +181 -0
  184. package/dist/domain/governance/activation/operations.js.map +1 -0
  185. package/dist/domain/governance/activation/readiness.d.ts +27 -0
  186. package/dist/domain/governance/activation/readiness.js +269 -0
  187. package/dist/domain/governance/activation/readiness.js.map +1 -0
  188. package/dist/domain/governance/activation/types.d.ts +399 -0
  189. package/dist/domain/governance/activation/types.js +109 -0
  190. package/dist/domain/governance/activation/types.js.map +1 -0
  191. package/dist/domain/governance/activation/validators.d.ts +22 -0
  192. package/dist/domain/governance/activation/validators.js +1347 -0
  193. package/dist/domain/governance/activation/validators.js.map +1 -0
  194. package/dist/domain/governance/assessment/catalog.d.ts +14 -0
  195. package/dist/domain/governance/assessment/catalog.js +105 -0
  196. package/dist/domain/governance/assessment/catalog.js.map +1 -0
  197. package/dist/domain/governance/assessment/errors.d.ts +10 -0
  198. package/dist/domain/governance/assessment/errors.js +22 -0
  199. package/dist/domain/governance/assessment/errors.js.map +1 -0
  200. package/dist/domain/governance/assessment/index.d.ts +8 -0
  201. package/dist/domain/governance/assessment/index.js +9 -0
  202. package/dist/domain/governance/assessment/index.js.map +1 -0
  203. package/dist/domain/governance/assessment/live-normalize.d.ts +19 -0
  204. package/dist/domain/governance/assessment/live-normalize.js +403 -0
  205. package/dist/domain/governance/assessment/live-normalize.js.map +1 -0
  206. package/dist/domain/governance/assessment/predicates.d.ts +36 -0
  207. package/dist/domain/governance/assessment/predicates.js +545 -0
  208. package/dist/domain/governance/assessment/predicates.js.map +1 -0
  209. package/dist/domain/governance/assessment/report.d.ts +23 -0
  210. package/dist/domain/governance/assessment/report.js +266 -0
  211. package/dist/domain/governance/assessment/report.js.map +1 -0
  212. package/dist/domain/governance/assessment/sanitize.d.ts +8 -0
  213. package/dist/domain/governance/assessment/sanitize.js +60 -0
  214. package/dist/domain/governance/assessment/sanitize.js.map +1 -0
  215. package/dist/domain/governance/assessment/types.d.ts +174 -0
  216. package/dist/domain/governance/assessment/types.js +13 -0
  217. package/dist/domain/governance/assessment/types.js.map +1 -0
  218. package/dist/domain/governance/assessment/yaml.d.ts +6 -0
  219. package/dist/domain/governance/assessment/yaml.js +30 -0
  220. package/dist/domain/governance/assessment/yaml.js.map +1 -0
  221. package/dist/domain/governance/policy/identity.d.ts +64 -0
  222. package/dist/domain/governance/policy/identity.js +112 -0
  223. package/dist/domain/governance/policy/identity.js.map +1 -0
  224. package/dist/domain/migration/dependencies.d.ts +7 -0
  225. package/dist/domain/migration/dependencies.js +221 -0
  226. package/dist/domain/migration/dependencies.js.map +1 -0
  227. package/dist/domain/migration/inventory.d.ts +3 -0
  228. package/dist/domain/migration/inventory.js +15 -0
  229. package/dist/domain/migration/inventory.js.map +1 -0
  230. package/dist/domain/project/artifact-lifecycle.d.ts +69 -0
  231. package/dist/domain/project/artifact-lifecycle.js +137 -0
  232. package/dist/domain/project/artifact-lifecycle.js.map +1 -0
  233. package/dist/domain/project/catalog.d.ts +48 -0
  234. package/dist/domain/project/catalog.js +507 -0
  235. package/dist/domain/project/catalog.js.map +1 -0
  236. package/dist/domain/project/contracts.d.ts +247 -0
  237. package/dist/domain/project/contracts.js +2 -0
  238. package/dist/domain/project/contracts.js.map +1 -0
  239. package/dist/domain/project/errors.d.ts +3 -0
  240. package/dist/domain/project/errors.js +7 -0
  241. package/dist/domain/project/errors.js.map +1 -0
  242. package/dist/domain/project/infrastructure-layout.d.ts +26 -0
  243. package/dist/domain/project/infrastructure-layout.js +124 -0
  244. package/dist/domain/project/infrastructure-layout.js.map +1 -0
  245. package/dist/domain/project/inputs.d.ts +21 -0
  246. package/dist/domain/project/inputs.js +41 -0
  247. package/dist/domain/project/inputs.js.map +1 -0
  248. package/dist/domain/project/manifest/artifacts.d.ts +8 -0
  249. package/dist/domain/project/manifest/artifacts.js +150 -0
  250. package/dist/domain/project/manifest/artifacts.js.map +1 -0
  251. package/dist/domain/project/manifest/context.d.ts +13 -0
  252. package/dist/domain/project/manifest/context.js +2 -0
  253. package/dist/domain/project/manifest/context.js.map +1 -0
  254. package/dist/domain/project/manifest/fields.d.ts +6 -0
  255. package/dist/domain/project/manifest/fields.js +36 -0
  256. package/dist/domain/project/manifest/fields.js.map +1 -0
  257. package/dist/domain/project/manifest/governance.d.ts +8 -0
  258. package/dist/domain/project/manifest/governance.js +161 -0
  259. package/dist/domain/project/manifest/governance.js.map +1 -0
  260. package/dist/domain/project/manifest/project-identity.d.ts +6 -0
  261. package/dist/domain/project/manifest/project-identity.js +273 -0
  262. package/dist/domain/project/manifest/project-identity.js.map +1 -0
  263. package/dist/domain/project/manifest/reader.d.ts +9 -0
  264. package/dist/domain/project/manifest/reader.js +141 -0
  265. package/dist/domain/project/manifest/reader.js.map +1 -0
  266. package/dist/domain/project/paths.d.ts +2 -0
  267. package/dist/domain/project/paths.js +29 -0
  268. package/dist/domain/project/paths.js.map +1 -0
  269. package/dist/domain/project/planning.d.ts +19 -0
  270. package/dist/domain/project/planning.js +329 -0
  271. package/dist/domain/project/planning.js.map +1 -0
  272. package/dist/domain/project/retired-workload.d.ts +4 -0
  273. package/dist/domain/project/retired-workload.js +18 -0
  274. package/dist/domain/project/retired-workload.js.map +1 -0
  275. package/dist/domain/project/supported-stack.d.ts +113 -0
  276. package/dist/domain/project/supported-stack.js +426 -0
  277. package/dist/domain/project/supported-stack.js.map +1 -0
  278. package/dist/domain/workstation/constraints.d.ts +6 -0
  279. package/dist/domain/workstation/constraints.js +8 -0
  280. package/dist/domain/workstation/constraints.js.map +1 -0
  281. package/dist/file-system.d.ts +10 -44
  282. package/dist/file-system.js +9 -1245
  283. package/dist/file-system.js.map +1 -1
  284. package/dist/framework-adapters.d.ts +1 -1
  285. package/dist/framework-validation.d.ts +1 -1
  286. package/dist/framework-validation.js +1 -1
  287. package/dist/framework-validation.js.map +1 -1
  288. package/dist/genai-templates.d.ts +2 -9
  289. package/dist/genai-templates.js +4 -5
  290. package/dist/genai-templates.js.map +1 -1
  291. package/dist/generators/common/artifacts.d.ts +6 -0
  292. package/dist/generators/common/artifacts.js +30 -0
  293. package/dist/generators/common/artifacts.js.map +1 -0
  294. package/dist/generators/common/base.d.ts +17 -0
  295. package/dist/generators/common/base.js +421 -0
  296. package/dist/generators/common/base.js.map +1 -0
  297. package/dist/generators/common/dotenv-validation.d.ts +2 -0
  298. package/dist/generators/common/dotenv-validation.js +80 -0
  299. package/dist/generators/common/dotenv-validation.js.map +1 -0
  300. package/dist/generators/common/environments.d.ts +3 -0
  301. package/dist/generators/common/environments.js +15 -0
  302. package/dist/generators/common/environments.js.map +1 -0
  303. package/dist/generators/common/frontend.d.ts +15 -0
  304. package/dist/generators/common/frontend.js +166 -0
  305. package/dist/generators/common/frontend.js.map +1 -0
  306. package/dist/generators/common/python-settings.d.ts +2 -0
  307. package/dist/generators/common/python-settings.js +70 -0
  308. package/dist/generators/common/python-settings.js.map +1 -0
  309. package/dist/generators/common/spec-workflow.d.ts +28 -0
  310. package/dist/generators/common/spec-workflow.js +567 -0
  311. package/dist/generators/common/spec-workflow.js.map +1 -0
  312. package/dist/generators/common/values.d.ts +13 -0
  313. package/dist/generators/common/values.js +16 -0
  314. package/dist/generators/common/values.js.map +1 -0
  315. package/dist/generators/containers/compose.d.ts +7 -0
  316. package/dist/generators/containers/compose.js +196 -0
  317. package/dist/generators/containers/compose.js.map +1 -0
  318. package/dist/generators/containers/context.d.ts +1 -0
  319. package/dist/generators/containers/context.js +43 -0
  320. package/dist/generators/containers/context.js.map +1 -0
  321. package/dist/generators/containers/images.d.ts +7 -0
  322. package/dist/generators/containers/images.js +119 -0
  323. package/dist/generators/containers/images.js.map +1 -0
  324. package/dist/generators/context.d.ts +42 -0
  325. package/dist/generators/context.js +38 -0
  326. package/dist/generators/context.js.map +1 -0
  327. package/dist/generators/genai/backend.d.ts +20 -0
  328. package/dist/generators/genai/backend.js +667 -0
  329. package/dist/generators/genai/backend.js.map +1 -0
  330. package/dist/generators/genai/configuration.d.ts +3 -0
  331. package/dist/generators/genai/configuration.js +43 -0
  332. package/dist/generators/genai/configuration.js.map +1 -0
  333. package/dist/generators/genai/database.d.ts +7 -0
  334. package/dist/generators/genai/database.js +71 -0
  335. package/dist/generators/genai/database.js.map +1 -0
  336. package/dist/generators/genai/functions.d.ts +15 -0
  337. package/dist/generators/genai/functions.js +156 -0
  338. package/dist/generators/genai/functions.js.map +1 -0
  339. package/dist/generators/genai/index.d.ts +8 -0
  340. package/dist/generators/genai/index.js +11 -0
  341. package/dist/generators/genai/index.js.map +1 -0
  342. package/dist/generators/genai/patterns.d.ts +9 -0
  343. package/dist/generators/genai/patterns.js +309 -0
  344. package/dist/generators/genai/patterns.js.map +1 -0
  345. package/dist/generators/infrastructure/azure.d.ts +18 -0
  346. package/dist/generators/infrastructure/azure.js +655 -0
  347. package/dist/generators/infrastructure/azure.js.map +1 -0
  348. package/dist/generators/infrastructure/names.d.ts +23 -0
  349. package/dist/generators/infrastructure/names.js +51 -0
  350. package/dist/generators/infrastructure/names.js.map +1 -0
  351. package/dist/generators/standard/configuration.d.ts +3 -0
  352. package/dist/generators/standard/configuration.js +26 -0
  353. package/dist/generators/standard/configuration.js.map +1 -0
  354. package/dist/generators/standard/go.d.ts +17 -0
  355. package/dist/generators/standard/go.js +338 -0
  356. package/dist/generators/standard/go.js.map +1 -0
  357. package/dist/generators/standard/index.d.ts +12 -0
  358. package/dist/generators/standard/index.js +12 -0
  359. package/dist/generators/standard/index.js.map +1 -0
  360. package/dist/generators/standard/node.d.ts +20 -0
  361. package/dist/generators/standard/node.js +314 -0
  362. package/dist/generators/standard/node.js.map +1 -0
  363. package/dist/generators/standard/python.d.ts +18 -0
  364. package/dist/generators/standard/python.js +191 -0
  365. package/dist/generators/standard/python.js.map +1 -0
  366. package/dist/go-template-assets.js +3 -3
  367. package/dist/go-template-assets.js.map +1 -1
  368. package/dist/governance-activation/activation-state.d.ts +1 -1
  369. package/dist/governance-activation/activation-state.js +46 -9
  370. package/dist/governance-activation/activation-state.js.map +1 -1
  371. package/dist/governance-activation/approvals.d.ts +1 -188
  372. package/dist/governance-activation/approvals.js +1 -507
  373. package/dist/governance-activation/approvals.js.map +1 -1
  374. package/dist/governance-activation/canonical-json.d.ts +1 -3
  375. package/dist/governance-activation/canonical-json.js +1 -35
  376. package/dist/governance-activation/canonical-json.js.map +1 -1
  377. package/dist/governance-activation/commands.d.ts +1 -1
  378. package/dist/governance-activation/commands.js +72 -106
  379. package/dist/governance-activation/commands.js.map +1 -1
  380. package/dist/governance-activation/compatibility.d.ts +11 -3
  381. package/dist/governance-activation/compatibility.js +31 -4
  382. package/dist/governance-activation/compatibility.js.map +1 -1
  383. package/dist/governance-activation/credentials.d.ts +3 -3
  384. package/dist/governance-activation/credentials.js +5 -5
  385. package/dist/governance-activation/credentials.js.map +1 -1
  386. package/dist/governance-activation/doctor.d.ts +1 -1
  387. package/dist/governance-activation/doctor.js +28 -96
  388. package/dist/governance-activation/doctor.js.map +1 -1
  389. package/dist/governance-activation/evidence.d.ts +1 -49
  390. package/dist/governance-activation/evidence.js +1 -245
  391. package/dist/governance-activation/evidence.js.map +1 -1
  392. package/dist/governance-activation/git-ignore.d.ts +9 -0
  393. package/dist/governance-activation/git-ignore.js +76 -0
  394. package/dist/governance-activation/git-ignore.js.map +1 -0
  395. package/dist/governance-activation/graph.d.ts +1 -397
  396. package/dist/governance-activation/graph.js +1 -440
  397. package/dist/governance-activation/graph.js.map +1 -1
  398. package/dist/governance-activation/identity.d.ts +1 -35
  399. package/dist/governance-activation/identity.js +1 -88
  400. package/dist/governance-activation/identity.js.map +1 -1
  401. package/dist/governance-activation/index.d.ts +3 -0
  402. package/dist/governance-activation/index.js +3 -0
  403. package/dist/governance-activation/index.js.map +1 -1
  404. package/dist/governance-activation/inputs.d.ts +8 -0
  405. package/dist/governance-activation/inputs.js +146 -0
  406. package/dist/governance-activation/inputs.js.map +1 -0
  407. package/dist/governance-activation/migration.d.ts +4 -3
  408. package/dist/governance-activation/migration.js +14 -6
  409. package/dist/governance-activation/migration.js.map +1 -1
  410. package/dist/governance-activation/phase-bootstrap-state.d.ts +3 -0
  411. package/dist/governance-activation/phase-bootstrap-state.js +128 -0
  412. package/dist/governance-activation/phase-bootstrap-state.js.map +1 -0
  413. package/dist/governance-activation/phase-discovery.d.ts +2 -0
  414. package/dist/governance-activation/phase-discovery.js +88 -0
  415. package/dist/governance-activation/phase-discovery.js.map +1 -0
  416. package/dist/governance-activation/phase-governance.d.ts +4 -0
  417. package/dist/governance-activation/phase-governance.js +141 -0
  418. package/dist/governance-activation/phase-governance.js.map +1 -0
  419. package/dist/governance-activation/phase-publication.d.ts +8 -0
  420. package/dist/governance-activation/phase-publication.js +318 -0
  421. package/dist/governance-activation/phase-publication.js.map +1 -0
  422. package/dist/governance-activation/read-only.d.ts +30 -0
  423. package/dist/governance-activation/read-only.js +93 -0
  424. package/dist/governance-activation/read-only.js.map +1 -0
  425. package/dist/governance-activation/readiness.d.ts +1 -25
  426. package/dist/governance-activation/readiness.js +1 -222
  427. package/dist/governance-activation/readiness.js.map +1 -1
  428. package/dist/governance-activation/reconciliation.d.ts +1 -1
  429. package/dist/governance-activation/reconciliation.js +3 -3
  430. package/dist/governance-activation/reconciliation.js.map +1 -1
  431. package/dist/governance-activation/release-integrity.d.ts +1 -1
  432. package/dist/governance-activation/release-integrity.js +2 -2
  433. package/dist/governance-activation/release-integrity.js.map +1 -1
  434. package/dist/governance-activation/seed-lifecycle.d.ts +9 -1
  435. package/dist/governance-activation/seed-lifecycle.js +197 -63
  436. package/dist/governance-activation/seed-lifecycle.js.map +1 -1
  437. package/dist/governance-activation/source-of-truth.d.ts +5 -3
  438. package/dist/governance-activation/source-of-truth.js +32 -52
  439. package/dist/governance-activation/source-of-truth.js.map +1 -1
  440. package/dist/governance-activation/spec-kit-seed.d.ts +9 -0
  441. package/dist/governance-activation/spec-kit-seed.js +43 -0
  442. package/dist/governance-activation/spec-kit-seed.js.map +1 -0
  443. package/dist/governance-activation/task-projection.d.ts +1 -1
  444. package/dist/governance-activation/transition-planning.d.ts +15 -0
  445. package/dist/governance-activation/transition-planning.js +250 -0
  446. package/dist/governance-activation/transition-planning.js.map +1 -0
  447. package/dist/governance-activation/transition-ports.d.ts +150 -0
  448. package/dist/governance-activation/transition-ports.js +2 -0
  449. package/dist/governance-activation/transition-ports.js.map +1 -0
  450. package/dist/governance-activation/transition-process.d.ts +7 -0
  451. package/dist/governance-activation/transition-process.js +21 -0
  452. package/dist/governance-activation/transition-process.js.map +1 -0
  453. package/dist/governance-activation/transition-records.d.ts +56 -0
  454. package/dist/governance-activation/transition-records.js +208 -0
  455. package/dist/governance-activation/transition-records.js.map +1 -0
  456. package/dist/governance-activation/transitions.d.ts +6 -165
  457. package/dist/governance-activation/transitions.js +142 -2055
  458. package/dist/governance-activation/transitions.js.map +1 -1
  459. package/dist/governance-activation/types.d.ts +1 -390
  460. package/dist/governance-activation/types.js +1 -107
  461. package/dist/governance-activation/types.js.map +1 -1
  462. package/dist/governance-activation/validators.d.ts +1 -17
  463. package/dist/governance-activation/validators.js +1 -1304
  464. package/dist/governance-activation/validators.js.map +1 -1
  465. package/dist/governance-assessment/catalog.d.ts +1 -2
  466. package/dist/governance-assessment/catalog.js +18 -85
  467. package/dist/governance-assessment/catalog.js.map +1 -1
  468. package/dist/governance-assessment/command.d.ts +1 -1
  469. package/dist/governance-assessment/command.js +8 -12
  470. package/dist/governance-assessment/command.js.map +1 -1
  471. package/dist/governance-assessment/engine.d.ts +6 -11
  472. package/dist/governance-assessment/engine.js +463 -114
  473. package/dist/governance-assessment/engine.js.map +1 -1
  474. package/dist/governance-assessment/live-normalize.d.ts +1 -19
  475. package/dist/governance-assessment/live-normalize.js +1 -402
  476. package/dist/governance-assessment/live-normalize.js.map +1 -1
  477. package/dist/governance-assessment/live-transport.d.ts +2 -6
  478. package/dist/governance-assessment/live-transport.js +10 -22
  479. package/dist/governance-assessment/live-transport.js.map +1 -1
  480. package/dist/governance-assessment/live.js +55 -5
  481. package/dist/governance-assessment/live.js.map +1 -1
  482. package/dist/governance-assessment/predicates.d.ts +1 -27
  483. package/dist/governance-assessment/predicates.js +1 -329
  484. package/dist/governance-assessment/predicates.js.map +1 -1
  485. package/dist/governance-assessment/project.d.ts +13 -17
  486. package/dist/governance-assessment/project.js +59 -149
  487. package/dist/governance-assessment/project.js.map +1 -1
  488. package/dist/governance-assessment/readers.d.ts +1 -5
  489. package/dist/governance-assessment/readers.js +5 -13
  490. package/dist/governance-assessment/readers.js.map +1 -1
  491. package/dist/governance-assessment/report.d.ts +1 -23
  492. package/dist/governance-assessment/report.js +1 -265
  493. package/dist/governance-assessment/report.js.map +1 -1
  494. package/dist/governance-assessment/sanitize.d.ts +1 -8
  495. package/dist/governance-assessment/sanitize.js +1 -56
  496. package/dist/governance-assessment/sanitize.js.map +1 -1
  497. package/dist/governance-assessment/types.d.ts +1 -173
  498. package/dist/governance-assessment/types.js +1 -12
  499. package/dist/governance-assessment/types.js.map +1 -1
  500. package/dist/governance-assessment/yaml.d.ts +1 -6
  501. package/dist/governance-assessment/yaml.js +1 -29
  502. package/dist/governance-assessment/yaml.js.map +1 -1
  503. package/dist/init-filesystem.d.ts +1 -1
  504. package/dist/init-filesystem.js +126 -174
  505. package/dist/init-filesystem.js.map +1 -1
  506. package/dist/interactive.d.ts +2 -2
  507. package/dist/interactive.js +42 -41
  508. package/dist/interactive.js.map +1 -1
  509. package/dist/migrate-plan.d.ts +1 -1
  510. package/dist/migrate-plan.js +14 -8
  511. package/dist/migrate-plan.js.map +1 -1
  512. package/dist/npm-template-assets.js +5 -4
  513. package/dist/npm-template-assets.js.map +1 -1
  514. package/dist/openspec-profile.d.ts +1 -1
  515. package/dist/opentofu-template-assets.js +3 -3
  516. package/dist/opentofu-template-assets.js.map +1 -1
  517. package/dist/package-identity.d.ts +3 -0
  518. package/dist/package-identity.js +13 -2
  519. package/dist/package-identity.js.map +1 -1
  520. package/dist/planner.d.ts +1 -19
  521. package/dist/planner.js +1 -565
  522. package/dist/planner.js.map +1 -1
  523. package/dist/process-runner.d.ts +1 -1
  524. package/dist/project-dependencies.d.ts +5 -3
  525. package/dist/project-dependencies.js +74 -63
  526. package/dist/project-dependencies.js.map +1 -1
  527. package/dist/published-verifier.js +61 -30
  528. package/dist/published-verifier.js.map +1 -1
  529. package/dist/python-template-assets.js +6 -9
  530. package/dist/python-template-assets.js.map +1 -1
  531. package/dist/reconcile.d.ts +1 -1
  532. package/dist/reconcile.js +2 -2
  533. package/dist/reconcile.js.map +1 -1
  534. package/dist/repository-governance.d.ts +5 -2
  535. package/dist/repository-governance.js +126 -112
  536. package/dist/repository-governance.js.map +1 -1
  537. package/dist/runtime.js +1 -1
  538. package/dist/runtime.js.map +1 -1
  539. package/dist/scan.d.ts +6 -2
  540. package/dist/scan.js +78 -30
  541. package/dist/scan.js.map +1 -1
  542. package/dist/self-upgrade.d.ts +1 -1
  543. package/dist/self-upgrade.js +20 -7
  544. package/dist/self-upgrade.js.map +1 -1
  545. package/dist/stable-release.js +7 -1
  546. package/dist/stable-release.js.map +1 -1
  547. package/dist/standard-templates.d.ts +2 -2
  548. package/dist/standard-templates.js +6 -841
  549. package/dist/standard-templates.js.map +1 -1
  550. package/dist/supported-stack.d.ts +3 -115
  551. package/dist/supported-stack.js +4 -438
  552. package/dist/supported-stack.js.map +1 -1
  553. package/dist/telemetry/index.d.ts +1 -1
  554. package/dist/templates.d.ts +10 -20
  555. package/dist/templates.js +52 -3261
  556. package/dist/templates.js.map +1 -1
  557. package/dist/types.d.ts +1 -263
  558. package/dist/types.js +1 -1
  559. package/dist/types.js.map +1 -1
  560. package/dist/version.js +2 -6
  561. package/dist/version.js.map +1 -1
  562. package/dist/workstation-catalog.d.ts +5 -2
  563. package/dist/workstation-catalog.js +33 -2
  564. package/dist/workstation-catalog.js.map +1 -1
  565. package/dist/workstation.d.ts +4 -3
  566. package/dist/workstation.js +86 -32
  567. package/dist/workstation.js.map +1 -1
  568. package/docs/assets/liftoff-terminal.svg +3 -3
  569. package/docs/azure-deployment.md +107 -10
  570. package/docs/cli-reference.md +49 -13
  571. package/docs/configuration-and-manifests.md +139 -34
  572. package/docs/existing-repositories.md +33 -6
  573. package/docs/getting-started.md +44 -31
  574. package/docs/prerequisites.md +34 -35
  575. package/docs/project-structure.md +39 -46
  576. package/docs/repository-governance.md +90 -24
  577. package/docs/safety-and-consent.md +65 -12
  578. package/docs/spec-workflows-and-agents.md +31 -28
  579. package/docs/supported-stack.md +11 -9
  580. package/docs/troubleshooting.md +107 -49
  581. package/docs/workloads.md +46 -62
  582. package/package.json +4 -7
  583. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/UPSTREAM_LICENSE.txt +0 -21
  584. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/catalog.json +0 -520
  585. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/packaged/gitignore +0 -27
  586. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/README.md +0 -25
  587. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/components.json +0 -22
  588. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/eslint.config.js +0 -23
  589. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/index.html +0 -13
  590. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/package-lock.json +0 -6156
  591. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/package.json +0 -60
  592. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/public/power-apps.svg +0 -55
  593. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/App.tsx +0 -17
  594. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/assets/react.svg +0 -1
  595. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/mode-toggle.tsx +0 -37
  596. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/badge.tsx +0 -46
  597. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/button.tsx +0 -60
  598. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/calendar.tsx +0 -211
  599. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/card.tsx +0 -92
  600. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/chart.tsx +0 -355
  601. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/checkbox.tsx +0 -32
  602. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/command.tsx +0 -184
  603. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/dialog.tsx +0 -141
  604. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/dropdown-menu.tsx +0 -257
  605. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/input.tsx +0 -21
  606. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/label.tsx +0 -22
  607. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/popover.tsx +0 -46
  608. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/progress.tsx +0 -29
  609. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/select.tsx +0 -185
  610. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/separator.tsx +0 -26
  611. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/skeleton.tsx +0 -13
  612. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/table.tsx +0 -114
  613. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/tabs.tsx +0 -66
  614. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/textarea.tsx +0 -18
  615. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/tooltip.tsx +0 -61
  616. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/hooks/use-theme.ts +0 -11
  617. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/index.css +0 -131
  618. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/lib/utils.ts +0 -6
  619. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/main.tsx +0 -10
  620. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/pages/_layout.tsx +0 -31
  621. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/pages/home.tsx +0 -59
  622. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/pages/not-found.tsx +0 -14
  623. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/providers/query-provider.tsx +0 -26
  624. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/providers/sonner-provider.tsx +0 -23
  625. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/providers/theme-provider.tsx +0 -64
  626. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/router.tsx +0 -24
  627. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/tsconfig.app.json +0 -34
  628. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/tsconfig.json +0 -13
  629. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/tsconfig.node.json +0 -26
  630. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/vite.config.ts +0 -19
  631. package/assets/power-apps-code-app/README.md +0 -27
  632. package/dist/code-apps-plugin.d.ts +0 -13
  633. package/dist/code-apps-plugin.js +0 -69
  634. package/dist/code-apps-plugin.js.map +0 -1
  635. package/dist/power-apps-assets.d.ts +0 -30
  636. package/dist/power-apps-assets.js +0 -131
  637. package/dist/power-apps-assets.js.map +0 -1
  638. package/dist/power-apps-templates.d.ts +0 -3
  639. package/dist/power-apps-templates.js +0 -177
  640. package/dist/power-apps-templates.js.map +0 -1
  641. package/dist/power-apps-validation.d.ts +0 -1
  642. package/dist/power-apps-validation.js +0 -79
  643. package/dist/power-apps-validation.js.map +0 -1
@@ -0,0 +1,6 @@
1
+ import type { ExecutionContext } from '../context.js';
2
+ export interface UpgradeRequest {
3
+ mode: 'check' | 'apply';
4
+ json: boolean;
5
+ }
6
+ export declare function upgradeLiftoff(request: UpgradeRequest, context: ExecutionContext): Promise<number>;
@@ -0,0 +1,82 @@
1
+ import { formatCommand } from '../../process-runner.js';
2
+ import { runSelfUpgrade, selfUpgradeExitCode, selfUpgradeRemedy, selfUpgradeSummary } from '../../self-upgrade.js';
3
+ import { liftoffVersion } from '../../version.js';
4
+ function renderSelfUpgradeResult(value, presentation) {
5
+ const details = [
6
+ { label: 'Current CLI', value: value.currentVersion },
7
+ ...('targetVersion' in value && value.targetVersion
8
+ ? [{ label: 'Canonical target', value: value.targetVersion }]
9
+ : []),
10
+ ...('registryKind' in value && value.registryKind
11
+ ? [{ label: 'Delivery registry', value: value.registryKind }]
12
+ : [])
13
+ ];
14
+ presentation.definitions('CLI upgrade result', details);
15
+ switch (value.status) {
16
+ case 'current':
17
+ presentation.status('success', 'CLI is current', selfUpgradeSummary(value));
18
+ return;
19
+ case 'update-available':
20
+ presentation.status('warning', 'CLI update available', selfUpgradeSummary(value));
21
+ presentation.command('liftoff upgrade');
22
+ return;
23
+ case 'upgraded':
24
+ presentation.completion('Liftoff CLI upgraded', selfUpgradeSummary(value), [{ label: 'Installed version', value: value.targetVersion }], 'liftoff update --check');
25
+ return;
26
+ case 'blocked':
27
+ case 'failed': {
28
+ presentation.status(value.status === 'blocked' ? 'warning' : 'error', value.status === 'blocked' ? 'CLI upgrade blocked' : 'CLI upgrade failed', selfUpgradeSummary(value));
29
+ const remedy = selfUpgradeRemedy(value);
30
+ if (remedy) {
31
+ presentation.remedy(remedy);
32
+ }
33
+ return;
34
+ }
35
+ default: {
36
+ const exhaustive = value;
37
+ throw new Error(`Unhandled self-upgrade result: ${String(exhaustive)}`);
38
+ }
39
+ }
40
+ }
41
+ export async function upgradeLiftoff(request, context) {
42
+ const { mode, json } = request;
43
+ if (!json) {
44
+ context.presentation.commandIdentity('upgrade', 'Replace the supported global Liftoff CLI installation');
45
+ }
46
+ const execute = context.selfUpgrade ?? ((request) => runSelfUpgrade(request, {
47
+ environment: context.env ?? process.env
48
+ }));
49
+ let value;
50
+ try {
51
+ value = await execute({
52
+ mode,
53
+ currentVersion: liftoffVersion,
54
+ stdout: context.stdout,
55
+ stderr: context.stderr,
56
+ json,
57
+ ...(!json
58
+ ? {
59
+ onStage: (stage, detail) => context.presentation.stage(stage, detail),
60
+ onInstallCommand: (command) => context.presentation.command(formatCommand(command))
61
+ }
62
+ : {})
63
+ });
64
+ }
65
+ catch {
66
+ value = {
67
+ schemaVersion: 1,
68
+ mode,
69
+ status: 'failed',
70
+ currentVersion: liftoffVersion,
71
+ reasonCode: 'verification_failed'
72
+ };
73
+ }
74
+ if (json) {
75
+ context.presentation.rawStdout(`${JSON.stringify(value, null, 2)}\n`);
76
+ }
77
+ else {
78
+ renderSelfUpgradeResult(value, context.presentation);
79
+ }
80
+ return selfUpgradeExitCode(value);
81
+ }
82
+ //# sourceMappingURL=use-case.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-case.js","sourceRoot":"","sources":["../../../src/application/upgrade/use-case.ts"],"names":[],"mappings":"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"}
package/dist/args.d.ts CHANGED
@@ -1,65 +1,5 @@
1
- import type { ParsedArgs } from './types.js';
2
- type FlagKind = 'boolean' | 'value';
3
- export type CommandGroup = 'Onboarding' | 'Maintenance' | 'Reference' | 'Operations';
4
- export type FlagGroup = 'Project' | 'Framework' | 'Consent' | 'Output' | 'General' | 'Command';
5
- export interface FlagDefinition {
6
- kind: FlagKind;
7
- negatable?: boolean;
8
- description: string;
9
- metavar?: string;
10
- defaultValue?: string;
11
- group: FlagGroup;
12
- }
13
- export interface CommandDefinition {
14
- description: string;
15
- usage: string;
16
- group: CommandGroup;
17
- flags: Readonly<Record<string, FlagDefinition>>;
18
- arguments?: readonly ArgumentDefinition[];
19
- subcommands?: readonly string[];
20
- defaultMaxPositionals: number;
21
- subcommandMaxPositionals?: Readonly<Record<string, number>>;
22
- }
23
- export interface ArgumentDefinition {
24
- syntax: string;
25
- description: string;
26
- }
27
- export interface HelpEntry {
28
- syntax: string;
29
- description: string;
30
- defaultValue?: string;
31
- }
32
- export interface HelpGroup {
33
- title: string;
34
- entries: HelpEntry[];
35
- }
36
- export interface GeneralHelpModel {
37
- version: string;
38
- title: string;
39
- subtitle: string;
40
- usage: string;
41
- globalOptions: HelpEntry[];
42
- commandGroups: HelpGroup[];
43
- hint: string;
44
- }
45
- export interface CommandHelpModel {
46
- command: string;
47
- description: string;
48
- usage: string;
49
- arguments: HelpEntry[];
50
- subcommands: string[];
51
- optionGroups: HelpGroup[];
52
- }
53
- export declare const commandDefinitions: Readonly<Record<string, CommandDefinition>>;
54
- export declare class UsageError extends Error {
55
- constructor(message: string);
56
- }
57
- export declare function parseArgs(argv: string[]): ParsedArgs;
58
- export declare function getCommandHelp(command: string, subcommand?: string): CommandHelpModel;
59
- export declare function formatCommandHelp(command: string, subcommand?: string): string;
60
- export declare function getGeneralHelp(version: string): GeneralHelpModel;
61
- export declare function formatGeneralHelp(version: string): string;
62
- export declare function readStringFlag(flags: ParsedArgs['flags'], name: string): string | undefined;
63
- export declare function readBooleanFlag(flags: ParsedArgs['flags'], name: string): boolean | undefined;
64
- export declare function readListFlag(flags: ParsedArgs['flags'], name: string): string[] | undefined;
65
- export {};
1
+ export type { ArgumentDefinition, CommandDefinition, CommandGroup, CommandHelpModel, FlagDefinition, FlagGroup, GeneralHelpModel, HelpEntry, HelpGroup } from './cli/args/contracts.js';
2
+ export { commandDefinitions } from './cli/args/definitions.js';
3
+ export { UsageError, parseArgs } from './cli/args/parser.js';
4
+ export { formatCommandHelp, formatGeneralHelp, getCommandHelp, getGeneralHelp } from './cli/args/help.js';
5
+ export { readBooleanFlag, readListFlag, readStringFlag } from './cli/args/readers.js';
package/dist/args.js CHANGED
@@ -1,473 +1,5 @@
1
- import { canonicalDefaultEnvironmentIds } from './catalogs.js';
2
- const booleanFlag = (description, group, negatable = false, defaultValue) => ({ kind: 'boolean', description, group, negatable, ...(defaultValue ? { defaultValue } : {}) });
3
- const valueFlag = (description, group, metavar = 'value', defaultValue) => ({ kind: 'value', description, group, metavar, ...(defaultValue ? { defaultValue } : {}) });
4
- const helpFlag = { help: booleanFlag('Show command-specific help', 'General') };
5
- const projectFlags = {
6
- project: valueFlag('Project name or project path', 'Project', 'path'),
7
- type: valueFlag('Project workload type', 'Project', 'workload'),
8
- genai: booleanFlag('Create a GenAI project; use --no-genai for a standard API', 'Project', true),
9
- api: valueFlag('Backend API stack', 'Project', 'stack'),
10
- pattern: valueFlag('GenAI application pattern', 'Project', 'pattern'),
11
- cloud: valueFlag('Cloud provider', 'Project', 'provider', 'azure'),
12
- region: valueFlag('Cloud deployment region', 'Project', 'region', 'eastus'),
13
- frontend: booleanFlag('Include the Vue frontend starter', 'Project', true, 'false'),
14
- environments: valueFlag('Comma-separated environments', 'Project', 'list', canonicalDefaultEnvironmentIds.join(',')),
15
- spec: valueFlag('Spec-driven framework', 'Framework', 'framework', 'openspec'),
16
- agents: valueFlag('Comma-separated AI coding agents', 'Framework', 'list', 'copilot'),
17
- 'default-agent': valueFlag('Primary agent for Spec Kit when multiple agents are selected', 'Framework', 'agent'),
18
- governance: valueFlag('Repository-governance profile', 'Framework', 'profile', 'single-maintainer-gitflow'),
19
- 'code-apps-plugin': booleanFlag('Request the Microsoft Code Apps agent plugin (Preview)', 'Framework', true, 'false'),
20
- 'copilot-cloud': booleanFlag('Set up the GitHub-hosted Copilot coding agent for OpenSpec', 'Framework', true, 'false'),
21
- 'configure-openspec-profile': booleanFlag('Authorize the required global OpenSpec workflow profile', 'Consent'),
22
- config: valueFlag('Load deterministic project options from JSON', 'Project', 'file')
23
- };
24
- export const commandDefinitions = {
25
- help: {
26
- description: 'Show general or command-specific help',
27
- usage: '[command]',
28
- group: 'Reference',
29
- flags: helpFlag,
30
- arguments: [{ syntax: 'command', description: 'Command to describe' }],
31
- defaultMaxPositionals: 1
32
- },
33
- init: {
34
- description: 'Initialize a project and prepare its workstation',
35
- usage: '[project-name]',
36
- group: 'Onboarding',
37
- flags: {
38
- ...projectFlags,
39
- yes: booleanFlag('Accept project defaults and plan confirmation', 'Consent'),
40
- force: booleanFlag('Authorize replacement of listed regular-file conflicts', 'Consent'),
41
- 'install-tools': booleanFlag('Authorize allowlisted workstation tool installation', 'Consent'),
42
- 'install-dependencies': booleanFlag('Authorize project-local dependency installation', 'Consent'),
43
- ...helpFlag
44
- },
45
- arguments: [{ syntax: 'project-name', description: 'Project identity or child directory name' }],
46
- defaultMaxPositionals: 1
47
- },
48
- plan: {
49
- description: 'Preview generated artifacts',
50
- usage: '',
51
- group: 'Onboarding',
52
- flags: { ...projectFlags, ...helpFlag },
53
- defaultMaxPositionals: 0
54
- },
55
- patterns: {
56
- description: 'List GenAI patterns',
57
- usage: '',
58
- group: 'Reference',
59
- flags: helpFlag,
60
- defaultMaxPositionals: 0
61
- },
62
- providers: {
63
- description: 'List cloud providers',
64
- usage: '',
65
- group: 'Reference',
66
- flags: helpFlag,
67
- defaultMaxPositionals: 0
68
- },
69
- regions: {
70
- description: 'List or search provider regions',
71
- usage: '[search <query>]',
72
- group: 'Reference',
73
- flags: {
74
- cloud: valueFlag('Cloud provider', 'Project', 'provider', 'azure'),
75
- region: valueFlag('Exact region identifier', 'Project', 'region'),
76
- ...helpFlag
77
- },
78
- subcommands: ['search'],
79
- arguments: [{ syntax: 'query', description: 'Region name, slug, geography, or alias to search' }],
80
- defaultMaxPositionals: 0,
81
- subcommandMaxPositionals: { search: 1 }
82
- },
83
- validate: {
84
- description: 'Validate a generated project manifest',
85
- usage: '[project-path]',
86
- group: 'Maintenance',
87
- flags: {
88
- project: valueFlag('Project path', 'Project', 'path'),
89
- json: booleanFlag('Emit machine-readable JSON', 'Output'),
90
- ...helpFlag
91
- },
92
- arguments: [{ syntax: 'project-path', description: 'Generated project to validate' }],
93
- defaultMaxPositionals: 1
94
- },
95
- update: {
96
- description: 'Reconcile Liftoff-managed core files in a project',
97
- usage: '[project-path]',
98
- group: 'Maintenance',
99
- flags: {
100
- project: valueFlag('Project path', 'Project', 'path'),
101
- check: booleanFlag('Report drift without changing project files', 'Command'),
102
- force: booleanFlag('Replace modified managed files', 'Consent'),
103
- json: booleanFlag('Emit machine-readable JSON', 'Output'),
104
- ...helpFlag
105
- },
106
- arguments: [{ syntax: 'project-path', description: 'Generated project to reconcile' }],
107
- defaultMaxPositionals: 1
108
- },
109
- upgrade: {
110
- description: 'Replace the supported global npm Liftoff CLI; project templates use update separately',
111
- usage: '',
112
- group: 'Maintenance',
113
- flags: {
114
- check: booleanFlag('Check for an installable stable CLI update without changing anything', 'Command'),
115
- json: booleanFlag('Emit one machine-readable result object', 'Output'),
116
- ...helpFlag
117
- },
118
- defaultMaxPositionals: 0
119
- },
120
- migrate: {
121
- description: 'Adopt an existing project',
122
- usage: '<source-path>',
123
- group: 'Onboarding',
124
- flags: {
125
- ...projectFlags,
126
- yes: booleanFlag('Accept project defaults and plan confirmation', 'Consent'),
127
- force: booleanFlag('Retained for parity; never overrides the fresh migration target guard', 'Consent'),
128
- 'install-tools': booleanFlag('Authorize allowlisted workstation tool installation', 'Consent'),
129
- 'install-dependencies': booleanFlag('Authorize project-local dependency installation', 'Consent'),
130
- ...helpFlag
131
- },
132
- arguments: [{ syntax: 'source-path', description: 'Existing application to migrate without modifying it' }],
133
- defaultMaxPositionals: 1
134
- },
135
- doctor: {
136
- description: 'Check local and project readiness',
137
- usage: '',
138
- group: 'Maintenance',
139
- flags: {
140
- cloud: valueFlag('Cloud provider to inspect', 'Project', 'provider', 'azure'),
141
- json: booleanFlag('Emit machine-readable JSON', 'Output'),
142
- ...helpFlag
143
- },
144
- defaultMaxPositionals: 0
145
- },
146
- governance: {
147
- description: 'Inspect governance activation and assess policy alignment',
148
- usage: '<status|plan|apply-next|resume|verify|assess> [project-path]',
149
- group: 'Operations',
150
- flags: {
151
- project: valueFlag('Liftoff project path', 'Project', 'path'),
152
- execute: booleanFlag('Execute the reviewed governance apply-next plan; required for any mutation', 'Consent'),
153
- live: booleanFlag('Assess only: request bounded read-only GitHub/Azure metadata with existing permissions', 'Consent'),
154
- json: booleanFlag('Emit machine-readable JSON', 'Output'),
155
- ...helpFlag
156
- },
157
- subcommands: ['status', 'plan', 'apply-next', 'resume', 'verify', 'assess'],
158
- arguments: [{ syntax: 'project-path', description: 'Liftoff project to inspect' }],
159
- defaultMaxPositionals: 0,
160
- subcommandMaxPositionals: {
161
- status: 1,
162
- plan: 1,
163
- 'apply-next': 1,
164
- resume: 1,
165
- verify: 1,
166
- assess: 1
167
- }
168
- },
169
- dev: {
170
- description: 'Print Docker Compose helper commands',
171
- usage: '[up|down|logs|reset]',
172
- group: 'Operations',
173
- flags: { profile: valueFlag('Docker Compose profile', 'Command', 'name'), ...helpFlag },
174
- subcommands: ['up', 'down', 'logs', 'reset'],
175
- defaultMaxPositionals: 0,
176
- subcommandMaxPositionals: { up: 0, down: 0, logs: 0, reset: 0 }
177
- },
178
- infra: {
179
- description: 'Print OpenTofu helper commands',
180
- usage: '[init|plan|apply|output]',
181
- group: 'Operations',
182
- flags: { env: valueFlag('Target environment', 'Command', 'environment', 'dev'), ...helpFlag },
183
- subcommands: ['init', 'plan', 'apply', 'output'],
184
- defaultMaxPositionals: 0,
185
- subcommandMaxPositionals: { init: 0, plan: 0, apply: 0, output: 0 }
186
- }
187
- };
188
- export class UsageError extends Error {
189
- constructor(message) {
190
- super(message);
191
- this.name = 'UsageError';
192
- }
193
- }
194
- function assignFlag(flags, name, value) {
195
- if (Object.hasOwn(flags, name)) {
196
- throw new UsageError(`Flag --${name} may be provided only once.`);
197
- }
198
- flags[name] = value;
199
- }
200
- function parseBooleanValue(name, value) {
201
- if (value === 'true') {
202
- return true;
203
- }
204
- if (value === 'false') {
205
- return false;
206
- }
207
- throw new UsageError(`Flag --${name} expects true or false.`);
208
- }
209
- export function parseArgs(argv) {
210
- if (argv.length === 0) {
211
- return { positional: [], flags: {} };
212
- }
213
- if (argv[0] === '--help') {
214
- return { command: 'help', positional: [], flags: {} };
215
- }
216
- if (argv[0] === '--version') {
217
- return { command: 'version', positional: [], flags: {} };
218
- }
219
- const command = argv[0];
220
- if (command.startsWith('-')) {
221
- throw new UsageError(`Unknown option: ${command}. Run \`liftoff help\` for usage.`);
222
- }
223
- if (command === 'create') {
224
- throw new UsageError('The `liftoff create` command was replaced by `liftoff init`. Run `liftoff init --help` for usage.');
225
- }
226
- const definition = commandDefinitions[command];
227
- if (!definition) {
228
- throw new UsageError(`Unknown command: ${command}. Run \`liftoff help\` for usage.`);
229
- }
230
- const tokens = argv.slice(1);
231
- let subcommand;
232
- if (definition.subcommands && tokens[0] && !tokens[0].startsWith('-')) {
233
- const candidate = tokens.shift();
234
- if (!definition.subcommands.includes(candidate)) {
235
- throw new UsageError(`Unsupported ${command} subcommand: ${candidate}. Use one of: ${definition.subcommands.join(', ')}.`);
236
- }
237
- subcommand = candidate;
238
- }
239
- const positional = [];
240
- const flags = {};
241
- let positionalOnly = false;
242
- for (let index = 0; index < tokens.length; index += 1) {
243
- const token = tokens[index];
244
- if (token === '--') {
245
- positionalOnly = true;
246
- continue;
247
- }
248
- if (positionalOnly || !token.startsWith('-')) {
249
- positional.push(token);
250
- continue;
251
- }
252
- if (!token.startsWith('--')) {
253
- throw new UsageError(`Unknown option: ${token}. Liftoff options use --long-name syntax.`);
254
- }
255
- const withoutPrefix = token.slice(2);
256
- const equalsIndex = withoutPrefix.indexOf('=');
257
- const rawName = equalsIndex >= 0 ? withoutPrefix.slice(0, equalsIndex) : withoutPrefix;
258
- const inlineValue = equalsIndex >= 0 ? withoutPrefix.slice(equalsIndex + 1) : undefined;
259
- const negated = rawName.startsWith('no-');
260
- const name = negated ? rawName.slice(3) : rawName;
261
- const flagDefinition = definition.flags[name];
262
- if (!flagDefinition) {
263
- if (command === 'update' && name === 'apply') {
264
- const legacyForceRequested = flags.force === true ||
265
- tokens.slice(index + 1).some((candidate) => candidate === '--force' || candidate === '--force=true');
266
- throw new UsageError(legacyForceRequested
267
- ? 'Flag --apply was removed. Replace this command with `liftoff update --force`, ' +
268
- 'or use `liftoff update --check` for a read-only managed-core check.'
269
- : 'Flag --apply was removed. Run `liftoff update` to apply safe managed-core changes or ' +
270
- '`liftoff update --check` for a read-only managed-core check.');
271
- }
272
- throw new UsageError(`Unknown flag for ${command}: --${rawName}.`);
273
- }
274
- if (negated) {
275
- if (inlineValue !== undefined || flagDefinition.kind !== 'boolean' || !flagDefinition.negatable) {
276
- throw new UsageError(`Flag --${name} does not support the --no-${name} form.`);
277
- }
278
- assignFlag(flags, name, false);
279
- continue;
280
- }
281
- if (flagDefinition.kind === 'boolean') {
282
- assignFlag(flags, name, inlineValue === undefined ? true : parseBooleanValue(name, inlineValue));
283
- continue;
284
- }
285
- if (inlineValue !== undefined) {
286
- if (inlineValue.length === 0) {
287
- throw new UsageError(`Missing value for --${name}.`);
288
- }
289
- assignFlag(flags, name, inlineValue);
290
- continue;
291
- }
292
- const next = tokens[index + 1];
293
- if (!next || next.startsWith('-')) {
294
- throw new UsageError(`Missing value for --${name}.`);
295
- }
296
- assignFlag(flags, name, next);
297
- index += 1;
298
- }
299
- if (command === 'update' && flags.check === true && flags.force === true) {
300
- throw new UsageError('Flags --check and --force cannot be combined. Run `liftoff update --check` ' +
301
- 'to inspect managed-core drift or `liftoff update --force` to overwrite core conflicts.');
302
- }
303
- if (command === 'governance') {
304
- if (Object.hasOwn(flags, 'live') && subcommand !== 'assess') {
305
- throw new UsageError('Flag --live is allowed only for `liftoff governance assess`.');
306
- }
307
- if (subcommand === 'assess') {
308
- if (Object.hasOwn(flags, 'execute')) {
309
- throw new UsageError('Flag --execute is not allowed for read-only `liftoff governance assess`.');
310
- }
311
- if (positional.length > 0 && Object.hasOwn(flags, 'project')) {
312
- throw new UsageError('Provide the assessment project either positionally or with --project, not both.');
313
- }
314
- }
315
- }
316
- const maxPositionals = subcommand
317
- ? definition.subcommandMaxPositionals?.[subcommand] ?? 0
318
- : definition.defaultMaxPositionals;
319
- if (positional.length > maxPositionals) {
320
- throw new UsageError(`Too many positional arguments for ${command}${subcommand ? ` ${subcommand}` : ''}. ` +
321
- `Usage: liftoff ${command}${definition.usage ? ` ${definition.usage}` : ''}`);
322
- }
323
- if (command === 'help' && positional[0] && !commandDefinitions[positional[0]]) {
324
- throw new UsageError(`Unknown command for help: ${positional[0]}.`);
325
- }
326
- return { command, subcommand, positional, flags };
327
- }
328
- function flagSyntax(name, flag) {
329
- const value = flag.kind === 'value' ? ` <${flag.metavar ?? 'value'}>` : '';
330
- const negated = flag.negatable ? ` / --no-${name}` : '';
331
- return `--${name}${value}${negated}`;
332
- }
333
- export function getCommandHelp(command, subcommand) {
334
- const assessment = command === 'governance' && subcommand === 'assess';
335
- const definition = assessment
336
- ? {
337
- description: 'Read-only comparison against the installed CLI policy, activation identity, and control catalog. Local-only by default: no network or credentials required. Exit 0: aligned or explicitly disabled (not-applicable); 2: partial coverage or differences, including approved exceptions; 1: invalid or unsafe input. This is not setup, an upgrade, or permission to remediate.',
338
- usage: '[project-path] [--json] [--live]',
339
- group: 'Operations',
340
- flags: {
341
- project: commandDefinitions.governance.flags.project,
342
- live: booleanFlag('Opt into bounded repository/resource-scoped GitHub/Azure reads using existing permissions; denied or unavailable proof stays not-observed', 'Consent'),
343
- json: booleanFlag('Emit the schema-v1 report with pinned target, findings, provenance, and coverage to stdout; never write state or evidence', 'Output'),
344
- ...helpFlag
345
- },
346
- arguments: commandDefinitions.governance.arguments,
347
- defaultMaxPositionals: 1
348
- }
349
- : commandDefinitions[command];
350
- if (!definition) {
351
- throw new UsageError(`Unknown command for help: ${command}.`);
352
- }
353
- const helpCommand = assessment ? 'governance assess' : command;
354
- const groupedFlags = Object.entries(definition.flags).reduce((groups, entry) => {
355
- const group = entry[1].group;
356
- const entries = groups.get(group) ?? [];
357
- entries.push(entry);
358
- groups.set(group, entries);
359
- return groups;
360
- }, new Map());
361
- return {
362
- command: helpCommand,
363
- description: definition.description,
364
- usage: `liftoff ${helpCommand}${definition.usage ? ` ${definition.usage}` : ''}`,
365
- arguments: (definition.arguments ?? []).map((argument) => ({
366
- syntax: argument.syntax,
367
- description: argument.description
368
- })),
369
- subcommands: [...(definition.subcommands ?? [])],
370
- optionGroups: [...groupedFlags].map(([group, entries]) => ({
371
- title: `${group} options`,
372
- entries: entries.map(([name, flag]) => ({
373
- syntax: flagSyntax(name, flag),
374
- description: flag.description,
375
- ...(flag.defaultValue ? { defaultValue: flag.defaultValue } : {})
376
- }))
377
- }))
378
- };
379
- }
380
- export function formatCommandHelp(command, subcommand) {
381
- const help = getCommandHelp(command, subcommand);
382
- const lines = [
383
- `${help.command} - ${help.description}`,
384
- '',
385
- `Usage: ${help.usage}`
386
- ];
387
- if (help.arguments.length > 0) {
388
- lines.push('', 'Arguments:');
389
- const width = Math.max(...help.arguments.map((argument) => argument.syntax.length));
390
- for (const argument of help.arguments) {
391
- lines.push(` ${argument.syntax.padEnd(width)} ${argument.description}`);
392
- }
393
- }
394
- if (help.subcommands.length > 0) {
395
- lines.push('', `Subcommands: ${help.subcommands.join(', ')}`);
396
- }
397
- for (const group of help.optionGroups) {
398
- lines.push('', `${group.title}:`);
399
- const width = Math.max(...group.entries.map((entry) => entry.syntax.length));
400
- for (const entry of group.entries) {
401
- const defaultValue = entry.defaultValue ? ` (default: ${entry.defaultValue})` : '';
402
- lines.push(` ${entry.syntax.padEnd(width)} ${entry.description}${defaultValue}`);
403
- }
404
- }
405
- return `${lines.join('\n')}\n`;
406
- }
407
- const commandGroupOrder = ['Onboarding', 'Maintenance', 'Reference', 'Operations'];
408
- export function getGeneralHelp(version) {
409
- const commandGroups = commandGroupOrder.flatMap((group) => {
410
- const entries = Object.entries(commandDefinitions)
411
- .filter(([, definition]) => definition.group === group)
412
- .map(([command, definition]) => ({
413
- syntax: command,
414
- description: definition.description
415
- }));
416
- return entries.length > 0 ? [{ title: group, entries }] : [];
417
- });
418
- return {
419
- version,
420
- title: `Mission Control Liftoff ${version}`,
421
- subtitle: 'Initialize a governed application and prepare its local workstation.',
422
- usage: 'liftoff <command> [options]',
423
- globalOptions: [
424
- { syntax: '--version', description: 'Show the installed Liftoff version' },
425
- { syntax: '--help', description: 'Show general help' }
426
- ],
427
- commandGroups,
428
- hint: 'Run `liftoff help <command>` for command-specific usage.'
429
- };
430
- }
431
- export function formatGeneralHelp(version) {
432
- const help = getGeneralHelp(version);
433
- const lines = [
434
- help.title,
435
- help.subtitle,
436
- '',
437
- `Usage: ${help.usage}`,
438
- '',
439
- 'Global options:'
440
- ];
441
- const globalWidth = Math.max(...help.globalOptions.map((option) => option.syntax.length));
442
- for (const option of help.globalOptions) {
443
- lines.push(` ${option.syntax.padEnd(globalWidth)} ${option.description}`);
444
- }
445
- for (const group of help.commandGroups) {
446
- const width = Math.max(...group.entries.map((entry) => entry.syntax.length));
447
- lines.push('', `${group.title}:`);
448
- for (const entry of group.entries) {
449
- lines.push(` ${entry.syntax.padEnd(width)} ${entry.description}`);
450
- }
451
- }
452
- lines.push('', help.hint);
453
- return `${lines.join('\n')}\n`;
454
- }
455
- export function readStringFlag(flags, name) {
456
- const value = flags[name];
457
- return typeof value === 'string' ? value : undefined;
458
- }
459
- export function readBooleanFlag(flags, name) {
460
- const value = flags[name];
461
- return typeof value === 'boolean' ? value : undefined;
462
- }
463
- export function readListFlag(flags, name) {
464
- const value = flags[name];
465
- if (typeof value === 'string') {
466
- return value.split(',').map((item) => item.trim()).filter(Boolean);
467
- }
468
- if (Array.isArray(value)) {
469
- return value;
470
- }
471
- return undefined;
472
- }
1
+ export { commandDefinitions } from './cli/args/definitions.js';
2
+ export { UsageError, parseArgs } from './cli/args/parser.js';
3
+ export { formatCommandHelp, formatGeneralHelp, getCommandHelp, getGeneralHelp } from './cli/args/help.js';
4
+ export { readBooleanFlag, readListFlag, readStringFlag } from './cli/args/readers.js';
473
5
  //# sourceMappingURL=args.js.map