@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,43 @@
1
+ import { DEFAULT_FUNCTION_WORKER_QUEUE_NAME } from '../common/values.js';
2
+ import { genAiPattern } from '../common/values.js';
3
+ export function renderBackendEnv(plan, environment) {
4
+ const pattern = genAiPattern(plan);
5
+ const transport = environment === 'dev' ? 'redis-streams' : 'azure-service-bus';
6
+ return `APP_ENV=${environment}
7
+ APP_NAME=${plan.safeProjectName}
8
+ GENAI_PATTERN=${pattern.id}
9
+ CLOUD_PROVIDER=${plan.provider.id}
10
+ AZURE_REGION=${plan.region.slug}
11
+ DATABASE_URL=postgresql+asyncpg://postgres:postgres@postgres:5432/${plan.safeProjectName.replace(/-/g, '_')}
12
+ REDIS_URL=redis://redis:6379/0
13
+ REDIS_STREAM_NAME=liftoff-events
14
+ MESSAGING_TRANSPORT=${transport}
15
+ SERVICE_BUS_QUEUE_NAME=${DEFAULT_FUNCTION_WORKER_QUEUE_NAME}
16
+ SERVICE_BUS_AUTH_MODE=managed-identity
17
+ SERVICE_BUS_CONNECTION_STRING=
18
+ SERVICE_BUS_FULLY_QUALIFIED_NAMESPACE=
19
+ AZURE_CLIENT_ID=
20
+ BLOB_ENDPOINT=
21
+ CORS_ALLOWED_ORIGINS=http://localhost:5173
22
+ PYDANTIC_AI_MODEL=
23
+ OPENAI_API_KEY=
24
+ OPENAI_BASE_URL=https://api.openai.com/v1
25
+ LANGFUSE_HOST=${environment === 'dev' ? 'http://langfuse:3000' : ''}
26
+ LANGFUSE_PUBLIC_KEY=
27
+ LANGFUSE_SECRET_KEY=
28
+ `;
29
+ }
30
+ export function renderFunctionsEnv(plan, environment) {
31
+ const pattern = genAiPattern(plan);
32
+ return `APP_ENV=${environment}
33
+ APP_NAME=${plan.safeProjectName}
34
+ GENAI_PATTERN=${pattern.id}
35
+ FUNCTIONS_WORKER_RUNTIME=python
36
+ SERVICEBUS_QUEUE_NAME=${DEFAULT_FUNCTION_WORKER_QUEUE_NAME}
37
+ ServiceBusConnection__fullyQualifiedNamespace=<service-bus-namespace>.servicebus.windows.net
38
+ ServiceBusConnection__clientId=<managed-identity-client-id>
39
+ AzureWebJobsStorage=<storage-connection-string>
40
+ SHARED_ORCHESTRATION_ROOT=../../backend
41
+ `;
42
+ }
43
+ //# sourceMappingURL=configuration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configuration.js","sourceRoot":"","sources":["../../../src/generators/genai/configuration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kCAAkC,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD,MAAM,UAAU,gBAAgB,CAAC,IAAsB,EAAE,WAAmB;IAC1E,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,SAAS,GAAG,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,mBAAmB,CAAC;IAChF,OAAO,WAAW,WAAW;WACpB,IAAI,CAAC,eAAe;gBACf,OAAO,CAAC,EAAE;iBACT,IAAI,CAAC,QAAQ,CAAC,EAAE;eAClB,IAAI,CAAC,MAAM,CAAC,IAAI;oEACqC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;;;sBAGrF,SAAS;yBACN,kCAAkC;;;;;;;;;;gBAU3C,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE;;;CAGlE,CAAC;AACF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAsB,EAAE,WAAmB;IAC5E,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACnC,OAAO,WAAW,WAAW;WACpB,IAAI,CAAC,eAAe;gBACf,OAAO,CAAC,EAAE;;wBAEF,kCAAkC;;;;;CAKzD,CAAC;AACF,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { AddArtifact } from '../../template-types.js';
2
+ import type { GenAiProjectPlan } from '../../domain/project/contracts.js';
3
+ export declare function addDatabaseArtifacts(add: AddArtifact, plan: GenAiProjectPlan): void;
4
+ export declare function renderAlembicIni(): string;
5
+ export declare function renderAlembicEnv(): string;
6
+ export declare function renderInitialMigration(plan: GenAiProjectPlan): string;
7
+ export declare function renderDatabaseSchema(plan: GenAiProjectPlan): string;
@@ -0,0 +1,71 @@
1
+ import { genAiPattern } from '../common/values.js';
2
+ export function addDatabaseArtifacts(add, plan) {
3
+ add('database-alembic-ini', 'database', ['database', 'alembic.ini'], renderAlembicIni());
4
+ add('database-alembic-env', 'database', ['database', 'migrations', 'env.py'], renderAlembicEnv());
5
+ add('database-initial-migration', 'database', ['database', 'migrations', 'versions', '0001_initial.py'], renderInitialMigration(plan));
6
+ add('database-schema', 'database', ['database', 'models', 'schema.sql'], renderDatabaseSchema(plan));
7
+ }
8
+ export function renderAlembicIni() {
9
+ return `[alembic]
10
+ script_location = %(here)s/migrations
11
+ sqlalchemy.url = driver://user:pass@localhost/dbname
12
+ `;
13
+ }
14
+ export function renderAlembicEnv() {
15
+ return `from alembic import context
16
+ from sqlalchemy import create_engine
17
+
18
+ from backend.config.settings import get_settings
19
+
20
+
21
+ def run_migrations_online():
22
+ database_url = get_settings().database_url
23
+ if not database_url:
24
+ raise RuntimeError("DATABASE_URL is required to run migrations")
25
+ database_url = database_url.replace("postgresql+asyncpg://", "postgresql+psycopg://", 1)
26
+ database_url = database_url.replace("postgresql://", "postgresql+psycopg://", 1)
27
+ connectable = create_engine(database_url)
28
+ with connectable.connect() as connection:
29
+ context.configure(connection=connection, target_metadata=None)
30
+ with context.begin_transaction():
31
+ context.run_migrations()
32
+
33
+
34
+ run_migrations_online()
35
+ `;
36
+ }
37
+ export function renderInitialMigration(plan) {
38
+ const vectorExtension = genAiPattern(plan).id === 'rag' ? ' op.execute("CREATE EXTENSION IF NOT EXISTS vector")\n' : '';
39
+ return `from alembic import op
40
+ import sqlalchemy as sa
41
+
42
+ revision = "0001_initial"
43
+ down_revision = None
44
+ branch_labels = None
45
+ depends_on = None
46
+
47
+
48
+ def upgrade():
49
+ ${vectorExtension} op.create_table(
50
+ "events",
51
+ sa.Column("id", sa.Integer(), primary_key=True),
52
+ sa.Column("event_type", sa.String(length=120), nullable=False),
53
+ sa.Column("payload", sa.JSON(), nullable=False),
54
+ sa.Column("created_at", sa.DateTime(), server_default=sa.func.now(), nullable=False),
55
+ )
56
+
57
+
58
+ def downgrade():
59
+ op.drop_table("events")
60
+ `;
61
+ }
62
+ export function renderDatabaseSchema(plan) {
63
+ return `CREATE TABLE IF NOT EXISTS events (
64
+ id SERIAL PRIMARY KEY,
65
+ event_type VARCHAR(120) NOT NULL,
66
+ payload JSONB NOT NULL,
67
+ created_at TIMESTAMPTZ NOT NULL DEFAULT now()
68
+ );
69
+ ${genAiPattern(plan).id === 'rag' ? '\nCREATE EXTENSION IF NOT EXISTS vector;\n' : ''}`;
70
+ }
71
+ //# sourceMappingURL=database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../../../src/generators/genai/database.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD,MAAM,UAAU,oBAAoB,CAAC,GAAgB,EAAE,IAAsB;IAC3E,GAAG,CAAC,sBAAsB,EAAE,UAAU,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC;IACzF,GAAG,CAAC,sBAAsB,EAAE,UAAU,EAAE,CAAC,UAAU,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAClG,GAAG,CAAC,4BAA4B,EAAE,UAAU,EAAE,CAAC,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,iBAAiB,CAAC,EAAE,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC;IACvI,GAAG,CAAC,iBAAiB,EAAE,UAAU,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC;AACvG,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO;;;CAGR,CAAC;AACF,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO;;;;;;;;;;;;;;;;;;;;CAoBR,CAAC;AACF,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAsB;IAC3D,MAAM,eAAe,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,2DAA2D,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3H,OAAO;;;;;;;;;;EAUP,eAAe;;;;;;;;;;;CAWhB,CAAC;AACF,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAsB;IACzD,OAAO;;;;;;EAMP,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,4CAA4C,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACxF,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { GeneratorContext as ResolvedGeneratorContext } from '../context.js';
2
+ type GeneratorContext = Pick<ResolvedGeneratorContext, 'functionsRequirements'>;
3
+ import type { AddArtifact } from '../../template-types.js';
4
+ import type { GenAiProjectPlan } from '../../domain/project/contracts.js';
5
+ export declare function addFunctionArtifacts(add: AddArtifact, plan: GenAiProjectPlan, context: GeneratorContext): void;
6
+ export declare function renderFunctionsReadme(): string;
7
+ export declare function renderFunctionWorkerReadme(plan: GenAiProjectPlan): string;
8
+ export declare function renderFunctionHostJson(): string;
9
+ export declare function renderFunctionLocalSettings(plan: GenAiProjectPlan): string;
10
+ export declare function renderFunctionRequirements(context: GeneratorContext): string;
11
+ export declare function renderFunctionApp(plan: GenAiProjectPlan): string;
12
+ export declare function renderFunctionTest(): string;
13
+ export declare function renderFunctionFuncIgnore(): string;
14
+ export declare function renderFunctionGitIgnore(): string;
15
+ export {};
@@ -0,0 +1,156 @@
1
+ import { DEFAULT_FUNCTION_WORKER_QUEUE_NAME } from '../common/values.js';
2
+ import { functionWorkerName } from '../common/values.js';
3
+ import { genAiPattern } from '../common/values.js';
4
+ import { hasFunctionWorker } from '../common/values.js';
5
+ import { pyModule } from '../common/values.js';
6
+ export function addFunctionArtifacts(add, plan, context) {
7
+ if (!hasFunctionWorker(plan)) {
8
+ return;
9
+ }
10
+ const workerName = functionWorkerName(plan);
11
+ const workerBase = ['functions', workerName];
12
+ add('functions-readme', 'functions', ['functions', 'README.md'], renderFunctionsReadme());
13
+ add('function-worker-readme', 'functions', [...workerBase, 'README.md'], renderFunctionWorkerReadme(plan));
14
+ add('function-worker-host', 'functions', [...workerBase, 'host.json'], renderFunctionHostJson());
15
+ add('function-worker-local-settings', 'functions', [...workerBase, 'local.settings.example.json'], renderFunctionLocalSettings(plan));
16
+ add('function-worker-requirements', 'functions', [...workerBase, 'requirements.txt'], renderFunctionRequirements(context));
17
+ add('function-worker-app', 'functions', [...workerBase, 'function_app.py'], renderFunctionApp(plan));
18
+ add('function-worker-test', 'functions-test', [...workerBase, 'tests', 'test_function_app.py'], renderFunctionTest());
19
+ add('function-worker-funcignore', 'functions', [...workerBase, '.funcignore'], renderFunctionFuncIgnore());
20
+ add('function-worker-gitignore', 'functions', [...workerBase, '.gitignore'], renderFunctionGitIgnore());
21
+ }
22
+ export function renderFunctionsReadme() {
23
+ return `# Azure Functions Workers
24
+
25
+ Azure Functions trigger adapters live under \`functions/<worker-name>\`.
26
+
27
+ Keep reusable GenAI orchestration, model configuration, prompt handling, and domain logic under \`backend/orchestration\`. Use \`backend/workers\` for backend-adjacent or containerized workers; use this folder for Azure Functions runtime files such as \`host.json\`, trigger bindings, local settings, and Function app tests.
28
+ `;
29
+ }
30
+ export function renderFunctionWorkerReadme(plan) {
31
+ const workerName = functionWorkerName(plan);
32
+ const pattern = genAiPattern(plan);
33
+ return `# ${workerName}
34
+
35
+ Azure Functions worker scaffold for ${pattern.label}.
36
+
37
+ This Function app uses the Python v2 decorator programming model and a Service Bus queue trigger. The trigger adapter should stay thin: decode the message, validate the envelope, and call shared code from \`backend/orchestration\` after that shared code is packaged with the Function app.
38
+
39
+ The generated trigger currently decodes and logs message keys, then returns. It does not index documents,
40
+ invoke orchestration, or execute workflow stages. A successfully published message is not proof of
41
+ completed processing; implement and test a real consumer before using this scaffold for production work.
42
+
43
+ Deployed triggers use \`ServiceBusConnection__fullyQualifiedNamespace\` and \`ServiceBusConnection__clientId\` to select the same user-assigned identity that OpenTofu grants the Service Bus Data Receiver role. \`SERVICEBUS_QUEUE_NAME\` is populated from \`function_worker_queue_name\`. Function host storage uses the complete \`AzureWebJobsStorage\` connection setting.
44
+
45
+ ## Local Development
46
+
47
+ \`\`\`bash
48
+ uv sync --frozen --project ../../backend --extra test --extra functions
49
+ cp local.settings.example.json local.settings.json
50
+ uv run --project ../../backend --directory . python -m pytest -q
51
+ func start
52
+ \`\`\`
53
+ `;
54
+ }
55
+ export function renderFunctionHostJson() {
56
+ return JSON.stringify({
57
+ version: '2.0',
58
+ extensionBundle: {
59
+ id: 'Microsoft.Azure.Functions.ExtensionBundle',
60
+ version: '[4.*, 5.0.0)'
61
+ }
62
+ }, null, 2);
63
+ }
64
+ export function renderFunctionLocalSettings(plan) {
65
+ const pattern = genAiPattern(plan);
66
+ return JSON.stringify({
67
+ IsEncrypted: false,
68
+ Values: {
69
+ AzureWebJobsStorage: 'UseDevelopmentStorage=true',
70
+ FUNCTIONS_WORKER_RUNTIME: 'python',
71
+ SERVICEBUS_QUEUE_NAME: DEFAULT_FUNCTION_WORKER_QUEUE_NAME,
72
+ ServiceBusConnection__fullyQualifiedNamespace: '<service-bus-namespace>.servicebus.windows.net',
73
+ GENAI_PATTERN: pattern.id,
74
+ SHARED_ORCHESTRATION_ROOT: '../../backend'
75
+ }
76
+ }, null, 2);
77
+ }
78
+ export function renderFunctionRequirements(context) {
79
+ return context.functionsRequirements;
80
+ }
81
+ export function renderFunctionApp(plan) {
82
+ const pattern = genAiPattern(plan);
83
+ const moduleName = pyModule(pattern.id);
84
+ return `import json
85
+ import logging
86
+
87
+ import azure.functions as func
88
+
89
+
90
+ app = func.FunctionApp()
91
+
92
+
93
+ def decode_message_payload(body: str) -> dict:
94
+ try:
95
+ value = json.loads(body)
96
+ except json.JSONDecodeError:
97
+ return {"raw": body}
98
+ if isinstance(value, dict):
99
+ return value
100
+ return {"value": value}
101
+
102
+
103
+ @app.service_bus_queue_trigger(
104
+ arg_name="message",
105
+ queue_name="%SERVICEBUS_QUEUE_NAME%",
106
+ connection="ServiceBusConnection",
107
+ )
108
+ def process_${moduleName}_work(message: func.ServiceBusMessage) -> None:
109
+ payload = decode_message_payload(message.get_body().decode("utf-8"))
110
+ logging.info("Received ${pattern.id} worker message with keys: %s", sorted(payload.keys()))
111
+ # Keep this adapter thin; call backend.orchestration code from packaged shared modules.
112
+ `;
113
+ }
114
+ export function renderFunctionTest() {
115
+ return `from function_app import decode_message_payload
116
+
117
+
118
+ def test_decode_message_payload_for_json_object():
119
+ assert decode_message_payload('{"source_uri":"az://documents/example.pdf"}') == {
120
+ "source_uri": "az://documents/example.pdf"
121
+ }
122
+
123
+
124
+ def test_decode_message_payload_for_plain_text():
125
+ assert decode_message_payload("plain text") == {"raw": "plain text"}
126
+ `;
127
+ }
128
+ export function renderFunctionFuncIgnore() {
129
+ return `.venv/
130
+ node_modules/
131
+ dist/
132
+ build/
133
+ .git/
134
+ .liftoff/
135
+ .terraform/
136
+ __pycache__/
137
+ .pytest_cache/
138
+ .env
139
+ .env.*
140
+ *.env
141
+ *.pem
142
+ *.key
143
+ *.pfx
144
+ *.tfstate*
145
+ local.settings.json
146
+ tests/
147
+ `;
148
+ }
149
+ export function renderFunctionGitIgnore() {
150
+ return `.venv/
151
+ __pycache__/
152
+ .pytest_cache/
153
+ local.settings.json
154
+ `;
155
+ }
156
+ //# sourceMappingURL=functions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functions.js","sourceRoot":"","sources":["../../../src/generators/genai/functions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { GeneratorContext as ResolvedGeneratorContext } from '../context.js';
2
+ type GeneratorContext = Pick<ResolvedGeneratorContext, 'functionsRequirements'> & {
3
+ python: Pick<ResolvedGeneratorContext['python'], 'genai'>;
4
+ };
5
+ import type { AddArtifact } from '../../template-types.js';
6
+ import type { GenAiProjectPlan } from '../../domain/project/contracts.js';
7
+ export declare function addGenAiExtensionArtifacts(add: AddArtifact, plan: GenAiProjectPlan, context: GeneratorContext): void;
8
+ export {};
@@ -0,0 +1,11 @@
1
+ import { addBackendArtifacts } from './backend.js';
2
+ import { addDatabaseArtifacts } from './database.js';
3
+ import { addPatternArtifacts } from './patterns.js';
4
+ import { addFunctionArtifacts } from './functions.js';
5
+ export function addGenAiExtensionArtifacts(add, plan, context) {
6
+ addBackendArtifacts(add, plan, context);
7
+ addDatabaseArtifacts(add, plan);
8
+ addPatternArtifacts(add, plan);
9
+ addFunctionArtifacts(add, plan, context);
10
+ }
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generators/genai/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEtD,MAAM,UAAU,0BAA0B,CAAC,GAAgB,EAAE,IAAsB,EAAE,OAAyB;IAC5G,mBAAmB,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACxC,oBAAoB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAChC,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC/B,oBAAoB,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { AddArtifact } from '../../template-types.js';
2
+ import type { GenAiProjectPlan } from '../../domain/project/contracts.js';
3
+ export declare function addPatternArtifacts(add: AddArtifact, plan: GenAiProjectPlan): void;
4
+ export declare function renderPatternAgent(plan: GenAiProjectPlan): string;
5
+ export declare function renderPatternAgentTest(plan: GenAiProjectPlan): string;
6
+ export declare function renderPromptTemplate(plan: GenAiProjectPlan): string;
7
+ export declare function renderPromptReadme(): string;
8
+ export declare function renderVectorStore(): string;
9
+ export declare function renderPatternWorker(plan: GenAiProjectPlan): string;
@@ -0,0 +1,309 @@
1
+ import { genAiPattern } from '../common/values.js';
2
+ import { pyModule } from '../common/values.js';
3
+ export function addPatternArtifacts(add, plan) {
4
+ const pattern = genAiPattern(plan);
5
+ const routeModule = pyModule(pattern.id);
6
+ add('pattern-agent', 'pattern', ['backend', 'orchestration', 'agents', `${routeModule}_agent.py`], renderPatternAgent(plan));
7
+ add('pattern-agent-test', 'backend-test', ['backend', 'tests', `test_${routeModule}_orchestration.py`], renderPatternAgentTest(plan));
8
+ add('pattern-prompt', 'pattern', ['backend', 'orchestration', 'prompts', `${pattern.id}.md`], renderPromptTemplate(plan));
9
+ add('pattern-agent-package', 'pattern', ['backend', 'orchestration', 'agents', '__init__.py'], '');
10
+ add('pattern-prompt-readme', 'pattern', ['backend', 'orchestration', 'prompts', 'README.md'], renderPromptReadme());
11
+ if (pattern.id === 'rag') {
12
+ add('rag-vector-store', 'pattern', ['backend', 'orchestration', 'retrieval', 'vector_store.py'], renderVectorStore());
13
+ add('rag-retrieval-package', 'pattern', ['backend', 'orchestration', 'retrieval', '__init__.py'], '');
14
+ }
15
+ if (pattern.worker) {
16
+ add('pattern-worker', 'pattern', ['backend', 'workers', `${routeModule}_worker.py`], renderPatternWorker(plan));
17
+ add('backend-workers-package', 'pattern', ['backend', 'workers', '__init__.py'], '');
18
+ }
19
+ if (pattern.id === 'fine-tuned') {
20
+ add('fine-tuned-eval-dataset', 'pattern', ['backend', 'evaluation', 'datasets', 'sample.jsonl'], '{"input":"Example request","expected":"Expected response placeholder"}');
21
+ }
22
+ }
23
+ export function renderPatternAgent(plan) {
24
+ const pattern = genAiPattern(plan);
25
+ const moduleName = pyModule(pattern.id);
26
+ if (pattern.id === 'rag') {
27
+ return `from backend.observability.tracing import Tracer, build_tracer
28
+ from backend.orchestration.model_config import AgentRunner, build_agent_runner
29
+ from backend.orchestration.tools.messaging import MessagePublisher, build_message_publisher
30
+
31
+
32
+ async def _run_agent(
33
+ operation: str,
34
+ prompt: str,
35
+ runner: AgentRunner | None,
36
+ tracer: Tracer | None,
37
+ ) -> str:
38
+ selected_runner = runner or build_agent_runner()
39
+ selected_tracer = tracer or build_tracer()
40
+ async with selected_tracer.trace(operation, {"prompt": prompt}) as trace:
41
+ output = await selected_runner.run(prompt)
42
+ trace.set_output({"text": output})
43
+ return output
44
+
45
+
46
+ async def answer_question(
47
+ question: str,
48
+ *,
49
+ runner: AgentRunner | None = None,
50
+ tracer: Tracer | None = None,
51
+ ) -> dict:
52
+ answer = await _run_agent(
53
+ "rag.query",
54
+ f"Answer this question without claiming retrieval or citations.\\nQuestion: {question}",
55
+ runner,
56
+ tracer,
57
+ )
58
+ return {
59
+ "answer": answer,
60
+ "question": question,
61
+ "citations": [],
62
+ }
63
+
64
+
65
+ async def enqueue_ingestion(
66
+ source_uri: str,
67
+ *,
68
+ publisher: MessagePublisher | None = None,
69
+ ) -> dict:
70
+ selected_publisher = publisher or build_message_publisher()
71
+ await selected_publisher.publish("rag.ingest", {"source_uri": source_uri})
72
+ return {"status": "queued", "source_uri": source_uri}
73
+ `;
74
+ }
75
+ if (pattern.id === 'streaming') {
76
+ return `import json
77
+
78
+ from backend.observability.tracing import Tracer, build_tracer
79
+ from backend.orchestration.model_config import AgentRunner, build_agent_runner
80
+
81
+
82
+ async def stream_response(
83
+ prompt: str,
84
+ *,
85
+ runner: AgentRunner | None = None,
86
+ tracer: Tracer | None = None,
87
+ ):
88
+ selected_runner = runner or build_agent_runner()
89
+ selected_tracer = tracer or build_tracer()
90
+ async with selected_tracer.trace("streaming.run", {"prompt": prompt}) as trace:
91
+ output = await selected_runner.run(
92
+ f"Respond concisely and safely to this request:\\n{prompt}"
93
+ )
94
+ trace.set_output({"text": output})
95
+ yield f"data: {json.dumps({'text': output})}\\n\\n"
96
+ `;
97
+ }
98
+ const instruction = pattern.id === 'generic'
99
+ ? 'Respond safely and usefully to this general-purpose AI request:'
100
+ : `Respond to this ${pattern.id} starter input; no specialized orchestration is implemented:`;
101
+ return `from backend.observability.tracing import Tracer, build_tracer
102
+ from backend.orchestration.model_config import AgentRunner, build_agent_runner
103
+
104
+
105
+ async def run_${moduleName}(
106
+ input_text: str,
107
+ *,
108
+ runner: AgentRunner | None = None,
109
+ tracer: Tracer | None = None,
110
+ ) -> dict:
111
+ selected_runner = runner or build_agent_runner()
112
+ selected_tracer = tracer or build_tracer()
113
+ prompt = (
114
+ "${instruction}\\n"
115
+ f"{input_text}"
116
+ )
117
+ async with selected_tracer.trace("${pattern.id}.run", {"input": input_text}) as trace:
118
+ output = await selected_runner.run(prompt)
119
+ trace.set_output({"result": output})
120
+ return {
121
+ "result": output,
122
+ "input": input_text,
123
+ }
124
+ `;
125
+ }
126
+ export function renderPatternAgentTest(plan) {
127
+ const pattern = genAiPattern(plan);
128
+ const moduleName = pyModule(pattern.id);
129
+ const agentModule = `backend.orchestration.agents.${moduleName}_agent`;
130
+ if (pattern.id === 'rag') {
131
+ return `import asyncio
132
+
133
+ import pytest
134
+
135
+ from ${agentModule} import answer_question, enqueue_ingestion
136
+ from backend.observability.tracing import DisabledTracer
137
+ from backend.orchestration.model_config import ModelConfigurationError
138
+
139
+
140
+ class FakeRunner:
141
+ async def run(self, prompt):
142
+ assert "Question: What is Liftoff?" in prompt
143
+ return "Liftoff is the generated orchestration starter."
144
+
145
+
146
+ class FakePublisher:
147
+ def __init__(self):
148
+ self.messages = []
149
+
150
+ async def publish(self, topic, payload):
151
+ self.messages.append((topic, payload))
152
+
153
+
154
+ def test_rag_query_uses_injected_runner_without_network():
155
+ result = asyncio.run(
156
+ answer_question(
157
+ "What is Liftoff?",
158
+ runner=FakeRunner(),
159
+ tracer=DisabledTracer(),
160
+ )
161
+ )
162
+ assert result == {
163
+ "answer": "Liftoff is the generated orchestration starter.",
164
+ "question": "What is Liftoff?",
165
+ "citations": [],
166
+ }
167
+
168
+
169
+ def test_rag_ingestion_uses_injected_publisher():
170
+ publisher = FakePublisher()
171
+ result = asyncio.run(
172
+ enqueue_ingestion("az://documents/one.pdf", publisher=publisher)
173
+ )
174
+ assert result == {
175
+ "status": "queued",
176
+ "source_uri": "az://documents/one.pdf",
177
+ }
178
+ assert publisher.messages == [
179
+ ("rag.ingest", {"source_uri": "az://documents/one.pdf"})
180
+ ]
181
+
182
+
183
+ def test_missing_model_configuration_is_explicit(monkeypatch):
184
+ monkeypatch.delenv("PYDANTIC_AI_MODEL", raising=False)
185
+ with pytest.raises(ModelConfigurationError, match="PYDANTIC_AI_MODEL is required"):
186
+ asyncio.run(answer_question("unconfigured"))
187
+ `;
188
+ }
189
+ if (pattern.id === 'streaming') {
190
+ return `import asyncio
191
+
192
+ import pytest
193
+
194
+ from ${agentModule} import stream_response
195
+ from backend.observability.tracing import DisabledTracer
196
+ from backend.orchestration.model_config import ModelConfigurationError
197
+
198
+
199
+ class FakeRunner:
200
+ async def run(self, prompt):
201
+ assert "stream this" in prompt
202
+ return "offline streamed answer"
203
+
204
+
205
+ def test_streaming_uses_injected_runner_without_network():
206
+ async def collect():
207
+ return [
208
+ chunk
209
+ async for chunk in stream_response(
210
+ "stream this",
211
+ runner=FakeRunner(),
212
+ tracer=DisabledTracer(),
213
+ )
214
+ ]
215
+
216
+ chunks = asyncio.run(collect())
217
+ assert chunks == ['data: {"text": "offline streamed answer"}\\n\\n']
218
+
219
+
220
+ def test_missing_model_configuration_is_explicit(monkeypatch):
221
+ monkeypatch.delenv("PYDANTIC_AI_MODEL", raising=False)
222
+
223
+ async def collect():
224
+ return [chunk async for chunk in stream_response("unconfigured")]
225
+
226
+ with pytest.raises(ModelConfigurationError, match="PYDANTIC_AI_MODEL is required"):
227
+ asyncio.run(collect())
228
+ `;
229
+ }
230
+ return `import asyncio
231
+
232
+ import pytest
233
+
234
+ from ${agentModule} import run_${moduleName}
235
+ from backend.observability.tracing import DisabledTracer
236
+ from backend.orchestration.model_config import ModelConfigurationError
237
+
238
+
239
+ class FakeRunner:
240
+ async def run(self, prompt):
241
+ assert "offline input" in prompt
242
+ return "offline ${pattern.id} result"
243
+
244
+
245
+ def test_${moduleName}_uses_injected_runner_without_network():
246
+ result = asyncio.run(
247
+ run_${moduleName}(
248
+ "offline input",
249
+ runner=FakeRunner(),
250
+ tracer=DisabledTracer(),
251
+ )
252
+ )
253
+ assert result == {
254
+ "result": "offline ${pattern.id} result",
255
+ "input": "offline input",
256
+ }
257
+
258
+
259
+ def test_missing_model_configuration_is_explicit(monkeypatch):
260
+ monkeypatch.delenv("PYDANTIC_AI_MODEL", raising=False)
261
+ with pytest.raises(ModelConfigurationError, match="PYDANTIC_AI_MODEL is required"):
262
+ asyncio.run(run_${moduleName}("unconfigured"))
263
+ `;
264
+ }
265
+ export function renderPromptTemplate(plan) {
266
+ const pattern = genAiPattern(plan);
267
+ if (pattern.id === 'generic') {
268
+ return `# Generic GenAI System Prompt
269
+
270
+ Respond safely and usefully to the general-purpose request.
271
+
272
+ Do not assume retrieval, conversation memory, tools, streaming, fine-tuning, multi-agent coordination, or workflow behavior unless the project explicitly adds it.
273
+ `;
274
+ }
275
+ return `# ${pattern.label} Prompt
276
+
277
+ You are implementing a ${pattern.label} generated by Mission Control Liftoff.
278
+
279
+ Use PydanticAI orchestration and return outputs that match the API contract.
280
+ `;
281
+ }
282
+ export function renderPromptReadme() {
283
+ return `# Prompt Templates
284
+
285
+ These project-owned prompt files are editable design seeds. The generated runner does not load them.
286
+ Implement and test prompt loading in a separate reviewed project change before relying on their contents.
287
+ `;
288
+ }
289
+ export function renderVectorStore() {
290
+ return `from typing import Protocol
291
+
292
+
293
+ class VectorStore(Protocol):
294
+ async def search(self, query: str, limit: int = 5) -> list[dict]:
295
+ ...
296
+
297
+
298
+ class PgVectorStore:
299
+ async def search(self, query: str, limit: int = 5) -> list[dict]:
300
+ raise NotImplementedError("pgvector retrieval is not implemented by this starter.")
301
+ `;
302
+ }
303
+ export function renderPatternWorker(plan) {
304
+ const pattern = genAiPattern(plan);
305
+ return `async def run_worker() -> None:
306
+ raise NotImplementedError("${pattern.id} job processing is a deferred project integration.")
307
+ `;
308
+ }
309
+ //# sourceMappingURL=patterns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../../src/generators/genai/patterns.ts"],"names":[],"mappings":"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"}