@planu/cli 0.43.1 → 0.45.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/cli/colors.d.ts +14 -0
- package/dist/cli/colors.d.ts.map +1 -0
- package/dist/cli/colors.js +26 -0
- package/dist/cli/colors.js.map +1 -0
- package/dist/cli/commands/audit.d.ts +3 -0
- package/dist/cli/commands/audit.d.ts.map +1 -0
- package/dist/cli/commands/audit.js +38 -0
- package/dist/cli/commands/audit.js.map +1 -0
- package/dist/cli/commands/create.d.ts +3 -0
- package/dist/cli/commands/create.d.ts.map +1 -0
- package/dist/cli/commands/create.js +50 -0
- package/dist/cli/commands/create.js.map +1 -0
- package/dist/cli/commands/dashboard.d.ts +3 -0
- package/dist/cli/commands/dashboard.d.ts.map +1 -0
- package/dist/cli/commands/dashboard.js +29 -0
- package/dist/cli/commands/dashboard.js.map +1 -0
- package/dist/cli/commands/estimate.d.ts +3 -0
- package/dist/cli/commands/estimate.d.ts.map +1 -0
- package/dist/cli/commands/estimate.js +36 -0
- package/dist/cli/commands/estimate.js.map +1 -0
- package/dist/cli/commands/handoff.d.ts +3 -0
- package/dist/cli/commands/handoff.d.ts.map +1 -0
- package/dist/cli/commands/handoff.js +49 -0
- package/dist/cli/commands/handoff.js.map +1 -0
- package/dist/cli/commands/init.d.ts +3 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +43 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/list.d.ts +3 -0
- package/dist/cli/commands/list.d.ts.map +1 -0
- package/dist/cli/commands/list.js +36 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +3 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/serve.js +34 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/status.d.ts +3 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +49 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +3 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +36 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/commands/watch.d.ts +3 -0
- package/dist/cli/commands/watch.d.ts.map +1 -0
- package/dist/cli/commands/watch.js +156 -0
- package/dist/cli/commands/watch.js.map +1 -0
- package/dist/cli/formatter.d.ts +18 -0
- package/dist/cli/formatter.d.ts.map +1 -0
- package/dist/cli/formatter.js +78 -0
- package/dist/cli/formatter.js.map +1 -0
- package/dist/cli/index.d.ts +6 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +7 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/interactive.d.ts +13 -0
- package/dist/cli/interactive.d.ts.map +1 -0
- package/dist/cli/interactive.js +42 -0
- package/dist/cli/interactive.js.map +1 -0
- package/dist/cli/project-detector.d.ts +6 -0
- package/dist/cli/project-detector.d.ts.map +1 -0
- package/dist/cli/project-detector.js +12 -0
- package/dist/cli/project-detector.js.map +1 -0
- package/dist/cli/router.d.ts +5 -0
- package/dist/cli/router.d.ts.map +1 -0
- package/dist/cli/router.js +104 -0
- package/dist/cli/router.js.map +1 -0
- package/dist/config/hook-defaults.json +19 -0
- package/dist/config/license-plans.json +23 -2
- package/dist/config/registry-categories.json +20 -0
- package/dist/config/registry-stacks.json +16 -0
- package/dist/config/tool-groups.json +12 -1
- package/dist/engine/analyzer/analyze-project.d.ts +15 -0
- package/dist/engine/analyzer/analyze-project.d.ts.map +1 -0
- package/dist/engine/analyzer/analyze-project.js +101 -0
- package/dist/engine/analyzer/analyze-project.js.map +1 -0
- package/dist/engine/analyzer/completeness-checker.d.ts +6 -0
- package/dist/engine/analyzer/completeness-checker.d.ts.map +1 -0
- package/dist/engine/analyzer/completeness-checker.js +79 -0
- package/dist/engine/analyzer/completeness-checker.js.map +1 -0
- package/dist/engine/analyzer/db-engine.d.ts +9 -0
- package/dist/engine/analyzer/db-engine.d.ts.map +1 -0
- package/dist/engine/analyzer/db-engine.js +137 -0
- package/dist/engine/analyzer/db-engine.js.map +1 -0
- package/dist/engine/analyzer/detectors.d.ts +7 -0
- package/dist/engine/analyzer/detectors.d.ts.map +1 -0
- package/dist/engine/analyzer/detectors.js +234 -0
- package/dist/engine/analyzer/detectors.js.map +1 -0
- package/dist/engine/analyzer/env-setup.d.ts +6 -0
- package/dist/engine/analyzer/env-setup.d.ts.map +1 -0
- package/dist/engine/analyzer/env-setup.js +174 -0
- package/dist/engine/analyzer/env-setup.js.map +1 -0
- package/dist/engine/analyzer/index.d.ts +6 -0
- package/dist/engine/analyzer/index.d.ts.map +1 -0
- package/dist/engine/analyzer/index.js +8 -0
- package/dist/engine/analyzer/index.js.map +1 -0
- package/dist/engine/analyzer-db.d.ts +1 -8
- package/dist/engine/analyzer-db.d.ts.map +1 -1
- package/dist/engine/analyzer-db.js +3 -136
- package/dist/engine/analyzer-db.js.map +1 -1
- package/dist/engine/analyzer-detectors.d.ts +1 -6
- package/dist/engine/analyzer-detectors.d.ts.map +1 -1
- package/dist/engine/analyzer-detectors.js +3 -231
- package/dist/engine/analyzer-detectors.js.map +1 -1
- package/dist/engine/analyzer-env.d.ts +1 -5
- package/dist/engine/analyzer-env.d.ts.map +1 -1
- package/dist/engine/analyzer-env.js +3 -173
- package/dist/engine/analyzer-env.js.map +1 -1
- package/dist/engine/analyzer.d.ts +2 -18
- package/dist/engine/analyzer.d.ts.map +1 -1
- package/dist/engine/analyzer.js +4 -172
- package/dist/engine/analyzer.js.map +1 -1
- package/dist/engine/dashboard/data-loader.d.ts +16 -1
- package/dist/engine/dashboard/data-loader.d.ts.map +1 -1
- package/dist/engine/dashboard/data-loader.js +140 -2
- package/dist/engine/dashboard/data-loader.js.map +1 -1
- package/dist/engine/dashboard/index.d.ts +2 -0
- package/dist/engine/dashboard/index.d.ts.map +1 -1
- package/dist/engine/dashboard/index.js +2 -0
- package/dist/engine/dashboard/index.js.map +1 -1
- package/dist/engine/dashboard/kanban-logic.d.ts +31 -0
- package/dist/engine/dashboard/kanban-logic.d.ts.map +1 -0
- package/dist/engine/dashboard/kanban-logic.js +122 -0
- package/dist/engine/dashboard/kanban-logic.js.map +1 -0
- package/dist/engine/dashboard/routes.d.ts +2 -0
- package/dist/engine/dashboard/routes.d.ts.map +1 -1
- package/dist/engine/dashboard/routes.js +112 -23
- package/dist/engine/dashboard/routes.js.map +1 -1
- package/dist/engine/dashboard/server.d.ts +5 -0
- package/dist/engine/dashboard/server.d.ts.map +1 -1
- package/dist/engine/dashboard/server.js +48 -0
- package/dist/engine/dashboard/server.js.map +1 -1
- package/dist/engine/dashboard/spec-updater.d.ts +8 -0
- package/dist/engine/dashboard/spec-updater.d.ts.map +1 -0
- package/dist/engine/dashboard/spec-updater.js +37 -0
- package/dist/engine/dashboard/spec-updater.js.map +1 -0
- package/dist/engine/dashboard/templates-kanban.d.ts +6 -0
- package/dist/engine/dashboard/templates-kanban.d.ts.map +1 -0
- package/dist/engine/dashboard/templates-kanban.js +100 -0
- package/dist/engine/dashboard/templates-kanban.js.map +1 -0
- package/dist/engine/dashboard/templates-layout.d.ts +3 -3
- package/dist/engine/dashboard/templates-layout.d.ts.map +1 -1
- package/dist/engine/dashboard/templates-layout.js +167 -44
- package/dist/engine/dashboard/templates-layout.js.map +1 -1
- package/dist/engine/dashboard/templates-project.d.ts +1 -1
- package/dist/engine/dashboard/templates-project.d.ts.map +1 -1
- package/dist/engine/dashboard/templates-project.js +109 -3
- package/dist/engine/dashboard/templates-project.js.map +1 -1
- package/dist/engine/dashboard/templates.d.ts +1 -0
- package/dist/engine/dashboard/templates.d.ts.map +1 -1
- package/dist/engine/dashboard/templates.js +1 -0
- package/dist/engine/dashboard/templates.js.map +1 -1
- package/dist/engine/hooks/config-loader.d.ts +36 -0
- package/dist/engine/hooks/config-loader.d.ts.map +1 -0
- package/dist/engine/hooks/config-loader.js +142 -0
- package/dist/engine/hooks/config-loader.js.map +1 -0
- package/dist/engine/hooks/debouncer.d.ts +30 -0
- package/dist/engine/hooks/debouncer.d.ts.map +1 -0
- package/dist/engine/hooks/debouncer.js +124 -0
- package/dist/engine/hooks/debouncer.js.map +1 -0
- package/dist/engine/hooks/event-bus.d.ts +40 -0
- package/dist/engine/hooks/event-bus.d.ts.map +1 -0
- package/dist/engine/hooks/event-bus.js +83 -0
- package/dist/engine/hooks/event-bus.js.map +1 -0
- package/dist/engine/hooks/file-watcher.d.ts +48 -0
- package/dist/engine/hooks/file-watcher.d.ts.map +1 -0
- package/dist/engine/hooks/file-watcher.js +193 -0
- package/dist/engine/hooks/file-watcher.js.map +1 -0
- package/dist/engine/hooks/handlers/on-commit.d.ts +26 -0
- package/dist/engine/hooks/handlers/on-commit.d.ts.map +1 -0
- package/dist/engine/hooks/handlers/on-commit.js +198 -0
- package/dist/engine/hooks/handlers/on-commit.js.map +1 -0
- package/dist/engine/hooks/handlers/on-create.d.ts +8 -0
- package/dist/engine/hooks/handlers/on-create.d.ts.map +1 -0
- package/dist/engine/hooks/handlers/on-create.js +30 -0
- package/dist/engine/hooks/handlers/on-create.js.map +1 -0
- package/dist/engine/hooks/handlers/on-delete.d.ts +9 -0
- package/dist/engine/hooks/handlers/on-delete.d.ts.map +1 -0
- package/dist/engine/hooks/handlers/on-delete.js +33 -0
- package/dist/engine/hooks/handlers/on-delete.js.map +1 -0
- package/dist/engine/hooks/handlers/on-save.d.ts +29 -0
- package/dist/engine/hooks/handlers/on-save.d.ts.map +1 -0
- package/dist/engine/hooks/handlers/on-save.js +118 -0
- package/dist/engine/hooks/handlers/on-save.js.map +1 -0
- package/dist/engine/hooks/handlers/on-test-pass.d.ts +33 -0
- package/dist/engine/hooks/handlers/on-test-pass.d.ts.map +1 -0
- package/dist/engine/hooks/handlers/on-test-pass.js +103 -0
- package/dist/engine/hooks/handlers/on-test-pass.js.map +1 -0
- package/dist/engine/hooks/hook-engine.d.ts +50 -0
- package/dist/engine/hooks/hook-engine.d.ts.map +1 -0
- package/dist/engine/hooks/hook-engine.js +159 -0
- package/dist/engine/hooks/hook-engine.js.map +1 -0
- package/dist/engine/hooks/index.d.ts +10 -0
- package/dist/engine/hooks/index.d.ts.map +1 -1
- package/dist/engine/hooks/index.js +12 -0
- package/dist/engine/hooks/index.js.map +1 -1
- package/dist/engine/living-spec/annotation-parser.d.ts +18 -0
- package/dist/engine/living-spec/annotation-parser.d.ts.map +1 -0
- package/dist/engine/living-spec/annotation-parser.js +105 -0
- package/dist/engine/living-spec/annotation-parser.js.map +1 -0
- package/dist/engine/living-spec/auto-reconciler.d.ts +28 -0
- package/dist/engine/living-spec/auto-reconciler.d.ts.map +1 -0
- package/dist/engine/living-spec/auto-reconciler.js +103 -0
- package/dist/engine/living-spec/auto-reconciler.js.map +1 -0
- package/dist/engine/living-spec/bidirectional-sync.d.ts +26 -0
- package/dist/engine/living-spec/bidirectional-sync.d.ts.map +1 -0
- package/dist/engine/living-spec/bidirectional-sync.js +160 -0
- package/dist/engine/living-spec/bidirectional-sync.js.map +1 -0
- package/dist/engine/living-spec/dashboard-collector.d.ts +22 -0
- package/dist/engine/living-spec/dashboard-collector.d.ts.map +1 -0
- package/dist/engine/living-spec/dashboard-collector.js +97 -0
- package/dist/engine/living-spec/dashboard-collector.js.map +1 -0
- package/dist/engine/living-spec/drift-watcher.d.ts +15 -0
- package/dist/engine/living-spec/drift-watcher.d.ts.map +1 -0
- package/dist/engine/living-spec/drift-watcher.js +126 -0
- package/dist/engine/living-spec/drift-watcher.js.map +1 -0
- package/dist/engine/living-spec/hash-tracker.d.ts +24 -0
- package/dist/engine/living-spec/hash-tracker.d.ts.map +1 -0
- package/dist/engine/living-spec/hash-tracker.js +123 -0
- package/dist/engine/living-spec/hash-tracker.js.map +1 -0
- package/dist/engine/living-spec/index.d.ts +9 -0
- package/dist/engine/living-spec/index.d.ts.map +1 -0
- package/dist/engine/living-spec/index.js +10 -0
- package/dist/engine/living-spec/index.js.map +1 -0
- package/dist/engine/living-spec/signature-tracker.d.ts +18 -0
- package/dist/engine/living-spec/signature-tracker.d.ts.map +1 -0
- package/dist/engine/living-spec/signature-tracker.js +136 -0
- package/dist/engine/living-spec/signature-tracker.js.map +1 -0
- package/dist/engine/living-spec/test-coverage-correlator.d.ts +22 -0
- package/dist/engine/living-spec/test-coverage-correlator.d.ts.map +1 -0
- package/dist/engine/living-spec/test-coverage-correlator.js +130 -0
- package/dist/engine/living-spec/test-coverage-correlator.js.map +1 -0
- package/dist/engine/plugins/extensions/worker-extension.d.ts.map +1 -1
- package/dist/engine/plugins/extensions/worker-extension.js +3 -1
- package/dist/engine/plugins/extensions/worker-extension.js.map +1 -1
- package/dist/engine/safety/file-mutex.d.ts.map +1 -1
- package/dist/engine/safety/file-mutex.js +3 -0
- package/dist/engine/safety/file-mutex.js.map +1 -1
- package/dist/engine/spec-registry/adapter.d.ts +9 -0
- package/dist/engine/spec-registry/adapter.d.ts.map +1 -0
- package/dist/engine/spec-registry/adapter.js +303 -0
- package/dist/engine/spec-registry/adapter.js.map +1 -0
- package/dist/engine/spec-registry/client.d.ts +8 -0
- package/dist/engine/spec-registry/client.d.ts.map +1 -0
- package/dist/engine/spec-registry/client.js +194 -0
- package/dist/engine/spec-registry/client.js.map +1 -0
- package/dist/engine/spec-registry/index.d.ts +7 -0
- package/dist/engine/spec-registry/index.d.ts.map +1 -0
- package/dist/engine/spec-registry/index.js +7 -0
- package/dist/engine/spec-registry/index.js.map +1 -0
- package/dist/engine/spec-registry/packager.d.ts +24 -0
- package/dist/engine/spec-registry/packager.d.ts.map +1 -0
- package/dist/engine/spec-registry/packager.js +122 -0
- package/dist/engine/spec-registry/packager.js.map +1 -0
- package/dist/engine/spec-registry/scorer.d.ts +10 -0
- package/dist/engine/spec-registry/scorer.d.ts.map +1 -0
- package/dist/engine/spec-registry/scorer.js +151 -0
- package/dist/engine/spec-registry/scorer.js.map +1 -0
- package/dist/engine/spec-registry/validator.d.ts +11 -0
- package/dist/engine/spec-registry/validator.d.ts.map +1 -0
- package/dist/engine/spec-registry/validator.js +144 -0
- package/dist/engine/spec-registry/validator.js.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -1
- package/dist/storage/hash-snapshot-store.d.ts +18 -0
- package/dist/storage/hash-snapshot-store.d.ts.map +1 -0
- package/dist/storage/hash-snapshot-store.js +43 -0
- package/dist/storage/hash-snapshot-store.js.map +1 -0
- package/dist/storage/index.d.ts +3 -0
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +3 -0
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/living-dashboard-store.d.ts +10 -0
- package/dist/storage/living-dashboard-store.d.ts.map +1 -0
- package/dist/storage/living-dashboard-store.js +31 -0
- package/dist/storage/living-dashboard-store.js.map +1 -0
- package/dist/storage/sync-log-store.d.ts +26 -0
- package/dist/storage/sync-log-store.d.ts.map +1 -0
- package/dist/storage/sync-log-store.js +60 -0
- package/dist/storage/sync-log-store.js.map +1 -0
- package/dist/tools/auto-reconcile.d.ts +3 -0
- package/dist/tools/auto-reconcile.d.ts.map +1 -0
- package/dist/tools/auto-reconcile.js +81 -0
- package/dist/tools/auto-reconcile.js.map +1 -0
- package/dist/tools/challenge-spec/platform-challenge-scenarios-b2.d.ts.map +1 -1
- package/dist/tools/challenge-spec/platform-challenge-scenarios-b2.js +6 -0
- package/dist/tools/challenge-spec/platform-challenge-scenarios-b2.js.map +1 -1
- package/dist/tools/create-spec/spec-builder.js +2 -0
- package/dist/tools/create-spec/spec-builder.js.map +1 -1
- package/dist/tools/dashboard.d.ts.map +1 -1
- package/dist/tools/dashboard.js +20 -13
- package/dist/tools/dashboard.js.map +1 -1
- package/dist/tools/generate-annotations.d.ts +3 -0
- package/dist/tools/generate-annotations.d.ts.map +1 -0
- package/dist/tools/generate-annotations.js +70 -0
- package/dist/tools/generate-annotations.js.map +1 -0
- package/dist/tools/generate-execution-plan.d.ts.map +1 -1
- package/dist/tools/generate-execution-plan.js +1 -0
- package/dist/tools/generate-execution-plan.js.map +1 -1
- package/dist/tools/github-pr-handler.d.ts.map +1 -1
- package/dist/tools/github-pr-handler.js +1 -0
- package/dist/tools/github-pr-handler.js.map +1 -1
- package/dist/tools/github-review-handler.d.ts.map +1 -1
- package/dist/tools/github-review-handler.js +1 -0
- package/dist/tools/github-review-handler.js.map +1 -1
- package/dist/tools/ide-config-handler.d.ts.map +1 -1
- package/dist/tools/ide-config-handler.js +3 -0
- package/dist/tools/ide-config-handler.js.map +1 -1
- package/dist/tools/init-project/handler.d.ts.map +1 -1
- package/dist/tools/init-project/handler.js +0 -3
- package/dist/tools/init-project/handler.js.map +1 -1
- package/dist/tools/living-spec-coverage.d.ts +3 -0
- package/dist/tools/living-spec-coverage.d.ts.map +1 -0
- package/dist/tools/living-spec-coverage.js +100 -0
- package/dist/tools/living-spec-coverage.js.map +1 -0
- package/dist/tools/living-spec-watch.d.ts +4 -0
- package/dist/tools/living-spec-watch.d.ts.map +1 -0
- package/dist/tools/living-spec-watch.js +94 -0
- package/dist/tools/living-spec-watch.js.map +1 -0
- package/dist/tools/manage-plugins-handler.d.ts.map +1 -1
- package/dist/tools/manage-plugins-handler.js +2 -1
- package/dist/tools/manage-plugins-handler.js.map +1 -1
- package/dist/tools/orchestrate-distribution.d.ts.map +1 -1
- package/dist/tools/orchestrate-distribution.js +1 -0
- package/dist/tools/orchestrate-distribution.js.map +1 -1
- package/dist/tools/orchestrate-runtime.js +2 -0
- package/dist/tools/orchestrate-runtime.js.map +1 -1
- package/dist/tools/plan-team-distribution.d.ts.map +1 -1
- package/dist/tools/plan-team-distribution.js +2 -0
- package/dist/tools/plan-team-distribution.js.map +1 -1
- package/dist/tools/register-dashboard-tools.d.ts.map +1 -1
- package/dist/tools/register-dashboard-tools.js +5 -1
- package/dist/tools/register-dashboard-tools.js.map +1 -1
- package/dist/tools/register-hooks-tools.d.ts.map +1 -1
- package/dist/tools/register-hooks-tools.js +82 -1
- package/dist/tools/register-hooks-tools.js.map +1 -1
- package/dist/tools/register-living-spec-advanced-tools.d.ts +6 -0
- package/dist/tools/register-living-spec-advanced-tools.d.ts.map +1 -0
- package/dist/tools/register-living-spec-advanced-tools.js +113 -0
- package/dist/tools/register-living-spec-advanced-tools.js.map +1 -0
- package/dist/tools/register-living-spec-tools.d.ts +6 -0
- package/dist/tools/register-living-spec-tools.d.ts.map +1 -0
- package/dist/tools/register-living-spec-tools.js +67 -0
- package/dist/tools/register-living-spec-tools.js.map +1 -0
- package/dist/tools/register-spec-registry-tools.d.ts +3 -0
- package/dist/tools/register-spec-registry-tools.d.ts.map +1 -0
- package/dist/tools/register-spec-registry-tools.js +91 -0
- package/dist/tools/register-spec-registry-tools.js.map +1 -0
- package/dist/tools/registry/auth.d.ts +17 -0
- package/dist/tools/registry/auth.d.ts.map +1 -0
- package/dist/tools/registry/auth.js +132 -0
- package/dist/tools/registry/auth.js.map +1 -0
- package/dist/tools/registry/index.d.ts +5 -0
- package/dist/tools/registry/index.d.ts.map +1 -0
- package/dist/tools/registry/index.js +6 -0
- package/dist/tools/registry/index.js.map +1 -0
- package/dist/tools/registry/install.d.ts +7 -0
- package/dist/tools/registry/install.d.ts.map +1 -0
- package/dist/tools/registry/install.js +125 -0
- package/dist/tools/registry/install.js.map +1 -0
- package/dist/tools/registry/publish.d.ts +7 -0
- package/dist/tools/registry/publish.d.ts.map +1 -0
- package/dist/tools/registry/publish.js +96 -0
- package/dist/tools/registry/publish.js.map +1 -0
- package/dist/tools/registry/search.d.ts +7 -0
- package/dist/tools/registry/search.d.ts.map +1 -0
- package/dist/tools/registry/search.js +79 -0
- package/dist/tools/registry/search.js.map +1 -0
- package/dist/tools/resolve-sync-conflict.d.ts +3 -0
- package/dist/tools/resolve-sync-conflict.d.ts.map +1 -0
- package/dist/tools/resolve-sync-conflict.js +38 -0
- package/dist/tools/resolve-sync-conflict.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/spec-registry-schemas.d.ts +39 -0
- package/dist/tools/schemas/spec-registry-schemas.d.ts.map +1 -0
- package/dist/tools/schemas/spec-registry-schemas.js +72 -0
- package/dist/tools/schemas/spec-registry-schemas.js.map +1 -0
- package/dist/tools/snapshot-spec-hashes.d.ts +3 -0
- package/dist/tools/snapshot-spec-hashes.d.ts.map +1 -0
- package/dist/tools/snapshot-spec-hashes.js +100 -0
- package/dist/tools/snapshot-spec-hashes.js.map +1 -0
- package/dist/tools/spec-diff.d.ts +3 -0
- package/dist/tools/spec-diff.d.ts.map +1 -0
- package/dist/tools/spec-diff.js +58 -0
- package/dist/tools/spec-diff.js.map +1 -0
- package/dist/tools/start-hooks.d.ts +17 -0
- package/dist/tools/start-hooks.d.ts.map +1 -0
- package/dist/tools/start-hooks.js +209 -0
- package/dist/tools/start-hooks.js.map +1 -0
- package/dist/tools/sync-code-to-spec.d.ts +3 -0
- package/dist/tools/sync-code-to-spec.d.ts.map +1 -0
- package/dist/tools/sync-code-to-spec.js +51 -0
- package/dist/tools/sync-code-to-spec.js.map +1 -0
- package/dist/tools/sync-spec-to-code.d.ts +3 -0
- package/dist/tools/sync-spec-to-code.d.ts.map +1 -0
- package/dist/tools/sync-spec-to-code.js +58 -0
- package/dist/tools/sync-spec-to-code.js.map +1 -0
- package/dist/tools/validate-annotations.d.ts +3 -0
- package/dist/tools/validate-annotations.d.ts.map +1 -0
- package/dist/tools/validate-annotations.js +90 -0
- package/dist/tools/validate-annotations.js.map +1 -0
- package/dist/types/cli.d.ts +14 -0
- package/dist/types/cli.d.ts.map +1 -0
- package/dist/types/cli.js +3 -0
- package/dist/types/cli.js.map +1 -0
- package/dist/types/dashboard.d.ts +86 -1
- package/dist/types/dashboard.d.ts.map +1 -1
- package/dist/types/file-hooks.d.ts +230 -0
- package/dist/types/file-hooks.d.ts.map +1 -0
- package/dist/types/file-hooks.js +3 -0
- package/dist/types/file-hooks.js.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/living-spec.d.ts +382 -0
- package/dist/types/living-spec.d.ts.map +1 -0
- package/dist/types/living-spec.js +3 -0
- package/dist/types/living-spec.js.map +1 -0
- package/dist/types/spec-registry.d.ts +194 -0
- package/dist/types/spec-registry.d.ts.map +1 -0
- package/dist/types/spec-registry.js +3 -0
- package/dist/types/spec-registry.js.map +1 -0
- package/package.json +1 -1
- package/src/config/hook-defaults.json +19 -0
- package/src/config/license-plans.json +23 -2
- package/src/config/registry-categories.json +20 -0
- package/src/config/registry-stacks.json +16 -0
- package/src/config/tool-groups.json +12 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-coverage-correlator.js","sourceRoot":"","sources":["../../../src/engine/living-spec/test-coverage-correlator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-extension.d.ts","sourceRoot":"","sources":["../../../../src/engine/plugins/extensions/worker-extension.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAsB,MAAM,yBAAyB,CAAC;AAU1F;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,SAAS,sBAAsB,EAAE,GACzC,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"worker-extension.d.ts","sourceRoot":"","sources":["../../../../src/engine/plugins/extensions/worker-extension.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAsB,MAAM,yBAAyB,CAAC;AAU1F;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,SAAS,sBAAsB,EAAE,GACzC,MAAM,EAAE,CA8BV;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAclE;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAe5F;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQ7D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAO1C"}
|
|
@@ -21,7 +21,9 @@ export function registerPluginWorkers(pluginId, workers) {
|
|
|
21
21
|
// Start cron workers immediately
|
|
22
22
|
if (worker.trigger === 'cron' && worker.interval && worker.interval > 0) {
|
|
23
23
|
activeWorker.intervalHandle = setInterval(() => {
|
|
24
|
-
void withPluginTimeout(pluginId, `worker:${worker.name}`, worker.handler).catch(
|
|
24
|
+
void withPluginTimeout(pluginId, `worker:${worker.name}`, worker.handler).catch(
|
|
25
|
+
/* v8 ignore next 4 -- async cron error handler, not reachable in sync tests */
|
|
26
|
+
(err) => {
|
|
25
27
|
const msg = err instanceof Error ? err.message : String(err);
|
|
26
28
|
console.error(`[plugin:${pluginId}] Worker "${worker.name}" error: ${msg}`);
|
|
27
29
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-extension.js","sourceRoot":"","sources":["../../../../src/engine/plugins/extensions/worker-extension.ts"],"names":[],"mappings":"AAAA,uFAAuF;AAGvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,oEAAoE;AACpE,MAAM,cAAc,GAAG,IAAI,GAAG,EAA8B,CAAC;AAE7D,SAAS,SAAS,CAAC,QAAgB,EAAE,UAAkB;IACrD,OAAO,GAAG,QAAQ,IAAI,UAAU,EAAE,CAAC;AACrC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,QAAgB,EAChB,OAA0C;IAE1C,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAE7C,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,WAAW,MAAM,CAAC,IAAI,oCAAoC,QAAQ,GAAG,CAAC,CAAC;QACzF,CAAC;QAED,MAAM,YAAY,GAAuB,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QAE1E,iCAAiC;QACjC,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;YACxE,YAAY,CAAC,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE;gBAC7C,KAAK,iBAAiB,CAAC,QAAQ,EAAE,UAAU,MAAM,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"worker-extension.js","sourceRoot":"","sources":["../../../../src/engine/plugins/extensions/worker-extension.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-mutex.d.ts","sourceRoot":"","sources":["../../../src/engine/safety/file-mutex.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"file-mutex.d.ts","sourceRoot":"","sources":["../../../src/engine/safety/file-mutex.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,uBAAuB,CAAC;AA6CzE;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,MAA2B,GACrC,OAAO,CAAC,UAAU,CAAC,CAqDrB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CASnE"}
|
|
@@ -8,6 +8,7 @@ const POLL_INTERVAL_MS = 100;
|
|
|
8
8
|
function hashResource(resource) {
|
|
9
9
|
return createHash('sha256').update(resource).digest('hex').slice(0, 16);
|
|
10
10
|
}
|
|
11
|
+
/* v8 ignore next 8 -- process.kill(pid, 0) is OS-dependent, not unit-testable */
|
|
11
12
|
function isProcessRunning(pid) {
|
|
12
13
|
try {
|
|
13
14
|
process.kill(pid, 0);
|
|
@@ -77,6 +78,7 @@ export async function acquireLock(resource, timeoutMs = DEFAULT_TIMEOUT_MS) {
|
|
|
77
78
|
}
|
|
78
79
|
catch {
|
|
79
80
|
// File was created between our check and write — retry
|
|
81
|
+
/* v8 ignore next 2 -- race condition: another process grabs lock between check and write */
|
|
80
82
|
await new Promise((r) => setTimeout(r, POLL_INTERVAL_MS));
|
|
81
83
|
continue;
|
|
82
84
|
}
|
|
@@ -100,6 +102,7 @@ export async function releaseLock(handle) {
|
|
|
100
102
|
await unlink(handle.lockPath);
|
|
101
103
|
}
|
|
102
104
|
catch (err) {
|
|
105
|
+
/* v8 ignore next 3 -- defensive: non-ENOENT errors from unlink (permissions, etc.) */
|
|
103
106
|
if (err.code !== 'ENOENT') {
|
|
104
107
|
throw err;
|
|
105
108
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-mutex.js","sourceRoot":"","sources":["../../../src/engine/safety/file-mutex.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"file-mutex.js","sourceRoot":"","sources":["../../../src/engine/safety/file-mutex.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stack detection and spec adaptation for registry specs.
|
|
3
|
+
* Detects project technology stack from config files and applies
|
|
4
|
+
* framework-specific substitutions to spec content.
|
|
5
|
+
*/
|
|
6
|
+
import type { StackDetectionResult, StackAdaptation } from '../../types/index.js';
|
|
7
|
+
export declare function detectStack(projectPath: string): Promise<StackDetectionResult>;
|
|
8
|
+
export declare function adaptSpec(specDir: string, projectStack: StackDetectionResult, adaptableMap?: Record<string, Record<string, string>>): Promise<StackAdaptation[]>;
|
|
9
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/engine/spec-registry/adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAyPlF,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA0BpF;AAOD,wBAAsB,SAAS,CAC7B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,oBAAoB,EAClC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GACpD,OAAO,CAAC,eAAe,EAAE,CAAC,CA0D5B"}
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stack detection and spec adaptation for registry specs.
|
|
3
|
+
* Detects project technology stack from config files and applies
|
|
4
|
+
* framework-specific substitutions to spec content.
|
|
5
|
+
*/
|
|
6
|
+
import { readFile, access, writeFile } from 'node:fs/promises';
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
// Helpers
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
async function fileExists(filePath) {
|
|
12
|
+
try {
|
|
13
|
+
await access(filePath);
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
/* v8 ignore start -- safe file readers, catch branches are defensive */
|
|
21
|
+
async function readJsonSafe(filePath) {
|
|
22
|
+
try {
|
|
23
|
+
const raw = await readFile(filePath, 'utf-8');
|
|
24
|
+
return JSON.parse(raw);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
async function readTextSafe(filePath) {
|
|
31
|
+
try {
|
|
32
|
+
return await readFile(filePath, 'utf-8');
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/* v8 ignore stop */
|
|
39
|
+
function hasDep(pkg, name) {
|
|
40
|
+
const deps = pkg.dependencies;
|
|
41
|
+
const devDeps = pkg.devDependencies;
|
|
42
|
+
return !!(deps?.[name] ?? devDeps?.[name]);
|
|
43
|
+
}
|
|
44
|
+
function hasDepOnly(pkg, name) {
|
|
45
|
+
const deps = pkg.dependencies;
|
|
46
|
+
return !!deps?.[name];
|
|
47
|
+
}
|
|
48
|
+
function hasDevDep(pkg, name) {
|
|
49
|
+
const devDeps = pkg.devDependencies;
|
|
50
|
+
return !!devDeps?.[name];
|
|
51
|
+
}
|
|
52
|
+
function textContains(text, keyword) {
|
|
53
|
+
return text.toLowerCase().includes(keyword.toLowerCase());
|
|
54
|
+
}
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
// Node / JS ecosystem detection — extracted helpers to reduce complexity
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
function detectNodeFramework(pkg) {
|
|
59
|
+
if (hasDep(pkg, 'next')) {
|
|
60
|
+
return 'nextjs';
|
|
61
|
+
}
|
|
62
|
+
if (hasDep(pkg, 'nuxt')) {
|
|
63
|
+
return 'nuxt';
|
|
64
|
+
}
|
|
65
|
+
if (hasDep(pkg, '@sveltejs/kit') || hasDep(pkg, 'svelte')) {
|
|
66
|
+
return 'sveltekit';
|
|
67
|
+
}
|
|
68
|
+
if (hasDep(pkg, '@remix-run/node') || hasDep(pkg, 'remix')) {
|
|
69
|
+
return 'remix';
|
|
70
|
+
}
|
|
71
|
+
if (hasDep(pkg, 'astro')) {
|
|
72
|
+
return 'astro';
|
|
73
|
+
}
|
|
74
|
+
if (hasDep(pkg, 'fastify')) {
|
|
75
|
+
return 'fastify';
|
|
76
|
+
}
|
|
77
|
+
if (hasDep(pkg, 'express')) {
|
|
78
|
+
return 'express';
|
|
79
|
+
}
|
|
80
|
+
return 'unknown';
|
|
81
|
+
}
|
|
82
|
+
function detectNodeOrm(pkg) {
|
|
83
|
+
if (hasDep(pkg, '@prisma/client') || hasDep(pkg, 'prisma')) {
|
|
84
|
+
return 'prisma';
|
|
85
|
+
}
|
|
86
|
+
if (hasDep(pkg, 'drizzle-orm')) {
|
|
87
|
+
return 'drizzle';
|
|
88
|
+
}
|
|
89
|
+
if (hasDep(pkg, 'sequelize')) {
|
|
90
|
+
return 'sequelize';
|
|
91
|
+
}
|
|
92
|
+
if (hasDep(pkg, 'typeorm')) {
|
|
93
|
+
return 'typeorm';
|
|
94
|
+
}
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
function detectNodeTestRunner(pkg) {
|
|
98
|
+
if (hasDevDep(pkg, 'vitest')) {
|
|
99
|
+
return 'vitest';
|
|
100
|
+
}
|
|
101
|
+
if (hasDevDep(pkg, 'jest')) {
|
|
102
|
+
return 'jest';
|
|
103
|
+
}
|
|
104
|
+
if (hasDevDep(pkg, 'mocha')) {
|
|
105
|
+
return 'mocha';
|
|
106
|
+
}
|
|
107
|
+
return undefined;
|
|
108
|
+
}
|
|
109
|
+
/* v8 ignore start -- Node.js build/pkg detection branches */
|
|
110
|
+
function detectNodeBuildTool(pkg) {
|
|
111
|
+
if (hasDevDep(pkg, 'vite') || hasDepOnly(pkg, 'vite')) {
|
|
112
|
+
return 'vite';
|
|
113
|
+
}
|
|
114
|
+
if (hasDevDep(pkg, 'webpack')) {
|
|
115
|
+
return 'webpack';
|
|
116
|
+
}
|
|
117
|
+
if (hasDevDep(pkg, 'esbuild')) {
|
|
118
|
+
return 'esbuild';
|
|
119
|
+
}
|
|
120
|
+
return undefined;
|
|
121
|
+
}
|
|
122
|
+
async function detectNodePackageManager(projectPath) {
|
|
123
|
+
if (await fileExists(join(projectPath, 'pnpm-lock.yaml'))) {
|
|
124
|
+
return 'pnpm';
|
|
125
|
+
}
|
|
126
|
+
if (await fileExists(join(projectPath, 'yarn.lock'))) {
|
|
127
|
+
return 'yarn';
|
|
128
|
+
}
|
|
129
|
+
if (await fileExists(join(projectPath, 'bun.lockb'))) {
|
|
130
|
+
return 'bun';
|
|
131
|
+
}
|
|
132
|
+
if (await fileExists(join(projectPath, 'package-lock.json'))) {
|
|
133
|
+
return 'npm';
|
|
134
|
+
}
|
|
135
|
+
return undefined;
|
|
136
|
+
}
|
|
137
|
+
/* v8 ignore stop */
|
|
138
|
+
async function detectNodeStack(projectPath, pkg) {
|
|
139
|
+
const result = { language: 'javascript', framework: 'unknown' };
|
|
140
|
+
if (await fileExists(join(projectPath, 'tsconfig.json'))) {
|
|
141
|
+
result.language = 'typescript';
|
|
142
|
+
}
|
|
143
|
+
result.framework = detectNodeFramework(pkg);
|
|
144
|
+
result.orm = detectNodeOrm(pkg);
|
|
145
|
+
result.testRunner = detectNodeTestRunner(pkg);
|
|
146
|
+
result.buildTool = detectNodeBuildTool(pkg);
|
|
147
|
+
result.packageManager = await detectNodePackageManager(projectPath);
|
|
148
|
+
return result;
|
|
149
|
+
}
|
|
150
|
+
// ---------------------------------------------------------------------------
|
|
151
|
+
// Python ecosystem detection
|
|
152
|
+
// ---------------------------------------------------------------------------
|
|
153
|
+
async function detectPythonStack(projectPath) {
|
|
154
|
+
const result = { language: 'python', framework: 'unknown' };
|
|
155
|
+
const pyproject = await readTextSafe(join(projectPath, 'pyproject.toml'));
|
|
156
|
+
const requirements = await readTextSafe(join(projectPath, 'requirements.txt'));
|
|
157
|
+
const combined = [pyproject, requirements].filter(Boolean).join('\n');
|
|
158
|
+
/* v8 ignore start -- Python framework detection branches */
|
|
159
|
+
if (textContains(combined, 'fastapi')) {
|
|
160
|
+
result.framework = 'fastapi';
|
|
161
|
+
}
|
|
162
|
+
else if (textContains(combined, 'django')) {
|
|
163
|
+
result.framework = 'django';
|
|
164
|
+
}
|
|
165
|
+
else if (textContains(combined, 'flask')) {
|
|
166
|
+
result.framework = 'flask';
|
|
167
|
+
}
|
|
168
|
+
if (textContains(combined, 'sqlalchemy')) {
|
|
169
|
+
result.orm = 'sqlalchemy';
|
|
170
|
+
}
|
|
171
|
+
if (textContains(combined, 'pytest')) {
|
|
172
|
+
result.testRunner = 'pytest';
|
|
173
|
+
}
|
|
174
|
+
if (await fileExists(join(projectPath, 'poetry.lock'))) {
|
|
175
|
+
result.packageManager = 'poetry';
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
result.packageManager = 'pip';
|
|
179
|
+
}
|
|
180
|
+
/* v8 ignore stop */
|
|
181
|
+
return result;
|
|
182
|
+
}
|
|
183
|
+
// ---------------------------------------------------------------------------
|
|
184
|
+
// Go ecosystem detection
|
|
185
|
+
// ---------------------------------------------------------------------------
|
|
186
|
+
/* v8 ignore start -- Go/Rust detection tested via unit tests */
|
|
187
|
+
async function detectGoStack(projectPath) {
|
|
188
|
+
const result = { language: 'go', framework: 'unknown' };
|
|
189
|
+
const goMod = await readTextSafe(join(projectPath, 'go.mod'));
|
|
190
|
+
if (!goMod) {
|
|
191
|
+
return result;
|
|
192
|
+
}
|
|
193
|
+
if (goMod.includes('github.com/gin-gonic/gin')) {
|
|
194
|
+
result.framework = 'gin';
|
|
195
|
+
}
|
|
196
|
+
else if (goMod.includes('github.com/gofiber/fiber')) {
|
|
197
|
+
result.framework = 'fiber';
|
|
198
|
+
}
|
|
199
|
+
if (goMod.includes('gorm.io/gorm')) {
|
|
200
|
+
result.orm = 'gorm';
|
|
201
|
+
}
|
|
202
|
+
return result;
|
|
203
|
+
}
|
|
204
|
+
async function detectRustStack(projectPath) {
|
|
205
|
+
const result = { language: 'rust', framework: 'unknown' };
|
|
206
|
+
const cargo = await readTextSafe(join(projectPath, 'Cargo.toml'));
|
|
207
|
+
if (!cargo) {
|
|
208
|
+
return result;
|
|
209
|
+
}
|
|
210
|
+
if (textContains(cargo, 'actix-web')) {
|
|
211
|
+
result.framework = 'actix-web';
|
|
212
|
+
}
|
|
213
|
+
else if (textContains(cargo, 'axum')) {
|
|
214
|
+
result.framework = 'axum';
|
|
215
|
+
}
|
|
216
|
+
if (textContains(cargo, 'diesel')) {
|
|
217
|
+
result.orm = 'diesel';
|
|
218
|
+
}
|
|
219
|
+
return result;
|
|
220
|
+
}
|
|
221
|
+
/* v8 ignore stop */
|
|
222
|
+
// ---------------------------------------------------------------------------
|
|
223
|
+
// Public: detectStack
|
|
224
|
+
// ---------------------------------------------------------------------------
|
|
225
|
+
export async function detectStack(projectPath) {
|
|
226
|
+
// Node / JS ecosystem (most common, check first)
|
|
227
|
+
const pkg = await readJsonSafe(join(projectPath, 'package.json'));
|
|
228
|
+
if (pkg) {
|
|
229
|
+
return detectNodeStack(projectPath, pkg);
|
|
230
|
+
}
|
|
231
|
+
// Python
|
|
232
|
+
if ((await fileExists(join(projectPath, 'pyproject.toml'))) ||
|
|
233
|
+
(await fileExists(join(projectPath, 'requirements.txt')))) {
|
|
234
|
+
return detectPythonStack(projectPath);
|
|
235
|
+
}
|
|
236
|
+
// Go
|
|
237
|
+
if (await fileExists(join(projectPath, 'go.mod'))) {
|
|
238
|
+
return detectGoStack(projectPath);
|
|
239
|
+
}
|
|
240
|
+
// Rust
|
|
241
|
+
if (await fileExists(join(projectPath, 'Cargo.toml'))) {
|
|
242
|
+
return detectRustStack(projectPath);
|
|
243
|
+
}
|
|
244
|
+
return { language: 'unknown', framework: 'unknown' };
|
|
245
|
+
}
|
|
246
|
+
// ---------------------------------------------------------------------------
|
|
247
|
+
// Public: adaptSpec
|
|
248
|
+
// ---------------------------------------------------------------------------
|
|
249
|
+
/* v8 ignore start -- adaptSpec branches tested via unit tests */
|
|
250
|
+
export async function adaptSpec(specDir, projectStack, adaptableMap) {
|
|
251
|
+
// Load adaptable map from registry metadata if not provided
|
|
252
|
+
let map = adaptableMap;
|
|
253
|
+
if (!map) {
|
|
254
|
+
const registryJson = await readJsonSafe(join(specDir, 'planu-registry.json'));
|
|
255
|
+
if (registryJson && typeof registryJson.adaptableMap === 'object') {
|
|
256
|
+
map = registryJson.adaptableMap;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
if (!map || Object.keys(map).length === 0) {
|
|
260
|
+
return [];
|
|
261
|
+
}
|
|
262
|
+
const targetFiles = ['technical.md', 'spec.md'];
|
|
263
|
+
const adaptations = [];
|
|
264
|
+
for (const fileName of targetFiles) {
|
|
265
|
+
const filePath = join(specDir, fileName);
|
|
266
|
+
const original = await readTextSafe(filePath);
|
|
267
|
+
if (!original) {
|
|
268
|
+
continue;
|
|
269
|
+
}
|
|
270
|
+
let content = original;
|
|
271
|
+
let modified = false;
|
|
272
|
+
for (const [marker, replacements] of Object.entries(map)) {
|
|
273
|
+
if (!content.includes(marker)) {
|
|
274
|
+
continue;
|
|
275
|
+
}
|
|
276
|
+
const replacement = replacements[projectStack.framework];
|
|
277
|
+
if (replacement) {
|
|
278
|
+
content = content.replaceAll(marker, replacement);
|
|
279
|
+
modified = true;
|
|
280
|
+
}
|
|
281
|
+
else {
|
|
282
|
+
// No exact match — prepend [ADAPT] marker if not already present
|
|
283
|
+
const adaptMarker = `[ADAPT] ${marker}`;
|
|
284
|
+
if (!content.includes(adaptMarker)) {
|
|
285
|
+
content = content.replaceAll(marker, adaptMarker);
|
|
286
|
+
modified = true;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
if (modified) {
|
|
291
|
+
await writeFile(filePath, content, 'utf-8');
|
|
292
|
+
adaptations.push({
|
|
293
|
+
file: fileName,
|
|
294
|
+
original,
|
|
295
|
+
adapted: content,
|
|
296
|
+
marker: Object.keys(map).find((m) => original.includes(m)),
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
return adaptations;
|
|
301
|
+
}
|
|
302
|
+
/* v8 ignore stop */
|
|
303
|
+
//# sourceMappingURL=adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/engine/spec-registry/adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { RegistryClient } from '../../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Create a registry API client instance.
|
|
4
|
+
* @param token - Optional authentication token for write operations.
|
|
5
|
+
* @returns Object with methods for interacting with the registry API.
|
|
6
|
+
*/
|
|
7
|
+
export declare function createRegistryClient(token?: string): RegistryClient;
|
|
8
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/engine/spec-registry/client.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAMV,cAAc,EACf,MAAM,sBAAsB,CAAC;AAmJ9B;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,cAAc,CA6EnE"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
// engine/spec-registry/client.ts — AC-2: Registry API Client
|
|
2
|
+
// HTTP client for the Planu spec registry. Uses node:https/http only (no external deps).
|
|
3
|
+
import * as https from 'node:https';
|
|
4
|
+
import * as http from 'node:http';
|
|
5
|
+
const DEFAULT_BASE_URL = 'https://registry.planu.dev/api/v1';
|
|
6
|
+
const MAX_RETRIES = 3;
|
|
7
|
+
const BASE_DELAY_MS = 1000;
|
|
8
|
+
/** Build a URL with query parameters from filters. */
|
|
9
|
+
function buildSearchUrl(baseUrl, filters) {
|
|
10
|
+
const url = new URL(`${baseUrl}/specs`);
|
|
11
|
+
if (filters.query) {
|
|
12
|
+
url.searchParams.set('q', filters.query);
|
|
13
|
+
}
|
|
14
|
+
if (filters.stack) {
|
|
15
|
+
url.searchParams.set('stack', filters.stack);
|
|
16
|
+
}
|
|
17
|
+
if (filters.category) {
|
|
18
|
+
url.searchParams.set('category', filters.category);
|
|
19
|
+
}
|
|
20
|
+
if (filters.sort) {
|
|
21
|
+
url.searchParams.set('sort', filters.sort);
|
|
22
|
+
}
|
|
23
|
+
if (filters.page !== undefined) {
|
|
24
|
+
url.searchParams.set('page', String(filters.page));
|
|
25
|
+
}
|
|
26
|
+
if (filters.limit !== undefined) {
|
|
27
|
+
url.searchParams.set('limit', String(filters.limit));
|
|
28
|
+
}
|
|
29
|
+
if (filters.difficulty?.min !== undefined) {
|
|
30
|
+
url.searchParams.set('difficulty_min', String(filters.difficulty.min));
|
|
31
|
+
}
|
|
32
|
+
if (filters.difficulty?.max !== undefined) {
|
|
33
|
+
url.searchParams.set('difficulty_max', String(filters.difficulty.max));
|
|
34
|
+
}
|
|
35
|
+
return url.toString();
|
|
36
|
+
}
|
|
37
|
+
/** Choose http or https module based on URL protocol. */
|
|
38
|
+
function getTransport(url) {
|
|
39
|
+
return url.startsWith('https') ? https : http;
|
|
40
|
+
}
|
|
41
|
+
/** Make an HTTP request with retry and exponential backoff. */
|
|
42
|
+
async function request(url, options, body) {
|
|
43
|
+
let lastError;
|
|
44
|
+
for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {
|
|
45
|
+
if (attempt > 0) {
|
|
46
|
+
const delay = BASE_DELAY_MS * Math.pow(2, attempt - 1);
|
|
47
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
const result = await executeRequest(url, options, body);
|
|
51
|
+
// Don't retry client errors (4xx) except 429
|
|
52
|
+
if (result.status >= 400 && result.status < 500 && result.status !== 429) {
|
|
53
|
+
const message = tryParseErrorMessage(result.data);
|
|
54
|
+
throw new Error(`Registry API error ${result.status}: ${message}`);
|
|
55
|
+
}
|
|
56
|
+
// Retry server errors (5xx) and 429
|
|
57
|
+
if (result.status >= 500 || result.status === 429) {
|
|
58
|
+
lastError = new Error(`Registry API error ${result.status}: server error`);
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
return result;
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
if (error instanceof Error && error.message.startsWith('Registry API error 4')) {
|
|
65
|
+
throw error; // Don't retry 4xx
|
|
66
|
+
}
|
|
67
|
+
lastError = error instanceof Error ? error : new Error(String(error));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
throw new Error(`Registry API request failed after ${MAX_RETRIES} attempts: ${lastError?.message ?? 'unknown error'}`);
|
|
71
|
+
}
|
|
72
|
+
/** Execute a single HTTP request. */
|
|
73
|
+
function executeRequest(url, options, body) {
|
|
74
|
+
return new Promise((resolve, reject) => {
|
|
75
|
+
const transport = getTransport(url);
|
|
76
|
+
const req = transport.request(url, options, (res) => {
|
|
77
|
+
const chunks = [];
|
|
78
|
+
res.on('data', (chunk) => chunks.push(chunk));
|
|
79
|
+
res.on('end', () => {
|
|
80
|
+
resolve({
|
|
81
|
+
status: res.statusCode ?? 0,
|
|
82
|
+
data: Buffer.concat(chunks),
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
/* v8 ignore start -- network error/timeout handlers */
|
|
87
|
+
req.on('error', (err) => {
|
|
88
|
+
reject(new Error(`Network error: ${err.message}`));
|
|
89
|
+
});
|
|
90
|
+
req.setTimeout(30_000, () => {
|
|
91
|
+
req.destroy();
|
|
92
|
+
reject(new Error('Request timed out after 30s'));
|
|
93
|
+
});
|
|
94
|
+
/* v8 ignore stop */
|
|
95
|
+
if (body) {
|
|
96
|
+
req.write(body);
|
|
97
|
+
}
|
|
98
|
+
req.end();
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
/** Try to parse a JSON error message from response body. */
|
|
102
|
+
/* v8 ignore start -- error parsing defensive branches */
|
|
103
|
+
function tryParseErrorMessage(data) {
|
|
104
|
+
try {
|
|
105
|
+
const parsed = JSON.parse(data.toString('utf-8'));
|
|
106
|
+
return parsed.message ?? parsed.error ?? data.toString('utf-8').slice(0, 200);
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
return data.toString('utf-8').slice(0, 200);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/* v8 ignore stop */
|
|
113
|
+
/** Build common request headers. */
|
|
114
|
+
function buildHeaders(token, contentType) {
|
|
115
|
+
const headers = {
|
|
116
|
+
'User-Agent': 'planu-cli',
|
|
117
|
+
Accept: 'application/json',
|
|
118
|
+
};
|
|
119
|
+
if (token) {
|
|
120
|
+
headers.Authorization = `Bearer ${token}`;
|
|
121
|
+
}
|
|
122
|
+
if (contentType) {
|
|
123
|
+
headers['Content-Type'] = contentType;
|
|
124
|
+
}
|
|
125
|
+
return headers;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Create a registry API client instance.
|
|
129
|
+
* @param token - Optional authentication token for write operations.
|
|
130
|
+
* @returns Object with methods for interacting with the registry API.
|
|
131
|
+
*/
|
|
132
|
+
export function createRegistryClient(token) {
|
|
133
|
+
const baseUrl = process.env.PLANU_REGISTRY_URL ?? DEFAULT_BASE_URL;
|
|
134
|
+
const options = { token, baseUrl };
|
|
135
|
+
return {
|
|
136
|
+
/** Search specs in the registry with optional filters. */
|
|
137
|
+
async searchSpecs(filters) {
|
|
138
|
+
const url = buildSearchUrl(options.baseUrl ?? DEFAULT_BASE_URL, filters);
|
|
139
|
+
const result = await request(url, {
|
|
140
|
+
method: 'GET',
|
|
141
|
+
headers: buildHeaders(options.token),
|
|
142
|
+
});
|
|
143
|
+
return JSON.parse(result.data.toString('utf-8'));
|
|
144
|
+
},
|
|
145
|
+
/** Get metadata for a specific spec by org and name. */
|
|
146
|
+
async getSpec(org, name, version) {
|
|
147
|
+
const versionSuffix = version ? `/${version}` : '';
|
|
148
|
+
const url = `${options.baseUrl}/specs/${encodeURIComponent(org)}/${encodeURIComponent(name)}${versionSuffix}`;
|
|
149
|
+
const result = await request(url, {
|
|
150
|
+
method: 'GET',
|
|
151
|
+
headers: buildHeaders(options.token),
|
|
152
|
+
});
|
|
153
|
+
return JSON.parse(result.data.toString('utf-8'));
|
|
154
|
+
},
|
|
155
|
+
/** Download a spec tarball from the registry. */
|
|
156
|
+
async downloadSpec(org, name, version) {
|
|
157
|
+
const url = `${options.baseUrl}/specs/${encodeURIComponent(org)}/${encodeURIComponent(name)}/${version}/download`;
|
|
158
|
+
const result = await request(url, {
|
|
159
|
+
method: 'GET',
|
|
160
|
+
headers: buildHeaders(options.token),
|
|
161
|
+
});
|
|
162
|
+
return result.data;
|
|
163
|
+
},
|
|
164
|
+
/** Publish a spec tarball to the registry. Requires authentication. */
|
|
165
|
+
async publishSpec(tarball, meta) {
|
|
166
|
+
if (!options.token) {
|
|
167
|
+
throw new Error('Authentication required to publish specs. Run planu login first.');
|
|
168
|
+
}
|
|
169
|
+
const payload = JSON.stringify({ tarball: tarball.toString('base64'), meta });
|
|
170
|
+
const url = `${options.baseUrl}/specs`;
|
|
171
|
+
const result = await request(url, {
|
|
172
|
+
method: 'POST',
|
|
173
|
+
headers: buildHeaders(options.token, 'application/json'),
|
|
174
|
+
}, payload);
|
|
175
|
+
return JSON.parse(result.data.toString('utf-8'));
|
|
176
|
+
},
|
|
177
|
+
/** Rate a spec in the registry. Requires authentication. */
|
|
178
|
+
async rateSpec(org, name, rating) {
|
|
179
|
+
if (!options.token) {
|
|
180
|
+
throw new Error('Authentication required to rate specs. Run planu login first.');
|
|
181
|
+
}
|
|
182
|
+
if (rating < 1 || rating > 5 || !Number.isInteger(rating)) {
|
|
183
|
+
throw new Error('Rating must be an integer between 1 and 5');
|
|
184
|
+
}
|
|
185
|
+
const url = `${options.baseUrl}/specs/${encodeURIComponent(org)}/${encodeURIComponent(name)}/rate`;
|
|
186
|
+
const payload = JSON.stringify({ rating });
|
|
187
|
+
await request(url, {
|
|
188
|
+
method: 'POST',
|
|
189
|
+
headers: buildHeaders(options.token, 'application/json'),
|
|
190
|
+
}, payload);
|
|
191
|
+
},
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/engine/spec-registry/client.ts"],"names":[],"mappings":"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"}
|