@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.
- package/DEVELOPER.md +238 -77
- package/README.md +38 -33
- package/assets/supported-stack.json +3 -136
- package/dist/adapters/azure/governance-assessment.d.ts +2 -0
- package/dist/adapters/azure/governance-assessment.js +21 -0
- package/dist/adapters/azure/governance-assessment.js.map +1 -0
- package/dist/adapters/filesystem/atomic-write.d.ts +2 -0
- package/dist/adapters/filesystem/atomic-write.js +74 -0
- package/dist/adapters/filesystem/atomic-write.js.map +1 -0
- package/dist/adapters/filesystem/errors.d.ts +2 -0
- package/dist/adapters/filesystem/errors.js +8 -0
- package/dist/adapters/filesystem/errors.js.map +1 -0
- package/dist/adapters/filesystem/manifest-file.d.ts +1 -0
- package/dist/adapters/filesystem/manifest-file.js +21 -0
- package/dist/adapters/filesystem/manifest-file.js.map +1 -0
- package/dist/adapters/filesystem/project-config.d.ts +4 -0
- package/dist/adapters/filesystem/project-config.js +157 -0
- package/dist/adapters/filesystem/project-config.js.map +1 -0
- package/dist/adapters/filesystem/project-discovery.d.ts +2 -0
- package/dist/adapters/filesystem/project-discovery.js +30 -0
- package/dist/adapters/filesystem/project-discovery.js.map +1 -0
- package/dist/adapters/filesystem/project-files.d.ts +6 -0
- package/dist/adapters/filesystem/project-files.js +68 -0
- package/dist/adapters/filesystem/project-files.js.map +1 -0
- package/dist/adapters/filesystem/project-lock.d.ts +8 -0
- package/dist/adapters/filesystem/project-lock.js +164 -0
- package/dist/adapters/filesystem/project-lock.js.map +1 -0
- package/dist/adapters/filesystem/project-paths.d.ts +2 -0
- package/dist/adapters/filesystem/project-paths.js +60 -0
- package/dist/adapters/filesystem/project-paths.js.map +1 -0
- package/dist/adapters/filesystem/project-transaction.d.ts +24 -0
- package/dist/adapters/filesystem/project-transaction.js +177 -0
- package/dist/adapters/filesystem/project-transaction.js.map +1 -0
- package/dist/adapters/filesystem/reviewed-update-transaction.d.ts +53 -0
- package/dist/adapters/filesystem/reviewed-update-transaction.js +864 -0
- package/dist/adapters/filesystem/reviewed-update-transaction.js.map +1 -0
- package/dist/adapters/filesystem/update-previews.d.ts +50 -0
- package/dist/adapters/filesystem/update-previews.js +613 -0
- package/dist/adapters/filesystem/update-previews.js.map +1 -0
- package/dist/adapters/git/governance-assessment.d.ts +22 -0
- package/dist/adapters/git/governance-assessment.js +161 -0
- package/dist/adapters/git/governance-assessment.js.map +1 -0
- package/dist/adapters/github/governance-assessment.d.ts +2 -0
- package/dist/adapters/github/governance-assessment.js +18 -0
- package/dist/adapters/github/governance-assessment.js.map +1 -0
- package/dist/adapters/packaged-assets/package-root.d.ts +3 -0
- package/dist/adapters/packaged-assets/package-root.js +21 -0
- package/dist/adapters/packaged-assets/package-root.js.map +1 -0
- package/dist/adapters/packaged-assets/supported-stack.d.ts +4 -0
- package/dist/adapters/packaged-assets/supported-stack.js +18 -0
- package/dist/adapters/packaged-assets/supported-stack.js.map +1 -0
- package/dist/adapters/packaged-assets/template-assets.d.ts +23 -0
- package/dist/adapters/packaged-assets/template-assets.js +36 -0
- package/dist/adapters/packaged-assets/template-assets.js.map +1 -0
- package/dist/adapters/process/shell-command.d.ts +6 -0
- package/dist/adapters/process/shell-command.js +27 -0
- package/dist/adapters/process/shell-command.js.map +1 -0
- package/dist/application/context.d.ts +25 -0
- package/dist/application/context.js +2 -0
- package/dist/application/context.js.map +1 -0
- package/dist/application/diagnose/doctor.d.ts +21 -0
- package/dist/application/diagnose/doctor.js +580 -0
- package/dist/application/diagnose/doctor.js.map +1 -0
- package/dist/application/diagnose/generated-project.d.ts +1 -0
- package/dist/application/diagnose/generated-project.js +105 -0
- package/dist/application/diagnose/generated-project.js.map +1 -0
- package/dist/application/diagnose/validate.d.ts +6 -0
- package/dist/application/diagnose/validate.js +27 -0
- package/dist/application/diagnose/validate.js.map +1 -0
- package/dist/application/initialize/fixture.d.ts +2 -0
- package/dist/application/initialize/fixture.js +39 -0
- package/dist/application/initialize/fixture.js.map +1 -0
- package/dist/application/initialize/inputs.d.ts +3 -0
- package/dist/application/initialize/inputs.js +35 -0
- package/dist/application/initialize/inputs.js.map +1 -0
- package/dist/application/initialize/use-case.d.ts +23 -0
- package/dist/application/initialize/use-case.js +360 -0
- package/dist/application/initialize/use-case.js.map +1 -0
- package/dist/application/migrate/use-case.d.ts +7 -0
- package/dist/application/migrate/use-case.js +378 -0
- package/dist/application/migrate/use-case.js.map +1 -0
- package/dist/application/project/catalog.d.ts +46 -0
- package/dist/application/project/catalog.js +12 -0
- package/dist/application/project/catalog.js.map +1 -0
- package/dist/application/project/manifest.d.ts +2 -0
- package/dist/application/project/manifest.js +29 -0
- package/dist/application/project/manifest.js.map +1 -0
- package/dist/application/project/planning.d.ts +6 -0
- package/dist/application/project/planning.js +12 -0
- package/dist/application/project/planning.js.map +1 -0
- package/dist/application/update/approval.d.ts +39 -0
- package/dist/application/update/approval.js +54 -0
- package/dist/application/update/approval.js.map +1 -0
- package/dist/application/update/command-guidance.d.ts +2 -0
- package/dist/application/update/command-guidance.js +14 -0
- package/dist/application/update/command-guidance.js.map +1 -0
- package/dist/application/update/inspection.d.ts +37 -0
- package/dist/application/update/inspection.js +235 -0
- package/dist/application/update/inspection.js.map +1 -0
- package/dist/application/update/migration-runtime.d.ts +14 -0
- package/dist/application/update/migration-runtime.js +178 -0
- package/dist/application/update/migration-runtime.js.map +1 -0
- package/dist/application/update/output.d.ts +134 -0
- package/dist/application/update/output.js +182 -0
- package/dist/application/update/output.js.map +1 -0
- package/dist/application/update/planning.d.ts +40 -0
- package/dist/application/update/planning.js +293 -0
- package/dist/application/update/planning.js.map +1 -0
- package/dist/application/update/preview.d.ts +49 -0
- package/dist/application/update/preview.js +220 -0
- package/dist/application/update/preview.js.map +1 -0
- package/dist/application/update/protected-source.d.ts +25 -0
- package/dist/application/update/protected-source.js +81 -0
- package/dist/application/update/protected-source.js.map +1 -0
- package/dist/application/update/reporting.d.ts +42 -0
- package/dist/application/update/reporting.js +326 -0
- package/dist/application/update/reporting.js.map +1 -0
- package/dist/application/update/revalidation-plan.d.ts +22 -0
- package/dist/application/update/revalidation-plan.js +108 -0
- package/dist/application/update/revalidation-plan.js.map +1 -0
- package/dist/application/update/revalidation.d.ts +70 -0
- package/dist/application/update/revalidation.js +337 -0
- package/dist/application/update/revalidation.js.map +1 -0
- package/dist/application/update/review-plan.d.ts +25 -0
- package/dist/application/update/review-plan.js +89 -0
- package/dist/application/update/review-plan.js.map +1 -0
- package/dist/application/update/transaction-approval.d.ts +29 -0
- package/dist/application/update/transaction-approval.js +82 -0
- package/dist/application/update/transaction-approval.js.map +1 -0
- package/dist/application/update/use-case.d.ts +9 -0
- package/dist/application/update/use-case.js +271 -0
- package/dist/application/update/use-case.js.map +1 -0
- package/dist/application/update/write-plan.d.ts +15 -0
- package/dist/application/update/write-plan.js +115 -0
- package/dist/application/update/write-plan.js.map +1 -0
- package/dist/application/upgrade/use-case.d.ts +6 -0
- package/dist/application/upgrade/use-case.js +82 -0
- package/dist/application/upgrade/use-case.js.map +1 -0
- package/dist/args.d.ts +5 -65
- package/dist/args.js +4 -472
- package/dist/args.js.map +1 -1
- package/dist/artifact-lifecycle.d.ts +1 -21
- package/dist/artifact-lifecycle.js +1 -75
- package/dist/artifact-lifecycle.js.map +1 -1
- package/dist/catalogs.d.ts +1 -50
- package/dist/catalogs.js +1 -472
- package/dist/catalogs.js.map +1 -1
- package/dist/cli/args/contracts.d.ts +51 -0
- package/dist/cli/args/contracts.js +2 -0
- package/dist/cli/args/contracts.js.map +1 -0
- package/dist/cli/args/definitions.d.ts +6 -0
- package/dist/cli/args/definitions.js +188 -0
- package/dist/cli/args/definitions.js.map +1 -0
- package/dist/cli/args/help.d.ts +5 -0
- package/dist/cli/args/help.js +142 -0
- package/dist/cli/args/help.js.map +1 -0
- package/dist/cli/args/parser.d.ts +5 -0
- package/dist/cli/args/parser.js +160 -0
- package/dist/cli/args/parser.js.map +1 -0
- package/dist/cli/args/readers.d.ts +4 -0
- package/dist/cli/args/readers.js +19 -0
- package/dist/cli/args/readers.js.map +1 -0
- package/dist/cli/commands/diagnose.d.ts +4 -0
- package/dist/cli/commands/diagnose.js +12 -0
- package/dist/cli/commands/diagnose.js.map +1 -0
- package/dist/cli/commands/dispatch.d.ts +3 -0
- package/dist/cli/commands/dispatch.js +94 -0
- package/dist/cli/commands/dispatch.js.map +1 -0
- package/dist/cli/commands/help.d.ts +3 -0
- package/dist/cli/commands/help.js +32 -0
- package/dist/cli/commands/help.js.map +1 -0
- package/dist/cli/commands/helpers.d.ts +8 -0
- package/dist/cli/commands/helpers.js +97 -0
- package/dist/cli/commands/helpers.js.map +1 -0
- package/dist/cli/commands/initialize.d.ts +3 -0
- package/dist/cli/commands/initialize.js +7 -0
- package/dist/cli/commands/initialize.js.map +1 -0
- package/dist/cli/commands/migrate.d.ts +3 -0
- package/dist/cli/commands/migrate.js +8 -0
- package/dist/cli/commands/migrate.js.map +1 -0
- package/dist/cli/commands/plan.d.ts +3 -0
- package/dist/cli/commands/plan.js +34 -0
- package/dist/cli/commands/plan.js.map +1 -0
- package/dist/cli/commands/reference.d.ts +5 -0
- package/dist/cli/commands/reference.js +43 -0
- package/dist/cli/commands/reference.js.map +1 -0
- package/dist/cli/commands/update.d.ts +3 -0
- package/dist/cli/commands/update.js +10 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/commands/upgrade.d.ts +3 -0
- package/dist/cli/commands/upgrade.js +7 -0
- package/dist/cli/commands/upgrade.js.map +1 -0
- package/dist/cli/context.d.ts +1 -0
- package/dist/cli/context.js +2 -0
- package/dist/cli/context.js.map +1 -0
- package/dist/cli/project-options.d.ts +3 -0
- package/dist/cli/project-options.js +41 -0
- package/dist/cli/project-options.js.map +1 -0
- package/dist/cli.d.ts +3 -3
- package/dist/cli.js +2 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands.d.ts +4 -35
- package/dist/commands.js +3 -2969
- package/dist/commands.js.map +1 -1
- package/dist/container-validation.d.ts +1 -1
- package/dist/domain/governance/activation/approvals.d.ts +351 -0
- package/dist/domain/governance/activation/approvals.js +528 -0
- package/dist/domain/governance/activation/approvals.js.map +1 -0
- package/dist/domain/governance/activation/canonical-json.d.ts +4 -0
- package/dist/domain/governance/activation/canonical-json.js +39 -0
- package/dist/domain/governance/activation/canonical-json.js.map +1 -0
- package/dist/domain/governance/activation/capabilities.d.ts +7 -0
- package/dist/domain/governance/activation/capabilities.js +33 -0
- package/dist/domain/governance/activation/capabilities.js.map +1 -0
- package/dist/domain/governance/activation/evidence.d.ts +63 -0
- package/dist/domain/governance/activation/evidence.js +444 -0
- package/dist/domain/governance/activation/evidence.js.map +1 -0
- package/dist/domain/governance/activation/graph.d.ts +397 -0
- package/dist/domain/governance/activation/graph.js +441 -0
- package/dist/domain/governance/activation/graph.js.map +1 -0
- package/dist/domain/governance/activation/inputs.d.ts +25 -0
- package/dist/domain/governance/activation/inputs.js +63 -0
- package/dist/domain/governance/activation/inputs.js.map +1 -0
- package/dist/domain/governance/activation/operations.d.ts +19 -0
- package/dist/domain/governance/activation/operations.js +181 -0
- package/dist/domain/governance/activation/operations.js.map +1 -0
- package/dist/domain/governance/activation/readiness.d.ts +27 -0
- package/dist/domain/governance/activation/readiness.js +269 -0
- package/dist/domain/governance/activation/readiness.js.map +1 -0
- package/dist/domain/governance/activation/types.d.ts +399 -0
- package/dist/domain/governance/activation/types.js +109 -0
- package/dist/domain/governance/activation/types.js.map +1 -0
- package/dist/domain/governance/activation/validators.d.ts +22 -0
- package/dist/domain/governance/activation/validators.js +1347 -0
- package/dist/domain/governance/activation/validators.js.map +1 -0
- package/dist/domain/governance/assessment/catalog.d.ts +14 -0
- package/dist/domain/governance/assessment/catalog.js +105 -0
- package/dist/domain/governance/assessment/catalog.js.map +1 -0
- package/dist/domain/governance/assessment/errors.d.ts +10 -0
- package/dist/domain/governance/assessment/errors.js +22 -0
- package/dist/domain/governance/assessment/errors.js.map +1 -0
- package/dist/domain/governance/assessment/index.d.ts +8 -0
- package/dist/domain/governance/assessment/index.js +9 -0
- package/dist/domain/governance/assessment/index.js.map +1 -0
- package/dist/domain/governance/assessment/live-normalize.d.ts +19 -0
- package/dist/domain/governance/assessment/live-normalize.js +403 -0
- package/dist/domain/governance/assessment/live-normalize.js.map +1 -0
- package/dist/domain/governance/assessment/predicates.d.ts +36 -0
- package/dist/domain/governance/assessment/predicates.js +545 -0
- package/dist/domain/governance/assessment/predicates.js.map +1 -0
- package/dist/domain/governance/assessment/report.d.ts +23 -0
- package/dist/domain/governance/assessment/report.js +266 -0
- package/dist/domain/governance/assessment/report.js.map +1 -0
- package/dist/domain/governance/assessment/sanitize.d.ts +8 -0
- package/dist/domain/governance/assessment/sanitize.js +60 -0
- package/dist/domain/governance/assessment/sanitize.js.map +1 -0
- package/dist/domain/governance/assessment/types.d.ts +174 -0
- package/dist/domain/governance/assessment/types.js +13 -0
- package/dist/domain/governance/assessment/types.js.map +1 -0
- package/dist/domain/governance/assessment/yaml.d.ts +6 -0
- package/dist/domain/governance/assessment/yaml.js +30 -0
- package/dist/domain/governance/assessment/yaml.js.map +1 -0
- package/dist/domain/governance/policy/identity.d.ts +64 -0
- package/dist/domain/governance/policy/identity.js +112 -0
- package/dist/domain/governance/policy/identity.js.map +1 -0
- package/dist/domain/migration/dependencies.d.ts +7 -0
- package/dist/domain/migration/dependencies.js +221 -0
- package/dist/domain/migration/dependencies.js.map +1 -0
- package/dist/domain/migration/inventory.d.ts +3 -0
- package/dist/domain/migration/inventory.js +15 -0
- package/dist/domain/migration/inventory.js.map +1 -0
- package/dist/domain/project/artifact-lifecycle.d.ts +69 -0
- package/dist/domain/project/artifact-lifecycle.js +137 -0
- package/dist/domain/project/artifact-lifecycle.js.map +1 -0
- package/dist/domain/project/catalog.d.ts +48 -0
- package/dist/domain/project/catalog.js +507 -0
- package/dist/domain/project/catalog.js.map +1 -0
- package/dist/domain/project/contracts.d.ts +247 -0
- package/dist/domain/project/contracts.js +2 -0
- package/dist/domain/project/contracts.js.map +1 -0
- package/dist/domain/project/errors.d.ts +3 -0
- package/dist/domain/project/errors.js +7 -0
- package/dist/domain/project/errors.js.map +1 -0
- package/dist/domain/project/infrastructure-layout.d.ts +26 -0
- package/dist/domain/project/infrastructure-layout.js +125 -0
- package/dist/domain/project/infrastructure-layout.js.map +1 -0
- package/dist/domain/project/inputs.d.ts +21 -0
- package/dist/domain/project/inputs.js +41 -0
- package/dist/domain/project/inputs.js.map +1 -0
- package/dist/domain/project/manifest/artifacts.d.ts +8 -0
- package/dist/domain/project/manifest/artifacts.js +150 -0
- package/dist/domain/project/manifest/artifacts.js.map +1 -0
- package/dist/domain/project/manifest/context.d.ts +13 -0
- package/dist/domain/project/manifest/context.js +2 -0
- package/dist/domain/project/manifest/context.js.map +1 -0
- package/dist/domain/project/manifest/fields.d.ts +6 -0
- package/dist/domain/project/manifest/fields.js +36 -0
- package/dist/domain/project/manifest/fields.js.map +1 -0
- package/dist/domain/project/manifest/governance.d.ts +8 -0
- package/dist/domain/project/manifest/governance.js +161 -0
- package/dist/domain/project/manifest/governance.js.map +1 -0
- package/dist/domain/project/manifest/project-identity.d.ts +6 -0
- package/dist/domain/project/manifest/project-identity.js +273 -0
- package/dist/domain/project/manifest/project-identity.js.map +1 -0
- package/dist/domain/project/manifest/reader.d.ts +9 -0
- package/dist/domain/project/manifest/reader.js +141 -0
- package/dist/domain/project/manifest/reader.js.map +1 -0
- package/dist/domain/project/paths.d.ts +2 -0
- package/dist/domain/project/paths.js +29 -0
- package/dist/domain/project/paths.js.map +1 -0
- package/dist/domain/project/planning.d.ts +19 -0
- package/dist/domain/project/planning.js +329 -0
- package/dist/domain/project/planning.js.map +1 -0
- package/dist/domain/project/retired-workload.d.ts +4 -0
- package/dist/domain/project/retired-workload.js +18 -0
- package/dist/domain/project/retired-workload.js.map +1 -0
- package/dist/domain/project/reviewed-update-artifacts.d.ts +2 -0
- package/dist/domain/project/reviewed-update-artifacts.js +3 -0
- package/dist/domain/project/reviewed-update-artifacts.js.map +1 -0
- package/dist/domain/project/supported-stack.d.ts +113 -0
- package/dist/domain/project/supported-stack.js +426 -0
- package/dist/domain/project/supported-stack.js.map +1 -0
- package/dist/domain/workstation/constraints.d.ts +6 -0
- package/dist/domain/workstation/constraints.js +8 -0
- package/dist/domain/workstation/constraints.js.map +1 -0
- package/dist/file-system.d.ts +10 -44
- package/dist/file-system.js +9 -1245
- package/dist/file-system.js.map +1 -1
- package/dist/framework-adapters.d.ts +1 -1
- package/dist/framework-validation.d.ts +1 -1
- package/dist/framework-validation.js +1 -1
- package/dist/framework-validation.js.map +1 -1
- package/dist/genai-templates.d.ts +2 -9
- package/dist/genai-templates.js +4 -5
- package/dist/genai-templates.js.map +1 -1
- package/dist/generators/common/artifacts.d.ts +6 -0
- package/dist/generators/common/artifacts.js +30 -0
- package/dist/generators/common/artifacts.js.map +1 -0
- package/dist/generators/common/base.d.ts +17 -0
- package/dist/generators/common/base.js +425 -0
- package/dist/generators/common/base.js.map +1 -0
- package/dist/generators/common/dotenv-validation.d.ts +2 -0
- package/dist/generators/common/dotenv-validation.js +80 -0
- package/dist/generators/common/dotenv-validation.js.map +1 -0
- package/dist/generators/common/environments.d.ts +3 -0
- package/dist/generators/common/environments.js +15 -0
- package/dist/generators/common/environments.js.map +1 -0
- package/dist/generators/common/frontend.d.ts +15 -0
- package/dist/generators/common/frontend.js +166 -0
- package/dist/generators/common/frontend.js.map +1 -0
- package/dist/generators/common/python-settings.d.ts +2 -0
- package/dist/generators/common/python-settings.js +70 -0
- package/dist/generators/common/python-settings.js.map +1 -0
- package/dist/generators/common/spec-workflow.d.ts +28 -0
- package/dist/generators/common/spec-workflow.js +567 -0
- package/dist/generators/common/spec-workflow.js.map +1 -0
- package/dist/generators/common/values.d.ts +13 -0
- package/dist/generators/common/values.js +16 -0
- package/dist/generators/common/values.js.map +1 -0
- package/dist/generators/containers/compose.d.ts +7 -0
- package/dist/generators/containers/compose.js +196 -0
- package/dist/generators/containers/compose.js.map +1 -0
- package/dist/generators/containers/context.d.ts +1 -0
- package/dist/generators/containers/context.js +43 -0
- package/dist/generators/containers/context.js.map +1 -0
- package/dist/generators/containers/images.d.ts +7 -0
- package/dist/generators/containers/images.js +119 -0
- package/dist/generators/containers/images.js.map +1 -0
- package/dist/generators/context.d.ts +42 -0
- package/dist/generators/context.js +38 -0
- package/dist/generators/context.js.map +1 -0
- package/dist/generators/genai/backend.d.ts +20 -0
- package/dist/generators/genai/backend.js +667 -0
- package/dist/generators/genai/backend.js.map +1 -0
- package/dist/generators/genai/configuration.d.ts +3 -0
- package/dist/generators/genai/configuration.js +43 -0
- package/dist/generators/genai/configuration.js.map +1 -0
- package/dist/generators/genai/database.d.ts +7 -0
- package/dist/generators/genai/database.js +71 -0
- package/dist/generators/genai/database.js.map +1 -0
- package/dist/generators/genai/functions.d.ts +15 -0
- package/dist/generators/genai/functions.js +156 -0
- package/dist/generators/genai/functions.js.map +1 -0
- package/dist/generators/genai/index.d.ts +8 -0
- package/dist/generators/genai/index.js +11 -0
- package/dist/generators/genai/index.js.map +1 -0
- package/dist/generators/genai/patterns.d.ts +9 -0
- package/dist/generators/genai/patterns.js +309 -0
- package/dist/generators/genai/patterns.js.map +1 -0
- package/dist/generators/infrastructure/azure.d.ts +18 -0
- package/dist/generators/infrastructure/azure.js +655 -0
- package/dist/generators/infrastructure/azure.js.map +1 -0
- package/dist/generators/infrastructure/names.d.ts +23 -0
- package/dist/generators/infrastructure/names.js +51 -0
- package/dist/generators/infrastructure/names.js.map +1 -0
- package/dist/generators/standard/configuration.d.ts +3 -0
- package/dist/generators/standard/configuration.js +26 -0
- package/dist/generators/standard/configuration.js.map +1 -0
- package/dist/generators/standard/go.d.ts +17 -0
- package/dist/generators/standard/go.js +338 -0
- package/dist/generators/standard/go.js.map +1 -0
- package/dist/generators/standard/index.d.ts +12 -0
- package/dist/generators/standard/index.js +12 -0
- package/dist/generators/standard/index.js.map +1 -0
- package/dist/generators/standard/node.d.ts +20 -0
- package/dist/generators/standard/node.js +314 -0
- package/dist/generators/standard/node.js.map +1 -0
- package/dist/generators/standard/python.d.ts +18 -0
- package/dist/generators/standard/python.js +191 -0
- package/dist/generators/standard/python.js.map +1 -0
- package/dist/go-template-assets.js +3 -3
- package/dist/go-template-assets.js.map +1 -1
- package/dist/governance-activation/activation-state.d.ts +1 -1
- package/dist/governance-activation/activation-state.js +49 -9
- package/dist/governance-activation/activation-state.js.map +1 -1
- package/dist/governance-activation/approvals.d.ts +1 -188
- package/dist/governance-activation/approvals.js +1 -507
- package/dist/governance-activation/approvals.js.map +1 -1
- package/dist/governance-activation/canonical-json.d.ts +1 -3
- package/dist/governance-activation/canonical-json.js +1 -35
- package/dist/governance-activation/canonical-json.js.map +1 -1
- package/dist/governance-activation/commands.d.ts +6 -1
- package/dist/governance-activation/commands.js +135 -107
- package/dist/governance-activation/commands.js.map +1 -1
- package/dist/governance-activation/compatibility.d.ts +30 -5
- package/dist/governance-activation/compatibility.js +74 -8
- package/dist/governance-activation/compatibility.js.map +1 -1
- package/dist/governance-activation/credentials.d.ts +3 -3
- package/dist/governance-activation/credentials.js +5 -5
- package/dist/governance-activation/credentials.js.map +1 -1
- package/dist/governance-activation/doctor.d.ts +1 -1
- package/dist/governance-activation/doctor.js +59 -100
- package/dist/governance-activation/doctor.js.map +1 -1
- package/dist/governance-activation/evidence.d.ts +1 -49
- package/dist/governance-activation/evidence.js +1 -245
- package/dist/governance-activation/evidence.js.map +1 -1
- package/dist/governance-activation/git-ignore.d.ts +9 -0
- package/dist/governance-activation/git-ignore.js +76 -0
- package/dist/governance-activation/git-ignore.js.map +1 -0
- package/dist/governance-activation/graph.d.ts +1 -397
- package/dist/governance-activation/graph.js +1 -440
- package/dist/governance-activation/graph.js.map +1 -1
- package/dist/governance-activation/historical-state.d.ts +81 -0
- package/dist/governance-activation/historical-state.js +817 -0
- package/dist/governance-activation/historical-state.js.map +1 -0
- package/dist/governance-activation/history-contracts.d.ts +109 -0
- package/dist/governance-activation/history-contracts.js +303 -0
- package/dist/governance-activation/history-contracts.js.map +1 -0
- package/dist/governance-activation/identity.d.ts +1 -35
- package/dist/governance-activation/identity.js +1 -88
- package/dist/governance-activation/identity.js.map +1 -1
- package/dist/governance-activation/index.d.ts +3 -0
- package/dist/governance-activation/index.js +3 -0
- package/dist/governance-activation/index.js.map +1 -1
- package/dist/governance-activation/inputs.d.ts +10 -0
- package/dist/governance-activation/inputs.js +158 -0
- package/dist/governance-activation/inputs.js.map +1 -0
- package/dist/governance-activation/migration-history.d.ts +97 -0
- package/dist/governance-activation/migration-history.js +388 -0
- package/dist/governance-activation/migration-history.js.map +1 -0
- package/dist/governance-activation/migration.d.ts +4 -3
- package/dist/governance-activation/migration.js +14 -6
- package/dist/governance-activation/migration.js.map +1 -1
- package/dist/governance-activation/phase-bootstrap-state.d.ts +3 -0
- package/dist/governance-activation/phase-bootstrap-state.js +128 -0
- package/dist/governance-activation/phase-bootstrap-state.js.map +1 -0
- package/dist/governance-activation/phase-discovery.d.ts +2 -0
- package/dist/governance-activation/phase-discovery.js +88 -0
- package/dist/governance-activation/phase-discovery.js.map +1 -0
- package/dist/governance-activation/phase-governance.d.ts +4 -0
- package/dist/governance-activation/phase-governance.js +141 -0
- package/dist/governance-activation/phase-governance.js.map +1 -0
- package/dist/governance-activation/phase-publication.d.ts +8 -0
- package/dist/governance-activation/phase-publication.js +318 -0
- package/dist/governance-activation/phase-publication.js.map +1 -0
- package/dist/governance-activation/proof-records.d.ts +3 -0
- package/dist/governance-activation/proof-records.js +78 -0
- package/dist/governance-activation/proof-records.js.map +1 -0
- package/dist/governance-activation/read-only.d.ts +30 -0
- package/dist/governance-activation/read-only.js +33 -0
- package/dist/governance-activation/read-only.js.map +1 -0
- package/dist/governance-activation/readiness.d.ts +1 -25
- package/dist/governance-activation/readiness.js +1 -222
- package/dist/governance-activation/readiness.js.map +1 -1
- package/dist/governance-activation/reconciliation.d.ts +1 -1
- package/dist/governance-activation/reconciliation.js +3 -3
- package/dist/governance-activation/reconciliation.js.map +1 -1
- package/dist/governance-activation/release-integrity.d.ts +1 -1
- package/dist/governance-activation/release-integrity.js +2 -2
- package/dist/governance-activation/release-integrity.js.map +1 -1
- package/dist/governance-activation/seed-lifecycle.d.ts +36 -6
- package/dist/governance-activation/seed-lifecycle.js +444 -77
- package/dist/governance-activation/seed-lifecycle.js.map +1 -1
- package/dist/governance-activation/source-of-truth.d.ts +5 -3
- package/dist/governance-activation/source-of-truth.js +32 -52
- package/dist/governance-activation/source-of-truth.js.map +1 -1
- package/dist/governance-activation/spec-kit-seed.d.ts +9 -0
- package/dist/governance-activation/spec-kit-seed.js +43 -0
- package/dist/governance-activation/spec-kit-seed.js.map +1 -0
- package/dist/governance-activation/task-projection.d.ts +1 -1
- package/dist/governance-activation/transition-planning.d.ts +17 -0
- package/dist/governance-activation/transition-planning.js +259 -0
- package/dist/governance-activation/transition-planning.js.map +1 -0
- package/dist/governance-activation/transition-ports.d.ts +150 -0
- package/dist/governance-activation/transition-ports.js +2 -0
- package/dist/governance-activation/transition-ports.js.map +1 -0
- package/dist/governance-activation/transition-process.d.ts +7 -0
- package/dist/governance-activation/transition-process.js +21 -0
- package/dist/governance-activation/transition-process.js.map +1 -0
- package/dist/governance-activation/transition-records.d.ts +56 -0
- package/dist/governance-activation/transition-records.js +208 -0
- package/dist/governance-activation/transition-records.js.map +1 -0
- package/dist/governance-activation/transitions.d.ts +14 -167
- package/dist/governance-activation/transitions.js +173 -2061
- package/dist/governance-activation/transitions.js.map +1 -1
- package/dist/governance-activation/types.d.ts +1 -390
- package/dist/governance-activation/types.js +1 -107
- package/dist/governance-activation/types.js.map +1 -1
- package/dist/governance-activation/validators.d.ts +1 -17
- package/dist/governance-activation/validators.js +1 -1304
- package/dist/governance-activation/validators.js.map +1 -1
- package/dist/governance-assessment/catalog.d.ts +1 -2
- package/dist/governance-assessment/catalog.js +18 -85
- package/dist/governance-assessment/catalog.js.map +1 -1
- package/dist/governance-assessment/command.d.ts +1 -1
- package/dist/governance-assessment/command.js +8 -12
- package/dist/governance-assessment/command.js.map +1 -1
- package/dist/governance-assessment/engine.d.ts +6 -11
- package/dist/governance-assessment/engine.js +490 -114
- package/dist/governance-assessment/engine.js.map +1 -1
- package/dist/governance-assessment/live-normalize.d.ts +1 -19
- package/dist/governance-assessment/live-normalize.js +1 -402
- package/dist/governance-assessment/live-normalize.js.map +1 -1
- package/dist/governance-assessment/live-transport.d.ts +2 -6
- package/dist/governance-assessment/live-transport.js +10 -22
- package/dist/governance-assessment/live-transport.js.map +1 -1
- package/dist/governance-assessment/live.js +55 -5
- package/dist/governance-assessment/live.js.map +1 -1
- package/dist/governance-assessment/predicates.d.ts +1 -27
- package/dist/governance-assessment/predicates.js +1 -329
- package/dist/governance-assessment/predicates.js.map +1 -1
- package/dist/governance-assessment/project.d.ts +20 -17
- package/dist/governance-assessment/project.js +101 -151
- package/dist/governance-assessment/project.js.map +1 -1
- package/dist/governance-assessment/readers.d.ts +1 -5
- package/dist/governance-assessment/readers.js +5 -13
- package/dist/governance-assessment/readers.js.map +1 -1
- package/dist/governance-assessment/report.d.ts +1 -23
- package/dist/governance-assessment/report.js +1 -265
- package/dist/governance-assessment/report.js.map +1 -1
- package/dist/governance-assessment/sanitize.d.ts +1 -8
- package/dist/governance-assessment/sanitize.js +1 -56
- package/dist/governance-assessment/sanitize.js.map +1 -1
- package/dist/governance-assessment/types.d.ts +1 -173
- package/dist/governance-assessment/types.js +1 -12
- package/dist/governance-assessment/types.js.map +1 -1
- package/dist/governance-assessment/yaml.d.ts +1 -6
- package/dist/governance-assessment/yaml.js +1 -29
- package/dist/governance-assessment/yaml.js.map +1 -1
- package/dist/init-filesystem.d.ts +1 -1
- package/dist/init-filesystem.js +126 -174
- package/dist/init-filesystem.js.map +1 -1
- package/dist/interactive.d.ts +2 -2
- package/dist/interactive.js +42 -41
- package/dist/interactive.js.map +1 -1
- package/dist/migrate-plan.d.ts +1 -1
- package/dist/migrate-plan.js +14 -8
- package/dist/migrate-plan.js.map +1 -1
- package/dist/npm-template-assets.js +5 -4
- package/dist/npm-template-assets.js.map +1 -1
- package/dist/openspec-profile.d.ts +1 -1
- package/dist/opentofu-template-assets.js +3 -3
- package/dist/opentofu-template-assets.js.map +1 -1
- package/dist/package-identity.d.ts +3 -0
- package/dist/package-identity.js +13 -2
- package/dist/package-identity.js.map +1 -1
- package/dist/planner.d.ts +1 -19
- package/dist/planner.js +1 -565
- package/dist/planner.js.map +1 -1
- package/dist/process-runner.d.ts +1 -1
- package/dist/project-dependencies.d.ts +5 -3
- package/dist/project-dependencies.js +74 -63
- package/dist/project-dependencies.js.map +1 -1
- package/dist/published-verifier.js +61 -30
- package/dist/published-verifier.js.map +1 -1
- package/dist/python-template-assets.js +6 -9
- package/dist/python-template-assets.js.map +1 -1
- package/dist/reconcile.d.ts +1 -1
- package/dist/reconcile.js +2 -2
- package/dist/reconcile.js.map +1 -1
- package/dist/repository-governance.d.ts +5 -2
- package/dist/repository-governance.js +140 -113
- package/dist/repository-governance.js.map +1 -1
- package/dist/runtime.js +1 -1
- package/dist/runtime.js.map +1 -1
- package/dist/scan.d.ts +6 -2
- package/dist/scan.js +78 -30
- package/dist/scan.js.map +1 -1
- package/dist/self-upgrade.d.ts +1 -1
- package/dist/self-upgrade.js +20 -7
- package/dist/self-upgrade.js.map +1 -1
- package/dist/stable-release.js +7 -1
- package/dist/stable-release.js.map +1 -1
- package/dist/standard-templates.d.ts +2 -2
- package/dist/standard-templates.js +6 -841
- package/dist/standard-templates.js.map +1 -1
- package/dist/supported-stack.d.ts +3 -115
- package/dist/supported-stack.js +4 -438
- package/dist/supported-stack.js.map +1 -1
- package/dist/telemetry/index.d.ts +1 -1
- package/dist/templates.d.ts +10 -20
- package/dist/templates.js +52 -3261
- package/dist/templates.js.map +1 -1
- package/dist/types.d.ts +1 -263
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/dist/version.js +2 -6
- package/dist/version.js.map +1 -1
- package/dist/workstation-catalog.d.ts +5 -2
- package/dist/workstation-catalog.js +33 -2
- package/dist/workstation-catalog.js.map +1 -1
- package/dist/workstation.d.ts +4 -3
- package/dist/workstation.js +86 -32
- package/dist/workstation.js.map +1 -1
- package/docs/assets/liftoff-terminal.svg +3 -3
- package/docs/azure-deployment.md +107 -10
- package/docs/cli-reference.md +144 -35
- package/docs/configuration-and-manifests.md +152 -35
- package/docs/existing-repositories.md +48 -12
- package/docs/getting-started.md +44 -31
- package/docs/prerequisites.md +34 -35
- package/docs/project-structure.md +39 -46
- package/docs/repository-governance.md +96 -26
- package/docs/safety-and-consent.md +90 -28
- package/docs/spec-workflows-and-agents.md +31 -28
- package/docs/supported-stack.md +11 -9
- package/docs/troubleshooting.md +114 -54
- package/docs/workloads.md +52 -67
- package/package.json +4 -7
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/UPSTREAM_LICENSE.txt +0 -21
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/catalog.json +0 -520
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/packaged/gitignore +0 -27
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/README.md +0 -25
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/components.json +0 -22
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/eslint.config.js +0 -23
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/index.html +0 -13
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/package-lock.json +0 -6156
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/package.json +0 -60
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/public/power-apps.svg +0 -55
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/App.tsx +0 -17
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/assets/react.svg +0 -1
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/mode-toggle.tsx +0 -37
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/badge.tsx +0 -46
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/button.tsx +0 -60
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/calendar.tsx +0 -211
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/card.tsx +0 -92
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/chart.tsx +0 -355
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/checkbox.tsx +0 -32
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/command.tsx +0 -184
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/dialog.tsx +0 -141
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/dropdown-menu.tsx +0 -257
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/input.tsx +0 -21
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/label.tsx +0 -22
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/popover.tsx +0 -46
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/progress.tsx +0 -29
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/select.tsx +0 -185
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/separator.tsx +0 -26
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/skeleton.tsx +0 -13
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/table.tsx +0 -114
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/tabs.tsx +0 -66
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/textarea.tsx +0 -18
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/tooltip.tsx +0 -61
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/hooks/use-theme.ts +0 -11
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/index.css +0 -131
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/lib/utils.ts +0 -6
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/main.tsx +0 -10
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/pages/_layout.tsx +0 -31
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/pages/home.tsx +0 -59
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/pages/not-found.tsx +0 -14
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/providers/query-provider.tsx +0 -26
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/providers/sonner-provider.tsx +0 -23
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/providers/theme-provider.tsx +0 -64
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/router.tsx +0 -24
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/tsconfig.app.json +0 -34
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/tsconfig.json +0 -13
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/tsconfig.node.json +0 -26
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/vite.config.ts +0 -19
- package/assets/power-apps-code-app/README.md +0 -27
- package/dist/code-apps-plugin.d.ts +0 -13
- package/dist/code-apps-plugin.js +0 -69
- package/dist/code-apps-plugin.js.map +0 -1
- package/dist/power-apps-assets.d.ts +0 -30
- package/dist/power-apps-assets.js +0 -131
- package/dist/power-apps-assets.js.map +0 -1
- package/dist/power-apps-templates.d.ts +0 -3
- package/dist/power-apps-templates.js +0 -177
- package/dist/power-apps-templates.js.map +0 -1
- package/dist/power-apps-validation.d.ts +0 -1
- package/dist/power-apps-validation.js +0 -79
- 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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"}
|