@paths.design/caws-cli 10.1.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 -756
- 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/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 -1448
- package/dist/commands/status.js +0 -1151
- 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 -386
- 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 -93
- 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 -465
- 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 -112
- 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 -83
- 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 -174
- package/dist/templates/COMMIT_CONVENTIONS.md +0 -86
- package/dist/templates/OIDC_SETUP.md +0 -300
- package/dist/templates/agents.md +0 -145
- 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-session.js +0 -202
- 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 -921
- package/dist/waivers-manager.js +0 -732
- package/dist/worktree/worktree-manager.js +0 -1374
- package/templates/.caws/schemas/policy.schema.json +0 -112
- 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 -83
- 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 -174
- package/templates/COMMIT_CONVENTIONS.md +0 -86
- package/templates/OIDC_SETUP.md +0 -300
- package/templates/agents.md +0 -145
- 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
|
@@ -1,525 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview CAWS Diagnose Command
|
|
3
|
-
* Run health checks and suggest fixes
|
|
4
|
-
* @author @darianrosebrook
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
const fs = require('fs-extra');
|
|
8
|
-
const path = require('path');
|
|
9
|
-
const chalk = require('chalk');
|
|
10
|
-
const { resolveSpec } = require('../utils/spec-resolver');
|
|
11
|
-
|
|
12
|
-
// Import utilities
|
|
13
|
-
const { checkTypeScriptTestConfig } = require('../utils/typescript-detector');
|
|
14
|
-
const { configureJestForTypeScript } = require('../generators/jest-config-generator');
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Health check: Working spec validity
|
|
18
|
-
* @returns {Promise<Object>} Check result
|
|
19
|
-
*/
|
|
20
|
-
async function checkWorkingSpec(options = {}) {
|
|
21
|
-
try {
|
|
22
|
-
const resolved = await resolveSpec({
|
|
23
|
-
specId: options.specId,
|
|
24
|
-
specFile: options.spec,
|
|
25
|
-
warnLegacy: false,
|
|
26
|
-
interactive: false,
|
|
27
|
-
});
|
|
28
|
-
const spec = resolved.spec;
|
|
29
|
-
const specPath = path.relative(process.cwd(), resolved.path);
|
|
30
|
-
|
|
31
|
-
// Basic validation
|
|
32
|
-
if (!spec.id || !spec.title || !spec.risk_tier) {
|
|
33
|
-
return {
|
|
34
|
-
passed: false,
|
|
35
|
-
severity: 'high',
|
|
36
|
-
message: `Spec missing required fields (${specPath})`,
|
|
37
|
-
fix: 'Run: caws validate for details',
|
|
38
|
-
autoFixable: false,
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
return {
|
|
43
|
-
passed: true,
|
|
44
|
-
message: `Spec is valid (${specPath})`,
|
|
45
|
-
};
|
|
46
|
-
} catch (error) {
|
|
47
|
-
if (error.message === 'Spec ID required when multiple specs exist' && !options.specId) {
|
|
48
|
-
return {
|
|
49
|
-
passed: false,
|
|
50
|
-
severity: 'high',
|
|
51
|
-
message: 'Multiple specs detected, but no --spec-id was provided',
|
|
52
|
-
fix: 'Run: caws diagnose --spec-id <id>',
|
|
53
|
-
autoFixable: false,
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
if (error.message.includes('No CAWS spec found')) {
|
|
57
|
-
return {
|
|
58
|
-
passed: false,
|
|
59
|
-
severity: 'high',
|
|
60
|
-
message: 'No CAWS spec found',
|
|
61
|
-
fix: 'Initialize CAWS: caws init . or create a feature spec with caws specs create <id>',
|
|
62
|
-
autoFixable: false,
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
return {
|
|
66
|
-
passed: false,
|
|
67
|
-
severity: 'high',
|
|
68
|
-
message: `Spec has errors: ${error.message}`,
|
|
69
|
-
fix: 'Run: caws validate for details',
|
|
70
|
-
autoFixable: false,
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* Health check: Git repository
|
|
77
|
-
* @returns {Promise<Object>} Check result
|
|
78
|
-
*/
|
|
79
|
-
async function checkGitSetup() {
|
|
80
|
-
if (!(await fs.pathExists('.git'))) {
|
|
81
|
-
return {
|
|
82
|
-
passed: false,
|
|
83
|
-
severity: 'medium',
|
|
84
|
-
message: 'Not a git repository',
|
|
85
|
-
fix: 'Initialize git: git init',
|
|
86
|
-
autoFixable: false,
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
return {
|
|
91
|
-
passed: true,
|
|
92
|
-
message: 'Git repository initialized',
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
/**
|
|
97
|
-
* Health check: Git hooks
|
|
98
|
-
* @returns {Promise<Object>} Check result
|
|
99
|
-
*/
|
|
100
|
-
async function checkGitHooks() {
|
|
101
|
-
const hooksDir = '.git/hooks';
|
|
102
|
-
|
|
103
|
-
if (!(await fs.pathExists(hooksDir))) {
|
|
104
|
-
return {
|
|
105
|
-
passed: false,
|
|
106
|
-
severity: 'medium',
|
|
107
|
-
message: 'Git hooks directory not found',
|
|
108
|
-
fix: 'Ensure .git directory exists',
|
|
109
|
-
autoFixable: false,
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
const cawsHooks = ['pre-commit', 'post-commit', 'pre-push'];
|
|
114
|
-
let installedCount = 0;
|
|
115
|
-
|
|
116
|
-
for (const hook of cawsHooks) {
|
|
117
|
-
const hookPath = path.join(hooksDir, hook);
|
|
118
|
-
if (await fs.pathExists(hookPath)) {
|
|
119
|
-
const content = await fs.readFile(hookPath, 'utf8');
|
|
120
|
-
if (content.includes('CAWS')) {
|
|
121
|
-
installedCount++;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
if (installedCount === 0) {
|
|
127
|
-
return {
|
|
128
|
-
passed: false,
|
|
129
|
-
severity: 'low',
|
|
130
|
-
message: 'No CAWS git hooks installed',
|
|
131
|
-
fix: 'Install hooks: caws hooks install',
|
|
132
|
-
autoFixable: false,
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
return {
|
|
137
|
-
passed: true,
|
|
138
|
-
message: `${installedCount}/${cawsHooks.length} CAWS hooks installed`,
|
|
139
|
-
};
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
/**
|
|
143
|
-
* Health check: TypeScript configuration
|
|
144
|
-
* @returns {Promise<Object>} Check result
|
|
145
|
-
*/
|
|
146
|
-
async function checkTypeScriptConfig() {
|
|
147
|
-
const tsConfig = checkTypeScriptTestConfig('.');
|
|
148
|
-
|
|
149
|
-
if (!tsConfig.isTypeScript) {
|
|
150
|
-
return {
|
|
151
|
-
passed: true,
|
|
152
|
-
message: 'Not a TypeScript project (check skipped)',
|
|
153
|
-
skipped: true,
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
// If we have workspaces, provide context about where the TypeScript setup was found
|
|
158
|
-
let messageSuffix = '';
|
|
159
|
-
if (tsConfig.workspaceInfo.hasWorkspaces && tsConfig.workspaceInfo.primaryWorkspace) {
|
|
160
|
-
messageSuffix = ` (detected in workspace: ${tsConfig.workspaceInfo.primaryWorkspace})`;
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
if (tsConfig.needsJestConfig) {
|
|
164
|
-
return {
|
|
165
|
-
passed: false,
|
|
166
|
-
severity: 'medium',
|
|
167
|
-
message: `TypeScript project missing Jest configuration${messageSuffix}`,
|
|
168
|
-
fix: 'Auto-configure Jest for TypeScript',
|
|
169
|
-
autoFixable: true,
|
|
170
|
-
autoFix: async () => {
|
|
171
|
-
const result = await configureJestForTypeScript('.', { quiet: false });
|
|
172
|
-
return {
|
|
173
|
-
success: result.configured,
|
|
174
|
-
message: 'Jest configuration created',
|
|
175
|
-
nextSteps: result.nextSteps,
|
|
176
|
-
};
|
|
177
|
-
},
|
|
178
|
-
};
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
if (tsConfig.needsTsJest) {
|
|
182
|
-
const workspaceContext = tsConfig.workspaceInfo.primaryWorkspace
|
|
183
|
-
? ` (in workspace: ${tsConfig.workspaceInfo.primaryWorkspace})`
|
|
184
|
-
: '';
|
|
185
|
-
|
|
186
|
-
return {
|
|
187
|
-
passed: false,
|
|
188
|
-
severity: 'high',
|
|
189
|
-
message: `TypeScript + Jest detected but missing ts-jest${workspaceContext}`,
|
|
190
|
-
fix: `Install ts-jest in ${tsConfig.workspaceInfo.primaryWorkspace || 'root'}: npm install --save-dev ts-jest`,
|
|
191
|
-
autoFixable: false,
|
|
192
|
-
details: {
|
|
193
|
-
searchedLocations: tsConfig.workspaceInfo.primaryWorkspace
|
|
194
|
-
? [`${tsConfig.workspaceInfo.primaryWorkspace}/package.json`]
|
|
195
|
-
: ['package.json'],
|
|
196
|
-
frameworkDetected: tsConfig.testFramework.framework,
|
|
197
|
-
hasJest: tsConfig.testFramework.hasJest,
|
|
198
|
-
hasTsJest: tsConfig.testFramework.hasTsJest,
|
|
199
|
-
workspacesChecked: tsConfig.workspaceInfo.allWorkspaces,
|
|
200
|
-
},
|
|
201
|
-
};
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
return {
|
|
205
|
-
passed: true,
|
|
206
|
-
message: `TypeScript configuration is correct${messageSuffix}`,
|
|
207
|
-
};
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
/**
|
|
211
|
-
* Health check: Test files exist
|
|
212
|
-
* @returns {Promise<Object>} Check result
|
|
213
|
-
*/
|
|
214
|
-
async function checkTestFiles() {
|
|
215
|
-
const testsDirs = ['tests', 'test', '__tests__', 'spec'];
|
|
216
|
-
let testsDir = null;
|
|
217
|
-
|
|
218
|
-
for (const dir of testsDirs) {
|
|
219
|
-
if (await fs.pathExists(dir)) {
|
|
220
|
-
testsDir = dir;
|
|
221
|
-
break;
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
if (!testsDir) {
|
|
226
|
-
return {
|
|
227
|
-
passed: false,
|
|
228
|
-
severity: 'medium',
|
|
229
|
-
message: 'No tests directory found',
|
|
230
|
-
fix: 'Create tests directory: mkdir tests',
|
|
231
|
-
autoFixable: true,
|
|
232
|
-
autoFix: async () => {
|
|
233
|
-
await fs.ensureDir('tests');
|
|
234
|
-
await fs.ensureDir('tests/unit');
|
|
235
|
-
await fs.ensureDir('tests/integration');
|
|
236
|
-
return {
|
|
237
|
-
success: true,
|
|
238
|
-
message: 'Created tests/ directory structure',
|
|
239
|
-
};
|
|
240
|
-
},
|
|
241
|
-
};
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
return {
|
|
245
|
-
passed: true,
|
|
246
|
-
message: `Tests directory exists: ${testsDir}/`,
|
|
247
|
-
};
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
/**
|
|
251
|
-
* Health check: CAWS tools directory
|
|
252
|
-
* @returns {Promise<Object>} Check result
|
|
253
|
-
*/
|
|
254
|
-
async function checkCAWSTools() {
|
|
255
|
-
// Check new location first, then legacy location for backward compatibility
|
|
256
|
-
const toolsPath = '.caws/tools';
|
|
257
|
-
const legacyToolsPath = 'apps/tools/caws';
|
|
258
|
-
|
|
259
|
-
if (!(await fs.pathExists(toolsPath)) && !(await fs.pathExists(legacyToolsPath))) {
|
|
260
|
-
return {
|
|
261
|
-
passed: true,
|
|
262
|
-
severity: 'info',
|
|
263
|
-
message: 'CAWS tools directory not found (optional - use CLI commands instead)',
|
|
264
|
-
fix: 'Core functionality available via: caws validate, caws quality-gates, caws provenance',
|
|
265
|
-
autoFixable: false,
|
|
266
|
-
};
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
// Tools directory exists - check for specialized tools (not core CLI duplicates)
|
|
270
|
-
const specializedTools = ['flake-detector.ts', 'spec-test-mapper.ts', 'perf-budgets.ts'];
|
|
271
|
-
const foundTools = [];
|
|
272
|
-
|
|
273
|
-
for (const tool of specializedTools) {
|
|
274
|
-
if (await fs.pathExists(path.join(toolsPath, tool))) {
|
|
275
|
-
foundTools.push(tool);
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
if (foundTools.length === 0) {
|
|
280
|
-
return {
|
|
281
|
-
passed: true,
|
|
282
|
-
severity: 'info',
|
|
283
|
-
message: 'No specialized tools found (optional - use CLI commands for core functionality)',
|
|
284
|
-
fix: 'Core functionality available via: caws validate, caws quality-gates, caws provenance',
|
|
285
|
-
autoFixable: false,
|
|
286
|
-
};
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
return {
|
|
290
|
-
passed: true,
|
|
291
|
-
message: `Found ${foundTools.length} specialized tool(s): ${foundTools.join(', ')}`,
|
|
292
|
-
note: 'Core functionality (validate, quality-gates, provenance) available via CLI commands',
|
|
293
|
-
};
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
/**
|
|
297
|
-
* Run all health checks
|
|
298
|
-
* @returns {Promise<Object>} Diagnosis results
|
|
299
|
-
*/
|
|
300
|
-
async function runDiagnosis(options = {}) {
|
|
301
|
-
const checks = [
|
|
302
|
-
{ name: 'Working spec validity', fn: () => checkWorkingSpec(options) },
|
|
303
|
-
{ name: 'Git repository', fn: checkGitSetup },
|
|
304
|
-
{ name: 'Git hooks', fn: checkGitHooks },
|
|
305
|
-
{ name: 'TypeScript configuration', fn: checkTypeScriptConfig },
|
|
306
|
-
{ name: 'Test files', fn: checkTestFiles },
|
|
307
|
-
{ name: 'CAWS tools', fn: checkCAWSTools },
|
|
308
|
-
];
|
|
309
|
-
|
|
310
|
-
console.log(chalk.cyan('\nDiagnosing CAWS Project...\n'));
|
|
311
|
-
console.log(chalk.gray('Running checks:'));
|
|
312
|
-
|
|
313
|
-
const results = [];
|
|
314
|
-
|
|
315
|
-
for (const check of checks) {
|
|
316
|
-
process.stdout.write(chalk.gray(` ${check.name}... `));
|
|
317
|
-
|
|
318
|
-
try {
|
|
319
|
-
const result = await check.fn();
|
|
320
|
-
|
|
321
|
-
if (result.skipped) {
|
|
322
|
-
console.log(chalk.gray('skipped'));
|
|
323
|
-
} else if (result.passed) {
|
|
324
|
-
console.log(chalk.green(''));
|
|
325
|
-
} else {
|
|
326
|
-
const icon = result.severity === 'high' ? chalk.red('') : chalk.yellow('');
|
|
327
|
-
console.log(icon);
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
results.push({
|
|
331
|
-
name: check.name,
|
|
332
|
-
...result,
|
|
333
|
-
});
|
|
334
|
-
} catch (error) {
|
|
335
|
-
console.log(chalk.red(''));
|
|
336
|
-
results.push({
|
|
337
|
-
name: check.name,
|
|
338
|
-
passed: false,
|
|
339
|
-
severity: 'high',
|
|
340
|
-
message: `Check failed: ${error.message}`,
|
|
341
|
-
fix: 'Review error and try again',
|
|
342
|
-
autoFixable: false,
|
|
343
|
-
});
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
return results;
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
/**
|
|
351
|
-
* Display diagnosis results
|
|
352
|
-
* @param {Object[]} results - Diagnosis results
|
|
353
|
-
*/
|
|
354
|
-
function displayResults(results) {
|
|
355
|
-
const issues = results.filter((r) => !r.passed && !r.skipped);
|
|
356
|
-
|
|
357
|
-
if (issues.length === 0) {
|
|
358
|
-
console.log(chalk.green('\nNo issues found! Your CAWS project is healthy.\n'));
|
|
359
|
-
return;
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
console.log(
|
|
363
|
-
chalk.bold.yellow(`\nFound ${issues.length} issue${issues.length > 1 ? 's' : ''}:\n`)
|
|
364
|
-
);
|
|
365
|
-
|
|
366
|
-
issues.forEach((issue, index) => {
|
|
367
|
-
const icon = issue.severity === 'high' ? chalk.red('') : chalk.yellow('');
|
|
368
|
-
const severity = chalk.gray(`[${issue.severity.toUpperCase()}]`);
|
|
369
|
-
|
|
370
|
-
console.log(`${index + 1}. ${icon} ${issue.name} ${severity}`);
|
|
371
|
-
console.log(chalk.white(` Issue: ${issue.message}`));
|
|
372
|
-
console.log(chalk.cyan(` Fix: ${issue.fix}`));
|
|
373
|
-
|
|
374
|
-
if (issue.autoFixable) {
|
|
375
|
-
console.log(chalk.green(' Auto-fix available'));
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
// Show additional details if available
|
|
379
|
-
if (issue.details) {
|
|
380
|
-
console.log(chalk.gray(' Details:'));
|
|
381
|
-
if (issue.details.searchedLocations) {
|
|
382
|
-
console.log(chalk.gray(` Searched: ${issue.details.searchedLocations.join(', ')}`));
|
|
383
|
-
}
|
|
384
|
-
if (issue.details.frameworkDetected) {
|
|
385
|
-
console.log(chalk.gray(` Framework: ${issue.details.frameworkDetected}`));
|
|
386
|
-
}
|
|
387
|
-
if (issue.details.workspacesChecked && issue.details.workspacesChecked.length > 0) {
|
|
388
|
-
console.log(
|
|
389
|
-
chalk.gray(` Workspaces checked: ${issue.details.workspacesChecked.join(', ')}`)
|
|
390
|
-
);
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
console.log('');
|
|
395
|
-
});
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
/**
|
|
399
|
-
* Apply automatic fixes
|
|
400
|
-
* @param {Object[]} results - Diagnosis results
|
|
401
|
-
* @returns {Promise<Object>} Fix results
|
|
402
|
-
*/
|
|
403
|
-
async function applyAutoFixes(results) {
|
|
404
|
-
const fixableIssues = results.filter((r) => !r.passed && r.autoFixable && r.autoFix);
|
|
405
|
-
|
|
406
|
-
if (fixableIssues.length === 0) {
|
|
407
|
-
console.log(chalk.yellow('\nNo auto-fixable issues found\n'));
|
|
408
|
-
return {
|
|
409
|
-
applied: 0,
|
|
410
|
-
skipped: 0,
|
|
411
|
-
failed: 0,
|
|
412
|
-
};
|
|
413
|
-
}
|
|
414
|
-
|
|
415
|
-
console.log(chalk.cyan(`\nApplying ${fixableIssues.length} automatic fixes...\n`));
|
|
416
|
-
|
|
417
|
-
let applied = 0;
|
|
418
|
-
let failed = 0;
|
|
419
|
-
|
|
420
|
-
for (const issue of fixableIssues) {
|
|
421
|
-
process.stdout.write(chalk.gray(` Fixing: ${issue.name}... `));
|
|
422
|
-
|
|
423
|
-
try {
|
|
424
|
-
const result = await issue.autoFix();
|
|
425
|
-
|
|
426
|
-
if (result.success) {
|
|
427
|
-
console.log(chalk.green(''));
|
|
428
|
-
applied++;
|
|
429
|
-
|
|
430
|
-
if (result.nextSteps && result.nextSteps.length > 0) {
|
|
431
|
-
console.log(chalk.blue(' Next steps:'));
|
|
432
|
-
result.nextSteps.forEach((step) => {
|
|
433
|
-
console.log(chalk.blue(` ${step}`));
|
|
434
|
-
});
|
|
435
|
-
}
|
|
436
|
-
} else {
|
|
437
|
-
console.log(chalk.red(''));
|
|
438
|
-
failed++;
|
|
439
|
-
}
|
|
440
|
-
} catch (error) {
|
|
441
|
-
console.log(chalk.red(`${error.message}`));
|
|
442
|
-
failed++;
|
|
443
|
-
}
|
|
444
|
-
}
|
|
445
|
-
|
|
446
|
-
console.log(chalk.bold.green(`\nResults: ${applied} fixed, ${failed} failed\n`));
|
|
447
|
-
|
|
448
|
-
return {
|
|
449
|
-
applied,
|
|
450
|
-
skipped: results.filter((r) => !r.passed && !r.autoFixable).length,
|
|
451
|
-
failed,
|
|
452
|
-
};
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
/**
|
|
456
|
-
* Diagnose command handler
|
|
457
|
-
* @param {Object} options - Command options
|
|
458
|
-
*/
|
|
459
|
-
async function diagnoseCommand(options = {}) {
|
|
460
|
-
try {
|
|
461
|
-
// Run all health checks
|
|
462
|
-
const results = await runDiagnosis(options);
|
|
463
|
-
|
|
464
|
-
// Display results
|
|
465
|
-
displayResults(results);
|
|
466
|
-
|
|
467
|
-
// Check if there are auto-fixable issues
|
|
468
|
-
const fixableCount = results.filter((r) => !r.passed && r.autoFixable).length;
|
|
469
|
-
|
|
470
|
-
if (fixableCount > 0 && !options.fix) {
|
|
471
|
-
console.log(
|
|
472
|
-
chalk.yellow(
|
|
473
|
-
`${fixableCount} issue${fixableCount > 1 ? 's' : ''} can be fixed automatically`
|
|
474
|
-
)
|
|
475
|
-
);
|
|
476
|
-
console.log(chalk.yellow(' Run: caws diagnose --fix to apply fixes\n'));
|
|
477
|
-
} else if (options.fix) {
|
|
478
|
-
const fixResults = await applyAutoFixes(results);
|
|
479
|
-
|
|
480
|
-
if (fixResults.applied > 0) {
|
|
481
|
-
console.log(chalk.green('Auto-fixes applied successfully'));
|
|
482
|
-
console.log(chalk.blue('Run: caws validate to verify fixes\n'));
|
|
483
|
-
}
|
|
484
|
-
|
|
485
|
-
if (fixResults.skipped > 0) {
|
|
486
|
-
console.log(
|
|
487
|
-
chalk.yellow(
|
|
488
|
-
`${fixResults.skipped} issue${fixResults.skipped > 1 ? 's' : ''} require manual intervention\n`
|
|
489
|
-
)
|
|
490
|
-
);
|
|
491
|
-
}
|
|
492
|
-
}
|
|
493
|
-
|
|
494
|
-
// Provide next steps
|
|
495
|
-
const issueCount = results.filter((r) => !r.passed && !r.skipped).length;
|
|
496
|
-
|
|
497
|
-
if (issueCount === 0) {
|
|
498
|
-
console.log(chalk.blue('Next steps:'));
|
|
499
|
-
console.log(chalk.blue(' - Run: caws status --visual to view project health'));
|
|
500
|
-
console.log(chalk.blue(' - Run: caws validate to check working spec'));
|
|
501
|
-
console.log(chalk.blue(' - Optional: Create .caws/policy.yaml for custom budgets'));
|
|
502
|
-
console.log(
|
|
503
|
-
chalk.blue(' - Start implementing: caws iterate --current-state "Ready to begin"')
|
|
504
|
-
);
|
|
505
|
-
}
|
|
506
|
-
} catch (error) {
|
|
507
|
-
console.error(chalk.red('\nError running diagnosis:'), error.message);
|
|
508
|
-
console.error(chalk.yellow('\nTry: caws status for basic health check'));
|
|
509
|
-
process.exit(1);
|
|
510
|
-
}
|
|
511
|
-
}
|
|
512
|
-
|
|
513
|
-
module.exports = {
|
|
514
|
-
diagnoseCommand,
|
|
515
|
-
runDiagnosis,
|
|
516
|
-
displayResults,
|
|
517
|
-
applyAutoFixes,
|
|
518
|
-
// Export individual checks for testing
|
|
519
|
-
checkWorkingSpec,
|
|
520
|
-
checkGitSetup,
|
|
521
|
-
checkGitHooks,
|
|
522
|
-
checkTypeScriptConfig,
|
|
523
|
-
checkTestFiles,
|
|
524
|
-
checkCAWSTools,
|
|
525
|
-
};
|