@paths.design/caws-cli 10.2.0 → 11.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +125 -374
- package/dist/index.js +43 -785
- package/dist/shell/binding/resolve-binding.d.ts +4 -0
- package/dist/shell/binding/resolve-binding.d.ts.map +1 -0
- package/dist/shell/binding/resolve-binding.js +228 -0
- package/dist/shell/binding/resolve-binding.js.map +1 -0
- package/dist/shell/binding/types.d.ts +42 -0
- package/dist/shell/binding/types.d.ts.map +1 -0
- package/dist/shell/binding/types.js +21 -0
- package/dist/shell/binding/types.js.map +1 -0
- package/dist/shell/commands/claim.d.ts +14 -0
- package/dist/shell/commands/claim.d.ts.map +1 -0
- package/dist/shell/commands/claim.js +197 -0
- package/dist/shell/commands/claim.js.map +1 -0
- package/dist/shell/commands/doctor.d.ts +13 -0
- package/dist/shell/commands/doctor.d.ts.map +1 -0
- package/dist/shell/commands/doctor.js +97 -0
- package/dist/shell/commands/doctor.js.map +1 -0
- package/dist/shell/commands/evidence.d.ts +28 -0
- package/dist/shell/commands/evidence.d.ts.map +1 -0
- package/dist/shell/commands/evidence.js +166 -0
- package/dist/shell/commands/evidence.js.map +1 -0
- package/dist/shell/commands/gates.d.ts +19 -0
- package/dist/shell/commands/gates.d.ts.map +1 -0
- package/dist/shell/commands/gates.js +181 -0
- package/dist/shell/commands/gates.js.map +1 -0
- package/dist/shell/commands/init.d.ts +8 -0
- package/dist/shell/commands/init.d.ts.map +1 -0
- package/dist/shell/commands/init.js +64 -0
- package/dist/shell/commands/init.js.map +1 -0
- package/dist/shell/commands/scope.d.ts +11 -0
- package/dist/shell/commands/scope.d.ts.map +1 -0
- package/dist/shell/commands/scope.js +92 -0
- package/dist/shell/commands/scope.js.map +1 -0
- package/dist/shell/commands/status.d.ts +15 -0
- package/dist/shell/commands/status.d.ts.map +1 -0
- package/dist/shell/commands/status.js +106 -0
- package/dist/shell/commands/status.js.map +1 -0
- package/dist/shell/commands/waiver.d.ts +38 -0
- package/dist/shell/commands/waiver.d.ts.map +1 -0
- package/dist/shell/commands/waiver.js +240 -0
- package/dist/shell/commands/waiver.js.map +1 -0
- package/dist/shell/gates/disposition.d.ts +23 -0
- package/dist/shell/gates/disposition.d.ts.map +1 -0
- package/dist/shell/gates/disposition.js +87 -0
- package/dist/shell/gates/disposition.js.map +1 -0
- package/dist/shell/gates/gate-result-contract.d.ts +39 -0
- package/dist/shell/gates/gate-result-contract.d.ts.map +1 -0
- package/dist/shell/gates/gate-result-contract.js +150 -0
- package/dist/shell/gates/gate-result-contract.js.map +1 -0
- package/dist/shell/gates/quality-gates-adapter.d.ts +55 -0
- package/dist/shell/gates/quality-gates-adapter.d.ts.map +1 -0
- package/dist/shell/gates/quality-gates-adapter.js +161 -0
- package/dist/shell/gates/quality-gates-adapter.js.map +1 -0
- package/dist/shell/gates/waiver-filter.d.ts +58 -0
- package/dist/shell/gates/waiver-filter.d.ts.map +1 -0
- package/dist/shell/gates/waiver-filter.js +119 -0
- package/dist/shell/gates/waiver-filter.js.map +1 -0
- package/dist/shell/index.d.ts +50 -0
- package/dist/shell/index.d.ts.map +1 -0
- package/dist/shell/index.js +73 -0
- package/dist/shell/index.js.map +1 -0
- package/dist/shell/register.d.ts +11 -0
- package/dist/shell/register.d.ts.map +1 -0
- package/dist/shell/register.js +274 -0
- package/dist/shell/register.js.map +1 -0
- package/dist/shell/render/claim.d.ts +22 -0
- package/dist/shell/render/claim.d.ts.map +1 -0
- package/dist/shell/render/claim.js +75 -0
- package/dist/shell/render/claim.js.map +1 -0
- package/dist/shell/render/decision.d.ts +15 -0
- package/dist/shell/render/decision.d.ts.map +1 -0
- package/dist/shell/render/decision.js +66 -0
- package/dist/shell/render/decision.js.map +1 -0
- package/dist/shell/render/diagnostic.d.ts +19 -0
- package/dist/shell/render/diagnostic.d.ts.map +1 -0
- package/dist/shell/render/diagnostic.js +76 -0
- package/dist/shell/render/diagnostic.js.map +1 -0
- package/dist/shell/render/finding.d.ts +15 -0
- package/dist/shell/render/finding.d.ts.map +1 -0
- package/dist/shell/render/finding.js +57 -0
- package/dist/shell/render/finding.js.map +1 -0
- package/dist/shell/render/gates.d.ts +3 -0
- package/dist/shell/render/gates.d.ts.map +1 -0
- package/dist/shell/render/gates.js +56 -0
- package/dist/shell/render/gates.js.map +1 -0
- package/dist/shell/render/init.d.ts +11 -0
- package/dist/shell/render/init.d.ts.map +1 -0
- package/dist/shell/render/init.js +32 -0
- package/dist/shell/render/init.js.map +1 -0
- package/dist/shell/render/status.d.ts +26 -0
- package/dist/shell/render/status.d.ts.map +1 -0
- package/dist/shell/render/status.js +143 -0
- package/dist/shell/render/status.js.map +1 -0
- package/dist/shell/render/waiver.d.ts +21 -0
- package/dist/shell/render/waiver.d.ts.map +1 -0
- package/dist/shell/render/waiver.js +94 -0
- package/dist/shell/render/waiver.js.map +1 -0
- package/dist/shell/rules.d.ts +37 -0
- package/dist/shell/rules.d.ts.map +1 -0
- package/dist/shell/rules.js +51 -0
- package/dist/shell/rules.js.map +1 -0
- package/dist/shell/session/actor.d.ts +14 -0
- package/dist/shell/session/actor.d.ts.map +1 -0
- package/dist/shell/session/actor.js +34 -0
- package/dist/shell/session/actor.js.map +1 -0
- package/dist/shell/session/resolve-session.d.ts +5 -0
- package/dist/shell/session/resolve-session.d.ts.map +1 -0
- package/dist/shell/session/resolve-session.js +239 -0
- package/dist/shell/session/resolve-session.js.map +1 -0
- package/dist/shell/session/types.d.ts +56 -0
- package/dist/shell/session/types.d.ts.map +1 -0
- package/dist/shell/session/types.js +15 -0
- package/dist/shell/session/types.js.map +1 -0
- package/dist/store/agents-store.d.ts +3 -0
- package/dist/store/agents-store.d.ts.map +1 -0
- package/dist/store/agents-store.js +63 -0
- package/dist/store/agents-store.js.map +1 -0
- package/dist/store/apply-patch.d.ts +16 -0
- package/dist/store/apply-patch.d.ts.map +1 -0
- package/dist/store/apply-patch.js +191 -0
- package/dist/store/apply-patch.js.map +1 -0
- package/dist/store/atomic-write.d.ts +16 -0
- package/dist/store/atomic-write.d.ts.map +1 -0
- package/dist/store/atomic-write.js +132 -0
- package/dist/store/atomic-write.js.map +1 -0
- package/dist/store/doctor-snapshot.d.ts +20 -0
- package/dist/store/doctor-snapshot.d.ts.map +1 -0
- package/dist/store/doctor-snapshot.js +176 -0
- package/dist/store/doctor-snapshot.js.map +1 -0
- package/dist/store/events-store.d.ts +33 -0
- package/dist/store/events-store.d.ts.map +1 -0
- package/dist/store/events-store.js +297 -0
- package/dist/store/events-store.js.map +1 -0
- package/dist/store/index.d.ts +21 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +47 -0
- package/dist/store/index.js.map +1 -0
- package/dist/store/init-store.d.ts +21 -0
- package/dist/store/init-store.d.ts.map +1 -0
- package/dist/store/init-store.js +295 -0
- package/dist/store/init-store.js.map +1 -0
- package/dist/store/json-store.d.ts +3 -0
- package/dist/store/json-store.d.ts.map +1 -0
- package/dist/store/json-store.js +65 -0
- package/dist/store/json-store.js.map +1 -0
- package/dist/store/policy-store.d.ts +3 -0
- package/dist/store/policy-store.d.ts.map +1 -0
- package/dist/store/policy-store.js +65 -0
- package/dist/store/policy-store.js.map +1 -0
- package/dist/store/repo-root.d.ts +46 -0
- package/dist/store/repo-root.d.ts.map +1 -0
- package/dist/store/repo-root.js +145 -0
- package/dist/store/repo-root.js.map +1 -0
- package/dist/store/rules.d.ts +53 -0
- package/dist/store/rules.d.ts.map +1 -0
- package/dist/store/rules.js +78 -0
- package/dist/store/rules.js.map +1 -0
- package/dist/store/specs-store.d.ts +3 -0
- package/dist/store/specs-store.d.ts.map +1 -0
- package/dist/store/specs-store.js +131 -0
- package/dist/store/specs-store.js.map +1 -0
- package/dist/store/types.d.ts +84 -0
- package/dist/store/types.d.ts.map +1 -0
- package/dist/store/types.js +14 -0
- package/dist/store/types.js.map +1 -0
- package/dist/store/waivers-store.d.ts +25 -0
- package/dist/store/waivers-store.d.ts.map +1 -0
- package/dist/store/waivers-store.js +232 -0
- package/dist/store/waivers-store.js.map +1 -0
- package/dist/store/worktrees-store.d.ts +3 -0
- package/dist/store/worktrees-store.d.ts.map +1 -0
- package/dist/store/worktrees-store.js +62 -0
- package/dist/store/worktrees-store.js.map +1 -0
- package/dist/store/yaml-store.d.ts +9 -0
- package/dist/store/yaml-store.d.ts.map +1 -0
- package/dist/store/yaml-store.js +121 -0
- package/dist/store/yaml-store.js.map +1 -0
- package/package.json +15 -13
- package/dist/budget-derivation.js +0 -751
- package/dist/cicd-optimizer.js +0 -504
- package/dist/commands/agents.js +0 -124
- package/dist/commands/archive.js +0 -500
- package/dist/commands/burnup.js +0 -198
- package/dist/commands/diagnose.js +0 -525
- package/dist/commands/evaluate.js +0 -314
- package/dist/commands/gates.js +0 -149
- package/dist/commands/init.js +0 -857
- package/dist/commands/iterate.js +0 -417
- package/dist/commands/mode.js +0 -269
- package/dist/commands/parallel.js +0 -242
- package/dist/commands/plan.js +0 -438
- package/dist/commands/provenance.js +0 -1143
- package/dist/commands/quality-monitor.js +0 -284
- package/dist/commands/scope.js +0 -264
- package/dist/commands/session.js +0 -312
- package/dist/commands/sidecar.js +0 -74
- package/dist/commands/specs.js +0 -1656
- package/dist/commands/status.js +0 -1172
- package/dist/commands/templates.js +0 -237
- package/dist/commands/tool.js +0 -136
- package/dist/commands/tutorial.js +0 -480
- package/dist/commands/validate.js +0 -357
- package/dist/commands/verify-acs.js +0 -443
- package/dist/commands/waivers.js +0 -599
- package/dist/commands/workflow.js +0 -243
- package/dist/commands/worktree.js +0 -502
- package/dist/config/lite-scope.js +0 -158
- package/dist/config/modes.js +0 -347
- package/dist/constants/spec-types.js +0 -65
- package/dist/gates/budget-limit.js +0 -121
- package/dist/gates/feedback.js +0 -260
- package/dist/gates/format.js +0 -179
- package/dist/gates/god-object.js +0 -117
- package/dist/gates/pipeline.js +0 -167
- package/dist/gates/scope-boundary.js +0 -112
- package/dist/gates/spec-completeness.js +0 -109
- package/dist/gates/todo-detection.js +0 -205
- package/dist/generators/jest-config-generator.js +0 -242
- package/dist/generators/working-spec.js +0 -237
- package/dist/minimal-cli.js +0 -88
- package/dist/parallel/parallel-manager.js +0 -433
- package/dist/policy/PolicyManager.js +0 -470
- package/dist/scaffold/claude-hooks.js +0 -443
- package/dist/scaffold/cursor-hooks.js +0 -177
- package/dist/scaffold/git-hooks.js +0 -928
- package/dist/scaffold/index.js +0 -794
- package/dist/session/session-manager.js +0 -653
- package/dist/sidecars/index.js +0 -33
- package/dist/sidecars/listeners.js +0 -40
- package/dist/sidecars/provenance-summary.js +0 -238
- package/dist/sidecars/quality-gaps.js +0 -258
- package/dist/sidecars/schema.js +0 -149
- package/dist/sidecars/spec-drift.js +0 -151
- package/dist/sidecars/waiver-draft.js +0 -176
- package/dist/spec/SpecFileManager.js +0 -419
- package/dist/templates/.caws/schemas/policy.schema.json +0 -117
- package/dist/templates/.caws/schemas/scope.schema.json +0 -52
- package/dist/templates/.caws/schemas/waivers.schema.json +0 -106
- package/dist/templates/.caws/schemas/working-spec.schema.json +0 -340
- package/dist/templates/.caws/schemas/worktrees.schema.json +0 -38
- package/dist/templates/.caws/templates/working-spec.template.yml +0 -80
- package/dist/templates/.caws/tools/README.md +0 -18
- package/dist/templates/.caws/tools/scope-guard.js +0 -203
- package/dist/templates/.caws/tools-allow.json +0 -331
- package/dist/templates/.caws/waivers.yml +0 -19
- package/dist/templates/.claude/README.md +0 -190
- package/dist/templates/.claude/hooks/audit.sh +0 -121
- package/dist/templates/.claude/hooks/block-dangerous.sh +0 -203
- package/dist/templates/.claude/hooks/classify_command.py +0 -592
- package/dist/templates/.claude/hooks/doc-frontmatter-check.sh +0 -173
- package/dist/templates/.claude/hooks/lite-sprawl-check.sh +0 -145
- package/dist/templates/.claude/hooks/naming-check.sh +0 -100
- package/dist/templates/.claude/hooks/protected-paths.sh +0 -39
- package/dist/templates/.claude/hooks/quality-check.sh +0 -81
- package/dist/templates/.claude/hooks/scan-secrets.sh +0 -85
- package/dist/templates/.claude/hooks/scope-guard.sh +0 -381
- package/dist/templates/.claude/hooks/session-caws-status.sh +0 -117
- package/dist/templates/.claude/hooks/session-log.sh +0 -634
- package/dist/templates/.claude/hooks/simplification-guard.sh +0 -92
- package/dist/templates/.claude/hooks/stop-worktree-check.sh +0 -46
- package/dist/templates/.claude/hooks/test_classify_command.py +0 -370
- package/dist/templates/.claude/hooks/test_wrapper_smoke.sh +0 -96
- package/dist/templates/.claude/hooks/validate-spec.sh +0 -76
- package/dist/templates/.claude/hooks/worktree-guard.sh +0 -220
- package/dist/templates/.claude/hooks/worktree-write-guard.sh +0 -190
- package/dist/templates/.claude/rules/git-safety.md +0 -26
- package/dist/templates/.claude/rules/worktree-isolation.md +0 -101
- package/dist/templates/.claude/settings.json +0 -141
- package/dist/templates/.cursor/README.md +0 -299
- package/dist/templates/.cursor/hooks/audit.sh +0 -55
- package/dist/templates/.cursor/hooks/block-dangerous.sh +0 -84
- package/dist/templates/.cursor/hooks/caws-quality-check.sh +0 -52
- package/dist/templates/.cursor/hooks/caws-scope-guard.sh +0 -130
- package/dist/templates/.cursor/hooks/format.sh +0 -38
- package/dist/templates/.cursor/hooks/naming-check.sh +0 -64
- package/dist/templates/.cursor/hooks/scan-secrets.sh +0 -51
- package/dist/templates/.cursor/hooks/scope-guard.sh +0 -52
- package/dist/templates/.cursor/hooks/session-log.sh +0 -924
- package/dist/templates/.cursor/hooks/validate-spec.sh +0 -83
- package/dist/templates/.cursor/hooks.json +0 -76
- package/dist/templates/.cursor/rules/00-claims-verification.mdc +0 -144
- package/dist/templates/.cursor/rules/01-working-style.mdc +0 -50
- package/dist/templates/.cursor/rules/02-quality-gates.mdc +0 -368
- package/dist/templates/.cursor/rules/03-naming-and-refactor.mdc +0 -33
- package/dist/templates/.cursor/rules/04-logging-language-style.mdc +0 -23
- package/dist/templates/.cursor/rules/05-safe-defaults-guards.mdc +0 -23
- package/dist/templates/.cursor/rules/06-typescript-conventions.mdc +0 -36
- package/dist/templates/.cursor/rules/07-process-ops.mdc +0 -20
- package/dist/templates/.cursor/rules/08-solid-and-architecture.mdc +0 -16
- package/dist/templates/.cursor/rules/09-docstrings.mdc +0 -89
- package/dist/templates/.cursor/rules/10-documentation-quality-standards.mdc +0 -385
- package/dist/templates/.cursor/rules/11-scope-management-waivers.mdc +0 -381
- package/dist/templates/.cursor/rules/12-implementation-completeness.mdc +0 -516
- package/dist/templates/.cursor/rules/13-language-agnostic-standards.mdc +0 -578
- package/dist/templates/.cursor/rules/README.md +0 -148
- package/dist/templates/.github/copilot-instructions.md +0 -82
- package/dist/templates/.idea/runConfigurations/CAWS_Evaluate.xml +0 -5
- package/dist/templates/.idea/runConfigurations/CAWS_Validate.xml +0 -5
- package/dist/templates/.junie/guidelines.md +0 -73
- package/dist/templates/.vscode/launch.json +0 -17
- package/dist/templates/.vscode/settings.json +0 -95
- package/dist/templates/.windsurf/rules/caws-quality-standards.md +0 -54
- package/dist/templates/.windsurf/workflows/caws-guided-development.md +0 -92
- package/dist/templates/CLAUDE.md +0 -196
- package/dist/templates/COMMIT_CONVENTIONS.md +0 -86
- package/dist/templates/OIDC_SETUP.md +0 -300
- package/dist/templates/agents.md +0 -171
- package/dist/templates/codemod/README.md +0 -1
- package/dist/templates/codemod/test.js +0 -93
- package/dist/templates/docs/README.md +0 -151
- package/dist/templates/scripts/new_feature.sh +0 -80
- package/dist/templates/scripts/quality-gates/check-god-objects.js +0 -146
- package/dist/templates/scripts/quality-gates/run-quality-gates.js +0 -50
- package/dist/templates/scripts/v3/analysis/todo_analyzer.py +0 -1997
- package/dist/test-analysis.js +0 -786
- package/dist/tool-interface.js +0 -314
- package/dist/tool-loader.js +0 -303
- package/dist/tool-validator.js +0 -393
- package/dist/utils/agent-display.js +0 -210
- package/dist/utils/agent-session.js +0 -344
- package/dist/utils/async-utils.js +0 -188
- package/dist/utils/command-wrapper.js +0 -200
- package/dist/utils/event-log.js +0 -584
- package/dist/utils/event-renderer.js +0 -521
- package/dist/utils/finalization.js +0 -230
- package/dist/utils/git-lock.js +0 -119
- package/dist/utils/gitignore-updater.js +0 -158
- package/dist/utils/ide-detection.js +0 -133
- package/dist/utils/lifecycle-events.js +0 -94
- package/dist/utils/project-analysis.js +0 -367
- package/dist/utils/promise-utils.js +0 -72
- package/dist/utils/quality-gates-errors.js +0 -520
- package/dist/utils/quality-gates-utils.js +0 -387
- package/dist/utils/schema-validator.js +0 -50
- package/dist/utils/spec-resolver.js +0 -711
- package/dist/utils/typescript-detector.js +0 -369
- package/dist/utils/working-state.js +0 -530
- package/dist/utils/yaml-validation.js +0 -156
- package/dist/validation/spec-validation.js +0 -924
- package/dist/waivers-manager.js +0 -732
- package/dist/worktree/worktree-manager.js +0 -1735
- package/templates/.caws/schemas/policy.schema.json +0 -117
- package/templates/.caws/schemas/scope.schema.json +0 -52
- package/templates/.caws/schemas/waivers.schema.json +0 -106
- package/templates/.caws/schemas/working-spec.schema.json +0 -340
- package/templates/.caws/schemas/worktrees.schema.json +0 -38
- package/templates/.caws/templates/working-spec.template.yml +0 -80
- package/templates/.caws/tools/README.md +0 -18
- package/templates/.caws/tools/scope-guard.js +0 -203
- package/templates/.caws/tools-allow.json +0 -331
- package/templates/.caws/waivers.yml +0 -19
- package/templates/.claude/README.md +0 -190
- package/templates/.claude/hooks/audit.sh +0 -121
- package/templates/.claude/hooks/block-dangerous.sh +0 -203
- package/templates/.claude/hooks/classify_command.py +0 -592
- package/templates/.claude/hooks/doc-frontmatter-check.sh +0 -173
- package/templates/.claude/hooks/lite-sprawl-check.sh +0 -145
- package/templates/.claude/hooks/naming-check.sh +0 -100
- package/templates/.claude/hooks/protected-paths.sh +0 -39
- package/templates/.claude/hooks/quality-check.sh +0 -81
- package/templates/.claude/hooks/scan-secrets.sh +0 -85
- package/templates/.claude/hooks/scope-guard.sh +0 -381
- package/templates/.claude/hooks/session-caws-status.sh +0 -117
- package/templates/.claude/hooks/session-log.sh +0 -634
- package/templates/.claude/hooks/simplification-guard.sh +0 -92
- package/templates/.claude/hooks/stop-worktree-check.sh +0 -46
- package/templates/.claude/hooks/test_classify_command.py +0 -370
- package/templates/.claude/hooks/test_wrapper_smoke.sh +0 -96
- package/templates/.claude/hooks/validate-spec.sh +0 -76
- package/templates/.claude/hooks/worktree-guard.sh +0 -220
- package/templates/.claude/hooks/worktree-write-guard.sh +0 -190
- package/templates/.claude/rules/git-safety.md +0 -26
- package/templates/.claude/rules/worktree-isolation.md +0 -101
- package/templates/.claude/settings.json +0 -141
- package/templates/.cursor/README.md +0 -299
- package/templates/.cursor/hooks/audit.sh +0 -55
- package/templates/.cursor/hooks/block-dangerous.sh +0 -84
- package/templates/.cursor/hooks/caws-quality-check.sh +0 -52
- package/templates/.cursor/hooks/caws-scope-guard.sh +0 -130
- package/templates/.cursor/hooks/format.sh +0 -38
- package/templates/.cursor/hooks/naming-check.sh +0 -64
- package/templates/.cursor/hooks/scan-secrets.sh +0 -51
- package/templates/.cursor/hooks/scope-guard.sh +0 -52
- package/templates/.cursor/hooks/session-log.sh +0 -924
- package/templates/.cursor/hooks/validate-spec.sh +0 -83
- package/templates/.cursor/hooks.json +0 -76
- package/templates/.cursor/rules/00-claims-verification.mdc +0 -144
- package/templates/.cursor/rules/01-working-style.mdc +0 -50
- package/templates/.cursor/rules/02-quality-gates.mdc +0 -368
- package/templates/.cursor/rules/03-naming-and-refactor.mdc +0 -33
- package/templates/.cursor/rules/04-logging-language-style.mdc +0 -23
- package/templates/.cursor/rules/05-safe-defaults-guards.mdc +0 -23
- package/templates/.cursor/rules/06-typescript-conventions.mdc +0 -36
- package/templates/.cursor/rules/07-process-ops.mdc +0 -20
- package/templates/.cursor/rules/08-solid-and-architecture.mdc +0 -16
- package/templates/.cursor/rules/09-docstrings.mdc +0 -89
- package/templates/.cursor/rules/10-documentation-quality-standards.mdc +0 -385
- package/templates/.cursor/rules/11-scope-management-waivers.mdc +0 -381
- package/templates/.cursor/rules/12-implementation-completeness.mdc +0 -516
- package/templates/.cursor/rules/13-language-agnostic-standards.mdc +0 -578
- package/templates/.cursor/rules/README.md +0 -148
- package/templates/.github/copilot-instructions.md +0 -82
- package/templates/.idea/runConfigurations/CAWS_Evaluate.xml +0 -5
- package/templates/.idea/runConfigurations/CAWS_Validate.xml +0 -5
- package/templates/.junie/guidelines.md +0 -73
- package/templates/.vscode/launch.json +0 -17
- package/templates/.vscode/settings.json +0 -95
- package/templates/.windsurf/rules/caws-quality-standards.md +0 -54
- package/templates/.windsurf/workflows/caws-guided-development.md +0 -92
- package/templates/CLAUDE.md +0 -196
- package/templates/COMMIT_CONVENTIONS.md +0 -86
- package/templates/OIDC_SETUP.md +0 -300
- package/templates/agents.md +0 -171
- package/templates/codemod/README.md +0 -1
- package/templates/codemod/test.js +0 -93
- package/templates/docs/README.md +0 -151
- package/templates/scripts/new_feature.sh +0 -80
- package/templates/scripts/quality-gates/check-god-objects.js +0 -146
- package/templates/scripts/quality-gates/run-quality-gates.js +0 -50
- package/templates/scripts/v3/analysis/todo_analyzer.py +0 -1997
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Pure string-formatter for scope Decision.
|
|
3
|
+
//
|
|
4
|
+
// The renderer prints exactly one Decision. It distinguishes:
|
|
5
|
+
//
|
|
6
|
+
// admit → "ADMIT <rule>: <message> @ <path>"
|
|
7
|
+
// reject → "REJECT <rule>: <message> @ <path>"
|
|
8
|
+
// invalid_path → "INVALID <rule>: <message>"
|
|
9
|
+
// no_authority (unbound,
|
|
10
|
+
// outside worktree) → "NO AUTHORITY scope.no_authority.unbound (outside any worktree): ..."
|
|
11
|
+
// no_authority (unbound,
|
|
12
|
+
// tracked but unbound) → "NO AUTHORITY scope.no_authority.unbound (worktree <name> not bound to a spec): ..."
|
|
13
|
+
// no_authority (one_sided) → "NO AUTHORITY scope.no_authority.binding_one_sided: ..."
|
|
14
|
+
//
|
|
15
|
+
// The shell-side nuance ("outside any worktree" vs "tracked worktree
|
|
16
|
+
// without spec") comes from the optional `boundContext` arg. The kernel
|
|
17
|
+
// rule id stays the same in both cases — agents can rely on it as a stable
|
|
18
|
+
// handle — but the human prose tells the user which repair to perform.
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.renderDecision = renderDecision;
|
|
21
|
+
const KIND_LABEL = {
|
|
22
|
+
admit: 'ADMIT ',
|
|
23
|
+
reject: 'REJECT ',
|
|
24
|
+
no_authority: 'NO AUTHORITY',
|
|
25
|
+
invalid_path: 'INVALID ',
|
|
26
|
+
};
|
|
27
|
+
function renderDecision(decision, opts = {}) {
|
|
28
|
+
const lines = [];
|
|
29
|
+
const label = KIND_LABEL[decision.kind];
|
|
30
|
+
const nuance = unboundNuance(decision, opts.boundContext);
|
|
31
|
+
const ruleLabel = nuance !== '' ? `${decision.rule} ${nuance}` : decision.rule;
|
|
32
|
+
lines.push(`${label} ${ruleLabel}`);
|
|
33
|
+
lines.push(` path: ${decision.path}`);
|
|
34
|
+
if (typeof decision.normalizedPath === 'string' &&
|
|
35
|
+
decision.normalizedPath !== decision.path) {
|
|
36
|
+
lines.push(` normalized: ${decision.normalizedPath}`);
|
|
37
|
+
}
|
|
38
|
+
lines.push(` message: ${decision.message}`);
|
|
39
|
+
if (typeof decision.narrowRepair === 'string' &&
|
|
40
|
+
decision.narrowRepair.length > 0) {
|
|
41
|
+
lines.push(` repair: ${decision.narrowRepair}`);
|
|
42
|
+
}
|
|
43
|
+
if (opts.showData === true && decision.data !== undefined) {
|
|
44
|
+
lines.push(` data: ${JSON.stringify(decision.data)}`);
|
|
45
|
+
}
|
|
46
|
+
lines.push(` binding: ${decision.bindingState}`);
|
|
47
|
+
return lines.join('\n');
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* For `no_authority` + unbound, append a parenthetical that explains which
|
|
51
|
+
* shell-side state produced the unbound decision. For every other kind,
|
|
52
|
+
* return ''.
|
|
53
|
+
*/
|
|
54
|
+
function unboundNuance(decision, boundContext) {
|
|
55
|
+
if (decision.kind !== 'no_authority')
|
|
56
|
+
return '';
|
|
57
|
+
if (decision.bindingState !== 'unbound')
|
|
58
|
+
return '';
|
|
59
|
+
if (boundContext === undefined)
|
|
60
|
+
return '';
|
|
61
|
+
if (typeof boundContext.worktreeName === 'string') {
|
|
62
|
+
return `(tracked worktree '${boundContext.worktreeName}' has no bound spec)`;
|
|
63
|
+
}
|
|
64
|
+
return '(cwd is outside any CAWS-tracked worktree)';
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=decision.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decision.js","sourceRoot":"","sources":["../../../src/shell/render/decision.ts"],"names":[],"mappings":";AAAA,4CAA4C;AAC5C,EAAE;AACF,8DAA8D;AAC9D,EAAE;AACF,kEAAkE;AAClE,kEAAkE;AAClE,0DAA0D;AAC1D,2BAA2B;AAC3B,oGAAoG;AACpG,2BAA2B;AAC3B,qHAAqH;AACrH,wFAAwF;AACxF,EAAE;AACF,qEAAqE;AACrE,wEAAwE;AACxE,2EAA2E;AAC3E,uEAAuE;;AAwBvE,wCA4BC;AAnCD,MAAM,UAAU,GAAqC;IACnD,KAAK,EAAE,cAAc;IACrB,MAAM,EAAE,cAAc;IACtB,YAAY,EAAE,cAAc;IAC5B,YAAY,EAAE,cAAc;CAC7B,CAAC;AAEF,SAAgB,cAAc,CAC5B,QAAkB,EAClB,OAA8B,EAAE;IAEhC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC/E,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,SAAS,EAAE,CAAC,CAAC;IACpC,KAAK,CAAC,IAAI,CAAC,yBAAyB,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACrD,IACE,OAAO,QAAQ,CAAC,cAAc,KAAK,QAAQ;QAC3C,QAAQ,CAAC,cAAc,KAAK,QAAQ,CAAC,IAAI,EACzC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,4BAA4B,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,yBAAyB,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACxD,IACE,OAAO,QAAQ,CAAC,YAAY,KAAK,QAAQ;QACzC,QAAQ,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAChC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,yBAAyB,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC1D,KAAK,CAAC,IAAI,CAAC,yBAAyB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,yBAAyB,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;IAC7D,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;GAIG;AACH,SAAS,aAAa,CACpB,QAAkB,EAClB,YAAyC;IAEzC,IAAI,QAAQ,CAAC,IAAI,KAAK,cAAc;QAAE,OAAO,EAAE,CAAC;IAChD,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACnD,IAAI,YAAY,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAC1C,IAAI,OAAO,YAAY,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;QAClD,OAAO,sBAAsB,YAAY,CAAC,YAAY,sBAAsB,CAAC;IAC/E,CAAC;IACD,OAAO,4CAA4C,CAAC;AACtD,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Diagnostic, Severity } from '@paths.design/caws-kernel';
|
|
2
|
+
export interface RenderDiagnosticsOptions {
|
|
3
|
+
/** Show the optional `data` block. Default false (keeps output tight). */
|
|
4
|
+
readonly showData?: boolean;
|
|
5
|
+
/** Hide diagnostics below this severity. Default: render all. */
|
|
6
|
+
readonly minSeverity?: Severity;
|
|
7
|
+
}
|
|
8
|
+
export declare function renderDiagnostic(d: Diagnostic, opts?: RenderDiagnosticsOptions): string;
|
|
9
|
+
export declare function renderDiagnostics(diagnostics: readonly Diagnostic[], opts?: RenderDiagnosticsOptions): string;
|
|
10
|
+
/**
|
|
11
|
+
* Count severities in a Diagnostic[]. Exposed for callers that want a
|
|
12
|
+
* one-line summary without re-walking the list.
|
|
13
|
+
*/
|
|
14
|
+
export declare function countSeverities(diagnostics: readonly Diagnostic[]): {
|
|
15
|
+
readonly errors: number;
|
|
16
|
+
readonly warnings: number;
|
|
17
|
+
readonly infos: number;
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=diagnostic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostic.d.ts","sourceRoot":"","sources":["../../../src/shell/render/diagnostic.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAEtE,MAAM,WAAW,wBAAwB;IACvC,0EAA0E;IAC1E,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,iEAAiE;IACjE,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC;CACjC;AAkBD,wBAAgB,gBAAgB,CAC9B,CAAC,EAAE,UAAU,EACb,IAAI,GAAE,wBAA6B,GAClC,MAAM,CAaR;AAED,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,SAAS,UAAU,EAAE,EAClC,IAAI,GAAE,wBAA6B,GAClC,MAAM,CAQR;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,GAAG;IACnE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CAWA"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Pure string-formatter for kernel/store/shell Diagnostic[].
|
|
3
|
+
//
|
|
4
|
+
// Renderer keys presentation off `severity` and the `rule` prefix only.
|
|
5
|
+
// It does NOT inspect `authority`, does NOT compute exit codes, does NOT
|
|
6
|
+
// read files, does NOT call any kernel or store function, and does NOT
|
|
7
|
+
// mutate the input.
|
|
8
|
+
//
|
|
9
|
+
// Format:
|
|
10
|
+
//
|
|
11
|
+
// [ERROR ] <rule.id>: <message>
|
|
12
|
+
// subject: <subject>
|
|
13
|
+
// repair: <narrowRepair>
|
|
14
|
+
// data: {json}
|
|
15
|
+
//
|
|
16
|
+
// Severity bracket is fixed-width so output columns align. Rule id is
|
|
17
|
+
// always present — agents key off it; the message is human prose only.
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.renderDiagnostic = renderDiagnostic;
|
|
20
|
+
exports.renderDiagnostics = renderDiagnostics;
|
|
21
|
+
exports.countSeverities = countSeverities;
|
|
22
|
+
const SEVERITY_RANK = {
|
|
23
|
+
info: 0,
|
|
24
|
+
warning: 1,
|
|
25
|
+
error: 2,
|
|
26
|
+
};
|
|
27
|
+
const SEVERITY_LABEL = {
|
|
28
|
+
info: '[INFO ]',
|
|
29
|
+
warning: '[WARN ]',
|
|
30
|
+
error: '[ERROR ]',
|
|
31
|
+
};
|
|
32
|
+
function severityOf(d) {
|
|
33
|
+
return d.severity ?? 'error';
|
|
34
|
+
}
|
|
35
|
+
function renderDiagnostic(d, opts = {}) {
|
|
36
|
+
const sev = severityOf(d);
|
|
37
|
+
const lines = [`${SEVERITY_LABEL[sev]} ${d.rule}: ${d.message}`];
|
|
38
|
+
if (typeof d.subject === 'string' && d.subject.length > 0) {
|
|
39
|
+
lines.push(` subject: ${d.subject}`);
|
|
40
|
+
}
|
|
41
|
+
if (typeof d.narrowRepair === 'string' && d.narrowRepair.length > 0) {
|
|
42
|
+
lines.push(` repair: ${d.narrowRepair}`);
|
|
43
|
+
}
|
|
44
|
+
if (opts.showData === true && d.data !== undefined) {
|
|
45
|
+
lines.push(` data: ${JSON.stringify(d.data)}`);
|
|
46
|
+
}
|
|
47
|
+
return lines.join('\n');
|
|
48
|
+
}
|
|
49
|
+
function renderDiagnostics(diagnostics, opts = {}) {
|
|
50
|
+
const min = opts.minSeverity ?? 'info';
|
|
51
|
+
const minRank = SEVERITY_RANK[min];
|
|
52
|
+
const kept = diagnostics.filter((d) => SEVERITY_RANK[severityOf(d)] >= minRank);
|
|
53
|
+
if (kept.length === 0)
|
|
54
|
+
return '';
|
|
55
|
+
return kept.map((d) => renderDiagnostic(d, opts)).join('\n');
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Count severities in a Diagnostic[]. Exposed for callers that want a
|
|
59
|
+
* one-line summary without re-walking the list.
|
|
60
|
+
*/
|
|
61
|
+
function countSeverities(diagnostics) {
|
|
62
|
+
let errors = 0;
|
|
63
|
+
let warnings = 0;
|
|
64
|
+
let infos = 0;
|
|
65
|
+
for (const d of diagnostics) {
|
|
66
|
+
const s = severityOf(d);
|
|
67
|
+
if (s === 'error')
|
|
68
|
+
errors++;
|
|
69
|
+
else if (s === 'warning')
|
|
70
|
+
warnings++;
|
|
71
|
+
else
|
|
72
|
+
infos++;
|
|
73
|
+
}
|
|
74
|
+
return { errors, warnings, infos };
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=diagnostic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostic.js","sourceRoot":"","sources":["../../../src/shell/render/diagnostic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { DoctorFinding, FindingSeverity } from '@paths.design/caws-kernel';
|
|
2
|
+
export interface RenderFindingsOptions {
|
|
3
|
+
/** Show the optional `data` block. Default false. */
|
|
4
|
+
readonly showData?: boolean;
|
|
5
|
+
/** Hide findings below this severity. Default: render all. */
|
|
6
|
+
readonly minSeverity?: FindingSeverity;
|
|
7
|
+
}
|
|
8
|
+
export declare function renderFinding(f: DoctorFinding, opts?: RenderFindingsOptions): string;
|
|
9
|
+
export declare function renderFindings(findings: readonly DoctorFinding[], opts?: RenderFindingsOptions): string;
|
|
10
|
+
export declare function countFindingSeverities(findings: readonly DoctorFinding[]): {
|
|
11
|
+
readonly errors: number;
|
|
12
|
+
readonly warnings: number;
|
|
13
|
+
readonly infos: number;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=finding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finding.d.ts","sourceRoot":"","sources":["../../../src/shell/render/finding.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAchF,MAAM,WAAW,qBAAqB;IACpC,qDAAqD;IACrD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,8DAA8D;IAC9D,QAAQ,CAAC,WAAW,CAAC,EAAE,eAAe,CAAC;CACxC;AAED,wBAAgB,aAAa,CAC3B,CAAC,EAAE,aAAa,EAChB,IAAI,GAAE,qBAA0B,GAC/B,MAAM,CAYR;AAED,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,SAAS,aAAa,EAAE,EAClC,IAAI,GAAE,qBAA0B,GAC/B,MAAM,CAMR;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,SAAS,aAAa,EAAE,GACjC;IACD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CAUA"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Pure string-formatter for kernel DoctorFinding[].
|
|
3
|
+
//
|
|
4
|
+
// DoctorFinding has the same envelope as Diagnostic. We render with a
|
|
5
|
+
// slightly different label set to make it visible which list the user
|
|
6
|
+
// is reading. The doctor command keeps store load diagnostics SEPARATE
|
|
7
|
+
// from these findings (the renderer doesn't merge them).
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.renderFinding = renderFinding;
|
|
10
|
+
exports.renderFindings = renderFindings;
|
|
11
|
+
exports.countFindingSeverities = countFindingSeverities;
|
|
12
|
+
const SEVERITY_RANK = {
|
|
13
|
+
info: 0,
|
|
14
|
+
warning: 1,
|
|
15
|
+
error: 2,
|
|
16
|
+
};
|
|
17
|
+
const SEVERITY_LABEL = {
|
|
18
|
+
info: '[INFO ]',
|
|
19
|
+
warning: '[WARN ]',
|
|
20
|
+
error: '[ERROR ]',
|
|
21
|
+
};
|
|
22
|
+
function renderFinding(f, opts = {}) {
|
|
23
|
+
const lines = [`${SEVERITY_LABEL[f.severity]} ${f.rule}: ${f.message}`];
|
|
24
|
+
if (typeof f.subject === 'string' && f.subject.length > 0) {
|
|
25
|
+
lines.push(` subject: ${f.subject}`);
|
|
26
|
+
}
|
|
27
|
+
if (typeof f.narrowRepair === 'string' && f.narrowRepair.length > 0) {
|
|
28
|
+
lines.push(` repair: ${f.narrowRepair}`);
|
|
29
|
+
}
|
|
30
|
+
if (opts.showData === true && f.data !== undefined) {
|
|
31
|
+
lines.push(` data: ${JSON.stringify(f.data)}`);
|
|
32
|
+
}
|
|
33
|
+
return lines.join('\n');
|
|
34
|
+
}
|
|
35
|
+
function renderFindings(findings, opts = {}) {
|
|
36
|
+
const min = opts.minSeverity ?? 'info';
|
|
37
|
+
const minRank = SEVERITY_RANK[min];
|
|
38
|
+
const kept = findings.filter((f) => SEVERITY_RANK[f.severity] >= minRank);
|
|
39
|
+
if (kept.length === 0)
|
|
40
|
+
return '';
|
|
41
|
+
return kept.map((f) => renderFinding(f, opts)).join('\n');
|
|
42
|
+
}
|
|
43
|
+
function countFindingSeverities(findings) {
|
|
44
|
+
let errors = 0;
|
|
45
|
+
let warnings = 0;
|
|
46
|
+
let infos = 0;
|
|
47
|
+
for (const f of findings) {
|
|
48
|
+
if (f.severity === 'error')
|
|
49
|
+
errors++;
|
|
50
|
+
else if (f.severity === 'warning')
|
|
51
|
+
warnings++;
|
|
52
|
+
else
|
|
53
|
+
infos++;
|
|
54
|
+
}
|
|
55
|
+
return { errors, warnings, infos };
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=finding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finding.js","sourceRoot":"","sources":["../../../src/shell/render/finding.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,EAAE;AACF,sEAAsE;AACtE,sEAAsE;AACtE,uEAAuE;AACvE,yDAAyD;;AAuBzD,sCAeC;AAED,wCASC;AAED,wDAgBC;AA/DD,MAAM,aAAa,GAAoC;IACrD,IAAI,EAAE,CAAC;IACP,OAAO,EAAE,CAAC;IACV,KAAK,EAAE,CAAC;CACT,CAAC;AAEF,MAAM,cAAc,GAAoC;IACtD,IAAI,EAAE,WAAW;IACjB,OAAO,EAAE,WAAW;IACpB,KAAK,EAAE,WAAW;CACnB,CAAC;AASF,SAAgB,aAAa,CAC3B,CAAgB,EAChB,OAA8B,EAAE;IAEhC,MAAM,KAAK,GAAa,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAClF,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1D,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,OAAO,CAAC,CAAC,YAAY,KAAK,QAAQ,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpE,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,wBAAwB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAgB,cAAc,CAC5B,QAAkC,EAClC,OAA8B,EAAE;IAEhC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC;IACvC,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,CAAC;IAC1E,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5D,CAAC;AAED,SAAgB,sBAAsB,CACpC,QAAkC;IAMlC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,QAAQ,KAAK,OAAO;YAAE,MAAM,EAAE,CAAC;aAChC,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS;YAAE,QAAQ,EAAE,CAAC;;YACzC,KAAK,EAAE,CAAC;IACf,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gates.d.ts","sourceRoot":"","sources":["../../../src/shell/render/gates.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAa9D,wBAAgB,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAwChE"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Pure formatter for `caws gates run` output.
|
|
3
|
+
//
|
|
4
|
+
// Renders one line per policy gate disposition, plus an unmatched-violations
|
|
5
|
+
// section when subprocess gates that policy doesn't declare have violations.
|
|
6
|
+
// Rule ids are not shown here (this is a command summary, not a Diagnostic
|
|
7
|
+
// stream); each disposition carries enough text for an agent to triage.
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.renderGatesRun = renderGatesRun;
|
|
10
|
+
function outcomeLabel(o) {
|
|
11
|
+
switch (o) {
|
|
12
|
+
case 'pass':
|
|
13
|
+
return 'PASS ';
|
|
14
|
+
case 'fail':
|
|
15
|
+
return 'FAIL ';
|
|
16
|
+
case 'skipped':
|
|
17
|
+
return 'SKIPPED';
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function renderGatesRun(result) {
|
|
21
|
+
const lines = [];
|
|
22
|
+
lines.push('Gate dispositions (policy-derived):');
|
|
23
|
+
if (result.dispositions.length === 0) {
|
|
24
|
+
lines.push(' (no gates declared in policy)');
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
for (const d of result.dispositions) {
|
|
28
|
+
const blockTag = d.outcome === 'fail' ? (d.blocks ? ' [BLOCKS]' : ' [warn]') : '';
|
|
29
|
+
lines.push(` ${outcomeLabel(d.outcome)} ${d.gate_id} (mode=${d.mode}, ${d.violations.length} violations)${blockTag}`);
|
|
30
|
+
// Show first violation message per failing gate as a hint.
|
|
31
|
+
const first = d.violations[0];
|
|
32
|
+
if (first !== undefined && first.message !== undefined) {
|
|
33
|
+
lines.push(` → ${first.message}`);
|
|
34
|
+
if (d.violations.length > 1) {
|
|
35
|
+
lines.push(` … and ${d.violations.length - 1} more`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (result.unmatchedViolations.length > 0) {
|
|
41
|
+
lines.push('');
|
|
42
|
+
lines.push(`Unmatched violations (subprocess gates not declared in policy): ${result.unmatchedViolations.length}`);
|
|
43
|
+
// Group by gate for the rendered tally
|
|
44
|
+
const byGate = new Map();
|
|
45
|
+
for (const v of result.unmatchedViolations) {
|
|
46
|
+
byGate.set(v.gate, (byGate.get(v.gate) ?? 0) + 1);
|
|
47
|
+
}
|
|
48
|
+
for (const [gate, count] of byGate) {
|
|
49
|
+
lines.push(` ${gate}: ${count}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
lines.push('');
|
|
53
|
+
lines.push(`Overall: ${result.anyBlocks ? 'BLOCKED by policy' : 'OK'}`);
|
|
54
|
+
return lines.join('\n');
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=gates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gates.js","sourceRoot":"","sources":["../../../src/shell/render/gates.ts"],"names":[],"mappings":";AAAA,8CAA8C;AAC9C,EAAE;AACF,6EAA6E;AAC7E,6EAA6E;AAC7E,2EAA2E;AAC3E,wEAAwE;;AAexE,wCAwCC;AAnDD,SAAS,YAAY,CAAC,CAA8B;IAClD,QAAQ,CAAC,EAAE,CAAC;QACV,KAAK,MAAM;YACT,OAAO,SAAS,CAAC;QACnB,KAAK,MAAM;YACT,OAAO,SAAS,CAAC;QACnB,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAgB,cAAc,CAAC,MAAyB;IACtD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IAClD,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAChD,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACpC,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAClF,KAAK,CAAC,IAAI,CACR,KAAK,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,UAAU,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,UAAU,CAAC,MAAM,eAAe,QAAQ,EAAE,CAC5G,CAAC;YACF,2DAA2D;YAC3D,MAAM,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBACvD,KAAK,CAAC,IAAI,CAAC,mBAAmB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC/C,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC5B,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC;gBACpE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CACR,mEAAmE,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,CACvG,CAAC;QACF,uCAAuC;QACvC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;QACzC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,mBAAmB,EAAE,CAAC;YAC3C,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACpD,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACxE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { InitProjectResult } from '../../store';
|
|
2
|
+
export interface RenderInitInput {
|
|
3
|
+
readonly result: InitProjectResult;
|
|
4
|
+
/**
|
|
5
|
+
* Optional repo root used to render created paths relative to the
|
|
6
|
+
* project. When omitted, absolute paths are rendered as-is.
|
|
7
|
+
*/
|
|
8
|
+
readonly repoRoot?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function renderInit(input: RenderInitInput): string;
|
|
11
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/shell/render/init.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AASD,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAWzD"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Pure formatter for the `caws init` outcome.
|
|
3
|
+
//
|
|
4
|
+
// Two render shapes:
|
|
5
|
+
// - "created" → list each created path
|
|
6
|
+
// - "already_initialized" → single status line
|
|
7
|
+
//
|
|
8
|
+
// Renderer never decides outcomes; the store does. Renderer never reads
|
|
9
|
+
// `process.cwd` or `Date.now`. All inputs come from the caller.
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.renderInit = renderInit;
|
|
12
|
+
function relativize(p, repoRoot) {
|
|
13
|
+
if (repoRoot === undefined)
|
|
14
|
+
return p;
|
|
15
|
+
if (!p.startsWith(repoRoot))
|
|
16
|
+
return p;
|
|
17
|
+
const rel = p.slice(repoRoot.length);
|
|
18
|
+
return rel.startsWith('/') ? rel.slice(1) : rel;
|
|
19
|
+
}
|
|
20
|
+
function renderInit(input) {
|
|
21
|
+
const lines = [];
|
|
22
|
+
if (input.result.outcome === 'already_initialized') {
|
|
23
|
+
lines.push('caws init: project already initialized; no changes.');
|
|
24
|
+
return lines.join('\n');
|
|
25
|
+
}
|
|
26
|
+
lines.push(`caws init: created ${input.result.created.length} path(s).`);
|
|
27
|
+
for (const p of input.result.created) {
|
|
28
|
+
lines.push(` + ${relativize(p, input.repoRoot)}`);
|
|
29
|
+
}
|
|
30
|
+
return lines.join('\n');
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/shell/render/init.ts"],"names":[],"mappings":";AAAA,8CAA8C;AAC9C,EAAE;AACF,qBAAqB;AACrB,qDAAqD;AACrD,iDAAiD;AACjD,EAAE;AACF,wEAAwE;AACxE,gEAAgE;;AAoBhE,gCAWC;AAlBD,SAAS,UAAU,CAAC,CAAS,EAAE,QAAiB;IAC9C,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC;IACrC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAClD,CAAC;AAED,SAAgB,UAAU,CAAC,KAAsB;IAC/C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,KAAK,qBAAqB,EAAE,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;QAClE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,sBAAsB,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,WAAW,CAAC,CAAC;IACzE,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,OAAO,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { AgentRegistry, DoctorFinding, Spec, WorktreeRegistry } from '@paths.design/caws-kernel';
|
|
2
|
+
import type { ResolvedBinding } from '../binding/types';
|
|
3
|
+
import type { ResolvedSession } from '../session/types';
|
|
4
|
+
export interface StatusRenderInput {
|
|
5
|
+
readonly repoRoot: string;
|
|
6
|
+
readonly cawsDir: string;
|
|
7
|
+
readonly policyLoaded: boolean;
|
|
8
|
+
readonly specs: readonly Spec[];
|
|
9
|
+
readonly worktrees: WorktreeRegistry;
|
|
10
|
+
readonly agents: AgentRegistry;
|
|
11
|
+
readonly eventCount: number;
|
|
12
|
+
/** When undefined, the dashboard renders "no event chain on disk". */
|
|
13
|
+
readonly eventChainOk?: boolean;
|
|
14
|
+
/** Result of resolveBinding(cwd, ...). */
|
|
15
|
+
readonly binding: ResolvedBinding;
|
|
16
|
+
/** Result of resolveSession({ allowMint: false }). */
|
|
17
|
+
readonly session: ResolvedSession | null;
|
|
18
|
+
readonly doctorFindings: readonly DoctorFinding[];
|
|
19
|
+
readonly now: Date;
|
|
20
|
+
/** Heartbeat-stale TTL in ms; display only. Default 24h. */
|
|
21
|
+
readonly staleTtlMs?: number;
|
|
22
|
+
/** Cap on rendered top findings. Default 5. */
|
|
23
|
+
readonly findingCap?: number;
|
|
24
|
+
}
|
|
25
|
+
export declare function renderStatus(input: StatusRenderInput): string;
|
|
26
|
+
//# sourceMappingURL=status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/shell/render/status.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EACV,aAAa,EAEb,aAAa,EACb,IAAI,EAEJ,gBAAgB,EACjB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAOxD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,sEAAsE;IACtE,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAEhC,0CAA0C;IAC1C,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,sDAAsD;IACtD,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;IAEzC,QAAQ,CAAC,cAAc,EAAE,SAAS,aAAa,EAAE,CAAC;IAClD,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;IACnB,4DAA4D;IAC5D,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,+CAA+C;IAC/C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAoCD,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAmG7D"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Pure formatter for the vNext `caws status` dashboard.
|
|
3
|
+
//
|
|
4
|
+
// Read-only: the formatter inspects already-loaded state and renders a
|
|
5
|
+
// summary. It does NOT mint capsules, refresh heartbeats, write events,
|
|
6
|
+
// or mutate any registry.
|
|
7
|
+
//
|
|
8
|
+
// Composition order (sections):
|
|
9
|
+
//
|
|
10
|
+
// CAWS Status
|
|
11
|
+
//
|
|
12
|
+
// Project
|
|
13
|
+
// repo root / .caws / policy presence / specs by lifecycle /
|
|
14
|
+
// worktree count / event count
|
|
15
|
+
//
|
|
16
|
+
// Current context
|
|
17
|
+
// cwd relation: tracked / untracked / outside repo
|
|
18
|
+
// worktree name (if resolved) / bound spec id / binding state
|
|
19
|
+
// current session id (or "unresolved (read-only)")
|
|
20
|
+
//
|
|
21
|
+
// Claim (only when inside a tracked worktree)
|
|
22
|
+
// reuses renderClaimPanel — same authority discipline.
|
|
23
|
+
//
|
|
24
|
+
// Doctor
|
|
25
|
+
// error/warning/info counts; top findings, capped.
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
exports.renderStatus = renderStatus;
|
|
28
|
+
const claim_1 = require("./claim");
|
|
29
|
+
const finding_1 = require("./finding");
|
|
30
|
+
const DEFAULT_FINDING_CAP = 5;
|
|
31
|
+
function countSpecsByLifecycle(specs) {
|
|
32
|
+
const counts = {};
|
|
33
|
+
for (const s of specs) {
|
|
34
|
+
counts[s.lifecycle_state] = (counts[s.lifecycle_state] ?? 0) + 1;
|
|
35
|
+
}
|
|
36
|
+
return counts;
|
|
37
|
+
}
|
|
38
|
+
function fmtSessionTag(identity) {
|
|
39
|
+
if (identity.platform !== undefined && identity.platform.length > 0) {
|
|
40
|
+
return `${identity.session_id}:${identity.platform}`;
|
|
41
|
+
}
|
|
42
|
+
return identity.session_id;
|
|
43
|
+
}
|
|
44
|
+
function describeCwdRelation(binding) {
|
|
45
|
+
if (binding.worktreeName !== undefined)
|
|
46
|
+
return 'inside tracked worktree';
|
|
47
|
+
if (binding.source === 'none')
|
|
48
|
+
return 'main checkout (no tracked worktree match)';
|
|
49
|
+
return 'unknown';
|
|
50
|
+
}
|
|
51
|
+
function describeBindingState(state) {
|
|
52
|
+
switch (state.kind) {
|
|
53
|
+
case 'bound':
|
|
54
|
+
return `bound → ${state.spec.id} (worktree '${state.worktreeName}')`;
|
|
55
|
+
case 'one_sided':
|
|
56
|
+
return 'one_sided (corrupt asymmetric binding — see doctor)';
|
|
57
|
+
case 'unbound':
|
|
58
|
+
return 'unbound';
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function renderStatus(input) {
|
|
62
|
+
const lines = [];
|
|
63
|
+
lines.push('CAWS Status');
|
|
64
|
+
lines.push('');
|
|
65
|
+
// -------- Project --------
|
|
66
|
+
lines.push('Project');
|
|
67
|
+
lines.push(` repo root: ${input.repoRoot}`);
|
|
68
|
+
lines.push(` .caws dir: ${input.cawsDir}`);
|
|
69
|
+
lines.push(` policy: ${input.policyLoaded ? 'loaded' : 'MISSING'}`);
|
|
70
|
+
const lifecycle = countSpecsByLifecycle(input.specs);
|
|
71
|
+
const lifecycleSummary = input.specs.length === 0
|
|
72
|
+
? '0 specs'
|
|
73
|
+
: Object.entries(lifecycle)
|
|
74
|
+
.sort(([a], [b]) => a.localeCompare(b))
|
|
75
|
+
.map(([k, v]) => `${v} ${k}`)
|
|
76
|
+
.join(', ');
|
|
77
|
+
lines.push(` specs: ${lifecycleSummary}`);
|
|
78
|
+
const worktreeCount = Object.keys(input.worktrees).length;
|
|
79
|
+
lines.push(` worktrees: ${worktreeCount}`);
|
|
80
|
+
const eventLine = input.eventChainOk === undefined
|
|
81
|
+
? `${input.eventCount} events`
|
|
82
|
+
: input.eventChainOk
|
|
83
|
+
? `${input.eventCount} events (chain OK)`
|
|
84
|
+
: `${input.eventCount} events (CHAIN BROKEN — see doctor)`;
|
|
85
|
+
lines.push(` events: ${eventLine}`);
|
|
86
|
+
// -------- Current context --------
|
|
87
|
+
lines.push('');
|
|
88
|
+
lines.push('Current context');
|
|
89
|
+
lines.push(` cwd: ${describeCwdRelation(input.binding)}`);
|
|
90
|
+
if (input.binding.worktreeName !== undefined) {
|
|
91
|
+
lines.push(` worktree: ${input.binding.worktreeName}`);
|
|
92
|
+
}
|
|
93
|
+
lines.push(` binding: ${describeBindingState(input.binding.binding)}`);
|
|
94
|
+
if (input.session !== null) {
|
|
95
|
+
lines.push(` session: ${fmtSessionTag(input.session.identity)} (source: ${input.session.source})`);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
lines.push(' session: unresolved (read-only; no capsule minted)');
|
|
99
|
+
}
|
|
100
|
+
// -------- Claim (only when inside a tracked worktree) --------
|
|
101
|
+
if (input.binding.worktreeName !== undefined && input.session !== null) {
|
|
102
|
+
const wtName = input.binding.worktreeName;
|
|
103
|
+
const record = input.worktrees[wtName];
|
|
104
|
+
if (record !== undefined) {
|
|
105
|
+
lines.push('');
|
|
106
|
+
const agentRecord = record.owner !== undefined ? input.agents[record.owner.session_id] : undefined;
|
|
107
|
+
lines.push((0, claim_1.renderClaimPanel)({
|
|
108
|
+
worktreeName: wtName,
|
|
109
|
+
worktreeRecord: record,
|
|
110
|
+
...(agentRecord !== undefined ? { agentRecord } : {}),
|
|
111
|
+
currentSession: input.session.identity,
|
|
112
|
+
now: input.now,
|
|
113
|
+
...(input.staleTtlMs !== undefined ? { staleTtlMs: input.staleTtlMs } : {}),
|
|
114
|
+
}));
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// -------- Doctor --------
|
|
118
|
+
lines.push('');
|
|
119
|
+
lines.push('Doctor');
|
|
120
|
+
const counts = (0, finding_1.countFindingSeverities)(input.doctorFindings);
|
|
121
|
+
lines.push(` Summary: ${counts.errors}E / ${counts.warnings}W / ${counts.infos}I`);
|
|
122
|
+
if (input.doctorFindings.length === 0) {
|
|
123
|
+
lines.push(' (no findings)');
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
const cap = input.findingCap ?? DEFAULT_FINDING_CAP;
|
|
127
|
+
// Sort by severity rank (error > warning > info) and take top `cap`.
|
|
128
|
+
const rank = {
|
|
129
|
+
error: 0,
|
|
130
|
+
warning: 1,
|
|
131
|
+
info: 2,
|
|
132
|
+
};
|
|
133
|
+
const top = [...input.doctorFindings]
|
|
134
|
+
.sort((a, b) => rank[a.severity] - rank[b.severity])
|
|
135
|
+
.slice(0, cap);
|
|
136
|
+
lines.push((0, finding_1.renderFindings)(top));
|
|
137
|
+
if (input.doctorFindings.length > cap) {
|
|
138
|
+
lines.push(` … ${input.doctorFindings.length - cap} more — run \`caws doctor\` for full list`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return lines.join('\n');
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/shell/render/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Waiver, WaiverEffectiveness } from '@paths.design/caws-kernel';
|
|
2
|
+
export interface RenderWaiverSummaryInput {
|
|
3
|
+
readonly waiver: Waiver;
|
|
4
|
+
/** Pre-derived effectiveness from kernel.waiverEffectiveness. */
|
|
5
|
+
readonly effectiveness: WaiverEffectiveness;
|
|
6
|
+
}
|
|
7
|
+
export interface RenderWaiverDetailInput extends RenderWaiverSummaryInput {
|
|
8
|
+
/** Now, used to format expiry deltas. Caller owns the clock. */
|
|
9
|
+
readonly now: Date;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* One-line summary suited to `caws waiver list`. Includes the kernel-
|
|
13
|
+
* derived effectiveness label so the caller doesn't need to re-classify.
|
|
14
|
+
*/
|
|
15
|
+
export declare function renderWaiverSummary(input: RenderWaiverSummaryInput): string;
|
|
16
|
+
/**
|
|
17
|
+
* Multi-line detail block suited to `caws waiver show`. Includes
|
|
18
|
+
* everything `Waiver` carries plus a derived expiry delta.
|
|
19
|
+
*/
|
|
20
|
+
export declare function renderWaiverDetail(input: RenderWaiverDetailInput): string;
|
|
21
|
+
//# sourceMappingURL=waiver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"waiver.d.ts","sourceRoot":"","sources":["../../../src/shell/render/waiver.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EACV,MAAM,EACN,mBAAmB,EACpB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,iEAAiE;IACjE,QAAQ,CAAC,aAAa,EAAE,mBAAmB,CAAC;CAC7C;AAED,MAAM,WAAW,uBAAwB,SAAQ,wBAAwB;IACvE,gEAAgE;IAChE,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;CACpB;AAiCD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,GAAG,MAAM,CAI3E;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,GAAG,MAAM,CAyBzE"}
|