@msn-control/liftoff 0.10.4 → 0.11.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 (700) hide show
  1. package/DEVELOPER.md +238 -77
  2. package/README.md +38 -33
  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 +24 -0
  32. package/dist/adapters/filesystem/project-transaction.js +177 -0
  33. package/dist/adapters/filesystem/project-transaction.js.map +1 -0
  34. package/dist/adapters/filesystem/reviewed-update-transaction.d.ts +53 -0
  35. package/dist/adapters/filesystem/reviewed-update-transaction.js +864 -0
  36. package/dist/adapters/filesystem/reviewed-update-transaction.js.map +1 -0
  37. package/dist/adapters/filesystem/update-previews.d.ts +50 -0
  38. package/dist/adapters/filesystem/update-previews.js +613 -0
  39. package/dist/adapters/filesystem/update-previews.js.map +1 -0
  40. package/dist/adapters/git/governance-assessment.d.ts +22 -0
  41. package/dist/adapters/git/governance-assessment.js +161 -0
  42. package/dist/adapters/git/governance-assessment.js.map +1 -0
  43. package/dist/adapters/github/governance-assessment.d.ts +2 -0
  44. package/dist/adapters/github/governance-assessment.js +18 -0
  45. package/dist/adapters/github/governance-assessment.js.map +1 -0
  46. package/dist/adapters/packaged-assets/package-root.d.ts +3 -0
  47. package/dist/adapters/packaged-assets/package-root.js +21 -0
  48. package/dist/adapters/packaged-assets/package-root.js.map +1 -0
  49. package/dist/adapters/packaged-assets/supported-stack.d.ts +4 -0
  50. package/dist/adapters/packaged-assets/supported-stack.js +18 -0
  51. package/dist/adapters/packaged-assets/supported-stack.js.map +1 -0
  52. package/dist/adapters/packaged-assets/template-assets.d.ts +23 -0
  53. package/dist/adapters/packaged-assets/template-assets.js +36 -0
  54. package/dist/adapters/packaged-assets/template-assets.js.map +1 -0
  55. package/dist/adapters/process/shell-command.d.ts +6 -0
  56. package/dist/adapters/process/shell-command.js +27 -0
  57. package/dist/adapters/process/shell-command.js.map +1 -0
  58. package/dist/application/context.d.ts +25 -0
  59. package/dist/application/context.js +2 -0
  60. package/dist/application/context.js.map +1 -0
  61. package/dist/application/diagnose/doctor.d.ts +21 -0
  62. package/dist/application/diagnose/doctor.js +580 -0
  63. package/dist/application/diagnose/doctor.js.map +1 -0
  64. package/dist/application/diagnose/generated-project.d.ts +1 -0
  65. package/dist/application/diagnose/generated-project.js +105 -0
  66. package/dist/application/diagnose/generated-project.js.map +1 -0
  67. package/dist/application/diagnose/validate.d.ts +6 -0
  68. package/dist/application/diagnose/validate.js +27 -0
  69. package/dist/application/diagnose/validate.js.map +1 -0
  70. package/dist/application/initialize/fixture.d.ts +2 -0
  71. package/dist/application/initialize/fixture.js +39 -0
  72. package/dist/application/initialize/fixture.js.map +1 -0
  73. package/dist/application/initialize/inputs.d.ts +3 -0
  74. package/dist/application/initialize/inputs.js +35 -0
  75. package/dist/application/initialize/inputs.js.map +1 -0
  76. package/dist/application/initialize/use-case.d.ts +23 -0
  77. package/dist/application/initialize/use-case.js +360 -0
  78. package/dist/application/initialize/use-case.js.map +1 -0
  79. package/dist/application/migrate/use-case.d.ts +7 -0
  80. package/dist/application/migrate/use-case.js +378 -0
  81. package/dist/application/migrate/use-case.js.map +1 -0
  82. package/dist/application/project/catalog.d.ts +46 -0
  83. package/dist/application/project/catalog.js +12 -0
  84. package/dist/application/project/catalog.js.map +1 -0
  85. package/dist/application/project/manifest.d.ts +2 -0
  86. package/dist/application/project/manifest.js +29 -0
  87. package/dist/application/project/manifest.js.map +1 -0
  88. package/dist/application/project/planning.d.ts +6 -0
  89. package/dist/application/project/planning.js +12 -0
  90. package/dist/application/project/planning.js.map +1 -0
  91. package/dist/application/update/approval.d.ts +39 -0
  92. package/dist/application/update/approval.js +54 -0
  93. package/dist/application/update/approval.js.map +1 -0
  94. package/dist/application/update/command-guidance.d.ts +2 -0
  95. package/dist/application/update/command-guidance.js +14 -0
  96. package/dist/application/update/command-guidance.js.map +1 -0
  97. package/dist/application/update/inspection.d.ts +37 -0
  98. package/dist/application/update/inspection.js +235 -0
  99. package/dist/application/update/inspection.js.map +1 -0
  100. package/dist/application/update/migration-runtime.d.ts +14 -0
  101. package/dist/application/update/migration-runtime.js +178 -0
  102. package/dist/application/update/migration-runtime.js.map +1 -0
  103. package/dist/application/update/output.d.ts +134 -0
  104. package/dist/application/update/output.js +182 -0
  105. package/dist/application/update/output.js.map +1 -0
  106. package/dist/application/update/planning.d.ts +40 -0
  107. package/dist/application/update/planning.js +293 -0
  108. package/dist/application/update/planning.js.map +1 -0
  109. package/dist/application/update/preview.d.ts +49 -0
  110. package/dist/application/update/preview.js +220 -0
  111. package/dist/application/update/preview.js.map +1 -0
  112. package/dist/application/update/protected-source.d.ts +25 -0
  113. package/dist/application/update/protected-source.js +81 -0
  114. package/dist/application/update/protected-source.js.map +1 -0
  115. package/dist/application/update/reporting.d.ts +42 -0
  116. package/dist/application/update/reporting.js +326 -0
  117. package/dist/application/update/reporting.js.map +1 -0
  118. package/dist/application/update/revalidation-plan.d.ts +22 -0
  119. package/dist/application/update/revalidation-plan.js +108 -0
  120. package/dist/application/update/revalidation-plan.js.map +1 -0
  121. package/dist/application/update/revalidation.d.ts +70 -0
  122. package/dist/application/update/revalidation.js +337 -0
  123. package/dist/application/update/revalidation.js.map +1 -0
  124. package/dist/application/update/review-plan.d.ts +25 -0
  125. package/dist/application/update/review-plan.js +89 -0
  126. package/dist/application/update/review-plan.js.map +1 -0
  127. package/dist/application/update/transaction-approval.d.ts +29 -0
  128. package/dist/application/update/transaction-approval.js +82 -0
  129. package/dist/application/update/transaction-approval.js.map +1 -0
  130. package/dist/application/update/use-case.d.ts +9 -0
  131. package/dist/application/update/use-case.js +271 -0
  132. package/dist/application/update/use-case.js.map +1 -0
  133. package/dist/application/update/write-plan.d.ts +15 -0
  134. package/dist/application/update/write-plan.js +115 -0
  135. package/dist/application/update/write-plan.js.map +1 -0
  136. package/dist/application/upgrade/use-case.d.ts +6 -0
  137. package/dist/application/upgrade/use-case.js +82 -0
  138. package/dist/application/upgrade/use-case.js.map +1 -0
  139. package/dist/args.d.ts +5 -65
  140. package/dist/args.js +4 -472
  141. package/dist/args.js.map +1 -1
  142. package/dist/artifact-lifecycle.d.ts +1 -21
  143. package/dist/artifact-lifecycle.js +1 -75
  144. package/dist/artifact-lifecycle.js.map +1 -1
  145. package/dist/catalogs.d.ts +1 -50
  146. package/dist/catalogs.js +1 -472
  147. package/dist/catalogs.js.map +1 -1
  148. package/dist/cli/args/contracts.d.ts +51 -0
  149. package/dist/cli/args/contracts.js +2 -0
  150. package/dist/cli/args/contracts.js.map +1 -0
  151. package/dist/cli/args/definitions.d.ts +6 -0
  152. package/dist/cli/args/definitions.js +188 -0
  153. package/dist/cli/args/definitions.js.map +1 -0
  154. package/dist/cli/args/help.d.ts +5 -0
  155. package/dist/cli/args/help.js +142 -0
  156. package/dist/cli/args/help.js.map +1 -0
  157. package/dist/cli/args/parser.d.ts +5 -0
  158. package/dist/cli/args/parser.js +160 -0
  159. package/dist/cli/args/parser.js.map +1 -0
  160. package/dist/cli/args/readers.d.ts +4 -0
  161. package/dist/cli/args/readers.js +19 -0
  162. package/dist/cli/args/readers.js.map +1 -0
  163. package/dist/cli/commands/diagnose.d.ts +4 -0
  164. package/dist/cli/commands/diagnose.js +12 -0
  165. package/dist/cli/commands/diagnose.js.map +1 -0
  166. package/dist/cli/commands/dispatch.d.ts +3 -0
  167. package/dist/cli/commands/dispatch.js +94 -0
  168. package/dist/cli/commands/dispatch.js.map +1 -0
  169. package/dist/cli/commands/help.d.ts +3 -0
  170. package/dist/cli/commands/help.js +32 -0
  171. package/dist/cli/commands/help.js.map +1 -0
  172. package/dist/cli/commands/helpers.d.ts +8 -0
  173. package/dist/cli/commands/helpers.js +97 -0
  174. package/dist/cli/commands/helpers.js.map +1 -0
  175. package/dist/cli/commands/initialize.d.ts +3 -0
  176. package/dist/cli/commands/initialize.js +7 -0
  177. package/dist/cli/commands/initialize.js.map +1 -0
  178. package/dist/cli/commands/migrate.d.ts +3 -0
  179. package/dist/cli/commands/migrate.js +8 -0
  180. package/dist/cli/commands/migrate.js.map +1 -0
  181. package/dist/cli/commands/plan.d.ts +3 -0
  182. package/dist/cli/commands/plan.js +34 -0
  183. package/dist/cli/commands/plan.js.map +1 -0
  184. package/dist/cli/commands/reference.d.ts +5 -0
  185. package/dist/cli/commands/reference.js +43 -0
  186. package/dist/cli/commands/reference.js.map +1 -0
  187. package/dist/cli/commands/update.d.ts +3 -0
  188. package/dist/cli/commands/update.js +10 -0
  189. package/dist/cli/commands/update.js.map +1 -0
  190. package/dist/cli/commands/upgrade.d.ts +3 -0
  191. package/dist/cli/commands/upgrade.js +7 -0
  192. package/dist/cli/commands/upgrade.js.map +1 -0
  193. package/dist/cli/context.d.ts +1 -0
  194. package/dist/cli/context.js +2 -0
  195. package/dist/cli/context.js.map +1 -0
  196. package/dist/cli/project-options.d.ts +3 -0
  197. package/dist/cli/project-options.js +41 -0
  198. package/dist/cli/project-options.js.map +1 -0
  199. package/dist/cli.d.ts +3 -3
  200. package/dist/cli.js +2 -2
  201. package/dist/cli.js.map +1 -1
  202. package/dist/commands.d.ts +4 -35
  203. package/dist/commands.js +3 -2969
  204. package/dist/commands.js.map +1 -1
  205. package/dist/container-validation.d.ts +1 -1
  206. package/dist/domain/governance/activation/approvals.d.ts +351 -0
  207. package/dist/domain/governance/activation/approvals.js +528 -0
  208. package/dist/domain/governance/activation/approvals.js.map +1 -0
  209. package/dist/domain/governance/activation/canonical-json.d.ts +4 -0
  210. package/dist/domain/governance/activation/canonical-json.js +39 -0
  211. package/dist/domain/governance/activation/canonical-json.js.map +1 -0
  212. package/dist/domain/governance/activation/capabilities.d.ts +7 -0
  213. package/dist/domain/governance/activation/capabilities.js +33 -0
  214. package/dist/domain/governance/activation/capabilities.js.map +1 -0
  215. package/dist/domain/governance/activation/evidence.d.ts +63 -0
  216. package/dist/domain/governance/activation/evidence.js +444 -0
  217. package/dist/domain/governance/activation/evidence.js.map +1 -0
  218. package/dist/domain/governance/activation/graph.d.ts +397 -0
  219. package/dist/domain/governance/activation/graph.js +441 -0
  220. package/dist/domain/governance/activation/graph.js.map +1 -0
  221. package/dist/domain/governance/activation/inputs.d.ts +25 -0
  222. package/dist/domain/governance/activation/inputs.js +63 -0
  223. package/dist/domain/governance/activation/inputs.js.map +1 -0
  224. package/dist/domain/governance/activation/operations.d.ts +19 -0
  225. package/dist/domain/governance/activation/operations.js +181 -0
  226. package/dist/domain/governance/activation/operations.js.map +1 -0
  227. package/dist/domain/governance/activation/readiness.d.ts +27 -0
  228. package/dist/domain/governance/activation/readiness.js +269 -0
  229. package/dist/domain/governance/activation/readiness.js.map +1 -0
  230. package/dist/domain/governance/activation/types.d.ts +399 -0
  231. package/dist/domain/governance/activation/types.js +109 -0
  232. package/dist/domain/governance/activation/types.js.map +1 -0
  233. package/dist/domain/governance/activation/validators.d.ts +22 -0
  234. package/dist/domain/governance/activation/validators.js +1347 -0
  235. package/dist/domain/governance/activation/validators.js.map +1 -0
  236. package/dist/domain/governance/assessment/catalog.d.ts +14 -0
  237. package/dist/domain/governance/assessment/catalog.js +105 -0
  238. package/dist/domain/governance/assessment/catalog.js.map +1 -0
  239. package/dist/domain/governance/assessment/errors.d.ts +10 -0
  240. package/dist/domain/governance/assessment/errors.js +22 -0
  241. package/dist/domain/governance/assessment/errors.js.map +1 -0
  242. package/dist/domain/governance/assessment/index.d.ts +8 -0
  243. package/dist/domain/governance/assessment/index.js +9 -0
  244. package/dist/domain/governance/assessment/index.js.map +1 -0
  245. package/dist/domain/governance/assessment/live-normalize.d.ts +19 -0
  246. package/dist/domain/governance/assessment/live-normalize.js +403 -0
  247. package/dist/domain/governance/assessment/live-normalize.js.map +1 -0
  248. package/dist/domain/governance/assessment/predicates.d.ts +36 -0
  249. package/dist/domain/governance/assessment/predicates.js +545 -0
  250. package/dist/domain/governance/assessment/predicates.js.map +1 -0
  251. package/dist/domain/governance/assessment/report.d.ts +23 -0
  252. package/dist/domain/governance/assessment/report.js +266 -0
  253. package/dist/domain/governance/assessment/report.js.map +1 -0
  254. package/dist/domain/governance/assessment/sanitize.d.ts +8 -0
  255. package/dist/domain/governance/assessment/sanitize.js +60 -0
  256. package/dist/domain/governance/assessment/sanitize.js.map +1 -0
  257. package/dist/domain/governance/assessment/types.d.ts +174 -0
  258. package/dist/domain/governance/assessment/types.js +13 -0
  259. package/dist/domain/governance/assessment/types.js.map +1 -0
  260. package/dist/domain/governance/assessment/yaml.d.ts +6 -0
  261. package/dist/domain/governance/assessment/yaml.js +30 -0
  262. package/dist/domain/governance/assessment/yaml.js.map +1 -0
  263. package/dist/domain/governance/policy/identity.d.ts +64 -0
  264. package/dist/domain/governance/policy/identity.js +112 -0
  265. package/dist/domain/governance/policy/identity.js.map +1 -0
  266. package/dist/domain/migration/dependencies.d.ts +7 -0
  267. package/dist/domain/migration/dependencies.js +221 -0
  268. package/dist/domain/migration/dependencies.js.map +1 -0
  269. package/dist/domain/migration/inventory.d.ts +3 -0
  270. package/dist/domain/migration/inventory.js +15 -0
  271. package/dist/domain/migration/inventory.js.map +1 -0
  272. package/dist/domain/project/artifact-lifecycle.d.ts +69 -0
  273. package/dist/domain/project/artifact-lifecycle.js +137 -0
  274. package/dist/domain/project/artifact-lifecycle.js.map +1 -0
  275. package/dist/domain/project/catalog.d.ts +48 -0
  276. package/dist/domain/project/catalog.js +507 -0
  277. package/dist/domain/project/catalog.js.map +1 -0
  278. package/dist/domain/project/contracts.d.ts +247 -0
  279. package/dist/domain/project/contracts.js +2 -0
  280. package/dist/domain/project/contracts.js.map +1 -0
  281. package/dist/domain/project/errors.d.ts +3 -0
  282. package/dist/domain/project/errors.js +7 -0
  283. package/dist/domain/project/errors.js.map +1 -0
  284. package/dist/domain/project/infrastructure-layout.d.ts +26 -0
  285. package/dist/domain/project/infrastructure-layout.js +125 -0
  286. package/dist/domain/project/infrastructure-layout.js.map +1 -0
  287. package/dist/domain/project/inputs.d.ts +21 -0
  288. package/dist/domain/project/inputs.js +41 -0
  289. package/dist/domain/project/inputs.js.map +1 -0
  290. package/dist/domain/project/manifest/artifacts.d.ts +8 -0
  291. package/dist/domain/project/manifest/artifacts.js +150 -0
  292. package/dist/domain/project/manifest/artifacts.js.map +1 -0
  293. package/dist/domain/project/manifest/context.d.ts +13 -0
  294. package/dist/domain/project/manifest/context.js +2 -0
  295. package/dist/domain/project/manifest/context.js.map +1 -0
  296. package/dist/domain/project/manifest/fields.d.ts +6 -0
  297. package/dist/domain/project/manifest/fields.js +36 -0
  298. package/dist/domain/project/manifest/fields.js.map +1 -0
  299. package/dist/domain/project/manifest/governance.d.ts +8 -0
  300. package/dist/domain/project/manifest/governance.js +161 -0
  301. package/dist/domain/project/manifest/governance.js.map +1 -0
  302. package/dist/domain/project/manifest/project-identity.d.ts +6 -0
  303. package/dist/domain/project/manifest/project-identity.js +273 -0
  304. package/dist/domain/project/manifest/project-identity.js.map +1 -0
  305. package/dist/domain/project/manifest/reader.d.ts +9 -0
  306. package/dist/domain/project/manifest/reader.js +141 -0
  307. package/dist/domain/project/manifest/reader.js.map +1 -0
  308. package/dist/domain/project/paths.d.ts +2 -0
  309. package/dist/domain/project/paths.js +29 -0
  310. package/dist/domain/project/paths.js.map +1 -0
  311. package/dist/domain/project/planning.d.ts +19 -0
  312. package/dist/domain/project/planning.js +329 -0
  313. package/dist/domain/project/planning.js.map +1 -0
  314. package/dist/domain/project/retired-workload.d.ts +4 -0
  315. package/dist/domain/project/retired-workload.js +18 -0
  316. package/dist/domain/project/retired-workload.js.map +1 -0
  317. package/dist/domain/project/reviewed-update-artifacts.d.ts +2 -0
  318. package/dist/domain/project/reviewed-update-artifacts.js +3 -0
  319. package/dist/domain/project/reviewed-update-artifacts.js.map +1 -0
  320. package/dist/domain/project/supported-stack.d.ts +113 -0
  321. package/dist/domain/project/supported-stack.js +426 -0
  322. package/dist/domain/project/supported-stack.js.map +1 -0
  323. package/dist/domain/workstation/constraints.d.ts +6 -0
  324. package/dist/domain/workstation/constraints.js +8 -0
  325. package/dist/domain/workstation/constraints.js.map +1 -0
  326. package/dist/file-system.d.ts +10 -44
  327. package/dist/file-system.js +9 -1245
  328. package/dist/file-system.js.map +1 -1
  329. package/dist/framework-adapters.d.ts +1 -1
  330. package/dist/framework-validation.d.ts +1 -1
  331. package/dist/framework-validation.js +1 -1
  332. package/dist/framework-validation.js.map +1 -1
  333. package/dist/genai-templates.d.ts +2 -9
  334. package/dist/genai-templates.js +4 -5
  335. package/dist/genai-templates.js.map +1 -1
  336. package/dist/generators/common/artifacts.d.ts +6 -0
  337. package/dist/generators/common/artifacts.js +30 -0
  338. package/dist/generators/common/artifacts.js.map +1 -0
  339. package/dist/generators/common/base.d.ts +17 -0
  340. package/dist/generators/common/base.js +425 -0
  341. package/dist/generators/common/base.js.map +1 -0
  342. package/dist/generators/common/dotenv-validation.d.ts +2 -0
  343. package/dist/generators/common/dotenv-validation.js +80 -0
  344. package/dist/generators/common/dotenv-validation.js.map +1 -0
  345. package/dist/generators/common/environments.d.ts +3 -0
  346. package/dist/generators/common/environments.js +15 -0
  347. package/dist/generators/common/environments.js.map +1 -0
  348. package/dist/generators/common/frontend.d.ts +15 -0
  349. package/dist/generators/common/frontend.js +166 -0
  350. package/dist/generators/common/frontend.js.map +1 -0
  351. package/dist/generators/common/python-settings.d.ts +2 -0
  352. package/dist/generators/common/python-settings.js +70 -0
  353. package/dist/generators/common/python-settings.js.map +1 -0
  354. package/dist/generators/common/spec-workflow.d.ts +28 -0
  355. package/dist/generators/common/spec-workflow.js +567 -0
  356. package/dist/generators/common/spec-workflow.js.map +1 -0
  357. package/dist/generators/common/values.d.ts +13 -0
  358. package/dist/generators/common/values.js +16 -0
  359. package/dist/generators/common/values.js.map +1 -0
  360. package/dist/generators/containers/compose.d.ts +7 -0
  361. package/dist/generators/containers/compose.js +196 -0
  362. package/dist/generators/containers/compose.js.map +1 -0
  363. package/dist/generators/containers/context.d.ts +1 -0
  364. package/dist/generators/containers/context.js +43 -0
  365. package/dist/generators/containers/context.js.map +1 -0
  366. package/dist/generators/containers/images.d.ts +7 -0
  367. package/dist/generators/containers/images.js +119 -0
  368. package/dist/generators/containers/images.js.map +1 -0
  369. package/dist/generators/context.d.ts +42 -0
  370. package/dist/generators/context.js +38 -0
  371. package/dist/generators/context.js.map +1 -0
  372. package/dist/generators/genai/backend.d.ts +20 -0
  373. package/dist/generators/genai/backend.js +667 -0
  374. package/dist/generators/genai/backend.js.map +1 -0
  375. package/dist/generators/genai/configuration.d.ts +3 -0
  376. package/dist/generators/genai/configuration.js +43 -0
  377. package/dist/generators/genai/configuration.js.map +1 -0
  378. package/dist/generators/genai/database.d.ts +7 -0
  379. package/dist/generators/genai/database.js +71 -0
  380. package/dist/generators/genai/database.js.map +1 -0
  381. package/dist/generators/genai/functions.d.ts +15 -0
  382. package/dist/generators/genai/functions.js +156 -0
  383. package/dist/generators/genai/functions.js.map +1 -0
  384. package/dist/generators/genai/index.d.ts +8 -0
  385. package/dist/generators/genai/index.js +11 -0
  386. package/dist/generators/genai/index.js.map +1 -0
  387. package/dist/generators/genai/patterns.d.ts +9 -0
  388. package/dist/generators/genai/patterns.js +309 -0
  389. package/dist/generators/genai/patterns.js.map +1 -0
  390. package/dist/generators/infrastructure/azure.d.ts +18 -0
  391. package/dist/generators/infrastructure/azure.js +655 -0
  392. package/dist/generators/infrastructure/azure.js.map +1 -0
  393. package/dist/generators/infrastructure/names.d.ts +23 -0
  394. package/dist/generators/infrastructure/names.js +51 -0
  395. package/dist/generators/infrastructure/names.js.map +1 -0
  396. package/dist/generators/standard/configuration.d.ts +3 -0
  397. package/dist/generators/standard/configuration.js +26 -0
  398. package/dist/generators/standard/configuration.js.map +1 -0
  399. package/dist/generators/standard/go.d.ts +17 -0
  400. package/dist/generators/standard/go.js +338 -0
  401. package/dist/generators/standard/go.js.map +1 -0
  402. package/dist/generators/standard/index.d.ts +12 -0
  403. package/dist/generators/standard/index.js +12 -0
  404. package/dist/generators/standard/index.js.map +1 -0
  405. package/dist/generators/standard/node.d.ts +20 -0
  406. package/dist/generators/standard/node.js +314 -0
  407. package/dist/generators/standard/node.js.map +1 -0
  408. package/dist/generators/standard/python.d.ts +18 -0
  409. package/dist/generators/standard/python.js +191 -0
  410. package/dist/generators/standard/python.js.map +1 -0
  411. package/dist/go-template-assets.js +3 -3
  412. package/dist/go-template-assets.js.map +1 -1
  413. package/dist/governance-activation/activation-state.d.ts +1 -1
  414. package/dist/governance-activation/activation-state.js +49 -9
  415. package/dist/governance-activation/activation-state.js.map +1 -1
  416. package/dist/governance-activation/approvals.d.ts +1 -188
  417. package/dist/governance-activation/approvals.js +1 -507
  418. package/dist/governance-activation/approvals.js.map +1 -1
  419. package/dist/governance-activation/canonical-json.d.ts +1 -3
  420. package/dist/governance-activation/canonical-json.js +1 -35
  421. package/dist/governance-activation/canonical-json.js.map +1 -1
  422. package/dist/governance-activation/commands.d.ts +6 -1
  423. package/dist/governance-activation/commands.js +135 -107
  424. package/dist/governance-activation/commands.js.map +1 -1
  425. package/dist/governance-activation/compatibility.d.ts +30 -5
  426. package/dist/governance-activation/compatibility.js +74 -8
  427. package/dist/governance-activation/compatibility.js.map +1 -1
  428. package/dist/governance-activation/credentials.d.ts +3 -3
  429. package/dist/governance-activation/credentials.js +5 -5
  430. package/dist/governance-activation/credentials.js.map +1 -1
  431. package/dist/governance-activation/doctor.d.ts +1 -1
  432. package/dist/governance-activation/doctor.js +59 -100
  433. package/dist/governance-activation/doctor.js.map +1 -1
  434. package/dist/governance-activation/evidence.d.ts +1 -49
  435. package/dist/governance-activation/evidence.js +1 -245
  436. package/dist/governance-activation/evidence.js.map +1 -1
  437. package/dist/governance-activation/git-ignore.d.ts +9 -0
  438. package/dist/governance-activation/git-ignore.js +76 -0
  439. package/dist/governance-activation/git-ignore.js.map +1 -0
  440. package/dist/governance-activation/graph.d.ts +1 -397
  441. package/dist/governance-activation/graph.js +1 -440
  442. package/dist/governance-activation/graph.js.map +1 -1
  443. package/dist/governance-activation/historical-state.d.ts +81 -0
  444. package/dist/governance-activation/historical-state.js +817 -0
  445. package/dist/governance-activation/historical-state.js.map +1 -0
  446. package/dist/governance-activation/history-contracts.d.ts +109 -0
  447. package/dist/governance-activation/history-contracts.js +303 -0
  448. package/dist/governance-activation/history-contracts.js.map +1 -0
  449. package/dist/governance-activation/identity.d.ts +1 -35
  450. package/dist/governance-activation/identity.js +1 -88
  451. package/dist/governance-activation/identity.js.map +1 -1
  452. package/dist/governance-activation/index.d.ts +3 -0
  453. package/dist/governance-activation/index.js +3 -0
  454. package/dist/governance-activation/index.js.map +1 -1
  455. package/dist/governance-activation/inputs.d.ts +10 -0
  456. package/dist/governance-activation/inputs.js +158 -0
  457. package/dist/governance-activation/inputs.js.map +1 -0
  458. package/dist/governance-activation/migration-history.d.ts +97 -0
  459. package/dist/governance-activation/migration-history.js +388 -0
  460. package/dist/governance-activation/migration-history.js.map +1 -0
  461. package/dist/governance-activation/migration.d.ts +4 -3
  462. package/dist/governance-activation/migration.js +14 -6
  463. package/dist/governance-activation/migration.js.map +1 -1
  464. package/dist/governance-activation/phase-bootstrap-state.d.ts +3 -0
  465. package/dist/governance-activation/phase-bootstrap-state.js +128 -0
  466. package/dist/governance-activation/phase-bootstrap-state.js.map +1 -0
  467. package/dist/governance-activation/phase-discovery.d.ts +2 -0
  468. package/dist/governance-activation/phase-discovery.js +88 -0
  469. package/dist/governance-activation/phase-discovery.js.map +1 -0
  470. package/dist/governance-activation/phase-governance.d.ts +4 -0
  471. package/dist/governance-activation/phase-governance.js +141 -0
  472. package/dist/governance-activation/phase-governance.js.map +1 -0
  473. package/dist/governance-activation/phase-publication.d.ts +8 -0
  474. package/dist/governance-activation/phase-publication.js +318 -0
  475. package/dist/governance-activation/phase-publication.js.map +1 -0
  476. package/dist/governance-activation/proof-records.d.ts +3 -0
  477. package/dist/governance-activation/proof-records.js +78 -0
  478. package/dist/governance-activation/proof-records.js.map +1 -0
  479. package/dist/governance-activation/read-only.d.ts +30 -0
  480. package/dist/governance-activation/read-only.js +33 -0
  481. package/dist/governance-activation/read-only.js.map +1 -0
  482. package/dist/governance-activation/readiness.d.ts +1 -25
  483. package/dist/governance-activation/readiness.js +1 -222
  484. package/dist/governance-activation/readiness.js.map +1 -1
  485. package/dist/governance-activation/reconciliation.d.ts +1 -1
  486. package/dist/governance-activation/reconciliation.js +3 -3
  487. package/dist/governance-activation/reconciliation.js.map +1 -1
  488. package/dist/governance-activation/release-integrity.d.ts +1 -1
  489. package/dist/governance-activation/release-integrity.js +2 -2
  490. package/dist/governance-activation/release-integrity.js.map +1 -1
  491. package/dist/governance-activation/seed-lifecycle.d.ts +36 -6
  492. package/dist/governance-activation/seed-lifecycle.js +444 -77
  493. package/dist/governance-activation/seed-lifecycle.js.map +1 -1
  494. package/dist/governance-activation/source-of-truth.d.ts +5 -3
  495. package/dist/governance-activation/source-of-truth.js +32 -52
  496. package/dist/governance-activation/source-of-truth.js.map +1 -1
  497. package/dist/governance-activation/spec-kit-seed.d.ts +9 -0
  498. package/dist/governance-activation/spec-kit-seed.js +43 -0
  499. package/dist/governance-activation/spec-kit-seed.js.map +1 -0
  500. package/dist/governance-activation/task-projection.d.ts +1 -1
  501. package/dist/governance-activation/transition-planning.d.ts +17 -0
  502. package/dist/governance-activation/transition-planning.js +259 -0
  503. package/dist/governance-activation/transition-planning.js.map +1 -0
  504. package/dist/governance-activation/transition-ports.d.ts +150 -0
  505. package/dist/governance-activation/transition-ports.js +2 -0
  506. package/dist/governance-activation/transition-ports.js.map +1 -0
  507. package/dist/governance-activation/transition-process.d.ts +7 -0
  508. package/dist/governance-activation/transition-process.js +21 -0
  509. package/dist/governance-activation/transition-process.js.map +1 -0
  510. package/dist/governance-activation/transition-records.d.ts +56 -0
  511. package/dist/governance-activation/transition-records.js +208 -0
  512. package/dist/governance-activation/transition-records.js.map +1 -0
  513. package/dist/governance-activation/transitions.d.ts +14 -167
  514. package/dist/governance-activation/transitions.js +173 -2061
  515. package/dist/governance-activation/transitions.js.map +1 -1
  516. package/dist/governance-activation/types.d.ts +1 -390
  517. package/dist/governance-activation/types.js +1 -107
  518. package/dist/governance-activation/types.js.map +1 -1
  519. package/dist/governance-activation/validators.d.ts +1 -17
  520. package/dist/governance-activation/validators.js +1 -1304
  521. package/dist/governance-activation/validators.js.map +1 -1
  522. package/dist/governance-assessment/catalog.d.ts +1 -2
  523. package/dist/governance-assessment/catalog.js +18 -85
  524. package/dist/governance-assessment/catalog.js.map +1 -1
  525. package/dist/governance-assessment/command.d.ts +1 -1
  526. package/dist/governance-assessment/command.js +8 -12
  527. package/dist/governance-assessment/command.js.map +1 -1
  528. package/dist/governance-assessment/engine.d.ts +6 -11
  529. package/dist/governance-assessment/engine.js +490 -114
  530. package/dist/governance-assessment/engine.js.map +1 -1
  531. package/dist/governance-assessment/live-normalize.d.ts +1 -19
  532. package/dist/governance-assessment/live-normalize.js +1 -402
  533. package/dist/governance-assessment/live-normalize.js.map +1 -1
  534. package/dist/governance-assessment/live-transport.d.ts +2 -6
  535. package/dist/governance-assessment/live-transport.js +10 -22
  536. package/dist/governance-assessment/live-transport.js.map +1 -1
  537. package/dist/governance-assessment/live.js +55 -5
  538. package/dist/governance-assessment/live.js.map +1 -1
  539. package/dist/governance-assessment/predicates.d.ts +1 -27
  540. package/dist/governance-assessment/predicates.js +1 -329
  541. package/dist/governance-assessment/predicates.js.map +1 -1
  542. package/dist/governance-assessment/project.d.ts +20 -17
  543. package/dist/governance-assessment/project.js +101 -151
  544. package/dist/governance-assessment/project.js.map +1 -1
  545. package/dist/governance-assessment/readers.d.ts +1 -5
  546. package/dist/governance-assessment/readers.js +5 -13
  547. package/dist/governance-assessment/readers.js.map +1 -1
  548. package/dist/governance-assessment/report.d.ts +1 -23
  549. package/dist/governance-assessment/report.js +1 -265
  550. package/dist/governance-assessment/report.js.map +1 -1
  551. package/dist/governance-assessment/sanitize.d.ts +1 -8
  552. package/dist/governance-assessment/sanitize.js +1 -56
  553. package/dist/governance-assessment/sanitize.js.map +1 -1
  554. package/dist/governance-assessment/types.d.ts +1 -173
  555. package/dist/governance-assessment/types.js +1 -12
  556. package/dist/governance-assessment/types.js.map +1 -1
  557. package/dist/governance-assessment/yaml.d.ts +1 -6
  558. package/dist/governance-assessment/yaml.js +1 -29
  559. package/dist/governance-assessment/yaml.js.map +1 -1
  560. package/dist/init-filesystem.d.ts +1 -1
  561. package/dist/init-filesystem.js +126 -174
  562. package/dist/init-filesystem.js.map +1 -1
  563. package/dist/interactive.d.ts +2 -2
  564. package/dist/interactive.js +42 -41
  565. package/dist/interactive.js.map +1 -1
  566. package/dist/migrate-plan.d.ts +1 -1
  567. package/dist/migrate-plan.js +14 -8
  568. package/dist/migrate-plan.js.map +1 -1
  569. package/dist/npm-template-assets.js +5 -4
  570. package/dist/npm-template-assets.js.map +1 -1
  571. package/dist/openspec-profile.d.ts +1 -1
  572. package/dist/opentofu-template-assets.js +3 -3
  573. package/dist/opentofu-template-assets.js.map +1 -1
  574. package/dist/package-identity.d.ts +3 -0
  575. package/dist/package-identity.js +13 -2
  576. package/dist/package-identity.js.map +1 -1
  577. package/dist/planner.d.ts +1 -19
  578. package/dist/planner.js +1 -565
  579. package/dist/planner.js.map +1 -1
  580. package/dist/process-runner.d.ts +1 -1
  581. package/dist/project-dependencies.d.ts +5 -3
  582. package/dist/project-dependencies.js +74 -63
  583. package/dist/project-dependencies.js.map +1 -1
  584. package/dist/published-verifier.js +61 -30
  585. package/dist/published-verifier.js.map +1 -1
  586. package/dist/python-template-assets.js +6 -9
  587. package/dist/python-template-assets.js.map +1 -1
  588. package/dist/reconcile.d.ts +1 -1
  589. package/dist/reconcile.js +2 -2
  590. package/dist/reconcile.js.map +1 -1
  591. package/dist/repository-governance.d.ts +5 -2
  592. package/dist/repository-governance.js +140 -113
  593. package/dist/repository-governance.js.map +1 -1
  594. package/dist/runtime.js +1 -1
  595. package/dist/runtime.js.map +1 -1
  596. package/dist/scan.d.ts +6 -2
  597. package/dist/scan.js +78 -30
  598. package/dist/scan.js.map +1 -1
  599. package/dist/self-upgrade.d.ts +1 -1
  600. package/dist/self-upgrade.js +20 -7
  601. package/dist/self-upgrade.js.map +1 -1
  602. package/dist/stable-release.js +7 -1
  603. package/dist/stable-release.js.map +1 -1
  604. package/dist/standard-templates.d.ts +2 -2
  605. package/dist/standard-templates.js +6 -841
  606. package/dist/standard-templates.js.map +1 -1
  607. package/dist/supported-stack.d.ts +3 -115
  608. package/dist/supported-stack.js +4 -438
  609. package/dist/supported-stack.js.map +1 -1
  610. package/dist/telemetry/index.d.ts +1 -1
  611. package/dist/templates.d.ts +10 -20
  612. package/dist/templates.js +52 -3261
  613. package/dist/templates.js.map +1 -1
  614. package/dist/types.d.ts +1 -263
  615. package/dist/types.js +1 -1
  616. package/dist/types.js.map +1 -1
  617. package/dist/version.js +2 -6
  618. package/dist/version.js.map +1 -1
  619. package/dist/workstation-catalog.d.ts +5 -2
  620. package/dist/workstation-catalog.js +33 -2
  621. package/dist/workstation-catalog.js.map +1 -1
  622. package/dist/workstation.d.ts +4 -3
  623. package/dist/workstation.js +86 -32
  624. package/dist/workstation.js.map +1 -1
  625. package/docs/assets/liftoff-terminal.svg +3 -3
  626. package/docs/azure-deployment.md +107 -10
  627. package/docs/cli-reference.md +144 -35
  628. package/docs/configuration-and-manifests.md +152 -35
  629. package/docs/existing-repositories.md +48 -12
  630. package/docs/getting-started.md +44 -31
  631. package/docs/prerequisites.md +34 -35
  632. package/docs/project-structure.md +39 -46
  633. package/docs/repository-governance.md +96 -26
  634. package/docs/safety-and-consent.md +90 -28
  635. package/docs/spec-workflows-and-agents.md +31 -28
  636. package/docs/supported-stack.md +11 -9
  637. package/docs/troubleshooting.md +114 -54
  638. package/docs/workloads.md +52 -67
  639. package/package.json +4 -7
  640. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/UPSTREAM_LICENSE.txt +0 -21
  641. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/catalog.json +0 -520
  642. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/packaged/gitignore +0 -27
  643. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/README.md +0 -25
  644. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/components.json +0 -22
  645. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/eslint.config.js +0 -23
  646. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/index.html +0 -13
  647. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/package-lock.json +0 -6156
  648. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/package.json +0 -60
  649. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/public/power-apps.svg +0 -55
  650. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/App.tsx +0 -17
  651. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/assets/react.svg +0 -1
  652. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/mode-toggle.tsx +0 -37
  653. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/badge.tsx +0 -46
  654. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/button.tsx +0 -60
  655. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/calendar.tsx +0 -211
  656. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/card.tsx +0 -92
  657. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/chart.tsx +0 -355
  658. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/checkbox.tsx +0 -32
  659. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/command.tsx +0 -184
  660. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/dialog.tsx +0 -141
  661. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/dropdown-menu.tsx +0 -257
  662. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/input.tsx +0 -21
  663. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/label.tsx +0 -22
  664. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/popover.tsx +0 -46
  665. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/progress.tsx +0 -29
  666. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/select.tsx +0 -185
  667. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/separator.tsx +0 -26
  668. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/skeleton.tsx +0 -13
  669. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/table.tsx +0 -114
  670. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/tabs.tsx +0 -66
  671. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/textarea.tsx +0 -18
  672. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/tooltip.tsx +0 -61
  673. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/hooks/use-theme.ts +0 -11
  674. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/index.css +0 -131
  675. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/lib/utils.ts +0 -6
  676. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/main.tsx +0 -10
  677. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/pages/_layout.tsx +0 -31
  678. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/pages/home.tsx +0 -59
  679. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/pages/not-found.tsx +0 -14
  680. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/providers/query-provider.tsx +0 -26
  681. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/providers/sonner-provider.tsx +0 -23
  682. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/providers/theme-provider.tsx +0 -64
  683. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/router.tsx +0 -24
  684. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/tsconfig.app.json +0 -34
  685. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/tsconfig.json +0 -13
  686. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/tsconfig.node.json +0 -26
  687. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/vite.config.ts +0 -19
  688. package/assets/power-apps-code-app/README.md +0 -27
  689. package/dist/code-apps-plugin.d.ts +0 -13
  690. package/dist/code-apps-plugin.js +0 -69
  691. package/dist/code-apps-plugin.js.map +0 -1
  692. package/dist/power-apps-assets.d.ts +0 -30
  693. package/dist/power-apps-assets.js +0 -131
  694. package/dist/power-apps-assets.js.map +0 -1
  695. package/dist/power-apps-templates.d.ts +0 -3
  696. package/dist/power-apps-templates.js +0 -177
  697. package/dist/power-apps-templates.js.map +0 -1
  698. package/dist/power-apps-validation.d.ts +0 -1
  699. package/dist/power-apps-validation.js +0 -79
  700. package/dist/power-apps-validation.js.map +0 -1
