@paths.design/caws-cli 7.0.1 → 7.0.3

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.
Files changed (121) hide show
  1. package/dist/budget-derivation.js +5 -4
  2. package/dist/commands/diagnose.js +26 -20
  3. package/dist/commands/init.js +72 -5
  4. package/dist/commands/specs.js +40 -1
  5. package/dist/commands/status.js +2 -2
  6. package/dist/commands/templates.js +10 -0
  7. package/dist/commands/tool.js +2 -3
  8. package/dist/commands/validate.js +12 -0
  9. package/dist/config/index.js +17 -8
  10. package/dist/generators/working-spec.js +42 -9
  11. package/dist/index.js +3 -1
  12. package/dist/scaffold/cursor-hooks.js +10 -2
  13. package/dist/scaffold/git-hooks.js +189 -32
  14. package/dist/scaffold/index.js +105 -17
  15. package/dist/templates/.caws/tools/README.md +20 -0
  16. package/dist/templates/.cursor/README.md +311 -0
  17. package/dist/templates/.cursor/hooks/audit.sh +55 -0
  18. package/dist/templates/.cursor/hooks/block-dangerous.sh +83 -0
  19. package/dist/templates/.cursor/hooks/caws-quality-check.sh +52 -0
  20. package/dist/templates/.cursor/hooks/caws-scope-guard.sh +130 -0
  21. package/dist/templates/.cursor/hooks/caws-tool-validation.sh +121 -0
  22. package/dist/templates/.cursor/hooks/format.sh +38 -0
  23. package/dist/templates/.cursor/hooks/naming-check.sh +64 -0
  24. package/dist/templates/.cursor/hooks/scan-secrets.sh +46 -0
  25. package/dist/templates/.cursor/hooks/scope-guard.sh +52 -0
  26. package/dist/templates/.cursor/hooks/validate-spec.sh +83 -0
  27. package/dist/templates/.cursor/hooks.json +59 -0
  28. package/dist/templates/.cursor/rules/00-claims-verification.mdc +144 -0
  29. package/dist/templates/.cursor/rules/01-working-style.mdc +50 -0
  30. package/dist/templates/.cursor/rules/02-quality-gates.mdc +370 -0
  31. package/dist/templates/.cursor/rules/03-naming-and-refactor.mdc +33 -0
  32. package/dist/templates/.cursor/rules/04-logging-language-style.mdc +23 -0
  33. package/dist/templates/.cursor/rules/05-safe-defaults-guards.mdc +23 -0
  34. package/dist/templates/.cursor/rules/06-typescript-conventions.mdc +36 -0
  35. package/dist/templates/.cursor/rules/07-process-ops.mdc +20 -0
  36. package/dist/templates/.cursor/rules/08-solid-and-architecture.mdc +16 -0
  37. package/dist/templates/.cursor/rules/09-docstrings.mdc +89 -0
  38. package/dist/templates/.cursor/rules/10-documentation-quality-standards.mdc +390 -0
  39. package/dist/templates/.cursor/rules/11-scope-management-waivers.mdc +385 -0
  40. package/dist/templates/.cursor/rules/12-implementation-completeness.mdc +516 -0
  41. package/dist/templates/.cursor/rules/13-language-agnostic-standards.mdc +588 -0
  42. package/dist/templates/.cursor/rules/README.md +148 -0
  43. package/dist/templates/.github/copilot/instructions.md +311 -0
  44. package/dist/templates/.idea/runConfigurations/CAWS_Evaluate.xml +5 -0
  45. package/dist/templates/.idea/runConfigurations/CAWS_Validate.xml +5 -0
  46. package/dist/templates/.vscode/launch.json +56 -0
  47. package/dist/templates/.vscode/settings.json +93 -0
  48. package/dist/templates/.windsurf/workflows/caws-guided-development.md +92 -0
  49. package/dist/templates/COMMIT_CONVENTIONS.md +86 -0
  50. package/dist/templates/OIDC_SETUP.md +300 -0
  51. package/dist/templates/agents.md +1047 -0
  52. package/dist/templates/codemod/README.md +1 -0
  53. package/dist/templates/codemod/test.js +93 -0
  54. package/dist/templates/docs/README.md +150 -0
  55. package/dist/templates/scripts/quality-gates/check-god-objects.js +146 -0
  56. package/dist/templates/scripts/quality-gates/run-quality-gates.js +50 -0
  57. package/dist/templates/scripts/v3/analysis/todo_analyzer.py +1997 -0
  58. package/dist/tool-loader.js +6 -1
  59. package/dist/tool-validator.js +8 -2
  60. package/dist/utils/detection.js +34 -6
  61. package/dist/utils/git-lock.js +118 -0
  62. package/dist/utils/gitignore-updater.js +148 -0
  63. package/dist/utils/quality-gates.js +47 -7
  64. package/dist/utils/spec-resolver.js +23 -3
  65. package/dist/utils/yaml-validation.js +155 -0
  66. package/dist/validation/spec-validation.js +105 -2
  67. package/package.json +2 -2
  68. package/templates/.caws/schemas/waivers.schema.json +30 -0
  69. package/templates/.caws/schemas/working-spec.schema.json +133 -0
  70. package/templates/.caws/templates/working-spec.template.yml +74 -0
  71. package/templates/.caws/tools/README.md +20 -0
  72. package/templates/.caws/tools/scope-guard.js +208 -0
  73. package/templates/.caws/tools-allow.json +331 -0
  74. package/templates/.caws/waivers.yml +19 -0
  75. package/templates/.cursor/hooks/scope-guard.sh +2 -2
  76. package/templates/.cursor/hooks/validate-spec.sh +42 -7
  77. package/templates/apps/tools/caws/COMPLETION_REPORT.md +0 -331
  78. package/templates/apps/tools/caws/MIGRATION_SUMMARY.md +0 -360
  79. package/templates/apps/tools/caws/README.md +0 -463
  80. package/templates/apps/tools/caws/TEST_STATUS.md +0 -365
  81. package/templates/apps/tools/caws/attest.js +0 -357
  82. package/templates/apps/tools/caws/ci-optimizer.js +0 -642
  83. package/templates/apps/tools/caws/config.ts +0 -245
  84. package/templates/apps/tools/caws/cross-functional.js +0 -876
  85. package/templates/apps/tools/caws/dashboard.js +0 -1112
  86. package/templates/apps/tools/caws/flake-detector.ts +0 -362
  87. package/templates/apps/tools/caws/gates.js +0 -198
  88. package/templates/apps/tools/caws/gates.ts +0 -271
  89. package/templates/apps/tools/caws/language-adapters.ts +0 -381
  90. package/templates/apps/tools/caws/language-support.d.ts +0 -367
  91. package/templates/apps/tools/caws/language-support.d.ts.map +0 -1
  92. package/templates/apps/tools/caws/language-support.js +0 -585
  93. package/templates/apps/tools/caws/legacy-assessment.ts +0 -408
  94. package/templates/apps/tools/caws/legacy-assessor.js +0 -764
  95. package/templates/apps/tools/caws/mutant-analyzer.js +0 -734
  96. package/templates/apps/tools/caws/perf-budgets.ts +0 -349
  97. package/templates/apps/tools/caws/prompt-lint.js.backup +0 -274
  98. package/templates/apps/tools/caws/property-testing.js +0 -707
  99. package/templates/apps/tools/caws/provenance.d.ts +0 -14
  100. package/templates/apps/tools/caws/provenance.d.ts.map +0 -1
  101. package/templates/apps/tools/caws/provenance.js +0 -132
  102. package/templates/apps/tools/caws/provenance.js.backup +0 -73
  103. package/templates/apps/tools/caws/provenance.ts +0 -211
  104. package/templates/apps/tools/caws/security-provenance.ts +0 -483
  105. package/templates/apps/tools/caws/shared/base-tool.ts +0 -281
  106. package/templates/apps/tools/caws/shared/config-manager.ts +0 -366
  107. package/templates/apps/tools/caws/shared/gate-checker.ts +0 -849
  108. package/templates/apps/tools/caws/shared/types.ts +0 -444
  109. package/templates/apps/tools/caws/shared/validator.ts +0 -305
  110. package/templates/apps/tools/caws/shared/waivers-manager.ts +0 -174
  111. package/templates/apps/tools/caws/spec-test-mapper.ts +0 -391
  112. package/templates/apps/tools/caws/test-quality.js +0 -578
  113. package/templates/apps/tools/caws/validate.js +0 -76
  114. package/templates/apps/tools/caws/validate.ts +0 -228
  115. package/templates/apps/tools/caws/waivers.js +0 -344
  116. /package/{templates/apps/tools/caws → dist/templates/.caws}/schemas/waivers.schema.json +0 -0
  117. /package/{templates/apps/tools/caws → dist/templates/.caws}/schemas/working-spec.schema.json +0 -0
  118. /package/{templates/apps/tools/caws → dist/templates/.caws}/templates/working-spec.template.yml +0 -0
  119. /package/{templates/apps/tools/caws → dist/templates/.caws/tools}/scope-guard.js +0 -0
  120. /package/{templates/apps/tools/caws → dist/templates/.caws}/tools-allow.json +0 -0
  121. /package/{templates/apps/tools/caws → dist/templates/.caws}/waivers.yml +0 -0
