@planu/cli 0.23.2 → 0.25.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/dist/config/ai-model-pricing.json +81 -0
- package/dist/config/framework-registry/csharp-aspnet.json +67 -0
- package/dist/config/framework-registry/dart-flutter.json +61 -0
- package/dist/config/framework-registry/go-gin.json +62 -0
- package/dist/config/framework-registry/index.json +164 -0
- package/dist/config/framework-registry/java-springboot.json +67 -0
- package/dist/config/framework-registry/php-laravel.json +67 -0
- package/dist/config/framework-registry/python-django.json +72 -0
- package/dist/config/framework-registry/python-fastapi.json +72 -0
- package/dist/config/framework-registry/ruby-rails.json +67 -0
- package/dist/config/framework-registry/rust-actix.json +61 -0
- package/dist/config/framework-registry/swift-swiftui.json +67 -0
- package/dist/config/framework-registry/typescript-angular.json +67 -0
- package/dist/config/framework-registry/typescript-astro.json +61 -0
- package/dist/config/framework-registry/typescript-express.json +67 -0
- package/dist/config/framework-registry/typescript-nestjs.json +62 -0
- package/dist/config/framework-registry/typescript-nextjs.json +82 -0
- package/dist/config/framework-registry/typescript-nuxt.json +67 -0
- package/dist/config/framework-registry/typescript-react.json +77 -0
- package/dist/config/framework-registry/typescript-remix.json +61 -0
- package/dist/config/framework-registry/typescript-sveltekit.json +67 -0
- package/dist/config/framework-registry/typescript-vue.json +72 -0
- package/dist/config/license-plans.json +23 -3
- package/dist/engine/agile-config-builder.d.ts.map +1 -1
- package/dist/engine/agile-config-builder.js +3 -0
- package/dist/engine/agile-config-builder.js.map +1 -1
- package/dist/engine/ai-cost-estimator/core.d.ts +8 -0
- package/dist/engine/ai-cost-estimator/core.d.ts.map +1 -0
- package/dist/engine/ai-cost-estimator/core.js +257 -0
- package/dist/engine/ai-cost-estimator/core.js.map +1 -0
- package/dist/engine/ai-cost-estimator/index.d.ts +4 -0
- package/dist/engine/ai-cost-estimator/index.d.ts.map +1 -0
- package/dist/engine/ai-cost-estimator/index.js +5 -0
- package/dist/engine/ai-cost-estimator/index.js.map +1 -0
- package/dist/engine/ai-cost-estimator/model-pricing.d.ts +31 -0
- package/dist/engine/ai-cost-estimator/model-pricing.d.ts.map +1 -0
- package/dist/engine/ai-cost-estimator/model-pricing.js +96 -0
- package/dist/engine/ai-cost-estimator/model-pricing.js.map +1 -0
- package/dist/engine/ai-cost-estimator/token-estimator.d.ts +37 -0
- package/dist/engine/ai-cost-estimator/token-estimator.d.ts.map +1 -0
- package/dist/engine/ai-cost-estimator/token-estimator.js +194 -0
- package/dist/engine/ai-cost-estimator/token-estimator.js.map +1 -0
- package/dist/engine/ci-generator/context-builders.d.ts +4 -0
- package/dist/engine/ci-generator/context-builders.d.ts.map +1 -0
- package/dist/engine/ci-generator/context-builders.js +129 -0
- package/dist/engine/ci-generator/context-builders.js.map +1 -0
- package/dist/engine/ci-generator/index.d.ts +7 -0
- package/dist/engine/ci-generator/index.d.ts.map +1 -0
- package/dist/engine/ci-generator/index.js +44 -0
- package/dist/engine/ci-generator/index.js.map +1 -0
- package/dist/engine/ci-generator/stack-detector.d.ts +21 -0
- package/dist/engine/ci-generator/stack-detector.d.ts.map +1 -0
- package/dist/engine/ci-generator/stack-detector.js +203 -0
- package/dist/engine/ci-generator/stack-detector.js.map +1 -0
- package/dist/engine/ci-generator/yaml-builder.d.ts +8 -0
- package/dist/engine/ci-generator/yaml-builder.d.ts.map +1 -0
- package/dist/engine/ci-generator/yaml-builder.js +285 -0
- package/dist/engine/ci-generator/yaml-builder.js.map +1 -0
- package/dist/engine/dashboard/data-loader.d.ts +21 -0
- package/dist/engine/dashboard/data-loader.d.ts.map +1 -0
- package/dist/engine/dashboard/data-loader.js +196 -0
- package/dist/engine/dashboard/data-loader.js.map +1 -0
- package/dist/engine/dashboard/index.d.ts +5 -0
- package/dist/engine/dashboard/index.d.ts.map +1 -0
- package/dist/engine/dashboard/index.js +6 -0
- package/dist/engine/dashboard/index.js.map +1 -0
- package/dist/engine/dashboard/routes.d.ts +4 -0
- package/dist/engine/dashboard/routes.d.ts.map +1 -0
- package/dist/engine/dashboard/routes.js +120 -0
- package/dist/engine/dashboard/routes.js.map +1 -0
- package/dist/engine/dashboard/server.d.ts +14 -0
- package/dist/engine/dashboard/server.d.ts.map +1 -0
- package/dist/engine/dashboard/server.js +88 -0
- package/dist/engine/dashboard/server.js.map +1 -0
- package/dist/engine/dashboard/templates-layout.d.ts +11 -0
- package/dist/engine/dashboard/templates-layout.d.ts.map +1 -0
- package/dist/engine/dashboard/templates-layout.js +305 -0
- package/dist/engine/dashboard/templates-layout.js.map +1 -0
- package/dist/engine/dashboard/templates-project.d.ts +10 -0
- package/dist/engine/dashboard/templates-project.d.ts.map +1 -0
- package/dist/engine/dashboard/templates-project.js +163 -0
- package/dist/engine/dashboard/templates-project.js.map +1 -0
- package/dist/engine/dashboard/templates.d.ts +3 -0
- package/dist/engine/dashboard/templates.d.ts.map +1 -0
- package/dist/engine/dashboard/templates.js +4 -0
- package/dist/engine/dashboard/templates.js.map +1 -0
- package/dist/engine/focus-tracker.d.ts.map +1 -1
- package/dist/engine/focus-tracker.js +1 -0
- package/dist/engine/focus-tracker.js.map +1 -1
- package/dist/engine/hooks/core.d.ts +26 -0
- package/dist/engine/hooks/core.d.ts.map +1 -0
- package/dist/engine/hooks/core.js +164 -0
- package/dist/engine/hooks/core.js.map +1 -0
- package/dist/engine/hooks/git-hook-generator.d.ts +14 -0
- package/dist/engine/hooks/git-hook-generator.d.ts.map +1 -0
- package/dist/engine/hooks/git-hook-generator.js +119 -0
- package/dist/engine/hooks/git-hook-generator.js.map +1 -0
- package/dist/engine/hooks/index.d.ts +5 -0
- package/dist/engine/hooks/index.d.ts.map +1 -0
- package/dist/engine/hooks/index.js +6 -0
- package/dist/engine/hooks/index.js.map +1 -0
- package/dist/engine/hooks/templates.d.ts +14 -0
- package/dist/engine/hooks/templates.d.ts.map +1 -0
- package/dist/engine/hooks/templates.js +138 -0
- package/dist/engine/hooks/templates.js.map +1 -0
- package/dist/engine/hooks/triggers.d.ts +27 -0
- package/dist/engine/hooks/triggers.d.ts.map +1 -0
- package/dist/engine/hooks/triggers.js +104 -0
- package/dist/engine/hooks/triggers.js.map +1 -0
- package/dist/engine/license-validator/core.d.ts +1 -0
- package/dist/engine/license-validator/core.d.ts.map +1 -1
- package/dist/engine/license-validator/core.js +10 -1
- package/dist/engine/license-validator/core.js.map +1 -1
- package/dist/engine/license-validator/fingerprint.d.ts +3 -0
- package/dist/engine/license-validator/fingerprint.d.ts.map +1 -0
- package/dist/engine/license-validator/fingerprint.js +17 -0
- package/dist/engine/license-validator/fingerprint.js.map +1 -0
- package/dist/engine/license-validator.d.ts +2 -1
- package/dist/engine/license-validator.d.ts.map +1 -1
- package/dist/engine/license-validator.js +2 -1
- package/dist/engine/license-validator.js.map +1 -1
- package/dist/engine/registry/core.d.ts +32 -0
- package/dist/engine/registry/core.d.ts.map +1 -0
- package/dist/engine/registry/core.js +85 -0
- package/dist/engine/registry/core.js.map +1 -0
- package/dist/engine/registry/index.d.ts +6 -0
- package/dist/engine/registry/index.d.ts.map +1 -0
- package/dist/engine/registry/index.js +8 -0
- package/dist/engine/registry/index.js.map +1 -0
- package/dist/engine/registry/loader.d.ts +18 -0
- package/dist/engine/registry/loader.d.ts.map +1 -0
- package/dist/engine/registry/loader.js +81 -0
- package/dist/engine/registry/loader.js.map +1 -0
- package/dist/engine/registry/matcher.d.ts +19 -0
- package/dist/engine/registry/matcher.d.ts.map +1 -0
- package/dist/engine/registry/matcher.js +150 -0
- package/dist/engine/registry/matcher.js.map +1 -0
- package/dist/engine/registry/reporter.d.ts +10 -0
- package/dist/engine/registry/reporter.d.ts.map +1 -0
- package/dist/engine/registry/reporter.js +132 -0
- package/dist/engine/registry/reporter.js.map +1 -0
- package/dist/engine/registry/validator.d.ts +17 -0
- package/dist/engine/registry/validator.d.ts.map +1 -0
- package/dist/engine/registry/validator.js +103 -0
- package/dist/engine/registry/validator.js.map +1 -0
- package/dist/engine/spec-changelog/core.d.ts +16 -0
- package/dist/engine/spec-changelog/core.d.ts.map +1 -0
- package/dist/engine/spec-changelog/core.js +175 -0
- package/dist/engine/spec-changelog/core.js.map +1 -0
- package/dist/engine/spec-changelog/diff.d.ts +18 -0
- package/dist/engine/spec-changelog/diff.d.ts.map +1 -0
- package/dist/engine/spec-changelog/diff.js +116 -0
- package/dist/engine/spec-changelog/diff.js.map +1 -0
- package/dist/engine/spec-changelog/index.d.ts +3 -0
- package/dist/engine/spec-changelog/index.d.ts.map +1 -0
- package/dist/engine/spec-changelog/index.js +4 -0
- package/dist/engine/spec-changelog/index.js.map +1 -0
- package/dist/engine/spec-coverage/core.d.ts +14 -0
- package/dist/engine/spec-coverage/core.d.ts.map +1 -0
- package/dist/engine/spec-coverage/core.js +132 -0
- package/dist/engine/spec-coverage/core.js.map +1 -0
- package/dist/engine/spec-coverage/criteria-mapper.d.ts +18 -0
- package/dist/engine/spec-coverage/criteria-mapper.d.ts.map +1 -0
- package/dist/engine/spec-coverage/criteria-mapper.js +306 -0
- package/dist/engine/spec-coverage/criteria-mapper.js.map +1 -0
- package/dist/engine/spec-coverage/index.d.ts +4 -0
- package/dist/engine/spec-coverage/index.d.ts.map +1 -0
- package/dist/engine/spec-coverage/index.js +5 -0
- package/dist/engine/spec-coverage/index.js.map +1 -0
- package/dist/engine/spec-coverage/test-finder.d.ts +17 -0
- package/dist/engine/spec-coverage/test-finder.d.ts.map +1 -0
- package/dist/engine/spec-coverage/test-finder.js +250 -0
- package/dist/engine/spec-coverage/test-finder.js.map +1 -0
- package/dist/engine/spec-templates/catalog-extra.d.ts +4 -0
- package/dist/engine/spec-templates/catalog-extra.d.ts.map +1 -0
- package/dist/engine/spec-templates/catalog-extra.js +367 -0
- package/dist/engine/spec-templates/catalog-extra.js.map +1 -0
- package/dist/engine/spec-templates/catalog.d.ts +4 -0
- package/dist/engine/spec-templates/catalog.d.ts.map +1 -0
- package/dist/engine/spec-templates/catalog.js +386 -0
- package/dist/engine/spec-templates/catalog.js.map +1 -0
- package/dist/engine/spec-templates/index.d.ts +4 -0
- package/dist/engine/spec-templates/index.d.ts.map +1 -0
- package/dist/engine/spec-templates/index.js +5 -0
- package/dist/engine/spec-templates/index.js.map +1 -0
- package/dist/engine/spec-templates/query.d.ts +14 -0
- package/dist/engine/spec-templates/query.d.ts.map +1 -0
- package/dist/engine/spec-templates/query.js +56 -0
- package/dist/engine/spec-templates/query.js.map +1 -0
- package/dist/engine/spec-templates/renderer.d.ts +19 -0
- package/dist/engine/spec-templates/renderer.d.ts.map +1 -0
- package/dist/engine/spec-templates/renderer.js +45 -0
- package/dist/engine/spec-templates/renderer.js.map +1 -0
- package/dist/engine/usage-tracker/trial.d.ts +4 -4
- package/dist/engine/usage-tracker/trial.d.ts.map +1 -1
- package/dist/engine/usage-tracker/trial.js +4 -4
- package/dist/engine/usage-tracker/trial.js.map +1 -1
- package/dist/engine/webhook/event-handlers.d.ts +25 -0
- package/dist/engine/webhook/event-handlers.d.ts.map +1 -0
- package/dist/engine/webhook/event-handlers.js +89 -0
- package/dist/engine/webhook/event-handlers.js.map +1 -0
- package/dist/engine/webhook/index.d.ts +4 -0
- package/dist/engine/webhook/index.d.ts.map +1 -0
- package/dist/engine/webhook/index.js +5 -0
- package/dist/engine/webhook/index.js.map +1 -0
- package/dist/engine/webhook/server.d.ts +18 -0
- package/dist/engine/webhook/server.d.ts.map +1 -0
- package/dist/engine/webhook/server.js +187 -0
- package/dist/engine/webhook/server.js.map +1 -0
- package/dist/engine/webhook/signature.d.ts +16 -0
- package/dist/engine/webhook/signature.d.ts.map +1 -0
- package/dist/engine/webhook/signature.js +49 -0
- package/dist/engine/webhook/signature.js.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -1
- package/dist/storage/hooks-store.d.ts +34 -0
- package/dist/storage/hooks-store.d.ts.map +1 -0
- package/dist/storage/hooks-store.js +128 -0
- package/dist/storage/hooks-store.js.map +1 -0
- package/dist/storage/index.d.ts +1 -0
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +1 -0
- package/dist/storage/index.js.map +1 -1
- package/dist/tools/activate-license.d.ts.map +1 -1
- package/dist/tools/activate-license.js +5 -2
- package/dist/tools/activate-license.js.map +1 -1
- package/dist/tools/check-spec-accuracy.d.ts +7 -0
- package/dist/tools/check-spec-accuracy.d.ts.map +1 -0
- package/dist/tools/check-spec-accuracy.js +28 -0
- package/dist/tools/check-spec-accuracy.js.map +1 -0
- package/dist/tools/ci-generator.d.ts +7 -0
- package/dist/tools/ci-generator.d.ts.map +1 -0
- package/dist/tools/ci-generator.js +49 -0
- package/dist/tools/ci-generator.js.map +1 -0
- package/dist/tools/create-spec.d.ts.map +1 -1
- package/dist/tools/create-spec.js +4 -0
- package/dist/tools/create-spec.js.map +1 -1
- package/dist/tools/dashboard.d.ts +6 -0
- package/dist/tools/dashboard.d.ts.map +1 -0
- package/dist/tools/dashboard.js +48 -0
- package/dist/tools/dashboard.js.map +1 -0
- package/dist/tools/detect-drift.d.ts.map +1 -1
- package/dist/tools/detect-drift.js +6 -0
- package/dist/tools/detect-drift.js.map +1 -1
- package/dist/tools/estimate-ai-cost.d.ts +8 -0
- package/dist/tools/estimate-ai-cost.d.ts.map +1 -0
- package/dist/tools/estimate-ai-cost.js +29 -0
- package/dist/tools/estimate-ai-cost.js.map +1 -0
- package/dist/tools/license-gate.d.ts.map +1 -1
- package/dist/tools/license-gate.js +27 -20
- package/dist/tools/license-gate.js.map +1 -1
- package/dist/tools/license-status.d.ts.map +1 -1
- package/dist/tools/license-status.js +3 -0
- package/dist/tools/license-status.js.map +1 -1
- package/dist/tools/list-specs.d.ts.map +1 -1
- package/dist/tools/list-specs.js +15 -0
- package/dist/tools/list-specs.js.map +1 -1
- package/dist/tools/manage-hooks.d.ts +5 -0
- package/dist/tools/manage-hooks.d.ts.map +1 -0
- package/dist/tools/manage-hooks.js +247 -0
- package/dist/tools/manage-hooks.js.map +1 -0
- package/dist/tools/reconcile-spec.d.ts.map +1 -1
- package/dist/tools/reconcile-spec.js +24 -0
- package/dist/tools/reconcile-spec.js.map +1 -1
- package/dist/tools/register-ai-cost-tools.d.ts +3 -0
- package/dist/tools/register-ai-cost-tools.d.ts.map +1 -0
- package/dist/tools/register-ai-cost-tools.js +25 -0
- package/dist/tools/register-ai-cost-tools.js.map +1 -0
- package/dist/tools/register-changelog-tools.d.ts +3 -0
- package/dist/tools/register-changelog-tools.d.ts.map +1 -0
- package/dist/tools/register-changelog-tools.js +23 -0
- package/dist/tools/register-changelog-tools.js.map +1 -0
- package/dist/tools/register-ci-tools.d.ts +3 -0
- package/dist/tools/register-ci-tools.d.ts.map +1 -0
- package/dist/tools/register-ci-tools.js +50 -0
- package/dist/tools/register-ci-tools.js.map +1 -0
- package/dist/tools/register-coverage-tools.d.ts +7 -0
- package/dist/tools/register-coverage-tools.d.ts.map +1 -0
- package/dist/tools/register-coverage-tools.js +27 -0
- package/dist/tools/register-coverage-tools.js.map +1 -0
- package/dist/tools/register-dashboard-tools.d.ts +3 -0
- package/dist/tools/register-dashboard-tools.d.ts.map +1 -0
- package/dist/tools/register-dashboard-tools.js +29 -0
- package/dist/tools/register-dashboard-tools.js.map +1 -0
- package/dist/tools/register-hooks-tools.d.ts +3 -0
- package/dist/tools/register-hooks-tools.d.ts.map +1 -0
- package/dist/tools/register-hooks-tools.js +107 -0
- package/dist/tools/register-hooks-tools.js.map +1 -0
- package/dist/tools/register-registry-tools.d.ts +3 -0
- package/dist/tools/register-registry-tools.d.ts.map +1 -0
- package/dist/tools/register-registry-tools.js +43 -0
- package/dist/tools/register-registry-tools.js.map +1 -0
- package/dist/tools/register-template-tools.d.ts +8 -0
- package/dist/tools/register-template-tools.d.ts.map +1 -0
- package/dist/tools/register-template-tools.js +71 -0
- package/dist/tools/register-template-tools.js.map +1 -0
- package/dist/tools/register-webhook-tools.d.ts +3 -0
- package/dist/tools/register-webhook-tools.d.ts.map +1 -0
- package/dist/tools/register-webhook-tools.js +49 -0
- package/dist/tools/register-webhook-tools.js.map +1 -0
- package/dist/tools/schemas/index.d.ts +1 -0
- package/dist/tools/schemas/index.d.ts.map +1 -1
- package/dist/tools/schemas/index.js +1 -0
- package/dist/tools/schemas/index.js.map +1 -1
- package/dist/tools/schemas/registry.d.ts +41 -0
- package/dist/tools/schemas/registry.d.ts.map +1 -0
- package/dist/tools/schemas/registry.js +62 -0
- package/dist/tools/schemas/registry.js.map +1 -0
- package/dist/tools/spec-coverage.d.ts +3 -0
- package/dist/tools/spec-coverage.d.ts.map +1 -0
- package/dist/tools/spec-coverage.js +176 -0
- package/dist/tools/spec-coverage.js.map +1 -0
- package/dist/tools/spec-history.d.ts +3 -0
- package/dist/tools/spec-history.d.ts.map +1 -0
- package/dist/tools/spec-history.js +67 -0
- package/dist/tools/spec-history.js.map +1 -0
- package/dist/tools/spec-templates.d.ts +10 -0
- package/dist/tools/spec-templates.d.ts.map +1 -0
- package/dist/tools/spec-templates.js +155 -0
- package/dist/tools/spec-templates.js.map +1 -0
- package/dist/tools/update-registry.d.ts +8 -0
- package/dist/tools/update-registry.d.ts.map +1 -0
- package/dist/tools/update-registry.js +53 -0
- package/dist/tools/update-registry.js.map +1 -0
- package/dist/tools/update-status.d.ts.map +1 -1
- package/dist/tools/update-status.js +24 -0
- package/dist/tools/update-status.js.map +1 -1
- package/dist/tools/webhook.d.ts +6 -0
- package/dist/tools/webhook.d.ts.map +1 -0
- package/dist/tools/webhook.js +150 -0
- package/dist/tools/webhook.js.map +1 -0
- package/dist/types/ai-cost.d.ts +98 -0
- package/dist/types/ai-cost.d.ts.map +1 -0
- package/dist/types/ai-cost.js +4 -0
- package/dist/types/ai-cost.js.map +1 -0
- package/dist/types/analysis.d.ts +64 -0
- package/dist/types/analysis.d.ts.map +1 -1
- package/dist/types/changelog.d.ts +49 -0
- package/dist/types/changelog.d.ts.map +1 -0
- package/dist/types/changelog.js +3 -0
- package/dist/types/changelog.js.map +1 -0
- package/dist/types/ci.d.ts +105 -0
- package/dist/types/ci.d.ts.map +1 -0
- package/dist/types/ci.js +3 -0
- package/dist/types/ci.js.map +1 -0
- package/dist/types/coverage.d.ts +95 -0
- package/dist/types/coverage.d.ts.map +1 -0
- package/dist/types/coverage.js +4 -0
- package/dist/types/coverage.js.map +1 -0
- package/dist/types/hooks.d.ts +139 -0
- package/dist/types/hooks.d.ts.map +1 -0
- package/dist/types/hooks.js +3 -0
- package/dist/types/hooks.js.map +1 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/licensing.d.ts +6 -0
- package/dist/types/licensing.d.ts.map +1 -1
- package/dist/types/registry.d.ts +90 -0
- package/dist/types/registry.d.ts.map +1 -0
- package/dist/types/registry.js +5 -0
- package/dist/types/registry.js.map +1 -0
- package/dist/types/spec-templates.d.ts +87 -0
- package/dist/types/spec-templates.d.ts.map +1 -0
- package/dist/types/spec-templates.js +3 -0
- package/dist/types/spec-templates.js.map +1 -0
- package/dist/types/ui.d.ts +76 -0
- package/dist/types/ui.d.ts.map +1 -1
- package/dist/types/webhook.d.ts +62 -0
- package/dist/types/webhook.d.ts.map +1 -0
- package/dist/types/webhook.js +4 -0
- package/dist/types/webhook.js.map +1 -0
- package/package.json +1 -1
- package/src/config/ai-model-pricing.json +81 -0
- package/src/config/framework-registry/csharp-aspnet.json +67 -0
- package/src/config/framework-registry/dart-flutter.json +61 -0
- package/src/config/framework-registry/go-gin.json +62 -0
- package/src/config/framework-registry/index.json +164 -0
- package/src/config/framework-registry/java-springboot.json +67 -0
- package/src/config/framework-registry/php-laravel.json +67 -0
- package/src/config/framework-registry/python-django.json +72 -0
- package/src/config/framework-registry/python-fastapi.json +72 -0
- package/src/config/framework-registry/ruby-rails.json +67 -0
- package/src/config/framework-registry/rust-actix.json +61 -0
- package/src/config/framework-registry/swift-swiftui.json +67 -0
- package/src/config/framework-registry/typescript-angular.json +67 -0
- package/src/config/framework-registry/typescript-astro.json +61 -0
- package/src/config/framework-registry/typescript-express.json +67 -0
- package/src/config/framework-registry/typescript-nestjs.json +62 -0
- package/src/config/framework-registry/typescript-nextjs.json +82 -0
- package/src/config/framework-registry/typescript-nuxt.json +67 -0
- package/src/config/framework-registry/typescript-react.json +77 -0
- package/src/config/framework-registry/typescript-remix.json +61 -0
- package/src/config/framework-registry/typescript-sveltekit.json +67 -0
- package/src/config/framework-registry/typescript-vue.json +72 -0
- package/src/config/license-plans.json +23 -3
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
// engine/dashboard/templates-project.ts — Project and spec HTML renderers.
|
|
2
|
+
import { renderLayout, escapeHtml, markdownToHtml } from './templates-layout.js';
|
|
3
|
+
/** Render a single spec card HTML fragment */
|
|
4
|
+
function renderSpecCard(spec) {
|
|
5
|
+
const hasProgress = spec.criteriaTotal > 0;
|
|
6
|
+
const progressBar = hasProgress
|
|
7
|
+
? `<div class="progress-bar-wrap">
|
|
8
|
+
<div class="progress-bar-fill" style="width:${spec.progressPercent}%"></div>
|
|
9
|
+
</div>
|
|
10
|
+
<div class="progress-text">
|
|
11
|
+
<span class="criteria-text">${spec.criteriaImplemented}/${spec.criteriaTotal} criterios</span>
|
|
12
|
+
<span class="progress-pct">${spec.progressPercent}%</span>
|
|
13
|
+
</div>`
|
|
14
|
+
: `<div style="font-size:0.75rem;color:var(--text-muted)">Sin datos de progreso</div>`;
|
|
15
|
+
return `<a href="/spec/${encodeURIComponent(spec.id.split('-')[0] ?? spec.id)}/${encodeURIComponent(spec.id)}"
|
|
16
|
+
class="spec-card status-${escapeHtml(spec.status)}" data-spec-id="${escapeHtml(spec.id)}">
|
|
17
|
+
<div class="spec-id" style="color:var(--status-${escapeHtml(spec.status)})">${escapeHtml(spec.id)}</div>
|
|
18
|
+
<div class="spec-title">${escapeHtml(spec.title)}</div>
|
|
19
|
+
<span class="status-badge">${escapeHtml(spec.status)}</span>
|
|
20
|
+
${progressBar}
|
|
21
|
+
</a>`;
|
|
22
|
+
}
|
|
23
|
+
/** Render the usage stats panel */
|
|
24
|
+
function renderUsagePanel(usage) {
|
|
25
|
+
if (!usage.isAvailable) {
|
|
26
|
+
return `<div class="usage-panel">
|
|
27
|
+
<h3>Uso</h3>
|
|
28
|
+
<div style="color:var(--text-muted);font-size:0.85rem">Sin datos de uso disponibles</div>
|
|
29
|
+
</div>`;
|
|
30
|
+
}
|
|
31
|
+
const tierLabel = usage.tier.charAt(0).toUpperCase() + usage.tier.slice(1);
|
|
32
|
+
const limitLabel = usage.dailyLimit !== null ? String(usage.dailyLimit) : '∞';
|
|
33
|
+
const callsLabel = `${usage.callsToday} / ${limitLabel}`;
|
|
34
|
+
let trialHtml = '';
|
|
35
|
+
if (usage.trialDaysLeft !== null) {
|
|
36
|
+
const isCritical = usage.trialDaysLeft <= 3;
|
|
37
|
+
trialHtml = `<div class="trial-warning ${isCritical ? 'trial-critical' : ''}">
|
|
38
|
+
Trial: ${usage.trialDaysLeft} día${usage.trialDaysLeft !== 1 ? 's' : ''} restante${usage.trialDaysLeft !== 1 ? 's' : ''}
|
|
39
|
+
</div>`;
|
|
40
|
+
}
|
|
41
|
+
return `<div class="usage-panel">
|
|
42
|
+
<h3>Uso</h3>
|
|
43
|
+
<div class="usage-tier">${escapeHtml(tierLabel)}</div>
|
|
44
|
+
<div style="font-size:0.82rem;color:var(--text-muted);margin-top:0.35rem">Llamadas hoy: ${escapeHtml(callsLabel)}</div>
|
|
45
|
+
${trialHtml}
|
|
46
|
+
</div>`;
|
|
47
|
+
}
|
|
48
|
+
/** Render the health metrics panel */
|
|
49
|
+
function renderHealthPanel(metrics) {
|
|
50
|
+
const estimLabel = metrics.totalEstimation !== null ? `${metrics.totalEstimation}h` : 'Sin estimación';
|
|
51
|
+
return `<div>
|
|
52
|
+
<h2 style="margin-bottom:1rem;font-size:1rem;color:var(--text-muted)">Project Health</h2>
|
|
53
|
+
<div class="grid grid-2" style="gap:0.75rem">
|
|
54
|
+
<div class="metric-card">
|
|
55
|
+
<div class="metric-value">${metrics.totalSpecs}</div>
|
|
56
|
+
<div class="metric-label">Total specs</div>
|
|
57
|
+
</div>
|
|
58
|
+
<div class="metric-card">
|
|
59
|
+
<div class="metric-value">${metrics.donePercent}%</div>
|
|
60
|
+
<div class="metric-label">Completado</div>
|
|
61
|
+
</div>
|
|
62
|
+
<div class="metric-card">
|
|
63
|
+
<div class="metric-value">${metrics.pendingApproval}</div>
|
|
64
|
+
<div class="metric-label">Pendientes aprobación</div>
|
|
65
|
+
</div>
|
|
66
|
+
<div class="metric-card">
|
|
67
|
+
<div class="metric-value">${metrics.activeImplementation}</div>
|
|
68
|
+
<div class="metric-label">En implementación</div>
|
|
69
|
+
</div>
|
|
70
|
+
</div>
|
|
71
|
+
<div style="margin-top:0.75rem;font-size:0.82rem;color:var(--text-muted)">
|
|
72
|
+
Estimación total: <strong>${escapeHtml(estimLabel)}</strong>
|
|
73
|
+
</div>
|
|
74
|
+
</div>`;
|
|
75
|
+
}
|
|
76
|
+
/** Render the home page — list of all projects */
|
|
77
|
+
export function renderHomePage(projects, usage) {
|
|
78
|
+
const projectContent = projects.length === 0
|
|
79
|
+
? `<div class="empty-state">
|
|
80
|
+
<h2>No hay proyectos registrados</h2>
|
|
81
|
+
<p>Usa el tool <code>init_project</code> desde tu cliente MCP para crear tu primer proyecto.</p>
|
|
82
|
+
</div>`
|
|
83
|
+
: `<h2 style="margin-bottom:1rem">Proyectos</h2>
|
|
84
|
+
<div class="project-list">
|
|
85
|
+
${projects
|
|
86
|
+
.map((p) => `<a href="/project/${encodeURIComponent(p.id)}" class="project-card">
|
|
87
|
+
<div class="project-info">
|
|
88
|
+
<h2>${escapeHtml(p.name)}</h2>
|
|
89
|
+
<div class="meta">${escapeHtml(p.stack)} • ${escapeHtml(p.path)} • Última actividad: ${escapeHtml(p.lastActivity)}</div>
|
|
90
|
+
</div>
|
|
91
|
+
<div class="project-stats">
|
|
92
|
+
<div>${p.specCount} specs</div>
|
|
93
|
+
<div class="done">${p.doneCount} done</div>
|
|
94
|
+
</div>
|
|
95
|
+
</a>`)
|
|
96
|
+
.join('\n')}
|
|
97
|
+
</div>`;
|
|
98
|
+
const body = `${projectContent}${renderUsagePanel(usage)}`;
|
|
99
|
+
return renderLayout('Inicio', body);
|
|
100
|
+
}
|
|
101
|
+
/** Render the project detail page — spec cards + health panel */
|
|
102
|
+
export function renderProjectPage(project, metrics, usage) {
|
|
103
|
+
const specCards = project.specs.length === 0
|
|
104
|
+
? `<div class="empty-state"><p>Este proyecto no tiene specs aún.</p></div>`
|
|
105
|
+
: project.specs.map(renderSpecCard).join('\n');
|
|
106
|
+
const body = `
|
|
107
|
+
<div class="breadcrumb">
|
|
108
|
+
<a href="/">Inicio</a> › ${escapeHtml(project.name)}
|
|
109
|
+
</div>
|
|
110
|
+
<div style="display:grid;grid-template-columns:1fr 280px;gap:2rem;align-items:start">
|
|
111
|
+
<div>
|
|
112
|
+
<h2 style="margin-bottom:1.25rem">${escapeHtml(project.name)}</h2>
|
|
113
|
+
<div id="spec-grid" class="spec-grid">${specCards}</div>
|
|
114
|
+
</div>
|
|
115
|
+
<div>
|
|
116
|
+
${renderHealthPanel(metrics)}
|
|
117
|
+
${renderUsagePanel(usage)}
|
|
118
|
+
</div>
|
|
119
|
+
</div>
|
|
120
|
+
`;
|
|
121
|
+
return renderLayout(project.name, body);
|
|
122
|
+
}
|
|
123
|
+
/** Render the spec detail page — HU, FICHA, PROGRESS tabs */
|
|
124
|
+
export function renderSpecPage(projectId, projectName, specId, hu, ficha, progress) {
|
|
125
|
+
const huHtml = hu !== null ? markdownToHtml(hu) : '<p style="color:var(--text-muted)">HU.md no encontrado</p>';
|
|
126
|
+
const fichaHtml = ficha !== null
|
|
127
|
+
? markdownToHtml(ficha)
|
|
128
|
+
: '<p style="color:var(--text-muted)">FICHA-TECNICA.md no encontrado</p>';
|
|
129
|
+
const progressHtml = progress !== null
|
|
130
|
+
? markdownToHtml(progress)
|
|
131
|
+
: '<p style="color:var(--text-muted)">PROGRESS.md no encontrado</p>';
|
|
132
|
+
const body = `
|
|
133
|
+
<div class="breadcrumb">
|
|
134
|
+
<a href="/">Inicio</a> ›
|
|
135
|
+
<a href="/project/${encodeURIComponent(projectId)}">${escapeHtml(projectName)}</a> ›
|
|
136
|
+
${escapeHtml(specId)}
|
|
137
|
+
</div>
|
|
138
|
+
<div class="tabs">
|
|
139
|
+
<button class="tab-btn active" data-tab="hu">Historia de Usuario</button>
|
|
140
|
+
<button class="tab-btn" data-tab="ficha">Ficha Técnica</button>
|
|
141
|
+
<button class="tab-btn" data-tab="progress">Progreso</button>
|
|
142
|
+
</div>
|
|
143
|
+
<div id="tab-hu" class="tab-content active">
|
|
144
|
+
<div class="md-content card">${huHtml}</div>
|
|
145
|
+
</div>
|
|
146
|
+
<div id="tab-ficha" class="tab-content">
|
|
147
|
+
<div class="md-content card">${fichaHtml}</div>
|
|
148
|
+
</div>
|
|
149
|
+
<div id="tab-progress" class="tab-content">
|
|
150
|
+
<div class="md-content card">${progressHtml}</div>
|
|
151
|
+
</div>
|
|
152
|
+
`;
|
|
153
|
+
return renderLayout(specId, body);
|
|
154
|
+
}
|
|
155
|
+
/** Render a 404 not found page */
|
|
156
|
+
export function render404Page(path) {
|
|
157
|
+
return renderLayout('404', `<div class="empty-state">
|
|
158
|
+
<h2>404 — Página no encontrada</h2>
|
|
159
|
+
<p>La ruta <code>${escapeHtml(path)}</code> no existe.</p>
|
|
160
|
+
<p style="margin-top:1rem"><a href="/">Volver al inicio</a></p>
|
|
161
|
+
</div>`);
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=templates-project.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates-project.js","sourceRoot":"","sources":["../../../src/engine/dashboard/templates-project.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../src/engine/dashboard/templates.ts"],"names":[],"mappings":"AACA,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/engine/dashboard/templates.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"focus-tracker.d.ts","sourceRoot":"","sources":["../../src/engine/focus-tracker.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"focus-tracker.d.ts","sourceRoot":"","sources":["../../src/engine/focus-tracker.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAwDhE;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAEnE;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAElE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAElD;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,aAAa,CAAC,EAAE,MAAM,GACrB,UAAU,GAAG,IAAI,CA0BnB;AAWD;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAcxE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"focus-tracker.js","sourceRoot":"","sources":["../../src/engine/focus-tracker.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"focus-tracker.js","sourceRoot":"","sources":["../../src/engine/focus-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { HookDefinition, HookEventPayload, HookExecutionLog } from '../../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Execute a single hook for the given payload.
|
|
4
|
+
* Returns a complete execution log entry.
|
|
5
|
+
*/
|
|
6
|
+
export declare function executeHook(hook: HookDefinition, payload: HookEventPayload, depth: number): HookExecutionLog;
|
|
7
|
+
/**
|
|
8
|
+
* Dispatch an event to all matching enabled hooks.
|
|
9
|
+
* Fire-and-forget — errors in hooks are captured in the log, never thrown.
|
|
10
|
+
* Returns execution logs for all fired hooks.
|
|
11
|
+
*
|
|
12
|
+
* @param hooks - List of all hooks for the project
|
|
13
|
+
* @param payload - Event payload to dispatch
|
|
14
|
+
* @param depth - Current recursion depth (starts at 0)
|
|
15
|
+
*/
|
|
16
|
+
export declare function dispatchEvent(hooks: HookDefinition[], payload: HookEventPayload, depth?: number): HookExecutionLog[];
|
|
17
|
+
/**
|
|
18
|
+
* Simulate hook execution without side effects (dry run).
|
|
19
|
+
* Returns which hooks would fire and what actions they would execute.
|
|
20
|
+
*/
|
|
21
|
+
export declare function dryRunDispatch(hooks: HookDefinition[], payload: HookEventPayload): {
|
|
22
|
+
hook: HookDefinition;
|
|
23
|
+
wouldFire: boolean;
|
|
24
|
+
reason?: string;
|
|
25
|
+
}[];
|
|
26
|
+
//# sourceMappingURL=core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/engine/hooks/core.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAGjB,MAAM,sBAAsB,CAAC;AA8F9B;;;GAGG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,MAAM,GACZ,gBAAgB,CAyBlB;AAMD;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,EAAE,gBAAgB,EACzB,KAAK,SAAI,GACR,gBAAgB,EAAE,CAyBpB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,EAAE,gBAAgB,GACxB;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,CAiBjE"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
// engine/hooks/core.ts — Hook registry: load, match, execute (SPEC-071)
|
|
2
|
+
// Hooks are LAZY — executed when a tool fires an event, not via daemon.
|
|
3
|
+
// Recursion guard: max depth = 3 to prevent infinite loops.
|
|
4
|
+
import { matchesFilter } from './triggers.js';
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
// Constants
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
const MAX_DEPTH = 3;
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
// Interpolation
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
/**
|
|
13
|
+
* Interpolate {{key}} placeholders in a string using values from the payload
|
|
14
|
+
* and a flat context map.
|
|
15
|
+
*/
|
|
16
|
+
function interpolate(template, context) {
|
|
17
|
+
return template.replace(/\{\{(\w+)\}\}/g, (_, key) => {
|
|
18
|
+
const value = context[key];
|
|
19
|
+
if (value === undefined || value === null) {
|
|
20
|
+
return `{{${key}}}`;
|
|
21
|
+
}
|
|
22
|
+
if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
|
|
23
|
+
return String(value);
|
|
24
|
+
}
|
|
25
|
+
return JSON.stringify(value);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Flatten the event payload into a string-keyed context map for interpolation.
|
|
30
|
+
*/
|
|
31
|
+
function payloadToContext(payload) {
|
|
32
|
+
return payload;
|
|
33
|
+
}
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
// Action execution
|
|
36
|
+
// ---------------------------------------------------------------------------
|
|
37
|
+
/**
|
|
38
|
+
* Execute a single hook action. Returns the action result.
|
|
39
|
+
* This function does NOT throw — errors are captured in the result.
|
|
40
|
+
*/
|
|
41
|
+
function executeAction(action, payload) {
|
|
42
|
+
const context = payloadToContext(payload);
|
|
43
|
+
try {
|
|
44
|
+
switch (action.type) {
|
|
45
|
+
case 'log_message': {
|
|
46
|
+
const message = interpolate(action.message, context);
|
|
47
|
+
console.warn(`[Planu Hook] ${message}`);
|
|
48
|
+
return { actionType: action.type, status: 'success', output: message };
|
|
49
|
+
}
|
|
50
|
+
case 'notify': {
|
|
51
|
+
const message = interpolate(action.message, context);
|
|
52
|
+
console.warn(`[Planu Hook Notify] ${message}`);
|
|
53
|
+
return { actionType: action.type, status: 'success', output: message };
|
|
54
|
+
}
|
|
55
|
+
case 'set_variable': {
|
|
56
|
+
const value = interpolate(action.value, context);
|
|
57
|
+
return {
|
|
58
|
+
actionType: action.type,
|
|
59
|
+
status: 'success',
|
|
60
|
+
output: `Set ${action.key}=${value}`,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
case 'run_tool': {
|
|
64
|
+
// Tools are invoked via fire-and-forget — we log intent but do not
|
|
65
|
+
// actually call the MCP server recursively from within the engine.
|
|
66
|
+
const toolArgs = JSON.stringify(action.args);
|
|
67
|
+
const message = `Would invoke tool '${action.tool}' with args: ${toolArgs}`;
|
|
68
|
+
console.warn(`[Planu Hook run_tool] ${message}`);
|
|
69
|
+
return { actionType: action.type, status: 'success', output: message };
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
75
|
+
return {
|
|
76
|
+
actionType: action.type,
|
|
77
|
+
status: 'failed',
|
|
78
|
+
errorMessage,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// ---------------------------------------------------------------------------
|
|
83
|
+
// Hook dispatch
|
|
84
|
+
// ---------------------------------------------------------------------------
|
|
85
|
+
/**
|
|
86
|
+
* Execute a single hook for the given payload.
|
|
87
|
+
* Returns a complete execution log entry.
|
|
88
|
+
*/
|
|
89
|
+
export function executeHook(hook, payload, depth) {
|
|
90
|
+
const startMs = Date.now();
|
|
91
|
+
const logId = `log-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
92
|
+
const actionResults = [];
|
|
93
|
+
for (const action of hook.actions) {
|
|
94
|
+
const result = executeAction(action, payload);
|
|
95
|
+
actionResults.push(result);
|
|
96
|
+
}
|
|
97
|
+
const allSucceeded = actionResults.every((r) => r.status === 'success');
|
|
98
|
+
return {
|
|
99
|
+
id: logId,
|
|
100
|
+
hookId: hook.id,
|
|
101
|
+
hookName: hook.name,
|
|
102
|
+
trigger: payload.trigger,
|
|
103
|
+
payload,
|
|
104
|
+
status: allSucceeded ? 'success' : 'failed',
|
|
105
|
+
depth,
|
|
106
|
+
actionResults,
|
|
107
|
+
executedAt: new Date().toISOString(),
|
|
108
|
+
durationMs: Date.now() - startMs,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
// ---------------------------------------------------------------------------
|
|
112
|
+
// Registry dispatch
|
|
113
|
+
// ---------------------------------------------------------------------------
|
|
114
|
+
/**
|
|
115
|
+
* Dispatch an event to all matching enabled hooks.
|
|
116
|
+
* Fire-and-forget — errors in hooks are captured in the log, never thrown.
|
|
117
|
+
* Returns execution logs for all fired hooks.
|
|
118
|
+
*
|
|
119
|
+
* @param hooks - List of all hooks for the project
|
|
120
|
+
* @param payload - Event payload to dispatch
|
|
121
|
+
* @param depth - Current recursion depth (starts at 0)
|
|
122
|
+
*/
|
|
123
|
+
export function dispatchEvent(hooks, payload, depth = 0) {
|
|
124
|
+
if (depth >= MAX_DEPTH) {
|
|
125
|
+
console.warn(`[Planu Hooks] Recursion guard triggered at depth ${depth} for trigger '${payload.trigger}'. Stopping.`);
|
|
126
|
+
return [];
|
|
127
|
+
}
|
|
128
|
+
const matchingHooks = hooks.filter((hook) => hook.enabled && hook.trigger === payload.trigger && matchesFilter(hook, payload));
|
|
129
|
+
const logs = [];
|
|
130
|
+
for (const hook of matchingHooks) {
|
|
131
|
+
try {
|
|
132
|
+
const log = executeHook(hook, payload, depth);
|
|
133
|
+
logs.push(log);
|
|
134
|
+
}
|
|
135
|
+
catch (err) {
|
|
136
|
+
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
137
|
+
console.error(`[Planu Hooks] Unexpected error in hook '${hook.id}': ${errorMessage}`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return logs;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Simulate hook execution without side effects (dry run).
|
|
144
|
+
* Returns which hooks would fire and what actions they would execute.
|
|
145
|
+
*/
|
|
146
|
+
export function dryRunDispatch(hooks, payload) {
|
|
147
|
+
return hooks.map((hook) => {
|
|
148
|
+
if (!hook.enabled) {
|
|
149
|
+
return { hook, wouldFire: false, reason: 'Hook is disabled' };
|
|
150
|
+
}
|
|
151
|
+
if (hook.trigger !== payload.trigger) {
|
|
152
|
+
return {
|
|
153
|
+
hook,
|
|
154
|
+
wouldFire: false,
|
|
155
|
+
reason: `Trigger mismatch: hook='${hook.trigger}', event='${payload.trigger}'`,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
if (!matchesFilter(hook, payload)) {
|
|
159
|
+
return { hook, wouldFire: false, reason: 'Filter conditions not met' };
|
|
160
|
+
}
|
|
161
|
+
return { hook, wouldFire: true };
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../src/engine/hooks/core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { GitHookScript, GitHookType, GenerateGitHooksInput } from '../../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Generate a shell script for the given git hook type.
|
|
4
|
+
*/
|
|
5
|
+
export declare function generateGitHookScript(hookType: GitHookType, projectId: string, projectPath: string): GitHookScript;
|
|
6
|
+
/**
|
|
7
|
+
* Generate git hook scripts for all requested hook types.
|
|
8
|
+
*/
|
|
9
|
+
export declare function generateGitHooks(input: GenerateGitHooksInput): GitHookScript[];
|
|
10
|
+
/**
|
|
11
|
+
* Format the generated scripts as a human-readable installation guide.
|
|
12
|
+
*/
|
|
13
|
+
export declare function formatGitHookInstallGuide(scripts: GitHookScript[]): string;
|
|
14
|
+
//# sourceMappingURL=git-hook-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-hook-generator.d.ts","sourceRoot":"","sources":["../../../src/engine/hooks/git-hook-generator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AA+E9F;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,WAAW,EACrB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,aAAa,CAiBf;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,aAAa,EAAE,CAI9E;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,MAAM,CAkB1E"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
// engine/hooks/git-hook-generator.ts — Generates shell scripts for git hooks (SPEC-071)
|
|
2
|
+
// Git hooks are generated as shell scripts — Planu does NOT execute them directly.
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// Script templates
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
function buildPreCommitScript(projectId) {
|
|
7
|
+
return `#!/usr/bin/env sh
|
|
8
|
+
# Planu pre-commit hook — auto-generated by manage_hooks
|
|
9
|
+
# Project: ${projectId}
|
|
10
|
+
# Do not edit manually — re-run manage_hooks install_template to regenerate.
|
|
11
|
+
|
|
12
|
+
set -e
|
|
13
|
+
|
|
14
|
+
echo "[Planu] Running pre-commit checks..."
|
|
15
|
+
|
|
16
|
+
# Dispatch on_commit event to Planu (fire-and-forget — does not block commit)
|
|
17
|
+
# Requires planu CLI to be installed: npm install -g planu (or equivalent)
|
|
18
|
+
if command -v planu >/dev/null 2>&1; then
|
|
19
|
+
COMMIT_HASH="$(git rev-parse --short HEAD 2>/dev/null || echo 'unknown')"
|
|
20
|
+
BRANCH="$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo 'unknown')"
|
|
21
|
+
COMMIT_MSG="$(git log -1 --pretty=%B 2>/dev/null | head -1 || echo '')"
|
|
22
|
+
planu dispatch on_commit \\
|
|
23
|
+
--project-id "${projectId}" \\
|
|
24
|
+
--commit-hash "\${COMMIT_HASH}" \\
|
|
25
|
+
--branch "\${BRANCH}" \\
|
|
26
|
+
--message "\${COMMIT_MSG}" \\
|
|
27
|
+
2>/dev/null || true
|
|
28
|
+
fi
|
|
29
|
+
|
|
30
|
+
echo "[Planu] Pre-commit checks complete."
|
|
31
|
+
`;
|
|
32
|
+
}
|
|
33
|
+
function buildPostCommitScript(projectId) {
|
|
34
|
+
return `#!/usr/bin/env sh
|
|
35
|
+
# Planu post-commit hook — auto-generated by manage_hooks
|
|
36
|
+
# Project: ${projectId}
|
|
37
|
+
# Do not edit manually — re-run manage_hooks install_template to regenerate.
|
|
38
|
+
|
|
39
|
+
echo "[Planu] Post-commit: recording commit event..."
|
|
40
|
+
|
|
41
|
+
if command -v planu >/dev/null 2>&1; then
|
|
42
|
+
COMMIT_HASH="$(git rev-parse --short HEAD 2>/dev/null || echo 'unknown')"
|
|
43
|
+
BRANCH="$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo 'unknown')"
|
|
44
|
+
COMMIT_MSG="$(git log -1 --pretty=%B 2>/dev/null | head -1 || echo '')"
|
|
45
|
+
planu dispatch on_commit \\
|
|
46
|
+
--project-id "${projectId}" \\
|
|
47
|
+
--commit-hash "\${COMMIT_HASH}" \\
|
|
48
|
+
--branch "\${BRANCH}" \\
|
|
49
|
+
--message "\${COMMIT_MSG}" \\
|
|
50
|
+
2>/dev/null || true
|
|
51
|
+
fi
|
|
52
|
+
`;
|
|
53
|
+
}
|
|
54
|
+
function buildPrePushScript(projectId) {
|
|
55
|
+
return `#!/usr/bin/env sh
|
|
56
|
+
# Planu pre-push hook — auto-generated by manage_hooks
|
|
57
|
+
# Project: ${projectId}
|
|
58
|
+
# Do not edit manually — re-run manage_hooks install_template to regenerate.
|
|
59
|
+
|
|
60
|
+
set -e
|
|
61
|
+
|
|
62
|
+
echo "[Planu] Running pre-push drift check..."
|
|
63
|
+
|
|
64
|
+
if command -v planu >/dev/null 2>&1; then
|
|
65
|
+
# Run drift detection for all active specs
|
|
66
|
+
planu detect-drift --project-id "${projectId}" --mode quick 2>/dev/null || true
|
|
67
|
+
fi
|
|
68
|
+
|
|
69
|
+
echo "[Planu] Pre-push checks complete."
|
|
70
|
+
`;
|
|
71
|
+
}
|
|
72
|
+
// ---------------------------------------------------------------------------
|
|
73
|
+
// Generator functions
|
|
74
|
+
// ---------------------------------------------------------------------------
|
|
75
|
+
/**
|
|
76
|
+
* Generate a shell script for the given git hook type.
|
|
77
|
+
*/
|
|
78
|
+
export function generateGitHookScript(hookType, projectId, projectPath) {
|
|
79
|
+
const installPath = `${projectPath}/.git/hooks/${hookType}`;
|
|
80
|
+
let content;
|
|
81
|
+
switch (hookType) {
|
|
82
|
+
case 'pre-commit':
|
|
83
|
+
content = buildPreCommitScript(projectId);
|
|
84
|
+
break;
|
|
85
|
+
case 'post-commit':
|
|
86
|
+
content = buildPostCommitScript(projectId);
|
|
87
|
+
break;
|
|
88
|
+
case 'pre-push':
|
|
89
|
+
content = buildPrePushScript(projectId);
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
return { hookType, content, installPath };
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Generate git hook scripts for all requested hook types.
|
|
96
|
+
*/
|
|
97
|
+
export function generateGitHooks(input) {
|
|
98
|
+
return input.hookTypes.map((hookType) => generateGitHookScript(hookType, input.projectId, input.projectPath));
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Format the generated scripts as a human-readable installation guide.
|
|
102
|
+
*/
|
|
103
|
+
export function formatGitHookInstallGuide(scripts) {
|
|
104
|
+
const lines = ['Git hook scripts generated. To install:', '', '```bash'];
|
|
105
|
+
for (const script of scripts) {
|
|
106
|
+
lines.push(`# Install ${script.hookType} hook`);
|
|
107
|
+
lines.push(`cat > ${script.installPath} << 'PLANU_HOOK'`);
|
|
108
|
+
lines.push(script.content.trim());
|
|
109
|
+
lines.push('PLANU_HOOK');
|
|
110
|
+
lines.push(`chmod +x ${script.installPath}`);
|
|
111
|
+
lines.push('');
|
|
112
|
+
}
|
|
113
|
+
lines.push('```');
|
|
114
|
+
lines.push('');
|
|
115
|
+
lines.push('Note: These hooks dispatch events to Planu. They are fire-and-forget');
|
|
116
|
+
lines.push('and will not block git operations if Planu is unavailable.');
|
|
117
|
+
return lines.join('\n');
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=git-hook-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-hook-generator.js","sourceRoot":"","sources":["../../../src/engine/hooks/git-hook-generator.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,mFAAmF;AAInF,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,SAAS,oBAAoB,CAAC,SAAiB;IAC7C,OAAO;;aAEI,SAAS;;;;;;;;;;;;;;oBAcF,SAAS;;;;;;;;CAQ5B,CAAC;AACF,CAAC;AAED,SAAS,qBAAqB,CAAC,SAAiB;IAC9C,OAAO;;aAEI,SAAS;;;;;;;;;;oBAUF,SAAS;;;;;;CAM5B,CAAC;AACF,CAAC;AAED,SAAS,kBAAkB,CAAC,SAAiB;IAC3C,OAAO;;aAEI,SAAS;;;;;;;;;qCASe,SAAS;;;;CAI7C,CAAC;AACF,CAAC;AAED,8EAA8E;AAC9E,sBAAsB;AACtB,8EAA8E;AAE9E;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,QAAqB,EACrB,SAAiB,EACjB,WAAmB;IAEnB,MAAM,WAAW,GAAG,GAAG,WAAW,eAAe,QAAQ,EAAE,CAAC;IAC5D,IAAI,OAAe,CAAC;IAEpB,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,YAAY;YACf,OAAO,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;YAC1C,MAAM;QACR,KAAK,aAAa;YAChB,OAAO,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;YAC3C,MAAM;QACR,KAAK,UAAU;YACb,OAAO,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;YACxC,MAAM;IACV,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAA4B;IAC3D,OAAO,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CACtC,qBAAqB,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC,CACpE,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAAwB;IAChE,MAAM,KAAK,GAAa,CAAC,yCAAyC,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;IAEnF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,QAAQ,OAAO,CAAC,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,WAAW,kBAAkB,CAAC,CAAC;QAC1D,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;IACnF,KAAK,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;IAEzE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { dispatchEvent, executeHook, dryRunDispatch } from './core.js';
|
|
2
|
+
export { buildSpecCreatedPayload, buildStatusChangePayload, buildDriftDetectedPayload, buildCommitPayload, matchesFilter, matchesGlob, } from './triggers.js';
|
|
3
|
+
export { generateGitHookScript, generateGitHooks, formatGitHookInstallGuide, } from './git-hook-generator.js';
|
|
4
|
+
export { listTemplateNames, getTemplate, getAllTemplates } from './templates.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/engine/hooks/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,kBAAkB,EAClB,aAAa,EACb,WAAW,GACZ,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,yBAAyB,GAC1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// engine/hooks/index.ts — Barrel export for hooks engine (SPEC-071)
|
|
2
|
+
export { dispatchEvent, executeHook, dryRunDispatch } from './core.js';
|
|
3
|
+
export { buildSpecCreatedPayload, buildStatusChangePayload, buildDriftDetectedPayload, buildCommitPayload, matchesFilter, matchesGlob, } from './triggers.js';
|
|
4
|
+
export { generateGitHookScript, generateGitHooks, formatGitHookInstallGuide, } from './git-hook-generator.js';
|
|
5
|
+
export { listTemplateNames, getTemplate, getAllTemplates } from './templates.js';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/engine/hooks/index.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,kBAAkB,EAClB,aAAa,EACb,WAAW,GACZ,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,yBAAyB,GAC1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { HookTemplate } from '../../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Return all available template names.
|
|
4
|
+
*/
|
|
5
|
+
export declare function listTemplateNames(): string[];
|
|
6
|
+
/**
|
|
7
|
+
* Return a template by name, or undefined if not found.
|
|
8
|
+
*/
|
|
9
|
+
export declare function getTemplate(name: string): HookTemplate | undefined;
|
|
10
|
+
/**
|
|
11
|
+
* Return all templates.
|
|
12
|
+
*/
|
|
13
|
+
export declare function getAllTemplates(): HookTemplate[];
|
|
14
|
+
//# sourceMappingURL=templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../../src/engine/hooks/templates.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AA+HzD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAE5C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAElE;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,YAAY,EAAE,CAEhD"}
|