@@ -0,0 +1,667 @@
1
+ import { genAiPattern } from '../common/values.js';
2
+ import { pyModule } from '../common/values.js';
3
+ import { titleCase } from '../common/values.js';
4
+ import { renderPythonRuntimeSettings } from '../common/python-settings.js';
5
+ export function addBackendArtifacts(add, plan, context) {
6
+ const routeModule = pyModule(genAiPattern(plan).id);
7
+ add('backend-pyproject', 'backend', ['backend', 'pyproject.toml'], renderBackendPyproject(plan, context));
8
+ add('backend-uv-lock', 'backend', ['backend', 'uv.lock'], context.python["genai"].lock);
9
+ add('backend-package', 'backend', ['backend', '__init__.py'], '');
10
+ add('backend-api-package', 'backend', ['backend', 'apis', '__init__.py'], '');
11
+ add('backend-main', 'backend', ['backend', 'apis', 'main.py'], renderFastApiMain(plan, routeModule));
12
+ add('backend-health-routes', 'backend', ['backend', 'apis', 'routes', 'health.py'], renderHealthRoutes());
13
+ add('backend-pattern-routes', 'backend', ['backend', 'apis', 'routes', `${routeModule}.py`], renderPatternRoutes(plan));
14
+ add('backend-routes-package', 'backend', ['backend', 'apis', 'routes', '__init__.py'], '');
15
+ add('backend-auth-dependency', 'backend', ['backend', 'apis', 'dependencies', 'auth.py'], renderAuthDependency());
16
+ add('backend-config-package', 'backend', ['backend', 'config', '__init__.py'], '');
17
+ add('backend-settings', 'backend', ['backend', 'config', 'settings.py'], renderSettings(plan));
18
+ add('backend-orchestration-package', 'backend', ['backend', 'orchestration', '__init__.py'], '');
19
+ add('backend-model-config', 'backend', ['backend', 'orchestration', 'model_config.py'], renderModelConfig(plan));
20
+ add('backend-messaging-tool', 'backend', ['backend', 'orchestration', 'tools', 'messaging.py'], renderMessagingBoundary());
21
+ add('backend-tools-package', 'backend', ['backend', 'orchestration', 'tools', '__init__.py'], '');
22
+ add('backend-observability', 'backend', ['backend', 'observability', 'tracing.py'], renderTracing());
23
+ add('backend-observability-package', 'backend', ['backend', 'observability', '__init__.py'], '');
24
+ add('backend-test-health', 'backend-test', ['backend', 'tests', 'test_health.py'], renderBackendHealthTest());
25
+ add('backend-test-messaging', 'backend-test', ['backend', 'tests', 'test_messaging.py'], renderMessagingTest());
26
+ add('backend-test-tracing', 'backend-test', ['backend', 'tests', 'test_tracing.py'], renderTracingTest());
27
+ }
28
+ export function renderBackendPyproject(plan, context) {
29
+ return context.python["genai"].project;
30
+ }
31
+ export function renderFastApiMain(plan, routeModule) {
32
+ return `from fastapi import FastAPI
33
+ from fastapi.middleware.cors import CORSMiddleware
34
+
35
+ try:
36
+ from scalar_fastapi import get_scalar_api_reference
37
+ except ImportError: # pragma: no cover - dependency is present in generated runtime
38
+ get_scalar_api_reference = None
39
+
40
+ from backend.apis.routes import health, ${routeModule}
41
+ from backend.config.settings import get_settings
42
+
43
+
44
+ settings = get_settings()
45
+ app = FastAPI(title=settings.app_name, version="0.1.0")
46
+ app.add_middleware(
47
+ CORSMiddleware,
48
+ allow_origins=[
49
+ origin.strip()
50
+ for origin in settings.cors_allowed_origins.split(",")
51
+ if origin.strip()
52
+ ],
53
+ allow_methods=["*"],
54
+ allow_headers=["*"],
55
+ )
56
+
57
+ app.include_router(health.router)
58
+ app.include_router(${routeModule}.router)
59
+
60
+
61
+ @app.get("/scalar", include_in_schema=False)
62
+ def scalar_reference():
63
+ if get_scalar_api_reference is None:
64
+ return {"message": "Install scalar-fastapi to enable the Scalar developer portal."}
65
+ return get_scalar_api_reference(openapi_url=app.openapi_url, title=f"{app.title} API")
66
+ `;
67
+ }
68
+ export function renderHealthRoutes() {
69
+ return `from fastapi import APIRouter
70
+
71
+ router = APIRouter(tags=["operations"])
72
+
73
+
74
+ @router.get("/health")
75
+ def health():
76
+ return {"status": "ok"}
77
+
78
+
79
+ @router.get("/ready")
80
+ def ready():
81
+ return {"status": "ready"}
82
+ `;
83
+ }
84
+ export function renderPatternRoutes(plan) {
85
+ const pattern = genAiPattern(plan);
86
+ const moduleName = pyModule(pattern.id);
87
+ const agentName = `${moduleName}_agent`;
88
+ const prefix = pattern.routePrefix;
89
+ if (pattern.id === 'streaming') {
90
+ return `from fastapi import APIRouter
91
+ from fastapi.responses import StreamingResponse
92
+
93
+ from backend.orchestration.agents.${agentName} import stream_response
94
+
95
+ router = APIRouter(prefix="${prefix}", tags=["${pattern.id}"])
96
+
97
+
98
+ @router.get("")
99
+ def stream(prompt: str):
100
+ return StreamingResponse(stream_response(prompt), media_type="text/event-stream")
101
+ `;
102
+ }
103
+ if (pattern.id === 'rag') {
104
+ return `from fastapi import APIRouter
105
+ from pydantic import BaseModel
106
+
107
+ from backend.orchestration.agents.${agentName} import answer_question, enqueue_ingestion
108
+
109
+ router = APIRouter(prefix="${prefix}", tags=["rag"])
110
+
111
+
112
+ class QueryRequest(BaseModel):
113
+ question: str
114
+
115
+
116
+ class IngestionRequest(BaseModel):
117
+ source_uri: str
118
+
119
+
120
+ @router.post("/query")
121
+ async def query(request: QueryRequest):
122
+ return await answer_question(request.question)
123
+
124
+
125
+ @router.post("/ingest")
126
+ async def ingest(request: IngestionRequest):
127
+ return await enqueue_ingestion(request.source_uri)
128
+ `;
129
+ }
130
+ const bodyClass = `${titleCase(pattern.id).replace(/\s/g, '')}Request`;
131
+ return `from fastapi import APIRouter
132
+ from pydantic import BaseModel
133
+
134
+ from backend.orchestration.agents.${agentName} import run_${moduleName}
135
+
136
+ router = APIRouter(prefix="${prefix}", tags=["${pattern.id}"])
137
+
138
+
139
+ class ${bodyClass}(BaseModel):
140
+ input: str
141
+
142
+
143
+ @router.post("/run")
144
+ async def run(request: ${bodyClass}):
145
+ return await run_${moduleName}(request.input)
146
+ `;
147
+ }
148
+ export function renderAuthDependency() {
149
+ return `from dataclasses import dataclass
150
+
151
+
152
+ @dataclass(frozen=True)
153
+ class CurrentUser:
154
+ subject: str = "local-developer"
155
+
156
+
157
+ async def get_current_user() -> CurrentUser:
158
+ return CurrentUser()
159
+ `;
160
+ }
161
+ export function renderSettings(plan) {
162
+ return renderPythonRuntimeSettings(plan);
163
+ }
164
+ export function renderModelConfig(plan) {
165
+ const pattern = genAiPattern(plan);
166
+ return `from dataclasses import dataclass
167
+ from typing import Protocol
168
+
169
+ from backend.config.settings import Settings, get_settings
170
+
171
+
172
+ class ModelConfigurationError(RuntimeError):
173
+ pass
174
+
175
+
176
+ class AgentRunner(Protocol):
177
+ async def run(self, prompt: str) -> str:
178
+ ...
179
+
180
+
181
+ @dataclass(frozen=True)
182
+ class ModelConfig:
183
+ model_name: str
184
+ pattern: str = "${pattern.id}"
185
+ api_key: str = ""
186
+ base_url: str = "https://api.openai.com/v1"
187
+
188
+ @classmethod
189
+ def from_settings(cls, settings: Settings | None = None) -> "ModelConfig":
190
+ resolved = settings or get_settings()
191
+ model_name = resolved.pydantic_ai_model.strip()
192
+ if not model_name:
193
+ raise ModelConfigurationError(
194
+ "PYDANTIC_AI_MODEL is required before invoking production GenAI orchestration. "
195
+ "Use a PydanticAI model name such as 'openai:gpt-4.1-mini'."
196
+ )
197
+ return cls(
198
+ model_name=model_name,
199
+ api_key=resolved.openai_api_key,
200
+ base_url=resolved.openai_base_url,
201
+ )
202
+
203
+
204
+ class PydanticAgentRunner:
205
+ def __init__(self, config: ModelConfig):
206
+ from pydantic_ai import Agent
207
+ from pydantic_ai.models.openai import OpenAIChatModel, OpenAIResponsesModel
208
+ from pydantic_ai.providers.openai import OpenAIProvider
209
+
210
+ provider_name, separator, model_name = config.model_name.partition(":")
211
+ if not separator or not model_name or provider_name not in {
212
+ "openai", "openai-chat", "openai-responses"
213
+ }:
214
+ raise ModelConfigurationError(
215
+ "The locked starter supports openai:, openai-chat:, and openai-responses: models. "
216
+ "Other providers require a reviewed dependency and configuration change."
217
+ )
218
+ if not config.api_key.strip():
219
+ raise ModelConfigurationError("OPENAI_API_KEY is required for the selected model.")
220
+ provider = OpenAIProvider(api_key=config.api_key, base_url=config.base_url)
221
+ model_type = OpenAIChatModel if provider_name == "openai-chat" else OpenAIResponsesModel
222
+ self._agent = Agent(model_type(model_name, provider=provider))
223
+
224
+ async def run(self, prompt: str) -> str:
225
+ result = await self._agent.run(prompt)
226
+ output = getattr(result, "output", None)
227
+ if output is None:
228
+ output = getattr(result, "data", None)
229
+ if output is None:
230
+ raise RuntimeError("PydanticAI returned a result without output data.")
231
+ return str(output)
232
+
233
+
234
+ def build_agent_runner(config: ModelConfig | None = None) -> AgentRunner:
235
+ return PydanticAgentRunner(config or ModelConfig.from_settings())
236
+ `;
237
+ }
238
+ export function renderMessagingBoundary() {
239
+ return `import json
240
+ from collections.abc import Callable
241
+ from typing import Any, Protocol
242
+
243
+ from backend.config.settings import Settings, get_settings
244
+
245
+
246
+ class MessagingConfigurationError(RuntimeError):
247
+ pass
248
+
249
+
250
+ class MessagePublisher(Protocol):
251
+ async def publish(self, topic: str, payload: dict) -> None:
252
+ ...
253
+
254
+
255
+ class RedisStreamClient(Protocol):
256
+ async def xadd(self, name: str, fields: dict[str, str]) -> Any:
257
+ ...
258
+
259
+
260
+ class ServiceBusSender(Protocol):
261
+ async def __aenter__(self) -> "ServiceBusSender":
262
+ ...
263
+
264
+ async def __aexit__(self, exc_type, exc, traceback) -> None:
265
+ ...
266
+
267
+ async def send_messages(self, message: Any) -> None:
268
+ ...
269
+
270
+
271
+ class ServiceBusClient(Protocol):
272
+ def get_queue_sender(self, *, queue_name: str) -> ServiceBusSender:
273
+ ...
274
+
275
+
276
+ def _serialize(topic: str, payload: dict) -> str:
277
+ return json.dumps({"topic": topic, "payload": payload}, separators=(",", ":"), sort_keys=True)
278
+
279
+
280
+ class RedisStreamPublisher:
281
+ def __init__(self, client: RedisStreamClient, stream_name: str):
282
+ self._client = client
283
+ self._stream_name = stream_name
284
+
285
+ async def publish(self, topic: str, payload: dict) -> None:
286
+ await self._client.xadd(
287
+ self._stream_name,
288
+ {"topic": topic, "payload": _serialize(topic, payload)},
289
+ )
290
+
291
+
292
+ class AzureServiceBusPublisher:
293
+ def __init__(
294
+ self,
295
+ client: ServiceBusClient,
296
+ queue_name: str,
297
+ message_factory: Callable[[str], Any] | None = None,
298
+ ):
299
+ self._client = client
300
+ self._queue_name = queue_name
301
+ self._message_factory = message_factory or self._default_message_factory
302
+
303
+ @staticmethod
304
+ def _default_message_factory(body: str) -> Any:
305
+ from azure.servicebus import ServiceBusMessage
306
+
307
+ return ServiceBusMessage(body)
308
+
309
+ async def publish(self, topic: str, payload: dict) -> None:
310
+ message = self._message_factory(_serialize(topic, payload))
311
+ async with self._client.get_queue_sender(queue_name=self._queue_name) as sender:
312
+ await sender.send_messages(message)
313
+
314
+
315
+ def build_message_publisher(
316
+ transport: str | None = None,
317
+ *,
318
+ settings: Settings | None = None,
319
+ redis_client: RedisStreamClient | None = None,
320
+ service_bus_client: ServiceBusClient | None = None,
321
+ message_factory: Callable[[str], Any] | None = None,
322
+ ) -> MessagePublisher:
323
+ resolved = settings or get_settings()
324
+ transport = resolved.messaging_transport if transport is None else transport
325
+ if transport == "redis-streams":
326
+ stream_name = resolved.redis_stream_name.strip()
327
+ if not stream_name:
328
+ raise MessagingConfigurationError("REDIS_STREAM_NAME must not be empty.")
329
+ redis_url = resolved.redis_url.strip()
330
+ if not redis_url:
331
+ raise MessagingConfigurationError("REDIS_URL is required for redis-streams messaging.")
332
+ if redis_client is None:
333
+ from redis.asyncio import Redis
334
+
335
+ redis_client = Redis.from_url(redis_url, decode_responses=True)
336
+ return RedisStreamPublisher(redis_client, stream_name)
337
+
338
+ if transport == "azure-service-bus":
339
+ queue_name = resolved.service_bus_queue_name.strip()
340
+ if not queue_name:
341
+ raise MessagingConfigurationError(
342
+ "SERVICE_BUS_QUEUE_NAME is required for azure-service-bus messaging."
343
+ )
344
+ connection_string = resolved.service_bus_connection_string.strip()
345
+ namespace = resolved.service_bus_fully_qualified_namespace.strip()
346
+ client_id = resolved.azure_client_id.strip()
347
+ auth_mode = resolved.service_bus_auth_mode
348
+ if auth_mode == "connection-string":
349
+ if not connection_string:
350
+ raise MessagingConfigurationError(
351
+ "SERVICE_BUS_CONNECTION_STRING is required for connection-string authentication."
352
+ )
353
+ elif auth_mode == "managed-identity":
354
+ if not namespace or not client_id:
355
+ raise MessagingConfigurationError(
356
+ "SERVICE_BUS_FULLY_QUALIFIED_NAMESPACE and AZURE_CLIENT_ID are required "
357
+ "for managed-identity authentication."
358
+ )
359
+ if not namespace.endswith(".servicebus.windows.net") or "://" in namespace or "/" in namespace:
360
+ raise MessagingConfigurationError("SERVICE_BUS_FULLY_QUALIFIED_NAMESPACE must be a Service Bus hostname.")
361
+ else:
362
+ raise MessagingConfigurationError(
363
+ "SERVICE_BUS_AUTH_MODE must be 'managed-identity' or 'connection-string'."
364
+ )
365
+ if service_bus_client is None:
366
+ from azure.servicebus.aio import ServiceBusClient as AzureServiceBusClient
367
+
368
+ if auth_mode == "connection-string":
369
+ service_bus_client = AzureServiceBusClient.from_connection_string(connection_string)
370
+ else:
371
+ from azure.identity.aio import ManagedIdentityCredential
372
+
373
+ credential = ManagedIdentityCredential(client_id=client_id)
374
+ service_bus_client = AzureServiceBusClient(namespace, credential)
375
+ return AzureServiceBusPublisher(service_bus_client, queue_name, message_factory)
376
+
377
+ raise MessagingConfigurationError(
378
+ f"Unsupported MESSAGING_TRANSPORT '{transport}'. "
379
+ "Expected 'redis-streams' or 'azure-service-bus'."
380
+ )
381
+ `;
382
+ }
383
+ export function renderTracing() {
384
+ return `from contextlib import asynccontextmanager
385
+ from dataclasses import dataclass
386
+ from typing import Any, AsyncContextManager, Protocol
387
+
388
+ from backend.config.settings import Settings, get_settings
389
+
390
+
391
+ class TracingConfigurationError(RuntimeError):
392
+ pass
393
+
394
+
395
+ @dataclass
396
+ class TraceHandle:
397
+ enabled: bool
398
+ trace_id: str | None
399
+ output: Any = None
400
+
401
+ def set_output(self, output: Any) -> None:
402
+ self.output = output
403
+
404
+
405
+ class Tracer(Protocol):
406
+ def trace(self, name: str, input_data: Any = None) -> AsyncContextManager[TraceHandle]:
407
+ ...
408
+
409
+
410
+ class DisabledTracer:
411
+ @asynccontextmanager
412
+ async def trace(self, name: str, input_data: Any = None):
413
+ del name, input_data
414
+ yield TraceHandle(enabled=False, trace_id=None)
415
+
416
+
417
+ class LangfuseTracer:
418
+ def __init__(self, client: Any):
419
+ self._client = client
420
+
421
+
422
+ @asynccontextmanager
423
+ async def trace(self, name: str, input_data: Any = None):
424
+ remote_trace = self._client.start_observation(
425
+ name=name,
426
+ as_type="span",
427
+ input=input_data,
428
+ )
429
+ remote_id = getattr(remote_trace, "trace_id", None)
430
+ handle = TraceHandle(
431
+ enabled=True,
432
+ trace_id=str(remote_id) if remote_id is not None else None,
433
+ )
434
+ try:
435
+ yield handle
436
+ except Exception as error:
437
+ remote_trace.update(level="ERROR", status_message=str(error))
438
+ raise
439
+ else:
440
+ remote_trace.update(output=handle.output)
441
+ finally:
442
+ remote_trace.end()
443
+
444
+
445
+ def build_tracer(
446
+ *,
447
+ settings: Settings | None = None,
448
+ client: Any = None,
449
+ public_key: str | None = None,
450
+ secret_key: str | None = None,
451
+ host: str | None = None,
452
+ ) -> Tracer:
453
+ if client is not None:
454
+ return LangfuseTracer(client)
455
+
456
+ resolved = settings or get_settings()
457
+ resolved_public_key = resolved.langfuse_public_key.strip() if public_key is None else public_key
458
+ resolved_secret_key = resolved.langfuse_secret_key.strip() if secret_key is None else secret_key
459
+ if not resolved_public_key and not resolved_secret_key:
460
+ return DisabledTracer()
461
+ if not resolved_public_key or not resolved_secret_key:
462
+ raise TracingConfigurationError(
463
+ "LANGFUSE_PUBLIC_KEY and LANGFUSE_SECRET_KEY must be configured together."
464
+ )
465
+
466
+ from langfuse import Langfuse
467
+
468
+ resolved_host = (resolved.langfuse_host.strip() if host is None else host) or "https://cloud.langfuse.com"
469
+ kwargs = {
470
+ "public_key": resolved_public_key,
471
+ "secret_key": resolved_secret_key,
472
+ "host": resolved_host,
473
+ }
474
+ return LangfuseTracer(Langfuse(**kwargs))
475
+ `;
476
+ }
477
+ export function renderBackendHealthTest() {
478
+ return `from fastapi.testclient import TestClient
479
+
480
+ from backend.apis.main import app
481
+
482
+
483
+ def test_health():
484
+ client = TestClient(app)
485
+ response = client.get("/health")
486
+ assert response.status_code == 200
487
+ assert response.json()["status"] == "ok"
488
+
489
+
490
+ def test_cors_preflight_for_local_frontend():
491
+ response = TestClient(app).options(
492
+ "/health",
493
+ headers={
494
+ "Origin": "http://localhost:5173",
495
+ "Access-Control-Request-Method": "GET",
496
+ },
497
+ )
498
+ assert response.status_code == 200
499
+ assert response.headers["access-control-allow-origin"] == "http://localhost:5173"
500
+ `;
501
+ }
502
+ export function renderMessagingTest() {
503
+ return `import asyncio
504
+ import json
505
+
506
+ from backend.orchestration.tools.messaging import build_message_publisher
507
+ from backend.config.settings import Settings
508
+
509
+
510
+ class FakeRedisClient:
511
+ def __init__(self):
512
+ self.calls = []
513
+
514
+ async def xadd(self, name, fields):
515
+ self.calls.append((name, fields))
516
+
517
+
518
+ class FakeSender:
519
+ def __init__(self):
520
+ self.messages = []
521
+
522
+ async def __aenter__(self):
523
+ return self
524
+
525
+ async def __aexit__(self, exc_type, exc, traceback):
526
+ return None
527
+
528
+ async def send_messages(self, message):
529
+ self.messages.append(message)
530
+
531
+
532
+ class FakeServiceBusClient:
533
+ def __init__(self, sender):
534
+ self.sender = sender
535
+ self.queue_names = []
536
+
537
+ def get_queue_sender(self, *, queue_name):
538
+ self.queue_names.append(queue_name)
539
+ return self.sender
540
+
541
+
542
+ def test_redis_stream_publisher_uses_xadd():
543
+ client = FakeRedisClient()
544
+ settings = Settings(
545
+ _env_file=None,
546
+ database_url="postgresql://localhost/test",
547
+ redis_url="redis://localhost:6379/0",
548
+ redis_stream_name="orchestration-events",
549
+ )
550
+ publisher = build_message_publisher("redis-streams", settings=settings, redis_client=client)
551
+
552
+ asyncio.run(publisher.publish("rag.ingest", {"source_uri": "az://document"}))
553
+
554
+ stream_name, fields = client.calls[0]
555
+ assert stream_name == "orchestration-events"
556
+ assert fields["topic"] == "rag.ingest"
557
+ assert json.loads(fields["payload"]) == {
558
+ "payload": {"source_uri": "az://document"},
559
+ "topic": "rag.ingest",
560
+ }
561
+
562
+
563
+ def test_service_bus_publisher_uses_async_sender():
564
+ sender = FakeSender()
565
+ client = FakeServiceBusClient(sender)
566
+ publisher = build_message_publisher(
567
+ "azure-service-bus",
568
+ settings=Settings(
569
+ _env_file=None,
570
+ database_url="postgresql://localhost/test",
571
+ redis_url="redis://localhost:6379/0",
572
+ service_bus_queue_name="orchestration-jobs",
573
+ service_bus_auth_mode="managed-identity",
574
+ service_bus_fully_qualified_namespace="offline.servicebus.windows.net",
575
+ azure_client_id="00000000-0000-4000-8000-000000000001",
576
+ ),
577
+ service_bus_client=client,
578
+ message_factory=lambda body: body,
579
+ )
580
+
581
+ asyncio.run(publisher.publish("workflow.run", {"job_id": "job-1"}))
582
+
583
+ assert client.queue_names == ["orchestration-jobs"]
584
+ assert json.loads(sender.messages[0]) == {
585
+ "payload": {"job_id": "job-1"},
586
+ "topic": "workflow.run",
587
+ }
588
+ `;
589
+ }
590
+ export function renderTracingTest() {
591
+ return `import asyncio
592
+
593
+ import pytest
594
+
595
+ from backend.observability.tracing import (
596
+ TracingConfigurationError,
597
+ build_tracer,
598
+ )
599
+ from backend.config.settings import get_settings
600
+
601
+
602
+ class FakeRemoteTrace:
603
+ trace_id = "trace-123"
604
+
605
+ def __init__(self):
606
+ self.updates = []
607
+ self.ended = False
608
+
609
+ def update(self, **values):
610
+ self.updates.append(values)
611
+
612
+ def end(self):
613
+ self.ended = True
614
+
615
+
616
+ class FakeLangfuse:
617
+ def __init__(self):
618
+ self.calls = []
619
+ self.remote_trace = FakeRemoteTrace()
620
+
621
+ def start_observation(self, **values):
622
+ self.calls.append(values)
623
+ return self.remote_trace
624
+
625
+
626
+ def test_unconfigured_tracing_is_explicitly_disabled(monkeypatch):
627
+ monkeypatch.setenv("LANGFUSE_PUBLIC_KEY", "")
628
+ monkeypatch.setenv("LANGFUSE_SECRET_KEY", "")
629
+ get_settings.cache_clear()
630
+
631
+ async def scenario():
632
+ async with build_tracer().trace("offline") as trace:
633
+ assert trace.enabled is False
634
+ assert trace.trace_id is None
635
+
636
+ asyncio.run(scenario())
637
+
638
+
639
+ def test_configured_tracing_updates_langfuse_operation():
640
+ client = FakeLangfuse()
641
+
642
+ async def scenario():
643
+ async with build_tracer(client=client).trace(
644
+ "agent.run",
645
+ {"prompt": "hello"},
646
+ ) as trace:
647
+ assert trace.enabled is True
648
+ assert trace.trace_id == "trace-123"
649
+ trace.set_output({"answer": "world"})
650
+
651
+ asyncio.run(scenario())
652
+ assert client.calls == [
653
+ {"name": "agent.run", "as_type": "span", "input": {"prompt": "hello"}}
654
+ ]
655
+ assert client.remote_trace.updates == [{"output": {"answer": "world"}}]
656
+ assert client.remote_trace.ended is True
657
+
658
+
659
+ def test_partial_langfuse_configuration_fails(monkeypatch):
660
+ monkeypatch.setenv("LANGFUSE_PUBLIC_KEY", "public")
661
+ monkeypatch.setenv("LANGFUSE_SECRET_KEY", "")
662
+ get_settings.cache_clear()
663
+ with pytest.raises(TracingConfigurationError, match="configured together"):
664
+ build_tracer()
665
+ `;
666
+ }
667
+ //# sourceMappingURL=backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend.js","sourceRoot":"","sources":["../../../src/generators/genai/backend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { GenAiProjectPlan } from '../../domain/project/contracts.js';
2
+ export declare function renderBackendEnv(plan: GenAiProjectPlan, environment: string): string;
3
+ export declare function renderFunctionsEnv(plan: GenAiProjectPlan, environment: string): string;