@@ -0,0 +1,331 @@
1
+ [
2
+ "node",
3
+ "npm",
4
+ "yarn",
5
+ "pnpm",
6
+ "git",
7
+ "docker",
8
+ "kubectl",
9
+ "aws",
10
+ "azure",
11
+ "gcloud",
12
+ "terraform",
13
+ "ansible",
14
+ "curl",
15
+ "wget",
16
+ "grep",
17
+ "sed",
18
+ "awk",
19
+ "bash",
20
+ "sh",
21
+ "zsh",
22
+ "fish",
23
+ "python",
24
+ "python3",
25
+ "pip",
26
+ "pip3",
27
+ "virtualenv",
28
+ "conda",
29
+ "java",
30
+ "javac",
31
+ "gradle",
32
+ "maven",
33
+ "go",
34
+ "gofmt",
35
+ "rust",
36
+ "cargo",
37
+ "rustfmt",
38
+ "clippy",
39
+ "ruby",
40
+ "gem",
41
+ "bundle",
42
+ "rbenv",
43
+ "php",
44
+ "composer",
45
+ "dotnet",
46
+ "nuget",
47
+ "swift",
48
+ "xcodebuild",
49
+ "make",
50
+ "cmake",
51
+ "ninja",
52
+ "gcc",
53
+ "clang",
54
+ "ld",
55
+ "ar",
56
+ "strip",
57
+ "objdump",
58
+ "nm",
59
+ "readelf",
60
+ "file",
61
+ "hexdump",
62
+ "xxd",
63
+ "base64",
64
+ "openssl",
65
+ "ssh",
66
+ "scp",
67
+ "rsync",
68
+ "tar",
69
+ "gzip",
70
+ "bzip2",
71
+ "xz",
72
+ "zip",
73
+ "unzip",
74
+ "7z",
75
+ "jq",
76
+ "yq",
77
+ "xmlstarlet",
78
+ "html-xml-utils",
79
+ "pandoc",
80
+ "asciidoc",
81
+ "rst2html",
82
+ "markdown",
83
+ "remark",
84
+ "prettier",
85
+ "eslint",
86
+ "tslint",
87
+ "stylelint",
88
+ "htmlhint",
89
+ "csslint",
90
+ "jsonlint",
91
+ "yamllint",
92
+ "shellcheck",
93
+ "hadolint",
94
+ "dockerfile_lint",
95
+ "markdownlint",
96
+ "proselint",
97
+ "vale",
98
+ "alex",
99
+ "write-good",
100
+ "textlint",
101
+ "redpen",
102
+ "languagetool",
103
+ "grammarly",
104
+ "codespell",
105
+ "typos",
106
+ "aspell",
107
+ "hunspell",
108
+ "sort",
109
+ "uniq",
110
+ "cut",
111
+ "paste",
112
+ "join",
113
+ "split",
114
+ "tr",
115
+ "column",
116
+ "fold",
117
+ "fmt",
118
+ "pr",
119
+ "head",
120
+ "tail",
121
+ "wc",
122
+ "nl",
123
+ "od",
124
+ "strings",
125
+ "iconv",
126
+ "dos2unix",
127
+ "unix2dos",
128
+ "mac2unix",
129
+ "unix2mac",
130
+ "pbcopy",
131
+ "pbpaste",
132
+ "xclip",
133
+ "xsel",
134
+ "tmux",
135
+ "screen",
136
+ "vim",
137
+ "nvim",
138
+ "emacs",
139
+ "nano",
140
+ "micro",
141
+ "code",
142
+ "atom",
143
+ "sublime",
144
+ "vimr",
145
+ "macvim",
146
+ "gvim",
147
+ "vscode",
148
+ "intellij",
149
+ "pycharm",
150
+ "webstorm",
151
+ "phpstorm",
152
+ "rubymine",
153
+ "clion",
154
+ "goland",
155
+ "rider",
156
+ "datagrip",
157
+ "android-studio",
158
+ "xcode",
159
+ "eclipse",
160
+ "netbeans",
161
+ "idea",
162
+ "studio",
163
+ "vs",
164
+ "visualstudio",
165
+ "monodevelop",
166
+ "xamarin",
167
+ "rider",
168
+ "resharper",
169
+ "testcafe",
170
+ "cypress",
171
+ "playwright",
172
+ "puppeteer",
173
+ "selenium",
174
+ "webdriver",
175
+ "jest",
176
+ "mocha",
177
+ "jasmine",
178
+ "karma",
179
+ "vitest",
180
+ "testing-library",
181
+ "enzyme",
182
+ "react-testing-library",
183
+ "vue-test-utils",
184
+ "angular-testing-library",
185
+ "svelte-testing-library",
186
+ "lit-testing-library",
187
+ "ember-testing",
188
+ "backbone-testing",
189
+ "jquery-testing",
190
+ "dojo-testing",
191
+ "dojo",
192
+ "mootools",
193
+ "prototype",
194
+ "yui",
195
+ "extjs",
196
+ "sencha",
197
+ "backbone",
198
+ "marionette",
199
+ "chaplin",
200
+ "thorax",
201
+ "handlebars",
202
+ "mustache",
203
+ "underscore",
204
+ "lodash",
205
+ "ramda",
206
+ "functional",
207
+ "lazy",
208
+ "bluebird",
209
+ "q",
210
+ "deferred",
211
+ "async",
212
+ "await",
213
+ "generator",
214
+ "co",
215
+ "redux",
216
+ "mobx",
217
+ "flux",
218
+ "reflux",
219
+ "alt",
220
+ "flummox",
221
+ "delorean",
222
+ "cerebral",
223
+ "kea",
224
+ "zustand",
225
+ "jotai",
226
+ "recoil",
227
+ "valtio",
228
+ "effector",
229
+ "xstate",
230
+ "robot",
231
+ "easy-peasy",
232
+ "pullstate",
233
+ "akita",
234
+ "ngrx",
235
+ "ngxs",
236
+ "akita",
237
+ "elf",
238
+ "pinia",
239
+ "overmind",
240
+ "stately",
241
+ "context",
242
+ "useContext",
243
+ "useReducer",
244
+ "useState",
245
+ "useEffect",
246
+ "useMemo",
247
+ "useCallback",
248
+ "useRef",
249
+ "useImperativeHandle",
250
+ "useLayoutEffect",
251
+ "useDebugValue",
252
+ "useDeferredValue",
253
+ "useTransition",
254
+ "useId",
255
+ "useSyncExternalStore",
256
+ "createContext",
257
+ "createElement",
258
+ "cloneElement",
259
+ "isValidElement",
260
+ "ReactDOM",
261
+ "render",
262
+ "hydrate",
263
+ "createRoot",
264
+ "unmountComponentAtNode",
265
+ "findDOMNode",
266
+ "createPortal",
267
+ "unstable_batchedUpdates",
268
+ "flushSync",
269
+ "React",
270
+ "Component",
271
+ "PureComponent",
272
+ "memo",
273
+ "lazy",
274
+ "Suspense",
275
+ "ErrorBoundary",
276
+ "Profiler",
277
+ "StrictMode",
278
+ "Fragment",
279
+ "createRef",
280
+ "forwardRef",
281
+ "createContext",
282
+ "createElement",
283
+ "cloneElement",
284
+ "isValidElement",
285
+ "Children",
286
+ "map",
287
+ "forEach",
288
+ "count",
289
+ "only",
290
+ "toArray",
291
+ "ReactDOM",
292
+ "render",
293
+ "hydrate",
294
+ "createRoot",
295
+ "unmountComponentAtNode",
296
+ "findDOMNode",
297
+ "createPortal",
298
+ "unstable_batchedUpdates",
299
+ "flushSync",
300
+ "React",
301
+ "Component",
302
+ "PureComponent",
303
+ "memo",
304
+ "lazy",
305
+ "Suspense",
306
+ "ErrorBoundary",
307
+ "Profiler",
308
+ "StrictMode",
309
+ "Fragment",
310
+ "createRef",
311
+ "forwardRef",
312
+ "createContext",
313
+ "createElement",
314
+ "cloneElement",
315
+ "isValidElement",
316
+ "Children",
317
+ "map",
318
+ "forEach",
319
+ "count",
320
+ "only",
321
+ "toArray",
322
+ "ReactDOM",
323
+ "render",
324
+ "hydrate",
325
+ "createRoot",
326
+ "unmountComponentAtNode",
327
+ "findDOMNode",
328
+ "createPortal",
329
+ "unstable_batchedUpdates",
330
+ "flushSync"
331
+ ]
@@ -0,0 +1,19 @@
1
+ waivers:
2
+ # Example waiver for urgent fixes
3
+ # - id: "HOTFIX-001"
4
+ # description: "Urgent security fix - mutation testing waived"
5
+ # gates: ["mutation", "coverage"]
6
+ # reason: "urgent_fix"
7
+ # approver: "senior-dev"
8
+ # expires_at: "2025-10-07T10:00:00.000Z"
9
+ # projects: ["FEAT-1234"]
10
+ # max_trust_score: 79
11
+
12
+ # Example waiver for experimental features
13
+ # - id: "EXP-001"
14
+ # description: "Experimental feature - relaxed testing"
15
+ # gates: ["mutation", "contracts"]
16
+ # reason: "experimental"
17
+ # approver: "tech-lead"
18
+ # expires_at: "2025-10-14T10:00:00.000Z"
19
+ # max_trust_score: 75
@@ -22,7 +22,7 @@ if [ ! -f ".caws/working-spec.yaml" ] && [ ! -f ".caws/working-spec.yml" ]; then
22
22
  fi
