@aurorajs.dev/catalyst-cli 1.0.2 → 2.0.0
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/README.md +1 -1
- package/dist/commands/generate/index.js +33 -1
- package/dist/commands/sheets/diff.js +2 -4
- package/dist/commands/sheets/pull.d.ts +0 -1
- package/dist/commands/sheets/pull.js +2 -14
- package/dist/commands/sheets/push.d.ts +0 -1
- package/dist/commands/sheets/push.js +2 -14
- package/dist/commands/sheets/validate.js +3 -4
- package/dist/generator/domain/column-width.d.ts +2 -2
- package/dist/generator/domain/column-width.js +20 -15
- package/dist/generator/domain/config.d.ts +45 -6
- package/dist/generator/domain/config.js +152 -48
- package/dist/generator/domain/cross-bc-relations-discovery.d.ts +38 -0
- package/dist/generator/domain/cross-bc-relations-discovery.js +89 -0
- package/dist/generator/domain/cross-schema-resolver.d.ts +54 -1
- package/dist/generator/domain/cross-schema-resolver.js +52 -3
- package/dist/generator/domain/custom-field-value.d.ts +124 -0
- package/dist/generator/domain/custom-field-value.js +206 -0
- package/dist/generator/domain/declared-surface.d.ts +45 -0
- package/dist/generator/domain/declared-surface.js +106 -0
- package/dist/generator/domain/dialog-width.d.ts +46 -0
- package/dist/generator/domain/dialog-width.js +70 -0
- package/dist/generator/domain/display-field.d.ts +28 -3
- package/dist/generator/domain/display-field.js +53 -3
- package/dist/generator/domain/form-id.d.ts +3 -0
- package/dist/generator/domain/form-id.js +21 -0
- package/dist/generator/domain/i18n-embedded.d.ts +102 -0
- package/dist/generator/domain/i18n-embedded.js +112 -0
- package/dist/generator/domain/i18n-table.d.ts +112 -0
- package/dist/generator/domain/i18n-table.js +189 -0
- package/dist/generator/domain/model.d.ts +59 -17
- package/dist/generator/domain/model.js +1 -3
- package/dist/generator/domain/module-resolution.d.ts +17 -0
- package/dist/generator/domain/module-resolution.js +23 -0
- package/dist/generator/domain/operation-names.d.ts +17 -0
- package/dist/generator/domain/operation-names.js +27 -0
- package/dist/generator/domain/pivot.js +11 -1
- package/dist/generator/domain/property-filters.d.ts +168 -6
- package/dist/generator/domain/property-filters.js +257 -13
- package/dist/generator/domain/property-mappers.d.ts +69 -5
- package/dist/generator/domain/property-mappers.js +155 -61
- package/dist/generator/domain/property-pick-model.d.ts +12 -0
- package/dist/generator/domain/property-pick-model.js +47 -0
- package/dist/generator/domain/property-predicates.d.ts +57 -17
- package/dist/generator/domain/property-predicates.js +58 -18
- package/dist/generator/domain/property-validators.d.ts +20 -0
- package/dist/generator/domain/property-validators.js +71 -0
- package/dist/generator/domain/property-width.js +4 -2
- package/dist/generator/domain/readonly-payload-types.d.ts +72 -0
- package/dist/generator/domain/readonly-payload-types.js +96 -0
- package/dist/generator/domain/relation-search-eligibility.d.ts +15 -0
- package/dist/generator/domain/relation-search-eligibility.js +50 -0
- package/dist/generator/domain/relations-builder.d.ts +113 -0
- package/dist/generator/domain/relations-builder.js +422 -0
- package/dist/generator/domain/schema-loader.d.ts +41 -0
- package/dist/generator/domain/schema-loader.js +414 -4
- package/dist/generator/domain/widget-type.d.ts +1 -0
- package/dist/generator/domain/widget-type.js +1 -0
- package/dist/generator/engine/code-writer/code-writer.d.ts +334 -23
- package/dist/generator/engine/code-writer/code-writer.js +1052 -145
- package/dist/generator/engine/code-writer/drivers/import.driver.d.ts +22 -0
- package/dist/generator/engine/code-writer/drivers/import.driver.js +64 -0
- package/dist/generator/engine/code-writer/drivers/object.driver.d.ts +30 -0
- package/dist/generator/engine/code-writer/drivers/object.driver.js +58 -0
- package/dist/generator/engine/file-manager.d.ts +29 -2
- package/dist/generator/engine/file-manager.js +8 -2
- package/dist/generator/engine/file-writer.d.ts +3 -3
- package/dist/generator/engine/file-writer.js +58 -58
- package/dist/generator/engine/ignored-file.d.ts +6 -0
- package/dist/generator/engine/ignored-file.js +31 -0
- package/dist/generator/engine/lock-file.d.ts +36 -54
- package/dist/generator/engine/lock-file.js +74 -168
- package/dist/generator/engine/template-engine.js +9 -1
- package/dist/generator/handlers/back.handler.d.ts +72 -0
- package/dist/generator/handlers/back.handler.js +354 -59
- package/dist/generator/handlers/front.handler.d.ts +54 -0
- package/dist/generator/handlers/front.handler.js +247 -29
- package/dist/generator/handlers/handler-utils.js +2 -1
- package/dist/generator/packages/front-package-helpers.d.ts +8 -1
- package/dist/generator/packages/front-package-helpers.js +26 -5
- package/dist/generator/packages/installers/auditing.js +3 -3
- package/dist/generator/packages/installers/authorization-code.js +2 -5
- package/dist/generator/packages/installers/common.js +3 -3
- package/dist/generator/packages/installers/front/identity.js +8 -17
- package/dist/generator/packages/installers/front/queue-manager.d.ts +23 -0
- package/dist/generator/packages/installers/front/queue-manager.js +35 -0
- package/dist/generator/packages/installers/identity.js +4 -0
- package/dist/generator/packages/installers/mcp.js +1 -1
- package/dist/generator/packages/installers/message.js +1 -1
- package/dist/generator/packages/installers/ms-email.js +1 -1
- package/dist/generator/packages/installers/ms-entra-id.js +3 -3
- package/dist/generator/packages/installers/queue-manager.js +2 -3
- package/dist/generator/packages/installers/storage-account-azure.js +2 -2
- package/dist/generator/packages/installers/storage-account.js +4 -4
- package/dist/generator/packages/installers/support.js +1 -1
- package/dist/generator/packages/installers/tools.js +1 -1
- package/dist/generator/packages/installers/whatsapp.js +1 -1
- package/dist/generator/packages/package-helpers.js +10 -10
- package/dist/generator/utils/code-gen.d.ts +14 -3
- package/dist/generator/utils/code-gen.js +77 -27
- package/dist/generator/utils/mocker.js +19 -10
- package/dist/generator/utils/path-allowed.js +23 -2
- package/dist/generator/utils/relations-file.d.ts +127 -0
- package/dist/generator/utils/relations-file.js +310 -0
- package/dist/generator/utils/string-utils.d.ts +7 -0
- package/dist/generator/utils/string-utils.js +13 -0
- package/dist/origin/domain/actions.d.ts +13 -0
- package/dist/origin/domain/actions.js +13 -1
- package/dist/origin/domain/diff.js +9 -1
- package/dist/sheets/domain/auth.d.ts +15 -1
- package/dist/sheets/domain/auth.js +25 -2
- package/dist/sheets/domain/retry.d.ts +61 -0
- package/dist/sheets/domain/retry.js +76 -0
- package/dist/sheets/domain/types.d.ts +148 -2
- package/dist/sheets/domain/types.js +252 -12
- package/dist/sheets/sync/diff-engine.js +62 -5
- package/dist/sheets/sync/sheet-to-yaml.d.ts +21 -0
- package/dist/sheets/sync/sheet-to-yaml.js +238 -58
- package/dist/sheets/sync/yaml-to-sheet.d.ts +62 -0
- package/dist/sheets/sync/yaml-to-sheet.js +277 -30
- package/dist/sheets/transformers/property-transformer.d.ts +39 -0
- package/dist/sheets/transformers/property-transformer.js +121 -23
- package/dist/sheets/validators/schema-validator.js +54 -38
- package/dist/templates/ai/claude/.claude/settings.json +1 -4
- package/dist/templates/backend/application/.claude/skills/catalyst-backend-testing/SKILL.md +264 -234
- package/dist/templates/backend/application/.claude/skills/catalyst-cross-bounded-context-ports/SKILL.md +40 -10
- package/dist/templates/backend/application/.claude/skills/catalyst-field-schema/SKILL.md +80 -55
- package/dist/templates/backend/application/.claude/skills/catalyst-field-schema/references/field-schema-and-decorators.md +91 -62
- package/dist/templates/backend/application/.claude/skills/catalyst-field-schema/references/query-statement.md +206 -200
- package/dist/templates/backend/application/.claude/skills/catalyst-handler-composer/SKILL.md +66 -64
- package/dist/templates/backend/application/.claude/skills/catalyst-handler-composer/references/additional-apis-workflow.md +81 -22
- package/dist/templates/backend/application/.claude/skills/catalyst-handler-composer/references/cli-first-workflow.md +17 -17
- package/dist/templates/backend/application/.claude/skills/catalyst-handler-composer/references/create-handler.md +10 -8
- package/dist/templates/backend/application/.claude/skills/catalyst-handler-composer/references/delete-handler.md +7 -7
- package/dist/templates/backend/application/.claude/skills/catalyst-handler-composer/references/read-handler.md +27 -17
- package/dist/templates/backend/application/.claude/skills/catalyst-handler-composer/references/update-handler.md +35 -20
- package/dist/templates/backend/application/.claude/skills/catalyst-nestjs-primitives/SKILL.md +151 -27
- package/dist/templates/backend/application/.claude/skills/catalyst-nestjs-primitives/references/minimum-templates.md +1 -1
- package/dist/templates/backend/application/.claude/skills/catalyst-project-structure/SKILL.md +210 -246
- package/dist/templates/backend/application/.claude/skills/catalyst-provider-composition/SKILL.md +263 -0
- package/dist/templates/backend/application/.claude/skills/catalyst-schema-migrations/SKILL.md +308 -0
- package/dist/templates/backend/application/.claude/skills/catalyst-tools/SKILL.md +266 -0
- package/dist/templates/backend/application/.oxlintrc.json +171 -0
- package/dist/templates/backend/application/CLAUDE.md +27 -1
- package/dist/templates/backend/application/README.md +6 -4
- package/dist/templates/backend/application/drizzle.config.ts +46 -0
- package/dist/templates/backend/application/nest-cli.json +7 -2
- package/dist/templates/backend/application/package.json +56 -73
- package/dist/templates/backend/application/scripts/db/check.ts +80 -0
- package/dist/templates/backend/application/scripts/db/generate.ts +55 -0
- package/dist/templates/backend/application/scripts/db/migrate.ts +101 -0
- package/dist/templates/backend/application/scripts/db/query.spec.ts +497 -0
- package/dist/templates/backend/application/scripts/db/query.ts +410 -0
- package/dist/templates/backend/application/scripts/iam/permissions-without-role.ts +178 -0
- package/dist/templates/backend/application/scripts/tz-pin.spec.ts +10 -0
- package/dist/templates/backend/application/src/@aurora/core.module.ts +52 -32
- package/dist/templates/backend/application/src/@aurora/decorators/auth.decorator.ts +0 -4
- package/dist/templates/backend/application/src/@aurora/decorators/index.ts +1 -1
- package/dist/templates/backend/application/src/@aurora/modules/authentication/authentication.module.spec.ts +7 -27
- package/dist/templates/backend/application/src/@aurora/modules/authentication/authentication.module.ts +17 -12
- package/dist/templates/backend/application/src/@aurora/modules/authentication/domain/anonymous-account.spec.ts +1 -1
- package/dist/templates/backend/application/src/@aurora/modules/authentication/domain/anonymous-account.ts +3 -1
- package/dist/templates/backend/application/src/@aurora/modules/authentication/domain/errors/index.ts +1 -0
- package/dist/templates/backend/application/src/@aurora/modules/authentication/domain/errors/token-issuance-disabled.error.ts +20 -0
- package/dist/templates/backend/application/src/@aurora/modules/authentication/domain/index.ts +1 -0
- package/dist/templates/backend/application/src/@aurora/modules/authentication/domain/ports/account-cache-invalidator.port.ts +17 -0
- package/dist/templates/backend/application/src/@aurora/modules/authentication/domain/ports/account-cache-invalidator.token.ts +1 -0
- package/dist/templates/backend/application/src/@aurora/modules/authentication/domain/ports/account-loader.port.ts +55 -1
- package/dist/templates/backend/application/src/@aurora/modules/authentication/domain/ports/authentication-strategy.port.ts +10 -1
- package/dist/templates/backend/application/src/@aurora/modules/authentication/domain/ports/index.ts +12 -10
- package/dist/templates/backend/application/src/@aurora/modules/authentication/domain/ports/jwt-signer.port.ts +10 -1
- package/dist/templates/backend/application/src/@aurora/modules/authentication/domain/resolve-authentication-mode.spec.ts +1 -1
- package/dist/templates/backend/application/src/@aurora/modules/authentication/index.ts +5 -4
- package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/factory/authentication-strategy.factory.spec.ts +14 -27
- package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/factory/authentication-strategy.factory.ts +9 -5
- package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/guards/authentication-jwt.guard.spec.ts +16 -17
- package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/guards/authentication-jwt.guard.ts +2 -2
- package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/guards/authorization-permissions.guard.ts +1 -2
- package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/guards/index.ts +2 -2
- package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/providers/hub-session-manager.provider.ts +2 -2
- package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/providers/jwt-signer.provider.ts +2 -2
- package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/aurora-hub/aurora-hub-consumer.adapter.ts +18 -5
- package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/aurora-hub/index.ts +1 -0
- package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/authentication-cache-invalidator.adapter.spec.ts +56 -0
- package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/authentication-cache-invalidator.adapter.ts +28 -0
- package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/cache-key.ts +9 -0
- package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/index.ts +11 -0
- package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/jwt-passport.strategy.ts +1 -1
- package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/local-provider/anonymous-account-loader.adapter.spec.ts +3 -3
- package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/local-provider/anonymous-account-loader.adapter.ts +2 -2
- package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/local-provider/jwt-signer.adapter.spec.ts +222 -25
- package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/local-provider/jwt-signer.adapter.ts +62 -12
- package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/local-provider/local-provider-cache-invalidation.spec.ts +84 -0
- package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/local-provider/local-provider.adapter.spec.ts +158 -0
- package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/local-provider/local-provider.adapter.ts +30 -5
- package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/warnings/authentication-boot-warning.spec.ts +9 -8
- package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/warnings/authentication-boot-warning.ts +1 -1
- package/dist/templates/backend/application/src/@aurora/modules/criteria/criteria-config.module.ts +15 -8
- package/dist/templates/backend/application/src/@aurora/modules/criteria/index.ts +1 -1
- package/dist/templates/backend/application/src/@aurora/modules/graphql/core.graphql +197 -252
- package/dist/templates/backend/application/src/@aurora/modules/graphql/graphql-config.module.ts +3 -3
- package/dist/templates/backend/application/src/@aurora/modules/graphql/guards/gql-throttler.guard.spec.ts +7 -6
- package/dist/templates/backend/application/src/@aurora/modules/graphql/index.ts +3 -3
- package/dist/templates/backend/application/src/@aurora/modules/graphql/schema-store.module.ts +1 -1
- package/dist/templates/backend/application/src/@aurora/modules/handler-registry/event-dispatcher.spec.ts +175 -0
- package/dist/templates/backend/application/src/@aurora/modules/handler-registry/event-dispatcher.ts +37 -0
- package/dist/templates/backend/application/src/@aurora/modules/handler-registry/handler-registry.module.ts +24 -0
- package/dist/templates/backend/application/src/@aurora/modules/handler-registry/handler.decorator.ts +21 -0
- package/dist/templates/backend/application/src/@aurora/modules/handler-registry/index.ts +4 -0
- package/dist/templates/backend/application/src/@aurora/modules/handler-registry/keyed-handler-registry.spec.ts +171 -0
- package/dist/templates/backend/application/src/@aurora/modules/handler-registry/keyed-handler-registry.ts +46 -0
- package/dist/templates/backend/application/src/@aurora/modules/health/app-version.provider.spec.ts +65 -0
- package/dist/templates/backend/application/src/@aurora/modules/health/app-version.provider.ts +113 -0
- package/dist/templates/backend/application/src/@aurora/modules/health/health.controller.spec.ts +50 -0
- package/dist/templates/backend/application/src/@aurora/modules/health/health.controller.ts +33 -0
- package/dist/templates/backend/application/src/@aurora/modules/health/health.module.ts +20 -0
- package/dist/templates/backend/application/src/@aurora/modules/health/index.ts +3 -0
- package/dist/templates/backend/application/src/@aurora/modules/index.ts +10 -5
- package/dist/templates/backend/application/src/@aurora/modules/lang/core-get-fallback-lang-from-json.service.ts +5 -3
- package/dist/templates/backend/application/src/@aurora/modules/lang/core-get-langs-from-json.service.ts +2 -2
- package/dist/templates/backend/application/src/@aurora/modules/lang/core-langs.ts +1 -1
- package/dist/templates/backend/application/src/@aurora/modules/lang/index.ts +3 -3
- package/dist/templates/backend/application/src/@aurora/modules/mailer/index.ts +2 -1
- package/dist/templates/backend/application/src/@aurora/modules/mailer/mailer-client.module.spec.ts +41 -33
- package/dist/templates/backend/application/src/@aurora/modules/mailer/mailer-client.module.ts +4 -4
- package/dist/templates/backend/application/src/@aurora/modules/mailer/mailer-smtp-transport.service.ts +4 -2
- package/dist/templates/backend/application/src/@aurora/modules/pdf/index.ts +7 -0
- package/dist/templates/backend/application/src/@aurora/modules/pdf/pdf-document.types.ts +48 -0
- package/dist/templates/backend/application/src/@aurora/modules/pdf/pdf-isolation.spec.ts +17 -0
- package/dist/templates/backend/application/src/@aurora/modules/pdf/pdf-renderer.service.ts +12 -0
- package/dist/templates/backend/application/src/@aurora/modules/pdf/pdfmake/index.ts +5 -0
- package/dist/templates/backend/application/src/@aurora/modules/pdf/pdfmake/pdfmake-renderer.service.spec.ts +58 -0
- package/dist/templates/backend/application/src/@aurora/modules/pdf/pdfmake/pdfmake-renderer.service.ts +123 -0
- package/dist/templates/backend/application/src/@aurora/modules/report-engine/aurora-report.token.ts +11 -0
- package/dist/templates/backend/application/src/@aurora/modules/report-engine/execute-report.service.spec.ts +154 -0
- package/dist/templates/backend/application/src/@aurora/modules/report-engine/execute-report.service.ts +112 -0
- package/dist/templates/backend/application/src/@aurora/modules/report-engine/index.ts +82 -0
- package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-cardinality.guard.spec.ts +297 -0
- package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-cardinality.guard.ts +180 -0
- package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-cube.types.ts +409 -0
- package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-cube.validator.spec.ts +289 -0
- package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-cube.validator.ts +98 -0
- package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-db-pool.preflight.spec.ts +241 -0
- package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-db-pool.provider.spec.ts +95 -0
- package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-db-pool.provider.ts +74 -0
- package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-db-pool.token.ts +17 -0
- package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-engine.module.spec.ts +119 -0
- package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-engine.module.ts +105 -0
- package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-preflight.service.ts +152 -0
- package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-query.builder.spec.ts +451 -0
- package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-query.builder.ts +319 -0
- package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-registry.spec.ts +176 -0
- package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-registry.ts +47 -0
- package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-selection.validator.spec.ts +104 -0
- package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-selection.validator.ts +64 -0
- package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-tenant.scoper.spec.ts +232 -0
- package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-tenant.scoper.ts +132 -0
- package/dist/templates/backend/application/src/@aurora/modules/report-engine/result-modes/client-mode.spec.ts +157 -0
- package/dist/templates/backend/application/src/@aurora/modules/report-engine/result-modes/client-mode.ts +93 -0
- package/dist/templates/backend/application/src/@aurora/modules/report-engine/result-modes/server-mode.spec.ts +289 -0
- package/dist/templates/backend/application/src/@aurora/modules/report-engine/result-modes/server-mode.ts +259 -0
- package/dist/templates/backend/application/src/@aurora/modules/server-static/index.ts +1 -1
- package/dist/templates/backend/application/src/@aurora/services/index.ts +2 -3
- package/dist/templates/backend/application/src/@aurora/services/logger.service.ts +20 -6
- package/dist/templates/backend/application/src/@aurora/shared.module.ts +11 -10
- package/dist/templates/backend/application/src/@bridges/bridges.module.ts +33 -4
- package/dist/templates/backend/application/src/@bridges/production-planning/operator-account/index.ts +1 -0
- package/dist/templates/backend/application/src/@bridges/production-planning/operator-account/ports/index.ts +2 -0
- package/dist/templates/backend/application/src/@bridges/production-planning/operator-account/ports/production-planning-operator-account-reader.port.ts +29 -0
- package/dist/templates/backend/application/src/@bridges/production-planning/operator-account/ports/production-planning-operator-account-reader.token.ts +3 -0
- package/dist/templates/backend/application/src/@bridges/storage-account/file-manager/adapters/index.ts +1 -0
- package/dist/templates/backend/application/src/@bridges/storage-account/file-manager/adapters/storage-account-file-manager.adapter.spec.ts +90 -0
- package/dist/templates/backend/application/src/@bridges/storage-account/file-manager/adapters/storage-account-file-manager.adapter.ts +36 -0
- package/dist/templates/backend/application/src/@bridges/storage-account/file-manager/index.ts +1 -0
- package/dist/templates/backend/application/src/@bridges/storage-account/file-manager/ports/index.ts +2 -0
- package/dist/templates/backend/application/src/@bridges/storage-account/file-manager/ports/storage-account-file-manager.port.ts +47 -0
- package/dist/templates/backend/application/src/@bridges/storage-account/file-manager/ports/storage-account-file-manager.token.ts +1 -0
- package/dist/templates/backend/application/src/@bridges/storage-account/signed-url/adapters/index.ts +1 -0
- package/dist/templates/backend/application/src/@bridges/storage-account/signed-url/adapters/storage-account-signed-url.adapter.spec.ts +69 -0
- package/dist/templates/backend/application/src/@bridges/storage-account/signed-url/adapters/storage-account-signed-url.adapter.ts +37 -0
- package/dist/templates/backend/application/src/@bridges/storage-account/signed-url/index.ts +1 -0
- package/dist/templates/backend/application/src/@bridges/storage-account/signed-url/ports/index.ts +2 -0
- package/dist/templates/backend/application/src/@bridges/storage-account/signed-url/ports/storage-account-signed-url.port.ts +21 -0
- package/dist/templates/backend/application/src/@bridges/storage-account/signed-url/ports/storage-account-signed-url.token.ts +1 -0
- package/dist/templates/backend/application/src/@config/bullmq/index.ts +1 -0
- package/dist/templates/backend/application/src/@config/drizzle/aurora-drizzle-schema.spec.ts +238 -0
- package/dist/templates/backend/application/src/@config/drizzle/aurora-drizzle-schema.ts +335 -0
- package/dist/templates/backend/application/src/@config/drizzle/aurora-field-schemas.spec.ts +92 -0
- package/dist/templates/backend/application/src/@config/drizzle/aurora-field-schemas.ts +158 -0
- package/dist/templates/backend/application/src/@config/drizzle/drizzle-migrations-journal.config.ts +31 -0
- package/dist/templates/backend/application/src/@config/drizzle/drizzle-migrations.module.spec.ts +153 -0
- package/dist/templates/backend/application/src/@config/drizzle/drizzle-migrations.module.ts +91 -0
- package/dist/templates/backend/application/src/@config/drizzle/index.ts +3 -0
- package/dist/templates/backend/application/src/@config/index.ts +6 -1
- package/dist/templates/backend/application/src/@config/lang/index.ts +1 -0
- package/dist/templates/backend/application/src/@config/lang/lang.providers.ts +26 -0
- package/dist/templates/backend/application/src/@config/mailer/index.ts +1 -1
- package/dist/templates/backend/application/src/@config/mailer/mailer-transport.module.ts +5 -1
- package/dist/templates/backend/application/src/@config/pdf/index.ts +1 -0
- package/dist/templates/backend/application/src/@config/pdf/pdf-renderer.module.spec.ts +53 -0
- package/dist/templates/backend/application/src/@config/pdf/pdf-renderer.module.ts +17 -0
- package/dist/templates/backend/application/src/@config/storage-account/index.ts +1 -0
- package/dist/templates/backend/application/src/@config/storage-account/storage-account.providers.spec.ts +48 -0
- package/dist/templates/backend/application/src/@config/storage-account/storage-account.providers.ts +34 -0
- package/dist/templates/backend/application/src/app.controller.spec.ts +2 -2
- package/dist/templates/backend/application/src/app.controller.ts +1 -1
- package/dist/templates/backend/application/src/app.module.ts +39 -7
- package/dist/templates/backend/application/src/database/migrations/0001_create_example_demo_table.sql +9 -0
- package/dist/templates/backend/application/src/database/migrations/0002_backfill_custom_field_group_entity_types.sql +19 -0
- package/dist/templates/backend/application/src/database/migrations/0003_create_production_order_header_code_sequence.sql +22 -0
- package/dist/templates/backend/application/src/database/migrations/0004_remove_null_elements_from_array_columns.sql +37 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260705093120_baseline/migration.sql +503 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260705093120_baseline/snapshot.json +6287 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260705095048_gap-finder/migration.sql +482 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260705095048_gap-finder/snapshot.json +12646 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260705144001_gap-finder-fixes/migration.sql +38 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260705144001_gap-finder-fixes/snapshot.json +12853 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260706090131_gap-finder-fx-normalization/migration.sql +17 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260706090131_gap-finder-fx-normalization/snapshot.json +13090 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260706102144_gap-finder-reported-currency/migration.sql +1 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260706102144_gap-finder-reported-currency/snapshot.json +13103 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260706104434_gap-finder-market-share-engine-version/migration.sql +4 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260706104434_gap-finder-market-share-engine-version/snapshot.json +13123 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260706121044_gap-finder-historical-price/migration.sql +17 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260706121044_gap-finder-historical-price/snapshot.json +13357 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260706143916_gap-finder-backtest-run-state-block/migration.sql +7 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260706143916_gap-finder-backtest-run-state-block/snapshot.json +13443 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260707080202_business-partner-portal/migration.sql +266 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260707080202_business-partner-portal/snapshot.json +17183 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260710072059_bpp-supplier-document-invoice-unique/migration.sql +18 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260710072059_bpp-supplier-document-invoice-unique/snapshot.json +17183 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260712072603_busy_mystique/migration.sql +177 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260712072603_busy_mystique/snapshot.json +19569 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260714215357_custom-fields/migration.sql +85 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260714215357_custom-fields/snapshot.json +20741 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260715072820_gap-finder-source-registry-latency/migration.sql +1 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260715072820_gap-finder-source-registry-latency/snapshot.json +20754 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260715110357_gap-finder-peer-group-curation-reason/migration.sql +1 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260715110357_gap-finder-peer-group-curation-reason/snapshot.json +20767 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260715151843_add-common-lang/migration.sql +22 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260715151843_add-common-lang/snapshot.json +21066 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260716165704_add_pivot_table_equipment_process/migration.sql +8 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260716165704_add_pivot_table_equipment_process/snapshot.json +21089 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260717132829_common-country/migration.sql +42 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260717132829_common-country/snapshot.json +21661 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260719084905_custom-field-group-label-i18n-embedded/migration.sql +5 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260719084905_custom-field-group-label-i18n-embedded/snapshot.json +21661 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260719175835_add-custom-field-group-entity-types/migration.sql +2 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260719175835_add-custom-field-group-entity-types/snapshot.json +21695 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260719235605_add-custom-field-entity-registry/migration.sql +13 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260719235605_add-custom-field-entity-registry/snapshot.json +21866 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260720094932_drop-custom-field-group-entity-pivot/migration.sql +1 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260720094932_drop-custom-field-group-entity-pivot/snapshot.json +21701 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260722150640_close-labeli18n-rename-and-tag-index-drift/migration.sql +12 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260722150640_close-labeli18n-rename-and-tag-index-drift/snapshot.json +21706 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260722165358_normalize-legacy-index-names/migration.sql +470 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260722165358_normalize-legacy-index-names/snapshot.json +21767 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260728173835_drop-iam-tag-custom-field-value/migration.sql +1 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260728173835_drop-iam-tag-custom-field-value/snapshot.json +21391 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260804193217_align-custom-field-option-i18n/migration.sql +3 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260804193217_align-custom-field-option-i18n/snapshot.json +21394 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260818175624_drop-gap-finder-tables/migration.sql +46 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260818175624_drop-gap-finder-tables/snapshot.json +14170 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260822160309_rename-position-total-processed-weight/migration.sql +1 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260822160309_rename-position-total-processed-weight/snapshot.json +14172 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260830220002_add-impersonation-credential/migration.sql +32 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260830220002_add-impersonation-credential/snapshot.json +14204 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260902105452_mask-oauth-token-columns/migration.sql +2 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260902105452_mask-oauth-token-columns/snapshot.json +14204 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260903214717_add-biller-master-data-tables/migration.sql +145 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260903214717_add-biller-master-data-tables/snapshot.json +16167 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260904195613_simplify-biller-tariff-model/migration.sql +42 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260904195613_simplify-biller-tariff-model/snapshot.json +15944 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260904235448_add-biller-billing-run-pipeline/migration.sql +144 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260904235448_add-biller-billing-run-pipeline/snapshot.json +17910 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260904235725_add-biller-invoice-number-sequence/migration.sql +1 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260904235725_add-biller-invoice-number-sequence/snapshot.json +17921 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260905090449_make-remittance-run-index-non-unique/migration.sql +2 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260905090449_make-remittance-run-index-non-unique/snapshot.json +17921 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260907223122_normalize-tools-native-enums/migration.sql +37 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260907223122_normalize-tools-native-enums/snapshot.json +17921 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260907224811_normalize-lacrem-native-enums/migration.sql +19 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260907224811_normalize-lacrem-native-enums/snapshot.json +17921 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260907225915_normalize-sap-integration-native-enums/migration.sql +58 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260907225915_normalize-sap-integration-native-enums/snapshot.json +17921 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260907231830_normalize-iam-native-enums/migration.sql +19 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260907231830_normalize-iam-native-enums/snapshot.json +17921 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260907232903_normalize-o-auth-native-enums/migration.sql +37 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260907232903_normalize-o-auth-native-enums/snapshot.json +17921 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260914212920_add-biller-billing-cycle-master/migration.sql +79 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260914212920_add-biller-billing-cycle-master/snapshot.json +17983 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260915072010_add-biller-charge-billed-by-billing-run/migration.sql +11 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260915072010_add-biller-charge-billed-by-billing-run/snapshot.json +18017 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260915113209_add-iam-account-has-add-child-tenants/migration.sql +1 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260915113209_add-iam-account-has-add-child-tenants/snapshot.json +17760 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260916230702_date-columns-to-real-date/migration.sql +22 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260916230702_date-columns-to-real-date/snapshot.json +18031 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260918120918_drop-biller-tables/migration.sql +14 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260918120918_drop-biller-tables/snapshot.json +14217 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260918121214_purge-biller-rows/migration.sql +28 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/20260918121214_purge-biller-rows/snapshot.json +14217 -0
- package/dist/templates/backend/application/src/database/migrations/drizzle/README.md +199 -0
- package/dist/templates/backend/application/src/database/procedures/calculate_order_total/1.sql +18 -0
- package/dist/templates/backend/application/src/database/procedures/production_planning_set_production_order_header_code/1.sql +38 -0
- package/dist/templates/backend/application/src/database/procedures/production_planning_set_production_order_position_code/1.sql +33 -0
- package/dist/templates/backend/application/src/database/procedures/production_planning_trg_set_production_order_header_code/1.sql +8 -0
- package/dist/templates/backend/application/src/database/procedures/production_planning_trg_set_production_order_position_code/1.sql +8 -0
- package/dist/templates/backend/application/src/main.ts +27 -19
- package/dist/templates/backend/application/src/repl.ts +2 -2
- package/dist/templates/backend/application/test/app.e2e-spec.ts +2 -1
- package/dist/templates/backend/application/test/vitest-setup.ts +13 -0
- package/dist/templates/backend/application/tsconfig.build.json +3 -1
- package/dist/templates/backend/application/tsconfig.json +8 -17
- package/dist/templates/backend/application/vitest.config.e2e.ts +24 -0
- package/dist/templates/backend/application/vitest.config.ts +18 -0
- package/dist/templates/backend/env/.env +8 -0
- package/dist/templates/backend/packages/authorization-code/src/@api/authorization-code/authorization-code.module.ts +3 -3
- package/dist/templates/backend/packages/authorization-code/src/@api/authorization-code/controllers/auth.controller.spec.ts +24 -38
- package/dist/templates/backend/packages/authorization-code/src/@api/authorization-code/controllers/auth.controller.ts +2 -3
- package/dist/templates/backend/packages/authorization-code/src/@api/authorization-code/controllers/index.ts +1 -0
- package/dist/templates/backend/packages/authorization-code/src/@api/authorization-code/pkce/index.ts +2 -0
- package/dist/templates/backend/packages/authorization-code/src/@api/authorization-code/pkce/pkce-helpers.spec.ts +2 -4
- package/dist/templates/backend/packages/authorization-code/src/@api/authorization-code/pkce/pkce-verifier-store.service.spec.ts +1 -1
- package/dist/templates/backend/packages/hub/src/@api/hub/app/controllers/hub-create-app.controller.ts +31 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app/controllers/hub-delete-app-by-id.controller.ts +32 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app/controllers/hub-find-app-by-id.controller.ts +31 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app/controllers/hub-find-app.controller.ts +33 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app/controllers/hub-get-apps.controller.ts +41 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app/controllers/hub-my-preferences-app.controller.ts +31 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app/controllers/hub-paginate-apps.controller.ts +32 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app/controllers/hub-save-my-launchpad-layout-app.controller.ts +41 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app/controllers/hub-toggle-favorite-app.controller.ts +34 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app/controllers/hub-update-app-by-id.controller.ts +32 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app/dto/hub-app.dto.ts +115 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app/dto/hub-create-app.dto.ts +85 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app/dto/hub-update-app-by-id.dto.ts +78 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app/dto/hub-update-apps.dto.ts +78 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app/dto/index.ts +8 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app/graphql/hub-app.graphql +256 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app/index.ts +87 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app/resolvers/hub-create-app.resolver.ts +27 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app/resolvers/hub-delete-app-by-id.resolver.ts +28 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app/resolvers/hub-find-app-by-id.resolver.ts +26 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app/resolvers/hub-find-app.resolver.ts +26 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app/resolvers/hub-get-apps.resolver.ts +33 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app/resolvers/hub-my-preferences-app.resolver.ts +27 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app/resolvers/hub-paginate-apps.resolver.ts +26 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app/resolvers/hub-save-my-launchpad-layout-app.resolver.ts +34 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app/resolvers/hub-toggle-favorite-app.resolver.ts +30 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app/resolvers/hub-update-app-by-id.resolver.ts +28 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app-account/controllers/hub-create-app-account.controller.ts +29 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app-account/controllers/hub-create-apps-accounts.controller.ts +30 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app-account/controllers/hub-delete-app-account-by-id.controller.ts +34 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app-account/controllers/hub-delete-apps-accounts.controller.ts +35 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app-account/controllers/hub-find-app-account-by-id.controller.ts +35 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app-account/controllers/hub-find-app-account.controller.ts +36 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app-account/controllers/hub-get-apps-accounts.controller.ts +36 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app-account/controllers/hub-paginate-apps-accounts.controller.ts +32 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app-account/controllers/hub-update-app-account-by-id.controller.ts +33 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app-account/dto/hub-app-account.dto.ts +59 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app-account/dto/hub-create-app-account.dto.ts +44 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app-account/dto/hub-update-app-account-by-id.dto.ts +44 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app-account/dto/hub-update-apps-accounts.dto.ts +44 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app-account/dto/index.ts +8 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app-account/graphql/hub-app-account.graphql +82 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app-account/index.ts +81 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app-account/resolvers/hub-create-app-account.resolver.ts +25 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app-account/resolvers/hub-create-apps-accounts.resolver.ts +25 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app-account/resolvers/hub-delete-app-account-by-id.resolver.ts +27 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app-account/resolvers/hub-delete-apps-accounts.resolver.ts +26 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app-account/resolvers/hub-find-app-account-by-id.resolver.ts +27 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app-account/resolvers/hub-find-app-account.resolver.ts +26 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app-account/resolvers/hub-get-apps-accounts.resolver.ts +26 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app-account/resolvers/hub-paginate-apps-accounts.resolver.ts +26 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/app-account/resolvers/hub-update-app-account-by-id.resolver.ts +26 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/hub-per-app-permission.seeder.spec.ts +224 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/hub-per-app-permission.seeder.ts +131 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/hub.module.ts +34 -0
- package/dist/templates/backend/packages/hub/src/@api/hub/hub.seeder.ts +33 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/application/create/hub-create-app.handler.spec.ts +521 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/application/create/hub-create-app.handler.ts +234 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/application/create/hub-create-app.service.ts +19 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/application/delete/hub-delete-app-by-id.handler.spec.ts +419 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/application/delete/hub-delete-app-by-id.handler.ts +164 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/application/delete/hub-delete-app-by-id.service.ts +24 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/application/find/hub-find-app-by-id.handler.spec.ts +132 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/application/find/hub-find-app-by-id.handler.ts +35 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/application/find/hub-find-app-by-id.service.ts +22 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/application/find/hub-find-app.handler.spec.ts +172 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/application/find/hub-find-app.handler.ts +43 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/application/find/hub-find-app.service.ts +27 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/application/get/hub-get-apps.handler.spec.ts +331 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/application/get/hub-get-apps.handler.ts +84 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/application/get/hub-get-apps.service.ts +27 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/application/my-preferences/hub-my-preferences-app.handler.spec.ts +146 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/application/my-preferences/hub-my-preferences-app.handler.ts +38 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/application/paginate/hub-paginate-apps.handler.spec.ts +179 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/application/paginate/hub-paginate-apps.handler.ts +38 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/application/paginate/hub-paginate-apps.service.ts +27 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/application/save-my-launchpad-layout/hub-save-my-launchpad-layout-app.handler.spec.ts +354 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/application/save-my-launchpad-layout/hub-save-my-launchpad-layout-app.handler.ts +161 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/application/toggle-favorite/hub-toggle-favorite-app.handler.spec.ts +192 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/application/toggle-favorite/hub-toggle-favorite-app.handler.ts +60 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/application/update/hub-update-app-by-id.handler.spec.ts +274 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/application/update/hub-update-app-by-id.handler.ts +82 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/application/update/hub-update-app-by-id.service.ts +25 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/domain/hub-app-permission.ts +18 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/domain/hub-app.field-schema.ts +101 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/domain/index.ts +2 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/index.ts +79 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/infrastructure/drizzle/hub-drizzle-app.repository.ts +43 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/infrastructure/drizzle/hub-drizzle-app.schema.ts +40 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/shared/functions/hub-assert-no-accounts-reference.function.spec.ts +230 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/shared/functions/hub-assert-no-accounts-reference.function.ts +106 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/shared/functions/hub-sanitize-eager-loads-vs-relation-order.spec.ts +226 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/shared/functions/hub-sanitize-eager-loads.function.spec.ts +73 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/shared/functions/hub-sanitize-eager-loads.function.ts +27 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/shared/functions/hub-validate-redirect-uri.function.spec.ts +41 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/shared/functions/hub-validate-redirect-uri.function.ts +49 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/shared/functions/index.ts +3 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app/shared/index.ts +1 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/create/hub-create-app-account.handler.ts +28 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/create/hub-create-app-account.service.ts +25 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/create/hub-create-apps-accounts.handler.ts +26 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/create/hub-create-apps-accounts.service.ts +19 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/delete/hub-delete-app-account-by-id.handler.ts +41 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/delete/hub-delete-app-account-by-id.service.ts +37 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/delete/hub-delete-apps-accounts.handler.ts +34 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/delete/hub-delete-apps-accounts.service.ts +33 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/find/hub-find-app-account-by-id.handler.ts +32 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/find/hub-find-app-account-by-id.service.ts +31 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/find/hub-find-app-account.handler.ts +29 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/find/hub-find-app-account.service.ts +27 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/get/hub-get-apps-accounts.handler.ts +23 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/get/hub-get-apps-accounts.service.ts +27 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/paginate/hub-paginate-apps-accounts.handler.ts +23 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/paginate/hub-paginate-apps-accounts.service.ts +27 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/update/hub-update-app-account-by-id.handler.ts +64 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/update/hub-update-app-account-by-id.service.ts +33 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app-account/domain/hub-app-account.field-schema.ts +53 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app-account/domain/index.ts +1 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app-account/index.ts +82 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app-account/infrastructure/drizzle/hub-drizzle-app-account.repository.ts +40 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/app-account/infrastructure/drizzle/hub-drizzle-app-account.schema.ts +17 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/hub.relations.ts +23 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/hub.seed.ts +117 -0
- package/dist/templates/backend/packages/hub/src/@app/hub/index.ts +14 -0
- package/dist/templates/backend/packages/hub/src/@bridges/providers/iam-bounded-context-writer.bridge.ts +8 -0
- package/dist/templates/backend/packages/hub/src/@bridges/providers/iam-permission-writer.bridge.ts +8 -0
- package/dist/templates/backend/packages/hub/src/@bridges/providers/o-auth-application-provisioner.bridge.ts +8 -0
- package/dist/templates/backend/packages/hub/test/acceptance/hub/hub-app-account-composite-key.e2e-spec.ts +282 -0
- package/dist/templates/backend/packages/hub/test/acceptance/hub/hub-app-deprovisioning.e2e-spec.ts +472 -0
- package/dist/templates/backend/packages/hub/test/acceptance/hub/hub-app-provisioning.e2e-spec.ts +345 -0
- package/dist/templates/backend/packages/hub/test/acceptance/hub/hub-per-app-access.e2e-spec.ts +655 -0
- package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-check-password-me-account.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-check-unique-email-account.controller.ts +2 -2
- package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-check-unique-username-account.controller.ts +2 -2
- package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-count-account.controller.ts +32 -0
- package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-create-account.controller.ts +6 -6
- package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-delete-account-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-delete-accounts.controller.ts +6 -7
- package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-find-account-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-find-account.controller.ts +6 -7
- package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-get-accounts.controller.ts +6 -7
- package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-me-account.controller.ts +6 -6
- package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-paginate-accounts.controller.ts +5 -6
- package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-paginate-with-tenant-constraint-accounts.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-update-account-by-id.controller.ts +13 -8
- package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-update-accounts.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-update-me-account.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/account/dto/iam-account.dto.ts +20 -11
- package/dist/templates/backend/packages/iam/src/@api/iam/account/dto/iam-create-account.dto.ts +9 -29
- package/dist/templates/backend/packages/iam/src/@api/iam/account/dto/iam-update-account-by-id.dto.ts +9 -29
- package/dist/templates/backend/packages/iam/src/@api/iam/account/dto/iam-update-accounts.dto.ts +9 -21
- package/dist/templates/backend/packages/iam/src/@api/iam/account/dto/index.ts +4 -4
- package/dist/templates/backend/packages/iam/src/@api/iam/account/graphql/iam-account.graphql +47 -44
- package/dist/templates/backend/packages/iam/src/@api/iam/account/index.ts +40 -34
- package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-check-password-me-account.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-check-unique-email-account.resolver.ts +2 -2
- package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-check-unique-username-account.resolver.ts +2 -2
- package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-count-account.resolver.ts +25 -0
- package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-create-account.resolver.ts +5 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-delete-account-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-delete-accounts.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-find-account-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-find-account.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-get-accounts.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-me-account.resolver.ts +5 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-paginate-accounts.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-paginate-with-tenant-constraint-accounts.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-update-account-by-id.resolver.ts +12 -7
- package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-update-accounts.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-update-me-account.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/controllers/iam-create-bounded-context.controller.ts +3 -3
- package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/controllers/iam-create-bounded-contexts.controller.ts +3 -3
- package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/controllers/iam-delete-bounded-context-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/controllers/iam-delete-bounded-contexts.controller.ts +6 -7
- package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/controllers/iam-find-bounded-context-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/controllers/iam-find-bounded-context.controller.ts +6 -7
- package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/controllers/iam-get-bounded-contexts.controller.ts +6 -7
- package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/controllers/iam-paginate-bounded-contexts.controller.ts +5 -6
- package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/controllers/iam-update-bounded-context-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/controllers/iam-update-bounded-contexts.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/dto/iam-bounded-context.dto.ts +3 -2
- package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/dto/index.ts +4 -4
- package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/graphql/iam-bounded-context.graphql +24 -12
- package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/index.ts +24 -24
- package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/resolvers/iam-create-bounded-context.resolver.ts +3 -3
- package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/resolvers/iam-create-bounded-contexts.resolver.ts +3 -3
- package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/resolvers/iam-delete-bounded-context-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/resolvers/iam-delete-bounded-contexts.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/resolvers/iam-find-bounded-context-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/resolvers/iam-find-bounded-context.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/resolvers/iam-get-bounded-contexts.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/resolvers/iam-paginate-bounded-contexts.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/resolvers/iam-update-bounded-context-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/resolvers/iam-update-bounded-contexts.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/iam-bootstrap.seeder.spec.ts +46 -22
- package/dist/templates/backend/packages/iam/src/@api/iam/iam-bootstrap.seeder.ts +36 -23
- package/dist/templates/backend/packages/iam/src/@api/iam/iam.module.ts +46 -20
- package/dist/templates/backend/packages/iam/src/@api/iam/iam.seeder.ts +7 -7
- package/dist/templates/backend/packages/iam/src/@api/iam/permission/controllers/iam-create-permission.controller.ts +3 -3
- package/dist/templates/backend/packages/iam/src/@api/iam/permission/controllers/iam-create-permissions.controller.ts +3 -3
- package/dist/templates/backend/packages/iam/src/@api/iam/permission/controllers/iam-delete-permission-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/permission/controllers/iam-delete-permissions.controller.ts +6 -7
- package/dist/templates/backend/packages/iam/src/@api/iam/permission/controllers/iam-find-permission-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/permission/controllers/iam-find-permission.controller.ts +6 -7
- package/dist/templates/backend/packages/iam/src/@api/iam/permission/controllers/iam-get-permissions.controller.ts +6 -7
- package/dist/templates/backend/packages/iam/src/@api/iam/permission/controllers/iam-paginate-permissions.controller.ts +5 -6
- package/dist/templates/backend/packages/iam/src/@api/iam/permission/controllers/iam-update-permission-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/permission/controllers/iam-update-permissions.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/permission/dto/iam-permission.dto.ts +5 -4
- package/dist/templates/backend/packages/iam/src/@api/iam/permission/dto/index.ts +4 -4
- package/dist/templates/backend/packages/iam/src/@api/iam/permission/graphql/iam-permission.graphql +18 -15
- package/dist/templates/backend/packages/iam/src/@api/iam/permission/index.ts +24 -24
- package/dist/templates/backend/packages/iam/src/@api/iam/permission/resolvers/iam-create-permission.resolver.ts +3 -3
- package/dist/templates/backend/packages/iam/src/@api/iam/permission/resolvers/iam-create-permissions.resolver.ts +3 -3
- package/dist/templates/backend/packages/iam/src/@api/iam/permission/resolvers/iam-delete-permission-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/permission/resolvers/iam-delete-permissions.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/permission/resolvers/iam-find-permission-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/permission/resolvers/iam-find-permission.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/permission/resolvers/iam-get-permissions.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/permission/resolvers/iam-paginate-permissions.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/permission/resolvers/iam-update-permission-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/permission/resolvers/iam-update-permissions.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/controllers/iam-create-permission-role.controller.ts +3 -3
- package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/controllers/iam-create-permissions-roles.controller.ts +3 -3
- package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/controllers/iam-delete-permission-role-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/controllers/iam-delete-permissions-roles.controller.ts +6 -7
- package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/controllers/iam-find-permission-role-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/controllers/iam-find-permission-role.controller.ts +6 -7
- package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/controllers/iam-get-permissions-roles.controller.ts +6 -7
- package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/controllers/iam-paginate-permissions-roles.controller.ts +5 -6
- package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/controllers/iam-update-permission-role-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/controllers/iam-update-permissions-roles.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/dto/iam-permission-role.dto.ts +5 -4
- package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/dto/index.ts +4 -4
- package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/graphql/iam-permission-role.graphql +21 -9
- package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/index.ts +24 -24
- package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/resolvers/iam-create-permission-role.resolver.ts +3 -3
- package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/resolvers/iam-create-permissions-roles.resolver.ts +3 -3
- package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/resolvers/iam-delete-permission-role-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/resolvers/iam-delete-permissions-roles.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/resolvers/iam-find-permission-role-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/resolvers/iam-find-permission-role.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/resolvers/iam-get-permissions-roles.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/resolvers/iam-paginate-permissions-roles.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/resolvers/iam-update-permission-role-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/resolvers/iam-update-permissions-roles.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/role/controllers/iam-create-role.controller.ts +3 -3
- package/dist/templates/backend/packages/iam/src/@api/iam/role/controllers/iam-create-roles.controller.ts +3 -3
- package/dist/templates/backend/packages/iam/src/@api/iam/role/controllers/iam-delete-role-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/role/controllers/iam-delete-roles.controller.ts +6 -7
- package/dist/templates/backend/packages/iam/src/@api/iam/role/controllers/iam-find-role-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/role/controllers/iam-find-role.controller.ts +6 -7
- package/dist/templates/backend/packages/iam/src/@api/iam/role/controllers/iam-get-roles.controller.ts +6 -7
- package/dist/templates/backend/packages/iam/src/@api/iam/role/controllers/iam-inherit-permissions-role-role.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/role/controllers/iam-paginate-roles.controller.ts +5 -6
- package/dist/templates/backend/packages/iam/src/@api/iam/role/controllers/iam-update-role-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/role/controllers/iam-update-roles.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/role/dto/iam-role.dto.ts +5 -4
- package/dist/templates/backend/packages/iam/src/@api/iam/role/dto/index.ts +4 -4
- package/dist/templates/backend/packages/iam/src/@api/iam/role/graphql/iam-role.graphql +19 -19
- package/dist/templates/backend/packages/iam/src/@api/iam/role/index.ts +26 -26
- package/dist/templates/backend/packages/iam/src/@api/iam/role/resolvers/iam-create-role.resolver.ts +3 -3
- package/dist/templates/backend/packages/iam/src/@api/iam/role/resolvers/iam-create-roles.resolver.ts +3 -3
- package/dist/templates/backend/packages/iam/src/@api/iam/role/resolvers/iam-delete-role-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/role/resolvers/iam-delete-roles.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/role/resolvers/iam-find-role-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/role/resolvers/iam-find-role.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/role/resolvers/iam-get-roles.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/role/resolvers/iam-inherit-permissions-role-role.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/role/resolvers/iam-paginate-roles.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/role/resolvers/iam-update-role-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/role/resolvers/iam-update-roles.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/role-account/controllers/iam-create-role-account.controller.ts +3 -3
- package/dist/templates/backend/packages/iam/src/@api/iam/role-account/controllers/iam-create-roles-accounts.controller.ts +3 -3
- package/dist/templates/backend/packages/iam/src/@api/iam/role-account/controllers/iam-delete-role-account-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/role-account/controllers/iam-delete-roles-accounts.controller.ts +6 -7
- package/dist/templates/backend/packages/iam/src/@api/iam/role-account/controllers/iam-find-role-account-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/role-account/controllers/iam-find-role-account.controller.ts +6 -7
- package/dist/templates/backend/packages/iam/src/@api/iam/role-account/controllers/iam-get-roles-accounts.controller.ts +6 -7
- package/dist/templates/backend/packages/iam/src/@api/iam/role-account/controllers/iam-paginate-roles-accounts.controller.ts +5 -6
- package/dist/templates/backend/packages/iam/src/@api/iam/role-account/controllers/iam-update-role-account-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/role-account/controllers/iam-update-roles-accounts.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/role-account/dto/iam-role-account.dto.ts +5 -4
- package/dist/templates/backend/packages/iam/src/@api/iam/role-account/dto/index.ts +4 -4
- package/dist/templates/backend/packages/iam/src/@api/iam/role-account/graphql/iam-role-account.graphql +19 -9
- package/dist/templates/backend/packages/iam/src/@api/iam/role-account/index.ts +24 -24
- package/dist/templates/backend/packages/iam/src/@api/iam/role-account/resolvers/iam-create-role-account.resolver.ts +3 -3
- package/dist/templates/backend/packages/iam/src/@api/iam/role-account/resolvers/iam-create-roles-accounts.resolver.ts +3 -3
- package/dist/templates/backend/packages/iam/src/@api/iam/role-account/resolvers/iam-delete-role-account-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/role-account/resolvers/iam-delete-roles-accounts.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/role-account/resolvers/iam-find-role-account-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/role-account/resolvers/iam-find-role-account.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/role-account/resolvers/iam-get-roles-accounts.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/role-account/resolvers/iam-paginate-roles-accounts.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/role-account/resolvers/iam-update-role-account-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/role-account/resolvers/iam-update-roles-accounts.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tag/controllers/iam-create-tag.controller.ts +3 -3
- package/dist/templates/backend/packages/iam/src/@api/iam/tag/controllers/iam-delete-tag-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tag/controllers/iam-find-tag-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tag/controllers/iam-find-tag.controller.ts +6 -7
- package/dist/templates/backend/packages/iam/src/@api/iam/tag/controllers/iam-get-tags.controller.ts +6 -7
- package/dist/templates/backend/packages/iam/src/@api/iam/tag/controllers/iam-paginate-tags.controller.ts +5 -6
- package/dist/templates/backend/packages/iam/src/@api/iam/tag/controllers/iam-update-tag-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tag/dto/index.ts +4 -4
- package/dist/templates/backend/packages/iam/src/@api/iam/tag/graphql/iam-tag.graphql +9 -9
- package/dist/templates/backend/packages/iam/src/@api/iam/tag/index.ts +18 -18
- package/dist/templates/backend/packages/iam/src/@api/iam/tag/resolvers/iam-create-tag.resolver.ts +3 -3
- package/dist/templates/backend/packages/iam/src/@api/iam/tag/resolvers/iam-delete-tag-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tag/resolvers/iam-find-tag-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tag/resolvers/iam-find-tag.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tag/resolvers/iam-get-tags.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tag/resolvers/iam-paginate-tags.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tag/resolvers/iam-update-tag-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant/controllers/iam-create-tenant.controller.ts +7 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant/controllers/iam-create-tenants.controller.ts +7 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant/controllers/iam-delete-tenant-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant/controllers/iam-delete-tenants.controller.ts +6 -7
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant/controllers/iam-find-tenant-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant/controllers/iam-find-tenant.controller.ts +6 -7
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant/controllers/iam-get-tenants.controller.ts +6 -7
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant/controllers/iam-get-with-tenant-constraint-tenants.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant/controllers/iam-paginate-tenants.controller.ts +5 -6
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant/controllers/iam-paginate-with-tenant-constraint-tenants.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant/controllers/iam-update-tenant-by-id.controller.ts +13 -6
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant/controllers/iam-update-tenants.controller.ts +13 -6
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant/dto/iam-tenant.dto.ts +4 -3
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant/dto/index.ts +4 -4
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant/graphql/iam-tenant.graphql +24 -18
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant/index.ts +28 -28
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant/resolvers/iam-create-tenant.resolver.ts +6 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant/resolvers/iam-create-tenants.resolver.ts +6 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant/resolvers/iam-delete-tenant-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant/resolvers/iam-delete-tenants.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant/resolvers/iam-find-tenant-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant/resolvers/iam-find-tenant.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant/resolvers/iam-get-tenants.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant/resolvers/iam-get-with-tenant-constraint-tenants.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant/resolvers/iam-paginate-tenants.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant/resolvers/iam-paginate-with-tenant-constraint-tenants.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant/resolvers/iam-update-tenant-by-id.resolver.ts +12 -6
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant/resolvers/iam-update-tenants.resolver.ts +12 -6
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/controllers/iam-create-tenant-account.controller.ts +7 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/controllers/iam-create-tenants-accounts.controller.ts +7 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/controllers/iam-delete-tenant-account-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/controllers/iam-delete-tenants-accounts.controller.ts +6 -7
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/controllers/iam-find-tenant-account-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/controllers/iam-find-tenant-account.controller.ts +6 -7
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/controllers/iam-get-tenants-accounts.controller.ts +6 -7
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/controllers/iam-paginate-tenants-accounts.controller.ts +5 -6
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/controllers/iam-update-tenant-account-by-id.controller.ts +13 -6
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/controllers/iam-update-tenants-accounts.controller.ts +13 -6
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/dto/iam-tenant-account.dto.ts +5 -4
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/dto/index.ts +4 -4
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/graphql/iam-tenant-account.graphql +21 -9
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/index.ts +24 -24
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/resolvers/iam-create-tenant-account.resolver.ts +6 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/resolvers/iam-create-tenants-accounts.resolver.ts +6 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/resolvers/iam-delete-tenant-account-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/resolvers/iam-delete-tenants-accounts.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/resolvers/iam-find-tenant-account-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/resolvers/iam-find-tenant-account.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/resolvers/iam-get-tenants-accounts.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/resolvers/iam-paginate-tenants-accounts.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/resolvers/iam-update-tenant-account-by-id.resolver.ts +12 -6
- package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/resolvers/iam-update-tenants-accounts.resolver.ts +12 -6
- package/dist/templates/backend/packages/iam/src/@api/iam/user/controllers/iam-count-user.controller.ts +32 -0
- package/dist/templates/backend/packages/iam/src/@api/iam/user/controllers/iam-delete-user-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/user/controllers/iam-delete-users.controller.ts +6 -7
- package/dist/templates/backend/packages/iam/src/@api/iam/user/controllers/iam-find-user-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/user/controllers/iam-find-user.controller.ts +6 -7
- package/dist/templates/backend/packages/iam/src/@api/iam/user/controllers/iam-forgot-password-user.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/user/controllers/iam-get-users.controller.ts +6 -7
- package/dist/templates/backend/packages/iam/src/@api/iam/user/controllers/iam-paginate-users.controller.ts +5 -6
- package/dist/templates/backend/packages/iam/src/@api/iam/user/controllers/iam-reset-password-user.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/user/controllers/iam-update-user-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/user/controllers/iam-update-users.controller.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/user/dto/iam-user.dto.ts +3 -2
- package/dist/templates/backend/packages/iam/src/@api/iam/user/dto/index.ts +4 -4
- package/dist/templates/backend/packages/iam/src/@api/iam/user/graphql/iam-user.graphql +20 -18
- package/dist/templates/backend/packages/iam/src/@api/iam/user/index.ts +30 -24
- package/dist/templates/backend/packages/iam/src/@api/iam/user/resolvers/iam-count-user.resolver.ts +25 -0
- package/dist/templates/backend/packages/iam/src/@api/iam/user/resolvers/iam-delete-user-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/user/resolvers/iam-delete-users.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/user/resolvers/iam-find-user-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/user/resolvers/iam-find-user.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/user/resolvers/iam-forgot-password-user.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/user/resolvers/iam-get-users.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/user/resolvers/iam-paginate-users.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/user/resolvers/iam-reset-password-user.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/user/resolvers/iam-update-user-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@api/iam/user/resolvers/iam-update-users.resolver.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/account/application/check-password-me/iam-check-password-me-account.handler.ts +4 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/account/application/check-unique-email/iam-check-unique-email-account.handler.spec.ts +75 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/account/application/check-unique-email/iam-check-unique-email-account.handler.ts +5 -2
- package/dist/templates/backend/packages/iam/src/@app/iam/account/application/check-unique-username/iam-check-unique-username-account.handler.spec.ts +75 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/account/application/check-unique-username/iam-check-unique-username-account.handler.ts +5 -2
- package/dist/templates/backend/packages/iam/src/@app/iam/account/application/count/iam-count-account.handler.ts +2 -3
- package/dist/templates/backend/packages/iam/src/@app/iam/account/application/count/iam-count-account.service.ts +3 -4
- package/dist/templates/backend/packages/iam/src/@app/iam/account/application/create/iam-create-account.handler.spec.ts +236 -51
- package/dist/templates/backend/packages/iam/src/@app/iam/account/application/create/iam-create-account.handler.ts +99 -42
- package/dist/templates/backend/packages/iam/src/@app/iam/account/application/create/iam-create-account.service.ts +4 -3
- package/dist/templates/backend/packages/iam/src/@app/iam/account/application/create/iam-create-accounts.service.ts +4 -3
- package/dist/templates/backend/packages/iam/src/@app/iam/account/application/delete/iam-delete-account-by-id.handler.ts +5 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/account/application/delete/iam-delete-account-by-id.service.ts +3 -4
- package/dist/templates/backend/packages/iam/src/@app/iam/account/application/delete/iam-delete-accounts.handler.ts +5 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/account/application/delete/iam-delete-accounts.service.ts +3 -4
- package/dist/templates/backend/packages/iam/src/@app/iam/account/application/find/iam-find-account-by-id.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/account/application/find/iam-find-account-by-id.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/account/application/find/iam-find-account.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/account/application/find/iam-find-account.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/account/application/get/iam-get-accounts.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/account/application/get/iam-get-accounts.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/account/application/iam-account.payload-types.ts +34 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/account/application/me/iam-me-account.handler.spec.ts +3 -3
- package/dist/templates/backend/packages/iam/src/@app/iam/account/application/me/iam-me-account.handler.ts +2 -2
- package/dist/templates/backend/packages/iam/src/@app/iam/account/application/paginate/iam-paginate-accounts.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/account/application/paginate/iam-paginate-accounts.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/account/application/paginate-with-tenant-constraint/iam-paginate-with-tenant-constraint-accounts.handler.ts +4 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/account/application/update/iam-update-account-by-id.handler.spec.ts +497 -38
- package/dist/templates/backend/packages/iam/src/@app/iam/account/application/update/iam-update-account-by-id.handler.ts +171 -51
- package/dist/templates/backend/packages/iam/src/@app/iam/account/application/update/iam-update-account-by-id.service.ts +9 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/account/application/update/iam-update-accounts.handler.spec.ts +299 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/account/application/update/iam-update-accounts.handler.ts +107 -7
- package/dist/templates/backend/packages/iam/src/@app/iam/account/application/update/iam-update-accounts.service.ts +5 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/account/application/update/subscribers/iam-account-updated-cache-invalidator.subscriber.spec.ts +62 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/account/application/update/subscribers/iam-account-updated-cache-invalidator.subscriber.ts +59 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/account/application/update-me/iam-update-me-account.handler.ts +5 -7
- package/dist/templates/backend/packages/iam/src/@app/iam/account/domain/iam-account.field-schema.ts +15 -7
- package/dist/templates/backend/packages/iam/src/@app/iam/account/domain/index.ts +1 -1
- package/dist/templates/backend/packages/iam/src/@app/iam/account/index.ts +45 -38
- package/dist/templates/backend/packages/iam/src/@app/iam/account/infrastructure/drizzle/iam-drizzle-account.repository.ts +144 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/account/infrastructure/drizzle/iam-drizzle-account.schema.ts +46 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/create/iam-create-bounded-context.handler.ts +5 -7
- package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/create/iam-create-bounded-context.service.ts +4 -3
- package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/create/iam-create-bounded-contexts.handler.ts +4 -4
- package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/create/iam-create-bounded-contexts.service.ts +4 -3
- package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/delete/iam-delete-bounded-context-by-id.handler.ts +5 -8
- package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/delete/iam-delete-bounded-context-by-id.service.ts +3 -4
- package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/delete/iam-delete-bounded-contexts.handler.ts +5 -8
- package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/delete/iam-delete-bounded-contexts.service.ts +3 -4
- package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/find/iam-find-bounded-context-by-id.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/find/iam-find-bounded-context-by-id.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/find/iam-find-bounded-context.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/find/iam-find-bounded-context.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/get/iam-get-bounded-contexts.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/get/iam-get-bounded-contexts.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/paginate/iam-paginate-bounded-contexts.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/paginate/iam-paginate-bounded-contexts.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/update/iam-update-bounded-context-by-id.handler.ts +12 -11
- package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/update/iam-update-bounded-context-by-id.service.ts +9 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/update/iam-update-bounded-contexts.handler.ts +6 -9
- package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/update/iam-update-bounded-contexts.service.ts +5 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/domain/iam-bounded-context.field-schema.ts +4 -4
- package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/domain/index.ts +1 -1
- package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/index.ts +29 -29
- package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/infrastructure/drizzle/iam-drizzle-bounded-context.repository.ts +40 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/infrastructure/drizzle/iam-drizzle-bounded-context.schema.ts +33 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/iam.relations.ts +116 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/iam.seed.ts +45 -45
- package/dist/templates/backend/packages/iam/src/@app/iam/index.ts +25 -52
- package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/create/iam-create-permission.handler.ts +5 -4
- package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/create/iam-create-permission.service.ts +4 -3
- package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/create/iam-create-permissions.handler.ts +4 -4
- package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/create/iam-create-permissions.service.ts +4 -3
- package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/delete/iam-delete-permission-by-id.handler.ts +5 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/delete/iam-delete-permission-by-id.service.ts +3 -4
- package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/delete/iam-delete-permissions.handler.ts +5 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/delete/iam-delete-permissions.service.ts +3 -4
- package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/find/iam-find-permission-by-id.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/find/iam-find-permission-by-id.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/find/iam-find-permission.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/find/iam-find-permission.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/get/iam-get-permissions.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/get/iam-get-permissions.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/get-permissions-without-role/iam-get-permissions-without-role.handler.spec.ts +121 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/get-permissions-without-role/iam-get-permissions-without-role.handler.ts +73 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/paginate/iam-paginate-permissions.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/paginate/iam-paginate-permissions.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/update/iam-update-permission-by-id.handler.ts +12 -8
- package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/update/iam-update-permission-by-id.service.ts +9 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/update/iam-update-permissions.handler.ts +6 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/update/iam-update-permissions.service.ts +5 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/permission/domain/iam-permission.field-schema.ts +5 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/permission/domain/index.ts +1 -1
- package/dist/templates/backend/packages/iam/src/@app/iam/permission/index.ts +32 -29
- package/dist/templates/backend/packages/iam/src/@app/iam/permission/infrastructure/drizzle/iam-drizzle-permission.repository.ts +100 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/permission/infrastructure/drizzle/iam-drizzle-permission.schema.ts +23 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/create/iam-create-permission-role.handler.ts +5 -7
- package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/create/iam-create-permission-role.service.ts +6 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/create/iam-create-permissions-roles.handler.ts +4 -4
- package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/create/iam-create-permissions-roles.service.ts +4 -3
- package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/delete/iam-delete-permission-role-by-id.handler.ts +5 -8
- package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/delete/iam-delete-permission-role-by-id.service.ts +3 -4
- package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/delete/iam-delete-permissions-roles.handler.ts +5 -8
- package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/delete/iam-delete-permissions-roles.service.ts +3 -4
- package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/find/iam-find-permission-role-by-id.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/find/iam-find-permission-role-by-id.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/find/iam-find-permission-role.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/find/iam-find-permission-role.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/get/iam-get-permissions-roles.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/get/iam-get-permissions-roles.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/paginate/iam-paginate-permissions-roles.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/paginate/iam-paginate-permissions-roles.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/update/iam-update-permission-role-by-id.handler.ts +12 -11
- package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/update/iam-update-permission-role-by-id.service.ts +9 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/update/iam-update-permissions-roles.handler.ts +6 -9
- package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/update/iam-update-permissions-roles.service.ts +5 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/domain/iam-permission-role.field-schema.ts +2 -2
- package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/domain/index.ts +1 -1
- package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/index.ts +29 -29
- package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/infrastructure/drizzle/iam-drizzle-permission-role.repository.ts +40 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/infrastructure/drizzle/iam-drizzle-permission-role.schema.ts +14 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/role/application/create/iam-create-role.handler.ts +5 -4
- package/dist/templates/backend/packages/iam/src/@app/iam/role/application/create/iam-create-role.service.ts +4 -3
- package/dist/templates/backend/packages/iam/src/@app/iam/role/application/create/iam-create-roles.handler.ts +4 -4
- package/dist/templates/backend/packages/iam/src/@app/iam/role/application/create/iam-create-roles.service.ts +4 -3
- package/dist/templates/backend/packages/iam/src/@app/iam/role/application/delete/iam-delete-role-by-id.handler.ts +5 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/role/application/delete/iam-delete-role-by-id.service.ts +3 -4
- package/dist/templates/backend/packages/iam/src/@app/iam/role/application/delete/iam-delete-roles.handler.ts +5 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/role/application/delete/iam-delete-roles.service.ts +3 -4
- package/dist/templates/backend/packages/iam/src/@app/iam/role/application/find/iam-find-role-by-id.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/role/application/find/iam-find-role-by-id.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/role/application/find/iam-find-role.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/role/application/find/iam-find-role.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/role/application/get/iam-get-roles.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/role/application/get/iam-get-roles.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/role/application/inherit-permissions-role/iam-inherit-permissions-role-role.handler.ts +5 -7
- package/dist/templates/backend/packages/iam/src/@app/iam/role/application/paginate/iam-paginate-roles.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/role/application/paginate/iam-paginate-roles.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/role/application/update/iam-update-role-by-id.handler.ts +12 -8
- package/dist/templates/backend/packages/iam/src/@app/iam/role/application/update/iam-update-role-by-id.service.ts +9 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/role/application/update/iam-update-roles.handler.ts +6 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/role/application/update/iam-update-roles.service.ts +5 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/role/domain/iam-role.field-schema.ts +5 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/role/domain/index.ts +1 -1
- package/dist/templates/backend/packages/iam/src/@app/iam/role/index.ts +30 -30
- package/dist/templates/backend/packages/iam/src/@app/iam/role/infrastructure/drizzle/iam-drizzle-role.repository.ts +149 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/role/infrastructure/drizzle/iam-drizzle-role.schema.ts +33 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/create/iam-create-role-account.handler.ts +5 -4
- package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/create/iam-create-role-account.service.ts +6 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/create/iam-create-roles-accounts.handler.ts +4 -4
- package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/create/iam-create-roles-accounts.service.ts +4 -3
- package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/delete/iam-delete-role-account-by-id.handler.ts +5 -8
- package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/delete/iam-delete-role-account-by-id.service.ts +3 -4
- package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/delete/iam-delete-roles-accounts.handler.ts +5 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/delete/iam-delete-roles-accounts.service.ts +3 -4
- package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/find/iam-find-role-account-by-id.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/find/iam-find-role-account-by-id.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/find/iam-find-role-account.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/find/iam-find-role-account.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/get/iam-get-roles-accounts.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/get/iam-get-roles-accounts.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/paginate/iam-paginate-roles-accounts.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/paginate/iam-paginate-roles-accounts.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/update/iam-update-role-account-by-id.handler.ts +12 -11
- package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/update/iam-update-role-account-by-id.service.ts +9 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/update/iam-update-roles-accounts.handler.ts +6 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/update/iam-update-roles-accounts.service.ts +5 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/role-account/domain/iam-role-account.field-schema.ts +2 -2
- package/dist/templates/backend/packages/iam/src/@app/iam/role-account/domain/index.ts +1 -1
- package/dist/templates/backend/packages/iam/src/@app/iam/role-account/index.ts +29 -29
- package/dist/templates/backend/packages/iam/src/@app/iam/role-account/infrastructure/drizzle/iam-drizzle-role-account.repository.ts +40 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/role-account/infrastructure/drizzle/iam-drizzle-role-account.schema.ts +14 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/shared/functions/iam-create-permissions-from-roles.function.ts +2 -2
- package/dist/templates/backend/packages/iam/src/@app/iam/shared/functions/iam-resolve-account-tenants.function.spec.ts +100 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/shared/functions/iam-resolve-account-tenants.function.ts +59 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/shared/iam-bootstrap.constants.ts +19 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/shared/index.ts +4 -2
- package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/create/iam-create-tag.handler.ts +5 -4
- package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/create/iam-create-tag.service.ts +4 -3
- package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/delete/iam-delete-tag-by-id.handler.ts +5 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/delete/iam-delete-tag-by-id.service.ts +3 -4
- package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/find/iam-find-tag-by-id.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/find/iam-find-tag-by-id.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/find/iam-find-tag.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/find/iam-find-tag.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/get/iam-get-tags.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/get/iam-get-tags.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/paginate/iam-paginate-tags.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/paginate/iam-paginate-tags.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/update/iam-update-tag-by-id.handler.ts +12 -8
- package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/update/iam-update-tag-by-id.service.ts +9 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/tag/domain/iam-tag.field-schema.ts +3 -3
- package/dist/templates/backend/packages/iam/src/@app/iam/tag/domain/index.ts +1 -1
- package/dist/templates/backend/packages/iam/src/@app/iam/tag/index.ts +23 -23
- package/dist/templates/backend/packages/iam/src/@app/iam/tag/infrastructure/drizzle/iam-drizzle-tag.repository.ts +35 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/tag/infrastructure/drizzle/iam-drizzle-tag.schema.ts +21 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/create/iam-create-tenant.handler.spec.ts +195 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/create/iam-create-tenant.handler.ts +85 -7
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/create/iam-create-tenant.service.ts +4 -3
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/create/iam-create-tenants.handler.spec.ts +98 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/create/iam-create-tenants.handler.ts +53 -7
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/create/iam-create-tenants.service.ts +4 -3
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/delete/iam-delete-tenant-by-id.handler.ts +5 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/delete/iam-delete-tenant-by-id.service.ts +3 -4
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/delete/iam-delete-tenants.handler.ts +5 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/delete/iam-delete-tenants.service.ts +3 -4
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/find/iam-find-tenant-by-id.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/find/iam-find-tenant-by-id.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/find/iam-find-tenant.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/find/iam-find-tenant.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/get/iam-get-tenants.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/get/iam-get-tenants.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/get-with-tenant-constraint/iam-get-with-tenant-constraint-tenants.handler.ts +4 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/paginate/iam-paginate-tenants.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/paginate/iam-paginate-tenants.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/paginate-with-tenant-constraint/iam-paginate-with-tenant-constraint-tenants.handler.ts +4 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/update/iam-update-tenant-by-id.handler.spec.ts +222 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/update/iam-update-tenant-by-id.handler.ts +83 -8
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/update/iam-update-tenant-by-id.service.ts +9 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/update/iam-update-tenants.handler.spec.ts +75 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/update/iam-update-tenants.handler.ts +28 -7
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/update/iam-update-tenants.service.ts +5 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant/domain/iam-tenant.field-schema.ts +4 -4
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant/domain/index.ts +1 -1
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant/index.ts +31 -31
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant/infrastructure/drizzle/iam-drizzle-tenant.repository.ts +108 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant/infrastructure/drizzle/iam-drizzle-tenant.schema.ts +35 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/create/iam-create-tenant-account.handler.spec.ts +115 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/create/iam-create-tenant-account.handler.ts +38 -9
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/create/iam-create-tenant-account.service.ts +6 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/create/iam-create-tenants-accounts.handler.spec.ts +105 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/create/iam-create-tenants-accounts.handler.ts +43 -7
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/create/iam-create-tenants-accounts.service.ts +4 -3
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/delete/iam-delete-tenant-account-by-id.handler.ts +5 -8
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/delete/iam-delete-tenant-account-by-id.service.ts +3 -4
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/delete/iam-delete-tenants-accounts.handler.ts +5 -8
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/delete/iam-delete-tenants-accounts.service.ts +3 -4
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/find/iam-find-tenant-account-by-id.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/find/iam-find-tenant-account-by-id.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/find/iam-find-tenant-account.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/find/iam-find-tenant-account.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/get/iam-get-tenants-accounts.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/get/iam-get-tenants-accounts.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/paginate/iam-paginate-tenants-accounts.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/paginate/iam-paginate-tenants-accounts.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/update/iam-update-tenant-account-by-id.handler.spec.ts +83 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/update/iam-update-tenant-account-by-id.handler.ts +33 -11
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/update/iam-update-tenant-account-by-id.service.ts +9 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/update/iam-update-tenants-accounts.handler.spec.ts +78 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/update/iam-update-tenants-accounts.handler.ts +27 -10
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/update/iam-update-tenants-accounts.service.ts +5 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/domain/iam-tenant-account.field-schema.ts +2 -2
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/domain/index.ts +1 -1
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/index.ts +29 -29
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/infrastructure/drizzle/iam-drizzle-tenant-account.repository.ts +40 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/infrastructure/drizzle/iam-drizzle-tenant-account.schema.ts +14 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/user/application/count/iam-count-user.handler.ts +2 -3
- package/dist/templates/backend/packages/iam/src/@app/iam/user/application/count/iam-count-user.service.ts +3 -4
- package/dist/templates/backend/packages/iam/src/@app/iam/user/application/create/iam-create-user.handler.ts +5 -4
- package/dist/templates/backend/packages/iam/src/@app/iam/user/application/create/iam-create-user.service.ts +4 -3
- package/dist/templates/backend/packages/iam/src/@app/iam/user/application/create/iam-create-users.handler.ts +4 -4
- package/dist/templates/backend/packages/iam/src/@app/iam/user/application/create/iam-create-users.service.ts +4 -3
- package/dist/templates/backend/packages/iam/src/@app/iam/user/application/delete/iam-delete-user-by-id.handler.ts +5 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/user/application/delete/iam-delete-user-by-id.service.ts +3 -4
- package/dist/templates/backend/packages/iam/src/@app/iam/user/application/delete/iam-delete-users.handler.ts +5 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/user/application/delete/iam-delete-users.service.ts +3 -4
- package/dist/templates/backend/packages/iam/src/@app/iam/user/application/find/iam-find-user-by-id.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/user/application/find/iam-find-user-by-id.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/user/application/find/iam-find-user-by-username-password.service.spec.ts +24 -14
- package/dist/templates/backend/packages/iam/src/@app/iam/user/application/find/iam-find-user-by-username-password.service.ts +23 -21
- package/dist/templates/backend/packages/iam/src/@app/iam/user/application/find/iam-find-user.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/user/application/find/iam-find-user.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/user/application/forgot-password/iam-forgot-password-user.handler.ts +5 -7
- package/dist/templates/backend/packages/iam/src/@app/iam/user/application/get/iam-get-users.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/user/application/get/iam-get-users.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/user/application/paginate/iam-paginate-users.handler.ts +4 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/user/application/paginate/iam-paginate-users.service.ts +7 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/user/application/reset-password/iam-reset-password-user.handler.ts +5 -7
- package/dist/templates/backend/packages/iam/src/@app/iam/user/application/update/iam-update-user-by-id.handler.ts +12 -8
- package/dist/templates/backend/packages/iam/src/@app/iam/user/application/update/iam-update-user-by-id.service.ts +9 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/user/application/update/iam-update-users.handler.ts +6 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/user/application/update/iam-update-users.service.ts +5 -5
- package/dist/templates/backend/packages/iam/src/@app/iam/user/domain/iam-user.field-schema.spec.ts +36 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/user/domain/iam-user.field-schema.ts +6 -6
- package/dist/templates/backend/packages/iam/src/@app/iam/user/domain/index.ts +1 -1
- package/dist/templates/backend/packages/iam/src/@app/iam/user/index.ts +42 -35
- package/dist/templates/backend/packages/iam/src/@app/iam/user/infrastructure/drizzle/iam-drizzle-user.repository.ts +40 -0
- package/dist/templates/backend/packages/iam/src/@app/iam/user/infrastructure/drizzle/iam-drizzle-user.schema.ts +42 -0
- package/dist/templates/backend/packages/iam/src/@bridges/iam/account/adapters/iam-account-loader.adapter.spec.ts +827 -0
- package/dist/templates/backend/packages/iam/src/@bridges/iam/account/adapters/iam-account-loader.adapter.ts +223 -20
- package/dist/templates/backend/packages/iam/src/@bridges/iam/account/adapters/iam-account-provisioner.adapter.spec.ts +282 -0
- package/dist/templates/backend/packages/iam/src/@bridges/iam/account/adapters/iam-account-provisioner.adapter.ts +121 -0
- package/dist/templates/backend/packages/iam/src/@bridges/iam/account/adapters/iam-operator-account-reader.adapter.spec.ts +63 -0
- package/dist/templates/backend/packages/iam/src/@bridges/iam/account/adapters/iam-operator-account-reader.adapter.ts +39 -0
- package/dist/templates/backend/packages/iam/src/@bridges/iam/account/adapters/index.ts +3 -0
- package/dist/templates/backend/packages/iam/src/@bridges/iam/account/index.ts +1 -1
- package/dist/templates/backend/packages/iam/src/@bridges/iam/account/ports/iam-account-provisioner.port.ts +88 -0
- package/dist/templates/backend/packages/iam/src/@bridges/iam/account/ports/iam-account-provisioner.token.ts +1 -0
- package/dist/templates/backend/packages/iam/src/@bridges/iam/account/ports/index.ts +2 -0
- package/dist/templates/backend/packages/iam/src/@bridges/iam/bounded-context/adapters/iam-bounded-context-seeder.adapter.ts +2 -2
- package/dist/templates/backend/packages/iam/src/@bridges/iam/bounded-context/adapters/iam-bounded-context-writer.adapter.spec.ts +156 -0
- package/dist/templates/backend/packages/iam/src/@bridges/iam/bounded-context/adapters/iam-bounded-context-writer.adapter.ts +75 -0
- package/dist/templates/backend/packages/iam/src/@bridges/iam/bounded-context/adapters/index.ts +2 -0
- package/dist/templates/backend/packages/iam/src/@bridges/iam/bounded-context/index.ts +1 -1
- package/dist/templates/backend/packages/iam/src/@bridges/iam/bounded-context/ports/iam-bounded-context-writer.port.ts +49 -0
- package/dist/templates/backend/packages/iam/src/@bridges/iam/bounded-context/ports/iam-bounded-context-writer.token.ts +1 -0
- package/dist/templates/backend/packages/iam/src/@bridges/iam/bounded-context/ports/index.ts +4 -2
- package/dist/templates/backend/packages/iam/src/@bridges/iam/client/index.ts +1 -0
- package/dist/templates/backend/packages/iam/src/@bridges/iam/client/ports/index.ts +2 -2
- package/dist/templates/backend/packages/iam/src/@bridges/iam/permission/adapters/iam-permission-seeder.adapter.ts +2 -2
- package/dist/templates/backend/packages/iam/src/@bridges/iam/permission/adapters/iam-permission-writer.adapter.spec.ts +315 -0
- package/dist/templates/backend/packages/iam/src/@bridges/iam/permission/adapters/iam-permission-writer.adapter.ts +147 -0
- package/dist/templates/backend/packages/iam/src/@bridges/iam/permission/adapters/index.ts +2 -0
- package/dist/templates/backend/packages/iam/src/@bridges/iam/permission/index.ts +1 -1
- package/dist/templates/backend/packages/iam/src/@bridges/iam/permission/ports/iam-permission-writer.port.ts +70 -0
- package/dist/templates/backend/packages/iam/src/@bridges/iam/permission/ports/iam-permission-writer.token.ts +1 -0
- package/dist/templates/backend/packages/iam/src/@bridges/iam/permission/ports/index.ts +4 -2
- package/dist/templates/backend/packages/iam/src/@bridges/iam/tenant/adapters/iam-tenant-writer.adapter.spec.ts +173 -0
- package/dist/templates/backend/packages/iam/src/@bridges/iam/tenant/adapters/iam-tenant-writer.adapter.ts +63 -0
- package/dist/templates/backend/packages/iam/src/@bridges/iam/tenant/adapters/index.ts +1 -0
- package/dist/templates/backend/packages/iam/src/@bridges/iam/tenant/index.ts +1 -0
- package/dist/templates/backend/packages/iam/src/@bridges/iam/tenant/ports/iam-tenant-writer.port.ts +54 -0
- package/dist/templates/backend/packages/iam/src/@bridges/iam/tenant/ports/iam-tenant-writer.token.ts +1 -0
- package/dist/templates/backend/packages/iam/src/@bridges/iam/tenant/ports/index.ts +2 -0
- package/dist/templates/backend/packages/iam/src/@bridges/iam/user/adapters/iam-credential-verifier.adapter.ts +2 -2
- package/dist/templates/backend/packages/iam/src/@bridges/iam/user/adapters/index.ts +1 -0
- package/dist/templates/backend/packages/iam/src/@bridges/providers/account-loader.bridge.ts +2 -2
- package/dist/templates/backend/packages/iam/src/@bridges/providers/credential-verifier.bridge.ts +2 -2
- package/dist/templates/backend/packages/iam/src/@bridges/providers/iam-bounded-context-seeder.bridge.ts +2 -2
- package/dist/templates/backend/packages/iam/src/@bridges/providers/iam-permission-seeder.bridge.ts +2 -2
- package/dist/templates/backend/packages/iam/test/acceptance/iam/core-back-exception-status.e2e-spec.ts +286 -0
- package/dist/templates/backend/packages/iam/test/acceptance/iam/user-sensitive-fields-masking.e2e-spec.ts +289 -0
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/controllers/o-auth-count-access-token.controller.ts +32 -0
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/controllers/o-auth-delete-access-token-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/controllers/o-auth-find-access-token-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/controllers/o-auth-find-access-token.controller.ts +6 -7
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/controllers/o-auth-get-access-tokens.controller.ts +6 -7
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/controllers/o-auth-paginate-access-tokens.controller.ts +5 -6
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/dto/index.ts +4 -4
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/dto/o-auth-access-token.dto.ts +6 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/dto/o-auth-create-access-token.dto.ts +5 -4
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/dto/o-auth-update-access-token-by-id.dto.ts +5 -4
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/dto/o-auth-update-access-tokens.dto.ts +5 -4
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/graphql/o-auth-access-token.graphql +25 -14
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/index.ts +20 -14
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/resolvers/o-auth-count-access-token.resolver.ts +25 -0
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/resolvers/o-auth-delete-access-token-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/resolvers/o-auth-find-access-token-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/resolvers/o-auth-find-access-token.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/resolvers/o-auth-get-access-tokens.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/resolvers/o-auth-paginate-access-tokens.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/controllers/o-auth-create-application.controller.ts +3 -3
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/controllers/o-auth-delete-application-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/controllers/o-auth-find-application-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/controllers/o-auth-find-application.controller.ts +6 -7
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/controllers/o-auth-get-applications.controller.ts +6 -7
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/controllers/o-auth-paginate-applications.controller.ts +5 -6
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/controllers/o-auth-update-application-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/dto/index.ts +4 -4
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/dto/o-auth-application.dto.ts +4 -3
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/dto/o-auth-create-application.dto.ts +1 -1
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/dto/o-auth-update-application-by-id.dto.ts +1 -1
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/dto/o-auth-update-applications.dto.ts +1 -1
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/graphql/o-auth-application.graphql +23 -14
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/index.ts +18 -18
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/resolvers/o-auth-create-application.resolver.ts +3 -3
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/resolvers/o-auth-delete-application-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/resolvers/o-auth-find-application-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/resolvers/o-auth-find-application.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/resolvers/o-auth-get-applications.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/resolvers/o-auth-paginate-applications.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/resolvers/o-auth-update-application-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/controllers/o-auth-create-application-client.controller.ts +3 -3
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/controllers/o-auth-create-applications-clients.controller.ts +3 -3
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/controllers/o-auth-delete-application-client-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/controllers/o-auth-delete-applications-clients.controller.ts +6 -7
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/controllers/o-auth-find-application-client-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/controllers/o-auth-find-application-client.controller.ts +6 -7
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/controllers/o-auth-get-applications-clients.controller.ts +6 -7
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/controllers/o-auth-paginate-applications-clients.controller.ts +5 -6
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/controllers/o-auth-update-application-client-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/dto/index.ts +4 -4
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/dto/o-auth-application-client.dto.ts +5 -4
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/graphql/o-auth-application-client.graphql +13 -10
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/index.ts +22 -22
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/resolvers/o-auth-create-application-client.resolver.ts +3 -3
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/resolvers/o-auth-create-applications-clients.resolver.ts +3 -3
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/resolvers/o-auth-delete-application-client-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/resolvers/o-auth-delete-applications-clients.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/resolvers/o-auth-find-application-client-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/resolvers/o-auth-find-application-client.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/resolvers/o-auth-get-applications-clients.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/resolvers/o-auth-paginate-applications-clients.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/resolvers/o-auth-update-application-client-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/controllers/o-auth-create-authorization-code.controller.ts +3 -3
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/controllers/o-auth-delete-authorization-code-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/controllers/o-auth-delete-authorization-codes.controller.ts +6 -7
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/controllers/o-auth-find-authorization-code-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/controllers/o-auth-find-authorization-code.controller.ts +6 -7
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/controllers/o-auth-get-authorization-codes.controller.ts +6 -7
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/controllers/o-auth-paginate-authorization-codes.controller.ts +5 -6
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/controllers/o-auth-update-authorization-code-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/dto/index.ts +4 -4
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/dto/o-auth-authorization-code.dto.ts +3 -2
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/graphql/o-auth-authorization-code.graphql +20 -17
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/index.ts +20 -20
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/resolvers/o-auth-create-authorization-code.resolver.ts +3 -3
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/resolvers/o-auth-delete-authorization-code-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/resolvers/o-auth-delete-authorization-codes.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/resolvers/o-auth-find-authorization-code-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/resolvers/o-auth-find-authorization-code.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/resolvers/o-auth-get-authorization-codes.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/resolvers/o-auth-paginate-authorization-codes.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/resolvers/o-auth-update-authorization-code-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/controllers/o-auth-create-client.controller.ts +3 -3
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/controllers/o-auth-delete-client-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/controllers/o-auth-find-client-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/controllers/o-auth-find-client.controller.ts +6 -7
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/controllers/o-auth-get-clients.controller.ts +6 -7
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/controllers/o-auth-paginate-clients.controller.ts +5 -6
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/controllers/o-auth-update-client-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/dto/index.ts +4 -4
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/dto/o-auth-client.dto.ts +6 -12
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/dto/o-auth-create-client.dto.ts +1 -8
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/dto/o-auth-update-client-by-id.dto.ts +1 -8
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/dto/o-auth-update-clients.dto.ts +1 -8
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/graphql/o-auth-client.graphql +16 -23
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/index.ts +18 -18
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/resolvers/o-auth-create-client.resolver.ts +3 -3
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/resolvers/o-auth-delete-client-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/resolvers/o-auth-find-client-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/resolvers/o-auth-find-client.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/resolvers/o-auth-get-clients.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/resolvers/o-auth-paginate-clients.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/resolvers/o-auth-update-client-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/credential/controllers/o-auth-find-credential-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/credential/controllers/o-auth-find-credential.controller.ts +6 -7
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/credential/controllers/o-auth-get-credentials.controller.ts +6 -7
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/credential/controllers/o-auth-paginate-credentials.controller.ts +5 -6
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/credential/dto/index.ts +1 -1
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/credential/dto/o-auth-credential.dto.ts +24 -9
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/credential/graphql/o-auth-credential.graphql +31 -6
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/credential/index.ts +9 -9
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/credential/resolvers/o-auth-find-credential-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/credential/resolvers/o-auth-find-credential.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/credential/resolvers/o-auth-get-credentials.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/credential/resolvers/o-auth-paginate-credentials.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/controllers/o-auth-authorize.controller.spec.ts +33 -25
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/controllers/o-auth-authorize.controller.ts +2 -6
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/controllers/o-auth-create-impersonate-token.controller.ts +73 -0
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/controllers/o-auth-create-token.controller.spec.ts +5 -4
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/controllers/o-auth-create-token.controller.ts +3 -6
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/controllers/o-auth-get-jwks.controller.spec.ts +5 -7
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/controllers/o-auth-get-jwks.controller.ts +1 -4
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/controllers/o-auth-logout.controller.spec.ts +52 -31
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/controllers/o-auth-logout.controller.ts +6 -9
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/controllers/o-auth-revoke-token.controller.spec.ts +5 -4
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/controllers/o-auth-revoke-token.controller.ts +2 -2
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/controllers/o-auth-session.controller.spec.ts +13 -12
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/controllers/o-auth-session.controller.ts +1 -1
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/graphql/flows.graphql +32 -0
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/index.ts +18 -10
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/resolvers/o-auth-create-impersonate-token.resolver.ts +89 -0
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/resolvers/o-auth-create-token.resolver.spec.ts +10 -6
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/resolvers/o-auth-create-token.resolver.ts +8 -8
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/resolvers/o-auth-revoke-token.resolver.spec.ts +10 -8
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/resolvers/o-auth-revoke-token.resolver.ts +7 -4
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/o-auth-bootstrap.seeder.spec.ts +111 -41
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/o-auth-bootstrap.seeder.ts +38 -23
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/o-auth.module.ts +20 -20
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/o-auth.seeder.ts +18 -7
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/controllers/o-auth-delete-refresh-token-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/controllers/o-auth-find-refresh-token-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/controllers/o-auth-find-refresh-token.controller.ts +6 -7
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/controllers/o-auth-get-refresh-tokens.controller.ts +6 -7
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/controllers/o-auth-paginate-refresh-tokens.controller.ts +5 -6
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/dto/index.ts +4 -4
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/dto/o-auth-create-refresh-token.dto.ts +1 -1
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/dto/o-auth-refresh-token.dto.ts +4 -3
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/dto/o-auth-update-refresh-token-by-id.dto.ts +1 -1
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/dto/o-auth-update-refresh-tokens.dto.ts +1 -1
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/graphql/o-auth-refresh-token.graphql +23 -14
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/index.ts +14 -14
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/resolvers/o-auth-delete-refresh-token-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/resolvers/o-auth-find-refresh-token-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/resolvers/o-auth-find-refresh-token.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/resolvers/o-auth-get-refresh-tokens.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/resolvers/o-auth-paginate-refresh-tokens.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/controllers/o-auth-create-scope.controller.ts +3 -3
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/controllers/o-auth-delete-scope-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/controllers/o-auth-find-scope-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/controllers/o-auth-find-scope.controller.ts +6 -7
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/controllers/o-auth-get-scopes.controller.ts +6 -7
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/controllers/o-auth-paginate-scopes.controller.ts +5 -6
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/controllers/o-auth-update-scope-by-id.controller.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/dto/index.ts +4 -4
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/graphql/o-auth-scope.graphql +16 -13
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/index.ts +18 -18
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/resolvers/o-auth-create-scope.resolver.ts +3 -3
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/resolvers/o-auth-delete-scope-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/resolvers/o-auth-find-scope-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/resolvers/o-auth-find-scope.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/resolvers/o-auth-get-scopes.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/resolvers/o-auth-paginate-scopes.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/resolvers/o-auth-update-scope-by-id.resolver.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/count/o-auth-count-access-token.handler.ts +20 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/count/o-auth-count-access-token.service.ts +24 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/create/o-auth-create-access-token.handler.ts +5 -7
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/create/o-auth-create-access-token.service.ts +4 -3
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/delete/o-auth-delete-access-token-by-id.handler.ts +5 -8
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/delete/o-auth-delete-access-token-by-id.service.ts +3 -4
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/find/o-auth-find-access-token-by-id.handler.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/find/o-auth-find-access-token-by-id.service.ts +7 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/find/o-auth-find-access-token.handler.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/find/o-auth-find-access-token.service.ts +7 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/get/o-auth-get-access-tokens.handler.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/get/o-auth-get-access-tokens.service.ts +7 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/paginate/o-auth-paginate-access-tokens.handler.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/paginate/o-auth-paginate-access-tokens.service.ts +7 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/domain/index.ts +1 -1
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/domain/o-auth-access-token.field-schema.ts +8 -7
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/index.ts +27 -21
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/infrastructure/drizzle/o-auth-drizzle-access-token.repository.ts +40 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/infrastructure/drizzle/o-auth-drizzle-access-token.schema.ts +35 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/create/o-auth-create-application.handler.ts +5 -7
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/create/o-auth-create-application.service.ts +4 -3
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/delete/o-auth-delete-application-by-id.handler.ts +5 -8
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/delete/o-auth-delete-application-by-id.service.ts +3 -4
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/find/o-auth-find-application-by-id.handler.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/find/o-auth-find-application-by-id.service.ts +7 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/find/o-auth-find-application.handler.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/find/o-auth-find-application.service.ts +7 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/get/o-auth-get-applications.handler.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/get/o-auth-get-applications.service.ts +7 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/paginate/o-auth-paginate-applications.handler.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/paginate/o-auth-paginate-applications.service.ts +7 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/update/o-auth-update-application-by-id.handler.spec.ts +144 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/update/o-auth-update-application-by-id.handler.ts +12 -11
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/update/o-auth-update-application-by-id.service.ts +9 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/domain/index.ts +1 -1
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/domain/o-auth-application.field-schema.spec.ts +20 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/domain/o-auth-application.field-schema.ts +6 -7
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/index.ts +23 -23
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/infrastructure/drizzle/o-auth-drizzle-application.repository.ts +102 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/infrastructure/drizzle/o-auth-drizzle-application.schema.ts +32 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/create/o-auth-create-application-client.handler.ts +5 -7
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/create/o-auth-create-application-client.service.ts +6 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/create/o-auth-create-applications-clients.handler.ts +4 -4
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/create/o-auth-create-applications-clients.service.ts +7 -3
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/delete/o-auth-delete-application-client-by-id.handler.ts +5 -8
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/delete/o-auth-delete-application-client-by-id.service.ts +3 -4
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/delete/o-auth-delete-applications-clients.handler.ts +5 -8
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/delete/o-auth-delete-applications-clients.service.ts +3 -4
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/find/o-auth-find-application-client-by-id.handler.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/find/o-auth-find-application-client-by-id.service.ts +7 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/find/o-auth-find-application-client.handler.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/find/o-auth-find-application-client.service.ts +7 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/get/o-auth-get-applications-clients.handler.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/get/o-auth-get-applications-clients.service.ts +7 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/paginate/o-auth-paginate-applications-clients.handler.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/paginate/o-auth-paginate-applications-clients.service.ts +7 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/update/o-auth-update-application-client-by-id.handler.ts +12 -11
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/update/o-auth-update-application-client-by-id.service.ts +9 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/domain/index.ts +1 -1
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/domain/o-auth-application-client.field-schema.ts +2 -2
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/index.ts +27 -27
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/infrastructure/drizzle/o-auth-drizzle-application-client.repository.ts +40 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/infrastructure/drizzle/o-auth-drizzle-application-client.schema.ts +14 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/create/o-auth-create-authorization-code.handler.ts +5 -7
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/create/o-auth-create-authorization-code.service.ts +4 -3
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/delete/o-auth-delete-authorization-code-by-id.handler.ts +5 -8
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/delete/o-auth-delete-authorization-code-by-id.service.ts +3 -4
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/delete/o-auth-delete-authorization-codes.handler.ts +5 -8
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/delete/o-auth-delete-authorization-codes.service.ts +3 -4
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/find/o-auth-find-authorization-code-by-id.handler.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/find/o-auth-find-authorization-code-by-id.service.ts +7 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/find/o-auth-find-authorization-code.handler.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/find/o-auth-find-authorization-code.service.ts +7 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/get/o-auth-get-authorization-codes.handler.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/get/o-auth-get-authorization-codes.service.ts +7 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/paginate/o-auth-paginate-authorization-codes.handler.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/paginate/o-auth-paginate-authorization-codes.service.ts +7 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/update/o-auth-update-authorization-code-by-id.handler.ts +12 -11
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/update/o-auth-update-authorization-code-by-id.service.ts +9 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/domain/index.ts +1 -1
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/domain/o-auth-authorization-code.field-schema.ts +5 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/index.ts +25 -25
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/infrastructure/drizzle/o-auth-drizzle-authorization-code.repository.ts +66 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/infrastructure/drizzle/o-auth-drizzle-authorization-code.schema.ts +42 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/create/o-auth-create-client.handler.ts +5 -4
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/create/o-auth-create-client.service.ts +4 -3
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/delete/o-auth-delete-client-by-id.handler.ts +5 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/delete/o-auth-delete-client-by-id.service.ts +3 -4
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/find/o-auth-find-client-by-id.handler.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/find/o-auth-find-client-by-id.service.ts +7 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/find/o-auth-find-client.handler.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/find/o-auth-find-client.service.ts +7 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/get/o-auth-get-clients.handler.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/get/o-auth-get-clients.service.ts +7 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/paginate/o-auth-paginate-clients.handler.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/paginate/o-auth-paginate-clients.service.ts +7 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/update/o-auth-update-client-by-id.handler.ts +14 -8
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/update/o-auth-update-client-by-id.service.ts +9 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/domain/index.ts +1 -1
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/domain/o-auth-client.field-schema.ts +5 -12
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/index.ts +23 -23
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/infrastructure/drizzle/o-auth-drizzle-client.repository.ts +109 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/infrastructure/drizzle/o-auth-drizzle-client.schema.ts +35 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/application/create/o-auth-create-credential.service.spec.ts +62 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/application/create/o-auth-create-credential.service.ts +4 -3
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/application/find/o-auth-find-credential-by-id.handler.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/application/find/o-auth-find-credential-by-id.service.ts +7 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/application/find/o-auth-find-credential.handler.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/application/find/o-auth-find-credential.service.ts +7 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/application/get/o-auth-get-credentials.handler.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/application/get/o-auth-get-credentials.service.ts +7 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/application/paginate/o-auth-paginate-credentials.handler.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/application/paginate/o-auth-paginate-credentials.service.ts +7 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/domain/index.ts +1 -1
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/domain/o-auth-credential.field-schema.ts +19 -7
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/index.ts +18 -18
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/infrastructure/drizzle/o-auth-drizzle-credential.repository.ts +38 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/infrastructure/drizzle/o-auth-drizzle-credential.schema.ts +31 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/authorize/o-auth-authorize.handler.spec.ts +37 -35
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/authorize/o-auth-authorize.handler.ts +9 -18
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/create-token/o-auth-create-token.handler.spec.ts +12 -11
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/create-token/o-auth-create-token.handler.ts +5 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/create-token/services/o-auth-create-token-authorization-code.service.spec.ts +72 -36
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/create-token/services/o-auth-create-token-authorization-code.service.ts +26 -16
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/create-token/services/o-auth-create-token-password.service.spec.ts +58 -24
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/create-token/services/o-auth-create-token-password.service.ts +20 -11
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/create-token/services/o-auth-create-token-refresh.service.spec.ts +126 -66
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/create-token/services/o-auth-create-token-refresh.service.ts +50 -33
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/get-jwks/o-auth-get-jwks.handler.spec.ts +3 -3
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/get-jwks/o-auth-get-jwks.handler.ts +4 -1
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/impersonate-token/o-auth-create-impersonate-token.handler.spec.ts +351 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/impersonate-token/o-auth-create-impersonate-token.handler.ts +117 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/impersonate-token/services/o-auth-create-impersonate-token.service.spec.ts +242 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/impersonate-token/services/o-auth-create-impersonate-token.service.ts +156 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/revoke-token/o-auth-revoke-token.handler.spec.ts +7 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/revoke-token/o-auth-revoke-token.handler.ts +2 -2
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/revoke-token/services/o-auth-revoke-token.service.spec.ts +134 -37
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/revoke-token/services/o-auth-revoke-token.service.ts +67 -28
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/session/o-auth-hub-session.service.spec.ts +22 -18
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/session/o-auth-hub-session.service.ts +4 -1
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/errors/impersonation-chain.error.ts +26 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/errors/impersonation-permission-refresh-failed.error.ts +34 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/errors/impersonation-self.error.ts +25 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/errors/impersonation-target-no-client.error.ts +26 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/errors/impersonation-target-not-found.error.ts +27 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/errors/impersonation-target-privileged.error.ts +26 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/errors/impersonation-unavailable.error.ts +36 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/errors/impersonation.errors.spec.ts +132 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/errors/index.ts +12 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/flows.types.ts +38 -3
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/impersonation-privilege-denylist.spec.ts +281 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/impersonation-privilege-denylist.ts +239 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/index.ts +2 -2
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/index.ts +36 -28
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/shared/pkce/o-auth-verify-pkce-s256.spec.ts +3 -3
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/shared/pkce/o-auth-verify-pkce-s256.ts +2 -2
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/index.ts +22 -48
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/o-auth.relations.ts +81 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/o-auth.seed.ts +80 -46
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/application/create/o-auth-create-refresh-token.handler.ts +5 -7
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/application/create/o-auth-create-refresh-token.service.ts +4 -3
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/application/delete/o-auth-delete-refresh-token-by-id.handler.ts +5 -8
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/application/delete/o-auth-delete-refresh-token-by-id.service.ts +3 -4
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/application/find/o-auth-find-refresh-token-by-id.handler.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/application/find/o-auth-find-refresh-token-by-id.service.ts +7 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/application/find/o-auth-find-refresh-token.handler.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/application/find/o-auth-find-refresh-token.service.ts +7 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/application/get/o-auth-get-refresh-tokens.handler.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/application/get/o-auth-get-refresh-tokens.service.ts +7 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/application/paginate/o-auth-paginate-refresh-tokens.handler.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/application/paginate/o-auth-paginate-refresh-tokens.service.ts +7 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/domain/index.ts +1 -1
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/domain/o-auth-refresh-token.field-schema.ts +7 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/index.ts +20 -20
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/infrastructure/drizzle/o-auth-drizzle-refresh-token.repository.ts +40 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/infrastructure/drizzle/o-auth-drizzle-refresh-token.schema.ts +33 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/create/o-auth-create-scope.handler.ts +5 -4
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/create/o-auth-create-scope.service.ts +4 -3
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/delete/o-auth-delete-scope-by-id.handler.ts +5 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/delete/o-auth-delete-scope-by-id.service.ts +3 -4
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/find/o-auth-find-scope-by-id.handler.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/find/o-auth-find-scope-by-id.service.ts +7 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/find/o-auth-find-scope.handler.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/find/o-auth-find-scope.service.ts +7 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/get/o-auth-get-scopes.handler.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/get/o-auth-get-scopes.service.ts +7 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/paginate/o-auth-paginate-scopes.handler.ts +4 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/paginate/o-auth-paginate-scopes.service.ts +7 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/update/o-auth-update-scope-by-id.handler.ts +12 -8
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/update/o-auth-update-scope-by-id.service.ts +9 -6
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/domain/index.ts +1 -1
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/domain/o-auth-scope.field-schema.ts +3 -3
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/index.ts +23 -23
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/infrastructure/drizzle/o-auth-drizzle-scope.repository.ts +40 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/infrastructure/drizzle/o-auth-drizzle-scope.schema.ts +23 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/shared/functions/o-auth-authenticate-application.function.spec.ts +72 -25
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/shared/functions/o-auth-authenticate-application.function.ts +31 -16
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/shared/functions/o-auth-generate-application-secret.function.spec.ts +30 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/shared/functions/o-auth-generate-application-secret.function.ts +21 -0
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/shared/functions/o-auth-resolve-application-client.function.spec.ts +43 -32
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/shared/functions/o-auth-resolve-application-client.function.ts +13 -9
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/shared/index.ts +6 -5
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/shared/services/token-retention.service.spec.ts +70 -79
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/shared/services/token-retention.service.ts +44 -38
- package/dist/templates/backend/packages/o-auth/src/@bridges/o-auth/application/adapters/index.ts +1 -0
- package/dist/templates/backend/packages/o-auth/src/@bridges/o-auth/application/adapters/o-auth-application-provisioner.adapter.spec.ts +727 -0
- package/dist/templates/backend/packages/o-auth/src/@bridges/o-auth/application/adapters/o-auth-application-provisioner.adapter.ts +274 -0
- package/dist/templates/backend/packages/o-auth/src/@bridges/o-auth/application/index.ts +1 -0
- package/dist/templates/backend/packages/o-auth/src/@bridges/o-auth/application/ports/index.ts +2 -0
- package/dist/templates/backend/packages/o-auth/src/@bridges/o-auth/application/ports/o-auth-application-provisioner.port.ts +79 -0
- package/dist/templates/backend/packages/o-auth/src/@bridges/o-auth/application/ports/o-auth-application-provisioner.token.ts +1 -0
- package/dist/templates/backend/packages/o-auth/src/@bridges/o-auth/client/adapters/index.ts +1 -0
- package/dist/templates/backend/packages/o-auth/src/@bridges/o-auth/client/adapters/o-auth-client-reader.adapter.spec.ts +58 -0
- package/dist/templates/backend/packages/o-auth/src/@bridges/o-auth/client/adapters/o-auth-client-reader.adapter.ts +6 -4
- package/dist/templates/backend/packages/o-auth/src/@bridges/providers/iam-client-reader.bridge.ts +2 -2
- package/dist/templates/backend/packages/o-auth/test/acceptance/o-auth/impersonate-token-guarded-transports.e2e-spec.ts +365 -0
- package/dist/templates/backend/packages/o-auth/test/acceptance/o-auth/masked-property-query-guard.e2e-spec.ts +936 -0
- package/dist/templates/backend/packages/o-auth/test/acceptance/o-auth/oauth-bootstrap-seeder-idempotency.e2e-spec.ts +211 -0
- package/dist/templates/backend/packages/o-auth/test/acceptance/o-auth/token-masking.e2e-spec.ts +232 -0
- package/dist/templates/backend/packages/queue-manager/src/@api/queue-manager/flows/graphql/queue-manager.graphql +149 -0
- package/dist/templates/backend/packages/queue-manager/src/@api/queue-manager/flows/index.ts +24 -0
- package/dist/templates/backend/packages/queue-manager/src/@api/queue-manager/flows/resolvers/queue-manager.resolver.auth-metadata.spec.ts +84 -0
- package/dist/templates/backend/packages/queue-manager/src/@api/queue-manager/flows/resolvers/queue-manager.resolver.spec.ts +210 -0
- package/dist/templates/backend/packages/queue-manager/src/@api/queue-manager/flows/resolvers/queue-manager.resolver.ts +228 -0
- package/dist/templates/backend/packages/queue-manager/src/@api/queue-manager/queue-manager.module.ts +84 -0
- package/dist/templates/backend/packages/queue-manager/src/@api/queue-manager/queue-manager.seeder.ts +33 -0
- package/dist/templates/backend/packages/queue-manager/src/@app/queue-manager/domain/ports/index.ts +20 -0
- package/dist/templates/backend/packages/queue-manager/src/@app/queue-manager/domain/ports/queue-inspector.port.ts +144 -0
- package/dist/templates/backend/packages/queue-manager/src/@app/queue-manager/domain/ports/queue-registry.token.ts +30 -0
- package/dist/templates/backend/packages/queue-manager/src/@app/queue-manager/infrastructure/adapters/bull-board-queue-inspector.adapter.spec.ts +261 -0
- package/dist/templates/backend/packages/queue-manager/src/@app/queue-manager/infrastructure/adapters/bull-board-queue-inspector.adapter.ts +388 -0
- package/dist/templates/backend/packages/queue-manager/src/@app/queue-manager/infrastructure/adapters/index.ts +1 -0
- package/dist/templates/backend/packages/queue-manager/src/@app/queue-manager/infrastructure/index.ts +1 -0
- package/dist/templates/backend/packages/queue-manager/src/@app/queue-manager/queue-manager.seed.ts +51 -0
- package/dist/templates/backend/packages/queue-manager/src/@app/queue-manager/queue-registry.providers.ts +37 -0
- package/dist/templates/codegen/backend/@api/__bounded_context_name__.module.ts.eta +2 -4
- package/dist/templates/codegen/backend/@api/__bounded_context_name__.seeder.ts.eta +7 -7
- package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-count-__module_name__.controller.ts.eta +69 -0
- package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-create-__module_name__.controller.ts.eta +17 -18
- package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-create-__module_names__.controller.ts.eta +12 -12
- package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-delete-__module_name__-by-id.controller.ts.eta +16 -17
- package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-delete-__module_names__.controller.ts.eta +15 -23
- package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-find-__module_name__-by-id.controller.ts.eta +14 -17
- package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-find-__module_name__.controller.ts.eta +16 -19
- package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-get-__module_names__.controller.ts.eta +16 -19
- package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-get-raw-__module_names__.controller.ts.eta +3 -28
- package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-max-__module_name__.controller.ts.eta +72 -0
- package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-min-__module_name__.controller.ts.eta +72 -0
- package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-paginate-__module_names__.controller.ts.eta +15 -18
- package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-sum-__module_name__.controller.ts.eta +72 -0
- package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-update-__module_name__-by-id.controller.ts.eta +21 -19
- package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-update-__module_names__.controller.ts.eta +20 -23
- package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-upsert-__module_name__.controller.ts.eta +12 -21
- package/dist/templates/codegen/backend/@api/__module_name__/dto/__bounded_context_name__-__module_name__.dto.ts.eta +45 -14
- package/dist/templates/codegen/backend/@api/__module_name__/dto/__bounded_context_name__-create-__module_name__.dto.ts.eta +17 -6
- package/dist/templates/codegen/backend/@api/__module_name__/dto/__bounded_context_name__-update-__module_name__-by-id.dto.ts.eta +17 -6
- package/dist/templates/codegen/backend/@api/__module_name__/dto/__bounded_context_name__-update-__module_names__.dto.ts.eta +17 -6
- package/dist/templates/codegen/backend/@api/__module_name__/dto/index.ts.eta +4 -4
- package/dist/templates/codegen/backend/@api/__module_name__/graphql/__bounded_context_name__-__module_name__.graphql.eta +185 -52
- package/dist/templates/codegen/backend/@api/__module_name__/index.ts.eta +102 -30
- package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-__module_name__-custom-field-value.resolver.ts.eta +32 -0
- package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-count-__module_name__.resolver.ts.eta +62 -0
- package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-create-__module_name__.resolver.ts.eta +16 -18
- package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-create-__module_names__.resolver.ts.eta +12 -12
- package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-delete-__module_name__-by-id.resolver.ts.eta +17 -17
- package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-delete-__module_names__.resolver.ts.eta +14 -21
- package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-find-__module_name__-by-id.resolver.ts.eta +14 -17
- package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-find-__module_name__.resolver.ts.eta +14 -17
- package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-get-__module_names__.resolver.ts.eta +14 -17
- package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-get-raw-__module_names__.resolver.ts.eta +3 -28
- package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-max-__module_name__.resolver.ts.eta +64 -0
- package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-min-__module_name__.resolver.ts.eta +64 -0
- package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-paginate-__module_names__.resolver.ts.eta +14 -17
- package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-sum-__module_name__.resolver.ts.eta +64 -0
- package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-update-__module_name__-by-id.resolver.ts.eta +23 -19
- package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-update-__module_names__.resolver.ts.eta +23 -23
- package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-upsert-__module_name__.resolver.ts.eta +12 -21
- package/dist/templates/codegen/backend/@app/__bounded_context_name__.seed.ts.eta +6 -4
- package/dist/templates/codegen/backend/@app/__module_name__/application/__bounded_context_name__-__module_name__.payload-types.ts.eta +53 -0
- package/dist/templates/codegen/backend/@app/__module_name__/application/count/__bounded_context_name__-count-__module_name__.handler.ts.eta +6 -44
- package/dist/templates/codegen/backend/@app/__module_name__/application/count/__bounded_context_name__-count-__module_name__.service.ts.eta +5 -6
- package/dist/templates/codegen/backend/@app/__module_name__/application/create/__bounded_context_name__-create-__module_name__.handler.ts.eta +61 -49
- package/dist/templates/codegen/backend/@app/__module_name__/application/create/__bounded_context_name__-create-__module_name__.service.ts.eta +100 -82
- package/dist/templates/codegen/backend/@app/__module_name__/application/create/__bounded_context_name__-create-__module_names__.handler.ts.eta +51 -9
- package/dist/templates/codegen/backend/@app/__module_name__/application/create/__bounded_context_name__-create-__module_names__.service.ts.eta +111 -31
- package/dist/templates/codegen/backend/@app/__module_name__/application/delete/__bounded_context_name__-delete-__module_name__-by-id.handler.ts.eta +37 -50
- package/dist/templates/codegen/backend/@app/__module_name__/application/delete/__bounded_context_name__-delete-__module_name__-by-id.service.ts.eta +100 -80
- package/dist/templates/codegen/backend/@app/__module_name__/application/delete/__bounded_context_name__-delete-__module_names__.handler.ts.eta +14 -52
- package/dist/templates/codegen/backend/@app/__module_name__/application/delete/__bounded_context_name__-delete-__module_names__.service.ts.eta +39 -61
- package/dist/templates/codegen/backend/@app/__module_name__/application/find/__bounded_context_name__-find-__module_name__-by-id.handler.ts.eta +21 -39
- package/dist/templates/codegen/backend/@app/__module_name__/application/find/__bounded_context_name__-find-__module_name__-by-id.service.ts.eta +35 -11
- package/dist/templates/codegen/backend/@app/__module_name__/application/find/__bounded_context_name__-find-__module_name__.handler.ts.eta +21 -40
- package/dist/templates/codegen/backend/@app/__module_name__/application/find/__bounded_context_name__-find-__module_name__.service.ts.eta +35 -10
- package/dist/templates/codegen/backend/@app/__module_name__/application/get/__bounded_context_name__-get-__module_names__.handler.ts.eta +24 -41
- package/dist/templates/codegen/backend/@app/__module_name__/application/get/__bounded_context_name__-get-__module_names__.service.ts.eta +35 -10
- package/dist/templates/codegen/backend/@app/__module_name__/application/get/__bounded_context_name__-get-raw-__module_names__.handler.ts.eta +15 -46
- package/dist/templates/codegen/backend/@app/__module_name__/application/get/__bounded_context_name__-get-raw-__module_names__.service.ts.eta +5 -7
- package/dist/templates/codegen/backend/@app/__module_name__/application/max/__bounded_context_name__-max-__module_name__.handler.ts.eta +43 -0
- package/dist/templates/codegen/backend/@app/__module_name__/application/max/__bounded_context_name__-max-__module_name__.service.ts.eta +5 -6
- package/dist/templates/codegen/backend/@app/__module_name__/application/min/__bounded_context_name__-min-__module_name__.handler.ts.eta +43 -0
- package/dist/templates/codegen/backend/@app/__module_name__/application/min/__bounded_context_name__-min-__module_name__.service.ts.eta +5 -6
- package/dist/templates/codegen/backend/@app/__module_name__/application/paginate/__bounded_context_name__-paginate-__module_names__.handler.ts.eta +24 -40
- package/dist/templates/codegen/backend/@app/__module_name__/application/paginate/__bounded_context_name__-paginate-__module_names__.service.ts.eta +39 -10
- package/dist/templates/codegen/backend/@app/__module_name__/application/sum/__bounded_context_name__-sum-__module_name__.handler.ts.eta +43 -0
- package/dist/templates/codegen/backend/@app/__module_name__/application/sum/__bounded_context_name__-sum-__module_name__.service.ts.eta +5 -6
- package/dist/templates/codegen/backend/@app/__module_name__/application/update/__bounded_context_name__-update-__module_name__-by-id.handler.ts.eta +78 -64
- package/dist/templates/codegen/backend/@app/__module_name__/application/update/__bounded_context_name__-update-__module_name__-by-id.service.ts.eta +71 -35
- package/dist/templates/codegen/backend/@app/__module_name__/application/update/__bounded_context_name__-update-__module_names__.handler.ts.eta +36 -52
- package/dist/templates/codegen/backend/@app/__module_name__/application/update/__bounded_context_name__-update-__module_names__.service.ts.eta +25 -41
- package/dist/templates/codegen/backend/@app/__module_name__/application/update/__bounded_context_name__-update-and-increment-__module_names__.service.ts.eta +24 -41
- package/dist/templates/codegen/backend/@app/__module_name__/application/upsert/__bounded_context_name__-upsert-__module_name__.handler.ts.eta +28 -52
- package/dist/templates/codegen/backend/@app/__module_name__/application/upsert/__bounded_context_name__-upsert-__module_name__.service.ts.eta +23 -83
- package/dist/templates/codegen/backend/@app/__module_name__/domain/__bounded_context_name__-__module_name__.field-schema.ts.eta +41 -2
- package/dist/templates/codegen/backend/@app/__module_name__/domain/index.ts.eta +1 -1
- package/dist/templates/codegen/backend/@app/__module_name__/index.ts.eta +117 -122
- package/dist/templates/codegen/backend/@app/__module_name__/infrastructure/drizzle/__bounded_context_name__-drizzle-__module_name__-custom-field-value.schema.ts.eta +37 -0
- package/dist/templates/codegen/backend/@app/__module_name__/infrastructure/drizzle/__bounded_context_name__-drizzle-__module_name__-i18n.repository.ts.eta +65 -0
- package/dist/templates/codegen/backend/@app/__module_name__/infrastructure/drizzle/__bounded_context_name__-drizzle-__module_name__-i18n.schema.ts.eta +47 -0
- package/dist/templates/codegen/backend/@app/__module_name__/infrastructure/drizzle/__bounded_context_name__-drizzle-__module_name__.repository.ts.eta +180 -0
- package/dist/templates/codegen/backend/@app/__module_name__/infrastructure/drizzle/__bounded_context_name__-drizzle-__module_name__.schema.ts.eta +154 -0
- package/dist/templates/codegen/backend/@app/index.ts.eta +0 -1
- package/dist/templates/codegen/backend/additional-@api/__module_name__/controllers/__additional_api_name__.controller.ts.eta +30 -25
- package/dist/templates/codegen/backend/additional-@api/__module_name__/resolvers/__additional_api_name__.resolver.ts.eta +33 -25
- package/dist/templates/codegen/backend/additional-@app/__module_name__/application/__additional_api_action__/__additional_api_name__.handler.ts.eta +30 -11
- package/dist/templates/codegen/frontend/module/__bounded_context_name__.navigation.ts.eta +1 -0
- package/dist/templates/codegen/frontend/module/__module_name__/__module_name__.columns.ts.eta +233 -30
- package/dist/templates/codegen/frontend/module/__module_name__/data-access/__module_name__.detail-config.ts.eta +18 -2
- package/dist/templates/codegen/frontend/module/__module_name__/data-access/__module_name__.graphql.ts.eta +223 -71
- package/dist/templates/codegen/frontend/module/__module_name__/data-access/__module_name__.list-config.ts.eta +11 -2
- package/dist/templates/codegen/frontend/module/__module_name__/data-access/__module_name__.resolvers.ts.eta +168 -58
- package/dist/templates/codegen/frontend/module/__module_name__/data-access/index.ts.eta +8 -0
- package/dist/templates/codegen/frontend/module/__module_name__/features/__module_name__-detail.component.ts.eta +257 -57
- package/dist/templates/codegen/frontend/module/__module_name__/features/__module_name__-form-embed.component.ts.eta +336 -89
- package/dist/templates/codegen/frontend/module/__module_name__/features/__module_name__-form.component.ts.eta +348 -141
- package/dist/templates/codegen/frontend/module/__module_name__/features/__module_name__-list-actions-cell.component.ts.eta +35 -12
- package/dist/templates/codegen/frontend/module/__module_name__/features/__module_name__-list-translations-cell.component.ts.eta +91 -0
- package/dist/templates/codegen/frontend/module/__module_name__/features/__module_name__-list.component.ts.eta +153 -52
- package/dist/templates/codegen/frontend/module/__module_name__/features/index.ts.eta +19 -0
- package/dist/templates/codegen/frontend/module/__module_name__/index.ts.eta +7 -5
- package/dist/templates/codegen/partials/fields/boolean-field.eta +11 -4
- package/dist/templates/codegen/partials/fields/color-picker-field.eta +8 -0
- package/dist/templates/codegen/partials/fields/date-field.eta +6 -16
- package/dist/templates/codegen/partials/fields/datetime-field.eta +8 -0
- package/dist/templates/codegen/partials/fields/enum-field.eta +16 -10
- package/dist/templates/codegen/partials/fields/number-field.eta +2 -4
- package/dist/templates/codegen/partials/fields/password-field.eta +14 -18
- package/dist/templates/codegen/partials/fields/text-field.eta +2 -7
- package/dist/templates/codegen/partials/fields/varchar-field.eta +2 -7
- package/dist/templates/codegen/partials/form/dialog-frame.eta +14 -11
- package/dist/templates/codegen/partials/form/field-errors.eta +10 -0
- package/dist/templates/codegen/partials/form/field-label.eta +21 -6
- package/dist/templates/codegen/partials/form/form-body.eta +32 -28
- package/dist/templates/codegen/partials/form/view-frame-tabbed.eta +54 -4
- package/dist/templates/codegen/partials/form/view-frame.eta +62 -4
- package/dist/templates/codegen/partials/i18n-recompute.eta +72 -0
- package/dist/templates/codegen/partials/i18n-validate.eta +51 -0
- package/dist/templates/codegen/partials/relationships/async-multiple-search-select.eta +4 -8
- package/dist/templates/codegen/partials/relationships/async-search-select.eta +4 -8
- package/dist/templates/codegen/partials/relationships/grid-elements-manager.eta +1 -0
- package/dist/templates/codegen/partials/relationships/grid-select-element.eta +5 -7
- package/dist/templates/codegen/partials/relationships/multiple-search-select.eta +4 -8
- package/dist/templates/codegen/partials/relationships/multiple-select.eta +17 -8
- package/dist/templates/codegen/partials/relationships/search-select.eta +5 -8
- package/dist/templates/codegen/partials/relationships/select.eta +14 -6
- package/dist/templates/frontend/application/.claude/skills/catalyst-data-layer/SKILL.md +67 -51
- package/dist/templates/frontend/application/.claude/skills/catalyst-data-layer/references/known-patterns.md +24 -20
- package/dist/templates/frontend/application/.claude/skills/catalyst-data-table-management/SKILL.md +38 -33
- package/dist/templates/frontend/application/.claude/skills/catalyst-form-composer-auditor/SKILL.md +133 -73
- package/dist/templates/frontend/application/.claude/skills/catalyst-form-composer-auditor/references/catalyst-detail-form-rules.md +308 -253
- package/dist/templates/frontend/application/.claude/skills/catalyst-project-structure/SKILL.md +281 -173
- package/dist/templates/frontend/application/.claude/skills/catalyst-review-module/SKILL.md +1 -1
- package/dist/templates/frontend/application/.claude/skills/catalyst-widget-creator/SKILL.md +288 -0
- package/dist/templates/frontend/application/.claude/skills/layout-design-system/SKILL.md +69 -10
- package/dist/templates/frontend/application/.claude/skills/transloco-i18n/SKILL.md +21 -0
- package/dist/templates/frontend/application/CLAUDE.md +18 -3
- package/dist/templates/frontend/application/angular.json +6 -4
- package/dist/templates/frontend/application/codegen.ts +2 -1
- package/dist/templates/frontend/application/libs/ui/accordion/src/lib/hlm-accordion-trigger.ts +1 -1
- package/dist/templates/frontend/application/libs/ui/alert/src/lib/hlm-alert.ts +1 -1
- package/dist/templates/frontend/application/libs/ui/alert-dialog/src/index.ts +3 -0
- package/dist/templates/frontend/application/libs/ui/alert-dialog/src/lib/hlm-alert-dialog-action.ts +1 -3
- package/dist/templates/frontend/application/libs/ui/alert-dialog/src/lib/hlm-alert-dialog-cancel.ts +3 -4
- package/dist/templates/frontend/application/libs/ui/alert-dialog/src/lib/hlm-alert-dialog-content.ts +5 -2
- package/dist/templates/frontend/application/libs/ui/alert-dialog/src/lib/hlm-alert-dialog-description.ts +5 -4
- package/dist/templates/frontend/application/libs/ui/alert-dialog/src/lib/hlm-alert-dialog-footer.ts +5 -4
- package/dist/templates/frontend/application/libs/ui/alert-dialog/src/lib/hlm-alert-dialog-header.ts +5 -4
- package/dist/templates/frontend/application/libs/ui/alert-dialog/src/lib/hlm-alert-dialog-media.ts +15 -0
- package/dist/templates/frontend/application/libs/ui/alert-dialog/src/lib/hlm-alert-dialog-overlay.ts +1 -1
- package/dist/templates/frontend/application/libs/ui/alert-dialog/src/lib/hlm-alert-dialog-title.ts +5 -4
- package/dist/templates/frontend/application/libs/ui/alert-dialog/src/lib/hlm-alert-dialog-trigger.ts +1 -3
- package/dist/templates/frontend/application/libs/ui/autocomplete/src/lib/hlm-autocomplete-content.ts +1 -1
- package/dist/templates/frontend/application/libs/ui/autocomplete/src/lib/hlm-autocomplete-empty.ts +1 -3
- package/dist/templates/frontend/application/libs/ui/autocomplete/src/lib/hlm-autocomplete-group.ts +1 -3
- package/dist/templates/frontend/application/libs/ui/autocomplete/src/lib/hlm-autocomplete-input.ts +45 -44
- package/dist/templates/frontend/application/libs/ui/autocomplete/src/lib/hlm-autocomplete-item.ts +3 -5
- package/dist/templates/frontend/application/libs/ui/autocomplete/src/lib/hlm-autocomplete-label.ts +1 -3
- package/dist/templates/frontend/application/libs/ui/autocomplete/src/lib/hlm-autocomplete-list.ts +2 -4
- package/dist/templates/frontend/application/libs/ui/autocomplete/src/lib/hlm-autocomplete-search.ts +8 -18
- package/dist/templates/frontend/application/libs/ui/autocomplete/src/lib/hlm-autocomplete-separator.ts +1 -3
- package/dist/templates/frontend/application/libs/ui/autocomplete/src/lib/hlm-autocomplete-status.ts +2 -4
- package/dist/templates/frontend/application/libs/ui/autocomplete/src/lib/hlm-autocomplete.ts +8 -18
- package/dist/templates/frontend/application/libs/ui/avatar/src/lib/hlm-avatar-badge.ts +2 -2
- package/dist/templates/frontend/application/libs/ui/avatar/src/lib/hlm-avatar-fallback.ts +1 -1
- package/dist/templates/frontend/application/libs/ui/avatar/src/lib/hlm-avatar-image.ts +1 -1
- package/dist/templates/frontend/application/libs/ui/badge/src/lib/hlm-badge.ts +1 -1
- package/dist/templates/frontend/application/libs/ui/breadcrumb/src/index.ts +0 -5
- package/dist/templates/frontend/application/libs/ui/breadcrumb/src/lib/hlm-breadcrumb-ellipsis.ts +12 -25
- package/dist/templates/frontend/application/libs/ui/breadcrumb/src/lib/hlm-breadcrumb-separator.ts +1 -1
- package/dist/templates/frontend/application/libs/ui/button/src/lib/hlm-button.ts +6 -8
- package/dist/templates/frontend/application/libs/ui/button-group/src/lib/hlm-button-group-separator.ts +5 -4
- package/dist/templates/frontend/application/libs/ui/button-group/src/lib/hlm-button-group-text.ts +4 -1
- package/dist/templates/frontend/application/libs/ui/button-group/src/lib/hlm-button-group.ts +4 -4
- package/dist/templates/frontend/application/libs/ui/calendar/src/index.ts +8 -1
- package/dist/templates/frontend/application/libs/ui/calendar/src/lib/hlm-calendar-multi.ts +189 -223
- package/dist/templates/frontend/application/libs/ui/calendar/src/lib/hlm-calendar-range.ts +188 -218
- package/dist/templates/frontend/application/libs/ui/calendar/src/lib/hlm-calendar.ts +184 -212
- package/dist/templates/frontend/application/libs/ui/calendar/src/lib/hlm-month-year-calendar.ts +139 -0
- package/dist/templates/frontend/application/libs/ui/card/src/lib/hlm-card-action.ts +1 -3
- package/dist/templates/frontend/application/libs/ui/card/src/lib/hlm-card-content.ts +2 -4
- package/dist/templates/frontend/application/libs/ui/card/src/lib/hlm-card-description.ts +1 -3
- package/dist/templates/frontend/application/libs/ui/card/src/lib/hlm-card-footer.ts +2 -5
- package/dist/templates/frontend/application/libs/ui/card/src/lib/hlm-card-header.ts +2 -4
- package/dist/templates/frontend/application/libs/ui/card/src/lib/hlm-card-title.ts +1 -3
- package/dist/templates/frontend/application/libs/ui/card/src/lib/hlm-card.token.ts +19 -0
- package/dist/templates/frontend/application/libs/ui/card/src/lib/hlm-card.ts +4 -2
- package/dist/templates/frontend/application/libs/ui/carousel/src/lib/hlm-carousel-next.ts +5 -7
- package/dist/templates/frontend/application/libs/ui/carousel/src/lib/hlm-carousel-previous.ts +5 -7
- package/dist/templates/frontend/application/libs/ui/carousel/src/lib/hlm-carousel.ts +8 -6
- package/dist/templates/frontend/application/libs/ui/checkbox/src/lib/hlm-checkbox.ts +13 -14
- package/dist/templates/frontend/application/libs/ui/collapsible/src/lib/hlm-collapsible-content.ts +1 -3
- package/dist/templates/frontend/application/libs/ui/collapsible/src/lib/hlm-collapsible-trigger.ts +1 -3
- package/dist/templates/frontend/application/libs/ui/collapsible/src/lib/hlm-collapsible.ts +1 -3
- package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-chip-input.ts +1 -3
- package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-chip-remove.ts +2 -4
- package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-chip.ts +2 -4
- package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-chips.ts +12 -12
- package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-content.ts +1 -3
- package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-empty.ts +1 -3
- package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-group.ts +1 -3
- package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-input.ts +58 -43
- package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-item.ts +3 -5
- package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-label.ts +1 -3
- package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-list.ts +2 -4
- package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-multiple.ts +8 -18
- package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-placeholder.ts +1 -1
- package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-separator.ts +1 -3
- package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-status.ts +2 -4
- package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-trigger.ts +17 -2
- package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-value.ts +1 -0
- package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox.ts +8 -18
- package/dist/templates/frontend/application/libs/ui/command/src/lib/hlm-command-dialog.ts +2 -2
- package/dist/templates/frontend/application/libs/ui/command/src/lib/hlm-command-group-label.ts +1 -1
- package/dist/templates/frontend/application/libs/ui/command/src/lib/hlm-command-group.ts +4 -1
- package/dist/templates/frontend/application/libs/ui/command/src/lib/hlm-command-input.ts +10 -4
- package/dist/templates/frontend/application/libs/ui/command/src/lib/hlm-command-item.ts +1 -1
- package/dist/templates/frontend/application/libs/ui/command/src/lib/hlm-command-list.ts +1 -1
- package/dist/templates/frontend/application/libs/ui/command/src/lib/hlm-command-separator.ts +1 -1
- package/dist/templates/frontend/application/libs/ui/command/src/lib/hlm-command-shortcut.ts +4 -1
- package/dist/templates/frontend/application/libs/ui/command/src/lib/hlm-command.ts +1 -1
- package/dist/templates/frontend/application/libs/ui/context-menu/src/lib/hlm-context-menu-trigger.ts +25 -14
- package/dist/templates/frontend/application/libs/ui/date-picker/src/index.ts +24 -3
- package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-date-multi-input.ts +104 -0
- package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-date-picker-anchor.ts +23 -0
- package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-date-picker-input.ts +105 -0
- package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-date-picker-multi.token.ts +61 -0
- package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-date-picker-multi.ts +70 -85
- package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-date-picker-trigger.ts +104 -0
- package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-date-picker.token.ts +22 -0
- package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-date-picker.ts +83 -97
- package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-date-range-input.ts +107 -0
- package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-date-range-picker.token.ts +36 -1
- package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-date-range-picker.ts +90 -89
- package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-month-year-input.ts +105 -0
- package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-month-year-picker.token.ts +89 -0
- package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-month-year-picker.ts +199 -0
- package/dist/templates/frontend/application/libs/ui/dialog/src/lib/hlm-dialog-close.ts +2 -4
- package/dist/templates/frontend/application/libs/ui/dialog/src/lib/hlm-dialog-content.ts +21 -13
- package/dist/templates/frontend/application/libs/ui/dialog/src/lib/hlm-dialog-description.ts +5 -4
- package/dist/templates/frontend/application/libs/ui/dialog/src/lib/hlm-dialog-footer.ts +1 -3
- package/dist/templates/frontend/application/libs/ui/dialog/src/lib/hlm-dialog-header.ts +2 -4
- package/dist/templates/frontend/application/libs/ui/dialog/src/lib/hlm-dialog-overlay.ts +4 -3
- package/dist/templates/frontend/application/libs/ui/dialog/src/lib/hlm-dialog-title.ts +2 -4
- package/dist/templates/frontend/application/libs/ui/dialog/src/lib/hlm-dialog-trigger.ts +1 -3
- package/dist/templates/frontend/application/libs/ui/dialog/src/lib/hlm-dialog.service.ts +7 -4
- package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/index.ts +4 -0
- package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-checkbox-indicator.ts +3 -5
- package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-checkbox.ts +30 -12
- package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-focus-on-hover.ts +35 -0
- package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-group.ts +1 -3
- package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-item-sub-indicator.ts +2 -2
- package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-item.ts +4 -2
- package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-label.ts +4 -4
- package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-radio-indicator.ts +5 -7
- package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-radio.ts +26 -13
- package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-separator.ts +2 -4
- package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-shortcut.ts +5 -4
- package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-sub-trigger.ts +52 -0
- package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-sub.ts +21 -26
- package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-trigger.ts +14 -17
- package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu.ts +21 -26
- package/dist/templates/frontend/application/libs/ui/empty/src/lib/hlm-empty-content.ts +2 -4
- package/dist/templates/frontend/application/libs/ui/empty/src/lib/hlm-empty-description.ts +2 -4
- package/dist/templates/frontend/application/libs/ui/empty/src/lib/hlm-empty-header.ts +2 -4
- package/dist/templates/frontend/application/libs/ui/empty/src/lib/hlm-empty-media.ts +4 -3
- package/dist/templates/frontend/application/libs/ui/empty/src/lib/hlm-empty-title.ts +1 -3
- package/dist/templates/frontend/application/libs/ui/empty/src/lib/hlm-empty.ts +2 -4
- package/dist/templates/frontend/application/libs/ui/field/src/lib/hlm-field-content.ts +2 -4
- package/dist/templates/frontend/application/libs/ui/field/src/lib/hlm-field-description.ts +2 -5
- package/dist/templates/frontend/application/libs/ui/field/src/lib/hlm-field-error.ts +2 -6
- package/dist/templates/frontend/application/libs/ui/field/src/lib/hlm-field-group.ts +2 -4
- package/dist/templates/frontend/application/libs/ui/field/src/lib/hlm-field-label.ts +3 -7
- package/dist/templates/frontend/application/libs/ui/field/src/lib/hlm-field-separator.ts +3 -5
- package/dist/templates/frontend/application/libs/ui/field/src/lib/hlm-field-set.ts +5 -7
- package/dist/templates/frontend/application/libs/ui/field/src/lib/hlm-field-title.ts +2 -4
- package/dist/templates/frontend/application/libs/ui/field/src/lib/hlm-field.ts +1 -1
- package/dist/templates/frontend/application/libs/ui/hover-card/src/lib/hlm-hover-card-content.ts +1 -1
- package/dist/templates/frontend/application/libs/ui/input/src/lib/hlm-input.ts +10 -27
- package/dist/templates/frontend/application/libs/ui/input-group/src/lib/hlm-input-group-addon.ts +6 -6
- package/dist/templates/frontend/application/libs/ui/input-group/src/lib/hlm-input-group-button.ts +3 -3
- package/dist/templates/frontend/application/libs/ui/input-group/src/lib/hlm-input-group-input.ts +2 -4
- package/dist/templates/frontend/application/libs/ui/input-group/src/lib/hlm-input-group-text.ts +2 -2
- package/dist/templates/frontend/application/libs/ui/input-group/src/lib/hlm-input-group-textarea.ts +2 -4
- package/dist/templates/frontend/application/libs/ui/input-group/src/lib/hlm-input-group.ts +5 -24
- package/dist/templates/frontend/application/libs/ui/input-otp/src/lib/hlm-input-otp-fake-caret.ts +7 -4
- package/dist/templates/frontend/application/libs/ui/input-otp/src/lib/hlm-input-otp-group.ts +6 -5
- package/dist/templates/frontend/application/libs/ui/input-otp/src/lib/hlm-input-otp-separator.ts +3 -7
- package/dist/templates/frontend/application/libs/ui/input-otp/src/lib/hlm-input-otp-slot.ts +22 -10
- package/dist/templates/frontend/application/libs/ui/input-otp/src/lib/hlm-input-otp.ts +2 -4
- package/dist/templates/frontend/application/libs/ui/item/src/lib/hlm-item-actions.ts +2 -4
- package/dist/templates/frontend/application/libs/ui/item/src/lib/hlm-item-content.ts +5 -4
- package/dist/templates/frontend/application/libs/ui/item/src/lib/hlm-item-description.ts +6 -8
- package/dist/templates/frontend/application/libs/ui/item/src/lib/hlm-item-footer.ts +2 -4
- package/dist/templates/frontend/application/libs/ui/item/src/lib/hlm-item-group.ts +4 -1
- package/dist/templates/frontend/application/libs/ui/item/src/lib/hlm-item-header.ts +2 -4
- package/dist/templates/frontend/application/libs/ui/item/src/lib/hlm-item-media.ts +4 -3
- package/dist/templates/frontend/application/libs/ui/item/src/lib/hlm-item-separator.ts +3 -2
- package/dist/templates/frontend/application/libs/ui/item/src/lib/hlm-item-title.ts +5 -4
- package/dist/templates/frontend/application/libs/ui/item/src/lib/hlm-item.ts +7 -6
- package/dist/templates/frontend/application/libs/ui/kbd/src/lib/hlm-kbd-group.ts +1 -1
- package/dist/templates/frontend/application/libs/ui/kbd/src/lib/hlm-kbd.ts +4 -5
- package/dist/templates/frontend/application/libs/ui/label/src/lib/hlm-label.ts +3 -10
- package/dist/templates/frontend/application/libs/ui/menubar/src/lib/hlm-menubar-trigger.ts +23 -15
- package/dist/templates/frontend/application/libs/ui/menubar/src/lib/hlm-menubar.ts +1 -1
- package/dist/templates/frontend/application/libs/ui/native-select/src/lib/hlm-native-select-opt-group.ts +8 -5
- package/dist/templates/frontend/application/libs/ui/native-select/src/lib/hlm-native-select-option.ts +8 -5
- package/dist/templates/frontend/application/libs/ui/native-select/src/lib/hlm-native-select.ts +17 -11
- package/dist/templates/frontend/application/libs/ui/navigation-menu/src/lib/hlm-navigation-menu-content.ts +10 -3
- package/dist/templates/frontend/application/libs/ui/navigation-menu/src/lib/hlm-navigation-menu-item.ts +4 -1
- package/dist/templates/frontend/application/libs/ui/navigation-menu/src/lib/hlm-navigation-menu-link.ts +7 -4
- package/dist/templates/frontend/application/libs/ui/navigation-menu/src/lib/hlm-navigation-menu-list.ts +4 -1
- package/dist/templates/frontend/application/libs/ui/navigation-menu/src/lib/hlm-navigation-menu-trigger.ts +18 -4
- package/dist/templates/frontend/application/libs/ui/navigation-menu/src/lib/hlm-navigation-menu.ts +3 -0
- package/dist/templates/frontend/application/libs/ui/pagination/src/lib/hlm-numbered-pagination-query-params.ts +68 -67
- package/dist/templates/frontend/application/libs/ui/pagination/src/lib/hlm-numbered-pagination.ts +1 -3
- package/dist/templates/frontend/application/libs/ui/pagination/src/lib/hlm-pagination-content.ts +2 -4
- package/dist/templates/frontend/application/libs/ui/pagination/src/lib/hlm-pagination-ellipsis.ts +12 -18
- package/dist/templates/frontend/application/libs/ui/pagination/src/lib/hlm-pagination-item.ts +2 -9
- package/dist/templates/frontend/application/libs/ui/pagination/src/lib/hlm-pagination-link.ts +2 -1
- package/dist/templates/frontend/application/libs/ui/pagination/src/lib/hlm-pagination-next.ts +10 -9
- package/dist/templates/frontend/application/libs/ui/pagination/src/lib/hlm-pagination-previous.ts +11 -9
- package/dist/templates/frontend/application/libs/ui/popover/src/index.ts +9 -0
- package/dist/templates/frontend/application/libs/ui/popover/src/lib/hlm-popover-content.ts +2 -1
- package/dist/templates/frontend/application/libs/ui/popover/src/lib/hlm-popover-description.ts +12 -0
- package/dist/templates/frontend/application/libs/ui/popover/src/lib/hlm-popover-header.ts +12 -0
- package/dist/templates/frontend/application/libs/ui/popover/src/lib/hlm-popover-title.ts +12 -0
- package/dist/templates/frontend/application/libs/ui/popover/src/lib/hlm-popover-trigger.ts +1 -3
- package/dist/templates/frontend/application/libs/ui/popover/src/lib/hlm-popover.ts +2 -3
- package/dist/templates/frontend/application/libs/ui/progress/src/lib/hlm-progress-indicator.ts +10 -4
- package/dist/templates/frontend/application/libs/ui/progress/src/lib/hlm-progress.ts +2 -1
- package/dist/templates/frontend/application/libs/ui/radio-group/src/lib/hlm-radio.ts +3 -4
- package/dist/templates/frontend/application/libs/ui/resizable/src/lib/hlm-resizable-handle.ts +1 -1
- package/dist/templates/frontend/application/libs/ui/scroll-area/src/lib/hlm-scroll-area.ts +6 -4
- package/dist/templates/frontend/application/libs/ui/select/src/lib/hlm-select-content.ts +1 -1
- package/dist/templates/frontend/application/libs/ui/select/src/lib/hlm-select-group.ts +1 -3
- package/dist/templates/frontend/application/libs/ui/select/src/lib/hlm-select-item.ts +3 -5
- package/dist/templates/frontend/application/libs/ui/select/src/lib/hlm-select-label.ts +2 -4
- package/dist/templates/frontend/application/libs/ui/select/src/lib/hlm-select-multiple.ts +8 -18
- package/dist/templates/frontend/application/libs/ui/select/src/lib/hlm-select-placeholder.ts +1 -1
- package/dist/templates/frontend/application/libs/ui/select/src/lib/hlm-select-scroll-down.ts +1 -1
- package/dist/templates/frontend/application/libs/ui/select/src/lib/hlm-select-scroll-up.ts +1 -1
- package/dist/templates/frontend/application/libs/ui/select/src/lib/hlm-select-separator.ts +2 -4
- package/dist/templates/frontend/application/libs/ui/select/src/lib/hlm-select-trigger.ts +16 -4
- package/dist/templates/frontend/application/libs/ui/select/src/lib/hlm-select-values-content.ts +4 -1
- package/dist/templates/frontend/application/libs/ui/select/src/lib/hlm-select.ts +8 -18
- package/dist/templates/frontend/application/libs/ui/separator/src/lib/hlm-separator.ts +4 -1
- package/dist/templates/frontend/application/libs/ui/sheet/src/lib/hlm-sheet-close.ts +2 -4
- package/dist/templates/frontend/application/libs/ui/sheet/src/lib/hlm-sheet-content.ts +14 -30
- package/dist/templates/frontend/application/libs/ui/sheet/src/lib/hlm-sheet-description.ts +1 -3
- package/dist/templates/frontend/application/libs/ui/sheet/src/lib/hlm-sheet-footer.ts +2 -4
- package/dist/templates/frontend/application/libs/ui/sheet/src/lib/hlm-sheet-header.ts +2 -4
- package/dist/templates/frontend/application/libs/ui/sheet/src/lib/hlm-sheet-overlay.ts +1 -4
- package/dist/templates/frontend/application/libs/ui/sheet/src/lib/hlm-sheet-title.ts +2 -4
- package/dist/templates/frontend/application/libs/ui/sheet/src/lib/hlm-sheet-trigger.ts +1 -3
- package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-content.ts +1 -1
- package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-footer.ts +1 -1
- package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-group-action.ts +4 -6
- package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-group-content.ts +1 -1
- package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-group-label.ts +4 -4
- package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-group.ts +1 -1
- package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-header.ts +1 -1
- package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-input.ts +4 -7
- package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-inset.ts +5 -7
- package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-menu-action.ts +2 -8
- package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-menu-badge.ts +4 -8
- package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-menu-button.ts +3 -3
- package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-menu-skeleton.ts +3 -3
- package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-menu-sub-button.ts +8 -6
- package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-menu-sub.ts +8 -4
- package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-menu.ts +1 -1
- package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-rail.ts +2 -2
- package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-separator.ts +1 -1
- package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-trigger.ts +8 -19
- package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-wrapper.ts +1 -1
- package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar.service.ts +28 -11
- package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar.token.ts +2 -0
- package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar.ts +11 -15
- package/dist/templates/frontend/application/libs/ui/slider/src/lib/hlm-slider.ts +3 -3
- package/dist/templates/frontend/application/libs/ui/sonner/src/lib/hlm-toaster.ts +12 -1
- package/dist/templates/frontend/application/libs/ui/spinner/src/lib/hlm-spinner.ts +2 -1
- package/dist/templates/frontend/application/libs/ui/switch/src/lib/hlm-switch-thumb.ts +2 -1
- package/dist/templates/frontend/application/libs/ui/switch/src/lib/hlm-switch.ts +15 -9
- package/dist/templates/frontend/application/libs/ui/tabs/src/lib/hlm-tabs-list.ts +1 -1
- package/dist/templates/frontend/application/libs/ui/tabs/src/lib/hlm-tabs-paginated-list.ts +8 -20
- package/dist/templates/frontend/application/libs/ui/tabs/src/lib/hlm-tabs-trigger.ts +1 -1
- package/dist/templates/frontend/application/libs/ui/textarea/src/lib/hlm-textarea.ts +10 -28
- package/dist/templates/frontend/application/libs/ui/toggle/src/lib/hlm-toggle.ts +1 -1
- package/dist/templates/frontend/application/libs/ui/tooltip/src/lib/hlm-tooltip.ts +3 -2
- package/dist/templates/frontend/application/libs/ui/utils/src/index.ts +1 -0
- package/dist/templates/frontend/application/libs/ui/utils/src/lib/provide-spartan-hlm.ts +34 -0
- package/dist/templates/frontend/application/package.json +38 -29
- package/dist/templates/frontend/application/public/i18n/en.json +18 -2
- package/dist/templates/frontend/application/public/i18n/es.json +18 -2
- package/dist/templates/frontend/application/public/i18n/navigation/en.json +22 -29
- package/dist/templates/frontend/application/public/i18n/navigation/es.json +22 -29
- package/dist/templates/frontend/application/src/@aurora/components/async-multiple-search-select/async-multiple-search-select.component.spec.ts +11 -10
- package/dist/templates/frontend/application/src/@aurora/components/async-multiple-search-select/async-multiple-search-select.component.ts +12 -15
- package/dist/templates/frontend/application/src/@aurora/components/async-multiple-search-select/async-multiple-search-select.stories.ts +0 -2
- package/dist/templates/frontend/application/src/@aurora/components/async-search-select/async-search-select.component.spec.ts +19 -11
- package/dist/templates/frontend/application/src/@aurora/components/async-search-select/async-search-select.component.ts +12 -15
- package/dist/templates/frontend/application/src/@aurora/components/async-search-select/async-search-select.stories.ts +0 -22
- package/dist/templates/frontend/application/src/@aurora/components/breadcrumb/breadcrumb.service.ts +2 -2
- package/dist/templates/frontend/application/src/@aurora/components/chart/chart.component.spec.ts +663 -0
- package/dist/templates/frontend/application/src/@aurora/components/chart/chart.component.ts +334 -0
- package/dist/templates/frontend/application/src/@aurora/components/chart/chart.stories.ts +103 -0
- package/dist/templates/frontend/application/src/@aurora/components/chart/index.ts +1 -0
- package/dist/templates/frontend/application/src/@aurora/components/color-picker/color-picker.component.spec.ts +671 -0
- package/dist/templates/frontend/application/src/@aurora/components/color-picker/color-picker.component.ts +802 -0
- package/dist/templates/frontend/application/src/@aurora/components/color-picker/color-picker.stories.ts +180 -0
- package/dist/templates/frontend/application/src/@aurora/components/color-picker/color-utils.spec.ts +270 -0
- package/dist/templates/frontend/application/src/@aurora/components/color-picker/color-utils.ts +177 -0
- package/dist/templates/frontend/application/src/@aurora/components/color-picker/index.ts +2 -0
- package/dist/templates/frontend/application/src/@aurora/components/custom-field-capture-form/custom-field-capture-form.component.spec.ts +344 -0
- package/dist/templates/frontend/application/src/@aurora/components/custom-field-capture-form/custom-field-capture-form.component.ts +366 -0
- package/dist/templates/frontend/application/src/@aurora/components/custom-field-capture-form/index.ts +4 -0
- package/dist/templates/frontend/application/src/@aurora/components/custom-field-capture-form/lib/build-custom-field-capture-model.spec.ts +82 -0
- package/dist/templates/frontend/application/src/@aurora/components/custom-field-capture-form/lib/build-custom-field-capture-model.ts +49 -0
- package/dist/templates/frontend/application/src/@aurora/components/custom-field-capture-form/lib/custom-field-capture-form.types.ts +57 -0
- package/dist/templates/frontend/application/src/@aurora/components/custom-field-capture-form/lib/custom-field-capture-value-equality.spec.ts +28 -0
- package/dist/templates/frontend/application/src/@aurora/components/custom-field-capture-form/lib/custom-field-capture-value-equality.ts +24 -0
- package/dist/templates/frontend/application/src/@aurora/components/custom-field-capture-form/lib/validate-custom-field-capture-value.spec.ts +50 -0
- package/dist/templates/frontend/application/src/@aurora/components/custom-field-capture-form/lib/validate-custom-field-capture-value.ts +30 -0
- package/dist/templates/frontend/application/src/@aurora/components/data-table/cells/boolean-cell.component.ts +3 -6
- package/dist/templates/frontend/application/src/@aurora/components/data-table/cells/date-cell.component.ts +62 -0
- package/dist/templates/frontend/application/src/@aurora/components/data-table/cells/date-cell.stories.ts +117 -0
- package/dist/templates/frontend/application/src/@aurora/components/data-table/cells/enum-cell.component.ts +23 -0
- package/dist/templates/frontend/application/src/@aurora/components/data-table/cells/index.ts +2 -0
- package/dist/templates/frontend/application/src/@aurora/components/data-table/components/column-toggle.component.ts +7 -29
- package/dist/templates/frontend/application/src/@aurora/components/data-table/components/data-table.component.spec.ts +460 -0
- package/dist/templates/frontend/application/src/@aurora/components/data-table/components/data-table.component.ts +17 -3
- package/dist/templates/frontend/application/src/@aurora/components/data-table/components/head-selection.component.ts +2 -1
- package/dist/templates/frontend/application/src/@aurora/components/data-table/components/row-selection.component.ts +2 -1
- package/dist/templates/frontend/application/src/@aurora/components/data-table/components/sort-button.component.ts +44 -14
- package/dist/templates/frontend/application/src/@aurora/components/data-table/components/table-export.component.ts +5 -9
- package/dist/templates/frontend/application/src/@aurora/components/data-table/components/table-filters.component.ts +2 -11
- package/dist/templates/frontend/application/src/@aurora/components/data-table/components/table-pagination.component.ts +16 -26
- package/dist/templates/frontend/application/src/@aurora/components/data-table/components/table-search.component.ts +1 -11
- package/dist/templates/frontend/application/src/@aurora/components/data-table/index.ts +5 -1
- package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/build-filter-where.spec.ts +123 -8
- package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/build-filter-where.ts +55 -33
- package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/build-search-where.spec.ts +141 -17
- package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/build-search-where.ts +50 -21
- package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/build-sort-order.spec.ts +22 -11
- package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/build-sort-order.ts +25 -19
- package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/column-helpers.spec.ts +72 -0
- package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/column-helpers.ts +8 -1
- package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/custom-field-column.ts +141 -0
- package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/get-relations-node.spec.ts +157 -0
- package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/get-relations-node.ts +69 -0
- package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/merge-custom-field-columns.spec.ts +217 -0
- package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/merge-custom-field-columns.ts +146 -0
- package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/nested-column.ts +24 -23
- package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/relation-cell.spec.ts +33 -0
- package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/relation-cell.ts +13 -0
- package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/resolve-custom-field-filter.spec.ts +140 -0
- package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/resolve-custom-field-filter.ts +119 -0
- package/dist/templates/frontend/application/src/@aurora/components/data-table/services/in-memory-column-config-storage.ts +2 -2
- package/dist/templates/frontend/application/src/@aurora/components/data-table/types.ts +57 -8
- package/dist/templates/frontend/application/src/@aurora/components/date-picker/date-picker.component.spec.ts +189 -0
- package/dist/templates/frontend/application/src/@aurora/components/date-picker/date-picker.component.ts +137 -0
- package/dist/templates/frontend/application/src/@aurora/components/date-picker/index.ts +1 -0
- package/dist/templates/frontend/application/src/@aurora/components/datetime-picker/datetime-picker.component.spec.ts +296 -0
- package/dist/templates/frontend/application/src/@aurora/components/datetime-picker/datetime-picker.component.ts +223 -0
- package/dist/templates/frontend/application/src/@aurora/components/datetime-picker/datetime-picker.stories.ts +143 -0
- package/dist/templates/frontend/application/src/@aurora/components/datetime-picker/index.ts +1 -0
- package/dist/templates/frontend/application/src/@aurora/components/grid-pick-dialog/grid-pick-dialog.component.ts +22 -26
- package/dist/templates/frontend/application/src/@aurora/components/grid-select-element/grid-select-element.component.spec.ts +98 -10
- package/dist/templates/frontend/application/src/@aurora/components/grid-select-element/grid-select-element.component.ts +41 -10
- package/dist/templates/frontend/application/src/@aurora/components/grid-select-element/grid-select-element.stories.ts +6 -0
- package/dist/templates/frontend/application/src/@aurora/components/grid-select-multiple-elements/grid-select-multiple-elements.component.spec.ts +80 -0
- package/dist/templates/frontend/application/src/@aurora/components/grid-select-multiple-elements/grid-select-multiple-elements.component.ts +10 -26
- package/dist/templates/frontend/application/src/@aurora/components/grid-select-multiple-elements/grid-select-multiple-elements.stories.ts +2 -2
- package/dist/templates/frontend/application/src/@aurora/components/hlm-badge-icon-cell/hlm-badge-icon-cell.component.ts +4 -7
- package/dist/templates/frontend/application/src/@aurora/components/hlm-password-strength/hlm-password-strength.component.ts +1 -2
- package/dist/templates/frontend/application/src/@aurora/components/index.ts +11 -0
- package/dist/templates/frontend/application/src/@aurora/components/multiple-search-select/multiple-search-select.component.spec.ts +14 -15
- package/dist/templates/frontend/application/src/@aurora/components/multiple-search-select/multiple-search-select.component.ts +12 -15
- package/dist/templates/frontend/application/src/@aurora/components/multiple-search-select/multiple-search-select.stories.ts +0 -9
- package/dist/templates/frontend/application/src/@aurora/components/password-input/index.ts +1 -0
- package/dist/templates/frontend/application/src/@aurora/components/password-input/password-input.component.spec.ts +271 -0
- package/dist/templates/frontend/application/src/@aurora/components/password-input/password-input.component.ts +181 -0
- package/dist/templates/frontend/application/src/@aurora/components/password-input/password-input.stories.ts +189 -0
- package/dist/templates/frontend/application/src/@aurora/components/progress-uploader/index.ts +2 -0
- package/dist/templates/frontend/application/src/@aurora/components/progress-uploader/progress-uploader.component.ts +76 -0
- package/dist/templates/frontend/application/src/@aurora/components/progress-uploader/progress-uploader.service.ts +105 -0
- package/dist/templates/frontend/application/src/@aurora/components/search-select/search-select.component.spec.ts +14 -15
- package/dist/templates/frontend/application/src/@aurora/components/search-select/search-select.component.ts +17 -18
- package/dist/templates/frontend/application/src/@aurora/components/search-select/search-select.stories.ts +0 -14
- package/dist/templates/frontend/application/src/@aurora/components/status-badge/index.ts +3 -0
- package/dist/templates/frontend/application/src/@aurora/components/status-badge/status-badge-cell.component.ts +37 -0
- package/dist/templates/frontend/application/src/@aurora/components/status-badge/status-badge-cell.stories.ts +74 -0
- package/dist/templates/frontend/application/src/@aurora/components/status-badge/status-badge.component.ts +63 -0
- package/dist/templates/frontend/application/src/@aurora/components/status-badge/status-badge.spec.ts +93 -0
- package/dist/templates/frontend/application/src/@aurora/components/status-badge/status-badge.stories.ts +107 -0
- package/dist/templates/frontend/application/src/@aurora/components/status-badge/status-badge.types.ts +43 -0
- package/dist/templates/frontend/application/src/@aurora/composables/atoms/data-table/use-table-data.ts +3 -2
- package/dist/templates/frontend/application/src/@aurora/composables/atoms/graphql/use-graphql-find-by-id.ts +12 -2
- package/dist/templates/frontend/application/src/@aurora/composables/atoms/graphql/use-graphql-find.ts +14 -2
- package/dist/templates/frontend/application/src/@aurora/composables/atoms/graphql/use-graphql-get.ts +11 -2
- package/dist/templates/frontend/application/src/@aurora/composables/atoms/graphql/use-graphql-paginate.ts +9 -2
- package/dist/templates/frontend/application/src/@aurora/composables/presets/use-aggregate-shell.spec.ts +191 -0
- package/dist/templates/frontend/application/src/@aurora/composables/presets/use-aggregate-shell.ts +24 -4
- package/dist/templates/frontend/application/src/@aurora/composables/presets/use-graphql-detail.ts +23 -14
- package/dist/templates/frontend/application/src/@aurora/composables/presets/use-graphql-list.ts +14 -10
- package/dist/templates/frontend/application/src/@aurora/composables/presets/use-paginated-data-table.spec.ts +251 -0
- package/dist/templates/frontend/application/src/@aurora/composables/presets/use-paginated-data-table.ts +64 -19
- package/dist/templates/frontend/application/src/@aurora/composables/presets/use-pivot-membership.spec.ts +142 -0
- package/dist/templates/frontend/application/src/@aurora/composables/presets/use-pivot-membership.ts +7 -9
- package/dist/templates/frontend/application/src/@aurora/directives/index.ts +1 -0
- package/dist/templates/frontend/application/src/@aurora/directives/scroll-fade.directive.ts +150 -0
- package/dist/templates/frontend/application/src/@aurora/index.ts +1 -0
- package/dist/templates/frontend/application/src/@aurora/lib/calendar-i18n.spec.ts +138 -0
- package/dist/templates/frontend/application/src/@aurora/lib/calendar-i18n.ts +93 -0
- package/dist/templates/frontend/application/src/@aurora/lib/expand-display-field-template.ts +30 -0
- package/dist/templates/frontend/application/src/@aurora/lib/format-iso-date.spec.ts +50 -0
- package/dist/templates/frontend/application/src/@aurora/lib/format-iso-date.ts +43 -0
- package/dist/templates/frontend/application/src/@aurora/lib/format-iso-datetime.spec.ts +42 -0
- package/dist/templates/frontend/application/src/@aurora/lib/format-iso-datetime.ts +34 -0
- package/dist/templates/frontend/application/src/@aurora/lib/format-local-date.spec.ts +28 -0
- package/dist/templates/frontend/application/src/@aurora/lib/format-local-date.ts +23 -0
- package/dist/templates/frontend/application/src/@aurora/lib/format-utc-date.spec.ts +47 -0
- package/dist/templates/frontend/application/src/@aurora/lib/format-utc-date.ts +25 -0
- package/dist/templates/frontend/application/src/@aurora/lib/index.ts +12 -0
- package/dist/templates/frontend/application/src/@aurora/lib/item-label-of.spec.ts +45 -0
- package/dist/templates/frontend/application/src/@aurora/lib/item-label-of.ts +17 -7
- package/dist/templates/frontend/application/src/@aurora/lib/local-time.spec.ts +54 -0
- package/dist/templates/frontend/application/src/@aurora/lib/local-time.ts +40 -0
- package/dist/templates/frontend/application/src/@aurora/lib/resolve-enum-label.spec.ts +130 -0
- package/dist/templates/frontend/application/src/@aurora/lib/resolve-enum-label.ts +61 -0
- package/dist/templates/frontend/application/src/@aurora/lib/resolve-i18n-value.spec.ts +101 -0
- package/dist/templates/frontend/application/src/@aurora/lib/resolve-i18n-value.ts +30 -0
- package/dist/templates/frontend/application/src/@aurora/lib/resolve-storage-file-url.spec.ts +39 -0
- package/dist/templates/frontend/application/src/@aurora/lib/resolve-storage-file-url.ts +38 -0
- package/dist/templates/frontend/application/src/@aurora/lib/scroll-fade.spec.ts +94 -0
- package/dist/templates/frontend/application/src/@aurora/lib/scroll-fade.ts +51 -0
- package/dist/templates/frontend/application/src/@aurora/lib/use-async-search-list.spec.ts +133 -0
- package/dist/templates/frontend/application/src/@aurora/lib/use-async-search-list.ts +1 -6
- package/dist/templates/frontend/application/src/@aurora/lib/utc-date-prefix.ts +24 -0
- package/dist/templates/frontend/application/src/@aurora/modules/authentication/README.md +59 -2
- package/dist/templates/frontend/application/src/@aurora/modules/authentication/data-access/authentication.graphql.ts +15 -15
- package/dist/templates/frontend/application/src/@aurora/modules/authentication/guards/permission.guard.spec.ts +195 -0
- package/dist/templates/frontend/application/src/@aurora/modules/authentication/guards/permission.guard.ts +65 -0
- package/dist/templates/frontend/application/src/@aurora/modules/authentication/index.ts +7 -2
- package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/adapters/anonymous-current-account.adapter.spec.ts +92 -0
- package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/adapters/anonymous-current-account.adapter.ts +36 -2
- package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/adapters/authentication-aurora-adapter.service.spec.ts +494 -0
- package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/adapters/authentication-aurora-adapter.service.ts +99 -50
- package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/adapters/authentication-disabled.service.ts +8 -4
- package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/authenticated-initializer.ts +8 -7
- package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/authentication.provider.ts +2 -0
- package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/authentication.service.ts +27 -1
- package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/authentication.spec.ts +113 -0
- package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/authentication.ts +56 -3
- package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/authentication.types.ts +6 -2
- package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/current-account.service.ts +68 -0
- package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/landing-resolver-permission-bounce.spec.ts +80 -0
- package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/landing-resolver.service.spec.ts +440 -0
- package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/landing-resolver.service.ts +156 -0
- package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/resolve-landing-route.spec.ts +75 -0
- package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/resolve-landing-route.ts +27 -0
- package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/safe-redirect-path.spec.ts +41 -0
- package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/safe-redirect-path.ts +21 -0
- package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/session-recovery-coordinator.service.spec.ts +759 -0
- package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/session-recovery-coordinator.service.ts +310 -0
- package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/token-store.service.spec.ts +293 -0
- package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/token-store.service.ts +116 -1
- package/dist/templates/frontend/application/src/@aurora/modules/dashboard/components/dashboard-grid/dashboard-grid.component.css +150 -0
- package/dist/templates/frontend/application/src/@aurora/modules/dashboard/components/dashboard-grid/dashboard-grid.component.spec.ts +288 -0
- package/dist/templates/frontend/application/src/@aurora/modules/dashboard/components/dashboard-grid/dashboard-grid.component.ts +776 -0
- package/dist/templates/frontend/application/src/@aurora/modules/dashboard/components/dashboard-grid/dashboard-grid.gridstack.css +15 -0
- package/dist/templates/frontend/application/src/@aurora/modules/dashboard/components/dashboard-grid/dashboard-grid.helpers.ts +174 -0
- package/dist/templates/frontend/application/src/@aurora/modules/dashboard/components/dashboard-grid/index.ts +2 -0
- package/dist/templates/frontend/application/src/@aurora/modules/dashboard/components/dashboard-tile/dashboard-tile.component.spec.ts +261 -0
- package/dist/templates/frontend/application/src/@aurora/modules/dashboard/components/dashboard-tile/dashboard-tile.component.ts +306 -0
- package/dist/templates/frontend/application/src/@aurora/modules/dashboard/components/dashboard-tile/index.ts +1 -0
- package/dist/templates/frontend/application/src/@aurora/modules/dashboard/components/index.ts +2 -0
- package/dist/templates/frontend/application/src/@aurora/modules/dashboard/index.ts +1 -0
- package/dist/templates/frontend/application/src/@aurora/modules/graphql/apollo.factory.spec.ts +1001 -530
- package/dist/templates/frontend/application/src/@aurora/modules/graphql/apollo.factory.ts +108 -34
- package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/mutate-create.ts +17 -8
- package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/mutate-delete-by-id.ts +14 -8
- package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/mutate-delete-by-keys.ts +15 -7
- package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/mutate-delete.ts +18 -9
- package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/mutate-insert.ts +14 -8
- package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/mutate-update.ts +14 -8
- package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/query-find-by-id.spec.ts +6 -4
- package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/query-find-by-id.ts +12 -11
- package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/query-find.spec.ts +7 -5
- package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/query-find.ts +16 -13
- package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/query-get.spec.ts +6 -4
- package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/query-get.ts +13 -14
- package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/query-paginate.spec.ts +8 -5
- package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/query-paginate.ts +11 -9
- package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/types.ts +5 -3
- package/dist/templates/frontend/application/src/@aurora/modules/graphql/graphql.spec.ts +170 -0
- package/dist/templates/frontend/application/src/@aurora/modules/graphql/graphql.ts +36 -6
- package/dist/templates/frontend/application/src/@aurora/modules/graphql/graphql.types.ts +24 -12
- package/dist/templates/frontend/application/src/@aurora/modules/graphql/handlers/aurora-graphql-auth.handler.spec.ts +30 -108
- package/dist/templates/frontend/application/src/@aurora/modules/graphql/handlers/aurora-graphql-auth.handler.ts +9 -76
- package/dist/templates/frontend/application/src/@aurora/modules/graphql/handlers/aurora-graphql-error.handler.spec.ts +12 -3
- package/dist/templates/frontend/application/src/@aurora/modules/graphql/index.ts +5 -0
- package/dist/templates/frontend/application/src/@aurora/modules/health/health.service.spec.ts +138 -0
- package/dist/templates/frontend/application/src/@aurora/modules/health/health.service.ts +60 -0
- package/dist/templates/frontend/application/src/@aurora/modules/health/index.ts +1 -0
- package/dist/templates/frontend/application/src/@aurora/modules/index.ts +5 -0
- package/dist/templates/frontend/application/src/@aurora/modules/lang/index.ts +1 -0
- package/dist/templates/frontend/application/src/@aurora/modules/lang/lang-flag-icons.ts +34 -0
- package/dist/templates/frontend/application/src/@aurora/modules/lang/lang.service.spec.ts +129 -0
- package/dist/templates/frontend/application/src/@aurora/modules/lang/lang.service.ts +37 -3
- package/dist/templates/frontend/application/src/@aurora/modules/report-viewer/build-report-columns.spec.ts +367 -0
- package/dist/templates/frontend/application/src/@aurora/modules/report-viewer/build-report-columns.ts +186 -0
- package/dist/templates/frontend/application/src/@aurora/modules/report-viewer/index.ts +24 -0
- package/dist/templates/frontend/application/src/@aurora/modules/report-viewer/report-cell-renderer.registry.ts +52 -0
- package/dist/templates/frontend/application/src/@aurora/modules/report-viewer/report-fetch-adapter.spec.ts +148 -0
- package/dist/templates/frontend/application/src/@aurora/modules/report-viewer/report-fetch-adapter.ts +68 -0
- package/dist/templates/frontend/application/src/@aurora/modules/report-viewer/report-filter-form.component.ts +154 -0
- package/dist/templates/frontend/application/src/@aurora/modules/report-viewer/report-filter-form.spec.ts +181 -0
- package/dist/templates/frontend/application/src/@aurora/modules/report-viewer/report-viewer.types.ts +230 -0
- package/dist/templates/frontend/application/src/@aurora/modules/session/session.service.ts +2 -2
- package/dist/templates/frontend/application/src/@aurora/modules/theme/index.ts +2 -0
- package/dist/templates/frontend/application/src/@aurora/modules/theme/theme-palette.service.spec.ts +240 -0
- package/dist/templates/frontend/application/src/@aurora/modules/theme/theme-palette.service.ts +128 -0
- package/dist/templates/frontend/application/src/@aurora/modules/theme/theme-palette.type.ts +4 -0
- package/dist/templates/frontend/application/src/@aurora/modules/widget/archetypes/chart-widget-component-i18n.spec.ts +217 -0
- package/dist/templates/frontend/application/src/@aurora/modules/widget/archetypes/chart-widget-i18n.spec.ts +221 -0
- package/dist/templates/frontend/application/src/@aurora/modules/widget/archetypes/chart-widget.component.ts +318 -0
- package/dist/templates/frontend/application/src/@aurora/modules/widget/archetypes/chart-widget.spec.ts +274 -0
- package/dist/templates/frontend/application/src/@aurora/modules/widget/archetypes/chart-widget.ts +89 -0
- package/dist/templates/frontend/application/src/@aurora/modules/widget/archetypes/stat-widget.component.ts +200 -0
- package/dist/templates/frontend/application/src/@aurora/modules/widget/archetypes/stat-widget.spec.ts +373 -0
- package/dist/templates/frontend/application/src/@aurora/modules/widget/archetypes/stat-widget.ts +80 -0
- package/dist/templates/frontend/application/src/@aurora/modules/widget/archetypes/table-widget-i18n.spec.ts +176 -0
- package/dist/templates/frontend/application/src/@aurora/modules/widget/archetypes/table-widget.component.ts +230 -0
- package/dist/templates/frontend/application/src/@aurora/modules/widget/archetypes/table-widget.spec.ts +332 -0
- package/dist/templates/frontend/application/src/@aurora/modules/widget/archetypes/table-widget.ts +67 -0
- package/dist/templates/frontend/application/src/@aurora/modules/widget/aurora-widget-def.ts +101 -0
- package/dist/templates/frontend/application/src/@aurora/modules/widget/index.ts +17 -0
- package/dist/templates/frontend/application/src/@aurora/modules/widget/refreshable-widget.spec.ts +75 -0
- package/dist/templates/frontend/application/src/@aurora/modules/widget/refreshable-widget.ts +32 -0
- package/dist/templates/frontend/application/src/@aurora/modules/widget/widget-category.ts +16 -0
- package/dist/templates/frontend/application/src/@aurora/modules/widget/widget-data-source-runner.spec.ts +298 -0
- package/dist/templates/frontend/application/src/@aurora/modules/widget/widget-data-source-runner.ts +103 -0
- package/dist/templates/frontend/application/src/@aurora/modules/widget/widget-data-source.ts +68 -0
- package/dist/templates/frontend/application/src/@aurora/modules/widget/widget-permission-filter.spec.ts +195 -0
- package/dist/templates/frontend/application/src/@aurora/modules/widget/widget-permission-filter.ts +84 -0
- package/dist/templates/frontend/application/src/@aurora/modules/widget/widget-registry.spec.ts +91 -0
- package/dist/templates/frontend/application/src/@aurora/modules/widget/widget-registry.ts +38 -0
- package/dist/templates/frontend/application/src/@aurora/modules/widget/widget-scope-deriver.spec.ts +85 -0
- package/dist/templates/frontend/application/src/@aurora/modules/widget/widget-scope-deriver.ts +41 -0
- package/dist/templates/frontend/application/src/@aurora/pipes/index.ts +1 -0
- package/dist/templates/frontend/application/src/@aurora/pipes/to-options.pipe.ts +2 -5
- package/dist/templates/frontend/application/src/@aurora/pipes/validation-message-legacy.pipe.spec.ts +81 -0
- package/dist/templates/frontend/application/src/@aurora/pipes/validation-message-legacy.pipe.ts +50 -0
- package/dist/templates/frontend/application/src/@aurora/pipes/validation-message.pipe.spec.ts +197 -0
- package/dist/templates/frontend/application/src/@aurora/pipes/validation-message.pipe.ts +97 -21
- package/dist/templates/frontend/application/src/@aurora/query-dsl/index.ts +32 -0
- package/dist/templates/frontend/application/src/@aurora/query-dsl/query-statement.spec.ts +94 -0
- package/dist/templates/frontend/application/src/@aurora/query-dsl/query-statement.type-contract.ts +38 -0
- package/dist/templates/frontend/application/src/app/app.config.ts +18 -6
- package/dist/templates/frontend/application/src/app/app.routes.ts +1 -1
- package/dist/templates/frontend/application/src/app/app.ts +1 -2
- package/dist/templates/frontend/application/src/app/aurora-widget.providers.ts +21 -0
- package/dist/templates/frontend/application/src/app/aurora.provider.spec.ts +1 -2
- package/dist/templates/frontend/application/src/app/aurora.provider.ts +12 -5
- package/dist/templates/frontend/application/src/app/domains/admin/home/home.component.ts +15 -0
- package/dist/templates/frontend/application/src/app/domains/admin/layout/layout.component.ts +2 -3
- package/dist/templates/frontend/application/src/app/domains/admin/layout/sidebar/app-sidebar.spec.ts +111 -0
- package/dist/templates/frontend/application/src/app/domains/admin/layout/sidebar/app-sidebar.ts +74 -21
- package/dist/templates/frontend/application/src/app/domains/admin/layout/sidebar/nav-active.spec.ts +124 -0
- package/dist/templates/frontend/application/src/app/domains/admin/layout/sidebar/nav-active.ts +48 -0
- package/dist/templates/frontend/application/src/app/domains/admin/layout/sidebar/nav-filter.spec.ts +203 -0
- package/dist/templates/frontend/application/src/app/domains/admin/layout/sidebar/nav-filter.ts +122 -0
- package/dist/templates/frontend/application/src/app/domains/admin/layout/sidebar/nav-main.ts +19 -28
- package/dist/templates/frontend/application/src/app/domains/admin/layout/sidebar/nav-secondary.ts +1 -2
- package/dist/templates/frontend/application/src/app/domains/admin/layout/sidebar/nav-sub-items.ts +10 -23
- package/dist/templates/frontend/application/src/app/domains/admin/layout/sidebar/nav-user.ts +1 -2
- package/dist/templates/frontend/application/src/app/domains/admin/layout/sidebar/types.ts +4 -0
- package/dist/templates/frontend/application/src/app/domains/admin/layout/site-header.spec.ts +153 -0
- package/dist/templates/frontend/application/src/app/domains/admin/layout/site-header.ts +109 -31
- package/dist/templates/frontend/application/src/app/domains/admin/navigation-data.ts +4 -20
- package/dist/templates/frontend/application/src/app/domains/admin/routes.ts +4 -3
- package/dist/templates/frontend/application/src/app/domains/auth/callback-error/callback-error.component.ts +1 -2
- package/dist/templates/frontend/application/src/app/domains/auth/layout.ts +1 -2
- package/dist/templates/frontend/application/src/app/domains/auth/sign-in/login-form.spec.ts +32 -31
- package/dist/templates/frontend/application/src/app/domains/auth/sign-in/login-form.ts +23 -33
- package/dist/templates/frontend/application/src/app/domains/auth/sign-in/oauth-session.service.ts +2 -4
- package/dist/templates/frontend/application/src/app/domains/auth/sign-in/sign-in.component.ts +1 -2
- package/dist/templates/frontend/application/src/app/domains/auth/sign-out/sign-out.component.spec.ts +13 -11
- package/dist/templates/frontend/application/src/app/domains/auth/sign-out/sign-out.component.ts +6 -9
- package/dist/templates/frontend/application/src/app/domains/auth/sign-up/sign-up.component.ts +1 -2
- package/dist/templates/frontend/application/src/app/domains/auth/sign-up/signup-form.spec.ts +60 -0
- package/dist/templates/frontend/application/src/app/domains/auth/sign-up/signup-form.ts +25 -16
- package/dist/templates/frontend/application/src/app/domains/auth/signed-out/signed-out.component.ts +1 -2
- package/dist/templates/frontend/application/src/app/transloco-lang.factory.spec.ts +40 -0
- package/dist/templates/frontend/application/src/app/transloco-lang.factory.ts +28 -0
- package/dist/templates/frontend/application/src/app/transloco-loader.ts +2 -2
- package/dist/templates/frontend/application/src/environments/environment.dev.ts +46 -3
- package/dist/templates/frontend/application/src/environments/environment.local.ts +47 -4
- package/dist/templates/frontend/application/src/environments/environment.prod.ts +46 -3
- package/dist/templates/frontend/application/src/environments/environment.qa.ts +46 -3
- package/dist/templates/frontend/application/src/environments/environment.ts +46 -3
- package/dist/templates/frontend/application/src/environments/environment.type.ts +61 -0
- package/dist/templates/frontend/application/src/index.html +21 -1
- package/dist/templates/frontend/application/src/styles.css +772 -8
- package/dist/templates/frontend/application/tsconfig.app.json +3 -9
- package/dist/templates/frontend/application/tsconfig.json +17 -1
- package/dist/templates/frontend/packages/dashboard/public/i18n/dashboard/en.json +41 -0
- package/dist/templates/frontend/packages/dashboard/public/i18n/dashboard/es.json +41 -0
- package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/dashboard.routes.ts +8 -0
- package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/features/dashboard-i18n.spec.ts +342 -0
- package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/features/dashboard.component.spec.ts +349 -0
- package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/features/dashboard.component.ts +622 -0
- package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/features/dashboard.helpers.spec.ts +152 -0
- package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/features/dashboard.helpers.ts +79 -0
- package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/features/dashboard.orchestration.ts +159 -0
- package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/features/index.ts +1 -0
- package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/features/widget-catalog-dialog.component.ts +295 -0
- package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/features/widget-catalog.helpers.spec.ts +202 -0
- package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/features/widget-catalog.helpers.ts +58 -0
- package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/layout/data-access/index.ts +3 -0
- package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/layout/data-access/layout.graphql.spec.ts +142 -0
- package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/layout/data-access/layout.graphql.ts +48 -0
- package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/layout/data-access/layout.service.ts +71 -0
- package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/layout/data-access/layout.types.ts +44 -0
- package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/layout/index.ts +1 -0
- package/dist/templates/frontend/packages/hub/public/i18n/hub/en.json +50 -0
- package/dist/templates/frontend/packages/hub/public/i18n/hub/es.json +50 -0
- package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app/app.columns.ts +113 -0
- package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app/app.cross-context.spec.ts +56 -0
- package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app/data-access/app.detail-config.ts +12 -0
- package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app/data-access/app.graphql.ts +157 -0
- package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app/data-access/app.list-config.ts +13 -0
- package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app/data-access/app.resolvers.ts +39 -0
- package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app/data-access/index.ts +8 -0
- package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app/features/app-form.component.ts +326 -0
- package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app/features/app-list-actions-cell.component.ts +75 -0
- package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app/features/app-list.component.ts +429 -0
- package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app/features/index.ts +7 -0
- package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app/index.ts +7 -0
- package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app-account/data-access/app-account.detail-config.ts +13 -0
- package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app-account/data-access/app-account.graphql.ts +156 -0
- package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app-account/data-access/app-account.list-config.ts +14 -0
- package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/hub-icons.providers.ts +11 -0
- package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/hub.navigation.ts +39 -0
- package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/hub.routes.ts +35 -0
- package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/hub.types.ts +5 -0
- package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/index.ts +6 -0
- package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/launchpad/data-access/launchpad.graphql.ts +48 -0
- package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/launchpad/features/hub-app-card.component.spec.ts +259 -0
- package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/launchpad/features/hub-app-card.component.ts +228 -0
- package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/launchpad/features/hub-app-card.helpers.ts +21 -0
- package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/launchpad/features/hub-launchpad-keyboard.helpers.ts +148 -0
- package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/launchpad/features/hub-launchpad.component.spec.ts +493 -0
- package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/launchpad/features/hub-launchpad.component.ts +612 -0
- package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/launchpad/features/hub-launchpad.helpers.spec.ts +328 -0
- package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/launchpad/features/hub-launchpad.helpers.ts +167 -0
- package/dist/templates/frontend/packages/iam/public/i18n/iam/en.json +6 -1
- package/dist/templates/frontend/packages/iam/public/i18n/iam/es.json +6 -1
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/adapters/current-account.adapter.spec.ts +459 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/adapters/current-account.adapter.ts +140 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/adapters/index.ts +1 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/data-access/account.derive.spec.ts +63 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/data-access/account.derive.ts +32 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/data-access/account.detail-config.ts +12 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/data-access/account.graphql.ts +288 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/data-access/account.list-config.ts +13 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/data-access/account.resolvers.spec.ts +72 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/data-access/account.resolvers.ts +123 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/data-access/index.ts +12 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/features/account-detail.component.spec.ts +78 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/features/account-detail.component.ts +170 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/features/account-form.component.spec.ts +914 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/features/account-form.component.ts +896 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/features/account-list-actions-cell.component.ts +113 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/features/account-list.component.ts +261 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/features/index.ts +6 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/index.ts +11 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/bounded-context/data-access/bounded-context.detail-config.ts +12 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/bounded-context/data-access/bounded-context.graphql.ts +171 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/bounded-context/data-access/bounded-context.list-config.ts +13 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/bounded-context/data-access/bounded-context.resolvers.ts +39 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/bounded-context/data-access/index.ts +8 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/bounded-context/features/bounded-context-detail.component.ts +160 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/bounded-context/features/bounded-context-form.component.ts +150 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/bounded-context/features/bounded-context-list-actions-cell.component.ts +75 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/bounded-context/features/bounded-context-list.component.ts +242 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/bounded-context/features/index.ts +8 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/bounded-context/index.ts +7 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/iam-icons.providers.ts +23 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/iam.navigation.ts +59 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/iam.routes.ts +92 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission/data-access/index.ts +8 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission/data-access/permission.detail-config.ts +12 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission/data-access/permission.graphql.ts +181 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission/data-access/permission.list-config.ts +13 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission/data-access/permission.resolvers.ts +72 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission/features/index.ts +8 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission/features/permission-form-embed.component.ts +97 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission/features/permission-form.component.ts +130 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission/features/permission-list-actions-cell.component.ts +75 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission/features/permission-list.component.ts +398 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission/index.ts +7 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission/permission.columns.ts +73 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission-role/data-access/permission-role.detail-config.ts +12 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission-role/data-access/permission-role.graphql.ts +200 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission-role/data-access/permission-role.list-config.ts +13 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role/data-access/index.ts +8 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role/data-access/role.detail-config.ts +12 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role/data-access/role.graphql.ts +195 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role/data-access/role.list-config.ts +13 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role/data-access/role.resolvers.ts +39 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role/features/index.ts +8 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role/features/role-detail.component.ts +295 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role/features/role-form.component.ts +185 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role/features/role-list-actions-cell.component.ts +75 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role/features/role-list.component.ts +236 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role/index.ts +7 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role/role.columns.ts +119 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role-account/data-access/role-account.detail-config.ts +12 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role-account/data-access/role-account.graphql.ts +199 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role-account/data-access/role-account.list-config.ts +13 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/shared/validators/unique-email.validator.ts +31 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/shared/validators/unique-username.validator.ts +29 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tag/data-access/index.ts +8 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tag/data-access/tag.detail-config.ts +12 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tag/data-access/tag.graphql.ts +113 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tag/data-access/tag.list-config.ts +13 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tag/data-access/tag.resolvers.ts +39 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tag/features/index.ts +7 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tag/features/tag-form.component.ts +88 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tag/features/tag-list-actions-cell.component.ts +75 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tag/features/tag-list.component.ts +318 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tag/index.ts +7 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant/data-access/index.ts +8 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant/data-access/tenant.detail-config.ts +12 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant/data-access/tenant.graphql.ts +224 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant/data-access/tenant.list-config.ts +13 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant/data-access/tenant.resolvers.ts +65 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant/features/index.ts +7 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant/features/tenant-form.component.ts +168 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant/features/tenant-list-actions-cell.component.ts +75 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant/features/tenant-list.component.ts +330 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant/index.ts +7 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant/tenant.columns.ts +103 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant-account/data-access/tenant-account.detail-config.ts +12 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant-account/data-access/tenant-account.graphql.ts +204 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant-account/data-access/tenant-account.list-config.ts +13 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/user/data-access/index.ts +8 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/user/data-access/user.detail-config.ts +11 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/user/data-access/user.graphql.ts +180 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/user/data-access/user.list-config.ts +13 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/user/data-access/user.resolvers.ts +39 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/user/features/index.ts +5 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/user/index.ts +6 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/widgets/iam.widgets.spec.ts +262 -0
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/widgets/iam.widgets.ts +156 -0
- package/dist/templates/frontend/packages/o-auth/public/i18n/o-auth/en.json +7 -5
- package/dist/templates/frontend/packages/o-auth/public/i18n/o-auth/es.json +8 -6
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/access-token/access-token.columns.ts +86 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/access-token/data-access/access-token.detail-config.ts +10 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/access-token/data-access/access-token.graphql.ts +117 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/access-token/data-access/access-token.list-config.ts +13 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/access-token/data-access/access-token.resolvers.ts +43 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/access-token/data-access/index.ts +8 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/access-token/features/access-token-list-actions-cell.component.ts +60 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/access-token/features/access-token-list.component.ts +224 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/access-token/features/index.ts +6 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/access-token/index.ts +7 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/application/application.columns.ts +78 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/application/data-access/application.detail-config.ts +12 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/application/data-access/application.graphql.ts +140 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/application/data-access/application.list-config.ts +13 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/application/data-access/application.resolvers.ts +39 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/application/data-access/index.ts +8 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/application/features/application-form.component.ts +198 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/application/features/application-list-actions-cell.component.ts +75 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/application/features/application-list.component.ts +322 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/application/features/index.ts +7 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/application/index.ts +7 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/application-client/data-access/application-client.graphql.ts +158 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/authorization-code/authorization-code.columns.ts +123 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/authorization-code/data-access/authorization-code.detail-config.ts +12 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/authorization-code/data-access/authorization-code.graphql.ts +168 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/authorization-code/data-access/authorization-code.list-config.ts +13 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/authorization-code/data-access/authorization-code.resolvers.ts +47 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/authorization-code/data-access/index.ts +8 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/authorization-code/features/authorization-code-form.component.ts +218 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/authorization-code/features/authorization-code-list-actions-cell.component.ts +76 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/authorization-code/features/authorization-code-list.component.ts +333 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/authorization-code/features/index.ts +7 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/authorization-code/index.ts +7 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/client/client.columns.ts +145 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/client/data-access/client.detail-config.ts +12 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/client/data-access/client.graphql.ts +134 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/client/data-access/client.list-config.ts +13 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/client/data-access/client.resolvers.ts +69 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/client/data-access/index.ts +8 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/client/features/client-form.component.ts +291 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/client/features/client-list-actions-cell.component.ts +75 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/client/features/client-list.component.ts +335 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/client/features/index.ts +7 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/client/index.ts +7 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/o-auth-icons.providers.ts +21 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/o-auth.navigation.ts +59 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/o-auth.routes.ts +44 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/refresh-token/data-access/index.ts +8 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/refresh-token/data-access/refresh-token.detail-config.ts +10 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/refresh-token/data-access/refresh-token.graphql.ts +104 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/refresh-token/data-access/refresh-token.list-config.ts +13 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/refresh-token/data-access/refresh-token.resolvers.ts +39 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/refresh-token/features/index.ts +6 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/refresh-token/features/refresh-token-list-actions-cell.component.ts +60 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/refresh-token/features/refresh-token-list.component.ts +221 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/refresh-token/index.ts +7 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/refresh-token/refresh-token.columns.ts +60 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/scope/data-access/index.ts +8 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/scope/data-access/scope.detail-config.ts +12 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/scope/data-access/scope.graphql.ts +120 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/scope/data-access/scope.list-config.ts +13 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/scope/data-access/scope.resolvers.ts +39 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/scope/features/index.ts +7 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/scope/features/scope-form.component.spec.ts +75 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/scope/features/scope-form.component.ts +116 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/scope/features/scope-list-actions-cell.component.ts +75 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/scope/features/scope-list.component.ts +318 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/scope/index.ts +7 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/widgets/o-auth.widgets.spec.ts +338 -0
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/widgets/o-auth.widgets.ts +230 -0
- package/dist/templates/frontend/packages/queue-manager/public/i18n/queue-manager/en.json +92 -0
- package/dist/templates/frontend/packages/queue-manager/public/i18n/queue-manager/es.json +92 -0
- package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/index.ts +1 -0
- package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue/data-access/queue.graphql.ts +214 -0
- package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue/data-access/queue.service.ts +301 -0
- package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue/data-access/use-queue-polling.spec.ts +281 -0
- package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue/data-access/use-queue-polling.ts +87 -0
- package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue/features/job-data-dialog.component.spec.ts +345 -0
- package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue/features/job-data-dialog.component.ts +246 -0
- package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue/features/job-drawer.component.ts +492 -0
- package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue/features/queue-detail.component.ts +666 -0
- package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue/features/queue-list.component.ts +547 -0
- package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue/index.ts +6 -0
- package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue-manager-icons.providers.ts +5 -0
- package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue-manager.navigation.ts +11 -0
- package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue-manager.routes.ts +15 -0
- package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue-manager.types.spec.ts +154 -0
- package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue-manager.types.ts +192 -0
- package/dist/templates/monorepo/.backlog/config.yml +41 -0
- package/dist/templates/monorepo/.claude/agents/jd-fix-agent.md +35 -0
- package/dist/templates/monorepo/.claude/agents/jd-judge-a.md +41 -0
- package/dist/templates/monorepo/.claude/agents/jd-judge-b.md +41 -0
- package/dist/templates/monorepo/.claude/commands/business-rules/audit.md +2 -0
- package/dist/templates/monorepo/.claude/commands/business-rules/check.md +2 -0
- package/dist/templates/monorepo/.claude/commands/business-rules/document.md +4 -1
- package/dist/templates/monorepo/.claude/commands/business-rules/promote.md +2 -0
- package/dist/templates/monorepo/.claude/commands/opsx/apply.md +36 -7
- package/dist/templates/monorepo/.claude/commands/opsx/archive.md +91 -26
- package/dist/templates/monorepo/.claude/commands/opsx/explore.md +51 -27
- package/dist/templates/monorepo/.claude/commands/opsx/propose.md +64 -26
- package/dist/templates/monorepo/.claude/commands/opsx/sync.md +258 -0
- package/dist/templates/monorepo/.claude/hooks/__fixtures__/br-hr-regression-baseline.txt +263 -0
- package/dist/templates/monorepo/.claude/hooks/architecture-checkpoint.test.ts +470 -0
- package/dist/templates/monorepo/.claude/hooks/architecture-checkpoint.ts +395 -43
- package/dist/templates/monorepo/.claude/hooks/auto-allow-readonly-bash.test.ts +158 -0
- package/dist/templates/monorepo/.claude/hooks/auto-allow-readonly-bash.ts +314 -0
- package/dist/templates/monorepo/.claude/hooks/business-rules-injector.test.ts +387 -0
- package/dist/templates/monorepo/.claude/hooks/business-rules-injector.ts +231 -0
- package/dist/templates/monorepo/.claude/hooks/catalyst-regen-review.test.ts +114 -0
- package/dist/templates/monorepo/.claude/hooks/catalyst-regen-review.ts +260 -0
- package/dist/templates/monorepo/.claude/hooks/check-required-setup.test.ts +183 -0
- package/dist/templates/monorepo/.claude/hooks/check-required-setup.ts +304 -0
- package/dist/templates/monorepo/.claude/hooks/format-with-prettier.ts +98 -0
- package/dist/templates/monorepo/.claude/hooks/harness-rules-content-guard.ts +12 -7
- package/dist/templates/monorepo/.claude/hooks/inject-prompt-context.test.ts +453 -0
- package/dist/templates/monorepo/.claude/hooks/inject-prompt-context.ts +526 -0
- package/dist/templates/monorepo/.claude/hooks/instructions-loaded-log.test.ts +131 -0
- package/dist/templates/monorepo/.claude/hooks/instructions-loaded-log.ts +132 -0
- package/dist/templates/monorepo/.claude/hooks/lint-barrels.test.ts +237 -0
- package/dist/templates/monorepo/.claude/hooks/lint-barrels.ts +319 -0
- package/dist/templates/monorepo/.claude/rules/route-aurora-components.md +24 -0
- package/dist/templates/monorepo/.claude/rules/route-aurora-yaml.md +29 -0
- package/dist/templates/monorepo/.claude/rules/route-backend-test.md +31 -0
- package/dist/templates/monorepo/.claude/rules/route-drizzle-schema.md +35 -0
- package/dist/templates/monorepo/.claude/rules/route-eta.md +17 -0
- package/dist/templates/monorepo/.claude/rules/route-skill-md.md +28 -0
- package/dist/templates/monorepo/.claude/rules/scope-backend.md +39 -0
- package/dist/templates/monorepo/.claude/rules/scope-cli.md +28 -0
- package/dist/templates/monorepo/.claude/rules/scope-frontend.md +34 -0
- package/dist/templates/monorepo/.claude/scheduled_tasks.lock +1 -0
- package/dist/templates/monorepo/.claude/scripts/catalyst-dev-mode.sh +2 -3
- package/dist/templates/monorepo/.claude/scripts/daily-tips.txt +1 -0
- package/dist/templates/monorepo/.claude/scripts/generate-skills-index.test.ts +397 -0
- package/dist/templates/monorepo/.claude/scripts/generate-skills-index.ts +196 -23
- package/dist/templates/monorepo/.claude/scripts/status-line.sh +13 -2
- package/dist/templates/monorepo/.claude/settings.json +106 -17
- package/dist/templates/monorepo/.claude/skills/REGISTRY.md +61 -28
- package/dist/templates/monorepo/.claude/skills/business-rules-guard/SKILL.md +15 -2
- package/dist/templates/monorepo/.claude/skills/business-rules-guard/references/audit.md +9 -7
- package/dist/templates/monorepo/.claude/skills/business-rules-guard/references/format.md +70 -2
- package/dist/templates/monorepo/.claude/skills/business-rules-guard/references/workflow.md +2 -1
- package/dist/templates/monorepo/.claude/skills/catalyst-backlog/SKILL.md +954 -0
- package/dist/templates/monorepo/.claude/skills/catalyst-backlog/frontier-worker-addendum.md +145 -0
- package/dist/templates/monorepo/.claude/skills/catalyst-backlog/worker-system-prompt.md +88 -0
- package/dist/templates/monorepo/.claude/skills/catalyst-cli/SKILL.md +117 -38
- package/dist/templates/monorepo/.claude/skills/catalyst-cli/references/origin-conciliation.md +188 -20
- package/dist/templates/monorepo/.claude/skills/catalyst-cli/references/schema-versioning.md +1 -1
- package/dist/templates/monorepo/.claude/skills/catalyst-delegation/SKILL.md +180 -0
- package/dist/templates/monorepo/.claude/skills/catalyst-langs/SKILL.md +241 -0
- package/dist/templates/monorepo/.claude/skills/catalyst-query-dsl/SKILL.md +236 -0
- package/dist/templates/monorepo/.claude/skills/catalyst-query-dsl/references/query-language.md +265 -0
- package/dist/templates/monorepo/.claude/skills/catalyst-report-creator/SKILL.md +232 -0
- package/dist/templates/monorepo/.claude/skills/catalyst-report-creator/references/cube-authoring.md +155 -0
- package/dist/templates/monorepo/.claude/skills/catalyst-schema/SKILL.md +94 -30
- package/dist/templates/monorepo/.claude/skills/catalyst-schema/front-presentation.md +209 -0
- package/dist/templates/monorepo/.claude/skills/catalyst-schema/patterns-workflow.md +26 -2
- package/dist/templates/monorepo/.claude/skills/catalyst-schema/types-reference.md +184 -2
- package/dist/templates/monorepo/.claude/skills/catalyst-skill-creator/SKILL.md +10 -2
- package/dist/templates/monorepo/.claude/skills/catalyst-update-skill-registry/SKILL.md +54 -16
- package/dist/templates/monorepo/.claude/skills/harness-rules-guard/SKILL.md +24 -14
- package/dist/templates/monorepo/.claude/skills/harness-rules-guard/references/audit.md +384 -0
- package/dist/templates/monorepo/.claude/skills/harness-rules-guard/references/enforcement.md +7 -6
- package/dist/templates/monorepo/.claude/skills/harness-rules-guard/references/format.md +140 -6
- package/dist/templates/monorepo/.claude/skills/judgment-day/SKILL.md +26 -15
- package/dist/templates/monorepo/.claude/skills/judgment-day/references/prompts-and-formats.md +46 -21
- package/dist/templates/monorepo/.claude/skills/openspec-apply-change/SKILL.md +35 -6
- package/dist/templates/monorepo/.claude/skills/openspec-archive-change/SKILL.md +87 -22
- package/dist/templates/monorepo/.claude/skills/openspec-explore/SKILL.md +89 -65
- package/dist/templates/monorepo/.claude/skills/openspec-propose/SKILL.md +62 -24
- package/dist/templates/monorepo/.claude/skills/openspec-sync-specs/SKILL.md +262 -0
- package/dist/templates/monorepo/.claude/skills/typescript/SKILL.md +5 -0
- package/dist/templates/monorepo/.claude/skills-triggers-index.json +135 -0
- package/dist/templates/monorepo/.husky/post-checkout +17 -0
- package/dist/templates/monorepo/.husky/post-merge +15 -0
- package/dist/templates/monorepo/.husky/pre-commit +26 -0
- package/dist/templates/monorepo/.mcp.json +7 -0
- package/dist/templates/monorepo/CLAUDE.md +274 -327
- package/dist/templates/monorepo/cliter/business-rules-index.json +9252 -269
- package/dist/templates/monorepo/cliter/harness-rules/barrels.md +414 -0
- package/dist/templates/monorepo/cliter/harness-rules/bridges.md +211 -0
- package/dist/templates/monorepo/cliter/harness-rules/dev-modes.md +85 -0
- package/dist/templates/monorepo/cliter/harness-rules/docs-location.md +67 -0
- package/dist/templates/monorepo/cliter/harness-rules/generated-artifacts.md +104 -0
- package/dist/templates/monorepo/cliter/harness-rules/generated-code.md +77 -0
- package/dist/templates/monorepo/cliter/harness-rules/module-graph.md +89 -0
- package/dist/templates/monorepo/cliter/harness-rules/modules.md +78 -0
- package/dist/templates/monorepo/cliter/harness-rules/persistence-integrity.md +92 -0
- package/dist/templates/monorepo/cliter/harness-rules/ports-adapters.md +82 -0
- package/dist/templates/monorepo/cliter/harness-rules/protocol-flows.md +88 -0
- package/dist/templates/monorepo/cliter/harness-rules/types-acl.md +93 -0
- package/dist/templates/monorepo/cliter/harness-rules-index.json +1117 -0
- package/dist/templates/monorepo/docs/AURORA-CATALYST-BRIEF.md +253 -0
- package/dist/templates/monorepo/docs/_catalog-schema-base.json +1 -1
- package/dist/templates/monorepo/docs/business-rules/ARCHITECTURE.md +14 -11
- package/dist/templates/monorepo/docs/business-rules/INDEX.md +84 -5
- package/dist/templates/monorepo/docs/business-rules/MIGRATION.md +11 -52
- package/dist/templates/monorepo/docs/business-rules/README.md +42 -925
- package/dist/templates/monorepo/docs/harness-rules/INDEX.md +14 -7
- package/dist/templates/monorepo/docs/harness-rules/README.md +37 -393
- package/dist/templates/monorepo/docs/langs/README.md +260 -0
- package/dist/templates/monorepo/docs/superpowers/specs/2026-07-02-report-creator-skill-design.md +176 -0
- package/dist/templates/monorepo/openspec/config.yaml +38 -10
- package/dist/templates/monorepo/package.json +16 -3
- package/dist/templates/monorepo/pnpm-workspace.yaml +10 -2
- package/dist/templates/monorepo/scripts/_catalog-runtime/README.md +30 -0
- package/dist/templates/monorepo/scripts/_catalog-runtime/build-index.determinism.test.ts +81 -0
- package/dist/templates/monorepo/scripts/_catalog-runtime/build-index.ts +214 -0
- package/dist/templates/monorepo/scripts/_catalog-runtime/catalog-index.test.ts +146 -0
- package/dist/templates/monorepo/scripts/_catalog-runtime/catalog-index.ts +120 -0
- package/dist/templates/monorepo/scripts/_catalog-runtime/check-core.ts +280 -0
- package/dist/templates/monorepo/scripts/_catalog-runtime/cli.ts +26 -0
- package/dist/templates/monorepo/scripts/_catalog-runtime/frontmatter.ts +15 -0
- package/dist/templates/monorepo/scripts/_catalog-runtime/glob.ts +86 -0
- package/dist/templates/monorepo/scripts/_catalog-runtime/index.ts +74 -0
- package/dist/templates/monorepo/scripts/_catalog-runtime/parse.ts +159 -0
- package/dist/templates/monorepo/scripts/_catalog-runtime/repo-root.ts +36 -0
- package/dist/templates/monorepo/scripts/_catalog-runtime/types.ts +154 -0
- package/dist/templates/monorepo/scripts/_catalog-runtime/validate.ts +254 -0
- package/dist/templates/monorepo/scripts/backlog/README.md +689 -0
- package/dist/templates/monorepo/scripts/backlog/__fixtures__/stream-budget.jsonl +10 -0
- package/dist/templates/monorepo/scripts/backlog/__fixtures__/stream-crash.jsonl +9 -0
- package/dist/templates/monorepo/scripts/backlog/__fixtures__/stream-max-turns.jsonl +10 -0
- package/dist/templates/monorepo/scripts/backlog/__fixtures__/stream-needs-guidance-prose.jsonl +5 -0
- package/dist/templates/monorepo/scripts/backlog/__fixtures__/stream-needs-guidance.jsonl +10 -0
- package/dist/templates/monorepo/scripts/backlog/__fixtures__/stream-success.jsonl +10 -0
- package/dist/templates/monorepo/scripts/backlog/attempt.test.ts +290 -0
- package/dist/templates/monorepo/scripts/backlog/attempt.ts +181 -0
- package/dist/templates/monorepo/scripts/backlog/close.test.ts +3932 -0
- package/dist/templates/monorepo/scripts/backlog/close.ts +2499 -0
- package/dist/templates/monorepo/scripts/backlog/contract.test.ts +174 -0
- package/dist/templates/monorepo/scripts/backlog/dev.aurora.backlog-dispatch.plist +81 -0
- package/dist/templates/monorepo/scripts/backlog/dispatch.test.ts +3270 -0
- package/dist/templates/monorepo/scripts/backlog/dispatch.ts +2718 -0
- package/dist/templates/monorepo/scripts/backlog/entry.test.ts +1654 -0
- package/dist/templates/monorepo/scripts/backlog/entry.ts +791 -0
- package/dist/templates/monorepo/scripts/backlog/graph-cli.ts +70 -0
- package/dist/templates/monorepo/scripts/backlog/graph.test.ts +800 -0
- package/dist/templates/monorepo/scripts/backlog/graph.ts +386 -0
- package/dist/templates/monorepo/scripts/backlog/guards.test.ts +2259 -0
- package/dist/templates/monorepo/scripts/backlog/guards.ts +1452 -0
- package/dist/templates/monorepo/scripts/backlog/lanes/frontier.settings.json +116 -0
- package/dist/templates/monorepo/scripts/backlog/lanes/local.settings.json +64 -0
- package/dist/templates/monorepo/scripts/backlog/lanes.json +28 -0
- package/dist/templates/monorepo/scripts/backlog/launch.test.ts +3126 -0
- package/dist/templates/monorepo/scripts/backlog/launch.ts +1125 -0
- package/dist/templates/monorepo/scripts/backlog/maintenance.test.ts +2642 -0
- package/dist/templates/monorepo/scripts/backlog/maintenance.ts +1483 -0
- package/dist/templates/monorepo/scripts/backlog/notify.test.ts +60 -0
- package/dist/templates/monorepo/scripts/backlog/notify.ts +47 -0
- package/dist/templates/monorepo/scripts/backlog/parent.test.ts +221 -0
- package/dist/templates/monorepo/scripts/backlog/parent.ts +174 -0
- package/dist/templates/monorepo/scripts/backlog/prompt.test.ts +928 -0
- package/dist/templates/monorepo/scripts/backlog/prompt.ts +622 -0
- package/dist/templates/monorepo/scripts/backlog/render.test.ts +318 -0
- package/dist/templates/monorepo/scripts/backlog/render.ts +351 -0
- package/dist/templates/monorepo/scripts/backlog/reviewer.test.ts +354 -0
- package/dist/templates/monorepo/scripts/backlog/reviewer.ts +308 -0
- package/dist/templates/monorepo/scripts/backlog/slots.test.ts +1179 -0
- package/dist/templates/monorepo/scripts/backlog/slots.ts +752 -0
- package/dist/templates/monorepo/scripts/backlog/task-view.test.ts +918 -0
- package/dist/templates/monorepo/scripts/backlog/task-view.ts +513 -0
- package/dist/templates/monorepo/scripts/backlog/types.ts +286 -0
- package/dist/templates/monorepo/scripts/backlog/watch.test.ts +505 -0
- package/dist/templates/monorepo/scripts/backlog/watch.ts +449 -0
- package/dist/templates/monorepo/scripts/backlog/worker-edit.test.ts +484 -0
- package/dist/templates/monorepo/scripts/backlog/worker-edit.ts +477 -0
- package/dist/templates/monorepo/scripts/business-rules/document.ts +2 -1
- package/dist/templates/monorepo/scripts/business-rules/parse-catalog.ts +2 -1
- package/dist/templates/monorepo/scripts/catalyst/regen-review.test.ts +313 -0
- package/dist/templates/monorepo/scripts/catalyst/regen-review.ts +287 -0
- package/dist/templates/monorepo/scripts/harness-rules/audit.ts +620 -0
- package/dist/templates/monorepo/scripts/harness-rules/check.ts +37 -0
- package/dist/templates/monorepo/scripts/harness-rules/generate-index.ts +215 -0
- package/dist/templates/monorepo/scripts/harness-rules/lint-barrels.test.ts +1125 -0
- package/dist/templates/monorepo/scripts/harness-rules/lint-barrels.ts +1059 -0
- package/dist/templates/monorepo/scripts/harness-rules/types.ts +62 -0
- package/dist/templates/monorepo/scripts/harness-rules/validate-catalog.ts +121 -0
- package/oclif.manifest.json +74 -74
- package/package.json +14 -10
- package/dist/generator/engine/code-writer/export-references.d.ts +0 -10
- package/dist/generator/engine/code-writer/export-references.js +0 -69
- package/dist/templates/backend/application/eslint.config.mjs +0 -40
- package/dist/templates/backend/application/src/@aurora/services/bootstrap.service.ts +0 -20
- package/dist/templates/backend/application/src/i18n/en/iam.json +0 -18
- package/dist/templates/backend/application/src/i18n/es/iam.json +0 -18
- package/dist/templates/backend/application/test/authentication-none-mode.e2e-spec.ts +0 -138
- package/dist/templates/backend/application/test/jest-e2e.json +0 -18
- package/dist/templates/backend/application/test/mocks/mime.mock.ts +0 -10
- package/dist/templates/backend/application/test/mocks/uuid.mock.ts +0 -17
- package/dist/templates/backend/packages/iam/src/@app/iam/account/application/create/iam-create-accounts.handler.ts +0 -26
- package/dist/templates/backend/packages/iam/src/@app/iam/account/infrastructure/sequelize/iam-sequelize-account.model.ts +0 -197
- package/dist/templates/backend/packages/iam/src/@app/iam/account/infrastructure/sequelize/iam-sequelize-account.repository.ts +0 -71
- package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/infrastructure/sequelize/iam-sequelize-bounded-context.model.ts +0 -94
- package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/infrastructure/sequelize/iam-sequelize-bounded-context.repository.ts +0 -24
- package/dist/templates/backend/packages/iam/src/@app/iam/permission/infrastructure/sequelize/iam-sequelize-permission.model.ts +0 -93
- package/dist/templates/backend/packages/iam/src/@app/iam/permission/infrastructure/sequelize/iam-sequelize-permission.repository.ts +0 -61
- package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/infrastructure/sequelize/iam-sequelize-permission-role.model.ts +0 -48
- package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/infrastructure/sequelize/iam-sequelize-permission-role.repository.ts +0 -24
- package/dist/templates/backend/packages/iam/src/@app/iam/role/infrastructure/sequelize/iam-sequelize-role.model.ts +0 -116
- package/dist/templates/backend/packages/iam/src/@app/iam/role/infrastructure/sequelize/iam-sequelize-role.repository.ts +0 -68
- package/dist/templates/backend/packages/iam/src/@app/iam/role-account/infrastructure/sequelize/iam-sequelize-role-account.model.ts +0 -48
- package/dist/templates/backend/packages/iam/src/@app/iam/role-account/infrastructure/sequelize/iam-sequelize-role-account.repository.ts +0 -24
- package/dist/templates/backend/packages/iam/src/@app/iam/tag/infrastructure/sequelize/iam-sequelize-tag.model.ts +0 -70
- package/dist/templates/backend/packages/iam/src/@app/iam/tag/infrastructure/sequelize/iam-sequelize-tag.repository.ts +0 -21
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant/infrastructure/sequelize/iam-sequelize-tenant.model.ts +0 -121
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant/infrastructure/sequelize/iam-sequelize-tenant.repository.ts +0 -57
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/infrastructure/sequelize/iam-sequelize-tenant-account.model.ts +0 -48
- package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/infrastructure/sequelize/iam-sequelize-tenant-account.repository.ts +0 -24
- package/dist/templates/backend/packages/iam/src/@app/iam/user/infrastructure/sequelize/iam-sequelize-user.model.ts +0 -144
- package/dist/templates/backend/packages/iam/src/@app/iam/user/infrastructure/sequelize/iam-sequelize-user.repository.ts +0 -21
- package/dist/templates/backend/packages/iam/src/@bridges/iam/index.ts +0 -3
- package/dist/templates/backend/packages/iam/src/@bridges/iam/user/index.ts +0 -1
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/infrastructure/sequelize/o-auth-sequelize-access-token.model.ts +0 -118
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/infrastructure/sequelize/o-auth-sequelize-access-token.repository.ts +0 -24
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/infrastructure/sequelize/o-auth-sequelize-application.model.ts +0 -101
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/infrastructure/sequelize/o-auth-sequelize-application.repository.ts +0 -61
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/infrastructure/sequelize/o-auth-sequelize-application-client.model.ts +0 -48
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/infrastructure/sequelize/o-auth-sequelize-application-client.repository.ts +0 -24
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/infrastructure/sequelize/o-auth-sequelize-authorization-code.model.ts +0 -146
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/infrastructure/sequelize/o-auth-sequelize-authorization-code.repository.ts +0 -44
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/infrastructure/sequelize/o-auth-sequelize-client.model.ts +0 -146
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/infrastructure/sequelize/o-auth-sequelize-client.repository.ts +0 -57
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/infrastructure/sequelize/o-auth-sequelize-credential.model.ts +0 -139
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/infrastructure/sequelize/o-auth-sequelize-credential.repository.ts +0 -24
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/infrastructure/sequelize/o-auth-sequelize-refresh-token.model.ts +0 -98
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/infrastructure/sequelize/o-auth-sequelize-refresh-token.repository.ts +0 -24
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/infrastructure/sequelize/o-auth-sequelize-scope.model.ts +0 -84
- package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/infrastructure/sequelize/o-auth-sequelize-scope.repository.ts +0 -24
- package/dist/templates/backend/packages/o-auth/src/@bridges/o-auth/client/index.ts +0 -1
- package/dist/templates/codegen/backend/@app/__module_name__/infrastructure/sequelize/__bounded_context_name__-sequelize-__module_name__.model.ts.eta +0 -213
- package/dist/templates/codegen/backend/@app/__module_name__/infrastructure/sequelize/__bounded_context_name__-sequelize-__module_name__.repository.ts.eta +0 -94
- package/dist/templates/codegen/partials/declare-i18n-repository.eta +0 -3
- package/dist/templates/codegen/partials/import-i18n-repository.eta +0 -3
- package/dist/templates/frontend/application/libs/ui/icon/src/index.ts +0 -7
- package/dist/templates/frontend/application/libs/ui/icon/src/lib/hlm-icon.token.ts +0 -20
- package/dist/templates/frontend/application/libs/ui/icon/src/lib/hlm-icon.ts +0 -42
- package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/get-relation-includes.spec.ts +0 -141
- package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/get-relation-includes.ts +0 -47
- package/dist/templates/frontend/application/src/@aurora/modules/graphql/parse-gql-fields.ts +0 -32
- package/dist/templates/frontend/application/src/app/aurora.types.ts +0 -2671
- package/dist/templates/frontend/application/src/app/domains/admin/bounded-contexts/dashboard/dashboard.routes.ts +0 -8
- package/dist/templates/frontend/application/src/app/domains/admin/bounded-contexts/dashboard/features/dashboard.component.ts +0 -13
- package/dist/templates/frontend/application/src/app/domains/admin/layout/sidebar/nav-projects.ts +0 -106
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/account/data-access/account.detail-config.ts +0 -13
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/account/data-access/account.graphql.ts +0 -291
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/account/data-access/account.list-config.ts +0 -12
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/account/data-access/account.resolvers.ts +0 -121
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/account/data-access/current-account.adapter.ts +0 -34
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/account/features/account-detail.component.ts +0 -165
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/account/features/account-form.component.ts +0 -915
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/account/features/account-list-actions-cell.component.ts +0 -85
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/account/features/account-list.component.ts +0 -260
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/account/index.ts +0 -8
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/bounded-context/data-access/bounded-context.detail-config.ts +0 -18
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/bounded-context/data-access/bounded-context.graphql.ts +0 -158
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/bounded-context/data-access/bounded-context.list-config.ts +0 -12
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/bounded-context/data-access/bounded-context.resolvers.ts +0 -36
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/bounded-context/features/bounded-context-detail.component.ts +0 -157
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/bounded-context/features/bounded-context-form.component.ts +0 -154
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/bounded-context/features/bounded-context-list-actions-cell.component.ts +0 -85
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/bounded-context/features/bounded-context-list.component.ts +0 -247
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/bounded-context/index.ts +0 -7
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/iam-icons.providers.ts +0 -23
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/iam.navigation.ts +0 -42
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/iam.routes.ts +0 -98
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission/data-access/permission.detail-config.ts +0 -13
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission/data-access/permission.graphql.ts +0 -163
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission/data-access/permission.list-config.ts +0 -12
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission/data-access/permission.resolvers.ts +0 -72
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission/features/permission-form-embed.component.ts +0 -99
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission/features/permission-form.component.ts +0 -141
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission/features/permission-list-actions-cell.component.ts +0 -85
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission/features/permission-list.component.ts +0 -404
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission/index.ts +0 -7
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission/permission.columns.ts +0 -56
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission-role/data-access/permission-role.detail-config.ts +0 -18
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission-role/data-access/permission-role.graphql.ts +0 -148
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission-role/data-access/permission-role.list-config.ts +0 -12
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission-role/data-access/permission-role.resolvers.ts +0 -40
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission-role/index.ts +0 -7
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission-role/permission-role.columns.ts +0 -38
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role/data-access/role.detail-config.ts +0 -13
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role/data-access/role.graphql.ts +0 -207
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role/data-access/role.list-config.ts +0 -12
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role/data-access/role.resolvers.ts +0 -68
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role/features/role-detail.component.ts +0 -312
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role/features/role-form.component.ts +0 -162
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role/features/role-list-actions-cell.component.ts +0 -85
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role/features/role-list.component.ts +0 -248
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role/index.ts +0 -7
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role/role.columns.ts +0 -85
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role-account/data-access/role-account.detail-config.ts +0 -13
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role-account/data-access/role-account.graphql.ts +0 -158
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role-account/data-access/role-account.list-config.ts +0 -12
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/shared/validators/unique-email.validator.ts +0 -31
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/shared/validators/unique-username.validator.ts +0 -29
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tag/data-access/tag.detail-config.ts +0 -13
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tag/data-access/tag.graphql.ts +0 -129
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tag/data-access/tag.list-config.ts +0 -14
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tag/data-access/tag.resolvers.ts +0 -36
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tag/features/tag-form.component.ts +0 -93
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tag/features/tag-list-actions-cell.component.ts +0 -85
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tag/features/tag-list.component.ts +0 -321
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tag/index.ts +0 -7
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant/data-access/tenant.detail-config.ts +0 -13
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant/data-access/tenant.graphql.ts +0 -203
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant/data-access/tenant.list-config.ts +0 -12
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant/data-access/tenant.resolvers.ts +0 -71
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant/features/tenant-form.component.ts +0 -169
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant/features/tenant-list-actions-cell.component.ts +0 -85
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant/features/tenant-list.component.ts +0 -333
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant/index.ts +0 -7
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant/tenant.columns.ts +0 -86
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant-account/data-access/tenant-account.detail-config.ts +0 -18
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant-account/data-access/tenant-account.graphql.ts +0 -158
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant-account/data-access/tenant-account.list-config.ts +0 -12
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant-account/data-access/tenant-account.resolvers.ts +0 -40
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant-account/index.ts +0 -7
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant-account/tenant-account.columns.ts +0 -38
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/user/data-access/user.detail-config.ts +0 -13
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/user/data-access/user.graphql.ts +0 -152
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/user/data-access/user.list-config.ts +0 -12
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/user/data-access/user.resolvers.ts +0 -36
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/user/features/user-detail.component.ts +0 -124
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/user/features/user-form.component.ts +0 -215
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/user/features/user-list-actions-cell.component.ts +0 -85
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/user/features/user-list.component.ts +0 -237
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/user/index.ts +0 -7
- package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/user/user.columns.ts +0 -124
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/access-token/access-token.columns.ts +0 -97
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/access-token/data-access/access-token.detail-config.ts +0 -13
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/access-token/data-access/access-token.graphql.ts +0 -155
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/access-token/data-access/access-token.list-config.ts +0 -12
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/access-token/data-access/access-token.resolvers.ts +0 -40
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/access-token/features/access-token-form.component.ts +0 -152
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/access-token/features/access-token-list-actions-cell.component.ts +0 -85
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/access-token/features/access-token-list.component.ts +0 -331
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/access-token/index.ts +0 -7
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/application/application.columns.ts +0 -73
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/application/data-access/application.detail-config.ts +0 -13
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/application/data-access/application.graphql.ts +0 -146
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/application/data-access/application.list-config.ts +0 -14
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/application/data-access/application.resolvers.ts +0 -36
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/application/features/application-form.component.ts +0 -160
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/application/features/application-list-actions-cell.component.ts +0 -85
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/application/features/application-list.component.ts +0 -326
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/application/index.ts +0 -7
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/application-client/data-access/application-client.graphql.ts +0 -155
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/authorization-code/authorization-code.columns.ts +0 -123
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/authorization-code/data-access/authorization-code.detail-config.ts +0 -18
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/authorization-code/data-access/authorization-code.graphql.ts +0 -146
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/authorization-code/data-access/authorization-code.list-config.ts +0 -19
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/authorization-code/data-access/authorization-code.resolvers.ts +0 -44
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/authorization-code/features/authorization-code-form.component.ts +0 -202
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/authorization-code/features/authorization-code-list-actions-cell.component.ts +0 -86
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/authorization-code/features/authorization-code-list.component.ts +0 -337
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/authorization-code/index.ts +0 -7
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/client/client.columns.ts +0 -140
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/client/data-access/client.detail-config.ts +0 -13
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/client/data-access/client.graphql.ts +0 -141
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/client/data-access/client.list-config.ts +0 -14
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/client/data-access/client.resolvers.ts +0 -97
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/client/features/client-form.component.ts +0 -358
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/client/features/client-list-actions-cell.component.ts +0 -85
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/client/features/client-list.component.ts +0 -359
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/client/index.ts +0 -7
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/o-auth-icons.providers.ts +0 -21
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/o-auth.navigation.ts +0 -52
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/o-auth.routes.ts +0 -44
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/refresh-token/data-access/refresh-token.detail-config.ts +0 -13
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/refresh-token/data-access/refresh-token.graphql.ts +0 -132
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/refresh-token/data-access/refresh-token.list-config.ts +0 -12
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/refresh-token/data-access/refresh-token.resolvers.ts +0 -36
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/refresh-token/features/refresh-token-form.component.ts +0 -131
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/refresh-token/features/refresh-token-list-actions-cell.component.ts +0 -85
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/refresh-token/features/refresh-token-list.component.ts +0 -330
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/refresh-token/index.ts +0 -7
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/refresh-token/refresh-token.columns.ts +0 -59
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/scope/data-access/scope.detail-config.ts +0 -13
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/scope/data-access/scope.graphql.ts +0 -131
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/scope/data-access/scope.list-config.ts +0 -14
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/scope/data-access/scope.resolvers.ts +0 -36
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/scope/features/scope-form.component.ts +0 -119
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/scope/features/scope-list-actions-cell.component.ts +0 -85
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/scope/features/scope-list.component.ts +0 -321
- package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/scope/index.ts +0 -7
- package/dist/templates/monorepo/.claude/hooks/check-required-plugins.ts +0 -112
- package/dist/templates/monorepo/.claude/hooks/inject-rules-context.ts +0 -267
- package/dist/templates/monorepo/.vscode/settings.json +0 -10
- /package/dist/templates/frontend/packages/iam/src/app/domains/admin/{bounded-contexts → apps}/iam/account/account.columns.ts +0 -0
- /package/dist/templates/frontend/packages/iam/src/app/domains/admin/{bounded-contexts → apps}/iam/bounded-context/bounded-context.columns.ts +0 -0
- /package/dist/templates/frontend/packages/iam/src/app/domains/admin/{bounded-contexts → apps}/iam/iam.types.ts +0 -0
- /package/dist/templates/frontend/packages/iam/src/app/domains/admin/{bounded-contexts → apps}/iam/index.ts +0 -0
- /package/dist/templates/frontend/packages/iam/src/app/domains/admin/{bounded-contexts → apps}/iam/shared/index.ts +0 -0
- /package/dist/templates/frontend/packages/iam/src/app/domains/admin/{bounded-contexts → apps}/iam/tag/tag.columns.ts +0 -0
- /package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/{bounded-contexts → apps}/o-auth/application-client/data-access/application-client.detail-config.ts +0 -0
- /package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/{bounded-contexts → apps}/o-auth/application-client/data-access/application-client.list-config.ts +0 -0
- /package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/{bounded-contexts → apps}/o-auth/index.ts +0 -0
- /package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/{bounded-contexts → apps}/o-auth/o-auth.types.ts +0 -0
- /package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/{bounded-contexts → apps}/o-auth/scope/scope.columns.ts +0 -0
|
@@ -0,0 +1,2718 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* dispatch.ts — the reconciler's executable entry point. Every trigger (`onStatusChange`, the
|
|
3
|
+
* launchd timer, a `gh`-poll) invokes exactly this script (spec: "Three dispatch triggers").
|
|
4
|
+
*
|
|
5
|
+
* Builds the REAL collaborators (real fs under `.backlog/.dispatch/`, real `git`/`gh`/`backlog`
|
|
6
|
+
* CLI shell-outs, a real `claude` spawn) and calls `runOnce` from `entry.ts` — every actual
|
|
7
|
+
* decision (maintenance order, the anti-loop guard, task selection, the six guards, the model
|
|
8
|
+
* readiness gate, the close ordering, the scope diff, the reviewer verdict, the AC/DoD gate) lives
|
|
9
|
+
* in the pure/injectable modules this file only wires together. See those modules' own tests for
|
|
10
|
+
* the decisions themselves; this file has no test of its own beyond the manual smoke run recorded
|
|
11
|
+
* in tasks.md 9.
|
|
12
|
+
*
|
|
13
|
+
* Process model (design.md's Tramo 7, README's "process model"): the pass holds the single-flight
|
|
14
|
+
* lock only until the slot is taken and the task is `In Progress` — `entry.ts` then calls
|
|
15
|
+
* `releaseSingleFlight`, and this process lives on, detached by the callback's `nohup`, until its
|
|
16
|
+
* worker exits. `launch.ts`'s `spawnWorker` runs the worker ASYNCHRONOUSLY and streams its stdout
|
|
17
|
+
* line by line into the attempt's `stream.jsonl`, which is also what refreshes the task lock's
|
|
18
|
+
* heartbeat. A concurrent invocation can therefore run its own maintenance pass and dispatch a
|
|
19
|
+
* second frontier task while this one is still streaming.
|
|
20
|
+
*
|
|
21
|
+
* Remaining simplification, deliberate: `ctx.tasks` is fetched once per pass, before maintenance's
|
|
22
|
+
* edits, so a maintenance-driven status change is only visible to task selection on the NEXT pass.
|
|
23
|
+
* Every trigger re-invokes this script, so it self-heals within one interval — never permanent
|
|
24
|
+
* staleness.
|
|
25
|
+
*/
|
|
26
|
+
import { execFileSync } from 'node:child_process';
|
|
27
|
+
import fs from 'node:fs';
|
|
28
|
+
import os from 'node:os';
|
|
29
|
+
import path from 'node:path';
|
|
30
|
+
import { fileURLToPath } from 'node:url';
|
|
31
|
+
import { isSkillTriggerIndex, loadJsonIndex } from '../_catalog-runtime/index.js';
|
|
32
|
+
import {
|
|
33
|
+
countAttempts,
|
|
34
|
+
createAttemptDir,
|
|
35
|
+
createAttemptSink,
|
|
36
|
+
hasCloseAttemptBeenEnqueued,
|
|
37
|
+
markCloseAttemptEnqueued,
|
|
38
|
+
} from './attempt.js';
|
|
39
|
+
import {
|
|
40
|
+
buildAttemptCommitMessage,
|
|
41
|
+
buildPrBodyArgs,
|
|
42
|
+
buildPrCreateArgs,
|
|
43
|
+
buildPrLabelArgs,
|
|
44
|
+
buildPrReviewerArgs,
|
|
45
|
+
buildPrTitle,
|
|
46
|
+
buildWipCommitMessage,
|
|
47
|
+
checkBoardIntegrity,
|
|
48
|
+
collectAttemptDiff,
|
|
49
|
+
collectChangedFiles,
|
|
50
|
+
collectLeftoverFiles,
|
|
51
|
+
DOD_SCOPED_TESTS,
|
|
52
|
+
evaluateAcceptanceGate,
|
|
53
|
+
evaluateMechanicalCheckResult,
|
|
54
|
+
findOpenPrUrl,
|
|
55
|
+
formatBlockComment,
|
|
56
|
+
HARNESS_REVIEW_LABEL,
|
|
57
|
+
planMechanicalChecks,
|
|
58
|
+
readPrBody,
|
|
59
|
+
resolveBaseRef,
|
|
60
|
+
runMirrorRegen,
|
|
61
|
+
runScopeCheck,
|
|
62
|
+
upsertHumanReviewSection,
|
|
63
|
+
type CloseRunners,
|
|
64
|
+
} from './close.js';
|
|
65
|
+
import {
|
|
66
|
+
acquireSingleFlight,
|
|
67
|
+
formatOutcome,
|
|
68
|
+
isDispatcherOwnedCallback,
|
|
69
|
+
releaseSingleFlight,
|
|
70
|
+
resolveContext,
|
|
71
|
+
resolveMainCheckout,
|
|
72
|
+
runOnce,
|
|
73
|
+
shouldDispatchFromCallback,
|
|
74
|
+
type RunOnceContext,
|
|
75
|
+
type SingleFlightFs,
|
|
76
|
+
type SingleFlightResult,
|
|
77
|
+
} from './entry.js';
|
|
78
|
+
import { SECURITY_PATH_PATTERNS } from './guards.js';
|
|
79
|
+
import {
|
|
80
|
+
checkLocalModelLoaded,
|
|
81
|
+
killProcessTree,
|
|
82
|
+
loadLaneConfig,
|
|
83
|
+
loadSettingsAllowRules,
|
|
84
|
+
resetInjectorCache,
|
|
85
|
+
resolveOrphanInProgressThresholdMs,
|
|
86
|
+
settingsSourcePaths,
|
|
87
|
+
spawnWorker,
|
|
88
|
+
type FrontierLaneSettings,
|
|
89
|
+
type LocalLaneSettings,
|
|
90
|
+
} from './launch.js';
|
|
91
|
+
import {
|
|
92
|
+
PR_MERGE_STATE,
|
|
93
|
+
recomputeParent,
|
|
94
|
+
REMOTE_BRANCH_DELETE_RESULT,
|
|
95
|
+
toDerivationNode,
|
|
96
|
+
type MaintenanceContext,
|
|
97
|
+
type MaintenanceGit,
|
|
98
|
+
type PrMergeState,
|
|
99
|
+
type RemoteBranchDeleteResult,
|
|
100
|
+
} from './maintenance.js';
|
|
101
|
+
import { notify, type OsascriptRunner } from './notify.js';
|
|
102
|
+
import { effectiveStatus } from './parent.js';
|
|
103
|
+
import { classifyStreamOutcome } from './render.js';
|
|
104
|
+
import {
|
|
105
|
+
assembleExecutorPrompt,
|
|
106
|
+
buildFrontierAddendum,
|
|
107
|
+
buildFrontierPrompt,
|
|
108
|
+
buildParentCloseAttemptPrompt,
|
|
109
|
+
computeHookOutputs,
|
|
110
|
+
extractDelegationContract,
|
|
111
|
+
isParentCloseAttempt,
|
|
112
|
+
matchSkillPaths,
|
|
113
|
+
parseAcceptanceCriteria,
|
|
114
|
+
parseDefinitionOfDone,
|
|
115
|
+
parseIndexedAcceptanceCriteria,
|
|
116
|
+
parseLastComment,
|
|
117
|
+
type HookRunners,
|
|
118
|
+
type OperatingEnvelope,
|
|
119
|
+
} from './prompt.js';
|
|
120
|
+
import { parseReviewerVerdict, reviewerEnv, runReviewer } from './reviewer.js';
|
|
121
|
+
import {
|
|
122
|
+
computeLockfileHash,
|
|
123
|
+
createRegistryLock,
|
|
124
|
+
detachSlot,
|
|
125
|
+
isLockAlive,
|
|
126
|
+
isProcessAlive,
|
|
127
|
+
needsCliInstall,
|
|
128
|
+
needsInstall,
|
|
129
|
+
provisionCliDependencies,
|
|
130
|
+
provisionSlot,
|
|
131
|
+
readLock,
|
|
132
|
+
refreshHeartbeat,
|
|
133
|
+
releaseHeldSlotEntries,
|
|
134
|
+
releaseLock,
|
|
135
|
+
releaseSlotAndDetach,
|
|
136
|
+
slotPathForTask,
|
|
137
|
+
updateSlots,
|
|
138
|
+
type SlotRegistryStore,
|
|
139
|
+
} from './slots.js';
|
|
140
|
+
import {
|
|
141
|
+
findOwnedDefinitionOfDone,
|
|
142
|
+
notesRegion,
|
|
143
|
+
parseBoardTaskIds,
|
|
144
|
+
parseDescription,
|
|
145
|
+
parseTaskStatus,
|
|
146
|
+
parseTaskTitle,
|
|
147
|
+
parseTaskView,
|
|
148
|
+
} from './task-view.js';
|
|
149
|
+
import {
|
|
150
|
+
LANE,
|
|
151
|
+
TASK_STATUS,
|
|
152
|
+
type BoardLoad,
|
|
153
|
+
type DispatchLock,
|
|
154
|
+
type SlotRegistry,
|
|
155
|
+
type Task,
|
|
156
|
+
type TaskStatus,
|
|
157
|
+
} from './types.js';
|
|
158
|
+
import { workerEditCommand } from './worker-edit.js';
|
|
159
|
+
|
|
160
|
+
const DISPATCH_SUBDIR = '.backlog/.dispatch';
|
|
161
|
+
const SKILL_TRIGGERS_INDEX_FILE = '.claude/skills-triggers-index.json';
|
|
162
|
+
const DELEGATION_CONTRACT_FILE = '.claude/skills/catalyst-delegation/SKILL.md';
|
|
163
|
+
const WORKER_SYSTEM_PROMPT_FILE = '.claude/skills/catalyst-backlog/worker-system-prompt.md';
|
|
164
|
+
/**
|
|
165
|
+
* The local lane's `--append-system-prompt-file`, resolved ABSOLUTELY against the repository root
|
|
166
|
+
* the dispatcher itself runs from — never left relative (T-31 round 3).
|
|
167
|
+
*
|
|
168
|
+
* `launch.ts` spawns the executor with `cwd` = the SLOT, so a relative path made the worker's own
|
|
169
|
+
* system prompt a file read FROM the slot: an instruction channel the attempt can write to, and one
|
|
170
|
+
* `--bare` does not close, because the flag is explicit on the command line. The frontier lane
|
|
171
|
+
* already does it this way (`writeFrontierAddendum` hands back an absolute path under the main
|
|
172
|
+
* checkout), and this is the same class of asset as the lane settings files and the addendum
|
|
173
|
+
* template — code, not board data, so it hangs off `repoRoot`.
|
|
174
|
+
*
|
|
175
|
+
* Two other mechanisms bound the same hole today (the local lane denies `.claude/**` outright, and
|
|
176
|
+
* `.claude/` is in `LOCAL_FORBIDDEN_PATHS`), which is exactly the "one mechanism is not enough"
|
|
177
|
+
* situation the hard list exists for: resolving the path closes the channel instead of watching it.
|
|
178
|
+
*/
|
|
179
|
+
export function resolveWorkerSystemPromptPath(repoRoot: string): string {
|
|
180
|
+
return path.join(repoRoot, WORKER_SYSTEM_PROMPT_FILE);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/** The frontier addendum's TEMPLATE — rendered per attempt by `prompt.ts`'s `buildFrontierAddendum`. */
|
|
184
|
+
const FRONTIER_ADDENDUM_TEMPLATE_PATH =
|
|
185
|
+
'.claude/skills/catalyst-backlog/frontier-worker-addendum.md';
|
|
186
|
+
const LINT_BARRELS_SCRIPT = 'hr:lint-barrels';
|
|
187
|
+
/**
|
|
188
|
+
* How long a lock may go without a heartbeat before it counts as dead. Read by the maintenance
|
|
189
|
+
* sweep AND by the manual `--release-slot` guard: two different answers to "is this worker alive"
|
|
190
|
+
* is how a rescue releases a slot the sweep still considers busy.
|
|
191
|
+
*/
|
|
192
|
+
const LOCK_TTL_MS = 10 * 60_000;
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* T-97: how long a single external CLI call (git/gh/backlog/node) may block before it fails like
|
|
196
|
+
* any other failure of that call — never a new destructive path (AC2).
|
|
197
|
+
*
|
|
198
|
+
* Measured defect (2026-09-15): `git ls-remote --exit-code --heads origin <branch>`'s child `ssh` to
|
|
199
|
+
* github.com hung 2h23m holding the per-task lock. Nothing refreshes a lock's heartbeat while a
|
|
200
|
+
* synchronous subprocess blocks (see this file's own header on the process model), so a hang here
|
|
201
|
+
* only ever surfaces once the WHOLE `LOCK_TTL_MS` has elapsed and the maintenance sweep gives up on
|
|
202
|
+
* the pass — every other Queued task starves meanwhile. Bounded well UNDER `LOCK_TTL_MS`, on
|
|
203
|
+
* purpose: a call that took the full lock TTL to time out would already read as a dead worker by the
|
|
204
|
+
* time it failed, which is exactly the failure mode this bound exists to close.
|
|
205
|
+
*/
|
|
206
|
+
export const EXTERNAL_CALL_TIMEOUT_MS = 60_000;
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* The close's own mechanical checks — prettier, the barrels lint, and the task's declared Test
|
|
210
|
+
* command — legitimately run for minutes, so they need a longer leash than
|
|
211
|
+
* `EXTERNAL_CALL_TIMEOUT_MS`. The same invariant still applies: a hang here must fail well before
|
|
212
|
+
* `LOCK_TTL_MS`, or the exact incident that produced this task's retry (a re-run of this suite's own
|
|
213
|
+
* `pnpm test:backlog`, synchronous, with no bound, exhausting the lock's heartbeat) recurs on the
|
|
214
|
+
* next hang instead of failing fast.
|
|
215
|
+
*/
|
|
216
|
+
const MECHANICAL_CHECK_TIMEOUT_MS = 8 * 60_000;
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* The dispatcher-owned Definition-of-Done items, and the close step that PROVES each one. The close
|
|
220
|
+
* ticks them itself once that step passed — see `task-view.ts`'s `DISPATCHER_OWNED_DOD_PATTERNS`.
|
|
221
|
+
* `DOD_SCOPED_TESTS` comes from `close.ts` instead of being redeclared here: the pre-PR gate FAILS
|
|
222
|
+
* on that item still being unticked, so the tick and the check must read one pattern.
|
|
223
|
+
*/
|
|
224
|
+
const DOD_PRETTIER_BARRELS = /prettier and barrels lint/i;
|
|
225
|
+
const DOD_EVERY_AC = /every acceptance criterion is checked/i;
|
|
226
|
+
const DOD_PR_OPENED = /pr opened to main/i;
|
|
227
|
+
|
|
228
|
+
// ── Board loader: `backlog task list/view --plain` → `Task[]` ─────────────────
|
|
229
|
+
|
|
230
|
+
function viewTask(mainCheckoutPath: string, taskId: string): string {
|
|
231
|
+
return execFileSync('backlog', ['task', 'view', taskId, '--plain'], {
|
|
232
|
+
cwd: mainCheckoutPath,
|
|
233
|
+
encoding: 'utf8',
|
|
234
|
+
timeout: EXTERNAL_CALL_TIMEOUT_MS,
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/** The board reads `loadBoard` needs, injected so the loader is testable without a real CLI. */
|
|
239
|
+
export interface BoardReader {
|
|
240
|
+
/** `backlog task list --plain`. */
|
|
241
|
+
list: () => string;
|
|
242
|
+
/** `backlog task view <id> --plain`. */
|
|
243
|
+
view: (taskId: string) => string;
|
|
244
|
+
/** How many attempt directories this task already has. */
|
|
245
|
+
attempts: (taskId: string) => number;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* The board, plus whether reading it succeeded in full. Pure over the injected reader.
|
|
250
|
+
*
|
|
251
|
+
* An id whose `task view` fails is DROPPED, never stubbed: a stub carries `To Do`, no labels and no
|
|
252
|
+
* declared files, which reads on the board as a real untriaged task and makes every dependency on it
|
|
253
|
+
* look unmet. What the drop must NOT do is stay silent — hence `complete`.
|
|
254
|
+
*/
|
|
255
|
+
export function loadBoard(reader: BoardReader): BoardLoad {
|
|
256
|
+
let listOutput: string;
|
|
257
|
+
try {
|
|
258
|
+
listOutput = reader.list();
|
|
259
|
+
} catch (error) {
|
|
260
|
+
console.error(
|
|
261
|
+
'dispatch.ts: backlog task list failed; reporting an INCOMPLETE empty board:',
|
|
262
|
+
error,
|
|
263
|
+
);
|
|
264
|
+
return { tasks: [], complete: false };
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
let complete = true;
|
|
268
|
+
const tasks = parseBoardTaskIds(listOutput).flatMap((id) => {
|
|
269
|
+
try {
|
|
270
|
+
return [parseTaskView({ id, output: reader.view(id), attempts: reader.attempts(id) })];
|
|
271
|
+
} catch (error) {
|
|
272
|
+
console.error(
|
|
273
|
+
`dispatch.ts: backlog task view ${id} failed; dropping it from this pass:`,
|
|
274
|
+
error,
|
|
275
|
+
);
|
|
276
|
+
complete = false;
|
|
277
|
+
return [];
|
|
278
|
+
}
|
|
279
|
+
});
|
|
280
|
+
return { tasks, complete };
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/** Exported for `graph.ts`'s `backlog:graph` CLI, which reuses this reader rather than a second one. */
|
|
284
|
+
export function loadAllTasks(mainCheckoutPath: string): BoardLoad {
|
|
285
|
+
const dispatchRoot = path.join(mainCheckoutPath, DISPATCH_SUBDIR);
|
|
286
|
+
return loadBoard({
|
|
287
|
+
list: () =>
|
|
288
|
+
execFileSync('backlog', ['task', 'list', '--plain'], {
|
|
289
|
+
cwd: mainCheckoutPath,
|
|
290
|
+
encoding: 'utf8',
|
|
291
|
+
timeout: EXTERNAL_CALL_TIMEOUT_MS,
|
|
292
|
+
}),
|
|
293
|
+
view: (taskId) => viewTask(mainCheckoutPath, taskId),
|
|
294
|
+
attempts: (taskId) => countAttempts(dispatchRoot, taskId),
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
// ── Real collaborators ─────────────────────────────────────────────────────────
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* `mainCheckoutPath` (possibly `BACKLOG_CWD`-overridden) is where BOARD DATA lives — `backlog` CLI
|
|
302
|
+
* calls, dispatch locks, `slots.json`. `repoRoot` (never overridden — always this machine's
|
|
303
|
+
* aurora-catalyst checkout, via `resolveMainCheckout`) is where the CODE assets `lanes.json`
|
|
304
|
+
* describes live: `scripts/backlog/lanes.json` itself, the lane settings files, and every worktree
|
|
305
|
+
* slot (`.claude/worktrees/dispatch-*`) is a checkout of THIS repo, not of whatever `BACKLOG_CWD`
|
|
306
|
+
* points at. Both resolve the same git topology (`resolveMainCheckout`, unaffected by whether `cwd`
|
|
307
|
+
* is the main checkout or one of its worktrees), so these two axes coincide in real production —
|
|
308
|
+
* where no `BACKLOG_CWD` override is set — and diverge only when one is: an isolated test run, or a
|
|
309
|
+
* manual/CI invocation pointing board data at a different project.
|
|
310
|
+
*/
|
|
311
|
+
export function realMaintenanceFs(mainCheckoutPath: string, repoRoot: string) {
|
|
312
|
+
const dispatchDir = path.join(mainCheckoutPath, DISPATCH_SUBDIR);
|
|
313
|
+
const slotsPath = path.join(dispatchDir, 'slots.json');
|
|
314
|
+
const locksDir = path.join(dispatchDir, 'locks');
|
|
315
|
+
|
|
316
|
+
const readSlots = (): SlotRegistry => {
|
|
317
|
+
if (!fs.existsSync(slotsPath)) {
|
|
318
|
+
const laneConfig = loadLaneConfig(path.join(repoRoot, 'scripts/backlog/lanes.json'));
|
|
319
|
+
return {
|
|
320
|
+
slots: laneConfig.slots.map((name) => ({
|
|
321
|
+
name,
|
|
322
|
+
path: path.join(repoRoot, laneConfig.slotsRoot, name),
|
|
323
|
+
lane: null,
|
|
324
|
+
taskId: null,
|
|
325
|
+
pid: null,
|
|
326
|
+
lockfileHash: null,
|
|
327
|
+
})),
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
return JSON.parse(fs.readFileSync(slotsPath, 'utf8')) as SlotRegistry;
|
|
331
|
+
};
|
|
332
|
+
|
|
333
|
+
// ONE store, so every writer in this process goes through the same lock file. The lock lives
|
|
334
|
+
// beside the registry it guards; `updateSlots` re-reads inside it, so two concurrent passes can
|
|
335
|
+
// never overwrite each other's slot.
|
|
336
|
+
const store: SlotRegistryStore = {
|
|
337
|
+
readSlots,
|
|
338
|
+
writeSlots: (registry) => {
|
|
339
|
+
fs.mkdirSync(dispatchDir, { recursive: true });
|
|
340
|
+
fs.writeFileSync(slotsPath, JSON.stringify(registry, null, 2));
|
|
341
|
+
},
|
|
342
|
+
withLock: createRegistryLock(path.join(dispatchDir, 'slots.lock')),
|
|
343
|
+
};
|
|
344
|
+
|
|
345
|
+
return {
|
|
346
|
+
readSlots,
|
|
347
|
+
updateSlots: (mutate: (current: SlotRegistry) => SlotRegistry): SlotRegistry =>
|
|
348
|
+
updateSlots(store, mutate),
|
|
349
|
+
readLocks: (): DispatchLock[] => {
|
|
350
|
+
if (!fs.existsSync(locksDir)) {
|
|
351
|
+
return [];
|
|
352
|
+
}
|
|
353
|
+
return fs
|
|
354
|
+
.readdirSync(locksDir)
|
|
355
|
+
.filter((name) => name.endsWith('.json'))
|
|
356
|
+
.map(
|
|
357
|
+
(name) => JSON.parse(fs.readFileSync(path.join(locksDir, name), 'utf8')) as DispatchLock,
|
|
358
|
+
);
|
|
359
|
+
},
|
|
360
|
+
removeLock: (taskId: string): void => releaseLock(dispatchDir, taskId),
|
|
361
|
+
/**
|
|
362
|
+
* T-8 point 10's fourth orphan check: whether `.backlog/.dispatch/<taskId>/` exists at all —
|
|
363
|
+
* the same directory `createAttemptDir` opens BEFORE a worker starts. A task the dispatcher has
|
|
364
|
+
* ever touched keeps this directory forever (it is gitignored, not cleaned up), so its presence
|
|
365
|
+
* means "this task WAS dispatched", independent of whether any lock or slot survives today.
|
|
366
|
+
*/
|
|
367
|
+
hasAttemptDir: (taskId: string): boolean => fs.existsSync(path.join(dispatchDir, taskId)),
|
|
368
|
+
// T-8 defect 3: the durable enqueue-time marker, filesystem-backed like everything else under
|
|
369
|
+
// `.backlog/.dispatch/` — see `attempt.ts`'s own JSDoc on both functions.
|
|
370
|
+
hasCloseAttemptBeenEnqueued: (taskId: string): boolean =>
|
|
371
|
+
hasCloseAttemptBeenEnqueued(dispatchDir, taskId),
|
|
372
|
+
markCloseAttemptEnqueued: (taskId: string): void =>
|
|
373
|
+
markCloseAttemptEnqueued(dispatchDir, taskId),
|
|
374
|
+
// T-68: feeds the «Registro de ejecución» block's "Fallos de entorno" and "Resultado del
|
|
375
|
+
// intento 1" fields — `classifyStreamOutcome` is the SAME classifier `entry.ts` already runs
|
|
376
|
+
// live on this same file right after the worker exits (render.ts), read back here after the
|
|
377
|
+
// fact rather than re-implemented.
|
|
378
|
+
attemptStreamOutcome: (taskId: string, attempt: number): string | null => {
|
|
379
|
+
const streamPath = path.join(dispatchDir, taskId, `intento-${attempt}`, 'stream.jsonl');
|
|
380
|
+
if (!fs.existsSync(streamPath)) {
|
|
381
|
+
return null;
|
|
382
|
+
}
|
|
383
|
+
const lines = fs
|
|
384
|
+
.readFileSync(streamPath, 'utf8')
|
|
385
|
+
.split('\n')
|
|
386
|
+
.filter((line) => line.length > 0);
|
|
387
|
+
return classifyStreamOutcome(lines);
|
|
388
|
+
},
|
|
389
|
+
// T-68 fix 2: reuses `reviewer.ts`'s OWN parser rather than a second implementation — the exact
|
|
390
|
+
// same text `runReviewer`'s `writeReview` callback already persisted to this file.
|
|
391
|
+
attemptReviewVerdict: (taskId: string, attempt: number): string | null => {
|
|
392
|
+
const reviewPath = path.join(dispatchDir, taskId, `intento-${attempt}`, 'review.md');
|
|
393
|
+
if (!fs.existsSync(reviewPath)) {
|
|
394
|
+
return null;
|
|
395
|
+
}
|
|
396
|
+
return parseReviewerVerdict(fs.readFileSync(reviewPath, 'utf8'));
|
|
397
|
+
},
|
|
398
|
+
};
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
/** The `gh` runner shape, injected so `realGh` is testable without a real `gh` or a real repo. */
|
|
402
|
+
type GhRunner = (
|
|
403
|
+
command: string,
|
|
404
|
+
args: string[],
|
|
405
|
+
options: { cwd: string; env?: Record<string, string> },
|
|
406
|
+
) => string;
|
|
407
|
+
|
|
408
|
+
/**
|
|
409
|
+
* Builds a `GhRunner` bounded at `timeoutMs` — the same injection seam `realGit`'s
|
|
410
|
+
* `RealGitDeps.timeoutMs` uses, so a test binds a short bound without touching the production
|
|
411
|
+
* default (T-97).
|
|
412
|
+
*/
|
|
413
|
+
export function makeGhRunner(timeoutMs: number): GhRunner {
|
|
414
|
+
return (command, args, options) =>
|
|
415
|
+
execFileSync(command, args, {
|
|
416
|
+
cwd: options.cwd,
|
|
417
|
+
env: options.env,
|
|
418
|
+
encoding: 'utf8',
|
|
419
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
420
|
+
timeout: timeoutMs,
|
|
421
|
+
});
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
const defaultGhRunner: GhRunner = makeGhRunner(EXTERNAL_CALL_TIMEOUT_MS);
|
|
425
|
+
|
|
426
|
+
/** The four env keys `gh` itself prefers over its own keyring login, in that order of precedence
|
|
427
|
+
* (measured against `gh`'s own auth resolution: an enterprise token wins for an enterprise host,
|
|
428
|
+
* `GH_TOKEN`/`GITHUB_TOKEN` otherwise). `ghEnv` does not need to reproduce that order — it only
|
|
429
|
+
* needs every one of them gone. */
|
|
430
|
+
const GH_ENV_DENY = new Set([
|
|
431
|
+
'GITHUB_TOKEN',
|
|
432
|
+
'GH_TOKEN',
|
|
433
|
+
'GH_ENTERPRISE_TOKEN',
|
|
434
|
+
'GITHUB_ENTERPRISE_TOKEN',
|
|
435
|
+
]);
|
|
436
|
+
|
|
437
|
+
/**
|
|
438
|
+
* The parent environment minus the four keys `gh` prefers over its own keyring login.
|
|
439
|
+
*
|
|
440
|
+
* Measured defect (T-5, 2026-09-07, real e2e, close attempt 2): the dispatcher's own `gh pr view
|
|
441
|
+
* task/T-5` failed with `HTTP 401: Bad credentials`. The reconciler process inherits the developer
|
|
442
|
+
* shell's `GITHUB_TOKEN`, which is stale on this machine, and `gh` prefers an env token over its
|
|
443
|
+
* keyring login even when that login is valid (`GITHUB_TOKEN= gh auth status` on the same machine
|
|
444
|
+
* showed "Logged in to github.com account … (keyring)" throughout). Workers already run with every
|
|
445
|
+
* credential stripped (`launch.ts`'s `sanitizeInheritedEnv`); this is the same fix for the
|
|
446
|
+
* dispatcher's OWN `gh` calls, deliberately narrower: unlike `reviewerEnv` — which the reviewer
|
|
447
|
+
* subprocess can afford, since it never touches `gh` — this keeps every OTHER key (HOME, for `gh`'s
|
|
448
|
+
* own config; any unrelated token another tool in the same shell happens to export) so a dispatcher
|
|
449
|
+
* `gh` call loses nothing it did not need to lose.
|
|
450
|
+
*/
|
|
451
|
+
export function ghEnv(parentEnv: NodeJS.ProcessEnv = process.env): Record<string, string> {
|
|
452
|
+
const env: Record<string, string> = {};
|
|
453
|
+
for (const [key, value] of Object.entries(parentEnv)) {
|
|
454
|
+
if (value === undefined || GH_ENV_DENY.has(key)) {
|
|
455
|
+
continue;
|
|
456
|
+
}
|
|
457
|
+
env[key] = value;
|
|
458
|
+
}
|
|
459
|
+
return env;
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
/**
|
|
463
|
+
* Strips the `undefined` values `NodeJS.ProcessEnv` allows, so an env built from it (like
|
|
464
|
+
* `realBacklog`'s `{...process.env, BACKLOG_DISPATCH_ACTIVE: '1'}`) satisfies `RunInSlot`'s
|
|
465
|
+
* stricter `Record<string, string>` — unlike `ghEnv`, nothing here is DENIED, since a board write
|
|
466
|
+
* carries none of `gh`'s credential concerns.
|
|
467
|
+
*/
|
|
468
|
+
function definedEnv(env: NodeJS.ProcessEnv): Record<string, string> {
|
|
469
|
+
const result: Record<string, string> = {};
|
|
470
|
+
for (const [key, value] of Object.entries(env)) {
|
|
471
|
+
if (value !== undefined) {
|
|
472
|
+
result[key] = value;
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
return result;
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
/**
|
|
479
|
+
* `gh` resolves the repository from the CWD it runs in, so `cwd` is not optional here: without it
|
|
480
|
+
* the call inherited whatever directory launched the reconciler — under launchd, `/` — and `gh pr
|
|
481
|
+
* view` then answered about no repository at all (or, from a nested checkout, about the wrong one).
|
|
482
|
+
* `false` is the answer either way, so the failure is silent: a merged subtask never moves to `Done`
|
|
483
|
+
* and its parent never derives.
|
|
484
|
+
*/
|
|
485
|
+
export function realGh(repoRoot: string, run: GhRunner = defaultGhRunner) {
|
|
486
|
+
return {
|
|
487
|
+
isPrMerged: (branch: string): boolean => {
|
|
488
|
+
try {
|
|
489
|
+
const output = run('gh', ['pr', 'view', branch, '--json', 'state,mergedAt'], {
|
|
490
|
+
cwd: repoRoot,
|
|
491
|
+
env: ghEnv(),
|
|
492
|
+
});
|
|
493
|
+
const parsed = JSON.parse(output) as { state?: string; mergedAt?: string | null };
|
|
494
|
+
return parsed.state === 'MERGED' && Boolean(parsed.mergedAt);
|
|
495
|
+
} catch {
|
|
496
|
+
return false; // no PR yet, gh unavailable, or not authenticated — fail closed.
|
|
497
|
+
}
|
|
498
|
+
},
|
|
499
|
+
/**
|
|
500
|
+
* T-8 point 3: the branch's most recent PR state (`OPEN`, `CLOSED`, `MERGED`), or `null` when
|
|
501
|
+
* `gh` reports no PR at all (or is unavailable/unauthenticated — the same fail-closed reading
|
|
502
|
+
* `isPrMerged` gives). Feeds `maintenance.ts`'s step 3b revert comment, so a person can tell a
|
|
503
|
+
* merged PR the sweep has not yet caught up to apart from one GitHub genuinely never merged.
|
|
504
|
+
*/
|
|
505
|
+
prState: (branch: string): string | null => {
|
|
506
|
+
try {
|
|
507
|
+
const output = run('gh', ['pr', 'view', branch, '--json', 'state'], {
|
|
508
|
+
cwd: repoRoot,
|
|
509
|
+
env: ghEnv(),
|
|
510
|
+
});
|
|
511
|
+
const parsed = JSON.parse(output) as { state?: string };
|
|
512
|
+
return parsed.state ?? null;
|
|
513
|
+
} catch {
|
|
514
|
+
return null;
|
|
515
|
+
}
|
|
516
|
+
},
|
|
517
|
+
/**
|
|
518
|
+
* T-68: the branch's PR number, or `null` on the same fail-closed conditions `prState` reads
|
|
519
|
+
* (no PR, `gh` unavailable/unauthenticated) — see `MaintenanceGh.prNumber`'s own JSDoc for who
|
|
520
|
+
* reads this and why.
|
|
521
|
+
*/
|
|
522
|
+
prNumber: (branch: string): number | null => {
|
|
523
|
+
try {
|
|
524
|
+
const output = run('gh', ['pr', 'view', branch, '--json', 'number'], {
|
|
525
|
+
cwd: repoRoot,
|
|
526
|
+
env: ghEnv(),
|
|
527
|
+
});
|
|
528
|
+
const parsed = JSON.parse(output) as { number?: number };
|
|
529
|
+
return typeof parsed.number === 'number' ? parsed.number : null;
|
|
530
|
+
} catch {
|
|
531
|
+
return null;
|
|
532
|
+
}
|
|
533
|
+
},
|
|
534
|
+
/**
|
|
535
|
+
* T-8 defect 1's tri-state answer — see `MaintenanceGh.mergedState`'s own JSDoc for why this
|
|
536
|
+
* cannot reuse `isPrMerged`'s boolean or `prState`'s `string | null` for the decision.
|
|
537
|
+
*
|
|
538
|
+
* Deliberately asks `gh pr list --head <branch> --state all`, NOT `gh pr view <branch>`: `pr
|
|
539
|
+
* view` throws identically whether there is no PR for the branch, the `gh` binary is missing,
|
|
540
|
+
* the token expired, or the network is down — the exact ambiguity `isPrMerged` inherits. `pr
|
|
541
|
+
* list` instead SUCCEEDS with an empty array when a branch genuinely has no PR — a real,
|
|
542
|
+
* confirmed answer (`not-merged`) — and only THROWS when the call itself could not run to
|
|
543
|
+
* completion, which is the only thing that becomes `unknown`.
|
|
544
|
+
*/
|
|
545
|
+
mergedState: (branch: string): PrMergeState => {
|
|
546
|
+
try {
|
|
547
|
+
const output = run(
|
|
548
|
+
'gh',
|
|
549
|
+
[
|
|
550
|
+
'pr',
|
|
551
|
+
'list',
|
|
552
|
+
'--head',
|
|
553
|
+
branch,
|
|
554
|
+
'--state',
|
|
555
|
+
'all',
|
|
556
|
+
'--json',
|
|
557
|
+
'state,mergedAt',
|
|
558
|
+
'--limit',
|
|
559
|
+
'1',
|
|
560
|
+
],
|
|
561
|
+
{ cwd: repoRoot, env: ghEnv() },
|
|
562
|
+
);
|
|
563
|
+
const pulls = JSON.parse(output) as Array<{ state?: string; mergedAt?: string | null }>;
|
|
564
|
+
if (pulls.length === 0) {
|
|
565
|
+
return PR_MERGE_STATE.NOT_MERGED; // confirmed: no PR was ever opened for this branch.
|
|
566
|
+
}
|
|
567
|
+
const [pr] = pulls;
|
|
568
|
+
return pr.state === 'MERGED' && Boolean(pr.mergedAt)
|
|
569
|
+
? PR_MERGE_STATE.MERGED
|
|
570
|
+
: PR_MERGE_STATE.NOT_MERGED;
|
|
571
|
+
} catch {
|
|
572
|
+
// gh binary missing, auth expired, network down — an unanswerable question, never "not merged".
|
|
573
|
+
return PR_MERGE_STATE.UNKNOWN;
|
|
574
|
+
}
|
|
575
|
+
},
|
|
576
|
+
};
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
/**
|
|
580
|
+
* Renders a failed `execFileSync` into a message that carries the child's actual stderr, not just
|
|
581
|
+
* the generic "Command failed: <cmd>" `error.message` gives on its own.
|
|
582
|
+
*
|
|
583
|
+
* Measured defect (T-5, 2026-09-07): every dispatcher-owned `backlog`/`git` write ran with stderr
|
|
584
|
+
* explicitly silenced (`stdio: 'ignore'`, or `['ignore', 'pipe', 'ignore']`), so a failed
|
|
585
|
+
* `-s In Progress` edit surfaced as exit 1 with `stderr: null` — the one piece of text that would
|
|
586
|
+
* have named the real cause (a second reconciler pass already touching the same task) was thrown
|
|
587
|
+
* away before it ever reached a `Blocked` comment or a log line. Capped at 500 chars: a comment or
|
|
588
|
+
* a log line is not the place for a multi-KB stack dump.
|
|
589
|
+
*/
|
|
590
|
+
export function describeExecFailure(error: unknown): string {
|
|
591
|
+
const failure = error as { message?: string; stderr?: Buffer | string | null } | null;
|
|
592
|
+
const message = failure?.message ?? String(error);
|
|
593
|
+
const stderrText = Buffer.isBuffer(failure?.stderr)
|
|
594
|
+
? failure.stderr.toString('utf8')
|
|
595
|
+
: typeof failure?.stderr === 'string'
|
|
596
|
+
? failure.stderr
|
|
597
|
+
: '';
|
|
598
|
+
const trimmed = stderrText.trim();
|
|
599
|
+
return trimmed ? `${message} — stderr: ${trimmed.slice(0, 500)}` : message;
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
/**
|
|
603
|
+
* Backlog.md's own wording for "another process holds this task's lock right now" (verified
|
|
604
|
+
* against the real CLI's stderr, T-5's measured e2e run). Matched case-insensitively against the
|
|
605
|
+
* FULL failure message — `describeExecFailure` folds stderr into it — never against a raw
|
|
606
|
+
* `error.message` alone, which for a silenced `execFileSync` carries only "Command failed: …".
|
|
607
|
+
*/
|
|
608
|
+
const BOARD_BUSY_PATTERN = /being modified by another process/i;
|
|
609
|
+
|
|
610
|
+
/**
|
|
611
|
+
* Git's own wording for "the remote ref this push tried to delete does not exist" (verified against
|
|
612
|
+
* the real CLI's stderr — the existing `realGit — deleteRemoteBranch` test fixture below). Matched
|
|
613
|
+
* against the failure's `.message` — real `execFileSync` failures fold stderr into that string via
|
|
614
|
+
* `describeExecFailure`'s wrapping `run`, and an injected test `run` throws the raw string directly,
|
|
615
|
+
* so one pattern covers both.
|
|
616
|
+
*/
|
|
617
|
+
const REMOTE_REF_ALREADY_GONE_PATTERN = /remote ref does not exist/i;
|
|
618
|
+
|
|
619
|
+
/**
|
|
620
|
+
* Git's own FIXED wording for "this ref does not resolve to anything" (`git rev-parse --verify
|
|
621
|
+
* <ref>`, deliberately without `--quiet` — see `branchHasUnmergedCommits`'s own comment for why).
|
|
622
|
+
* Measured directly (2026-09-08): a genuinely absent ref fails with exactly this text, exit 128; a
|
|
623
|
+
* missing `git` binary fails with `spawnSync git ENOENT` (no such text, no `Command failed:`
|
|
624
|
+
* prefix at all); a broken checkout (`fatal: not a git repository…`) fails with DIFFERENT text.
|
|
625
|
+
* Matched so `branchHasUnmergedCommits`'s first check can tell a confirmed-absent remote-tracking
|
|
626
|
+
* ref (safe: nothing survives on the remote to lose) apart from any OTHER failure of the same
|
|
627
|
+
* call (S2, 2026-09-08: the previous version read every failure of this call the same way,
|
|
628
|
+
* silently authorising a delete on a question it never actually answered).
|
|
629
|
+
*/
|
|
630
|
+
const BRANCH_REF_NOT_FOUND_PATTERN = /needed a single revision/i;
|
|
631
|
+
|
|
632
|
+
export interface BoardWriteRetryOptions {
|
|
633
|
+
/** Total tries, including the first one. Real callers pass 6. */
|
|
634
|
+
attempts: number;
|
|
635
|
+
/** Linear backoff step: the Nth failed attempt sleeps `baseDelayMs * N` before the next try. */
|
|
636
|
+
baseDelayMs: number;
|
|
637
|
+
/** Injected by tests so a retry never blocks on a real timer. Defaults to a blocking real sleep. */
|
|
638
|
+
sleep?: (ms: number) => void;
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
export const BOARD_WRITE_RETRY_DEFAULTS: BoardWriteRetryOptions = { attempts: 6, baseDelayMs: 250 };
|
|
642
|
+
|
|
643
|
+
/** Blocks the calling thread — the same pattern `slots.ts`'s registry lock retry uses, and for the
|
|
644
|
+
* same reason: the reconciler has nothing useful to do while Backlog.md's own lock is held, and the
|
|
645
|
+
* alternative is making every dispatcher-owned write asynchronous. */
|
|
646
|
+
function defaultBlockingSleep(ms: number): void {
|
|
647
|
+
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
/**
|
|
651
|
+
* Retries a dispatcher-owned `backlog` WRITE when Backlog.md's per-task lock is held by someone
|
|
652
|
+
* else at that exact instant — a person editing the same task, or a second reconciler pass.
|
|
653
|
+
*
|
|
654
|
+
* Measured defect (T-5, 2026-09-07, real e2e): the dispatcher's own `task edit T-5 -s In Progress`
|
|
655
|
+
* collided with the lock `onStatusChange` holds for the length of its callback and failed outright
|
|
656
|
+
* with `T-5 is being modified by another process; retry if appropriate.` The callback line is now
|
|
657
|
+
* fixed to detach its stdio so the hold is brief, but the dispatcher must still tolerate the
|
|
658
|
+
* instant a person or a second reconciler holds it — hence this bounded, linear-backoff retry.
|
|
659
|
+
*
|
|
660
|
+
* `command` names the call for the retry log line ONLY; it never reaches a shell. Any failure whose
|
|
661
|
+
* message does NOT match Backlog.md's own busy wording is not a contention symptom and rethrows at
|
|
662
|
+
* once — retrying it would only delay the real error behind a fixed backoff. After the last attempt
|
|
663
|
+
* the ORIGINAL error is rethrown untouched, so a caller (or a human reading the comment/log it
|
|
664
|
+
* produced) still sees the real cause, not a synthetic "gave up" wrapper.
|
|
665
|
+
*/
|
|
666
|
+
export function withBoardWriteRetry<T>(
|
|
667
|
+
command: string,
|
|
668
|
+
run: () => T,
|
|
669
|
+
options: BoardWriteRetryOptions = BOARD_WRITE_RETRY_DEFAULTS,
|
|
670
|
+
): T {
|
|
671
|
+
const sleep = options.sleep ?? defaultBlockingSleep;
|
|
672
|
+
// A non-positive `attempts` made the loop condition false on iteration 1: `run()` never executed,
|
|
673
|
+
// `lastError` stayed `undefined`, and `throw lastError` threw `undefined` instead of a real error —
|
|
674
|
+
// hiding whatever misconfiguration produced the bad count behind a useless stack trace. Guaranteed
|
|
675
|
+
// at least one real attempt runs, the same way every other bounded-retry helper in this file does.
|
|
676
|
+
const attempts = Math.max(1, options.attempts);
|
|
677
|
+
let lastError: unknown;
|
|
678
|
+
for (let attempt = 1; attempt <= attempts; attempt += 1) {
|
|
679
|
+
try {
|
|
680
|
+
return run();
|
|
681
|
+
} catch (error) {
|
|
682
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
683
|
+
if (!BOARD_BUSY_PATTERN.test(message)) {
|
|
684
|
+
throw error;
|
|
685
|
+
}
|
|
686
|
+
lastError = error;
|
|
687
|
+
if (attempt === attempts) {
|
|
688
|
+
break;
|
|
689
|
+
}
|
|
690
|
+
console.error(`dispatch.ts: board busy, retry ${attempt}/${attempts} for ${command}`);
|
|
691
|
+
sleep(options.baseDelayMs * attempt);
|
|
692
|
+
}
|
|
693
|
+
}
|
|
694
|
+
throw lastError;
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
export interface RealBacklogDeps {
|
|
698
|
+
/**
|
|
699
|
+
* Injected by tests so no `backlog` CLI ever runs; the default wraps a real, stderr-capturing
|
|
700
|
+
* `execFileSync` and is what tests assert `env.BACKLOG_DISPATCH_ACTIVE` against.
|
|
701
|
+
*/
|
|
702
|
+
run?: (args: string[], options: { cwd: string; env: NodeJS.ProcessEnv }) => void;
|
|
703
|
+
/**
|
|
704
|
+
* Injected by tests so `readDescription` is testable without a real `backlog` CLI. The default
|
|
705
|
+
* wraps `viewTask` — the same `backlog task view --plain` every other reader here goes through —
|
|
706
|
+
* and, unlike `readTaskText`, is NEVER wrapped in a try/catch: `readDescription` needs a failed
|
|
707
|
+
* read to be a THROW, not a swallowed `''`, so a maintenance pass or the graph CLI can tell "the
|
|
708
|
+
* board could not be read" apart from "this task's description is genuinely empty".
|
|
709
|
+
*/
|
|
710
|
+
view?: (taskId: string) => string;
|
|
711
|
+
/** Overrides `withBoardWriteRetry`'s defaults — tests inject a synchronous, instant `sleep`. */
|
|
712
|
+
retry?: Partial<BoardWriteRetryOptions>;
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
const defaultBacklogRun: NonNullable<RealBacklogDeps['run']> = (args, options) => {
|
|
716
|
+
try {
|
|
717
|
+
execFileSync('backlog', args, {
|
|
718
|
+
cwd: options.cwd,
|
|
719
|
+
env: options.env,
|
|
720
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
721
|
+
timeout: EXTERNAL_CALL_TIMEOUT_MS,
|
|
722
|
+
});
|
|
723
|
+
} catch (error) {
|
|
724
|
+
throw new Error(`dispatch.ts: backlog ${args.join(' ')} failed: ${describeExecFailure(error)}`);
|
|
725
|
+
}
|
|
726
|
+
};
|
|
727
|
+
|
|
728
|
+
/**
|
|
729
|
+
* Every write here is a DISPATCHER-OWNED status/comment edit, and every one of them now runs with
|
|
730
|
+
* `BACKLOG_DISPATCH_ACTIVE='1'` in its env — not because this process itself must recognize its own
|
|
731
|
+
* writes (it already tracks that via the per-task lock and the single-flight lock), but because the
|
|
732
|
+
* `onStatusChange` callback THIS EDIT FIRES inherits whatever env the `backlog` CLI child ran with.
|
|
733
|
+
* Without the sentinel, that nested invocation had no way to tell a dispatcher-owned write apart
|
|
734
|
+
* from a genuine human one — see `entry.ts`'s `isDispatcherOwnedCallback`, and the measured T-5
|
|
735
|
+
* defect in `dispatch.test.ts`'s "the dispatcher-owned write sentinel" suite.
|
|
736
|
+
*
|
|
737
|
+
* Every write also goes through `withBoardWriteRetry`: Backlog.md holds the SAME per-task lock a
|
|
738
|
+
* person or a second reconciler pass can be holding at this exact instant — see that function's own
|
|
739
|
+
* header for the measured T-5 defect this closes.
|
|
740
|
+
*/
|
|
741
|
+
export function realBacklog(mainCheckoutPath: string, deps: RealBacklogDeps = {}) {
|
|
742
|
+
const run = deps.run ?? defaultBacklogRun;
|
|
743
|
+
const view = deps.view ?? ((taskId: string) => viewTask(mainCheckoutPath, taskId));
|
|
744
|
+
const retryOptions: BoardWriteRetryOptions = { ...BOARD_WRITE_RETRY_DEFAULTS, ...deps.retry };
|
|
745
|
+
const ownedWrite = (args: string[]): void =>
|
|
746
|
+
withBoardWriteRetry(
|
|
747
|
+
`backlog ${args.join(' ')}`,
|
|
748
|
+
() =>
|
|
749
|
+
run(args, { cwd: mainCheckoutPath, env: { ...process.env, BACKLOG_DISPATCH_ACTIVE: '1' } }),
|
|
750
|
+
retryOptions,
|
|
751
|
+
);
|
|
752
|
+
|
|
753
|
+
return {
|
|
754
|
+
setStatus: (taskId: string, status: TaskStatus, comment?: string): void => {
|
|
755
|
+
const args = ['task', 'edit', taskId, '-s', status];
|
|
756
|
+
if (comment) {
|
|
757
|
+
args.push('--comment', comment);
|
|
758
|
+
}
|
|
759
|
+
ownedWrite(args);
|
|
760
|
+
},
|
|
761
|
+
comment: (taskId: string, comment: string): void => {
|
|
762
|
+
ownedWrite(['task', 'edit', taskId, '--comment', comment]);
|
|
763
|
+
},
|
|
764
|
+
// T-68: the «Registro de ejecución» block's only writer — `--append-notes` is the one field
|
|
765
|
+
// the `Queued` scope freeze (`catalyst-backlog/SKILL.md` §11) leaves open on a `Done` task.
|
|
766
|
+
appendNotes: (taskId: string, notes: string): void => {
|
|
767
|
+
ownedWrite(['task', 'edit', taskId, '--append-notes', notes]);
|
|
768
|
+
},
|
|
769
|
+
// T-68 fix 4: reuses the SAME `backlog task view --plain` reader every other close-time text
|
|
770
|
+
// read already goes through (`readTaskText`, hoisted below), but returns ONLY the notes
|
|
771
|
+
// section (`task-view.ts`'s `notesRegion`) — the whole view's DESCRIPTION, AC or a COMMENT can
|
|
772
|
+
// legitimately contain text that reads like the heading (a worker quoting the skill, a person
|
|
773
|
+
// pasting an example), and `close.ts`'s `hasExecutionRecordBlock` has no way to tell that apart
|
|
774
|
+
// from the real block once handed the whole text.
|
|
775
|
+
readNotes: (taskId: string): string | null => {
|
|
776
|
+
const notes = notesRegion(readTaskText(mainCheckoutPath, taskId));
|
|
777
|
+
return notes.length > 0 ? notes : null;
|
|
778
|
+
},
|
|
779
|
+
// T-113: the graph-holder refresh's (maintenance.ts step 5b) only writer/reader — the same
|
|
780
|
+
// `decideGraphWrite` decision `graph.ts`'s `pnpm backlog:graph --write` uses.
|
|
781
|
+
setDescription: (taskId: string, description: string): void => {
|
|
782
|
+
ownedWrite(['task', 'edit', taskId, '--desc', description]);
|
|
783
|
+
},
|
|
784
|
+
// Deliberately reads through `view` directly, never through `readTaskText`: a failed board read
|
|
785
|
+
// must THROW here — see `RealBacklogDeps.view`'s doc comment — so step 5b's try/catch (and the
|
|
786
|
+
// graph CLI's own) can tell a failed read apart from a description that is genuinely empty.
|
|
787
|
+
readDescription: (taskId: string): string | null => {
|
|
788
|
+
const description = parseDescription(view(taskId));
|
|
789
|
+
return description.length > 0 ? description : null;
|
|
790
|
+
},
|
|
791
|
+
};
|
|
792
|
+
}
|
|
793
|
+
|
|
794
|
+
/**
|
|
795
|
+
* The worktree slot currently assigned to `taskId`, or `null` when no slot holds it.
|
|
796
|
+
*
|
|
797
|
+
* `null` is a real answer the caller MUST handle, never a directory to fall back to. Falling back
|
|
798
|
+
* to the main checkout pointed every close runner at the developer's own working tree: a `git add
|
|
799
|
+
* -A` + WIP commit over whatever was in progress there, a scope diff of somebody else's changes,
|
|
800
|
+
* and a `gh pr create` off the main checkout's branch.
|
|
801
|
+
*/
|
|
802
|
+
export function findSlotPathForTask(mainCheckoutPath: string, taskId: string): string | null {
|
|
803
|
+
const slotsPath = path.join(mainCheckoutPath, DISPATCH_SUBDIR, 'slots.json');
|
|
804
|
+
if (!fs.existsSync(slotsPath)) {
|
|
805
|
+
return null;
|
|
806
|
+
}
|
|
807
|
+
return slotPathForTask(JSON.parse(fs.readFileSync(slotsPath, 'utf8')) as SlotRegistry, taskId);
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
export interface RealGitDeps {
|
|
811
|
+
/** Injected by tests so no lookup ever reaches the real `slots.json` of a live checkout. */
|
|
812
|
+
slotPathFor?: (taskId: string) => string | null;
|
|
813
|
+
/** Injected by tests so no `git` ever runs; the default is a real, output-silenced `execFileSync`. */
|
|
814
|
+
run?: (command: string, args: string[], cwd: string) => void;
|
|
815
|
+
/** Bounds the default `run`'s `execFileSync` calls (T-97). Defaults to `EXTERNAL_CALL_TIMEOUT_MS`. */
|
|
816
|
+
timeoutMs?: number;
|
|
817
|
+
/**
|
|
818
|
+
* Injected by tests so no real `git status` runs when reading the `.backlog` dirt. Returns the
|
|
819
|
+
* SAME raw text `readBacklogStatusPorcelainZ` would (NUL-terminated records, `git status
|
|
820
|
+
* --porcelain=v1 -z` shape) — a test builds it with literal `\0` characters.
|
|
821
|
+
*/
|
|
822
|
+
readBacklogStatus?: (cwd: string) => string;
|
|
823
|
+
}
|
|
824
|
+
|
|
825
|
+
/**
|
|
826
|
+
* The closed set of top-level `.backlog` entries Backlog.md's own CLI manages outright (verified
|
|
827
|
+
* against a real `.backlog/` tree, T-78): every task, milestone, archived/completed record, and
|
|
828
|
+
* the tool's own config file. A path under one of these is the board's own output BY WHAT IT IS,
|
|
829
|
+
* never by when it appeared — see `isBoardManagedBacklogPath`.
|
|
830
|
+
*/
|
|
831
|
+
const STRUCTURAL_BACKLOG_ENTRIES = [
|
|
832
|
+
'.backlog/tasks',
|
|
833
|
+
'.backlog/milestones',
|
|
834
|
+
'.backlog/archive',
|
|
835
|
+
'.backlog/completed',
|
|
836
|
+
'.backlog/config.yml',
|
|
837
|
+
] as const;
|
|
838
|
+
|
|
839
|
+
/**
|
|
840
|
+
* `backlog doc create` (see `.claude/skills/catalyst-backlog/SKILL.md`) names its own output
|
|
841
|
+
* `doc-<N> - <title>.md` directly under `.backlog/docs/`; a task also gets a `.backlog/docs/t-<N>/`
|
|
842
|
+
* support folder, and likewise for a milestone's `m-<N>`. Matched against the FIRST path segment
|
|
843
|
+
* inside `docs/` only — a `docs/` entry with no such prefix (the 2026-09-14 incident's
|
|
844
|
+
* `biller-dataset/` folder, hand-created, no ID) is never the board's.
|
|
845
|
+
*/
|
|
846
|
+
const BACKLOG_DOC_ID_PATTERN = /^(doc|t|m)-\d+/;
|
|
847
|
+
|
|
848
|
+
/**
|
|
849
|
+
* True for a `.backlog` path Backlog.md's own schema produces — the closed set of entity
|
|
850
|
+
* directories it manages outright, plus a `docs/` entry named like the tool's own `doc-N`/`t-N`/
|
|
851
|
+
* `m-N` convention. Anything else under `.backlog` is content a human or another process put
|
|
852
|
+
* there, not the board — see T-78. Deliberately STRUCTURAL, not temporal: unlike a "was this dirty
|
|
853
|
+
* before the pass started" check, this never mistakes a board write left uncommitted by an earlier
|
|
854
|
+
* pass (`.backlog/config.yml` has `auto_commit: false`, so an interactive/MCP write routinely sits
|
|
855
|
+
* dirty until a LATER dispatcher pass sweeps it up) for something foreign.
|
|
856
|
+
*/
|
|
857
|
+
export function isBoardManagedBacklogPath(relPath: string): boolean {
|
|
858
|
+
if (
|
|
859
|
+
STRUCTURAL_BACKLOG_ENTRIES.some(
|
|
860
|
+
(entry) => relPath === entry || relPath.startsWith(`${entry}/`),
|
|
861
|
+
)
|
|
862
|
+
) {
|
|
863
|
+
return true;
|
|
864
|
+
}
|
|
865
|
+
const docsMatch = relPath.match(/^\.backlog\/docs\/([^/]+)/);
|
|
866
|
+
return docsMatch !== null && BACKLOG_DOC_ID_PATTERN.test(docsMatch[1]);
|
|
867
|
+
}
|
|
868
|
+
|
|
869
|
+
/**
|
|
870
|
+
* Parses `git status --porcelain=v1 -z -- .backlog` output (NUL-terminated records) into the paths
|
|
871
|
+
* it reports dirty. `-z` is not a cosmetic choice: the default (newline) format double-quotes and
|
|
872
|
+
* octal-escapes any non-ASCII byte in a path (measured against a real accented filename in this
|
|
873
|
+
* repo, T-78 D2) — several real task files here carry accents or an em-dash, and a later `git add`
|
|
874
|
+
* of a hand-reconstructed escaped path fails with "pathspec did not match any files", losing the
|
|
875
|
+
* WHOLE commit, not just that one file. `-z` prints raw, unescaped UTF-8 bytes instead.
|
|
876
|
+
*
|
|
877
|
+
* A rename or copy record (status code containing `R`/`C`) emits TWO consecutive NUL-terminated
|
|
878
|
+
* fields — the current path, then the original path it was renamed/copied from — instead of the
|
|
879
|
+
* `OLD -> NEW` arrow syntax the newline format uses. The second field carries no `XY ` status
|
|
880
|
+
* prefix of its own; it is discarded here since only the current path is ever a target for `git
|
|
881
|
+
* add`.
|
|
882
|
+
*/
|
|
883
|
+
export function parseBacklogStatusPorcelainZ(porcelain: string): string[] {
|
|
884
|
+
const fields = porcelain.split('\0').filter((field) => field.length > 0);
|
|
885
|
+
const paths: string[] = [];
|
|
886
|
+
for (let i = 0; i < fields.length; i++) {
|
|
887
|
+
const field = fields[i];
|
|
888
|
+
const statusCode = field.slice(0, 2);
|
|
889
|
+
paths.push(field.slice(3));
|
|
890
|
+
if (/[RC]/.test(statusCode)) {
|
|
891
|
+
i++; // consume and discard the ORIG_PATH field a rename/copy record appends.
|
|
892
|
+
}
|
|
893
|
+
}
|
|
894
|
+
return paths;
|
|
895
|
+
}
|
|
896
|
+
|
|
897
|
+
/**
|
|
898
|
+
* Real `git status --porcelain=v1 -z -- .backlog` in `cwd` — safe on a non-git directory (returns
|
|
899
|
+
* '').
|
|
900
|
+
*/
|
|
901
|
+
export function readBacklogStatusPorcelainZ(cwd: string): string {
|
|
902
|
+
try {
|
|
903
|
+
return execFileSync('git', ['status', '--porcelain=v1', '-z', '--', '.backlog'], {
|
|
904
|
+
cwd,
|
|
905
|
+
encoding: 'utf8',
|
|
906
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
907
|
+
timeout: EXTERNAL_CALL_TIMEOUT_MS,
|
|
908
|
+
});
|
|
909
|
+
} catch {
|
|
910
|
+
return '';
|
|
911
|
+
}
|
|
912
|
+
}
|
|
913
|
+
|
|
914
|
+
/**
|
|
915
|
+
* The dispatcher's own git side effects. Every `git commit` here runs `--no-verify`, and that is a
|
|
916
|
+
* safety property, not a convenience: a slot's `.husky/` hooks are FILES IN THE WORKING TREE the
|
|
917
|
+
* worker just wrote in, so committing its work through them would execute code the model under
|
|
918
|
+
* dispatch authored — with the dispatcher's own privileges. The board commit takes the same flag
|
|
919
|
+
* because it runs unattended in the main checkout, where a hook that stashes (lint-staged does)
|
|
920
|
+
* would reach into whatever a person has in progress there. Nothing is lost by it: both messages
|
|
921
|
+
* are machine-built and `close.test.ts` runs them through the repo's real commitlint.
|
|
922
|
+
*/
|
|
923
|
+
export function realGit(mainCheckoutPath: string, deps: RealGitDeps = {}): MaintenanceGit {
|
|
924
|
+
const slotPathFor =
|
|
925
|
+
deps.slotPathFor ??
|
|
926
|
+
((taskId: string): string | null => findSlotPathForTask(mainCheckoutPath, taskId));
|
|
927
|
+
const resolveSlotPath = (branch: string): string | null =>
|
|
928
|
+
slotPathFor(branch.replace(/^task\//, ''));
|
|
929
|
+
const run =
|
|
930
|
+
deps.run ??
|
|
931
|
+
((command, args, cwd) => {
|
|
932
|
+
try {
|
|
933
|
+
execFileSync(command, args, {
|
|
934
|
+
cwd,
|
|
935
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
936
|
+
timeout: deps.timeoutMs ?? EXTERNAL_CALL_TIMEOUT_MS,
|
|
937
|
+
});
|
|
938
|
+
} catch (error) {
|
|
939
|
+
throw new Error(
|
|
940
|
+
`dispatch.ts: ${command} ${args.join(' ')} failed: ${describeExecFailure(error)}`,
|
|
941
|
+
);
|
|
942
|
+
}
|
|
943
|
+
});
|
|
944
|
+
// Shared by `hasPendingBacklogChanges` and `commitBacklogChanges` (D7): the two are only ever
|
|
945
|
+
// called back-to-back, immediately, for the SAME pass's single board-commit step (see
|
|
946
|
+
// `maintenance.ts` step 6) — nothing mutates `.backlog` between them — so caching the one read
|
|
947
|
+
// for this `realGit()` instance's lifetime removes a redundant `git status` without risking
|
|
948
|
+
// staleness. A fresh instance (and therefore a fresh cache) is built once per pass.
|
|
949
|
+
let cachedStatus: string | null = null;
|
|
950
|
+
const readStatus = (): string => {
|
|
951
|
+
if (cachedStatus === null) {
|
|
952
|
+
cachedStatus = (deps.readBacklogStatus ?? readBacklogStatusPorcelainZ)(mainCheckoutPath);
|
|
953
|
+
}
|
|
954
|
+
return cachedStatus;
|
|
955
|
+
};
|
|
956
|
+
|
|
957
|
+
return {
|
|
958
|
+
hasPendingBacklogChanges: (): boolean => {
|
|
959
|
+
// A cheap gate, deliberately unfiltered: "something is dirty under .backlog, ours or
|
|
960
|
+
// foreign" is all this answers. The filtering that tells the two apart lives only in
|
|
961
|
+
// `commitBacklogChanges` below, which is the one place that actually stages and commits.
|
|
962
|
+
return readStatus().trim().length > 0;
|
|
963
|
+
},
|
|
964
|
+
commitBacklogChanges: (message: string): void => {
|
|
965
|
+
const current = parseBacklogStatusPorcelainZ(readStatus());
|
|
966
|
+
const foreignPaths = current.filter((p) => !isBoardManagedBacklogPath(p));
|
|
967
|
+
if (foreignPaths.length > 0) {
|
|
968
|
+
// Design decision (T-78): ignore + log, never fail the pass — a stray file under .backlog
|
|
969
|
+
// must not park the whole board. Never silent either: this is the one place that decides,
|
|
970
|
+
// and it always says so.
|
|
971
|
+
console.error(
|
|
972
|
+
`dispatch.ts: ${foreignPaths.length} file(s) under .backlog are not part of the board's ` +
|
|
973
|
+
`own schema (tasks/milestones/archive/completed/config.yml, or an ID-prefixed docs/ ` +
|
|
974
|
+
`entry); excluding them from the sync commit: ${foreignPaths.join(', ')}`,
|
|
975
|
+
);
|
|
976
|
+
}
|
|
977
|
+
// Structural entries are added WHOLE (by directory/file, never a reconstructed individual
|
|
978
|
+
// filename): git resolves the pathspec itself, so a name with an accent or an em-dash never
|
|
979
|
+
// has to survive a round trip through our own parsing (T-78 D2), and an entirely-untracked
|
|
980
|
+
// directory — which `git status` collapses to ONE line for the whole directory, never one
|
|
981
|
+
// per file inside it (T-78 D3) — is still named correctly by its directory entry.
|
|
982
|
+
const dirtyStructural = STRUCTURAL_BACKLOG_ENTRIES.filter((entry) =>
|
|
983
|
+
current.some((p) => p === entry || p.startsWith(`${entry}/`)),
|
|
984
|
+
);
|
|
985
|
+
// `docs/` is not added wholesale — real board docs and foreign content share that directory
|
|
986
|
+
// (T-78), so only the individual ID-prefixed entries dirty right now are named.
|
|
987
|
+
const dirtyOwnDocs = current.filter(
|
|
988
|
+
(p) => p.startsWith('.backlog/docs/') && isBoardManagedBacklogPath(p),
|
|
989
|
+
);
|
|
990
|
+
const addTargets = [...dirtyStructural, ...dirtyOwnDocs];
|
|
991
|
+
if (addTargets.length === 0) {
|
|
992
|
+
return; // nothing the board's own schema produced — a foreign file alone never triggers a commit.
|
|
993
|
+
}
|
|
994
|
+
run('git', ['add', '--', ...addTargets], mainCheckoutPath);
|
|
995
|
+
// The trailing pathspec bounds the commit to exactly what was just staged above, so nothing
|
|
996
|
+
// a person had ALREADY staged in the main checkout (this runs unattended, in a shared
|
|
997
|
+
// checkout) rides along inside this machine-built commit.
|
|
998
|
+
run('git', ['commit', '-m', message, '--no-verify', '--', ...addTargets], mainCheckoutPath);
|
|
999
|
+
},
|
|
1000
|
+
saveWipAndPush: (branch: string) => {
|
|
1001
|
+
const cwd = resolveSlotPath(branch);
|
|
1002
|
+
if (cwd === null) {
|
|
1003
|
+
// No slot holds this task, so there is no work to save — and running `git add -A` in the
|
|
1004
|
+
// main checkout would commit whatever a person has in progress there.
|
|
1005
|
+
console.error(`dispatch.ts: no slot holds ${branch}; nothing to save.`);
|
|
1006
|
+
return { pushSucceeded: false };
|
|
1007
|
+
}
|
|
1008
|
+
const taskId = branch.replace(/^task\//, '');
|
|
1009
|
+
try {
|
|
1010
|
+
run('git', ['add', '-A'], cwd);
|
|
1011
|
+
run(
|
|
1012
|
+
'git',
|
|
1013
|
+
['commit', '-m', buildWipCommitMessage(taskId), '--allow-empty', '--no-verify'],
|
|
1014
|
+
cwd,
|
|
1015
|
+
);
|
|
1016
|
+
run('git', ['push', 'origin', branch], cwd);
|
|
1017
|
+
return { pushSucceeded: true };
|
|
1018
|
+
} catch {
|
|
1019
|
+
return { pushSucceeded: false };
|
|
1020
|
+
}
|
|
1021
|
+
},
|
|
1022
|
+
detachSlot: (slotPath: string): void =>
|
|
1023
|
+
detachSlot(slotPath, (args, at) => run('git', args, at)),
|
|
1024
|
+
branchExists: (branch: string): boolean => {
|
|
1025
|
+
// The local ref first — cheap, no network. `--quiet` suppresses the "not a valid ref" noise
|
|
1026
|
+
// `run`'s error wrapper would otherwise carry, and a throw here means only "no such local
|
|
1027
|
+
// ref", never a reason to stop looking: the remote is checked next.
|
|
1028
|
+
try {
|
|
1029
|
+
run('git', ['rev-parse', '--verify', '--quiet', `refs/heads/${branch}`], mainCheckoutPath);
|
|
1030
|
+
return true;
|
|
1031
|
+
} catch {
|
|
1032
|
+
// fall through to the remote check below.
|
|
1033
|
+
}
|
|
1034
|
+
try {
|
|
1035
|
+
run('git', ['ls-remote', '--exit-code', '--heads', 'origin', branch], mainCheckoutPath);
|
|
1036
|
+
return true;
|
|
1037
|
+
} catch {
|
|
1038
|
+
return false; // absent on both — the legitimate "never pushed" case T-8 point 7 relies on.
|
|
1039
|
+
}
|
|
1040
|
+
},
|
|
1041
|
+
deleteLocalBranch: (branch: string): void => {
|
|
1042
|
+
try {
|
|
1043
|
+
run('git', ['branch', '-D', branch], mainCheckoutPath);
|
|
1044
|
+
} catch {
|
|
1045
|
+
// Tolerant by design (see this method's JSDoc on `MaintenanceGit`): the common case is a
|
|
1046
|
+
// task never checked out in the main checkout at all, and this cleanup step must never
|
|
1047
|
+
// fail the `Done` transition it runs alongside.
|
|
1048
|
+
}
|
|
1049
|
+
},
|
|
1050
|
+
deleteRemoteBranch: (branch: string): RemoteBranchDeleteResult => {
|
|
1051
|
+
try {
|
|
1052
|
+
run('git', ['push', 'origin', '--delete', branch], mainCheckoutPath);
|
|
1053
|
+
return REMOTE_BRANCH_DELETE_RESULT.DELETED;
|
|
1054
|
+
} catch (error) {
|
|
1055
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
1056
|
+
if (REMOTE_REF_ALREADY_GONE_PATTERN.test(message)) {
|
|
1057
|
+
// GitHub's own "Automatically delete head branches" (enabled 2026-09-08) routinely beats
|
|
1058
|
+
// this call to it — the NORMAL outcome, not a failure to report.
|
|
1059
|
+
return REMOTE_BRANCH_DELETE_RESULT.ALREADY_GONE;
|
|
1060
|
+
}
|
|
1061
|
+
// A REAL failure (bad auth, a protected-branch rule, a network timeout) — defect 7,
|
|
1062
|
+
// 2026-09-08: this used to be swallowed identically to the "already gone" case above, so
|
|
1063
|
+
// the remote ref stayed alive with no log line and no honest signal in the result. See
|
|
1064
|
+
// `maintenance.ts`'s `cleanupBranchOnDone` for what this outcome now does with it.
|
|
1065
|
+
console.error(`dispatch.ts: git push origin --delete ${branch} failed:`, message);
|
|
1066
|
+
return REMOTE_BRANCH_DELETE_RESULT.FAILED;
|
|
1067
|
+
}
|
|
1068
|
+
},
|
|
1069
|
+
branchHasUnmergedCommits: (branch: string, baseRef: string): boolean => {
|
|
1070
|
+
// The remote-tracking ref, not the local one: the rescue push (`saveWipAndPush`) lands its
|
|
1071
|
+
// commits on `origin/<branch>` from inside a SLOT, and this runs in the main checkout, which
|
|
1072
|
+
// never checks the branch out itself. `entry.ts` runs `git fetch origin --prune` at the top
|
|
1073
|
+
// of every pass, before maintenance ever executes, so this remote-tracking ref is fresh for
|
|
1074
|
+
// the SAME pass that is about to compare it — no extra fetch needed here.
|
|
1075
|
+
//
|
|
1076
|
+
// Deliberately WITHOUT `--quiet`: that flag suppresses git's own diagnostic on the exact
|
|
1077
|
+
// failure this check needs to recognise, collapsing it into the SAME silent, empty-stderr
|
|
1078
|
+
// failure a missing `git` binary or a broken checkout also produces through this `run` seam
|
|
1079
|
+
// (which only ever surfaces a thrown Error's `.message`, never the raw exit code). Keeping
|
|
1080
|
+
// the diagnostic is what lets `BRANCH_REF_NOT_FOUND_PATTERN` tell them apart.
|
|
1081
|
+
try {
|
|
1082
|
+
run('git', ['rev-parse', '--verify', `refs/remotes/origin/${branch}`], mainCheckoutPath);
|
|
1083
|
+
} catch (error) {
|
|
1084
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
1085
|
+
if (BRANCH_REF_NOT_FOUND_PATTERN.test(message)) {
|
|
1086
|
+
// No remote-tracking ref at all (already deleted — GitHub's own auto-delete, or an
|
|
1087
|
+
// earlier pass — or never pushed): nothing survives on the remote to lose, so there is
|
|
1088
|
+
// nothing to refuse either.
|
|
1089
|
+
return false;
|
|
1090
|
+
}
|
|
1091
|
+
// S2 [LOW], 2026-09-08: any OTHER failure of this call (the `git` binary missing, a
|
|
1092
|
+
// corrupted checkout, a permissions error) is NOT a confirmed-absent answer — it is an
|
|
1093
|
+
// unanswerable question, and `deleteLocalBranch` runs right after this on a `true` result,
|
|
1094
|
+
// so misreading it as "nothing to lose" destroys the only copy of the branch on a mere
|
|
1095
|
+
// inability to check. Fail in the SAME safe direction as the merge-base check below.
|
|
1096
|
+
return true;
|
|
1097
|
+
}
|
|
1098
|
+
// `git merge-base --is-ancestor A B` exits 0 iff A is reachable from B — i.e. the branch's
|
|
1099
|
+
// tip is fully contained in the base, so it carries nothing beyond it. Reuses the SAME `run`
|
|
1100
|
+
// seam every other method here does (no new collaborator, no stdout to capture): any other
|
|
1101
|
+
// outcome — genuinely not an ancestor, or an unreachable/unresolvable ref — throws through
|
|
1102
|
+
// `run`'s wrapper, and both collapse to the SAME fail-safe refusal, since deletion is
|
|
1103
|
+
// destructive and only a CONFIRMED-clean answer authorises it.
|
|
1104
|
+
//
|
|
1105
|
+
// S1 (2026-09-08): this check has an UNDECLARED dependency on the GitHub merge strategy. It
|
|
1106
|
+
// is correct as shipped because this repo merges PRs with merge commits, so the branch tip
|
|
1107
|
+
// stays a real ancestor of `baseRef` once merged. A squash or a rebase merge REWRITES the
|
|
1108
|
+
// commits onto the base under a new SHA, so the original branch tip is no longer reachable
|
|
1109
|
+
// from it — `--is-ancestor` would then answer "false" for EVERY genuinely-merged branch, and
|
|
1110
|
+
// this refuses every delete, leaving `branchCleanupRefused` (and its PR comment) fire on
|
|
1111
|
+
// every single `Done` task. Flipping the repo's merge strategy is what would break this, not
|
|
1112
|
+
// a code change here — the next reader who considers that flip must re-derive this check.
|
|
1113
|
+
try {
|
|
1114
|
+
run('git', ['merge-base', '--is-ancestor', `origin/${branch}`, baseRef], mainCheckoutPath);
|
|
1115
|
+
return false;
|
|
1116
|
+
} catch {
|
|
1117
|
+
return true;
|
|
1118
|
+
}
|
|
1119
|
+
},
|
|
1120
|
+
};
|
|
1121
|
+
}
|
|
1122
|
+
|
|
1123
|
+
function runOsascript(args: string[]): void {
|
|
1124
|
+
try {
|
|
1125
|
+
execFileSync('osascript', args, { stdio: 'ignore', timeout: EXTERNAL_CALL_TIMEOUT_MS });
|
|
1126
|
+
} catch {
|
|
1127
|
+
// Best-effort: a missing osascript (non-Mac, sandboxed CI) must never fail the pass.
|
|
1128
|
+
}
|
|
1129
|
+
}
|
|
1130
|
+
|
|
1131
|
+
// ── Close runners ──────────────────────────────────────────────────────────────
|
|
1132
|
+
|
|
1133
|
+
export interface BuildCloseRunnersInput {
|
|
1134
|
+
mainCheckoutPath: string;
|
|
1135
|
+
repoRoot: string;
|
|
1136
|
+
task: Task;
|
|
1137
|
+
attempt: number;
|
|
1138
|
+
branch: string;
|
|
1139
|
+
reviewerModel: string;
|
|
1140
|
+
/** Wall-clock bound on the reviewer subprocess (`lanes.json`'s `reviewerTimeoutMinutes`). */
|
|
1141
|
+
reviewerTimeoutMs: number;
|
|
1142
|
+
/** Set by the close's `drain` step: main runs one more pass when the slot frees up. */
|
|
1143
|
+
requestDrain: () => void;
|
|
1144
|
+
/** The board snapshot this pass read, for the parent recomputation. */
|
|
1145
|
+
tasksById: Record<string, Task>;
|
|
1146
|
+
/**
|
|
1147
|
+
* Whether that snapshot is the WHOLE board (`BoardLoad.complete` of the post-sweep re-read). The
|
|
1148
|
+
* parent recomputation is SKIPPED when it is false: a derivation over some of the children
|
|
1149
|
+
* produces a confident wrong answer — the same reason the maintenance sweep refuses it — and
|
|
1150
|
+
* `reloadTasks` used to drop the flag, so the close derived from a partial board unaware.
|
|
1151
|
+
*/
|
|
1152
|
+
boardComplete: boolean;
|
|
1153
|
+
/**
|
|
1154
|
+
* `lanes.json`'s `attempts` cap (T-8 point 6) — threaded into `openPr`'s composed PR body
|
|
1155
|
+
* alongside the attempt number, so a reviewer reading the PR sees "intento 2 de 3" rather than a
|
|
1156
|
+
* bare count with no ceiling to judge it against. Optional so a caller with no lane config in
|
|
1157
|
+
* hand (every existing test fixture) still gets `buildPrCreateArgs`'s own fallback.
|
|
1158
|
+
*/
|
|
1159
|
+
maxAttempts?: number;
|
|
1160
|
+
/**
|
|
1161
|
+
* `lanes.json`'s optional top-level `harnessReviewer` handle (T-31, design.md decision 8). Ships
|
|
1162
|
+
* UNSET: `gh pr create --reviewer <self>` (and the equivalent edit) fails when the reviewer is the
|
|
1163
|
+
* pull request's own author, and the dispatcher opens every PR as the same account. When absent,
|
|
1164
|
+
* `openPr` records that once rather than attempting a call doomed to fail.
|
|
1165
|
+
*/
|
|
1166
|
+
harnessReviewer?: string;
|
|
1167
|
+
/** Injected by tests; defaults to the real `slots.json` lookup. `null` = no slot holds the task. */
|
|
1168
|
+
slotPathFor?: (taskId: string) => string | null;
|
|
1169
|
+
/** Injected by tests; defaults to a real `execFileSync` returning stdout. */
|
|
1170
|
+
run?: RunInSlot;
|
|
1171
|
+
/** Injected by tests; defaults to `spawnCapture` — never throws, reports the exit status. */
|
|
1172
|
+
runCapturing?: (
|
|
1173
|
+
command: string,
|
|
1174
|
+
args: string[],
|
|
1175
|
+
cwd: string,
|
|
1176
|
+
) => { status: number; output: string };
|
|
1177
|
+
/**
|
|
1178
|
+
* Reads `backlog task view <id> --plain`. Injected so the board reads every runner makes — the
|
|
1179
|
+
* integrity gate, the pre-PR gate, the PR title, the DoD ticks, the parent recomputation — are
|
|
1180
|
+
* driven in tests without spawning `backlog`, which is what lets the "no runner ever operates on
|
|
1181
|
+
* the main checkout" suite actually exercise them instead of stopping at the four that shell out.
|
|
1182
|
+
*/
|
|
1183
|
+
viewTask?: (taskId: string) => string;
|
|
1184
|
+
/** Injected by tests; defaults to the real `osascript` call, which would pop a real notification. */
|
|
1185
|
+
runOsascript?: OsascriptRunner;
|
|
1186
|
+
}
|
|
1187
|
+
|
|
1188
|
+
type RunInSlot = (
|
|
1189
|
+
command: string,
|
|
1190
|
+
args: string[],
|
|
1191
|
+
options: { cwd: string; env?: Record<string, string>; timeout?: number },
|
|
1192
|
+
) => string;
|
|
1193
|
+
|
|
1194
|
+
/**
|
|
1195
|
+
* A whole attempt diff routinely runs into megabytes, and `execFileSync`'s 1 MB default turns that
|
|
1196
|
+
* into a THROWN ENOBUFS rather than a big string — silently, on exactly the large changes most
|
|
1197
|
+
* worth reviewing. Same reason on the reviewer: its transcript carries the diff back.
|
|
1198
|
+
*/
|
|
1199
|
+
const LARGE_OUTPUT_MAX_BUFFER = 50 * 1024 * 1024;
|
|
1200
|
+
|
|
1201
|
+
/** Why every runner fails when no slot holds the task — see `findSlotPathForTask`. */
|
|
1202
|
+
const NO_SLOT_QUESTION =
|
|
1203
|
+
'la tarea no tiene slot asignado en slots.json: no hay directorio donde verificar ni guardar su trabajo.';
|
|
1204
|
+
|
|
1205
|
+
export function buildCloseRunners(input: BuildCloseRunnersInput): CloseRunners {
|
|
1206
|
+
const { mainCheckoutPath, repoRoot, task, attempt, branch } = input;
|
|
1207
|
+
const slotPath =
|
|
1208
|
+
input.slotPathFor ??
|
|
1209
|
+
((taskId: string): string | null => findSlotPathForTask(mainCheckoutPath, taskId));
|
|
1210
|
+
const runIn: RunInSlot =
|
|
1211
|
+
input.run ??
|
|
1212
|
+
((command, args, options) =>
|
|
1213
|
+
execFileSync(command, args, {
|
|
1214
|
+
cwd: options.cwd,
|
|
1215
|
+
encoding: 'utf8',
|
|
1216
|
+
env: options.env,
|
|
1217
|
+
// T-97: every call site through this seam used to pass no `timeout` at all — only the
|
|
1218
|
+
// reviewer step (below) ever set one explicitly. Falling back here, rather than at each call
|
|
1219
|
+
// site, is what closes the gap for git/gh/backlog/node calls the close makes without
|
|
1220
|
+
// duplicating the same bound at a dozen call sites.
|
|
1221
|
+
timeout: options.timeout ?? EXTERNAL_CALL_TIMEOUT_MS,
|
|
1222
|
+
maxBuffer: LARGE_OUTPUT_MAX_BUFFER,
|
|
1223
|
+
}));
|
|
1224
|
+
const runCapturing = input.runCapturing ?? spawnCapture;
|
|
1225
|
+
const osascript = input.runOsascript ?? runOsascript;
|
|
1226
|
+
const readTask = (): string => {
|
|
1227
|
+
try {
|
|
1228
|
+
return (input.viewTask ?? ((taskId: string) => viewTask(mainCheckoutPath, taskId)))(task.id);
|
|
1229
|
+
} catch (error) {
|
|
1230
|
+
console.error(`dispatch.ts: backlog task view ${task.id} failed:`, error);
|
|
1231
|
+
return '';
|
|
1232
|
+
}
|
|
1233
|
+
};
|
|
1234
|
+
// The dispatcher-owned board-write channel (`BACKLOG_DISPATCH_ACTIVE='1'`, retried over
|
|
1235
|
+
// Backlog.md's per-task lock) — routed through the same injected `runIn` every git/gh call in
|
|
1236
|
+
// this closure uses, so a test observes it exactly like any other recorded call, never through a
|
|
1237
|
+
// raw `backlog` invocation `entry.ts`'s dispatcher-owned-write sentinel would fail to recognize.
|
|
1238
|
+
const boardBacklog = realBacklog(mainCheckoutPath, {
|
|
1239
|
+
run: (args, options) => {
|
|
1240
|
+
runIn('backlog', args, { cwd: options.cwd, env: definedEnv(options.env) });
|
|
1241
|
+
},
|
|
1242
|
+
});
|
|
1243
|
+
/**
|
|
1244
|
+
* A TRAIL, not part of the close's contract: `realBacklog` throws on a write it could not
|
|
1245
|
+
* complete after its own retries, and `openPr` must never let that decide whether the attempt
|
|
1246
|
+
* itself was good — the PR already exists by the time this runs. Swallowed the same way
|
|
1247
|
+
* `tickOwnedDod` swallows its own failures (`console.error`, keep going), never rethrown.
|
|
1248
|
+
*/
|
|
1249
|
+
const recordPrUrl = (text: string): void => {
|
|
1250
|
+
try {
|
|
1251
|
+
boardBacklog.comment(task.id, text);
|
|
1252
|
+
} catch (error) {
|
|
1253
|
+
console.error(`dispatch.ts: could not comment the PR URL on ${task.id}:`, error);
|
|
1254
|
+
}
|
|
1255
|
+
};
|
|
1256
|
+
const attemptDir = path.join(mainCheckoutPath, DISPATCH_SUBDIR, task.id, `intento-${attempt}`);
|
|
1257
|
+
const base = resolveBaseRef(task);
|
|
1258
|
+
// Set by `scopeCheck` below, read by `openPr`'s human-review mark — never recomputed at PR time
|
|
1259
|
+
// (design.md decision 8, T-31): by then `mirrorRegen` has written into
|
|
1260
|
+
// `packages/cli/src/templates/`, and a recomputation would match `packages/cli/` and mark EVERY
|
|
1261
|
+
// attempt that touched any mirrored root, which is a mark that fires always and says nothing.
|
|
1262
|
+
let humanReviewFiles: readonly string[] = [];
|
|
1263
|
+
|
|
1264
|
+
return {
|
|
1265
|
+
// Re-read the board and compare it against the launch snapshot BEFORE any step trusts it. The
|
|
1266
|
+
// worker held a `backlog task edit` grant on this task for its whole run.
|
|
1267
|
+
boardCheck: () => checkBoardIntegrity({ taskText: readTask(), task }),
|
|
1268
|
+
// An absent lane is unreachable here (guard 1 blocks it), so the fallback only decides which
|
|
1269
|
+
// way to be wrong: LOCAL is the stricter check of the two.
|
|
1270
|
+
scopeCheck: () => {
|
|
1271
|
+
const cwd = slotPath(task.id);
|
|
1272
|
+
if (cwd === null) {
|
|
1273
|
+
return {
|
|
1274
|
+
ok: false,
|
|
1275
|
+
reason: 'scope-check-failed',
|
|
1276
|
+
question: NO_SLOT_QUESTION,
|
|
1277
|
+
humanReviewFiles: [],
|
|
1278
|
+
};
|
|
1279
|
+
}
|
|
1280
|
+
const result = runScopeCheck({
|
|
1281
|
+
lane: task.lane ?? LANE.LOCAL,
|
|
1282
|
+
declaredFiles: task.filesToTouch,
|
|
1283
|
+
base,
|
|
1284
|
+
runGit: (args) => runIn('git', args, { cwd }),
|
|
1285
|
+
});
|
|
1286
|
+
if (result.ok) {
|
|
1287
|
+
humanReviewFiles = result.humanReviewFiles;
|
|
1288
|
+
}
|
|
1289
|
+
return result;
|
|
1290
|
+
},
|
|
1291
|
+
formatLintTest: () => {
|
|
1292
|
+
const cwd = slotPath(task.id);
|
|
1293
|
+
if (cwd === null) {
|
|
1294
|
+
return { ok: false, reason: 'format-lint-test-failed', question: NO_SLOT_QUESTION };
|
|
1295
|
+
}
|
|
1296
|
+
// The command SNAPSHOTTED at launch, never re-read here: the worker had `backlog task edit`
|
|
1297
|
+
// on its own task all run, so a close that re-reads the board runs whatever the thing under
|
|
1298
|
+
// test decided it should be verified with.
|
|
1299
|
+
//
|
|
1300
|
+
// `task.testCommand` is non-null on every REAL dispatch: guard 1 blocks a task that declares
|
|
1301
|
+
// no `Test command:` line before a worker ever starts, so this close only ever sees one that
|
|
1302
|
+
// passed that guard. `planMechanicalChecks` still handles the null (it is a pure planner with
|
|
1303
|
+
// its own tests) — there is simply no branch to take here.
|
|
1304
|
+
|
|
1305
|
+
let changedFiles: string[];
|
|
1306
|
+
try {
|
|
1307
|
+
changedFiles = collectChangedFiles({ base, runGit: (args) => runIn('git', args, { cwd }) });
|
|
1308
|
+
} catch (error) {
|
|
1309
|
+
return {
|
|
1310
|
+
ok: false,
|
|
1311
|
+
reason: 'format-lint-test-failed',
|
|
1312
|
+
question: `git no se pudo ejecutar: ${describeExecFailure(error)}`,
|
|
1313
|
+
};
|
|
1314
|
+
}
|
|
1315
|
+
|
|
1316
|
+
const plan = planMechanicalChecks({
|
|
1317
|
+
testCommand: task.testCommand,
|
|
1318
|
+
lintBarrels: hasLintBarrelsScript(repoRoot),
|
|
1319
|
+
changedFiles,
|
|
1320
|
+
exists: (file) => fs.existsSync(path.join(cwd, file)),
|
|
1321
|
+
});
|
|
1322
|
+
if (plan.skippedPrettierFiles.length > 0) {
|
|
1323
|
+
// Prettier is not a root dependency, so a file outside `backend/`, `frontier/` or the two
|
|
1324
|
+
// core packages has no formatter to run — reported, not silently treated as formatted.
|
|
1325
|
+
console.warn(
|
|
1326
|
+
`dispatch.ts: ${task.id} — no prettier workspace covers: ${plan.skippedPrettierFiles.join(', ')}`,
|
|
1327
|
+
);
|
|
1328
|
+
}
|
|
1329
|
+
if (plan.refusal) {
|
|
1330
|
+
return { ok: false, reason: 'format-lint-test-failed', question: plan.refusal };
|
|
1331
|
+
}
|
|
1332
|
+
|
|
1333
|
+
for (const check of plan.checks) {
|
|
1334
|
+
const result = runCapturing(check.command, check.args, cwd);
|
|
1335
|
+
const outcome = evaluateMechanicalCheckResult(check, result.status);
|
|
1336
|
+
const advisoryNote = outcome.advisory
|
|
1337
|
+
? `[advisory] "${check.label}" exited ${result.status}; not failing the attempt.\n`
|
|
1338
|
+
: '';
|
|
1339
|
+
fs.appendFileSync(
|
|
1340
|
+
path.join(attemptDir, 'test.log'),
|
|
1341
|
+
`$ ${check.command} ${check.args.join(' ')}\n${result.output}\n${advisoryNote}`,
|
|
1342
|
+
);
|
|
1343
|
+
if (!outcome.ok) {
|
|
1344
|
+
return {
|
|
1345
|
+
ok: false,
|
|
1346
|
+
reason: 'format-lint-test-failed',
|
|
1347
|
+
question: `Falló "${check.label}"; mira test.log.`,
|
|
1348
|
+
};
|
|
1349
|
+
}
|
|
1350
|
+
}
|
|
1351
|
+
|
|
1352
|
+
// The triad just proved these; ticking them here is what keeps the pre-PR gate from failing
|
|
1353
|
+
// a green attempt on bookkeeping the worker was never asked to do. "Scoped tests pass" is
|
|
1354
|
+
// ticked ONLY when a test check actually ran: ticking it because the step as a whole returned
|
|
1355
|
+
// green would assert a test that never existed, and the gate that follows is what turns that
|
|
1356
|
+
// silence into a failed attempt rather than into a PR.
|
|
1357
|
+
const taskText = readTask();
|
|
1358
|
+
if (plan.checks.some((check) => check.label === 'test')) {
|
|
1359
|
+
tickOwnedDod(mainCheckoutPath, task.id, taskText, DOD_SCOPED_TESTS);
|
|
1360
|
+
}
|
|
1361
|
+
tickOwnedDod(mainCheckoutPath, task.id, taskText, DOD_PRETTIER_BARRELS);
|
|
1362
|
+
return { ok: true };
|
|
1363
|
+
},
|
|
1364
|
+
// Regenerates the CLI scaffold mirror when the attempt touched a root the packager reads, so the
|
|
1365
|
+
// PR passes CI's `Check mirror <-> source drift`. It runs AFTER the triad on purpose: that step
|
|
1366
|
+
// rewrites the attempt's own files with `prettier --write`, and a mirror copied before it would
|
|
1367
|
+
// be stale the moment it did. See `runMirrorRegen` for the rest of the reasoning.
|
|
1368
|
+
mirrorRegen: () => {
|
|
1369
|
+
const cwd = slotPath(task.id);
|
|
1370
|
+
if (cwd === null) {
|
|
1371
|
+
return { ok: false, reason: 'mirror-regen-failed', question: NO_SLOT_QUESTION };
|
|
1372
|
+
}
|
|
1373
|
+
|
|
1374
|
+
// Both callbacks re-throw through `describeExecFailure`: an `execFileSync` throw carries only
|
|
1375
|
+
// "Command failed: node scripts/packager/publish.mjs" in its `message`, and the packager's
|
|
1376
|
+
// real complaint (a missing source directory, an fs-extra error) is in the stderr nobody
|
|
1377
|
+
// prints. The `Blocked` comment is the only channel telling a person why the attempt stopped.
|
|
1378
|
+
const result = runMirrorRegen({
|
|
1379
|
+
base,
|
|
1380
|
+
runGit: (args) => {
|
|
1381
|
+
try {
|
|
1382
|
+
return runIn('git', args, { cwd });
|
|
1383
|
+
} catch (error) {
|
|
1384
|
+
throw new Error(describeExecFailure(error));
|
|
1385
|
+
}
|
|
1386
|
+
},
|
|
1387
|
+
driftCheckWorkflow: readDriftCheckWorkflow(cwd),
|
|
1388
|
+
runPackager: () => {
|
|
1389
|
+
try {
|
|
1390
|
+
runIn('node', [MIRROR_PACKAGER_SCRIPT], { cwd });
|
|
1391
|
+
} catch (error) {
|
|
1392
|
+
throw new Error(describeExecFailure(error));
|
|
1393
|
+
}
|
|
1394
|
+
},
|
|
1395
|
+
});
|
|
1396
|
+
|
|
1397
|
+
if (result.regenerated) {
|
|
1398
|
+
console.error(
|
|
1399
|
+
`dispatch.ts: ${task.id} — espejo del scaffold regenerado (${result.mirrorFiles.length} ficheros bajo ` +
|
|
1400
|
+
'packages/cli/src/templates/); viajan en el commit del intento.',
|
|
1401
|
+
);
|
|
1402
|
+
}
|
|
1403
|
+
return result;
|
|
1404
|
+
},
|
|
1405
|
+
reviewer: () => {
|
|
1406
|
+
const cwd = slotPath(task.id);
|
|
1407
|
+
if (cwd === null) {
|
|
1408
|
+
return { ok: false, reason: 'reviewer-failed', question: NO_SLOT_QUESTION };
|
|
1409
|
+
}
|
|
1410
|
+
|
|
1411
|
+
// An uncollectable diff FAILS the step. Handing the reviewer a note saying git blew up reads
|
|
1412
|
+
// to it as an empty change set, and it duly approves code it never saw.
|
|
1413
|
+
let diff: string;
|
|
1414
|
+
try {
|
|
1415
|
+
diff = collectAttemptDiff({ base, runGit: (args) => runIn('git', args, { cwd }) });
|
|
1416
|
+
} catch (error) {
|
|
1417
|
+
return {
|
|
1418
|
+
ok: false,
|
|
1419
|
+
reason: 'reviewer-failed',
|
|
1420
|
+
question: `no se pudo obtener el diff: ${describeExecFailure(error)}`,
|
|
1421
|
+
};
|
|
1422
|
+
}
|
|
1423
|
+
|
|
1424
|
+
return runReviewer({
|
|
1425
|
+
taskId: task.id,
|
|
1426
|
+
model: input.reviewerModel,
|
|
1427
|
+
diff,
|
|
1428
|
+
acceptanceCriteria: parseAcceptanceCriteria(readTask()),
|
|
1429
|
+
// The reviewer runs on the ACCOUNT, never on LM Studio. `reviewerEnv` drops every
|
|
1430
|
+
// `ANTHROPIC_*` key — the lane's LM Studio overlay so a weak local executor can never end up
|
|
1431
|
+
// reviewing itself (design.md's close diagram, `SR`), and the API key with it, because a
|
|
1432
|
+
// stale one in the dispatcher's shell takes precedence over the account's claude.ai login
|
|
1433
|
+
// and left the reviewer unable to start at all. Bounded, because it runs while this process
|
|
1434
|
+
// still owns the slot.
|
|
1435
|
+
//
|
|
1436
|
+
// The failure is rendered with the child's stderr: `execFileSync`'s own `error.message` is
|
|
1437
|
+
// "Command failed: claude -p …", and the T-5 run's `review.md` said exactly that and
|
|
1438
|
+
// nothing more — the auth error that explained it was in the stderr nobody printed.
|
|
1439
|
+
run: (command, args) => {
|
|
1440
|
+
try {
|
|
1441
|
+
return runIn(command, args, {
|
|
1442
|
+
cwd,
|
|
1443
|
+
env: reviewerEnv(),
|
|
1444
|
+
timeout: input.reviewerTimeoutMs,
|
|
1445
|
+
});
|
|
1446
|
+
} catch (error) {
|
|
1447
|
+
throw new Error(describeExecFailure(error));
|
|
1448
|
+
}
|
|
1449
|
+
},
|
|
1450
|
+
writeReview: (content) => fs.writeFileSync(path.join(attemptDir, 'review.md'), content),
|
|
1451
|
+
});
|
|
1452
|
+
},
|
|
1453
|
+
acCheck: () => {
|
|
1454
|
+
// Re-read the task: the worker ticked its acceptance criteria through the `backlog` CLI while
|
|
1455
|
+
// it worked, so the snapshot this pass started with is stale by definition here.
|
|
1456
|
+
const result = evaluateAcceptanceGate(readTask());
|
|
1457
|
+
if (result.ok) {
|
|
1458
|
+
tickOwnedDod(mainCheckoutPath, task.id, readTask(), DOD_EVERY_AC);
|
|
1459
|
+
}
|
|
1460
|
+
return result;
|
|
1461
|
+
},
|
|
1462
|
+
openPr: () => {
|
|
1463
|
+
const cwd = slotPath(task.id);
|
|
1464
|
+
if (cwd === null) {
|
|
1465
|
+
return { ok: false, reason: 'open-pr-failed', question: NO_SLOT_QUESTION };
|
|
1466
|
+
}
|
|
1467
|
+
// Applies the human-review mark's two best-effort halves — a SEPARATE `gh pr edit` call each
|
|
1468
|
+
// (design.md decision 8, T-31): a rejected reviewer must not take the label down with it, and
|
|
1469
|
+
// a label the repository does not have must not fail the close at all. Each failure is
|
|
1470
|
+
// RECORDED (never propagated) with `describeExecFailure`, same as every other best-effort gh
|
|
1471
|
+
// call in this runner. No-op when the scope check reported no soft-list file.
|
|
1472
|
+
// The mark's BODY half, for the REUSE branch only: a newly created pull request already
|
|
1473
|
+
// carries it inside `gh pr create --body` (`buildPrCreateArgs`), which is what makes that half
|
|
1474
|
+
// unfailable. A retry has no create call at all, so without this the reused pull request names
|
|
1475
|
+
// no soft-list file and the whole mark rests on the two `gh pr edit` calls the design allows to
|
|
1476
|
+
// fail.
|
|
1477
|
+
//
|
|
1478
|
+
// It READS the body first and edits only its own delimited section
|
|
1479
|
+
// (`upsertHumanReviewSection`). `gh pr edit --body` is a full replacement, and these are by
|
|
1480
|
+
// construction the pull requests a person was asked to read and annotate — recomposing the
|
|
1481
|
+
// body from the board erased every word that person had added (T-31 round 2). A body that
|
|
1482
|
+
// cannot be read is not overwritten at all: with no idea what is there, the mark is skipped
|
|
1483
|
+
// and recorded, like every other best-effort half.
|
|
1484
|
+
const applyHumanReviewBody = (): void => {
|
|
1485
|
+
if (humanReviewFiles.length === 0) {
|
|
1486
|
+
return;
|
|
1487
|
+
}
|
|
1488
|
+
let currentBody: string;
|
|
1489
|
+
try {
|
|
1490
|
+
currentBody = readPrBody(branch, (args) => runIn('gh', args, { cwd, env: ghEnv() }));
|
|
1491
|
+
} catch (error) {
|
|
1492
|
+
console.error(
|
|
1493
|
+
`dispatch.ts: ${task.id} — no se pudo leer el cuerpo de la PR reutilizada, así que no se reescribe (se perdería el texto humano): ${describeExecFailure(error)}`,
|
|
1494
|
+
);
|
|
1495
|
+
return;
|
|
1496
|
+
}
|
|
1497
|
+
try {
|
|
1498
|
+
runIn(
|
|
1499
|
+
'gh',
|
|
1500
|
+
buildPrBodyArgs(branch, upsertHumanReviewSection(currentBody, humanReviewFiles)),
|
|
1501
|
+
{ cwd, env: ghEnv() },
|
|
1502
|
+
);
|
|
1503
|
+
} catch (error) {
|
|
1504
|
+
console.error(
|
|
1505
|
+
`dispatch.ts: ${task.id} — no se pudo reescribir el cuerpo de la PR reutilizada con la sección de revisión humana: ${describeExecFailure(error)}`,
|
|
1506
|
+
);
|
|
1507
|
+
}
|
|
1508
|
+
};
|
|
1509
|
+
|
|
1510
|
+
const markForHumanReview = (): void => {
|
|
1511
|
+
if (humanReviewFiles.length === 0) {
|
|
1512
|
+
return;
|
|
1513
|
+
}
|
|
1514
|
+
try {
|
|
1515
|
+
runIn('gh', buildPrLabelArgs(branch), { cwd, env: ghEnv() });
|
|
1516
|
+
} catch (error) {
|
|
1517
|
+
console.error(
|
|
1518
|
+
`dispatch.ts: ${task.id} — no se pudo aplicar la etiqueta ${HARNESS_REVIEW_LABEL}: ${describeExecFailure(error)}`,
|
|
1519
|
+
);
|
|
1520
|
+
}
|
|
1521
|
+
if (input.harnessReviewer) {
|
|
1522
|
+
try {
|
|
1523
|
+
runIn('gh', buildPrReviewerArgs(branch, input.harnessReviewer), { cwd, env: ghEnv() });
|
|
1524
|
+
} catch (error) {
|
|
1525
|
+
console.error(
|
|
1526
|
+
`dispatch.ts: ${task.id} — no se pudo asignar el revisor ${input.harnessReviewer}: ${describeExecFailure(error)}`,
|
|
1527
|
+
);
|
|
1528
|
+
}
|
|
1529
|
+
} else {
|
|
1530
|
+
console.error(
|
|
1531
|
+
`dispatch.ts: ${task.id} — PR marcada con ${HARNESS_REVIEW_LABEL}; sin revisor configurado.`,
|
|
1532
|
+
);
|
|
1533
|
+
}
|
|
1534
|
+
};
|
|
1535
|
+
|
|
1536
|
+
try {
|
|
1537
|
+
// Commit and push FIRST: `gh pr create --head <branch>` needs the branch on the remote, and
|
|
1538
|
+
// the executor is forbidden from running `git` itself, so on a green attempt everything it
|
|
1539
|
+
// wrote is still an uncommitted working tree at this point (design.md's close diagram:
|
|
1540
|
+
// "commit on task branch, push, PR to main or to the parent branch" is ONE step).
|
|
1541
|
+
runIn('git', ['add', '-A'], { cwd });
|
|
1542
|
+
// `--no-verify` for the same reason the WIP auto-save carries it: the hooks that would run
|
|
1543
|
+
// here live in the slot's working tree, which is where the worker has been writing.
|
|
1544
|
+
runIn(
|
|
1545
|
+
'git',
|
|
1546
|
+
[
|
|
1547
|
+
'commit',
|
|
1548
|
+
'-m',
|
|
1549
|
+
buildAttemptCommitMessage(task.id, attempt),
|
|
1550
|
+
'--allow-empty',
|
|
1551
|
+
'--no-verify',
|
|
1552
|
+
],
|
|
1553
|
+
{
|
|
1554
|
+
cwd,
|
|
1555
|
+
},
|
|
1556
|
+
);
|
|
1557
|
+
runIn('git', ['push', '-u', 'origin', branch], { cwd });
|
|
1558
|
+
|
|
1559
|
+
// A retry pushes to the same branch, so the PR from the previous attempt is still open and
|
|
1560
|
+
// the push above already updated it. Creating a second one is impossible (`gh` refuses) —
|
|
1561
|
+
// asking first is what turns that refusal into the reuse it should always have been.
|
|
1562
|
+
// `env: ghEnv()` on every gh call below: see `ghEnv`'s own header for the measured 401 this
|
|
1563
|
+
// closes (T-5, 2026-09-07) — without it, a stale `GITHUB_TOKEN` in the dispatcher's shell
|
|
1564
|
+
// outranks `gh`'s own keyring login.
|
|
1565
|
+
const existing = findOpenPrUrl({
|
|
1566
|
+
branch,
|
|
1567
|
+
runGh: (args) => runIn('gh', args, { cwd, env: ghEnv() }),
|
|
1568
|
+
});
|
|
1569
|
+
if (existing !== null) {
|
|
1570
|
+
console.error(`dispatch.ts: PR existente reutilizada para ${branch}: ${existing}`);
|
|
1571
|
+
notify(`${task.id}: PR existente reutilizada`, existing, osascript);
|
|
1572
|
+
recordPrUrl(`PR existente reutilizada: ${existing}`);
|
|
1573
|
+
tickOwnedDod(mainCheckoutPath, task.id, readTask(), DOD_PR_OPENED);
|
|
1574
|
+
applyHumanReviewBody();
|
|
1575
|
+
markForHumanReview();
|
|
1576
|
+
return { ok: true, compareUrl: existing };
|
|
1577
|
+
}
|
|
1578
|
+
|
|
1579
|
+
const title = buildPrTitle(task.id, parseTaskTitle(readTask()));
|
|
1580
|
+
// T-8 point 6: the board text re-read right here (never the launch-time snapshot, which a
|
|
1581
|
+
// worker's own notes/plan have moved past) becomes the PR's composed body via
|
|
1582
|
+
// `buildPrCreateArgs`'s `taskText` — omitting it falls back to the legacy one-line body,
|
|
1583
|
+
// which is exactly the gap this call site is closing.
|
|
1584
|
+
const output = runIn(
|
|
1585
|
+
'gh',
|
|
1586
|
+
buildPrCreateArgs({
|
|
1587
|
+
task,
|
|
1588
|
+
branch,
|
|
1589
|
+
attempt,
|
|
1590
|
+
title,
|
|
1591
|
+
taskText: readTask(),
|
|
1592
|
+
maxAttempts: input.maxAttempts,
|
|
1593
|
+
humanReviewFiles,
|
|
1594
|
+
}),
|
|
1595
|
+
{ cwd, env: ghEnv() },
|
|
1596
|
+
);
|
|
1597
|
+
const prUrl = output.trim();
|
|
1598
|
+
notify(`${task.id}: PR abierta`, prUrl, osascript);
|
|
1599
|
+
recordPrUrl(`PR abierta: ${prUrl}`);
|
|
1600
|
+
tickOwnedDod(mainCheckoutPath, task.id, readTask(), DOD_PR_OPENED);
|
|
1601
|
+
markForHumanReview();
|
|
1602
|
+
return { ok: true, compareUrl: prUrl };
|
|
1603
|
+
} catch (error) {
|
|
1604
|
+
return { ok: false, reason: 'open-pr-failed', question: describeExecFailure(error) };
|
|
1605
|
+
}
|
|
1606
|
+
},
|
|
1607
|
+
releaseSlot: () => {
|
|
1608
|
+
// The one release procedure every path shares (`slots.ts`): detach, then clear the entry.
|
|
1609
|
+
releaseSlotAndDetach({
|
|
1610
|
+
taskId: task.id,
|
|
1611
|
+
slotPath: slotPath(task.id),
|
|
1612
|
+
runGit: (args, at) => runIn('git', args, { cwd: at }),
|
|
1613
|
+
updateSlots: realMaintenanceFs(mainCheckoutPath, repoRoot).updateSlots,
|
|
1614
|
+
});
|
|
1615
|
+
releaseLock(path.join(mainCheckoutPath, DISPATCH_SUBDIR), task.id);
|
|
1616
|
+
},
|
|
1617
|
+
recomputeParent: () => {
|
|
1618
|
+
if (!task.parentId) {
|
|
1619
|
+
return;
|
|
1620
|
+
}
|
|
1621
|
+
if (!input.boardComplete) {
|
|
1622
|
+
console.error(
|
|
1623
|
+
`dispatch.ts: the post-sweep board read was incomplete; skipping ${task.parentId}'s recomputation. ` +
|
|
1624
|
+
'A parent derived from half its children is a confident wrong answer — the next pass, with a readable board, does it.',
|
|
1625
|
+
);
|
|
1626
|
+
return;
|
|
1627
|
+
}
|
|
1628
|
+
const recomputed = recomputeParent({
|
|
1629
|
+
parentId: task.parentId,
|
|
1630
|
+
// The child just finished, so its snapshot status (`In Progress`) is stale; the parent's
|
|
1631
|
+
// derivation must see what the board now says, not what this pass read at its start.
|
|
1632
|
+
tasksById: {
|
|
1633
|
+
...input.tasksById,
|
|
1634
|
+
[task.id]: { ...task, status: parseTaskStatus(readTask()) },
|
|
1635
|
+
},
|
|
1636
|
+
gh: realGh(repoRoot),
|
|
1637
|
+
backlog: realBacklog(mainCheckoutPath),
|
|
1638
|
+
fs: realMaintenanceFs(mainCheckoutPath, repoRoot),
|
|
1639
|
+
});
|
|
1640
|
+
if (recomputed) {
|
|
1641
|
+
console.log(
|
|
1642
|
+
`dispatch.ts: parent ${recomputed.id} recomputed ${recomputed.from} -> ${recomputed.to}`,
|
|
1643
|
+
);
|
|
1644
|
+
}
|
|
1645
|
+
},
|
|
1646
|
+
drain: () => input.requestDrain(),
|
|
1647
|
+
saveWork: () =>
|
|
1648
|
+
realGit(mainCheckoutPath, {
|
|
1649
|
+
slotPathFor: slotPath,
|
|
1650
|
+
run: (command, args, cwd) => void runIn(command, args, { cwd }),
|
|
1651
|
+
}).saveWipAndPush(branch),
|
|
1652
|
+
// The record for a failure that no `scope-check` preceded (T-31 rounds 3 and 4): a session-level
|
|
1653
|
+
// failure, or a `board-check` that diverted before it. Classified by LANE, from the same function
|
|
1654
|
+
// the scope check reads, so the record and the verdict cannot disagree about a path. `base` is
|
|
1655
|
+
// this task's own base ref — `origin/task/<parentId>` for a subtask, where diffing against
|
|
1656
|
+
// `origin/main` would report the parent's whole accumulated diff as this attempt's leftovers.
|
|
1657
|
+
// `executeClose` treats a throw as "none found": a close that already failed must not fail harder
|
|
1658
|
+
// over a marking concern.
|
|
1659
|
+
leftoverFiles: () => {
|
|
1660
|
+
const cwd = slotPath(task.id);
|
|
1661
|
+
if (cwd === null) {
|
|
1662
|
+
return { forbiddenFiles: [], humanReviewFiles: [] };
|
|
1663
|
+
}
|
|
1664
|
+
return collectLeftoverFiles({
|
|
1665
|
+
lane: task.lane ?? LANE.LOCAL,
|
|
1666
|
+
base,
|
|
1667
|
+
runGit: (args) => runIn('git', args, { cwd }),
|
|
1668
|
+
});
|
|
1669
|
+
},
|
|
1670
|
+
block: (details) => {
|
|
1671
|
+
// Blocked FIRST, released after: a task whose slot is already free but whose status still
|
|
1672
|
+
// says `In Progress` looks to the maintenance sweep like a worker that vanished. The reverse
|
|
1673
|
+
// window is the accepted one — for the few milliseconds between these two lines the task is
|
|
1674
|
+
// `Blocked` while its slot still names it, and step 4's manual-cancellation branch could act
|
|
1675
|
+
// on it. All that branch does is save work already saved and release a slot about to be
|
|
1676
|
+
// released, so the cost of the race is a redundant no-op, not a lost attempt.
|
|
1677
|
+
realBacklog(mainCheckoutPath).setStatus(
|
|
1678
|
+
task.id,
|
|
1679
|
+
TASK_STATUS.BLOCKED,
|
|
1680
|
+
formatBlockComment(details),
|
|
1681
|
+
);
|
|
1682
|
+
notify(`${task.id} blocked: ${details.reason}`, details.logPath, osascript);
|
|
1683
|
+
},
|
|
1684
|
+
blockKeepSlot: (details) => {
|
|
1685
|
+
// The push failed, so this slot holds the ONLY copy of the work: mark it so the next
|
|
1686
|
+
// maintenance pass retries the push, and so no acquisition ever reuses it meanwhile. The lock
|
|
1687
|
+
// goes, though — this reconciler process is about to exit, and its pid would be swept anyway.
|
|
1688
|
+
// Only the `heldForRecovery` flag is touched, so a concurrent pass's own slot survives.
|
|
1689
|
+
realMaintenanceFs(mainCheckoutPath, repoRoot).updateSlots((current) => ({
|
|
1690
|
+
slots: current.slots.map((slot) =>
|
|
1691
|
+
slot.taskId === task.id ? { ...slot, heldForRecovery: true } : slot,
|
|
1692
|
+
),
|
|
1693
|
+
}));
|
|
1694
|
+
releaseLock(path.join(mainCheckoutPath, DISPATCH_SUBDIR), task.id);
|
|
1695
|
+
realBacklog(mainCheckoutPath).setStatus(
|
|
1696
|
+
task.id,
|
|
1697
|
+
TASK_STATUS.BLOCKED,
|
|
1698
|
+
formatBlockComment(details),
|
|
1699
|
+
);
|
|
1700
|
+
notify(`${task.id} blocked: ${details.reason}`, details.logPath, osascript);
|
|
1701
|
+
},
|
|
1702
|
+
};
|
|
1703
|
+
}
|
|
1704
|
+
|
|
1705
|
+
function spawnCapture(
|
|
1706
|
+
command: string,
|
|
1707
|
+
args: string[],
|
|
1708
|
+
cwd: string,
|
|
1709
|
+
): { status: number; output: string } {
|
|
1710
|
+
try {
|
|
1711
|
+
const output = execFileSync(command, args, {
|
|
1712
|
+
cwd,
|
|
1713
|
+
encoding: 'utf8',
|
|
1714
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
1715
|
+
// T-97: the declared Test command (and prettier/lint before it) runs through here, unbounded
|
|
1716
|
+
// until now. `MECHANICAL_CHECK_TIMEOUT_MS`, not `EXTERNAL_CALL_TIMEOUT_MS`: a real test suite
|
|
1717
|
+
// legitimately runs for minutes, but a hang must still fail well before `LOCK_TTL_MS` — see
|
|
1718
|
+
// that constant's own header for the measured incident this closes.
|
|
1719
|
+
timeout: MECHANICAL_CHECK_TIMEOUT_MS,
|
|
1720
|
+
});
|
|
1721
|
+
return { status: 0, output };
|
|
1722
|
+
} catch (error) {
|
|
1723
|
+
const failure = error as { status?: number; stdout?: string; stderr?: string };
|
|
1724
|
+
return {
|
|
1725
|
+
status: failure.status ?? 1,
|
|
1726
|
+
output: `${failure.stdout ?? ''}${failure.stderr ?? ''}`,
|
|
1727
|
+
};
|
|
1728
|
+
}
|
|
1729
|
+
}
|
|
1730
|
+
|
|
1731
|
+
/** What `mirrorRegen` spawns, relative to the slot it runs in. */
|
|
1732
|
+
const MIRROR_PACKAGER_SCRIPT = 'scripts/packager/publish.mjs';
|
|
1733
|
+
|
|
1734
|
+
/** The CI gate whose `paths:` filter IS the mirrored-root list `runMirrorRegen` reads. */
|
|
1735
|
+
const DRIFT_CHECK_WORKFLOW_PATH = path.join('.github', 'workflows', 'cli-template-drift-check.yml');
|
|
1736
|
+
|
|
1737
|
+
/**
|
|
1738
|
+
* The drift-check workflow as it stands IN THE SLOT, or `null` when the repo has none — a generated
|
|
1739
|
+
* project, where `copyMonorepo()` ships `scripts/backlog/**` but neither `.github/**` nor
|
|
1740
|
+
* `scripts/packager/**`. Read from the slot rather than from the main checkout for the same reason
|
|
1741
|
+
* every other close read is: the attempt may legitimately have changed that file, and the roots the
|
|
1742
|
+
* mirror needs are the ones the PR will be judged against.
|
|
1743
|
+
*/
|
|
1744
|
+
function readDriftCheckWorkflow(slotPath: string): string | null {
|
|
1745
|
+
try {
|
|
1746
|
+
return fs.readFileSync(path.join(slotPath, DRIFT_CHECK_WORKFLOW_PATH), 'utf8');
|
|
1747
|
+
} catch {
|
|
1748
|
+
return null;
|
|
1749
|
+
}
|
|
1750
|
+
}
|
|
1751
|
+
|
|
1752
|
+
function hasLintBarrelsScript(repoRoot: string): boolean {
|
|
1753
|
+
try {
|
|
1754
|
+
const pkg = JSON.parse(fs.readFileSync(path.join(repoRoot, 'package.json'), 'utf8')) as {
|
|
1755
|
+
scripts?: Record<string, string>;
|
|
1756
|
+
};
|
|
1757
|
+
return Boolean(pkg.scripts?.[LINT_BARRELS_SCRIPT]);
|
|
1758
|
+
} catch {
|
|
1759
|
+
return false;
|
|
1760
|
+
}
|
|
1761
|
+
}
|
|
1762
|
+
|
|
1763
|
+
function readTaskText(mainCheckoutPath: string, taskId: string): string {
|
|
1764
|
+
try {
|
|
1765
|
+
return viewTask(mainCheckoutPath, taskId);
|
|
1766
|
+
} catch (error) {
|
|
1767
|
+
console.error(`dispatch.ts: backlog task view ${taskId} failed:`, error);
|
|
1768
|
+
return '';
|
|
1769
|
+
}
|
|
1770
|
+
}
|
|
1771
|
+
|
|
1772
|
+
export interface TickOwnedDodDeps {
|
|
1773
|
+
/** Injected by tests so no `backlog` CLI ever runs; the default wraps a real, stderr-capturing `execFileSync`. */
|
|
1774
|
+
run?: (taskId: string, index: number) => void;
|
|
1775
|
+
/** Overrides `withBoardWriteRetry`'s defaults — tests inject a synchronous, instant `sleep`. */
|
|
1776
|
+
retry?: Partial<BoardWriteRetryOptions>;
|
|
1777
|
+
}
|
|
1778
|
+
|
|
1779
|
+
/**
|
|
1780
|
+
* Ticks the dispatcher-owned Definition-of-Done items matching `pattern` in `taskText`, by TEXT
|
|
1781
|
+
* rather than by a guessed index: `--check-dod` takes the `#N` the CLI prints, and that number shifts as soon as a
|
|
1782
|
+
* task adds a DoD item of its own. Best-effort — a failed tick is a bookkeeping loss, never a
|
|
1783
|
+
* reason to fail a close that already proved the thing.
|
|
1784
|
+
*
|
|
1785
|
+
* Goes through `withBoardWriteRetry` like every other dispatcher-owned write: a `--check-dod` tick
|
|
1786
|
+
* can race the SAME per-task lock a status edit or a person's own edit just took (measured T-5
|
|
1787
|
+
* defect, see that function's header). A failure that survives every retry still only logs — this
|
|
1788
|
+
* tick was always best-effort, and that does not change because the failure now took longer to
|
|
1789
|
+
* surface.
|
|
1790
|
+
*/
|
|
1791
|
+
export function tickOwnedDod(
|
|
1792
|
+
mainCheckoutPath: string,
|
|
1793
|
+
taskId: string,
|
|
1794
|
+
taskText: string,
|
|
1795
|
+
pattern: RegExp,
|
|
1796
|
+
deps: TickOwnedDodDeps = {},
|
|
1797
|
+
): void {
|
|
1798
|
+
const run =
|
|
1799
|
+
deps.run ??
|
|
1800
|
+
((id: string, index: number): void => {
|
|
1801
|
+
try {
|
|
1802
|
+
execFileSync('backlog', ['task', 'edit', id, '--check-dod', String(index)], {
|
|
1803
|
+
cwd: mainCheckoutPath,
|
|
1804
|
+
env: { ...process.env, BACKLOG_DISPATCH_ACTIVE: '1' },
|
|
1805
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
1806
|
+
timeout: EXTERNAL_CALL_TIMEOUT_MS,
|
|
1807
|
+
});
|
|
1808
|
+
} catch (error) {
|
|
1809
|
+
throw new Error(
|
|
1810
|
+
`dispatch.ts: backlog task edit ${id} --check-dod ${index} failed: ${describeExecFailure(error)}`,
|
|
1811
|
+
);
|
|
1812
|
+
}
|
|
1813
|
+
});
|
|
1814
|
+
const retryOptions: BoardWriteRetryOptions = { ...BOARD_WRITE_RETRY_DEFAULTS, ...deps.retry };
|
|
1815
|
+
|
|
1816
|
+
for (const item of findOwnedDefinitionOfDone(taskText, pattern)) {
|
|
1817
|
+
try {
|
|
1818
|
+
// A `task edit`, so it runs with the same dispatcher-owned-write sentinel `realBacklog` uses —
|
|
1819
|
+
// see `isDispatcherOwnedCallback` (entry.ts) and the measured T-5 defect this closes.
|
|
1820
|
+
withBoardWriteRetry(
|
|
1821
|
+
`backlog task edit ${taskId} --check-dod ${item.index}`,
|
|
1822
|
+
() => run(taskId, item.index),
|
|
1823
|
+
retryOptions,
|
|
1824
|
+
);
|
|
1825
|
+
} catch (error) {
|
|
1826
|
+
console.error(
|
|
1827
|
+
`dispatch.ts: could not tick DoD #${item.index} on ${taskId}:`,
|
|
1828
|
+
describeExecFailure(error),
|
|
1829
|
+
);
|
|
1830
|
+
}
|
|
1831
|
+
}
|
|
1832
|
+
}
|
|
1833
|
+
|
|
1834
|
+
function readTaskStatus(mainCheckoutPath: string, taskId: string): TaskStatus {
|
|
1835
|
+
return parseTaskView({ id: taskId, output: readTaskText(mainCheckoutPath, taskId), attempts: 0 })
|
|
1836
|
+
.status;
|
|
1837
|
+
}
|
|
1838
|
+
|
|
1839
|
+
// ── Executor prompt assembly (tasks.md 4.2/4.3) ───────────────────────────────
|
|
1840
|
+
//
|
|
1841
|
+
// Runs the two hooks the SAME way the harness itself does (`npx --loglevel=error tsx <hook>`,
|
|
1842
|
+
// see `.claude/settings.json`), just fed synthetic stdin instead of a live UserPromptSubmit/
|
|
1843
|
+
// PreToolUse event — Phase 1 spike 1.3's confirmed approach. `cwd` is always the task's own
|
|
1844
|
+
// worktree slot, so both hooks resolve their repo root (and, for the BR injector, its per-slot
|
|
1845
|
+
// `.claude/.cache/br-injected.json`) against that checkout, not the main one — while `BACKLOG_CWD`
|
|
1846
|
+
// in their env points the BOARD read at the main checkout, the only place tasks live.
|
|
1847
|
+
|
|
1848
|
+
/**
|
|
1849
|
+
* Injected so `buildHookRunners`'s environment contract is testable without spawning a hook.
|
|
1850
|
+
* `repoRoot` is bound by the caller; `env` is layered over the inherited one.
|
|
1851
|
+
*/
|
|
1852
|
+
export type HookScriptRunner = (
|
|
1853
|
+
hookRelativePath: string,
|
|
1854
|
+
cwd: string,
|
|
1855
|
+
env: Record<string, string>,
|
|
1856
|
+
stdinPayload: unknown,
|
|
1857
|
+
) => string;
|
|
1858
|
+
|
|
1859
|
+
function runHookScript(
|
|
1860
|
+
repoRoot: string,
|
|
1861
|
+
hookRelativePath: string,
|
|
1862
|
+
cwd: string,
|
|
1863
|
+
env: Record<string, string>,
|
|
1864
|
+
stdinPayload: unknown,
|
|
1865
|
+
): string {
|
|
1866
|
+
try {
|
|
1867
|
+
const result = execFileSync(
|
|
1868
|
+
'npx',
|
|
1869
|
+
['--loglevel=error', 'tsx', path.join(repoRoot, hookRelativePath)],
|
|
1870
|
+
{
|
|
1871
|
+
input: JSON.stringify(stdinPayload),
|
|
1872
|
+
cwd,
|
|
1873
|
+
env: { ...process.env, ...env },
|
|
1874
|
+
encoding: 'utf8',
|
|
1875
|
+
stdio: ['pipe', 'pipe', 'ignore'],
|
|
1876
|
+
timeout: EXTERNAL_CALL_TIMEOUT_MS,
|
|
1877
|
+
},
|
|
1878
|
+
);
|
|
1879
|
+
return result;
|
|
1880
|
+
} catch {
|
|
1881
|
+
return ''; // Fail open — an unavailable/erroring hook must never block prompt assembly.
|
|
1882
|
+
}
|
|
1883
|
+
}
|
|
1884
|
+
|
|
1885
|
+
/**
|
|
1886
|
+
* The two hook subprocesses `prompt.ts`'s precompute drives. They run with the SLOT as cwd (so they
|
|
1887
|
+
* resolve rules and the injector cache against the checkout the work happens in), but with
|
|
1888
|
+
* `BACKLOG_CWD` naming the MAIN checkout: the board lives only there, and a slot's own `.backlog/`
|
|
1889
|
+
* copy has no tasks in it. `BACKLOG_DISPATCH_ACTIVE` is what makes the hook state the dispatched
|
|
1890
|
+
* fact ("the dispatcher already set it In Progress") instead of pointing at the interactive Task
|
|
1891
|
+
* Gate.
|
|
1892
|
+
*
|
|
1893
|
+
* Both still travel even though the LOCAL precompute no longer asks the hook for a task block
|
|
1894
|
+
* (`prompt.ts`'s `buildHookPromptText` names no id, since block 1 already carries the task text):
|
|
1895
|
+
* they are the environment the hook is entitled to, and the moment anything here names an id again
|
|
1896
|
+
* the block must resolve against the real board and read as dispatched, not as a Task Gate.
|
|
1897
|
+
*/
|
|
1898
|
+
export function buildHookRunners(
|
|
1899
|
+
repoRoot: string,
|
|
1900
|
+
cwd: string,
|
|
1901
|
+
mainCheckoutPath: string,
|
|
1902
|
+
runHook: HookScriptRunner = (hookRelativePath, hookCwd, env, payload) =>
|
|
1903
|
+
runHookScript(repoRoot, hookRelativePath, hookCwd, env, payload),
|
|
1904
|
+
): HookRunners {
|
|
1905
|
+
const env = { BACKLOG_CWD: mainCheckoutPath, BACKLOG_DISPATCH_ACTIVE: '1' };
|
|
1906
|
+
return {
|
|
1907
|
+
resetInjectorCache: () => resetInjectorCache(cwd),
|
|
1908
|
+
runInjectPromptContext: (prompt) =>
|
|
1909
|
+
runHook('.claude/hooks/inject-prompt-context.ts', cwd, env, { prompt, cwd }),
|
|
1910
|
+
runBusinessRulesInjector: (filePath) => {
|
|
1911
|
+
const raw = runHook('.claude/hooks/business-rules-injector.ts', cwd, env, {
|
|
1912
|
+
tool_name: 'Edit',
|
|
1913
|
+
tool_input: { file_path: filePath },
|
|
1914
|
+
cwd,
|
|
1915
|
+
});
|
|
1916
|
+
try {
|
|
1917
|
+
const parsed = JSON.parse(raw) as { hookSpecificOutput?: { additionalContext?: string } };
|
|
1918
|
+
return parsed.hookSpecificOutput?.additionalContext ?? '';
|
|
1919
|
+
} catch {
|
|
1920
|
+
return ''; // No JSON on stdout — the hook found nothing to inject for this file.
|
|
1921
|
+
}
|
|
1922
|
+
},
|
|
1923
|
+
};
|
|
1924
|
+
}
|
|
1925
|
+
|
|
1926
|
+
/**
|
|
1927
|
+
* Builds the local lane's full six-block executor prompt (design.md's "Executor prompt
|
|
1928
|
+
* contract"; `prompt.ts`'s `assembleExecutorPrompt`). `taskText` is the same
|
|
1929
|
+
* `backlog task view --plain` output the board loader already knows how to fetch; the operating
|
|
1930
|
+
* envelope's acceptance criteria, Definition of Done, and test command are parsed back out of that
|
|
1931
|
+
* same text (there is no structured CLI field for any of the three — see prompt.ts's own header),
|
|
1932
|
+
* and a retry (`attempt > 1`) carries the task's most recent comment plus the prior attempt's
|
|
1933
|
+
* `review.md`, when one was written.
|
|
1934
|
+
*/
|
|
1935
|
+
function buildLocalExecutorPrompt(
|
|
1936
|
+
mainCheckoutPath: string,
|
|
1937
|
+
repoRoot: string,
|
|
1938
|
+
task: Task,
|
|
1939
|
+
attempt: number,
|
|
1940
|
+
): string {
|
|
1941
|
+
const taskText =
|
|
1942
|
+
readTaskText(mainCheckoutPath, task.id) || `Task ${task.id} (backlog task view failed)`;
|
|
1943
|
+
|
|
1944
|
+
const declaredFiles = task.filesToTouch;
|
|
1945
|
+
const slotDir = findSlotPathForTask(mainCheckoutPath, task.id);
|
|
1946
|
+
if (slotDir === null) {
|
|
1947
|
+
// Unreachable in the real flow (`runOnce` writes the registry before it builds the prompt), and
|
|
1948
|
+
// a throw is the right answer anyway: the abort path releases the slot and blocks the task,
|
|
1949
|
+
// rather than running the hooks against the main checkout.
|
|
1950
|
+
throw new Error(
|
|
1951
|
+
`dispatch.ts: ${task.id} has no slot assigned; cannot assemble its executor prompt.`,
|
|
1952
|
+
);
|
|
1953
|
+
}
|
|
1954
|
+
const hookOutputs = computeHookOutputs(
|
|
1955
|
+
buildHookRunners(repoRoot, slotDir, mainCheckoutPath),
|
|
1956
|
+
task,
|
|
1957
|
+
declaredFiles,
|
|
1958
|
+
);
|
|
1959
|
+
const triggersIndex = loadJsonIndex(repoRoot, SKILL_TRIGGERS_INDEX_FILE, isSkillTriggerIndex) ?? {
|
|
1960
|
+
skills: [],
|
|
1961
|
+
};
|
|
1962
|
+
const skillPaths = matchSkillPaths(declaredFiles, triggersIndex);
|
|
1963
|
+
const contract = extractDelegationContract(
|
|
1964
|
+
fs.readFileSync(path.join(repoRoot, DELEGATION_CONTRACT_FILE), 'utf8'),
|
|
1965
|
+
);
|
|
1966
|
+
|
|
1967
|
+
const envelope: OperatingEnvelope = {
|
|
1968
|
+
allowedFiles: declaredFiles,
|
|
1969
|
+
forbiddenPaths: SECURITY_PATH_PATTERNS,
|
|
1970
|
+
testCommand:
|
|
1971
|
+
task.testCommand ?? 'No test command declared on the task — stop and return needs-guidance.',
|
|
1972
|
+
taskId: task.id,
|
|
1973
|
+
// The same string `backlogRulesForTask` turned into the launch's `Bash(...)` rule, so the
|
|
1974
|
+
// command the prompt prints is the command the worker is actually allowed to run.
|
|
1975
|
+
editCommand: workerEditCommand(mainCheckoutPath, task.id),
|
|
1976
|
+
acceptanceCriteria: parseIndexedAcceptanceCriteria(taskText),
|
|
1977
|
+
dod: parseDefinitionOfDone(taskText),
|
|
1978
|
+
};
|
|
1979
|
+
|
|
1980
|
+
return assembleExecutorPrompt({
|
|
1981
|
+
task: taskText,
|
|
1982
|
+
// Named in the prompt because the worker cannot infer it: the task text carries the BOARD
|
|
1983
|
+
// file's path, which lives in the main checkout — and the T-5 executor read that as its
|
|
1984
|
+
// repository root and aimed its first `Edit` there.
|
|
1985
|
+
slotPath: slotDir,
|
|
1986
|
+
mainCheckoutPath,
|
|
1987
|
+
hookOutputs,
|
|
1988
|
+
skillPaths,
|
|
1989
|
+
contract,
|
|
1990
|
+
envelope,
|
|
1991
|
+
retry: readRetryContext(mainCheckoutPath, task.id, attempt),
|
|
1992
|
+
});
|
|
1993
|
+
}
|
|
1994
|
+
|
|
1995
|
+
/**
|
|
1996
|
+
* The prior attempt's `Blocked` comment and reviewer findings, or `undefined` on a first attempt.
|
|
1997
|
+
* Shared by both lanes: the frontier orchestrator gets the same context appended to its
|
|
1998
|
+
* `trabajemos <id>` entry, since nothing on the board tells it a previous attempt failed.
|
|
1999
|
+
*/
|
|
2000
|
+
function readRetryContext(
|
|
2001
|
+
mainCheckoutPath: string,
|
|
2002
|
+
taskId: string,
|
|
2003
|
+
attempt: number,
|
|
2004
|
+
): { blockedComment: string; reviewerFindings?: string } | undefined {
|
|
2005
|
+
if (attempt <= 1) {
|
|
2006
|
+
return undefined;
|
|
2007
|
+
}
|
|
2008
|
+
const blockedComment = parseLastComment(readTaskText(mainCheckoutPath, taskId));
|
|
2009
|
+
if (!blockedComment) {
|
|
2010
|
+
return undefined;
|
|
2011
|
+
}
|
|
2012
|
+
const reviewPath = path.join(
|
|
2013
|
+
mainCheckoutPath,
|
|
2014
|
+
DISPATCH_SUBDIR,
|
|
2015
|
+
taskId,
|
|
2016
|
+
`intento-${attempt - 1}`,
|
|
2017
|
+
'review.md',
|
|
2018
|
+
);
|
|
2019
|
+
return {
|
|
2020
|
+
blockedComment,
|
|
2021
|
+
reviewerFindings: fs.existsSync(reviewPath) ? fs.readFileSync(reviewPath, 'utf8') : undefined,
|
|
2022
|
+
};
|
|
2023
|
+
}
|
|
2024
|
+
|
|
2025
|
+
/**
|
|
2026
|
+
* Branch names currently checked out in ANY worktree of this repo. git refuses to check the same
|
|
2027
|
+
* branch out twice, so a task whose branch is still held by a slot that has not released yet has to
|
|
2028
|
+
* wait rather than fail.
|
|
2029
|
+
*/
|
|
2030
|
+
function readCheckedOutBranches(repoRoot: string): string[] {
|
|
2031
|
+
try {
|
|
2032
|
+
const output = execFileSync('git', ['worktree', 'list', '--porcelain'], {
|
|
2033
|
+
cwd: repoRoot,
|
|
2034
|
+
encoding: 'utf8',
|
|
2035
|
+
timeout: EXTERNAL_CALL_TIMEOUT_MS,
|
|
2036
|
+
});
|
|
2037
|
+
return output
|
|
2038
|
+
.split('\n')
|
|
2039
|
+
.filter((line) => line.startsWith('branch '))
|
|
2040
|
+
.map((line) =>
|
|
2041
|
+
line
|
|
2042
|
+
.slice('branch '.length)
|
|
2043
|
+
.trim()
|
|
2044
|
+
.replace(/^refs\/heads\//, ''),
|
|
2045
|
+
)
|
|
2046
|
+
.filter(Boolean);
|
|
2047
|
+
} catch (error) {
|
|
2048
|
+
console.error(
|
|
2049
|
+
'dispatch.ts: git worktree list failed; assuming no branch is checked out:',
|
|
2050
|
+
error,
|
|
2051
|
+
);
|
|
2052
|
+
return [];
|
|
2053
|
+
}
|
|
2054
|
+
}
|
|
2055
|
+
|
|
2056
|
+
/** `null` when the lockfile cannot be read — the install check then never fires spuriously. */
|
|
2057
|
+
export function readLockfileHash(repoRoot: string): string | null {
|
|
2058
|
+
try {
|
|
2059
|
+
return computeLockfileHash(path.join(repoRoot, 'pnpm-lock.yaml'));
|
|
2060
|
+
} catch (error) {
|
|
2061
|
+
console.error(
|
|
2062
|
+
'dispatch.ts: could not hash pnpm-lock.yaml; skipping the slot install check:',
|
|
2063
|
+
error,
|
|
2064
|
+
);
|
|
2065
|
+
return null;
|
|
2066
|
+
}
|
|
2067
|
+
}
|
|
2068
|
+
|
|
2069
|
+
/**
|
|
2070
|
+
* `packages/cli`'s OWN lockfile hash, read separately from the root's (T-50): `packages/cli` is
|
|
2071
|
+
* deliberately not a pnpm workspace member (root `CLAUDE.md`, D8), so it carries its own
|
|
2072
|
+
* `pnpm-lock.yaml` outside the root's. Kept in its own function, and its own `SlotInfo` field
|
|
2073
|
+
* (`cliLockfileHash`), rather than folded into `readLockfileHash`'s digest: the two installs are
|
|
2074
|
+
* decided and persisted at different points in the dispatch sequence (the root's before
|
|
2075
|
+
* `prepareSlot`, the CLI's only after its own install succeeds, later in the same pass), so one
|
|
2076
|
+
* combined hash could not honor either success moment on its own — a single field could go stale
|
|
2077
|
+
* for the CLI's half while reading as current for the root's, or vice-versa, with no way to tell
|
|
2078
|
+
* from the outside which install a mismatch was actually about.
|
|
2079
|
+
*
|
|
2080
|
+
* Callers must check `hasCliPackage` FIRST: called on a repo with no `packages/cli` of its own (the
|
|
2081
|
+
* monorepo THIS CLI generates — `packages/cli/src/templates/monorepo/` has no `packages/`
|
|
2082
|
+
* directory at all), this always fails to read the file and logs accordingly; the caller is
|
|
2083
|
+
* expected to skip calling it entirely in that case, matching `needsCliInstall`'s own
|
|
2084
|
+
* `hasCliPackage` gate, so no such repo ever sees that log line.
|
|
2085
|
+
*/
|
|
2086
|
+
export function readCliLockfileHash(repoRoot: string): string | null {
|
|
2087
|
+
try {
|
|
2088
|
+
return computeLockfileHash(path.join(repoRoot, 'packages/cli/pnpm-lock.yaml'));
|
|
2089
|
+
} catch (error) {
|
|
2090
|
+
console.error(
|
|
2091
|
+
'dispatch.ts: could not hash packages/cli/pnpm-lock.yaml; skipping the CLI install check:',
|
|
2092
|
+
error,
|
|
2093
|
+
);
|
|
2094
|
+
return null;
|
|
2095
|
+
}
|
|
2096
|
+
}
|
|
2097
|
+
|
|
2098
|
+
// ── main ────────────────────────────────────────────────────────────────────────
|
|
2099
|
+
|
|
2100
|
+
/** A drained pass may itself drain; two is the cap, so one trigger can never loop the queue. */
|
|
2101
|
+
const MAX_PASSES_PER_INVOCATION = 2;
|
|
2102
|
+
|
|
2103
|
+
/** The one flag this script takes: the manual rescue of a slot held for push recovery. */
|
|
2104
|
+
const RELEASE_SLOT_FLAG = '--release-slot';
|
|
2105
|
+
/** The override for a slot the release guard refuses — see `releaseSlotByName`. */
|
|
2106
|
+
const FORCE_FLAG = '--force';
|
|
2107
|
+
|
|
2108
|
+
export interface ReleaseSlotRequest {
|
|
2109
|
+
slot: string;
|
|
2110
|
+
force: boolean;
|
|
2111
|
+
}
|
|
2112
|
+
|
|
2113
|
+
/**
|
|
2114
|
+
* The `--release-slot` request, or `null` when the flag is absent. Refuses a missing or flag-shaped
|
|
2115
|
+
* value rather than releasing something unnamed — which is how a rescue turns into a second
|
|
2116
|
+
* incident. `--force` is read from anywhere in the argv; the slot NAME must follow its own flag.
|
|
2117
|
+
*/
|
|
2118
|
+
export function parseReleaseSlotArg(argv: readonly string[]): ReleaseSlotRequest | null {
|
|
2119
|
+
const index = argv.indexOf(RELEASE_SLOT_FLAG);
|
|
2120
|
+
if (index === -1) {
|
|
2121
|
+
return null;
|
|
2122
|
+
}
|
|
2123
|
+
const value = argv[index + 1];
|
|
2124
|
+
if (value === undefined || value.startsWith('-')) {
|
|
2125
|
+
throw new Error(
|
|
2126
|
+
`dispatch.ts: ${RELEASE_SLOT_FLAG} needs a slot name (e.g. ${RELEASE_SLOT_FLAG} dispatch-1).`,
|
|
2127
|
+
);
|
|
2128
|
+
}
|
|
2129
|
+
return { slot: value, force: argv.includes(FORCE_FLAG) };
|
|
2130
|
+
}
|
|
2131
|
+
|
|
2132
|
+
/** Every side effect the manual release performs, injected so the guard below is testable. */
|
|
2133
|
+
export interface ReleaseSlotDeps {
|
|
2134
|
+
readSlots: () => SlotRegistry;
|
|
2135
|
+
readLock: (taskId: string) => DispatchLock | null;
|
|
2136
|
+
isPidAlive: (pid: number) => boolean;
|
|
2137
|
+
now: number;
|
|
2138
|
+
ttlMs: number;
|
|
2139
|
+
detach: (slotPath: string) => void;
|
|
2140
|
+
removeLock: (taskId: string) => void;
|
|
2141
|
+
updateSlots: (mutate: (current: SlotRegistry) => SlotRegistry) => void;
|
|
2142
|
+
log: (message: string) => void;
|
|
2143
|
+
/**
|
|
2144
|
+
* The same single-flight lock a reconciler pass runs its selection under. The rescue is a
|
|
2145
|
+
* read→decide→detach over the very state a pass mutates, so without it the two interleave: a pass
|
|
2146
|
+
* that acquired this slot between the read and the detach loses its worktree under a worker that
|
|
2147
|
+
* is just starting.
|
|
2148
|
+
*/
|
|
2149
|
+
acquireSingleFlight: () => SingleFlightResult;
|
|
2150
|
+
releaseSingleFlight: () => void;
|
|
2151
|
+
}
|
|
2152
|
+
|
|
2153
|
+
export type ReleaseSlotOutcome = { kind: 'released' } | { kind: 'refused'; reason: string };
|
|
2154
|
+
|
|
2155
|
+
/**
|
|
2156
|
+
* The manual counterpart to an exhausted push recovery (`maintenance.ts`'s `MAX_RECOVERY_ATTEMPTS`,
|
|
2157
|
+
* README's "Releasing a `Blocked` task"): clears the hold and the task binding, and detaches the
|
|
2158
|
+
* worktree so the branch is free for a later dispatch. A pass does NOT run — this is a person
|
|
2159
|
+
* rescuing a slot, not a trigger.
|
|
2160
|
+
*
|
|
2161
|
+
* It REFUSES a slot that is genuinely busy, because "release this slot" and "kill what is running in
|
|
2162
|
+
* it" are different requests and the flag only ever advertised the first. Detaching a worktree under
|
|
2163
|
+
* a live `claude` loses its uncommitted work, drops the lock the close re-reads before it runs, and
|
|
2164
|
+
* hands the directory to the next dispatch. A slot may be released when it is flagged
|
|
2165
|
+
* `heldForRecovery` (the documented case: the work is already committed, only the push failed) or
|
|
2166
|
+
* when its task lock is absent or dead — no such process, or a heartbeat past the TTL — which is
|
|
2167
|
+
* exactly the liveness question the maintenance sweep asks. `--force` is the override for a person
|
|
2168
|
+
* who has looked and decided.
|
|
2169
|
+
*/
|
|
2170
|
+
export function releaseSlotByName(
|
|
2171
|
+
slotName: string,
|
|
2172
|
+
force: boolean,
|
|
2173
|
+
deps: ReleaseSlotDeps,
|
|
2174
|
+
): ReleaseSlotOutcome {
|
|
2175
|
+
const singleFlight = deps.acquireSingleFlight();
|
|
2176
|
+
if (singleFlight.kind === 'already-running' && !force) {
|
|
2177
|
+
return {
|
|
2178
|
+
kind: 'refused',
|
|
2179
|
+
reason:
|
|
2180
|
+
`a reconciler pass is already running (pid ${singleFlight.pid}); releasing a slot underneath it would ` +
|
|
2181
|
+
`detach a worktree it is about to write in. Wait for the pass, or re-run with ${FORCE_FLAG} if you have ` +
|
|
2182
|
+
'looked and decided.',
|
|
2183
|
+
};
|
|
2184
|
+
}
|
|
2185
|
+
try {
|
|
2186
|
+
return releaseSlotUnderSingleFlight(slotName, force, deps);
|
|
2187
|
+
} finally {
|
|
2188
|
+
// Only a lock this call actually took: with `--force` past a running pass there is nothing of
|
|
2189
|
+
// ours to release, and removing that pass's lock would let a third one start alongside it.
|
|
2190
|
+
if (singleFlight.kind === 'acquired') {
|
|
2191
|
+
deps.releaseSingleFlight();
|
|
2192
|
+
}
|
|
2193
|
+
}
|
|
2194
|
+
}
|
|
2195
|
+
|
|
2196
|
+
function releaseSlotUnderSingleFlight(
|
|
2197
|
+
slotName: string,
|
|
2198
|
+
force: boolean,
|
|
2199
|
+
deps: ReleaseSlotDeps,
|
|
2200
|
+
): ReleaseSlotOutcome {
|
|
2201
|
+
const slot = deps.readSlots().slots.find((entry) => entry.name === slotName);
|
|
2202
|
+
if (!slot) {
|
|
2203
|
+
return { kind: 'refused', reason: `no slot named ${slotName} in the registry.` };
|
|
2204
|
+
}
|
|
2205
|
+
|
|
2206
|
+
const lock = slot.taskId ? deps.readLock(slot.taskId) : null;
|
|
2207
|
+
const busy = lock !== null && isLockAlive(lock, deps.now, deps.ttlMs, deps.isPidAlive);
|
|
2208
|
+
if (busy && !slot.heldForRecovery && !force) {
|
|
2209
|
+
return {
|
|
2210
|
+
kind: 'refused',
|
|
2211
|
+
reason:
|
|
2212
|
+
`${slotName} is running ${slot.taskId} (pid ${lock.workerPid ?? lock.pid}) and is not held for push recovery. ` +
|
|
2213
|
+
`Releasing it would detach the worktree under a live worker and lose its uncommitted work. ` +
|
|
2214
|
+
`Wait for the attempt, cancel the task on the board, or re-run with ${FORCE_FLAG} if you have looked and decided.`,
|
|
2215
|
+
};
|
|
2216
|
+
}
|
|
2217
|
+
|
|
2218
|
+
deps.detach(slot.path);
|
|
2219
|
+
if (slot.taskId) {
|
|
2220
|
+
deps.removeLock(slot.taskId);
|
|
2221
|
+
}
|
|
2222
|
+
deps.updateSlots((current) => ({ slots: releaseHeldSlotEntries(current.slots, slotName) }));
|
|
2223
|
+
deps.log(
|
|
2224
|
+
`dispatch.ts: ${slotName} released (was holding ${slot.taskId ?? 'nothing'}); it is back in the pool.`,
|
|
2225
|
+
);
|
|
2226
|
+
return { kind: 'released' };
|
|
2227
|
+
}
|
|
2228
|
+
|
|
2229
|
+
/**
|
|
2230
|
+
* The MAIN checkout's `.git` common directory, exactly as `git rev-parse --git-common-dir` reports
|
|
2231
|
+
* it — absolute when run from a worktree, relative when run from the main checkout itself. The one
|
|
2232
|
+
* `gitCommonDir` collaborator `entry.ts`'s `resolveContext`/`resolveMainCheckout` need, real for
|
|
2233
|
+
* every actual trigger; `graph-cli.ts` and `watch.ts` import this same function rather than
|
|
2234
|
+
* shelling out a second way to ask git the same question.
|
|
2235
|
+
*/
|
|
2236
|
+
export function realGitCommonDir(cwd: string): string {
|
|
2237
|
+
return execFileSync('git', ['rev-parse', '--git-common-dir'], {
|
|
2238
|
+
cwd,
|
|
2239
|
+
encoding: 'utf8',
|
|
2240
|
+
timeout: EXTERNAL_CALL_TIMEOUT_MS,
|
|
2241
|
+
});
|
|
2242
|
+
}
|
|
2243
|
+
|
|
2244
|
+
/**
|
|
2245
|
+
* The single-flight lock file, as one PID a process writes and reads back. Built here rather than
|
|
2246
|
+
* inline in `main` because the `--release-slot` rescue serializes on the SAME file: two callers of
|
|
2247
|
+
* one lock must not be two spellings of its path.
|
|
2248
|
+
*/
|
|
2249
|
+
function realSingleFlightFs(dispatchDir: string): SingleFlightFs {
|
|
2250
|
+
const singleFlightFile = path.join(dispatchDir, 'dispatch.lock');
|
|
2251
|
+
return {
|
|
2252
|
+
readLockPid: () => {
|
|
2253
|
+
if (!fs.existsSync(singleFlightFile)) {
|
|
2254
|
+
return null;
|
|
2255
|
+
}
|
|
2256
|
+
const raw = fs.readFileSync(singleFlightFile, 'utf8').trim();
|
|
2257
|
+
const pid = Number(raw);
|
|
2258
|
+
return Number.isFinite(pid) ? pid : null;
|
|
2259
|
+
},
|
|
2260
|
+
writeLockPid: (pid) => fs.writeFileSync(singleFlightFile, String(pid)),
|
|
2261
|
+
removeLock: () => {
|
|
2262
|
+
if (fs.existsSync(singleFlightFile)) {
|
|
2263
|
+
fs.rmSync(singleFlightFile);
|
|
2264
|
+
}
|
|
2265
|
+
},
|
|
2266
|
+
};
|
|
2267
|
+
}
|
|
2268
|
+
|
|
2269
|
+
/** The real collaborators for `releaseSlotByName`, wired the way every other real runner is. */
|
|
2270
|
+
function realReleaseSlotDeps(mainCheckoutPath: string, repoRoot: string): ReleaseSlotDeps {
|
|
2271
|
+
const slotsFs = realMaintenanceFs(mainCheckoutPath, repoRoot);
|
|
2272
|
+
const dispatchDir = path.join(mainCheckoutPath, DISPATCH_SUBDIR);
|
|
2273
|
+
const singleFlightFs = realSingleFlightFs(dispatchDir);
|
|
2274
|
+
return {
|
|
2275
|
+
acquireSingleFlight: (): SingleFlightResult =>
|
|
2276
|
+
acquireSingleFlight(singleFlightFs, process.pid, isProcessAlive),
|
|
2277
|
+
releaseSingleFlight: () => releaseSingleFlight(singleFlightFs, process.pid),
|
|
2278
|
+
readSlots: () => slotsFs.readSlots(),
|
|
2279
|
+
readLock: (taskId) => readLock(dispatchDir, taskId),
|
|
2280
|
+
isPidAlive: isProcessAlive,
|
|
2281
|
+
now: Date.now(),
|
|
2282
|
+
ttlMs: LOCK_TTL_MS,
|
|
2283
|
+
detach: (slotPath) =>
|
|
2284
|
+
detachSlot(
|
|
2285
|
+
slotPath,
|
|
2286
|
+
(args, at) =>
|
|
2287
|
+
void execFileSync('git', args, {
|
|
2288
|
+
cwd: at,
|
|
2289
|
+
stdio: 'ignore',
|
|
2290
|
+
timeout: EXTERNAL_CALL_TIMEOUT_MS,
|
|
2291
|
+
}),
|
|
2292
|
+
),
|
|
2293
|
+
removeLock: (taskId) => releaseLock(dispatchDir, taskId),
|
|
2294
|
+
updateSlots: (mutate) => void slotsFs.updateSlots(mutate),
|
|
2295
|
+
log: (message) => console.log(message),
|
|
2296
|
+
};
|
|
2297
|
+
}
|
|
2298
|
+
|
|
2299
|
+
async function main(): Promise<void> {
|
|
2300
|
+
// Checked FIRST, before resolving context or running any maintenance at all: a dispatcher-owned
|
|
2301
|
+
// write (`realBacklog`, `tickOwnedDod`) now runs with `BACKLOG_DISPATCH_ACTIVE='1'` in its env, so
|
|
2302
|
+
// the `onStatusChange` callback it fires inherits the sentinel alongside the `TASK_ID`/`NEW_STATUS`
|
|
2303
|
+
// Backlog.md sets. `shouldDispatchFromCallback` only ever suppressed task SELECTION — maintenance
|
|
2304
|
+
// ran unconditionally underneath it — so this nested invocation used to run its own maintenance
|
|
2305
|
+
// sweep (a `.backlog` git commit among other things) concurrently with the pass that made the
|
|
2306
|
+
// write and was still mid-dispatch in the SAME checkout. That race is the measured T-5 defect:
|
|
2307
|
+
// two passes committing `.backlog` in the same checkout failed with git exit 128, and the
|
|
2308
|
+
// dispatcher-owned edits that followed then failed too, with no visible cause. This exits before
|
|
2309
|
+
// any of that runs — a genuine human callback (no sentinel) and the launchd timer / `gh`-poll
|
|
2310
|
+
// trigger (no `TASK_ID` at all) are unaffected and still run their normal pass.
|
|
2311
|
+
if (
|
|
2312
|
+
isDispatcherOwnedCallback({
|
|
2313
|
+
TASK_ID: process.env.TASK_ID,
|
|
2314
|
+
NEW_STATUS: process.env.NEW_STATUS,
|
|
2315
|
+
BACKLOG_DISPATCH_ACTIVE: process.env.BACKLOG_DISPATCH_ACTIVE,
|
|
2316
|
+
})
|
|
2317
|
+
) {
|
|
2318
|
+
console.log(
|
|
2319
|
+
`dispatch.ts: callback from a dispatcher-owned write (${process.env.TASK_ID} → ${process.env.NEW_STATUS}); no pass`,
|
|
2320
|
+
);
|
|
2321
|
+
return;
|
|
2322
|
+
}
|
|
2323
|
+
|
|
2324
|
+
const cwd = process.cwd();
|
|
2325
|
+
const gitCommonDir = (): string => realGitCommonDir(cwd);
|
|
2326
|
+
const { mainCheckoutPath } = resolveContext({
|
|
2327
|
+
cwd,
|
|
2328
|
+
env: { BACKLOG_CWD: process.env.BACKLOG_CWD },
|
|
2329
|
+
gitCommonDir,
|
|
2330
|
+
});
|
|
2331
|
+
// Never BACKLOG_CWD-overridden, and never resolved from a worktree's own copy of this repo: the
|
|
2332
|
+
// code assets lanes.json describes (settings files, worktree slots, `lanes.json` itself) belong to
|
|
2333
|
+
// THIS MACHINE's aurora-catalyst checkout, regardless of which backlog project BACKLOG_CWD points
|
|
2334
|
+
// board data at (see realMaintenanceFs's doc comment) — and regardless of which worktree slot this
|
|
2335
|
+
// very reconciler pass happens to be running from, since `resolveMainCheckout` always walks git
|
|
2336
|
+
// topology up to the main checkout rather than trusting `cwd` directly.
|
|
2337
|
+
const repoRoot = resolveMainCheckout({ cwd, gitCommonDir });
|
|
2338
|
+
const dispatchDir = path.join(mainCheckoutPath, DISPATCH_SUBDIR);
|
|
2339
|
+
fs.mkdirSync(dispatchDir, { recursive: true });
|
|
2340
|
+
|
|
2341
|
+
const releaseRequest = parseReleaseSlotArg(process.argv.slice(2));
|
|
2342
|
+
if (releaseRequest !== null) {
|
|
2343
|
+
const outcome = releaseSlotByName(
|
|
2344
|
+
releaseRequest.slot,
|
|
2345
|
+
releaseRequest.force,
|
|
2346
|
+
realReleaseSlotDeps(mainCheckoutPath, repoRoot),
|
|
2347
|
+
);
|
|
2348
|
+
if (outcome.kind === 'refused') {
|
|
2349
|
+
// Exit 2, not 1: a refusal is this script declining a request, not a run that broke — the
|
|
2350
|
+
// same distinction `worker-edit.ts` draws against the `backlog` CLI's own 1.
|
|
2351
|
+
console.error(`dispatch.ts: ${outcome.reason}`);
|
|
2352
|
+
process.exit(2);
|
|
2353
|
+
}
|
|
2354
|
+
return;
|
|
2355
|
+
}
|
|
2356
|
+
|
|
2357
|
+
const singleFlightFs = realSingleFlightFs(dispatchDir);
|
|
2358
|
+
|
|
2359
|
+
const laneConfig = loadLaneConfig(path.join(repoRoot, 'scripts/backlog/lanes.json'));
|
|
2360
|
+
|
|
2361
|
+
for (let pass = 1; pass <= MAX_PASSES_PER_INVOCATION; pass += 1) {
|
|
2362
|
+
const acquireResult = acquireSingleFlight(singleFlightFs, process.pid, isProcessAlive);
|
|
2363
|
+
if (acquireResult.kind === 'already-running') {
|
|
2364
|
+
console.error(
|
|
2365
|
+
`dispatch.ts: another reconciler pass is already running (pid ${acquireResult.pid}); exiting.`,
|
|
2366
|
+
);
|
|
2367
|
+
return;
|
|
2368
|
+
}
|
|
2369
|
+
|
|
2370
|
+
let drainRequested = false;
|
|
2371
|
+
try {
|
|
2372
|
+
const result = await runPass({
|
|
2373
|
+
mainCheckoutPath,
|
|
2374
|
+
repoRoot,
|
|
2375
|
+
dispatchDir,
|
|
2376
|
+
laneConfig,
|
|
2377
|
+
releaseSingleFlight: () => releaseSingleFlight(singleFlightFs, process.pid),
|
|
2378
|
+
requestDrain: () => {
|
|
2379
|
+
drainRequested = true;
|
|
2380
|
+
},
|
|
2381
|
+
});
|
|
2382
|
+
console.log(`dispatch.ts: pass ${pass} complete — outcome=${formatOutcome(result.outcome)}`);
|
|
2383
|
+
} finally {
|
|
2384
|
+
releaseSingleFlight(singleFlightFs, process.pid);
|
|
2385
|
+
}
|
|
2386
|
+
|
|
2387
|
+
if (!drainRequested) {
|
|
2388
|
+
return;
|
|
2389
|
+
}
|
|
2390
|
+
console.log('dispatch.ts: draining — re-running one pass for the next Queued task.');
|
|
2391
|
+
}
|
|
2392
|
+
}
|
|
2393
|
+
|
|
2394
|
+
interface RunPassInput {
|
|
2395
|
+
mainCheckoutPath: string;
|
|
2396
|
+
repoRoot: string;
|
|
2397
|
+
dispatchDir: string;
|
|
2398
|
+
laneConfig: ReturnType<typeof loadLaneConfig>;
|
|
2399
|
+
releaseSingleFlight: () => void;
|
|
2400
|
+
requestDrain: () => void;
|
|
2401
|
+
}
|
|
2402
|
+
|
|
2403
|
+
async function runPass(input: RunPassInput) {
|
|
2404
|
+
const { mainCheckoutPath, repoRoot, dispatchDir, laneConfig } = input;
|
|
2405
|
+
// The snapshot maintenance sweeps over. `reloadTasks` below re-reads AFTER that sweep and keeps
|
|
2406
|
+
// `tasksById` current, so the close's parent recomputation never derives from a pre-sweep board.
|
|
2407
|
+
const board = loadAllTasks(mainCheckoutPath);
|
|
2408
|
+
let tasksById = Object.fromEntries(board.tasks.map((task) => [task.id, task]));
|
|
2409
|
+
// Tracked alongside `tasksById` and from the SAME read: the close's parent derivation must know
|
|
2410
|
+
// whether the snapshot it derives from is the whole board (see `BuildCloseRunnersInput`).
|
|
2411
|
+
let boardComplete = board.complete;
|
|
2412
|
+
const localSettings = (): LocalLaneSettings =>
|
|
2413
|
+
JSON.parse(
|
|
2414
|
+
fs.readFileSync(path.join(repoRoot, laneConfig.lanes.local.settings), 'utf8'),
|
|
2415
|
+
) as LocalLaneSettings;
|
|
2416
|
+
|
|
2417
|
+
const maintenance: MaintenanceContext = {
|
|
2418
|
+
now: Date.now(),
|
|
2419
|
+
ttlMs: LOCK_TTL_MS,
|
|
2420
|
+
// T-8 point 5/10: `lanes.json`'s `orphanInProgressThresholdHours` converted to ms — the sweep's
|
|
2421
|
+
// step 3c (an orphan `In Progress` task) is gated on this being SET, so without this line the
|
|
2422
|
+
// step never runs at all (see `MaintenanceContext.orphanInProgressThresholdMs`'s own JSDoc).
|
|
2423
|
+
// Defect 12 (2026-09-08): the conversion goes through `resolveOrphanInProgressThresholdMs`
|
|
2424
|
+
// rather than a bare multiplication, so a configured `0` disables the sweep instead of becoming
|
|
2425
|
+
// the most aggressive possible threshold.
|
|
2426
|
+
orphanInProgressThresholdMs: resolveOrphanInProgressThresholdMs(
|
|
2427
|
+
laneConfig.orphanInProgressThresholdHours,
|
|
2428
|
+
),
|
|
2429
|
+
isPidAlive: isProcessAlive,
|
|
2430
|
+
tasks: board.tasks,
|
|
2431
|
+
// A partial read must not let the sweep infer a deletion (see `MaintenanceContext`).
|
|
2432
|
+
boardComplete: board.complete,
|
|
2433
|
+
fs: realMaintenanceFs(mainCheckoutPath, repoRoot),
|
|
2434
|
+
gh: realGh(repoRoot),
|
|
2435
|
+
backlog: realBacklog(mainCheckoutPath),
|
|
2436
|
+
git: realGit(mainCheckoutPath),
|
|
2437
|
+
// The whole GROUP, not the pid: a `claude` worker spawns hooks, `pnpm test` and sub-agents, and
|
|
2438
|
+
// killing only its own pid leaves those running in the slot the sweep is about to release.
|
|
2439
|
+
killProcess: (pid) => killProcessTree(pid),
|
|
2440
|
+
notify: (title, body) => notify(title, body, runOsascript),
|
|
2441
|
+
};
|
|
2442
|
+
|
|
2443
|
+
const env = {
|
|
2444
|
+
NEW_STATUS: process.env.NEW_STATUS,
|
|
2445
|
+
OLD_STATUS: process.env.OLD_STATUS,
|
|
2446
|
+
BACKLOG_DISPATCH_ACTIVE: process.env.BACKLOG_DISPATCH_ACTIVE,
|
|
2447
|
+
};
|
|
2448
|
+
const slotsFs = realMaintenanceFs(mainCheckoutPath, repoRoot);
|
|
2449
|
+
|
|
2450
|
+
// Fetch before reading the remote branch list: a stale list makes a retry look like a first
|
|
2451
|
+
// dispatch, which branches fresh off `origin/main` and abandons the previous attempt's work.
|
|
2452
|
+
//
|
|
2453
|
+
// This list now decides more than a base ref (T-14, 2026-09-08): `guards.ts`'s guard 4b reads it
|
|
2454
|
+
// to refuse a subtask whose parent branch is missing, BEFORE anything else runs. A stale list can
|
|
2455
|
+
// therefore produce a false BLOCK (a branch that IS on the remote reads as missing here) as much
|
|
2456
|
+
// as it can a false PASS (a branch pruned on the remote is still present in a stale local
|
|
2457
|
+
// remote-tracking copy — `--prune` above is what is supposed to prevent that, so its own failure
|
|
2458
|
+
// is exactly the case where it cannot). Measured, not hypothetical: this machine's reconciler log
|
|
2459
|
+
// carries `ssh: connect to host github.com port 22: Operation timed out` from a fetch that failed
|
|
2460
|
+
// on 2026-09-08, the same day this guard shipped.
|
|
2461
|
+
try {
|
|
2462
|
+
execFileSync('git', ['fetch', 'origin', '--prune'], {
|
|
2463
|
+
cwd: repoRoot,
|
|
2464
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
2465
|
+
timeout: EXTERNAL_CALL_TIMEOUT_MS,
|
|
2466
|
+
});
|
|
2467
|
+
} catch (error) {
|
|
2468
|
+
console.error(
|
|
2469
|
+
'dispatch.ts: git fetch failed; the remote branch list may be stale, which can now produce ' +
|
|
2470
|
+
'a false Blocked (guard 4b) as well as a stale base ref:',
|
|
2471
|
+
describeExecFailure(error),
|
|
2472
|
+
);
|
|
2473
|
+
}
|
|
2474
|
+
|
|
2475
|
+
let remoteBranches: string[] = [];
|
|
2476
|
+
try {
|
|
2477
|
+
const output = execFileSync('git', ['branch', '-r', '--format=%(refname:short)'], {
|
|
2478
|
+
cwd: repoRoot,
|
|
2479
|
+
encoding: 'utf8',
|
|
2480
|
+
timeout: EXTERNAL_CALL_TIMEOUT_MS,
|
|
2481
|
+
});
|
|
2482
|
+
remoteBranches = output
|
|
2483
|
+
.split('\n')
|
|
2484
|
+
.map((line) => line.trim().replace(/^origin\//, ''))
|
|
2485
|
+
.filter(Boolean);
|
|
2486
|
+
} catch (error) {
|
|
2487
|
+
// Silent before T-14: an empty list used to mean "branch off origin/main", a fallback the
|
|
2488
|
+
// pass just ran with. Now it means EVERY subtask on the board is refused by guard 4b with a
|
|
2489
|
+
// cause that names a branch which may well already be on the remote — so a swallowed failure
|
|
2490
|
+
// here left nobody able to tell a genuine missing branch from `git branch -r` itself failing.
|
|
2491
|
+
console.error(
|
|
2492
|
+
'dispatch.ts: git branch -r failed; treating the remote branch list as empty, which now ' +
|
|
2493
|
+
'blocks EVERY subtask on the board (guard 4b) with a cause that may not be true:',
|
|
2494
|
+
describeExecFailure(error),
|
|
2495
|
+
);
|
|
2496
|
+
remoteBranches = [];
|
|
2497
|
+
}
|
|
2498
|
+
|
|
2499
|
+
const branchesCheckedOutElsewhere = readCheckedOutBranches(repoRoot);
|
|
2500
|
+
const lockfileHash = readLockfileHash(repoRoot);
|
|
2501
|
+
// T-50: a monorepo GENERATED by this CLI (`packages/cli/src/templates/monorepo/`) has no
|
|
2502
|
+
// `packages/cli` of its own — it consumes the npm-published `catalyst` binary instead — so the
|
|
2503
|
+
// CLI install/dist-removal step never applies there at all. Checked once per pass: the MAIN
|
|
2504
|
+
// checkout's own `packages/cli` either exists or it does not, for every slot alike. Only read
|
|
2505
|
+
// the CLI's own lockfile hash when the package exists at all, so a generated monorepo never logs
|
|
2506
|
+
// the "could not hash" line `readCliLockfileHash` would otherwise produce on every pass.
|
|
2507
|
+
const hasCliPackage = fs.existsSync(path.join(repoRoot, 'packages/cli'));
|
|
2508
|
+
const currentCliLockfileHash = hasCliPackage ? readCliLockfileHash(repoRoot) : null;
|
|
2509
|
+
|
|
2510
|
+
const ctx: RunOnceContext = {
|
|
2511
|
+
shouldSelect: shouldDispatchFromCallback(env),
|
|
2512
|
+
maintenance,
|
|
2513
|
+
reloadTasks: () => {
|
|
2514
|
+
const current = loadAllTasks(mainCheckoutPath);
|
|
2515
|
+
tasksById = Object.fromEntries(current.tasks.map((task) => [task.id, task]));
|
|
2516
|
+
boardComplete = current.complete;
|
|
2517
|
+
return current;
|
|
2518
|
+
},
|
|
2519
|
+
updateSlots: (mutate) => slotsFs.updateSlots(mutate),
|
|
2520
|
+
removeLock: (taskId) => releaseLock(dispatchDir, taskId),
|
|
2521
|
+
onDispatchFailure: (task, error) => {
|
|
2522
|
+
const comment = `Bloqueado: el dispatch falló antes de que el worker terminara: ${String(error)}`;
|
|
2523
|
+
realBacklog(mainCheckoutPath).setStatus(task.id, TASK_STATUS.BLOCKED, comment);
|
|
2524
|
+
notify(`${task.id} blocked: dispatch-failed`, comment, runOsascript);
|
|
2525
|
+
},
|
|
2526
|
+
mainCheckoutPath,
|
|
2527
|
+
currentPid: process.pid,
|
|
2528
|
+
attempt: (task) => task.attempts + 1,
|
|
2529
|
+
onBlock: (task, guardResult) => {
|
|
2530
|
+
realBacklog(mainCheckoutPath).setStatus(task.id, TASK_STATUS.BLOCKED, guardResult.comment);
|
|
2531
|
+
notify(`${task.id} blocked: ${guardResult.reason}`, guardResult.comment, runOsascript);
|
|
2532
|
+
},
|
|
2533
|
+
remoteBranches,
|
|
2534
|
+
branchesCheckedOutElsewhere,
|
|
2535
|
+
provisionSlot: (slot) => {
|
|
2536
|
+
const install = lockfileHash !== null && needsInstall(slot, lockfileHash);
|
|
2537
|
+
provisionSlot({
|
|
2538
|
+
slotPath: slot.path,
|
|
2539
|
+
repoRoot,
|
|
2540
|
+
slotExists: fs.existsSync(slot.path),
|
|
2541
|
+
needsInstall: install,
|
|
2542
|
+
run: (command, args, cwd) => {
|
|
2543
|
+
console.log(`dispatch.ts: provisioning ${slot.name} — ${command} ${args.join(' ')}`);
|
|
2544
|
+
execFileSync(command, args, { cwd, stdio: 'inherit' });
|
|
2545
|
+
},
|
|
2546
|
+
});
|
|
2547
|
+
return install && lockfileHash !== null ? { ...slot, lockfileHash } : slot;
|
|
2548
|
+
},
|
|
2549
|
+
// T-50: MUST run after `entry.ts` has already called `prepareSlot` — never before, never
|
|
2550
|
+
// folded into `provisionSlot` above. `provisionSlot` runs BEFORE `prepareSlot` (the worktree
|
|
2551
|
+
// may not even exist yet), so acting on `packages/cli` there could touch whatever tree the
|
|
2552
|
+
// slot's PREVIOUS occupant left behind rather than the one `prepareSlot` restores for THIS
|
|
2553
|
+
// task. Returns the slot with `cliLockfileHash` refreshed ONLY when the install actually
|
|
2554
|
+
// succeeded (this call returning at all means it did — a throwing `run` propagates out of
|
|
2555
|
+
// `provisionCliDependencies` and this function never reaches its `return`), never persisted
|
|
2556
|
+
// before that, per `SlotInfo.cliLockfileHash`'s two-artifact design.
|
|
2557
|
+
provisionCliDependencies: (slot) => {
|
|
2558
|
+
const cliNodeModulesExists = fs.existsSync(path.join(slot.path, 'packages/cli/node_modules'));
|
|
2559
|
+
const decision = needsCliInstall({
|
|
2560
|
+
hasCliPackage,
|
|
2561
|
+
cliNodeModulesExists,
|
|
2562
|
+
storedCliLockfileHash: slot.cliLockfileHash,
|
|
2563
|
+
currentCliLockfileHash,
|
|
2564
|
+
});
|
|
2565
|
+
const result = provisionCliDependencies({
|
|
2566
|
+
slotPath: slot.path,
|
|
2567
|
+
hasCliPackage,
|
|
2568
|
+
needsCliInstall: decision,
|
|
2569
|
+
run: (command, args, cwd) => {
|
|
2570
|
+
console.log(`dispatch.ts: provisioning ${slot.name} — ${command} ${args.join(' ')}`);
|
|
2571
|
+
execFileSync(command, args, { cwd, stdio: 'inherit' });
|
|
2572
|
+
},
|
|
2573
|
+
});
|
|
2574
|
+
const cliLockfileHash =
|
|
2575
|
+
result.installed && currentCliLockfileHash !== null
|
|
2576
|
+
? currentCliLockfileHash
|
|
2577
|
+
: slot.cliLockfileHash;
|
|
2578
|
+
return { ...slot, cliLockfileHash };
|
|
2579
|
+
},
|
|
2580
|
+
runGit: (args, cwd) => {
|
|
2581
|
+
try {
|
|
2582
|
+
execFileSync('git', args, {
|
|
2583
|
+
cwd,
|
|
2584
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
2585
|
+
timeout: EXTERNAL_CALL_TIMEOUT_MS,
|
|
2586
|
+
});
|
|
2587
|
+
} catch (error) {
|
|
2588
|
+
throw new Error(`dispatch.ts: git ${args.join(' ')} failed: ${describeExecFailure(error)}`);
|
|
2589
|
+
}
|
|
2590
|
+
},
|
|
2591
|
+
writeLock: (lock) => {
|
|
2592
|
+
const file = path.join(dispatchDir, 'locks', `${lock.taskId}.json`);
|
|
2593
|
+
fs.mkdirSync(path.dirname(file), { recursive: true });
|
|
2594
|
+
fs.writeFileSync(file, JSON.stringify(lock, null, 2));
|
|
2595
|
+
},
|
|
2596
|
+
readLock: (taskId) => readLock(dispatchDir, taskId),
|
|
2597
|
+
setInProgress: (taskId) =>
|
|
2598
|
+
realBacklog(mainCheckoutPath).setStatus(taskId, TASK_STATUS.IN_PROGRESS),
|
|
2599
|
+
releaseSingleFlight: input.releaseSingleFlight,
|
|
2600
|
+
resetInjectorCache,
|
|
2601
|
+
isLocalModelLoaded: () =>
|
|
2602
|
+
checkLocalModelLoaded(fetch, laneConfig.lanes.local.healthCheckUrl, localSettings().model),
|
|
2603
|
+
onLocalModelMissing: (task) => {
|
|
2604
|
+
const comment = `Bloqueado: servidor local sin el modelo ${localSettings().model} cargado en ${laneConfig.lanes.local.healthCheckUrl}. Cárgalo en LM Studio y vuelve a poner la tarea en Queued.`;
|
|
2605
|
+
realBacklog(mainCheckoutPath).setStatus(task.id, TASK_STATUS.BLOCKED, comment);
|
|
2606
|
+
notify(`${task.id} blocked: servidor local sin el modelo`, comment, runOsascript);
|
|
2607
|
+
},
|
|
2608
|
+
beginAttempt: (task, attempt) => {
|
|
2609
|
+
const dir = createAttemptDir(dispatchDir, task.id, attempt);
|
|
2610
|
+
return createAttemptSink({
|
|
2611
|
+
appendStreamLine: (line) => fs.appendFileSync(path.join(dir, 'stream.jsonl'), `${line}\n`),
|
|
2612
|
+
writeRunLog: (lines) =>
|
|
2613
|
+
fs.writeFileSync(
|
|
2614
|
+
path.join(dir, 'run.log'),
|
|
2615
|
+
lines.length > 0 ? `${lines.join('\n')}\n` : '',
|
|
2616
|
+
),
|
|
2617
|
+
refreshHeartbeat: (isoNow) => refreshHeartbeat(dispatchDir, task.id, isoNow),
|
|
2618
|
+
now: () => Date.now(),
|
|
2619
|
+
});
|
|
2620
|
+
},
|
|
2621
|
+
buildPrompt: (task, attempt) => {
|
|
2622
|
+
if (task.lane === LANE.LOCAL) {
|
|
2623
|
+
return buildLocalExecutorPrompt(mainCheckoutPath, repoRoot, task, attempt);
|
|
2624
|
+
}
|
|
2625
|
+
const retry = readRetryContext(mainCheckoutPath, task.id, attempt);
|
|
2626
|
+
// T-8, last point: a Complex parent whose children are all Done gets the FIXED close-attempt
|
|
2627
|
+
// brief instead of the task-derived entry below — read against `tasksById` as it stands at
|
|
2628
|
+
// THIS call (kept current by `reloadTasks` above, never the snapshot `runPass` started with),
|
|
2629
|
+
// since `runOnce` calls `buildPrompt` only after its own post-maintenance reload. See
|
|
2630
|
+
// `prompt.ts`'s `isParentCloseAttempt` for why this is re-derived here rather than threaded
|
|
2631
|
+
// through as a flag from the maintenance pass that enqueued it.
|
|
2632
|
+
//
|
|
2633
|
+
// Defect 11 (2026-09-08): "is this child Done" for a child that is ITSELF a parent must use
|
|
2634
|
+
// the SAME derivation `recomputeParent` used to decide `task` was ready to dispatch —
|
|
2635
|
+
// `parent.ts`'s `effectiveStatus` over `maintenance.ts`'s `toDerivationNode`, with the SAME
|
|
2636
|
+
// `gh`/`fs` this pass's own maintenance context already wires — never that child's literal
|
|
2637
|
+
// board status, which a single pass can leave one write behind for a three-level tree.
|
|
2638
|
+
const isChildDone = (child: Task): boolean =>
|
|
2639
|
+
effectiveStatus(toDerivationNode(child.id, tasksById, maintenance.gh, maintenance.fs)) ===
|
|
2640
|
+
TASK_STATUS.DONE;
|
|
2641
|
+
return isParentCloseAttempt(task, { tasksById }, isChildDone)
|
|
2642
|
+
? buildParentCloseAttemptPrompt(task.id, retry)
|
|
2643
|
+
: // frontier, ordinary work: the same deterministic entry an interactive session uses, plus
|
|
2644
|
+
// the prior attempt's failure on a retry — the orchestrator reads the task itself, but
|
|
2645
|
+
// nothing on the board tells it that a previous attempt was blocked or why.
|
|
2646
|
+
buildFrontierPrompt(task.id, retry);
|
|
2647
|
+
},
|
|
2648
|
+
workerSystemPromptPath: resolveWorkerSystemPromptPath(repoRoot),
|
|
2649
|
+
// Rendered into the attempt directory rather than handed over as the static skill file: it names
|
|
2650
|
+
// this task's id and the wrapper command bound to it, neither of which a shared file can carry.
|
|
2651
|
+
writeFrontierAddendum: (task, attempt) => {
|
|
2652
|
+
const target = path.join(dispatchDir, task.id, `intento-${attempt}`, 'frontier-addendum.md');
|
|
2653
|
+
const slotDir = findSlotPathForTask(mainCheckoutPath, task.id);
|
|
2654
|
+
if (slotDir === null) {
|
|
2655
|
+
// Unreachable in the real flow (the slot registry is written before the launch is built),
|
|
2656
|
+
// and a throw is the right answer anyway: the abort path releases the slot and blocks the
|
|
2657
|
+
// task, rather than telling a worker its working directory is the main checkout.
|
|
2658
|
+
throw new Error(
|
|
2659
|
+
`dispatch.ts: ${task.id} has no slot assigned; cannot render its frontier addendum.`,
|
|
2660
|
+
);
|
|
2661
|
+
}
|
|
2662
|
+
fs.writeFileSync(
|
|
2663
|
+
target,
|
|
2664
|
+
buildFrontierAddendum({
|
|
2665
|
+
template: fs.readFileSync(path.join(repoRoot, FRONTIER_ADDENDUM_TEMPLATE_PATH), 'utf8'),
|
|
2666
|
+
taskId: task.id,
|
|
2667
|
+
mainCheckoutPath,
|
|
2668
|
+
slotPath: slotDir,
|
|
2669
|
+
}),
|
|
2670
|
+
);
|
|
2671
|
+
return target;
|
|
2672
|
+
},
|
|
2673
|
+
laneConfig,
|
|
2674
|
+
loadLocalSettings: localSettings,
|
|
2675
|
+
loadFrontierSettings: (): FrontierLaneSettings =>
|
|
2676
|
+
JSON.parse(
|
|
2677
|
+
fs.readFileSync(path.join(repoRoot, laneConfig.lanes.frontier.settings), 'utf8'),
|
|
2678
|
+
) as FrontierLaneSettings,
|
|
2679
|
+
// The settings sources THIS LANE loads — the user file alone on the local lane, the user and
|
|
2680
|
+
// project files on the frontier one — read from `repoRoot`, the DISPATCHER's own checkout (the
|
|
2681
|
+
// one every slot is a worktree of) and never from the slot, for the same reason the lane
|
|
2682
|
+
// settings above come from there: the list that bounds a worker cannot be a file that worker
|
|
2683
|
+
// can edit, and both operands of the subtraction must come from the same source or the
|
|
2684
|
+
// comparison is between two different files.
|
|
2685
|
+
loadSettingsAllowRules: (lane) =>
|
|
2686
|
+
loadSettingsAllowRules(settingsSourcePaths(lane, repoRoot, os.homedir())),
|
|
2687
|
+
spawnWorker,
|
|
2688
|
+
logPathFor: (taskId, attempt) =>
|
|
2689
|
+
path.join(DISPATCH_SUBDIR, taskId, `intento-${attempt}`, 'run.log'),
|
|
2690
|
+
buildCloseRunners: (task, attempt, branch) =>
|
|
2691
|
+
buildCloseRunners({
|
|
2692
|
+
mainCheckoutPath,
|
|
2693
|
+
repoRoot,
|
|
2694
|
+
task,
|
|
2695
|
+
attempt,
|
|
2696
|
+
branch,
|
|
2697
|
+
reviewerModel: laneConfig.lanes.local.reviewerModel,
|
|
2698
|
+
reviewerTimeoutMs: laneConfig.lanes.local.reviewerTimeoutMinutes * 60_000,
|
|
2699
|
+
requestDrain: input.requestDrain,
|
|
2700
|
+
tasksById,
|
|
2701
|
+
boardComplete,
|
|
2702
|
+
maxAttempts: laneConfig.attempts,
|
|
2703
|
+
harnessReviewer: laneConfig.harnessReviewer,
|
|
2704
|
+
}),
|
|
2705
|
+
};
|
|
2706
|
+
|
|
2707
|
+
return runOnce(ctx);
|
|
2708
|
+
}
|
|
2709
|
+
|
|
2710
|
+
// Guarda de entry-point: el fichero se importa desde entry.ts y otros módulos, que no deben
|
|
2711
|
+
// disparar un pase real del reconciliador. `fileURLToPath`, no `new URL(...).pathname` — ver
|
|
2712
|
+
// release-cli.ts para el mismo razonamiento (un espacio en la ruta rompería la comparación).
|
|
2713
|
+
if (process.argv[1] === fileURLToPath(import.meta.url)) {
|
|
2714
|
+
main().catch((error) => {
|
|
2715
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
2716
|
+
process.exit(1);
|
|
2717
|
+
});
|
|
2718
|
+
}
|