@manehorizons/cadence-core 1.1.1
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/LICENSE +21 -0
- package/README.md +5 -0
- package/bin/cadence.cjs +4 -0
- package/dist/build/record.d.ts +16 -0
- package/dist/build/record.d.ts.map +1 -0
- package/dist/build/record.js +33 -0
- package/dist/build/record.js.map +1 -0
- package/dist/checks/boundary.d.ts +35 -0
- package/dist/checks/boundary.d.ts.map +1 -0
- package/dist/checks/boundary.js +29 -0
- package/dist/checks/boundary.js.map +1 -0
- package/dist/checks/skill-audit.d.ts +29 -0
- package/dist/checks/skill-audit.d.ts.map +1 -0
- package/dist/checks/skill-audit.js +57 -0
- package/dist/checks/skill-audit.js.map +1 -0
- package/dist/classify/tier.d.ts +9 -0
- package/dist/classify/tier.d.ts.map +1 -0
- package/dist/classify/tier.js +15 -0
- package/dist/classify/tier.js.map +1 -0
- package/dist/cli/commands/assumption.d.ts +3 -0
- package/dist/cli/commands/assumption.d.ts.map +1 -0
- package/dist/cli/commands/assumption.js +313 -0
- package/dist/cli/commands/assumption.js.map +1 -0
- package/dist/cli/commands/block.d.ts +3 -0
- package/dist/cli/commands/block.d.ts.map +1 -0
- package/dist/cli/commands/block.js +23 -0
- package/dist/cli/commands/block.js.map +1 -0
- package/dist/cli/commands/build.d.ts +3 -0
- package/dist/cli/commands/build.d.ts.map +1 -0
- package/dist/cli/commands/build.js +89 -0
- package/dist/cli/commands/build.js.map +1 -0
- package/dist/cli/commands/config.d.ts +3 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +91 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/context.d.ts +3 -0
- package/dist/cli/commands/context.d.ts.map +1 -0
- package/dist/cli/commands/context.js +31 -0
- package/dist/cli/commands/context.js.map +1 -0
- package/dist/cli/commands/decision.d.ts +3 -0
- package/dist/cli/commands/decision.d.ts.map +1 -0
- package/dist/cli/commands/decision.js +390 -0
- package/dist/cli/commands/decision.js.map +1 -0
- package/dist/cli/commands/done.d.ts +3 -0
- package/dist/cli/commands/done.d.ts.map +1 -0
- package/dist/cli/commands/done.js +23 -0
- package/dist/cli/commands/done.js.map +1 -0
- package/dist/cli/commands/draft-new.d.ts +4 -0
- package/dist/cli/commands/draft-new.d.ts.map +1 -0
- package/dist/cli/commands/draft-new.js +108 -0
- package/dist/cli/commands/draft-new.js.map +1 -0
- package/dist/cli/commands/draft.d.ts +4 -0
- package/dist/cli/commands/draft.d.ts.map +1 -0
- package/dist/cli/commands/draft.js +125 -0
- package/dist/cli/commands/draft.js.map +1 -0
- package/dist/cli/commands/hook.d.ts +3 -0
- package/dist/cli/commands/hook.d.ts.map +1 -0
- package/dist/cli/commands/hook.js +50 -0
- package/dist/cli/commands/hook.js.map +1 -0
- package/dist/cli/commands/init.d.ts +21 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +255 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/inspect.d.ts +3 -0
- package/dist/cli/commands/inspect.d.ts.map +1 -0
- package/dist/cli/commands/inspect.js +24 -0
- package/dist/cli/commands/inspect.js.map +1 -0
- package/dist/cli/commands/intelligence.d.ts +3 -0
- package/dist/cli/commands/intelligence.d.ts.map +1 -0
- package/dist/cli/commands/intelligence.js +173 -0
- package/dist/cli/commands/intelligence.js.map +1 -0
- package/dist/cli/commands/milestone.d.ts +3 -0
- package/dist/cli/commands/milestone.d.ts.map +1 -0
- package/dist/cli/commands/milestone.js +119 -0
- package/dist/cli/commands/milestone.js.map +1 -0
- package/dist/cli/commands/needs-context.d.ts +3 -0
- package/dist/cli/commands/needs-context.d.ts.map +1 -0
- package/dist/cli/commands/needs-context.js +23 -0
- package/dist/cli/commands/needs-context.js.map +1 -0
- package/dist/cli/commands/progress.d.ts +3 -0
- package/dist/cli/commands/progress.d.ts.map +1 -0
- package/dist/cli/commands/progress.js +21 -0
- package/dist/cli/commands/progress.js.map +1 -0
- package/dist/cli/commands/recommend.d.ts +3 -0
- package/dist/cli/commands/recommend.d.ts.map +1 -0
- package/dist/cli/commands/recommend.js +24 -0
- package/dist/cli/commands/recommend.js.map +1 -0
- package/dist/cli/commands/recommendation.d.ts +3 -0
- package/dist/cli/commands/recommendation.d.ts.map +1 -0
- package/dist/cli/commands/recommendation.js +360 -0
- package/dist/cli/commands/recommendation.js.map +1 -0
- package/dist/cli/commands/settle.d.ts +3 -0
- package/dist/cli/commands/settle.d.ts.map +1 -0
- package/dist/cli/commands/settle.js +453 -0
- package/dist/cli/commands/settle.js.map +1 -0
- package/dist/cli/commands/spec.d.ts +10 -0
- package/dist/cli/commands/spec.d.ts.map +1 -0
- package/dist/cli/commands/spec.js +246 -0
- package/dist/cli/commands/spec.js.map +1 -0
- package/dist/cli/commands/status.d.ts +11 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +211 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +21 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/register.d.ts +3 -0
- package/dist/cli/register.d.ts.map +1 -0
- package/dist/cli/register.js +43 -0
- package/dist/cli/register.js.map +1 -0
- package/dist/coherence/check.d.ts +11 -0
- package/dist/coherence/check.d.ts.map +1 -0
- package/dist/coherence/check.js +34 -0
- package/dist/coherence/check.js.map +1 -0
- package/dist/config/loader.d.ts +4 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +40 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/errors.d.ts +23 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +31 -0
- package/dist/errors.js.map +1 -0
- package/dist/gates/approve.d.ts +20 -0
- package/dist/gates/approve.d.ts.map +1 -0
- package/dist/gates/approve.js +55 -0
- package/dist/gates/approve.js.map +1 -0
- package/dist/gates/build-context.d.ts +17 -0
- package/dist/gates/build-context.d.ts.map +1 -0
- package/dist/gates/build-context.js +81 -0
- package/dist/gates/build-context.js.map +1 -0
- package/dist/gates/build-test-must-pass.d.ts +12 -0
- package/dist/gates/build-test-must-pass.d.ts.map +1 -0
- package/dist/gates/build-test-must-pass.js +23 -0
- package/dist/gates/build-test-must-pass.js.map +1 -0
- package/dist/gates/build-types.d.ts +54 -0
- package/dist/gates/build-types.d.ts.map +1 -0
- package/dist/gates/build-types.js +2 -0
- package/dist/gates/build-types.js.map +1 -0
- package/dist/gates/code-review.d.ts +20 -0
- package/dist/gates/code-review.d.ts.map +1 -0
- package/dist/gates/code-review.js +137 -0
- package/dist/gates/code-review.js.map +1 -0
- package/dist/gates/coherence.d.ts +26 -0
- package/dist/gates/coherence.d.ts.map +1 -0
- package/dist/gates/coherence.js +59 -0
- package/dist/gates/coherence.js.map +1 -0
- package/dist/gates/coverage.d.ts +8 -0
- package/dist/gates/coverage.d.ts.map +1 -0
- package/dist/gates/coverage.js +26 -0
- package/dist/gates/coverage.js.map +1 -0
- package/dist/gates/deep-verify.d.ts +7 -0
- package/dist/gates/deep-verify.d.ts.map +1 -0
- package/dist/gates/deep-verify.js +77 -0
- package/dist/gates/deep-verify.js.map +1 -0
- package/dist/gates/draft-context.d.ts +20 -0
- package/dist/gates/draft-context.d.ts.map +1 -0
- package/dist/gates/draft-context.js +87 -0
- package/dist/gates/draft-context.js.map +1 -0
- package/dist/gates/draft-read.d.ts +10 -0
- package/dist/gates/draft-read.d.ts.map +1 -0
- package/dist/gates/draft-read.js +24 -0
- package/dist/gates/draft-read.js.map +1 -0
- package/dist/gates/draft-types.d.ts +75 -0
- package/dist/gates/draft-types.d.ts.map +1 -0
- package/dist/gates/draft-types.js +2 -0
- package/dist/gates/draft-types.js.map +1 -0
- package/dist/gates/engine.d.ts +21 -0
- package/dist/gates/engine.d.ts.map +1 -0
- package/dist/gates/engine.js +98 -0
- package/dist/gates/engine.js.map +1 -0
- package/dist/gates/interactive.d.ts +11 -0
- package/dist/gates/interactive.d.ts.map +1 -0
- package/dist/gates/interactive.js +55 -0
- package/dist/gates/interactive.js.map +1 -0
- package/dist/gates/per-task-verify.d.ts +12 -0
- package/dist/gates/per-task-verify.d.ts.map +1 -0
- package/dist/gates/per-task-verify.js +52 -0
- package/dist/gates/per-task-verify.js.map +1 -0
- package/dist/gates/plan-review.d.ts +13 -0
- package/dist/gates/plan-review.d.ts.map +1 -0
- package/dist/gates/plan-review.js +98 -0
- package/dist/gates/plan-review.js.map +1 -0
- package/dist/gates/registry.d.ts +53 -0
- package/dist/gates/registry.d.ts.map +1 -0
- package/dist/gates/registry.js +66 -0
- package/dist/gates/registry.js.map +1 -0
- package/dist/gates/security-audit.d.ts +11 -0
- package/dist/gates/security-audit.d.ts.map +1 -0
- package/dist/gates/security-audit.js +40 -0
- package/dist/gates/security-audit.js.map +1 -0
- package/dist/gates/structural-verifier.d.ts +8 -0
- package/dist/gates/structural-verifier.d.ts.map +1 -0
- package/dist/gates/structural-verifier.js +25 -0
- package/dist/gates/structural-verifier.js.map +1 -0
- package/dist/gates/types.d.ts +202 -0
- package/dist/gates/types.d.ts.map +1 -0
- package/dist/gates/types.js +12 -0
- package/dist/gates/types.js.map +1 -0
- package/dist/hooks/dispatcher.d.ts +8 -0
- package/dist/hooks/dispatcher.d.ts.map +1 -0
- package/dist/hooks/dispatcher.js +31 -0
- package/dist/hooks/dispatcher.js.map +1 -0
- package/dist/hooks/handlers.d.ts +21 -0
- package/dist/hooks/handlers.d.ts.map +1 -0
- package/dist/hooks/handlers.js +121 -0
- package/dist/hooks/handlers.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/init/claude-md-template.d.ts +34 -0
- package/dist/init/claude-md-template.d.ts.map +1 -0
- package/dist/init/claude-md-template.js +72 -0
- package/dist/init/claude-md-template.js.map +1 -0
- package/dist/intelligence/backend/cadence.d.ts +21 -0
- package/dist/intelligence/backend/cadence.d.ts.map +1 -0
- package/dist/intelligence/backend/cadence.js +127 -0
- package/dist/intelligence/backend/cadence.js.map +1 -0
- package/dist/intelligence/context.d.ts +11 -0
- package/dist/intelligence/context.d.ts.map +1 -0
- package/dist/intelligence/context.js +197 -0
- package/dist/intelligence/context.js.map +1 -0
- package/dist/intelligence/graph-decision.d.ts +9 -0
- package/dist/intelligence/graph-decision.d.ts.map +1 -0
- package/dist/intelligence/graph-decision.js +55 -0
- package/dist/intelligence/graph-decision.js.map +1 -0
- package/dist/intelligence/inspect.d.ts +9 -0
- package/dist/intelligence/inspect.d.ts.map +1 -0
- package/dist/intelligence/inspect.js +93 -0
- package/dist/intelligence/inspect.js.map +1 -0
- package/dist/intelligence/milestone.d.ts +40 -0
- package/dist/intelligence/milestone.d.ts.map +1 -0
- package/dist/intelligence/milestone.js +312 -0
- package/dist/intelligence/milestone.js.map +1 -0
- package/dist/intelligence/recommend.d.ts +20 -0
- package/dist/intelligence/recommend.d.ts.map +1 -0
- package/dist/intelligence/recommend.js +185 -0
- package/dist/intelligence/recommend.js.map +1 -0
- package/dist/intelligence/render-assumption-detail.d.ts +3 -0
- package/dist/intelligence/render-assumption-detail.d.ts.map +1 -0
- package/dist/intelligence/render-assumption-detail.js +16 -0
- package/dist/intelligence/render-assumption-detail.js.map +1 -0
- package/dist/intelligence/render-assumption.d.ts +3 -0
- package/dist/intelligence/render-assumption.d.ts.map +1 -0
- package/dist/intelligence/render-assumption.js +37 -0
- package/dist/intelligence/render-assumption.js.map +1 -0
- package/dist/intelligence/render-context.d.ts +3 -0
- package/dist/intelligence/render-context.d.ts.map +1 -0
- package/dist/intelligence/render-context.js +92 -0
- package/dist/intelligence/render-context.js.map +1 -0
- package/dist/intelligence/render-decision-detail.d.ts +3 -0
- package/dist/intelligence/render-decision-detail.d.ts.map +1 -0
- package/dist/intelligence/render-decision-detail.js +30 -0
- package/dist/intelligence/render-decision-detail.js.map +1 -0
- package/dist/intelligence/render-decision-graph.d.ts +3 -0
- package/dist/intelligence/render-decision-graph.d.ts.map +1 -0
- package/dist/intelligence/render-decision-graph.js +49 -0
- package/dist/intelligence/render-decision-graph.js.map +1 -0
- package/dist/intelligence/render-decision.d.ts +3 -0
- package/dist/intelligence/render-decision.d.ts.map +1 -0
- package/dist/intelligence/render-decision.js +45 -0
- package/dist/intelligence/render-decision.js.map +1 -0
- package/dist/intelligence/render-inspection.d.ts +3 -0
- package/dist/intelligence/render-inspection.d.ts.map +1 -0
- package/dist/intelligence/render-inspection.js +69 -0
- package/dist/intelligence/render-inspection.js.map +1 -0
- package/dist/intelligence/render-intelligence-audit.d.ts +5 -0
- package/dist/intelligence/render-intelligence-audit.d.ts.map +1 -0
- package/dist/intelligence/render-intelligence-audit.js +93 -0
- package/dist/intelligence/render-intelligence-audit.js.map +1 -0
- package/dist/intelligence/render-intelligence-stats.d.ts +6 -0
- package/dist/intelligence/render-intelligence-stats.d.ts.map +1 -0
- package/dist/intelligence/render-intelligence-stats.js +76 -0
- package/dist/intelligence/render-intelligence-stats.js.map +1 -0
- package/dist/intelligence/render-milestone.d.ts +3 -0
- package/dist/intelligence/render-milestone.d.ts.map +1 -0
- package/dist/intelligence/render-milestone.js +80 -0
- package/dist/intelligence/render-milestone.js.map +1 -0
- package/dist/intelligence/render-recommend.d.ts +3 -0
- package/dist/intelligence/render-recommend.d.ts.map +1 -0
- package/dist/intelligence/render-recommend.js +62 -0
- package/dist/intelligence/render-recommend.js.map +1 -0
- package/dist/intelligence/render-recommendation-detail.d.ts +7 -0
- package/dist/intelligence/render-recommendation-detail.d.ts.map +1 -0
- package/dist/intelligence/render-recommendation-detail.js +93 -0
- package/dist/intelligence/render-recommendation-detail.js.map +1 -0
- package/dist/intelligence/render.d.ts +3 -0
- package/dist/intelligence/render.d.ts.map +1 -0
- package/dist/intelligence/render.js +57 -0
- package/dist/intelligence/render.js.map +1 -0
- package/dist/intelligence/scan.d.ts +3 -0
- package/dist/intelligence/scan.d.ts.map +1 -0
- package/dist/intelligence/scan.js +103 -0
- package/dist/intelligence/scan.js.map +1 -0
- package/dist/intelligence/store.d.ts +143 -0
- package/dist/intelligence/store.d.ts.map +1 -0
- package/dist/intelligence/store.js +701 -0
- package/dist/intelligence/store.js.map +1 -0
- package/dist/notify/code-review.d.ts +34 -0
- package/dist/notify/code-review.d.ts.map +1 -0
- package/dist/notify/code-review.js +56 -0
- package/dist/notify/code-review.js.map +1 -0
- package/dist/notify/collect.d.ts +31 -0
- package/dist/notify/collect.d.ts.map +1 -0
- package/dist/notify/collect.js +127 -0
- package/dist/notify/collect.js.map +1 -0
- package/dist/notify/emit-unconverged.d.ts +26 -0
- package/dist/notify/emit-unconverged.d.ts.map +1 -0
- package/dist/notify/emit-unconverged.js +31 -0
- package/dist/notify/emit-unconverged.js.map +1 -0
- package/dist/notify/factory.d.ts +12 -0
- package/dist/notify/factory.d.ts.map +1 -0
- package/dist/notify/factory.js +29 -0
- package/dist/notify/factory.js.map +1 -0
- package/dist/notify/file.d.ts +13 -0
- package/dist/notify/file.d.ts.map +1 -0
- package/dist/notify/file.js +21 -0
- package/dist/notify/file.js.map +1 -0
- package/dist/notify/loop-violation.d.ts +10 -0
- package/dist/notify/loop-violation.d.ts.map +1 -0
- package/dist/notify/loop-violation.js +46 -0
- package/dist/notify/loop-violation.js.map +1 -0
- package/dist/notify/notifier.d.ts +13 -0
- package/dist/notify/notifier.d.ts.map +1 -0
- package/dist/notify/notifier.js +2 -0
- package/dist/notify/notifier.js.map +1 -0
- package/dist/notify/null.d.ts +11 -0
- package/dist/notify/null.d.ts.map +1 -0
- package/dist/notify/null.js +11 -0
- package/dist/notify/null.js.map +1 -0
- package/dist/notify/plan-review.d.ts +20 -0
- package/dist/notify/plan-review.d.ts.map +1 -0
- package/dist/notify/plan-review.js +15 -0
- package/dist/notify/plan-review.js.map +1 -0
- package/dist/notify/skill-audit.d.ts +18 -0
- package/dist/notify/skill-audit.d.ts.map +1 -0
- package/dist/notify/skill-audit.js +33 -0
- package/dist/notify/skill-audit.js.map +1 -0
- package/dist/notify/spec-review.d.ts +20 -0
- package/dist/notify/spec-review.d.ts.map +1 -0
- package/dist/notify/spec-review.js +15 -0
- package/dist/notify/spec-review.js.map +1 -0
- package/dist/notify/stderr.d.ts +17 -0
- package/dist/notify/stderr.d.ts.map +1 -0
- package/dist/notify/stderr.js +17 -0
- package/dist/notify/stderr.js.map +1 -0
- package/dist/notify/webhook.d.ts +33 -0
- package/dist/notify/webhook.d.ts.map +1 -0
- package/dist/notify/webhook.js +55 -0
- package/dist/notify/webhook.js.map +1 -0
- package/dist/parse/draft-parser.d.ts +3 -0
- package/dist/parse/draft-parser.d.ts.map +1 -0
- package/dist/parse/draft-parser.js +99 -0
- package/dist/parse/draft-parser.js.map +1 -0
- package/dist/parse/draft-scaffold.d.ts +14 -0
- package/dist/parse/draft-scaffold.d.ts.map +1 -0
- package/dist/parse/draft-scaffold.js +31 -0
- package/dist/parse/draft-scaffold.js.map +1 -0
- package/dist/parse/spec-parser.d.ts +3 -0
- package/dist/parse/spec-parser.d.ts.map +1 -0
- package/dist/parse/spec-parser.js +68 -0
- package/dist/parse/spec-parser.js.map +1 -0
- package/dist/parse/summary-writer.d.ts +3 -0
- package/dist/parse/summary-writer.d.ts.map +1 -0
- package/dist/parse/summary-writer.js +41 -0
- package/dist/parse/summary-writer.js.map +1 -0
- package/dist/progress.d.ts +7 -0
- package/dist/progress.d.ts.map +1 -0
- package/dist/progress.js +37 -0
- package/dist/progress.js.map +1 -0
- package/dist/render/state-md.d.ts +3 -0
- package/dist/render/state-md.d.ts.map +1 -0
- package/dist/render/state-md.js +33 -0
- package/dist/render/state-md.js.map +1 -0
- package/dist/state/atomic-write.d.ts +3 -0
- package/dist/state/atomic-write.d.ts.map +1 -0
- package/dist/state/atomic-write.js +52 -0
- package/dist/state/atomic-write.js.map +1 -0
- package/dist/state/backend.d.ts +13 -0
- package/dist/state/backend.d.ts.map +1 -0
- package/dist/state/backend.js +2 -0
- package/dist/state/backend.js.map +1 -0
- package/dist/state/simple.d.ts +18 -0
- package/dist/state/simple.d.ts.map +1 -0
- package/dist/state/simple.js +67 -0
- package/dist/state/simple.js.map +1 -0
- package/dist/status.d.ts +47 -0
- package/dist/status.d.ts.map +1 -0
- package/dist/status.js +209 -0
- package/dist/status.js.map +1 -0
- package/dist/verify/anthropic-verifier.d.ts +28 -0
- package/dist/verify/anthropic-verifier.d.ts.map +1 -0
- package/dist/verify/anthropic-verifier.js +109 -0
- package/dist/verify/anthropic-verifier.js.map +1 -0
- package/dist/verify/code-review-factory.d.ts +103 -0
- package/dist/verify/code-review-factory.d.ts.map +1 -0
- package/dist/verify/code-review-factory.js +11 -0
- package/dist/verify/code-review-factory.js.map +1 -0
- package/dist/verify/code-review.d.ts +65 -0
- package/dist/verify/code-review.d.ts.map +1 -0
- package/dist/verify/code-review.js +189 -0
- package/dist/verify/code-review.js.map +1 -0
- package/dist/verify/converge.d.ts +14 -0
- package/dist/verify/converge.d.ts.map +1 -0
- package/dist/verify/converge.js +17 -0
- package/dist/verify/converge.js.map +1 -0
- package/dist/verify/coverage.d.ts +31 -0
- package/dist/verify/coverage.d.ts.map +1 -0
- package/dist/verify/coverage.js +125 -0
- package/dist/verify/coverage.js.map +1 -0
- package/dist/verify/factory.d.ts +107 -0
- package/dist/verify/factory.d.ts.map +1 -0
- package/dist/verify/factory.js +17 -0
- package/dist/verify/factory.js.map +1 -0
- package/dist/verify/interactive.d.ts +22 -0
- package/dist/verify/interactive.d.ts.map +1 -0
- package/dist/verify/interactive.js +61 -0
- package/dist/verify/interactive.js.map +1 -0
- package/dist/verify/local-client.d.ts +13 -0
- package/dist/verify/local-client.d.ts.map +1 -0
- package/dist/verify/local-client.js +73 -0
- package/dist/verify/local-client.js.map +1 -0
- package/dist/verify/mock-verifier.d.ts +16 -0
- package/dist/verify/mock-verifier.d.ts.map +1 -0
- package/dist/verify/mock-verifier.js +30 -0
- package/dist/verify/mock-verifier.js.map +1 -0
- package/dist/verify/per-task-factory.d.ts +103 -0
- package/dist/verify/per-task-factory.d.ts.map +1 -0
- package/dist/verify/per-task-factory.js +11 -0
- package/dist/verify/per-task-factory.js.map +1 -0
- package/dist/verify/per-task.d.ts +69 -0
- package/dist/verify/per-task.d.ts.map +1 -0
- package/dist/verify/per-task.js +154 -0
- package/dist/verify/per-task.js.map +1 -0
- package/dist/verify/plan-review-factory.d.ts +103 -0
- package/dist/verify/plan-review-factory.d.ts.map +1 -0
- package/dist/verify/plan-review-factory.js +11 -0
- package/dist/verify/plan-review-factory.js.map +1 -0
- package/dist/verify/plan-review.d.ts +67 -0
- package/dist/verify/plan-review.d.ts.map +1 -0
- package/dist/verify/plan-review.js +196 -0
- package/dist/verify/plan-review.js.map +1 -0
- package/dist/verify/prompter.d.ts +40 -0
- package/dist/verify/prompter.d.ts.map +1 -0
- package/dist/verify/prompter.js +48 -0
- package/dist/verify/prompter.js.map +1 -0
- package/dist/verify/security-audit-factory.d.ts +103 -0
- package/dist/verify/security-audit-factory.d.ts.map +1 -0
- package/dist/verify/security-audit-factory.js +11 -0
- package/dist/verify/security-audit-factory.js.map +1 -0
- package/dist/verify/security-audit.d.ts +63 -0
- package/dist/verify/security-audit.d.ts.map +1 -0
- package/dist/verify/security-audit.js +196 -0
- package/dist/verify/security-audit.js.map +1 -0
- package/dist/verify/skill-match.d.ts +10 -0
- package/dist/verify/skill-match.d.ts.map +1 -0
- package/dist/verify/skill-match.js +15 -0
- package/dist/verify/skill-match.js.map +1 -0
- package/dist/verify/spec-review-factory.d.ts +103 -0
- package/dist/verify/spec-review-factory.d.ts.map +1 -0
- package/dist/verify/spec-review-factory.js +11 -0
- package/dist/verify/spec-review-factory.js.map +1 -0
- package/dist/verify/spec-review.d.ts +63 -0
- package/dist/verify/spec-review.d.ts.map +1 -0
- package/dist/verify/spec-review.js +182 -0
- package/dist/verify/spec-review.js.map +1 -0
- package/dist/verify/verifier-factory.d.ts +45 -0
- package/dist/verify/verifier-factory.d.ts.map +1 -0
- package/dist/verify/verifier-factory.js +38 -0
- package/dist/verify/verifier-factory.js.map +1 -0
- package/dist/verify/verifier.d.ts +63 -0
- package/dist/verify/verifier.d.ts.map +1 -0
- package/dist/verify/verifier.js +32 -0
- package/dist/verify/verifier.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import type { AnomalyEvent, CadenceConfig, CadenceState, DeepVerdict, Draft, Finding, GateSet } from '@manehorizons/cadence-types';
|
|
2
|
+
import type { VerifyInput, VerifyResult, VerifyTestRef } from '../verify/verifier.js';
|
|
3
|
+
import type { InteractiveVerdict } from '../verify/interactive.js';
|
|
4
|
+
import type { Prompter } from '../verify/prompter.js';
|
|
5
|
+
import type { CodeReviewInput, CodeReviewResult, Finding as CodeReviewFinding } from '../verify/code-review.js';
|
|
6
|
+
import type { SecurityAuditInput, SecurityAuditResult } from '../verify/security-audit.js';
|
|
7
|
+
/** Canonical PROGRESS.json shape settle reads. settle.ts imports this (and
|
|
8
|
+
* AcResult below) rather than redefining them locally. */
|
|
9
|
+
export interface ProgressJson {
|
|
10
|
+
draftId: string;
|
|
11
|
+
tasks: Record<string, {
|
|
12
|
+
status: string;
|
|
13
|
+
notes: string;
|
|
14
|
+
touchedFiles: string[];
|
|
15
|
+
updatedAt: string;
|
|
16
|
+
}>;
|
|
17
|
+
}
|
|
18
|
+
/** An AC verdict row destined for SUMMARY.acResults. */
|
|
19
|
+
export interface AcResult {
|
|
20
|
+
id: string;
|
|
21
|
+
pass: boolean;
|
|
22
|
+
note?: string;
|
|
23
|
+
}
|
|
24
|
+
/** Stderr seam. Defaults to process.stderr.write; tests inject a capture. */
|
|
25
|
+
export interface IoPort {
|
|
26
|
+
err(s: string): void;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Injected verifier collaborators. Phase 40.1 consolidates behind this; gates
|
|
30
|
+
* never import a *-factory directly. 39.1 defines ONLY `deep` (what it
|
|
31
|
+
* exercises); 39.4/39.5 add members when those gates are extracted.
|
|
32
|
+
*/
|
|
33
|
+
export interface VerifierPorts {
|
|
34
|
+
readonly deep: {
|
|
35
|
+
verify(input: VerifyInput): Promise<VerifyResult>;
|
|
36
|
+
};
|
|
37
|
+
/** Code-review verifier (Phase 39.4), lazily `selectCodeReviewVerifier`. */
|
|
38
|
+
readonly codeReview: {
|
|
39
|
+
verify(input: CodeReviewInput): Promise<CodeReviewResult>;
|
|
40
|
+
};
|
|
41
|
+
/** Security-audit verifier (Phase 39.5), lazily `selectSecurityAuditVerifier`. */
|
|
42
|
+
readonly securityAudit: {
|
|
43
|
+
verify(input: SecurityAuditInput): Promise<SecurityAuditResult>;
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Notification collaborator. Phase 42.1 consolidates the emitUnconverged spine
|
|
48
|
+
* behind this. 39.1 defines only the `anomalies` finalizer hook it needs;
|
|
49
|
+
* 39.4/39.7 add `codeReviewHigh`/`unconverged` members when those gates land.
|
|
50
|
+
*/
|
|
51
|
+
export interface EmitPort {
|
|
52
|
+
anomalies(events: AnomalyEvent[]): Promise<void>;
|
|
53
|
+
/** code-review-high anomalies (Phase 39.4). Wraps emitCodeReviewHigh over the
|
|
54
|
+
* selected notifier; the anomaly-notify membership guard is the gate's. */
|
|
55
|
+
codeReviewHigh(findings: Record<string, CodeReviewFinding[]>, info: {
|
|
56
|
+
provider: string;
|
|
57
|
+
bypassed: boolean;
|
|
58
|
+
}): Promise<void>;
|
|
59
|
+
/** code-review unconverged escalation anomaly (Phase 39.4). */
|
|
60
|
+
codeReviewUnconverged(info: {
|
|
61
|
+
draftId: string;
|
|
62
|
+
attempts: number;
|
|
63
|
+
maxAttempts: number;
|
|
64
|
+
findings: number;
|
|
65
|
+
provider: string;
|
|
66
|
+
model?: string;
|
|
67
|
+
bypassed?: boolean;
|
|
68
|
+
}): Promise<void>;
|
|
69
|
+
/** skill-audit-miss anomaly (Phase 39.6 — checks/skill-audit). Wraps
|
|
70
|
+
* emitSkillAuditMiss over the selected notifier. UNCONDITIONAL — NOT under the
|
|
71
|
+
* anomaly-notify guard (a strict phase failing the requirement must still
|
|
72
|
+
* leave an audit trail). */
|
|
73
|
+
skillAuditMiss(payload: {
|
|
74
|
+
required: string[];
|
|
75
|
+
invoked: string[];
|
|
76
|
+
missing: string[];
|
|
77
|
+
severity: 'warn' | 'error';
|
|
78
|
+
bypassed?: boolean;
|
|
79
|
+
unenforceable?: boolean;
|
|
80
|
+
}): Promise<void>;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Convergence sidecar collaborator (Phase 39.4). The gate owns the JSON byte
|
|
84
|
+
* layout; the settle adapter owns the path + atomic write. `read()` yields the
|
|
85
|
+
* prior failing-attempt count + history (absent/corrupt/legacy → {0, []}).
|
|
86
|
+
* Reused by the 39.5 security-audit gate.
|
|
87
|
+
*/
|
|
88
|
+
export interface ConvergenceSidecar {
|
|
89
|
+
read(): Promise<{
|
|
90
|
+
attemptsSoFar: number;
|
|
91
|
+
history: unknown[];
|
|
92
|
+
}>;
|
|
93
|
+
write(text: string): Promise<void>;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Result of the build-test-must-pass runner (Phase 39.2). `ran:false` means no
|
|
97
|
+
* `verification.testCommand` is configured — the gate passes with a note rather
|
|
98
|
+
* than guessing a command. `ok` is meaningful only when `ran === true`.
|
|
99
|
+
*/
|
|
100
|
+
export interface TestRunResult {
|
|
101
|
+
readonly ran: boolean;
|
|
102
|
+
readonly ok: boolean;
|
|
103
|
+
readonly exitCode?: number;
|
|
104
|
+
readonly command?: string;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Subprocess collaborator for the build-test-must-pass gate (Phase 39.2).
|
|
108
|
+
* Injected so the gate (and its tests) never spawn a real process; settle
|
|
109
|
+
* builds it from `config.verification.testCommand`.
|
|
110
|
+
*/
|
|
111
|
+
export interface RunnerPort {
|
|
112
|
+
test(): Promise<TestRunResult>;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Prompter collaborator for the interactive-verdict gate (Phase 39.3).
|
|
116
|
+
* `create()` builds the prompter (scripted via CADENCE_PROMPTER_SCRIPT, else
|
|
117
|
+
* StdinPrompter) and may throw on a non-TTY — the gate turns that throw into a
|
|
118
|
+
* refusal. The env/TTY construction policy lives in the settle-side adapter.
|
|
119
|
+
*/
|
|
120
|
+
export interface PrompterPort {
|
|
121
|
+
create(): Prompter;
|
|
122
|
+
}
|
|
123
|
+
/** The subset of `settle run` flags gates read. Grows as gates are extracted. */
|
|
124
|
+
export interface SettleOpts {
|
|
125
|
+
readonly force?: boolean;
|
|
126
|
+
readonly auto?: boolean;
|
|
127
|
+
readonly deep?: boolean;
|
|
128
|
+
readonly allowMissingCoverage?: boolean;
|
|
129
|
+
readonly allowVerifierFailure?: boolean;
|
|
130
|
+
readonly allowStaleDraft?: boolean;
|
|
131
|
+
readonly allowOpenTasks?: boolean;
|
|
132
|
+
readonly allowFailingBuild?: boolean;
|
|
133
|
+
readonly interactive?: boolean;
|
|
134
|
+
readonly allowCodeReviewFailure?: boolean;
|
|
135
|
+
readonly allowSecurityAuditFailure?: boolean;
|
|
136
|
+
/** --allow-skill-audit-miss (Phase 39.6, skill-audit check). */
|
|
137
|
+
readonly allowSkillAuditMiss?: boolean;
|
|
138
|
+
}
|
|
139
|
+
/** Everything a gate may read. Built once, before the gate loop. Readonly. */
|
|
140
|
+
export interface SettleContext {
|
|
141
|
+
readonly cwd: string;
|
|
142
|
+
readonly state: CadenceState;
|
|
143
|
+
readonly draft: Draft;
|
|
144
|
+
readonly progress: ProgressJson;
|
|
145
|
+
readonly config: CadenceConfig | null;
|
|
146
|
+
readonly gateSet: GateSet;
|
|
147
|
+
readonly opts: SettleOpts;
|
|
148
|
+
readonly explicitIds: ReadonlySet<string>;
|
|
149
|
+
readonly touchedFiles: readonly string[];
|
|
150
|
+
/** Shared, lazily-evaluated test-coverage scan; memoized so it runs at most
|
|
151
|
+
* once per settle (the inline gates scan it independently today). */
|
|
152
|
+
coverage(): Promise<Map<string, VerifyTestRef[]>>;
|
|
153
|
+
/** Memoized DRAFT.md mtime in ms (Phase 39.2, for the draft-read gate);
|
|
154
|
+
* `null` when there is no DRAFT or the stat fails. */
|
|
155
|
+
draftMtimeMs(): Promise<number | null>;
|
|
156
|
+
/** Memoized `git diff --no-color HEAD -- <touchedFiles>` (Phase 39.4);
|
|
157
|
+
* empty string on any error. Shared by code-review + security-audit gates. */
|
|
158
|
+
diff(): string;
|
|
159
|
+
readonly verifiers: VerifierPorts;
|
|
160
|
+
readonly emit: EmitPort;
|
|
161
|
+
readonly runner: RunnerPort;
|
|
162
|
+
readonly prompter: PrompterPort;
|
|
163
|
+
/** Code-review convergence sidecar (Phase 39.4). */
|
|
164
|
+
readonly codeReviewSidecar: ConvergenceSidecar;
|
|
165
|
+
readonly io: IoPort;
|
|
166
|
+
}
|
|
167
|
+
/** Cross-cutting flags a gate sets for the finalizers to read. */
|
|
168
|
+
export interface GateFlags {
|
|
169
|
+
coverageBypassed?: boolean;
|
|
170
|
+
verifierFailure?: {
|
|
171
|
+
message: string;
|
|
172
|
+
provider?: string;
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* The shared bag the driver owns: gate `summaryPatch`es merge here; finalizers
|
|
177
|
+
* read + write it too. `acResults` is finalizer-built, not a gate contribution.
|
|
178
|
+
*/
|
|
179
|
+
export interface SettleAccumulator {
|
|
180
|
+
deepVerify?: Record<string, DeepVerdict>;
|
|
181
|
+
interactiveVerify?: Record<string, InteractiveVerdict>;
|
|
182
|
+
codeReview?: Record<string, Finding[]>;
|
|
183
|
+
securityAudit?: Finding[];
|
|
184
|
+
acResults?: AcResult[];
|
|
185
|
+
flags: GateFlags;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* A gate's entire contribution. No shared mutable state. `P` is the producer
|
|
189
|
+
* accumulator the `summaryPatch` targets — defaults to `SettleAccumulator` so
|
|
190
|
+
* settle gates and `mergeInto` are unchanged. The draft/build surfaces (Phase
|
|
191
|
+
* 39.7) parameterize `P` with their own product type (e.g. `BuildProducts`)
|
|
192
|
+
* while keeping the shared `{ outcome, summaryPatch?, flags? }` shape.
|
|
193
|
+
*/
|
|
194
|
+
export interface GateResult<P = SettleAccumulator> {
|
|
195
|
+
readonly outcome: 'pass' | 'refuse';
|
|
196
|
+
readonly summaryPatch?: Partial<P>;
|
|
197
|
+
readonly flags?: GateFlags;
|
|
198
|
+
}
|
|
199
|
+
export type GateImpl = (ctx: SettleContext) => Promise<GateResult>;
|
|
200
|
+
/** Shallow-merge a GateResult's contribution into the accumulator. */
|
|
201
|
+
export declare function mergeInto(acc: SettleAccumulator, res: GateResult): void;
|
|
202
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/gates/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Shallow-merge a GateResult's contribution into the accumulator. */
|
|
2
|
+
export function mergeInto(acc, res) {
|
|
3
|
+
if (res.summaryPatch) {
|
|
4
|
+
const rest = { ...res.summaryPatch };
|
|
5
|
+
delete rest.flags;
|
|
6
|
+
Object.assign(acc, rest);
|
|
7
|
+
}
|
|
8
|
+
if (res.flags) {
|
|
9
|
+
Object.assign(acc.flags, res.flags);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/gates/types.ts"],"names":[],"mappings":"AA4NA,sEAAsE;AACtE,MAAM,UAAU,SAAS,CAAC,GAAsB,EAAE,GAAe;IAC/D,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;QACrB,MAAM,IAAI,GAA+B,EAAE,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;QACjE,OAAO,IAAI,CAAC,KAAK,CAAC;QAClB,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;IACD,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QACd,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AbstractEvent, HookContext } from '@manehorizons/cadence-types';
|
|
2
|
+
import { type HookResult } from './handlers.js';
|
|
3
|
+
export declare class HookDispatcher {
|
|
4
|
+
private readonly repoRoot;
|
|
5
|
+
constructor(repoRoot: string);
|
|
6
|
+
dispatch(event: AbstractEvent, ctx: HookContext): Promise<HookResult>;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=dispatcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../src/hooks/dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAG9E,OAAO,EAQL,KAAK,UAAU,EAChB,MAAM,eAAe,CAAC;AAEvB,qBAAa,cAAc;IACb,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,MAAM;IAEvC,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;CAqB5E"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { SimpleStateBackend } from '../state/simple.js';
|
|
2
|
+
import { loadConfig } from '../config/loader.js';
|
|
3
|
+
import { handleSessionStart, handleUserPrompt, handlePreToolEdit, handlePostToolEdit, handleSessionStop, handleSubagentResult, handleSkillInvoke, } from './handlers.js';
|
|
4
|
+
export class HookDispatcher {
|
|
5
|
+
repoRoot;
|
|
6
|
+
constructor(repoRoot) {
|
|
7
|
+
this.repoRoot = repoRoot;
|
|
8
|
+
}
|
|
9
|
+
async dispatch(event, ctx) {
|
|
10
|
+
const backend = new SimpleStateBackend(this.repoRoot);
|
|
11
|
+
const state = await backend.readState();
|
|
12
|
+
const config = await loadConfig(this.repoRoot);
|
|
13
|
+
switch (event) {
|
|
14
|
+
case 'session-start':
|
|
15
|
+
return handleSessionStart(ctx, state);
|
|
16
|
+
case 'user-prompt':
|
|
17
|
+
return handleUserPrompt(ctx, state, config, backend);
|
|
18
|
+
case 'pre-tool-edit':
|
|
19
|
+
return handlePreToolEdit(ctx, state, config);
|
|
20
|
+
case 'post-tool-edit':
|
|
21
|
+
return handlePostToolEdit(ctx, state, config, backend);
|
|
22
|
+
case 'session-stop':
|
|
23
|
+
return handleSessionStop(ctx, state, config);
|
|
24
|
+
case 'subagent-result':
|
|
25
|
+
return handleSubagentResult(ctx, state, config, backend);
|
|
26
|
+
case 'skill-invoke':
|
|
27
|
+
return handleSkillInvoke(ctx, state, config, backend);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=dispatcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../src/hooks/dispatcher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,GAElB,MAAM,eAAe,CAAC;AAEvB,MAAM,OAAO,cAAc;IACI;IAA7B,YAA6B,QAAgB;QAAhB,aAAQ,GAAR,QAAQ,CAAQ;IAAG,CAAC;IAEjD,KAAK,CAAC,QAAQ,CAAC,KAAoB,EAAE,GAAgB;QACnD,MAAM,OAAO,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/C,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,eAAe;gBAClB,OAAO,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACxC,KAAK,aAAa;gBAChB,OAAO,gBAAgB,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YACvD,KAAK,eAAe;gBAClB,OAAO,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YAC/C,KAAK,gBAAgB;gBACnB,OAAO,kBAAkB,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YACzD,KAAK,cAAc;gBACjB,OAAO,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YAC/C,KAAK,iBAAiB;gBACpB,OAAO,oBAAoB,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YAC3D,KAAK,cAAc;gBACjB,OAAO,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { HookContext, CadenceConfig, CadenceState } from '@manehorizons/cadence-types';
|
|
2
|
+
import type { SimpleStateBackend } from '../state/simple.js';
|
|
3
|
+
export interface HookResult {
|
|
4
|
+
ok: boolean;
|
|
5
|
+
blockMessage?: string;
|
|
6
|
+
contextPayload?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function handleSessionStart(_ctx: HookContext, state: CadenceState): Promise<HookResult>;
|
|
9
|
+
export declare function handleUserPrompt(_ctx: HookContext, state: CadenceState, config: CadenceConfig, backend: SimpleStateBackend): Promise<HookResult>;
|
|
10
|
+
export declare function handlePreToolEdit(ctx: HookContext, state: CadenceState, config: CadenceConfig): Promise<HookResult>;
|
|
11
|
+
export declare function handlePostToolEdit(ctx: HookContext, state: CadenceState, _config: CadenceConfig, backend: SimpleStateBackend): Promise<HookResult>;
|
|
12
|
+
export declare function handleSessionStop(_ctx: HookContext, state: CadenceState, config: CadenceConfig): Promise<HookResult>;
|
|
13
|
+
export declare function handleSubagentResult(_ctx: HookContext, state: CadenceState, _config: CadenceConfig, backend: SimpleStateBackend): Promise<HookResult>;
|
|
14
|
+
/**
|
|
15
|
+
* Phase 23.4 — skillAudit wiring. Records the skill name from `ctx.raw.skill`
|
|
16
|
+
* into `state.skillAudit.invoked` when `config.telemetry.skillInvocations` is
|
|
17
|
+
* enabled. Dedups (set-like) and caps the array at 100 entries with FIFO
|
|
18
|
+
* eviction. Best-effort: missing skill or telemetry disabled → no-op.
|
|
19
|
+
*/
|
|
20
|
+
export declare function handleSkillInvoke(ctx: HookContext, state: CadenceState, config: CadenceConfig, backend: SimpleStateBackend): Promise<HookResult>;
|
|
21
|
+
//# sourceMappingURL=handlers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/hooks/handlers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC5F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAS7D,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,OAAO,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAWpG;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,UAAU,CAAC,CAMrB;AAED,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,UAAU,CAAC,CAkDrB;AAED,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,UAAU,CAAC,CAWrB;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,UAAU,CAAC,CASrB;AAED,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,UAAU,CAAC,CAIrB;AAID;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,UAAU,CAAC,CAWrB"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { join } from 'node:path';
|
|
2
|
+
import { readFile } from 'node:fs/promises';
|
|
3
|
+
import { existsSync } from 'node:fs';
|
|
4
|
+
import { parseDraftMd } from '../parse/draft-parser.js';
|
|
5
|
+
import { effectiveGateSet } from '../gates/engine.js';
|
|
6
|
+
import { selectNotifier } from '../notify/factory.js';
|
|
7
|
+
import { runBoundaryCheck } from '../checks/boundary.js';
|
|
8
|
+
export async function handleSessionStart(_ctx, state) {
|
|
9
|
+
const lines = [
|
|
10
|
+
'CADENCE session resumed.',
|
|
11
|
+
`Project: ${state.project.name}`,
|
|
12
|
+
`Loop position: ${state.loopPosition}`,
|
|
13
|
+
`Active phase: ${state.activePhase ?? '(none)'}`,
|
|
14
|
+
`Active draft: ${state.activeDraft ?? '(none)'}`,
|
|
15
|
+
];
|
|
16
|
+
if (state.openDrafts.length > 0)
|
|
17
|
+
lines.push(`Open drafts: ${state.openDrafts.map((d) => d.id).join(', ')}`);
|
|
18
|
+
return { ok: true, contextPayload: lines.join('\n') };
|
|
19
|
+
}
|
|
20
|
+
export async function handleUserPrompt(_ctx, state, config, backend) {
|
|
21
|
+
if (config.telemetry.tokenUtilization) {
|
|
22
|
+
state.session.tokenUtilization = Math.min(1, state.session.tokenUtilization + 0.01);
|
|
23
|
+
await backend.commit(state);
|
|
24
|
+
}
|
|
25
|
+
return { ok: true };
|
|
26
|
+
}
|
|
27
|
+
export async function handlePreToolEdit(ctx, state, config) {
|
|
28
|
+
// Phase 17.2: hook-side files-outside-boundary detection. Fires only when an
|
|
29
|
+
// active draft exists, the host passed file paths in ctx.raw, and the gate
|
|
30
|
+
// set includes anomaly-notify. Detection-only — never refuses the edit.
|
|
31
|
+
if (state.activeDraft && state.activePhase) {
|
|
32
|
+
const rawFiles = ctx.raw?.files;
|
|
33
|
+
if (rawFiles && rawFiles.length > 0) {
|
|
34
|
+
const draftPath = join(ctx.cwd, '.cadence/phases', state.activePhase, `${state.activeDraft}-DRAFT.md`);
|
|
35
|
+
if (existsSync(draftPath)) {
|
|
36
|
+
try {
|
|
37
|
+
const draft = parseDraftMd(await readFile(draftPath, 'utf8'));
|
|
38
|
+
const now = new Date().toISOString();
|
|
39
|
+
const events = runBoundaryCheck({
|
|
40
|
+
declaredFiles: draft.tasks.flatMap((t) => t.files),
|
|
41
|
+
touchedFiles: rawFiles,
|
|
42
|
+
stamp: () => now,
|
|
43
|
+
extraContext: { source: 'hook.preToolEdit' },
|
|
44
|
+
});
|
|
45
|
+
if (events.length > 0) {
|
|
46
|
+
const gateSet = effectiveGateSet(state, config, draft);
|
|
47
|
+
if (gateSet.gates.includes('anomaly-notify')) {
|
|
48
|
+
const notifier = selectNotifier(config);
|
|
49
|
+
try {
|
|
50
|
+
await notifier.notify(events);
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
54
|
+
process.stderr.write(`notify: ${notifier.name} transport failed — ${msg} (continuing)\n`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
/* malformed draft must not break the hook */
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (config.hooks.preToolUseBuildGate && state.loopPosition !== 'BUILD') {
|
|
66
|
+
return {
|
|
67
|
+
ok: false,
|
|
68
|
+
blockMessage: `preToolUseBuildGate is enabled and loopPosition=${state.loopPosition}. Run 'cadence draft approve' to enter BUILD phase before editing.`,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
return { ok: true };
|
|
72
|
+
}
|
|
73
|
+
export async function handlePostToolEdit(ctx, state, _config, backend) {
|
|
74
|
+
if (state.activeTask) {
|
|
75
|
+
const raw = ctx.raw;
|
|
76
|
+
if (raw?.files) {
|
|
77
|
+
state.activeTask.touchedFiles = Array.from(new Set([...state.activeTask.touchedFiles, ...raw.files]));
|
|
78
|
+
await backend.commit(state);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return { ok: true };
|
|
82
|
+
}
|
|
83
|
+
export async function handleSessionStop(_ctx, state, config) {
|
|
84
|
+
if (config.loopEnforcement !== 'strict')
|
|
85
|
+
return { ok: true };
|
|
86
|
+
if (state.openDrafts.length > 0) {
|
|
87
|
+
return {
|
|
88
|
+
ok: false,
|
|
89
|
+
blockMessage: `loopEnforcement=strict and ${state.openDrafts.length} unclosed draft(s). Run 'cadence settle' before ending session.`,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
return { ok: true };
|
|
93
|
+
}
|
|
94
|
+
export async function handleSubagentResult(_ctx, state, _config, backend) {
|
|
95
|
+
state.session.subagentSpawns += 1;
|
|
96
|
+
await backend.commit(state);
|
|
97
|
+
return { ok: true };
|
|
98
|
+
}
|
|
99
|
+
const SKILL_AUDIT_CAP = 100;
|
|
100
|
+
/**
|
|
101
|
+
* Phase 23.4 — skillAudit wiring. Records the skill name from `ctx.raw.skill`
|
|
102
|
+
* into `state.skillAudit.invoked` when `config.telemetry.skillInvocations` is
|
|
103
|
+
* enabled. Dedups (set-like) and caps the array at 100 entries with FIFO
|
|
104
|
+
* eviction. Best-effort: missing skill or telemetry disabled → no-op.
|
|
105
|
+
*/
|
|
106
|
+
export async function handleSkillInvoke(ctx, state, config, backend) {
|
|
107
|
+
if (!config.telemetry.skillInvocations)
|
|
108
|
+
return { ok: true };
|
|
109
|
+
const skill = ctx.raw?.skill;
|
|
110
|
+
if (typeof skill !== 'string' || skill.length === 0)
|
|
111
|
+
return { ok: true };
|
|
112
|
+
if (state.skillAudit.invoked.includes(skill))
|
|
113
|
+
return { ok: true };
|
|
114
|
+
state.skillAudit.invoked.push(skill);
|
|
115
|
+
while (state.skillAudit.invoked.length > SKILL_AUDIT_CAP) {
|
|
116
|
+
state.skillAudit.invoked.shift();
|
|
117
|
+
}
|
|
118
|
+
await backend.commit(state);
|
|
119
|
+
return { ok: true };
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/hooks/handlers.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { Profile } from '@manehorizons/cadence-types';
|
|
2
|
+
/**
|
|
3
|
+
* Phase 26.2 — CLAUDE.md scaffold. `cadence init` writes a CLAUDE.md at the
|
|
4
|
+
* repo root with a managed region delimited by these markers. `cadence init
|
|
5
|
+
* --claude-md` regenerates ONLY the managed region, preserving any content
|
|
6
|
+
* the user added outside it. A CLAUDE.md with no markers is treated as
|
|
7
|
+
* fully user-owned and left untouched.
|
|
8
|
+
*/
|
|
9
|
+
export declare const MANAGED_START = "<!-- cadence:managed:start -->";
|
|
10
|
+
export declare const MANAGED_END = "<!-- cadence:managed:end -->";
|
|
11
|
+
export interface ClaudeMdOptions {
|
|
12
|
+
projectName: string;
|
|
13
|
+
gateProfile: Profile;
|
|
14
|
+
preset: string;
|
|
15
|
+
}
|
|
16
|
+
/** The managed block (markers inclusive). Regenerated verbatim by `--claude-md`. */
|
|
17
|
+
export declare function renderManagedBlock(opts: ClaudeMdOptions): string;
|
|
18
|
+
/** Full default file when no CLAUDE.md exists yet. */
|
|
19
|
+
export declare function renderClaudeMd(opts: ClaudeMdOptions): string;
|
|
20
|
+
export type MergeMode = 'created' | 'regenerated' | 'preserved';
|
|
21
|
+
export interface MergeResult {
|
|
22
|
+
content: string;
|
|
23
|
+
mode: MergeMode;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Merge a fresh managed block into an existing CLAUDE.md.
|
|
27
|
+
*
|
|
28
|
+
* - no existing file (empty/whitespace) → full render (`created`)
|
|
29
|
+
* - both markers present → replace the inclusive span, keep prefix/suffix
|
|
30
|
+
* byte-for-byte (`regenerated`)
|
|
31
|
+
* - content present but markers absent → return unchanged (`preserved`)
|
|
32
|
+
*/
|
|
33
|
+
export declare function mergeManagedBlock(existing: string | null, opts: ClaudeMdOptions): MergeResult;
|
|
34
|
+
//# sourceMappingURL=claude-md-template.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-md-template.d.ts","sourceRoot":"","sources":["../../src/init/claude-md-template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAE3D;;;;;;GAMG;AAEH,eAAO,MAAM,aAAa,mCAAmC,CAAC;AAC9D,eAAO,MAAM,WAAW,iCAAiC,CAAC;AAE1D,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,oFAAoF;AACpF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CA6BhE;AAED,sDAAsD;AACtD,wBAAgB,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAK5D;AAED,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,aAAa,GAAG,WAAW,CAAC;AAEhE,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,SAAS,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,IAAI,EAAE,eAAe,GACpB,WAAW,CAiBb"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 26.2 — CLAUDE.md scaffold. `cadence init` writes a CLAUDE.md at the
|
|
3
|
+
* repo root with a managed region delimited by these markers. `cadence init
|
|
4
|
+
* --claude-md` regenerates ONLY the managed region, preserving any content
|
|
5
|
+
* the user added outside it. A CLAUDE.md with no markers is treated as
|
|
6
|
+
* fully user-owned and left untouched.
|
|
7
|
+
*/
|
|
8
|
+
export const MANAGED_START = '<!-- cadence:managed:start -->';
|
|
9
|
+
export const MANAGED_END = '<!-- cadence:managed:end -->';
|
|
10
|
+
/** The managed block (markers inclusive). Regenerated verbatim by `--claude-md`. */
|
|
11
|
+
export function renderManagedBlock(opts) {
|
|
12
|
+
return `${MANAGED_START}
|
|
13
|
+
## CADENCE
|
|
14
|
+
|
|
15
|
+
This project uses **CADENCE** — a disciplined draft → approve → build → settle
|
|
16
|
+
loop. Do not freelance multi-step work; run it through the loop.
|
|
17
|
+
|
|
18
|
+
- **Project:** ${opts.projectName}
|
|
19
|
+
- **Config preset:** ${opts.preset}
|
|
20
|
+
- **Gate profile:** ${opts.gateProfile} (gates scale with profile × tier — see DESIGN.md §4)
|
|
21
|
+
|
|
22
|
+
### Where state lives
|
|
23
|
+
|
|
24
|
+
- \`.cadence/ROADMAP.md\` — phases and milestones
|
|
25
|
+
- \`.cadence/STATE.md\` — current loop position, active draft/phase (derived; do not hand-edit)
|
|
26
|
+
- \`.cadence/phases/<phase>/\` — per-phase DRAFT / PROGRESS / SUMMARY
|
|
27
|
+
- \`DESIGN.md\` — architecture + the gate universe; project \`README.md\` — usage
|
|
28
|
+
|
|
29
|
+
### The loop
|
|
30
|
+
|
|
31
|
+
1. \`cadence draft new <phase> <num> --title=…\` — scaffold a DRAFT
|
|
32
|
+
2. edit the DRAFT (Objective, Acceptance Criteria, Tasks, Boundaries)
|
|
33
|
+
3. \`cadence draft approve <phase> <num>\` — coherence + gate checks, enter BUILD
|
|
34
|
+
4. \`cadence build task <id> --status=DONE\` — record each task
|
|
35
|
+
5. \`cadence settle run --auto\` — derive AC verdicts, write SUMMARY, return to IDLE
|
|
36
|
+
|
|
37
|
+
Run \`cadence progress\` anytime for the next suggested step. Regenerate this
|
|
38
|
+
block with \`cadence init --claude-md\`; edits outside the markers are kept.
|
|
39
|
+
${MANAGED_END}`;
|
|
40
|
+
}
|
|
41
|
+
/** Full default file when no CLAUDE.md exists yet. */
|
|
42
|
+
export function renderClaudeMd(opts) {
|
|
43
|
+
return `# ${opts.projectName}
|
|
44
|
+
|
|
45
|
+
${renderManagedBlock(opts)}
|
|
46
|
+
`;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Merge a fresh managed block into an existing CLAUDE.md.
|
|
50
|
+
*
|
|
51
|
+
* - no existing file (empty/whitespace) → full render (`created`)
|
|
52
|
+
* - both markers present → replace the inclusive span, keep prefix/suffix
|
|
53
|
+
* byte-for-byte (`regenerated`)
|
|
54
|
+
* - content present but markers absent → return unchanged (`preserved`)
|
|
55
|
+
*/
|
|
56
|
+
export function mergeManagedBlock(existing, opts) {
|
|
57
|
+
if (existing === null || existing.trim().length === 0) {
|
|
58
|
+
return { content: renderClaudeMd(opts), mode: 'created' };
|
|
59
|
+
}
|
|
60
|
+
const startIdx = existing.indexOf(MANAGED_START);
|
|
61
|
+
const endIdx = existing.indexOf(MANAGED_END);
|
|
62
|
+
if (startIdx === -1 || endIdx === -1 || endIdx < startIdx) {
|
|
63
|
+
return { content: existing, mode: 'preserved' };
|
|
64
|
+
}
|
|
65
|
+
const prefix = existing.slice(0, startIdx);
|
|
66
|
+
const suffix = existing.slice(endIdx + MANAGED_END.length);
|
|
67
|
+
return {
|
|
68
|
+
content: `${prefix}${renderManagedBlock(opts)}${suffix}`,
|
|
69
|
+
mode: 'regenerated',
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=claude-md-template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-md-template.js","sourceRoot":"","sources":["../../src/init/claude-md-template.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,gCAAgC,CAAC;AAC9D,MAAM,CAAC,MAAM,WAAW,GAAG,8BAA8B,CAAC;AAQ1D,oFAAoF;AACpF,MAAM,UAAU,kBAAkB,CAAC,IAAqB;IACtD,OAAO,GAAG,aAAa;;;;;;iBAMR,IAAI,CAAC,WAAW;uBACV,IAAI,CAAC,MAAM;sBACZ,IAAI,CAAC,WAAW;;;;;;;;;;;;;;;;;;;EAmBpC,WAAW,EAAE,CAAC;AAChB,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,cAAc,CAAC,IAAqB;IAClD,OAAO,KAAK,IAAI,CAAC,WAAW;;EAE5B,kBAAkB,CAAC,IAAI,CAAC;CACzB,CAAC;AACF,CAAC;AASD;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAAuB,EACvB,IAAqB;IAErB,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtD,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC5D,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7C,IAAI,QAAQ,KAAK,CAAC,CAAC,IAAI,MAAM,KAAK,CAAC,CAAC,IAAI,MAAM,GAAG,QAAQ,EAAE,CAAC;QAC1D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IAClD,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3D,OAAO;QACL,OAAO,EAAE,GAAG,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,MAAM,EAAE;QACxD,IAAI,EAAE,aAAa;KACpB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { BackendStatus, IntelligenceMilestone, Recommendation } from '@manehorizons/cadence-types';
|
|
2
|
+
export type BackendDetection = {
|
|
3
|
+
present: boolean;
|
|
4
|
+
kind: 'cadence' | null;
|
|
5
|
+
};
|
|
6
|
+
export type BackendArtifacts = {
|
|
7
|
+
phaseCount: number;
|
|
8
|
+
roadmap: boolean;
|
|
9
|
+
state: boolean;
|
|
10
|
+
milestones: boolean;
|
|
11
|
+
};
|
|
12
|
+
export interface PraxisBackend {
|
|
13
|
+
id: string;
|
|
14
|
+
detect(root: string): Promise<BackendDetection>;
|
|
15
|
+
readStatus(root: string): Promise<BackendStatus>;
|
|
16
|
+
readArtifacts(root: string): Promise<BackendArtifacts>;
|
|
17
|
+
listLegalActions(root: string): Promise<string[]>;
|
|
18
|
+
renderSpecDraft(milestone: IntelligenceMilestone, recs: ReadonlyArray<Pick<Recommendation, 'id' | 'title'>>): string;
|
|
19
|
+
}
|
|
20
|
+
export declare const cadenceBackend: PraxisBackend;
|
|
21
|
+
//# sourceMappingURL=cadence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cadence.d.ts","sourceRoot":"","sources":["../../../src/intelligence/backend/cadence.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,aAAa,EACb,qBAAqB,EACrB,cAAc,EACf,MAAM,6BAA6B,CAAC;AAIrC,MAAM,MAAM,gBAAgB,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAA;CAAE,CAAC;AAC5E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAChD,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACjD,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACvD,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAClD,eAAe,CACb,SAAS,EAAE,qBAAqB,EAChC,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GACxD,MAAM,CAAC;CACX;AAYD,eAAO,MAAM,cAAc,EAAE,aAiH5B,CAAC"}
|