23
23
 
24
24
  # Check if scope-guard tool exists
25
- if [ -f "apps/tools/caws/scope-guard.js" ]; then
25
+ if [ -f ".caws/tools/scope-guard.js" ]; then
26
26
  # Extract file paths from attachments
27
27
  FILE_PATHS=$(echo "$ATTACHMENTS" | jq -r '.[] | select(.type=="file") | .file_path' 2>/dev/null || echo "")
28
28
 
@@ -31,7 +31,7 @@ if [ -f "apps/tools/caws/scope-guard.js" ]; then
31
31
  OUT_OF_SCOPE=()
32
32
  while IFS= read -r file; do
33
33
  if [ -n "$file" ]; then
34
- if ! node apps/tools/caws/scope-guard.js check "$file" 2>/dev/null; then
34
+ if ! node .caws/tools/scope-guard.js check "$file" 2>/dev/null; then
35
35
  OUT_OF_SCOPE+=("$file")
36
36
  fi
37
37
  fi
@@ -14,27 +14,62 @@ INPUT=$(cat)
14
14
  # Extract file path from input
15
15
  FILE_PATH=$(echo "$INPUT" | jq -r '.file_path // ""')
16
16
 
17
- # Only validate if working-spec.yaml was edited
18
- if [[ "$FILE_PATH" == *"working-spec.yaml"* ]] || [[ "$FILE_PATH" == *"working-spec.yml"* ]]; then
19
- echo "🔍 Validating CAWS working spec..." >&2
17
+ # Validate if any CAWS YAML file was edited (.caws/**/*.yaml or .caws/**/*.yml)
18
+ if [[ "$FILE_PATH" == *".caws/"* ]] && ([[ "$FILE_PATH" == *.yaml ]] || [[ "$FILE_PATH" == *.yml ]]); then
19
+ echo "🔍 Validating CAWS spec file..." >&2
20
20
 
