@planu/cli 0.43.0 → 0.44.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 +16 -1
- 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/docs-site-generator/spec-renderer.d.ts.map +1 -1
- package/dist/engine/docs-site-generator/spec-renderer.js +2 -1
- package/dist/engine/docs-site-generator/spec-renderer.js.map +1 -1
- package/dist/engine/execution-plan/agent-execution-plan.d.ts.map +1 -1
- package/dist/engine/execution-plan/agent-execution-plan.js +2 -0
- package/dist/engine/execution-plan/agent-execution-plan.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/llm-providers/cost-tracker.d.ts.map +1 -1
- package/dist/engine/llm-providers/cost-tracker.js +1 -0
- package/dist/engine/llm-providers/cost-tracker.js.map +1 -1
- package/dist/engine/llm-providers/load-balancer.d.ts.map +1 -1
- package/dist/engine/llm-providers/load-balancer.js +3 -0
- package/dist/engine/llm-providers/load-balancer.js.map +1 -1
- package/dist/engine/plugins/extensions/tool-extension.d.ts.map +1 -1
- package/dist/engine/plugins/extensions/tool-extension.js +1 -0
- package/dist/engine/plugins/extensions/tool-extension.js.map +1 -1
- 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/plugins/loader.d.ts.map +1 -1
- package/dist/engine/plugins/loader.js +3 -0
- package/dist/engine/plugins/loader.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/safety/health-monitor.d.ts.map +1 -1
- package/dist/engine/safety/health-monitor.js +3 -0
- package/dist/engine/safety/health-monitor.js.map +1 -1
- package/dist/engine/safety/transaction.d.ts.map +1 -1
- package/dist/engine/safety/transaction.js +3 -0
- package/dist/engine/safety/transaction.js.map +1 -1
- package/dist/engine/spec-templates/custom-loader.d.ts.map +1 -1
- package/dist/engine/spec-templates/custom-loader.js +1 -0
- package/dist/engine/spec-templates/custom-loader.js.map +1 -1
- package/dist/index.js +29 -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/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/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/suggest-tooling/catalog-loader.d.ts.map +1 -1
- package/dist/tools/suggest-tooling/catalog-loader.js +1 -0
- package/dist/tools/suggest-tooling/catalog-loader.js.map +1 -1
- 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 +3 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +3 -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/package.json +1 -1
- package/src/config/hook-defaults.json +19 -0
- package/src/config/license-plans.json +16 -1
- package/src/config/tool-groups.json +12 -1
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
export type WatcherEventType = 'create' | 'modify' | 'delete';
|
|
2
|
+
export interface WatcherEvent {
|
|
3
|
+
/** Type of file system event */
|
|
4
|
+
type: WatcherEventType;
|
|
5
|
+
/** Normalized path relative to project root */
|
|
6
|
+
path: string;
|
|
7
|
+
/** Unix timestamp in milliseconds */
|
|
8
|
+
timestamp: number;
|
|
9
|
+
}
|
|
10
|
+
export type FileHookType = 'on-save' | 'on-create' | 'on-delete' | 'on-test-pass' | 'on-commit';
|
|
11
|
+
export interface FileHookTypeConfig {
|
|
12
|
+
/** Whether this hook type is enabled */
|
|
13
|
+
enabled: boolean;
|
|
14
|
+
/** Glob patterns to include */
|
|
15
|
+
include?: string[];
|
|
16
|
+
/** Glob patterns to exclude */
|
|
17
|
+
exclude?: string[];
|
|
18
|
+
}
|
|
19
|
+
export interface FileHookConfig {
|
|
20
|
+
/** Master switch for all file hooks */
|
|
21
|
+
enabled: boolean;
|
|
22
|
+
/** Debounce window in milliseconds */
|
|
23
|
+
debounceMs: number;
|
|
24
|
+
/** Rate limit per file in milliseconds */
|
|
25
|
+
rateLimitPerFileMs: number;
|
|
26
|
+
/** Per-hook-type configuration */
|
|
27
|
+
hooks: Record<string, FileHookTypeConfig>;
|
|
28
|
+
}
|
|
29
|
+
export interface DebouncerOptions {
|
|
30
|
+
/** Debounce window in milliseconds (default: 300) */
|
|
31
|
+
debounceMs?: number;
|
|
32
|
+
/** Rate limit per file in milliseconds (default: 5000) */
|
|
33
|
+
rateLimitPerFileMs?: number;
|
|
34
|
+
/** Rate limit per spec for auto-reconcile in milliseconds (default: 300000) */
|
|
35
|
+
rateLimitPerSpecMs?: number;
|
|
36
|
+
}
|
|
37
|
+
export interface DebouncerConfig {
|
|
38
|
+
/** Debounce window in ms (default: 300) */
|
|
39
|
+
debounceMs: number;
|
|
40
|
+
/** Rate limit per file in ms (default: 5000) */
|
|
41
|
+
rateLimitPerFileMs: number;
|
|
42
|
+
/** Rate limit per spec in ms for auto-reconcile (default: 300000 = 5 min) */
|
|
43
|
+
rateLimitPerSpecMs: number;
|
|
44
|
+
}
|
|
45
|
+
export interface TokenBucket {
|
|
46
|
+
tokens: number;
|
|
47
|
+
lastRefill: number;
|
|
48
|
+
capacity: number;
|
|
49
|
+
refillIntervalMs: number;
|
|
50
|
+
}
|
|
51
|
+
export interface FileWatcherOptions {
|
|
52
|
+
/** Root directory to watch */
|
|
53
|
+
rootDir: string;
|
|
54
|
+
/** Glob patterns to include (default: all) */
|
|
55
|
+
include?: string[];
|
|
56
|
+
/** Glob patterns to exclude (always includes data/ and node_modules/) */
|
|
57
|
+
exclude?: string[];
|
|
58
|
+
}
|
|
59
|
+
export interface OnSaveContext {
|
|
60
|
+
/** Absolute path to project root */
|
|
61
|
+
projectRoot: string;
|
|
62
|
+
/** Set of known spec IDs (e.g. from spec store) */
|
|
63
|
+
knownSpecs: Set<string>;
|
|
64
|
+
}
|
|
65
|
+
export interface SpecFilePlan {
|
|
66
|
+
/** Spec ID (e.g. "SPEC-042") */
|
|
67
|
+
specId: string;
|
|
68
|
+
/** Glob patterns of files planned in this spec */
|
|
69
|
+
plannedFiles: string[];
|
|
70
|
+
}
|
|
71
|
+
export interface OnCreateContext {
|
|
72
|
+
/** Active specs with their file plans */
|
|
73
|
+
specFilePlans: SpecFilePlan[];
|
|
74
|
+
}
|
|
75
|
+
export interface SpecAnnotationIndex {
|
|
76
|
+
/** Spec ID */
|
|
77
|
+
specId: string;
|
|
78
|
+
/** Files that reference this spec via @spec annotations */
|
|
79
|
+
annotatedFiles: string[];
|
|
80
|
+
}
|
|
81
|
+
export interface OnDeleteContext {
|
|
82
|
+
/** Index of specs and their annotated files */
|
|
83
|
+
specAnnotations: SpecAnnotationIndex[];
|
|
84
|
+
}
|
|
85
|
+
export interface OnSaveHookResult {
|
|
86
|
+
hook: 'on-save';
|
|
87
|
+
specId: string | null;
|
|
88
|
+
driftDelta: number;
|
|
89
|
+
hashChanged: boolean;
|
|
90
|
+
annotationsValid: boolean;
|
|
91
|
+
}
|
|
92
|
+
export interface OnCreateHookResult {
|
|
93
|
+
hook: 'on-create';
|
|
94
|
+
path: string;
|
|
95
|
+
matchedSpecs: string[];
|
|
96
|
+
suggestedAnnotations: string[];
|
|
97
|
+
}
|
|
98
|
+
export interface OnDeleteHookResult {
|
|
99
|
+
hook: 'on-delete';
|
|
100
|
+
path: string;
|
|
101
|
+
affectedSpecs: string[];
|
|
102
|
+
brokenAnnotations: string[];
|
|
103
|
+
}
|
|
104
|
+
export type FileHookResult = OnSaveHookResult | OnCreateHookResult | OnDeleteHookResult;
|
|
105
|
+
export type ConfigChangeCallback = (config: FileHookConfig) => void;
|
|
106
|
+
export type DebouncedCallback = (event: WatcherEvent) => void;
|
|
107
|
+
/** Result from on-test-pass handler */
|
|
108
|
+
export interface OnTestPassHookResult {
|
|
109
|
+
hook: 'on-test-pass';
|
|
110
|
+
coverageDelta: Record<string, number>;
|
|
111
|
+
specsUpdated: string[];
|
|
112
|
+
}
|
|
113
|
+
/** Context for on-test-pass handler */
|
|
114
|
+
export interface OnTestPassContext {
|
|
115
|
+
/** Path to coverage-summary.json */
|
|
116
|
+
coveragePath: string;
|
|
117
|
+
/** Mapping of file patterns to spec IDs via annotations */
|
|
118
|
+
specAnnotationIndex: SpecAnnotationIndex[];
|
|
119
|
+
/** Previous coverage data for delta computation */
|
|
120
|
+
previousCoverage?: Record<string, number>;
|
|
121
|
+
}
|
|
122
|
+
/** Result from on-commit handler */
|
|
123
|
+
export interface OnCommitHookResult {
|
|
124
|
+
hook: 'on-commit';
|
|
125
|
+
commitHash: string;
|
|
126
|
+
reconciledSpecs: string[];
|
|
127
|
+
integrityResult: {
|
|
128
|
+
valid: boolean;
|
|
129
|
+
errors: string[];
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/** Context for on-commit handler */
|
|
133
|
+
export interface OnCommitContext {
|
|
134
|
+
/** Absolute path to project root */
|
|
135
|
+
projectRoot: string;
|
|
136
|
+
/** Set of known spec IDs */
|
|
137
|
+
knownSpecs: Set<string>;
|
|
138
|
+
}
|
|
139
|
+
/** Plugin handler for custom hooks */
|
|
140
|
+
export interface HookPluginHandler {
|
|
141
|
+
/** Unique name for the handler */
|
|
142
|
+
name: string;
|
|
143
|
+
/** Hook type this handler processes */
|
|
144
|
+
hookType: FileHookType;
|
|
145
|
+
/** Priority (lower = higher priority, default 100) */
|
|
146
|
+
priority?: number;
|
|
147
|
+
/** The handler function */
|
|
148
|
+
execute: (event: WatcherEvent) => Promise<FileHookResult | OnTestPassHookResult | OnCommitHookResult>;
|
|
149
|
+
}
|
|
150
|
+
/** Telemetry data per hook type */
|
|
151
|
+
export interface HookTelemetry {
|
|
152
|
+
/** Total executions */
|
|
153
|
+
executionCount: number;
|
|
154
|
+
/** Average latency in ms */
|
|
155
|
+
avgLatencyMs: number;
|
|
156
|
+
/** Number of errors */
|
|
157
|
+
errorCount: number;
|
|
158
|
+
/** Error rate (0-1) */
|
|
159
|
+
errorRate: number;
|
|
160
|
+
/** Total latency accumulated (internal) */
|
|
161
|
+
totalLatencyMs: number;
|
|
162
|
+
}
|
|
163
|
+
/** Status returned by HookEngine.status() */
|
|
164
|
+
export interface HookEngineStatus {
|
|
165
|
+
/** Whether the engine is running */
|
|
166
|
+
running: boolean;
|
|
167
|
+
/** Active hooks by type */
|
|
168
|
+
activeHooks: {
|
|
169
|
+
name: string;
|
|
170
|
+
hookType: FileHookType;
|
|
171
|
+
priority: number;
|
|
172
|
+
}[];
|
|
173
|
+
/** Number of pending events */
|
|
174
|
+
pendingEvents: number;
|
|
175
|
+
/** Telemetry per hook name */
|
|
176
|
+
telemetry: Record<string, HookTelemetry>;
|
|
177
|
+
}
|
|
178
|
+
/** Typed event for the EventBus */
|
|
179
|
+
export interface EventBusEvent {
|
|
180
|
+
/** Unique event ID */
|
|
181
|
+
id: string;
|
|
182
|
+
/** Event type discriminator */
|
|
183
|
+
type: 'file:change' | 'hook:start' | 'hook:complete' | 'hook:error';
|
|
184
|
+
/** Timestamp in ms */
|
|
185
|
+
timestamp: number;
|
|
186
|
+
/** Event-specific data */
|
|
187
|
+
data: Record<string, unknown>;
|
|
188
|
+
}
|
|
189
|
+
/** Extended hook result union including SPEC-130 types */
|
|
190
|
+
export interface CoverageMetric {
|
|
191
|
+
total: number;
|
|
192
|
+
covered: number;
|
|
193
|
+
skipped: number;
|
|
194
|
+
pct: number;
|
|
195
|
+
}
|
|
196
|
+
export interface FileCoverage {
|
|
197
|
+
lines: CoverageMetric;
|
|
198
|
+
statements: CoverageMetric;
|
|
199
|
+
functions: CoverageMetric;
|
|
200
|
+
branches: CoverageMetric;
|
|
201
|
+
}
|
|
202
|
+
export type CoverageSummary = Record<string, FileCoverage>;
|
|
203
|
+
export type ExtendedHookResult = FileHookResult | OnTestPassHookResult | OnCommitHookResult;
|
|
204
|
+
export interface StartHooksInput {
|
|
205
|
+
/** Absolute path to the project root directory to watch */
|
|
206
|
+
projectPath: string;
|
|
207
|
+
/** Hook types to enable */
|
|
208
|
+
hooks?: string[];
|
|
209
|
+
}
|
|
210
|
+
export interface StopHooksInput {
|
|
211
|
+
/** Optional reason for stopping the hook engine */
|
|
212
|
+
reason?: string;
|
|
213
|
+
}
|
|
214
|
+
export interface ConfigureHooksInput {
|
|
215
|
+
/** Absolute path to the project root directory */
|
|
216
|
+
projectPath: string;
|
|
217
|
+
/** Master switch for all hooks */
|
|
218
|
+
enabled?: boolean;
|
|
219
|
+
/** Debounce window in milliseconds */
|
|
220
|
+
debounceMs?: number;
|
|
221
|
+
/** Rate limit per file in milliseconds */
|
|
222
|
+
rateLimitPerFileMs?: number;
|
|
223
|
+
/** Per-hook-type configuration overrides */
|
|
224
|
+
hooks?: Record<string, {
|
|
225
|
+
enabled?: boolean;
|
|
226
|
+
include?: string[];
|
|
227
|
+
exclude?: string[];
|
|
228
|
+
}>;
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=file-hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-hooks.d.ts","sourceRoot":"","sources":["../../src/types/file-hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-hooks.js","sourceRoot":"","sources":["../../src/types/file-hooks.ts"],"names":[],"mappings":"AAAA,qEAAqE"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -75,4 +75,7 @@ export * from './export.js';
|
|
|
75
75
|
export * from './reverse-engineer.js';
|
|
76
76
|
export * from './frontmatter.js';
|
|
77
77
|
export * from './source-resolution.js';
|
|
78
|
+
export * from './living-spec.js';
|
|
79
|
+
export * from './cli.js';
|
|
80
|
+
export * from './file-hooks.js';
|
|
78
81
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC"}
|
package/dist/types/index.js
CHANGED
|
@@ -76,4 +76,7 @@ export * from './export.js';
|
|
|
76
76
|
export * from './reverse-engineer.js';
|
|
77
77
|
export * from './frontmatter.js';
|
|
78
78
|
export * from './source-resolution.js';
|
|
79
|
+
export * from './living-spec.js';
|
|
80
|
+
export * from './cli.js';
|
|
81
|
+
export * from './file-hooks.js';
|
|
79
82
|
//# sourceMappingURL=index.js.map
|
package/dist/types/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
/** A single @spec annotation extracted from source code. */
|
|
2
|
+
export interface SpecAnnotation {
|
|
3
|
+
/** Spec ID referenced (e.g., "SPEC-120"). */
|
|
4
|
+
specId: string;
|
|
5
|
+
/** Acceptance criteria numbers (e.g., [1, 3, 5] from "AC-1,AC-3,AC-5"). */
|
|
6
|
+
criteria: number[];
|
|
7
|
+
/** Optional description after the dash. */
|
|
8
|
+
description: string;
|
|
9
|
+
/** File where the annotation was found. */
|
|
10
|
+
file: string;
|
|
11
|
+
/** Line number (1-based). */
|
|
12
|
+
line: number;
|
|
13
|
+
/** Raw annotation text as written in the source. */
|
|
14
|
+
raw: string;
|
|
15
|
+
}
|
|
16
|
+
/** Result of parsing all @spec annotations from a set of files. */
|
|
17
|
+
export interface AnnotationParseResult {
|
|
18
|
+
annotations: SpecAnnotation[];
|
|
19
|
+
fileCount: number;
|
|
20
|
+
annotatedFileCount: number;
|
|
21
|
+
}
|
|
22
|
+
/** Result of validating annotations against stored specs. */
|
|
23
|
+
export interface AnnotationValidationResult {
|
|
24
|
+
valid: AnnotationValidationEntry[];
|
|
25
|
+
invalid: AnnotationValidationEntry[];
|
|
26
|
+
totalAnnotations: number;
|
|
27
|
+
validCount: number;
|
|
28
|
+
invalidCount: number;
|
|
29
|
+
}
|
|
30
|
+
/** A single annotation validation entry. */
|
|
31
|
+
export interface AnnotationValidationEntry {
|
|
32
|
+
annotation: SpecAnnotation;
|
|
33
|
+
reason: string;
|
|
34
|
+
}
|
|
35
|
+
/** Suggestion for annotating a file that lacks annotations. */
|
|
36
|
+
export interface AnnotationSuggestion {
|
|
37
|
+
file: string;
|
|
38
|
+
suggestedAnnotation: string;
|
|
39
|
+
reason: string;
|
|
40
|
+
confidence: 'high' | 'medium' | 'low';
|
|
41
|
+
}
|
|
42
|
+
/** SHA-256 hash snapshot of a file. */
|
|
43
|
+
export interface FileHashEntry {
|
|
44
|
+
file: string;
|
|
45
|
+
hash: string;
|
|
46
|
+
/** Size in bytes. */
|
|
47
|
+
size: number;
|
|
48
|
+
/** ISO timestamp of last snapshot. */
|
|
49
|
+
snapshotAt: string;
|
|
50
|
+
}
|
|
51
|
+
/** Exported function signature tracked for drift detection. */
|
|
52
|
+
export interface FunctionSignature {
|
|
53
|
+
name: string;
|
|
54
|
+
params: string;
|
|
55
|
+
returnType: string;
|
|
56
|
+
file: string;
|
|
57
|
+
line: number;
|
|
58
|
+
}
|
|
59
|
+
/** A complete hash snapshot for a spec, including file hashes and function signatures. */
|
|
60
|
+
export interface SpecHashSnapshot {
|
|
61
|
+
specId: string;
|
|
62
|
+
createdAt: string;
|
|
63
|
+
files: FileHashEntry[];
|
|
64
|
+
signatures: FunctionSignature[];
|
|
65
|
+
}
|
|
66
|
+
/** Change classification for function signatures. */
|
|
67
|
+
export type SignatureChangeType = 'added' | 'modified' | 'removed';
|
|
68
|
+
/** A single signature change between two snapshots. */
|
|
69
|
+
export interface SignatureChange {
|
|
70
|
+
name: string;
|
|
71
|
+
file: string;
|
|
72
|
+
changeType: SignatureChangeType;
|
|
73
|
+
/** Previous signature string (empty for 'added'). */
|
|
74
|
+
before: string;
|
|
75
|
+
/** Current signature string (empty for 'removed'). */
|
|
76
|
+
after: string;
|
|
77
|
+
}
|
|
78
|
+
/** File hash diff between two snapshots. */
|
|
79
|
+
export interface FileHashDiff {
|
|
80
|
+
file: string;
|
|
81
|
+
/** Previous hash (empty for new files). */
|
|
82
|
+
previousHash: string;
|
|
83
|
+
/** Current hash (empty for deleted files). */
|
|
84
|
+
currentHash: string;
|
|
85
|
+
/** Criteria linked to this file via annotations. */
|
|
86
|
+
linkedCriteria: number[];
|
|
87
|
+
}
|
|
88
|
+
/** Report of hash and signature changes for a spec. */
|
|
89
|
+
export interface HashDiffReport {
|
|
90
|
+
specId: string;
|
|
91
|
+
changedFiles: FileHashDiff[];
|
|
92
|
+
signatureChanges: SignatureChange[];
|
|
93
|
+
unchangedFileCount: number;
|
|
94
|
+
comparedAt: string;
|
|
95
|
+
}
|
|
96
|
+
/** Extended criterion status that includes annotation-based statuses. */
|
|
97
|
+
export type AnnotatedCriterionStatus = 'met' | 'pending' | 'drift' | 'regression' | 'untracked';
|
|
98
|
+
/** Extended drift report fields for annotation-based mode. */
|
|
99
|
+
export interface AnnotationDriftInfo {
|
|
100
|
+
annotationCoverage: number;
|
|
101
|
+
annotatedCriteria: number;
|
|
102
|
+
totalCriteria: number;
|
|
103
|
+
regressions: string[];
|
|
104
|
+
untrackedCriteria: string[];
|
|
105
|
+
}
|
|
106
|
+
/** Entry in the auto-reconciliation log. */
|
|
107
|
+
export interface ReconcileLogEntry {
|
|
108
|
+
timestamp: string;
|
|
109
|
+
changeType: 'completion-update' | 'status-flip' | 'hash-update' | 'timestamp-update';
|
|
110
|
+
specId: string;
|
|
111
|
+
description: string;
|
|
112
|
+
previousValue: string;
|
|
113
|
+
newValue: string;
|
|
114
|
+
}
|
|
115
|
+
/** Classification of reconciliation changes. */
|
|
116
|
+
export type ReconcileChangeClass = 'safe' | 'unsafe';
|
|
117
|
+
/** Input for the validate_annotations tool. */
|
|
118
|
+
export interface ValidateAnnotationsInput {
|
|
119
|
+
projectId: string;
|
|
120
|
+
projectPath: string;
|
|
121
|
+
specId?: string;
|
|
122
|
+
}
|
|
123
|
+
/** Input for the generate_annotations tool. */
|
|
124
|
+
export interface GenerateAnnotationsInput {
|
|
125
|
+
projectId: string;
|
|
126
|
+
projectPath: string;
|
|
127
|
+
specId: string;
|
|
128
|
+
}
|
|
129
|
+
/** Input for the snapshot_spec_hashes tool. */
|
|
130
|
+
export interface SnapshotSpecHashesInput {
|
|
131
|
+
projectId: string;
|
|
132
|
+
specId: string;
|
|
133
|
+
}
|
|
134
|
+
/** Input for the auto_reconcile tool. */
|
|
135
|
+
export interface AutoReconcileInput {
|
|
136
|
+
projectId: string;
|
|
137
|
+
specId?: string;
|
|
138
|
+
changedFiles?: string[];
|
|
139
|
+
}
|
|
140
|
+
/** Result of auto-reconciliation. */
|
|
141
|
+
export interface AutoReconcileResult {
|
|
142
|
+
specId: string;
|
|
143
|
+
appliedChanges: ReconcileLogEntry[];
|
|
144
|
+
skippedUnsafe: string[];
|
|
145
|
+
rateLimited: boolean;
|
|
146
|
+
reconciledAt: string;
|
|
147
|
+
}
|
|
148
|
+
/** Options for creating a drift watcher. */
|
|
149
|
+
export interface DriftWatcherOptions {
|
|
150
|
+
/** TTL in seconds for cached drift entries. Default 60. */
|
|
151
|
+
ttlSeconds?: number;
|
|
152
|
+
/** Glob patterns to exclude from watching. */
|
|
153
|
+
excludePatterns?: string[];
|
|
154
|
+
/** Project ID to watch. */
|
|
155
|
+
projectId: string;
|
|
156
|
+
}
|
|
157
|
+
/** In-memory state of the drift watcher. */
|
|
158
|
+
export interface DriftWatcherState {
|
|
159
|
+
/** Whether the watcher is currently running. */
|
|
160
|
+
running: boolean;
|
|
161
|
+
/** ISO timestamp when the watcher was started. */
|
|
162
|
+
startedAt: string | null;
|
|
163
|
+
/** Number of cached entries. */
|
|
164
|
+
cacheSize: number;
|
|
165
|
+
/** Project ID being watched. */
|
|
166
|
+
projectId: string;
|
|
167
|
+
}
|
|
168
|
+
/** A single cached drift entry. */
|
|
169
|
+
export interface DriftCacheEntry {
|
|
170
|
+
/** Spec ID this entry is for. */
|
|
171
|
+
specId: string;
|
|
172
|
+
/** Cached drift report data. */
|
|
173
|
+
data: HashDiffReport;
|
|
174
|
+
/** ISO timestamp when the entry was cached. */
|
|
175
|
+
cachedAt: string;
|
|
176
|
+
/** ISO timestamp when the entry expires. */
|
|
177
|
+
expiresAt: string;
|
|
178
|
+
}
|
|
179
|
+
/** Drift watcher instance interface. */
|
|
180
|
+
export interface DriftWatcherInstance {
|
|
181
|
+
start: () => void;
|
|
182
|
+
stop: () => void;
|
|
183
|
+
status: () => DriftWatcherState;
|
|
184
|
+
invalidate: (specId?: string) => void;
|
|
185
|
+
getCachedDrift: (specId: string) => DriftCacheEntry | null;
|
|
186
|
+
setCachedDrift: (specId: string, data: HashDiffReport) => void;
|
|
187
|
+
}
|
|
188
|
+
/** Minimal spec shape needed for dashboard collection. */
|
|
189
|
+
export interface DashboardSpecInput {
|
|
190
|
+
id: string;
|
|
191
|
+
status: string;
|
|
192
|
+
completion: number;
|
|
193
|
+
}
|
|
194
|
+
/** A single spec entry for the living dashboard. */
|
|
195
|
+
export interface DashboardSpecEntry {
|
|
196
|
+
specId: string;
|
|
197
|
+
status: string;
|
|
198
|
+
completion: number;
|
|
199
|
+
driftDetected: boolean;
|
|
200
|
+
changedFileCount: number;
|
|
201
|
+
signatureChangeCount: number;
|
|
202
|
+
lastCheckedAt: string;
|
|
203
|
+
}
|
|
204
|
+
/** Summary statistics for the dashboard. */
|
|
205
|
+
export interface DashboardSummary {
|
|
206
|
+
totalSpecs: number;
|
|
207
|
+
specsWithDrift: number;
|
|
208
|
+
averageCompletion: number;
|
|
209
|
+
healthScore: number;
|
|
210
|
+
generatedAt: string;
|
|
211
|
+
}
|
|
212
|
+
/** A single trend data point. */
|
|
213
|
+
export interface DashboardTrendPoint {
|
|
214
|
+
timestamp: string;
|
|
215
|
+
specsWithDrift: number;
|
|
216
|
+
averageCompletion: number;
|
|
217
|
+
healthScore: number;
|
|
218
|
+
}
|
|
219
|
+
/** A row in the spec diff table. */
|
|
220
|
+
export interface SpecDiffRow {
|
|
221
|
+
specId: string;
|
|
222
|
+
file: string;
|
|
223
|
+
previousHash: string;
|
|
224
|
+
currentHash: string;
|
|
225
|
+
status: 'added' | 'modified' | 'removed';
|
|
226
|
+
}
|
|
227
|
+
/** Status of a criterion's test coverage. */
|
|
228
|
+
export type CriterionCoverageStatus = 'verified' | 'regression' | 'untested';
|
|
229
|
+
/** Coverage information for a group of annotations. */
|
|
230
|
+
export interface AnnotationCoverageGroup {
|
|
231
|
+
specId: string;
|
|
232
|
+
criterion: number;
|
|
233
|
+
status: CriterionCoverageStatus;
|
|
234
|
+
testCount: number;
|
|
235
|
+
passCount: number;
|
|
236
|
+
failCount: number;
|
|
237
|
+
files: string[];
|
|
238
|
+
}
|
|
239
|
+
/** Full test coverage report correlated with specs (living-spec). */
|
|
240
|
+
export interface LivingSpecCoverageReport {
|
|
241
|
+
projectId: string;
|
|
242
|
+
groups: AnnotationCoverageGroup[];
|
|
243
|
+
totalTests: number;
|
|
244
|
+
passedTests: number;
|
|
245
|
+
failedTests: number;
|
|
246
|
+
coveragePercentage: number;
|
|
247
|
+
generatedAt: string;
|
|
248
|
+
}
|
|
249
|
+
/** Minimal shape of a Vitest JSON test result. */
|
|
250
|
+
export interface VitestTestResult {
|
|
251
|
+
name: string;
|
|
252
|
+
status: 'passed' | 'failed' | 'skipped' | 'pending';
|
|
253
|
+
duration?: number;
|
|
254
|
+
}
|
|
255
|
+
/** Minimal shape of a Vitest JSON test file. */
|
|
256
|
+
export interface VitestFileResult {
|
|
257
|
+
filepath: string;
|
|
258
|
+
tests: VitestTestResult[];
|
|
259
|
+
}
|
|
260
|
+
/** Minimal shape of the full Vitest JSON report. */
|
|
261
|
+
export interface VitestJsonReport {
|
|
262
|
+
testResults: VitestFileResult[];
|
|
263
|
+
}
|
|
264
|
+
/** A single test case from JUnit XML. */
|
|
265
|
+
export interface JUnitTestCase {
|
|
266
|
+
name: string;
|
|
267
|
+
classname: string;
|
|
268
|
+
file: string;
|
|
269
|
+
passed: boolean;
|
|
270
|
+
}
|
|
271
|
+
/** A normalized test result for grouping. */
|
|
272
|
+
export interface NormalizedTestResult {
|
|
273
|
+
name: string;
|
|
274
|
+
file: string;
|
|
275
|
+
passed: boolean;
|
|
276
|
+
}
|
|
277
|
+
/** Direction of synchronization. */
|
|
278
|
+
export type SyncDirection = 'spec-to-code' | 'code-to-spec';
|
|
279
|
+
/** Criterion info for TODO generation. */
|
|
280
|
+
export interface CriterionInfo {
|
|
281
|
+
specId: string;
|
|
282
|
+
criterion: number;
|
|
283
|
+
description: string;
|
|
284
|
+
status: string;
|
|
285
|
+
}
|
|
286
|
+
/** A TODO comment to be generated in code. */
|
|
287
|
+
export interface TodoComment {
|
|
288
|
+
file: string;
|
|
289
|
+
line: number;
|
|
290
|
+
text: string;
|
|
291
|
+
specId: string;
|
|
292
|
+
criterion: number;
|
|
293
|
+
}
|
|
294
|
+
/** A progress update to apply to a spec. */
|
|
295
|
+
export interface ProgressUpdate {
|
|
296
|
+
specId: string;
|
|
297
|
+
criterion: number;
|
|
298
|
+
previousStatus: string;
|
|
299
|
+
newStatus: string;
|
|
300
|
+
reason: string;
|
|
301
|
+
}
|
|
302
|
+
/** A conflict detected during sync. */
|
|
303
|
+
export interface SyncConflict {
|
|
304
|
+
id: string;
|
|
305
|
+
specId: string;
|
|
306
|
+
criterion: number;
|
|
307
|
+
direction: SyncDirection;
|
|
308
|
+
description: string;
|
|
309
|
+
codeState: string;
|
|
310
|
+
specState: string;
|
|
311
|
+
detectedAt: string;
|
|
312
|
+
resolved: boolean;
|
|
313
|
+
resolution?: string;
|
|
314
|
+
}
|
|
315
|
+
/** An entry in the sync log. */
|
|
316
|
+
export interface SyncLogEntry {
|
|
317
|
+
timestamp: string;
|
|
318
|
+
direction: SyncDirection;
|
|
319
|
+
specId: string;
|
|
320
|
+
action: string;
|
|
321
|
+
details: string;
|
|
322
|
+
}
|
|
323
|
+
/** Result of a sync operation. */
|
|
324
|
+
export interface SyncResult {
|
|
325
|
+
direction: SyncDirection;
|
|
326
|
+
specId: string;
|
|
327
|
+
todosGenerated: TodoComment[];
|
|
328
|
+
progressUpdates: ProgressUpdate[];
|
|
329
|
+
conflicts: SyncConflict[];
|
|
330
|
+
logEntries: SyncLogEntry[];
|
|
331
|
+
syncedAt: string;
|
|
332
|
+
}
|
|
333
|
+
/** Input for the living_spec_watch tool. */
|
|
334
|
+
export interface LivingSpecWatchInput {
|
|
335
|
+
projectId: string;
|
|
336
|
+
action: 'start' | 'stop' | 'status';
|
|
337
|
+
ttlSeconds?: number;
|
|
338
|
+
excludePatterns?: string[];
|
|
339
|
+
}
|
|
340
|
+
/** Input for the living_spec_status tool. */
|
|
341
|
+
export interface LivingSpecStatusInput {
|
|
342
|
+
projectId: string;
|
|
343
|
+
specId?: string;
|
|
344
|
+
}
|
|
345
|
+
/** Input for the spec_diff tool. */
|
|
346
|
+
export interface SpecDiffInput {
|
|
347
|
+
projectId: string;
|
|
348
|
+
specId?: string;
|
|
349
|
+
}
|
|
350
|
+
/** Input for the living_spec_coverage tool. */
|
|
351
|
+
export interface LivingSpecCoverageInput {
|
|
352
|
+
projectId: string;
|
|
353
|
+
coverageJsonPath?: string;
|
|
354
|
+
junitXmlPath?: string;
|
|
355
|
+
}
|
|
356
|
+
/** Input for the sync_spec_to_code tool. */
|
|
357
|
+
export interface SyncSpecToCodeInput {
|
|
358
|
+
projectId: string;
|
|
359
|
+
specId: string;
|
|
360
|
+
projectPath: string;
|
|
361
|
+
}
|
|
362
|
+
/** Input for the sync_code_to_spec tool. */
|
|
363
|
+
export interface SyncCodeToSpecInput {
|
|
364
|
+
projectId: string;
|
|
365
|
+
specId: string;
|
|
366
|
+
projectPath: string;
|
|
367
|
+
}
|
|
368
|
+
/** Input for the resolve_sync_conflict tool. */
|
|
369
|
+
export interface ResolveSyncConflictInput {
|
|
370
|
+
projectId: string;
|
|
371
|
+
conflictId: string;
|
|
372
|
+
resolution: 'accept-code' | 'accept-spec' | 'manual';
|
|
373
|
+
manualResolution?: string;
|
|
374
|
+
}
|
|
375
|
+
/** Dashboard data persisted to disk. */
|
|
376
|
+
export interface LivingDashboardData {
|
|
377
|
+
entries: DashboardSpecEntry[];
|
|
378
|
+
summary: DashboardSummary;
|
|
379
|
+
trends: DashboardTrendPoint[];
|
|
380
|
+
updatedAt: string;
|
|
381
|
+
}
|
|
382
|
+
//# sourceMappingURL=living-spec.d.ts.map
|