@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,94 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Governance Lifecycle Events
|
|
3
|
-
*
|
|
4
|
-
* A lightweight event system for governance-significant moments in CAWS.
|
|
5
|
-
* Events fire synchronously within command execution and are consumed by
|
|
6
|
-
* the working-state layer, feedback enrichment, and future sidecar flows.
|
|
7
|
-
*
|
|
8
|
-
* This is NOT the same as IDE hooks (shell scripts in .claude/hooks/).
|
|
9
|
-
* These are internal CAWS events emitted by CLI commands and gates.
|
|
10
|
-
*
|
|
11
|
-
* @author @darianrosebrook
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
const { EventEmitter } = require('events');
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Singleton lifecycle event emitter.
|
|
18
|
-
* @type {EventEmitter}
|
|
19
|
-
*/
|
|
20
|
-
const lifecycle = new EventEmitter();
|
|
21
|
-
lifecycle.setMaxListeners(20);
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Event name constants.
|
|
25
|
-
*
|
|
26
|
-
* @typedef {Object} GatesBlockedPayload
|
|
27
|
-
* @property {string|null} specId
|
|
28
|
-
* @property {string} gateName
|
|
29
|
-
* @property {string} mode
|
|
30
|
-
* @property {string[]} messages
|
|
31
|
-
* @property {string} context - cli | commit | edit
|
|
32
|
-
* @property {string} timestamp - ISO 8601
|
|
33
|
-
*
|
|
34
|
-
* @typedef {Object} GatesPassedPayload
|
|
35
|
-
* @property {string|null} specId
|
|
36
|
-
* @property {Object} summary - { blocked, warned, passed, skipped, waived }
|
|
37
|
-
* @property {string} context
|
|
38
|
-
* @property {string} timestamp
|
|
39
|
-
*
|
|
40
|
-
* @typedef {Object} ValidationFailedPayload
|
|
41
|
-
* @property {string} specId
|
|
42
|
-
* @property {Object[]} errors
|
|
43
|
-
* @property {number} errorCount
|
|
44
|
-
* @property {number} warningCount
|
|
45
|
-
* @property {string} timestamp
|
|
46
|
-
*
|
|
47
|
-
* @typedef {Object} ValidationPassedPayload
|
|
48
|
-
* @property {string} specId
|
|
49
|
-
* @property {string} grade
|
|
50
|
-
* @property {number} complianceScore
|
|
51
|
-
* @property {string} timestamp
|
|
52
|
-
*
|
|
53
|
-
* @typedef {Object} BudgetPressurePayload
|
|
54
|
-
* @property {string|null} specId
|
|
55
|
-
* @property {number} filesUsed
|
|
56
|
-
* @property {number} filesLimit
|
|
57
|
-
* @property {number} locUsed
|
|
58
|
-
* @property {number} locLimit
|
|
59
|
-
* @property {number} percentUsed
|
|
60
|
-
* @property {string} timestamp
|
|
61
|
-
*
|
|
62
|
-
* @typedef {Object} PhaseTransitionPayload
|
|
63
|
-
* @property {string} specId
|
|
64
|
-
* @property {string} oldPhase
|
|
65
|
-
* @property {string} newPhase
|
|
66
|
-
* @property {string} timestamp
|
|
67
|
-
*
|
|
68
|
-
* @typedef {Object} MergePrePayload
|
|
69
|
-
* @property {string} worktreeName
|
|
70
|
-
* @property {string} branch
|
|
71
|
-
* @property {string} baseBranch
|
|
72
|
-
* @property {string[]} conflicts
|
|
73
|
-
* @property {string} timestamp
|
|
74
|
-
*
|
|
75
|
-
* @typedef {Object} MergePostPayload
|
|
76
|
-
* @property {string} worktreeName
|
|
77
|
-
* @property {string} branch
|
|
78
|
-
* @property {string} baseBranch
|
|
79
|
-
* @property {boolean} merged
|
|
80
|
-
* @property {string[]} conflicts
|
|
81
|
-
* @property {string} timestamp
|
|
82
|
-
*/
|
|
83
|
-
const EVENTS = {
|
|
84
|
-
GATES_BLOCKED: 'gates:blocked',
|
|
85
|
-
GATES_PASSED: 'gates:passed',
|
|
86
|
-
VALIDATION_FAILED: 'validation:failed',
|
|
87
|
-
VALIDATION_PASSED: 'validation:passed',
|
|
88
|
-
BUDGET_PRESSURE: 'budget:pressure',
|
|
89
|
-
PHASE_TRANSITION: 'phase:transition',
|
|
90
|
-
MERGE_PRE: 'merge:pre',
|
|
91
|
-
MERGE_POST: 'merge:post',
|
|
92
|
-
};
|
|
93
|
-
|
|
94
|
-
module.exports = { lifecycle, EVENTS };
|
|
@@ -1,367 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Project Analysis Utilities
|
|
3
|
-
* Functions for analyzing project types and structure
|
|
4
|
-
* @author @darianrosebrook
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
const fs = require('fs-extra');
|
|
8
|
-
const path = require('path');
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Detect project type from existing files and structure
|
|
12
|
-
* @param {string} cwd - Current working directory
|
|
13
|
-
* @returns {string} Project type
|
|
14
|
-
*/
|
|
15
|
-
function detectProjectType(cwd = process.cwd()) {
|
|
16
|
-
const files = fs.readdirSync(cwd);
|
|
17
|
-
|
|
18
|
-
// Check for various project indicators
|
|
19
|
-
const hasPackageJson = files.includes('package.json');
|
|
20
|
-
const hasPnpm = files.includes('pnpm-workspace.yaml');
|
|
21
|
-
const hasYarn = files.includes('yarn.lock');
|
|
22
|
-
|
|
23
|
-
let packageJson = {};
|
|
24
|
-
if (hasPackageJson) {
|
|
25
|
-
try {
|
|
26
|
-
packageJson = JSON.parse(fs.readFileSync(path.join(cwd, 'package.json'), 'utf8'));
|
|
27
|
-
} catch (e) {
|
|
28
|
-
// Ignore parse errors
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
// VS Code Extension detection
|
|
33
|
-
const isVscodeExtension =
|
|
34
|
-
packageJson.engines?.vscode ||
|
|
35
|
-
packageJson.contributes ||
|
|
36
|
-
packageJson.activationEvents ||
|
|
37
|
-
packageJson.main?.includes('extension.js');
|
|
38
|
-
|
|
39
|
-
// Monorepo detection
|
|
40
|
-
const isMonorepo = hasPnpm || hasYarn || files.includes('packages') || files.includes('apps');
|
|
41
|
-
|
|
42
|
-
// Library detection
|
|
43
|
-
const isLibrary = packageJson.main || packageJson.module || packageJson.exports;
|
|
44
|
-
|
|
45
|
-
// CLI detection
|
|
46
|
-
const isCli = packageJson.bin || packageJson.name?.startsWith('@') === false;
|
|
47
|
-
|
|
48
|
-
// API detection
|
|
49
|
-
const isApi =
|
|
50
|
-
packageJson.scripts?.start ||
|
|
51
|
-
packageJson.dependencies?.express ||
|
|
52
|
-
packageJson.dependencies?.fastify ||
|
|
53
|
-
packageJson.dependencies?.['@types/express'];
|
|
54
|
-
|
|
55
|
-
// Determine primary type
|
|
56
|
-
if (isVscodeExtension) return 'extension';
|
|
57
|
-
if (isMonorepo) return 'monorepo';
|
|
58
|
-
if (isApi) return 'api';
|
|
59
|
-
if (isLibrary) return 'library';
|
|
60
|
-
if (isCli) return 'cli';
|
|
61
|
-
|
|
62
|
-
// Default fallback
|
|
63
|
-
return 'application';
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Detect if current directory appears to be a project that should be initialized directly
|
|
68
|
-
* @param {string} projectName - Project name from command line
|
|
69
|
-
* @param {string} currentDir - Current directory path
|
|
70
|
-
* @returns {boolean} Whether to init in current directory
|
|
71
|
-
*/
|
|
72
|
-
function shouldInitInCurrentDirectory(projectName, currentDir) {
|
|
73
|
-
// If explicitly '.', always init in current directory
|
|
74
|
-
if (projectName === '.') return true;
|
|
75
|
-
|
|
76
|
-
// Check for common project indicators
|
|
77
|
-
const projectIndicators = [
|
|
78
|
-
'package.json',
|
|
79
|
-
'tsconfig.json',
|
|
80
|
-
'jest.config.js',
|
|
81
|
-
'eslint.config.js',
|
|
82
|
-
'README.md',
|
|
83
|
-
'src/',
|
|
84
|
-
'lib/',
|
|
85
|
-
'app/',
|
|
86
|
-
'packages/',
|
|
87
|
-
'.git/',
|
|
88
|
-
'node_modules/', // Even if empty, suggests intent to be a project
|
|
89
|
-
];
|
|
90
|
-
|
|
91
|
-
const files = fs.readdirSync(currentDir);
|
|
92
|
-
const hasProjectIndicators = projectIndicators.some((indicator) => {
|
|
93
|
-
if (indicator.endsWith('/')) {
|
|
94
|
-
return files.includes(indicator.slice(0, -1));
|
|
95
|
-
}
|
|
96
|
-
return files.includes(indicator);
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
return hasProjectIndicators;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Detect if project publishes packages to registries
|
|
104
|
-
* Checks for publishing configuration in package.json, pyproject.toml, etc.
|
|
105
|
-
* @param {string} cwd - Current working directory
|
|
106
|
-
* @returns {boolean} Whether project appears to publish packages
|
|
107
|
-
*/
|
|
108
|
-
function detectsPublishing(cwd = process.cwd()) {
|
|
109
|
-
const files = fs.readdirSync(cwd);
|
|
110
|
-
|
|
111
|
-
// Check package.json for npm publishing
|
|
112
|
-
if (files.includes('package.json')) {
|
|
113
|
-
try {
|
|
114
|
-
const packageJson = JSON.parse(fs.readFileSync(path.join(cwd, 'package.json'), 'utf8'));
|
|
115
|
-
|
|
116
|
-
// Indicators of publishing:
|
|
117
|
-
// - Has publishConfig
|
|
118
|
-
// - Has scripts that include "publish"
|
|
119
|
-
// - Has name that suggests it's a published package
|
|
120
|
-
// - Has repository field (often indicates published package)
|
|
121
|
-
const hasPublishConfig = packageJson.publishConfig;
|
|
122
|
-
const hasPublishScript =
|
|
123
|
-
packageJson.scripts &&
|
|
124
|
-
Object.keys(packageJson.scripts).some((key) => key.toLowerCase().includes('publish'));
|
|
125
|
-
const hasScopedName = packageJson.name && packageJson.name.startsWith('@');
|
|
126
|
-
const hasRepository = packageJson.repository;
|
|
127
|
-
|
|
128
|
-
if (hasPublishConfig || hasPublishScript || (hasScopedName && hasRepository)) {
|
|
129
|
-
return true;
|
|
130
|
-
}
|
|
131
|
-
} catch (e) {
|
|
132
|
-
// Ignore parse errors
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
// Check pyproject.toml for PyPI publishing
|
|
137
|
-
if (files.includes('pyproject.toml')) {
|
|
138
|
-
try {
|
|
139
|
-
const pyprojectContent = fs.readFileSync(path.join(cwd, 'pyproject.toml'), 'utf8');
|
|
140
|
-
|
|
141
|
-
// Check for build system and project metadata (indicates publishable package)
|
|
142
|
-
const hasBuildSystem = pyprojectContent.includes('[build-system]');
|
|
143
|
-
const hasProjectMetadata = pyprojectContent.includes('[project]');
|
|
144
|
-
const hasToolPublish =
|
|
145
|
-
pyprojectContent.includes('[tool.publish]') || pyprojectContent.includes('[tool.twine]');
|
|
146
|
-
|
|
147
|
-
if ((hasBuildSystem && hasProjectMetadata) || hasToolPublish) {
|
|
148
|
-
return true;
|
|
149
|
-
}
|
|
150
|
-
} catch (e) {
|
|
151
|
-
// Ignore read errors
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
// Check for Maven publishing (pom.xml)
|
|
156
|
-
if (files.includes('pom.xml')) {
|
|
157
|
-
return true; // Maven projects typically publish
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
// Check for .csproj (NuGet publishing)
|
|
161
|
-
const csprojFiles = files.filter((f) => f.endsWith('.csproj'));
|
|
162
|
-
if (csprojFiles.length > 0) {
|
|
163
|
-
return true; // .NET projects typically publish
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
// Check for GitHub Actions workflows that publish
|
|
167
|
-
const workflowsPath = path.join(cwd, '.github', 'workflows');
|
|
168
|
-
if (fs.existsSync(workflowsPath)) {
|
|
169
|
-
try {
|
|
170
|
-
const workflowFiles = fs.readdirSync(workflowsPath);
|
|
171
|
-
for (const workflowFile of workflowFiles) {
|
|
172
|
-
if (workflowFile.endsWith('.yml') || workflowFile.endsWith('.yaml')) {
|
|
173
|
-
const workflowContent = fs.readFileSync(path.join(workflowsPath, workflowFile), 'utf8');
|
|
174
|
-
// Check for common publishing actions/commands
|
|
175
|
-
if (
|
|
176
|
-
workflowContent.includes('npm publish') ||
|
|
177
|
-
workflowContent.includes('pypa/gh-action-pypi-publish') ||
|
|
178
|
-
workflowContent.includes('publish-to-npm') ||
|
|
179
|
-
workflowContent.includes('semantic-release') ||
|
|
180
|
-
workflowContent.includes('publish')
|
|
181
|
-
) {
|
|
182
|
-
return true;
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
} catch (e) {
|
|
187
|
-
// Ignore read errors
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
return false;
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
/**
|
|
195
|
-
* Detect primary programming language(s) used in project
|
|
196
|
-
* @param {string} cwd - Current working directory
|
|
197
|
-
* @returns {Object} Language detection result with primary language and indicators
|
|
198
|
-
*/
|
|
199
|
-
function detectProjectLanguage(cwd = process.cwd()) {
|
|
200
|
-
const files = fs.readdirSync(cwd);
|
|
201
|
-
const indicators = {
|
|
202
|
-
javascript: false,
|
|
203
|
-
typescript: false,
|
|
204
|
-
python: false,
|
|
205
|
-
rust: false,
|
|
206
|
-
go: false,
|
|
207
|
-
java: false,
|
|
208
|
-
csharp: false,
|
|
209
|
-
php: false,
|
|
210
|
-
};
|
|
211
|
-
|
|
212
|
-
// JavaScript/TypeScript indicators
|
|
213
|
-
if (files.includes('package.json')) {
|
|
214
|
-
indicators.javascript = true;
|
|
215
|
-
try {
|
|
216
|
-
const packageJson = JSON.parse(fs.readFileSync(path.join(cwd, 'package.json'), 'utf8'));
|
|
217
|
-
const allDeps = {
|
|
218
|
-
...(packageJson.dependencies || {}),
|
|
219
|
-
...(packageJson.devDependencies || {}),
|
|
220
|
-
};
|
|
221
|
-
if ('typescript' in allDeps || files.includes('tsconfig.json')) {
|
|
222
|
-
indicators.typescript = true;
|
|
223
|
-
indicators.javascript = false; // TypeScript supersedes JavaScript
|
|
224
|
-
}
|
|
225
|
-
} catch (e) {
|
|
226
|
-
// Ignore parse errors
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
// Python indicators
|
|
231
|
-
if (
|
|
232
|
-
files.includes('requirements.txt') ||
|
|
233
|
-
files.includes('pyproject.toml') ||
|
|
234
|
-
files.includes('setup.py') ||
|
|
235
|
-
files.includes('Pipfile') ||
|
|
236
|
-
files.includes('poetry.lock') ||
|
|
237
|
-
files.some((f) => f.endsWith('.py'))
|
|
238
|
-
) {
|
|
239
|
-
indicators.python = true;
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
// Rust indicators
|
|
243
|
-
if (files.includes('Cargo.toml') || files.some((f) => f.endsWith('.rs'))) {
|
|
244
|
-
indicators.rust = true;
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
// Go indicators
|
|
248
|
-
if (
|
|
249
|
-
files.includes('go.mod') ||
|
|
250
|
-
files.includes('go.sum') ||
|
|
251
|
-
files.some((f) => f.endsWith('.go'))
|
|
252
|
-
) {
|
|
253
|
-
indicators.go = true;
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
// Java indicators
|
|
257
|
-
if (
|
|
258
|
-
files.includes('pom.xml') ||
|
|
259
|
-
files.includes('build.gradle') ||
|
|
260
|
-
files.some((f) => f.endsWith('.java'))
|
|
261
|
-
) {
|
|
262
|
-
indicators.java = true;
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
// C# indicators
|
|
266
|
-
if (
|
|
267
|
-
files.some((f) => f.endsWith('.csproj')) ||
|
|
268
|
-
files.some((f) => f.endsWith('.sln')) ||
|
|
269
|
-
files.some((f) => f.endsWith('.cs'))
|
|
270
|
-
) {
|
|
271
|
-
indicators.csharp = true;
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
// PHP indicators
|
|
275
|
-
if (
|
|
276
|
-
files.includes('composer.json') ||
|
|
277
|
-
files.includes('composer.lock') ||
|
|
278
|
-
files.some((f) => f.endsWith('.php'))
|
|
279
|
-
) {
|
|
280
|
-
indicators.php = true;
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
// Determine primary language (priority order)
|
|
284
|
-
let primaryLanguage = 'unknown';
|
|
285
|
-
if (indicators.typescript) {
|
|
286
|
-
primaryLanguage = 'typescript';
|
|
287
|
-
} else if (indicators.javascript) {
|
|
288
|
-
primaryLanguage = 'javascript';
|
|
289
|
-
} else if (indicators.python) {
|
|
290
|
-
primaryLanguage = 'python';
|
|
291
|
-
} else if (indicators.rust) {
|
|
292
|
-
primaryLanguage = 'rust';
|
|
293
|
-
} else if (indicators.go) {
|
|
294
|
-
primaryLanguage = 'go';
|
|
295
|
-
} else if (indicators.java) {
|
|
296
|
-
primaryLanguage = 'java';
|
|
297
|
-
} else if (indicators.csharp) {
|
|
298
|
-
primaryLanguage = 'csharp';
|
|
299
|
-
} else if (indicators.php) {
|
|
300
|
-
primaryLanguage = 'php';
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
return {
|
|
304
|
-
primary: primaryLanguage,
|
|
305
|
-
indicators,
|
|
306
|
-
hasNodeJs: indicators.javascript || indicators.typescript,
|
|
307
|
-
hasPython: indicators.python,
|
|
308
|
-
};
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
/**
|
|
312
|
-
* Get language-agnostic suggestion for TODO analyzer installation
|
|
313
|
-
* Focuses on runtime availability (Node.js/npx) rather than project language
|
|
314
|
-
* @param {string} cwd - Current working directory
|
|
315
|
-
* @returns {string} Installation suggestion message
|
|
316
|
-
*/
|
|
317
|
-
function getTodoAnalyzerSuggestion(cwd = process.cwd()) {
|
|
318
|
-
// Check runtime availability (language-agnostic)
|
|
319
|
-
let hasNodeJs = false;
|
|
320
|
-
let hasNpx = false;
|
|
321
|
-
try {
|
|
322
|
-
const { execSync } = require('child_process');
|
|
323
|
-
execSync('command -v node', { encoding: 'utf8', stdio: 'ignore' });
|
|
324
|
-
hasNodeJs = true;
|
|
325
|
-
execSync('command -v npx', { encoding: 'utf8', stdio: 'ignore' });
|
|
326
|
-
hasNpx = true;
|
|
327
|
-
} catch (e) {
|
|
328
|
-
// Node.js/npx not available
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
const suggestions = [];
|
|
332
|
-
|
|
333
|
-
if (hasNpx) {
|
|
334
|
-
// npx available - works for any language, no installation needed
|
|
335
|
-
suggestions.push(
|
|
336
|
-
' - Use npx (no installation required): npx --yes @paths.design/quality-gates'
|
|
337
|
-
);
|
|
338
|
-
suggestions.push(' - Install package: npm install --save-dev @paths.design/quality-gates');
|
|
339
|
-
} else if (hasNodeJs) {
|
|
340
|
-
// Node.js available but npx not found (unusual)
|
|
341
|
-
suggestions.push(' - Install package: npm install --save-dev @paths.design/quality-gates');
|
|
342
|
-
suggestions.push(
|
|
343
|
-
' - Install npx: npm install -g npx (then use: npx --yes @paths.design/quality-gates)'
|
|
344
|
-
);
|
|
345
|
-
} else {
|
|
346
|
-
// Node.js not available - suggest installation
|
|
347
|
-
suggestions.push(
|
|
348
|
-
' - Install Node.js: https://nodejs.org/ (then use: npx --yes @paths.design/quality-gates)'
|
|
349
|
-
);
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
// Check for project-specific scripts (language-agnostic - if they exist, suggest them)
|
|
353
|
-
const pythonScript = path.join(cwd, 'scripts', 'v3', 'analysis', 'todo_analyzer.py');
|
|
354
|
-
if (fs.existsSync(pythonScript)) {
|
|
355
|
-
suggestions.push(` - Use project script: python3 ${pythonScript}`);
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
return suggestions.join('\n');
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
module.exports = {
|
|
362
|
-
detectProjectType,
|
|
363
|
-
shouldInitInCurrentDirectory,
|
|
364
|
-
detectsPublishing,
|
|
365
|
-
detectProjectLanguage,
|
|
366
|
-
getTodoAnalyzerSuggestion,
|
|
367
|
-
};
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Promise Utilities
|
|
3
|
-
* Utilities for converting callback-based APIs to promises
|
|
4
|
-
* @author @darianrosebrook
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Convert readline question to promise
|
|
9
|
-
* @param {readline.Interface} rl - Readline interface
|
|
10
|
-
* @param {string} question - Question to ask
|
|
11
|
-
* @returns {Promise<string>} User's answer
|
|
12
|
-
*/
|
|
13
|
-
function question(rl, questionText) {
|
|
14
|
-
return new Promise((resolve) => {
|
|
15
|
-
rl.question(questionText, (answer) => {
|
|
16
|
-
resolve(answer);
|
|
17
|
-
});
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Close readline interface and return promise
|
|
23
|
-
* @param {readline.Interface} rl - Readline interface
|
|
24
|
-
* @returns {Promise<void>}
|
|
25
|
-
*/
|
|
26
|
-
function closeReadline(rl) {
|
|
27
|
-
return new Promise((resolve) => {
|
|
28
|
-
rl.once('close', resolve);
|
|
29
|
-
rl.close();
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Create a promise that resolves when event fires
|
|
35
|
-
* @param {EventEmitter} emitter - Event emitter
|
|
36
|
-
* @param {string} event - Event name
|
|
37
|
-
* @param {Object} options - Options
|
|
38
|
-
* @param {number} [options.timeout] - Timeout in ms
|
|
39
|
-
* @returns {Promise<any>} Event data
|
|
40
|
-
*/
|
|
41
|
-
function once(emitter, event, options = {}) {
|
|
42
|
-
return new Promise((resolve, reject) => {
|
|
43
|
-
const { timeout } = options;
|
|
44
|
-
|
|
45
|
-
const timeoutId = timeout
|
|
46
|
-
? // eslint-disable-next-line no-undef
|
|
47
|
-
setTimeout(() => {
|
|
48
|
-
emitter.removeListener(event, handler);
|
|
49
|
-
reject(new Error(`Event '${event}' timed out after ${timeout}ms`));
|
|
50
|
-
}, timeout)
|
|
51
|
-
: null;
|
|
52
|
-
|
|
53
|
-
const handler = (...args) => {
|
|
54
|
-
if (timeoutId) {
|
|
55
|
-
// eslint-disable-next-line no-undef
|
|
56
|
-
clearTimeout(timeoutId);
|
|
57
|
-
}
|
|
58
|
-
emitter.removeListener(event, handler);
|
|
59
|
-
resolve(args.length === 1 ? args[0] : args);
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
emitter.once(event, handler);
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
module.exports = {
|
|
67
|
-
question,
|
|
68
|
-
closeReadline,
|
|
69
|
-
once,
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
|