21
- # Check if CAWS CLI is available
21
+ # First, validate YAML syntax
22
+ if command -v node >/dev/null 2>&1; then
23
+ # Check YAML syntax using Node.js
24
+ YAML_SYNTAX_VALID=$(node -e "
25
+ const yaml = require('js-yaml');
26
+ const fs = require('fs');
27
+ try {
28
+ const content = fs.readFileSync('$FILE_PATH', 'utf8');
29
+ yaml.load(content);
30
+ process.exit(0);
31
+ } catch (error) {
32
+ console.error('YAML syntax error:', error.message);
33
+ if (error.mark) {
34
+ console.error('Line:', error.mark.line + 1, 'Column:', error.mark.column + 1);
35
+ }
36
+ process.exit(1);
37
+ }
38
+ " 2>&1)
39
+
40
+ if [ $? -ne 0 ]; then
41
+ echo '{
42
+ "userMessage": "⚠️ YAML syntax error detected",
43
+ "agentMessage": "The spec file has invalid YAML syntax. Fix syntax errors before continuing.",
44
+ "suggestions": [
45
+ "Check indentation (YAML uses 2 spaces)",
46
+ "Ensure all array items use consistent format",
47
+ "Remove duplicate keys",
48
+ "Consider using '\''caws specs create <id>'\'' instead of manual creation"
49
+ ]
50
+ }' 2>/dev/null
51
+ exit 0
52
+ fi
53
+ fi
54
+
55
+ # Check if CAWS CLI is available for semantic validation
22
56
  if command -v caws &> /dev/null; then
23
57
  # Run CAWS validation with suggestions
24
58
  if VALIDATION=$(caws validate "$FILE_PATH" --quiet 2>&1); then
25
- echo '{"userMessage":"✅ CAWS spec validation passed","agentMessage":"Working specification is valid and complete."}' 2>/dev/null
59
+ echo '{"userMessage":"✅ CAWS spec validation passed","agentMessage":"Specification is valid and complete."}' 2>/dev/null
26
60
  else
27
61
  # Get suggestions for fixing the spec
28
62
  SUGGESTIONS=$(caws validate "$FILE_PATH" --suggestions 2>/dev/null | head -5 | tr '\n' '; ' | sed 's/; $//' || echo "Run caws validate --suggestions for details")
29
63
 
30
64
  echo '{
31
65
  "userMessage": "⚠️ CAWS spec validation failed. Run: caws validate --suggestions",
32
- "agentMessage": "The working-spec.yaml file has validation errors. Please review and fix before continuing.",
66
+ "agentMessage": "The spec file has validation errors. Please review and fix before continuing.",
33
67
  "suggestions": [
34
68
  "Run caws validate --suggestions for detailed error messages",
35
69
  "Check required fields: id, title, risk_tier, mode",
36
70
  "Ensure acceptance criteria are properly defined",
37
- "Verify scope boundaries are appropriate"
71
+ "Verify scope boundaries are appropriate",
72
+ "Consider using '\''caws specs create <id>'\'' for proper structure"
38
73
  ]
39
74
  }' 2>/dev/null
40
75
  fi