@paths.design/caws-cli 9.3.2 → 10.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (273) hide show
  1. package/README.md +58 -27
  2. package/dist/commands/archive.js +67 -28
  3. package/dist/commands/burnup.js +20 -11
  4. package/dist/commands/diagnose.js +34 -22
  5. package/dist/commands/evaluate.js +27 -15
  6. package/dist/commands/gates.js +122 -0
  7. package/dist/commands/init.js +143 -15
  8. package/dist/commands/iterate.js +77 -4
  9. package/dist/commands/parallel.js +4 -0
  10. package/dist/commands/plan.js +9 -19
  11. package/dist/commands/provenance.js +53 -17
  12. package/dist/commands/quality-monitor.js +64 -45
  13. package/dist/commands/sidecar.js +71 -0
  14. package/dist/commands/specs.js +233 -44
  15. package/dist/commands/status.js +113 -9
  16. package/dist/commands/tutorial.js +10 -9
  17. package/dist/commands/validate.js +49 -6
  18. package/dist/commands/verify-acs.js +35 -78
  19. package/dist/commands/waivers.js +69 -12
  20. package/dist/commands/worktree.js +50 -25
  21. package/dist/error-handler.js +2 -13
  22. package/dist/gates/budget-limit.js +116 -0
  23. package/dist/gates/feedback.js +260 -0
  24. package/dist/gates/format.js +179 -0
  25. package/dist/gates/god-object.js +117 -0
  26. package/dist/gates/pipeline.js +167 -0
  27. package/dist/gates/scope-boundary.js +93 -0
  28. package/dist/gates/spec-completeness.js +102 -0
  29. package/dist/gates/todo-detection.js +205 -0
  30. package/dist/index.js +130 -151
  31. package/dist/parallel/parallel-manager.js +3 -3
  32. package/dist/policy/PolicyManager.js +42 -10
  33. package/dist/scaffold/claude-hooks.js +24 -1
  34. package/dist/scaffold/git-hooks.js +45 -102
  35. package/dist/scaffold/index.js +4 -3
  36. package/dist/session/session-manager.js +71 -14
  37. package/dist/sidecars/index.js +33 -0
  38. package/dist/sidecars/listeners.js +40 -0
  39. package/dist/sidecars/provenance-summary.js +238 -0
  40. package/dist/sidecars/quality-gaps.js +258 -0
  41. package/dist/sidecars/schema.js +149 -0
  42. package/dist/sidecars/spec-drift.js +151 -0
  43. package/dist/sidecars/waiver-draft.js +176 -0
  44. package/dist/templates/.caws/schemas/policy.schema.json +50 -0
  45. package/dist/templates/.caws/schemas/waivers.schema.json +30 -24
  46. package/dist/templates/.caws/schemas/working-spec.schema.json +51 -8
  47. package/dist/templates/.caws/schemas/worktrees.schema.json +3 -1
  48. package/dist/templates/.caws/templates/working-spec.template.yml +7 -3
  49. package/dist/templates/.claude/hooks/audit.sh +0 -0
  50. package/dist/templates/.claude/hooks/block-dangerous.sh +52 -11
  51. package/dist/templates/.claude/hooks/classify_command.py +592 -0
  52. package/dist/templates/.claude/hooks/doc-frontmatter-check.sh +173 -0
  53. package/dist/templates/.claude/hooks/quality-check.sh +23 -10
  54. package/dist/templates/.claude/hooks/scope-guard.sh +34 -32
  55. package/dist/templates/.claude/hooks/session-caws-status.sh +2 -2
  56. package/dist/templates/.claude/hooks/session-log.sh +76 -3
  57. package/dist/templates/.claude/hooks/stop-worktree-check.sh +1 -1
  58. package/dist/templates/.claude/hooks/test_classify_command.py +370 -0
  59. package/dist/templates/.claude/hooks/test_wrapper_smoke.sh +96 -0
  60. package/dist/templates/.claude/hooks/worktree-guard.sh +2 -2
  61. package/dist/templates/.claude/hooks/worktree-write-guard.sh +1 -1
  62. package/dist/templates/.claude/settings.json +26 -0
  63. package/dist/templates/.cursor/hooks/caws-quality-check.sh +4 -4
  64. package/dist/templates/.cursor/hooks/caws-scope-guard.sh +1 -1
  65. package/dist/templates/.cursor/hooks/session-log.sh +924 -0
  66. package/dist/templates/.cursor/hooks.json +25 -0
  67. package/dist/templates/.cursor/rules/02-quality-gates.mdc +3 -5
  68. package/dist/templates/.cursor/rules/10-documentation-quality-standards.mdc +6 -11
  69. package/dist/templates/.cursor/rules/11-scope-management-waivers.mdc +14 -18
  70. package/dist/templates/.cursor/rules/12-implementation-completeness.mdc +4 -4
  71. package/dist/templates/.cursor/rules/13-language-agnostic-standards.mdc +3 -13
  72. package/dist/templates/.github/copilot-instructions.md +5 -5
  73. package/dist/templates/.idea/runConfigurations/CAWS_Evaluate.xml +1 -1
  74. package/dist/templates/.junie/guidelines.md +2 -2
  75. package/dist/templates/.vscode/settings.json +3 -1
  76. package/dist/templates/.windsurf/rules/caws-quality-standards.md +2 -2
  77. package/dist/templates/.windsurf/workflows/caws-guided-development.md +3 -3
  78. package/dist/templates/CLAUDE.md +43 -8
  79. package/dist/templates/agents.md +29 -9
  80. package/dist/templates/docs/README.md +8 -7
  81. package/dist/templates/scripts/new_feature.sh +80 -0
  82. package/dist/test-analysis.js +43 -30
  83. package/dist/tool-loader.js +1 -1
  84. package/dist/utils/agent-session.js +202 -0
  85. package/dist/utils/detection.js +8 -2
  86. package/dist/utils/finalization.js +7 -6
  87. package/dist/utils/gitignore-updater.js +3 -0
  88. package/dist/utils/lifecycle-events.js +94 -0
  89. package/dist/utils/quality-gates-utils.js +29 -44
  90. package/dist/utils/schema-validator.js +42 -0
  91. package/dist/utils/spec-resolver.js +93 -21
  92. package/dist/utils/working-state.js +505 -0
  93. package/dist/validation/spec-validation.js +92 -22
  94. package/dist/waivers-manager.js +60 -6
  95. package/dist/worktree/worktree-manager.js +390 -93
  96. package/package.json +6 -6
  97. package/templates/.caws/schemas/policy.schema.json +50 -0
  98. package/templates/.caws/schemas/waivers.schema.json +30 -24
  99. package/templates/.caws/schemas/working-spec.schema.json +51 -8
  100. package/templates/.caws/schemas/worktrees.schema.json +3 -1
  101. package/templates/.caws/templates/working-spec.template.yml +7 -3
  102. package/templates/.claude/hooks/block-dangerous.sh +52 -11
  103. package/templates/.claude/hooks/classify_command.py +592 -0
  104. package/templates/.claude/hooks/doc-frontmatter-check.sh +173 -0
  105. package/templates/.claude/hooks/quality-check.sh +23 -10
  106. package/templates/.claude/hooks/scope-guard.sh +34 -32
  107. package/templates/.claude/hooks/session-caws-status.sh +2 -2
  108. package/templates/.claude/hooks/session-log.sh +76 -3
  109. package/templates/.claude/hooks/stop-worktree-check.sh +1 -1
  110. package/templates/.claude/hooks/test_classify_command.py +370 -0
  111. package/templates/.claude/hooks/test_wrapper_smoke.sh +96 -0
  112. package/templates/.claude/hooks/worktree-guard.sh +2 -2
  113. package/templates/.claude/hooks/worktree-write-guard.sh +1 -1
  114. package/templates/.claude/settings.json +26 -0
  115. package/templates/.cursor/hooks/caws-quality-check.sh +4 -4
  116. package/templates/.cursor/hooks/caws-scope-guard.sh +1 -1
  117. package/templates/.cursor/hooks/session-log.sh +924 -0
  118. package/templates/.cursor/hooks.json +25 -0
  119. package/templates/.cursor/rules/02-quality-gates.mdc +3 -5
  120. package/templates/.cursor/rules/10-documentation-quality-standards.mdc +6 -11
  121. package/templates/.cursor/rules/11-scope-management-waivers.mdc +14 -18
  122. package/templates/.cursor/rules/12-implementation-completeness.mdc +4 -4
  123. package/templates/.cursor/rules/13-language-agnostic-standards.mdc +3 -13
  124. package/templates/.github/copilot-instructions.md +5 -5
  125. package/templates/.idea/runConfigurations/CAWS_Evaluate.xml +1 -1
  126. package/templates/.junie/guidelines.md +2 -2
  127. package/templates/.vscode/settings.json +3 -1
  128. package/templates/.windsurf/rules/caws-quality-standards.md +2 -2
  129. package/templates/.windsurf/workflows/caws-guided-development.md +3 -3
  130. package/templates/CLAUDE.md +43 -8
  131. package/templates/{AGENTS.md → agents.md} +29 -9
  132. package/templates/docs/README.md +8 -7
  133. package/templates/scripts/new_feature.sh +80 -0
  134. package/dist/budget-derivation.d.ts +0 -74
  135. package/dist/budget-derivation.d.ts.map +0 -1
  136. package/dist/cicd-optimizer.d.ts +0 -142
  137. package/dist/cicd-optimizer.d.ts.map +0 -1
  138. package/dist/commands/archive.d.ts +0 -51
  139. package/dist/commands/archive.d.ts.map +0 -1
  140. package/dist/commands/burnup.d.ts +0 -6
  141. package/dist/commands/burnup.d.ts.map +0 -1
  142. package/dist/commands/diagnose.d.ts +0 -52
  143. package/dist/commands/diagnose.d.ts.map +0 -1
  144. package/dist/commands/evaluate.d.ts +0 -8
  145. package/dist/commands/evaluate.d.ts.map +0 -1
  146. package/dist/commands/init.d.ts +0 -5
  147. package/dist/commands/init.d.ts.map +0 -1
  148. package/dist/commands/iterate.d.ts +0 -8
  149. package/dist/commands/iterate.d.ts.map +0 -1
  150. package/dist/commands/mode.d.ts +0 -25
  151. package/dist/commands/mode.d.ts.map +0 -1
  152. package/dist/commands/parallel.d.ts +0 -7
  153. package/dist/commands/parallel.d.ts.map +0 -1
  154. package/dist/commands/plan.d.ts +0 -49
  155. package/dist/commands/plan.d.ts.map +0 -1
  156. package/dist/commands/provenance.d.ts +0 -32
  157. package/dist/commands/provenance.d.ts.map +0 -1
  158. package/dist/commands/quality-gates.d.ts +0 -6
  159. package/dist/commands/quality-gates.d.ts.map +0 -1
  160. package/dist/commands/quality-gates.js +0 -444
  161. package/dist/commands/quality-monitor.d.ts +0 -17
  162. package/dist/commands/quality-monitor.d.ts.map +0 -1
  163. package/dist/commands/session.d.ts +0 -7
  164. package/dist/commands/session.d.ts.map +0 -1
  165. package/dist/commands/specs.d.ts +0 -77
  166. package/dist/commands/specs.d.ts.map +0 -1
  167. package/dist/commands/status.d.ts +0 -44
  168. package/dist/commands/status.d.ts.map +0 -1
  169. package/dist/commands/templates.d.ts +0 -74
  170. package/dist/commands/templates.d.ts.map +0 -1
  171. package/dist/commands/tool.d.ts +0 -13
  172. package/dist/commands/tool.d.ts.map +0 -1
  173. package/dist/commands/troubleshoot.d.ts +0 -8
  174. package/dist/commands/troubleshoot.d.ts.map +0 -1
  175. package/dist/commands/troubleshoot.js +0 -104
  176. package/dist/commands/tutorial.d.ts +0 -55
  177. package/dist/commands/tutorial.d.ts.map +0 -1
  178. package/dist/commands/validate.d.ts +0 -15
  179. package/dist/commands/validate.d.ts.map +0 -1
  180. package/dist/commands/waivers.d.ts +0 -8
  181. package/dist/commands/waivers.d.ts.map +0 -1
  182. package/dist/commands/workflow.d.ts +0 -85
  183. package/dist/commands/workflow.d.ts.map +0 -1
  184. package/dist/commands/worktree.d.ts +0 -7
  185. package/dist/commands/worktree.d.ts.map +0 -1
  186. package/dist/config/index.d.ts +0 -29
  187. package/dist/config/index.d.ts.map +0 -1
  188. package/dist/config/lite-scope.d.ts +0 -33
  189. package/dist/config/lite-scope.d.ts.map +0 -1
  190. package/dist/config/modes.d.ts +0 -264
  191. package/dist/config/modes.d.ts.map +0 -1
  192. package/dist/constants/spec-types.d.ts +0 -93
  193. package/dist/constants/spec-types.d.ts.map +0 -1
  194. package/dist/error-handler.d.ts +0 -151
  195. package/dist/error-handler.d.ts.map +0 -1
  196. package/dist/generators/jest-config-generator.d.ts +0 -32
  197. package/dist/generators/jest-config-generator.d.ts.map +0 -1
  198. package/dist/generators/jest-config.d.ts +0 -32
  199. package/dist/generators/jest-config.d.ts.map +0 -1
  200. package/dist/generators/jest-config.js +0 -242
  201. package/dist/generators/working-spec.d.ts +0 -13
  202. package/dist/generators/working-spec.d.ts.map +0 -1
  203. package/dist/index-new.d.ts +0 -5
  204. package/dist/index-new.d.ts.map +0 -1
  205. package/dist/index-new.js +0 -317
  206. package/dist/index.d.ts +0 -5
  207. package/dist/index.d.ts.map +0 -1
  208. package/dist/index.js.backup +0 -4711
  209. package/dist/minimal-cli.d.ts +0 -3
  210. package/dist/minimal-cli.d.ts.map +0 -1
  211. package/dist/parallel/parallel-manager.d.ts +0 -67
  212. package/dist/parallel/parallel-manager.d.ts.map +0 -1
  213. package/dist/policy/PolicyManager.d.ts +0 -104
  214. package/dist/policy/PolicyManager.d.ts.map +0 -1
  215. package/dist/scaffold/claude-hooks.d.ts +0 -28
  216. package/dist/scaffold/claude-hooks.d.ts.map +0 -1
  217. package/dist/scaffold/cursor-hooks.d.ts +0 -7
  218. package/dist/scaffold/cursor-hooks.d.ts.map +0 -1
  219. package/dist/scaffold/git-hooks.d.ts +0 -38
  220. package/dist/scaffold/git-hooks.d.ts.map +0 -1
  221. package/dist/scaffold/index.d.ts +0 -17
  222. package/dist/scaffold/index.d.ts.map +0 -1
  223. package/dist/session/session-manager.d.ts +0 -94
  224. package/dist/session/session-manager.d.ts.map +0 -1
  225. package/dist/spec/SpecFileManager.d.ts +0 -146
  226. package/dist/spec/SpecFileManager.d.ts.map +0 -1
  227. package/dist/templates/.cursor/hooks/caws-tool-validation.sh +0 -121
  228. package/dist/templates/.github/copilot/instructions.md +0 -311
  229. package/dist/test-analysis.d.ts +0 -231
  230. package/dist/test-analysis.d.ts.map +0 -1
  231. package/dist/tool-interface.d.ts +0 -236
  232. package/dist/tool-interface.d.ts.map +0 -1
  233. package/dist/tool-loader.d.ts +0 -77
  234. package/dist/tool-loader.d.ts.map +0 -1
  235. package/dist/tool-validator.d.ts +0 -72
  236. package/dist/tool-validator.d.ts.map +0 -1
  237. package/dist/utils/async-utils.d.ts +0 -73
  238. package/dist/utils/async-utils.d.ts.map +0 -1
  239. package/dist/utils/command-wrapper.d.ts +0 -66
  240. package/dist/utils/command-wrapper.d.ts.map +0 -1
  241. package/dist/utils/detection.d.ts +0 -14
  242. package/dist/utils/detection.d.ts.map +0 -1
  243. package/dist/utils/error-categories.d.ts +0 -52
  244. package/dist/utils/error-categories.d.ts.map +0 -1
  245. package/dist/utils/finalization.d.ts +0 -17
  246. package/dist/utils/finalization.d.ts.map +0 -1
  247. package/dist/utils/git-lock.d.ts +0 -13
  248. package/dist/utils/git-lock.d.ts.map +0 -1
  249. package/dist/utils/gitignore-updater.d.ts +0 -39
  250. package/dist/utils/gitignore-updater.d.ts.map +0 -1
  251. package/dist/utils/ide-detection.d.ts +0 -89
  252. package/dist/utils/ide-detection.d.ts.map +0 -1
  253. package/dist/utils/project-analysis.d.ts +0 -34
  254. package/dist/utils/project-analysis.d.ts.map +0 -1
  255. package/dist/utils/promise-utils.d.ts +0 -30
  256. package/dist/utils/promise-utils.d.ts.map +0 -1
  257. package/dist/utils/quality-gates-utils.d.ts +0 -49
  258. package/dist/utils/quality-gates-utils.d.ts.map +0 -1
  259. package/dist/utils/quality-gates.d.ts +0 -49
  260. package/dist/utils/quality-gates.d.ts.map +0 -1
  261. package/dist/utils/quality-gates.js +0 -402
  262. package/dist/utils/spec-resolver.d.ts +0 -80
  263. package/dist/utils/spec-resolver.d.ts.map +0 -1
  264. package/dist/utils/typescript-detector.d.ts +0 -66
  265. package/dist/utils/typescript-detector.d.ts.map +0 -1
  266. package/dist/utils/yaml-validation.d.ts +0 -32
  267. package/dist/utils/yaml-validation.d.ts.map +0 -1
  268. package/dist/validation/spec-validation.d.ts +0 -43
  269. package/dist/validation/spec-validation.d.ts.map +0 -1
  270. package/dist/waivers-manager.d.ts +0 -167
  271. package/dist/waivers-manager.d.ts.map +0 -1
  272. package/dist/worktree/worktree-manager.d.ts +0 -54
  273. package/dist/worktree/worktree-manager.d.ts.map +0 -1
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=minimal-cli.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"minimal-cli.d.ts","sourceRoot":"","sources":["../src/minimal-cli.js"],"names":[],"mappings":""}
@@ -1,67 +0,0 @@
1
- /**
2
- * Load and validate a parallel plan YAML file
3
- * @param {string} filePath - Path to plan YAML file
4
- * @returns {Object} Parsed and validated plan
5
- */
6
- export function loadPlan(filePath: string): any;
7
- /**
8
- * Set up parallel worktrees from a plan
9
- * @param {Object} plan - Validated plan from loadPlan
10
- * @returns {Object[]} Array of created worktree entries
11
- */
12
- export function setupParallel(plan: any): any[];
13
- /**
14
- * Get status of all parallel worktrees
15
- * @returns {Object|null} Parallel status or null if no active run
16
- */
17
- export function getParallelStatus(): any | null;
18
- /**
19
- * Merge all parallel branches back to base
20
- * @param {Object} options - Merge options
21
- * @param {string} [options.strategy] - Override merge strategy
22
- * @param {boolean} [options.dryRun] - Preview without executing
23
- * @param {boolean} [options.force] - Force merge even with conflicts
24
- * @returns {Object} Merge results {merged, failed, conflicts}
25
- */
26
- export function mergeParallel(options?: {
27
- strategy?: string;
28
- dryRun?: boolean;
29
- force?: boolean;
30
- }): any;
31
- /**
32
- * Tear down all parallel worktrees
33
- * @param {Object} options - Teardown options
34
- * @param {boolean} [options.deleteBranches] - Also delete branches
35
- * @param {boolean} [options.force] - Force removal even if dirty
36
- * @returns {Object} Teardown results {destroyed, failed}
37
- */
38
- export function teardownParallel(options?: {
39
- deleteBranches?: boolean;
40
- force?: boolean;
41
- }): any;
42
- /**
43
- * Detect file-level conflicts between agent branches
44
- * @param {string} baseBranch - Base branch name
45
- * @param {Object[]} agentStatuses - Agent status objects with branch field
46
- * @returns {Object[]} Conflicts: [{file, agents: [name, name]}]
47
- */
48
- export function detectFileConflicts(baseBranch: string, agentStatuses: any[]): any[];
49
- /**
50
- * Load the parallel registry
51
- * @param {string} root - Repository root
52
- * @returns {Object|null} Registry or null if not found
53
- */
54
- export function loadParallelRegistry(root: string): any | null;
55
- /**
56
- * Save the parallel registry
57
- * @param {string} root - Repository root
58
- * @param {Object} data - Registry data
59
- */
60
- export function saveParallelRegistry(root: string, data: any): void;
61
- /**
62
- * Remove the parallel registry
63
- * @param {string} root - Repository root
64
- */
65
- export function removeParallelRegistry(root: string): void;
66
- export const PARALLEL_REGISTRY: ".caws/parallel.json";
67
- //# sourceMappingURL=parallel-manager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parallel-manager.d.ts","sourceRoot":"","sources":["../../src/parallel/parallel-manager.js"],"names":[],"mappings":"AA0EA;;;;GAIG;AACH,mCAHW,MAAM,OAoDhB;AAED;;;;GAIG;AACH,0CAFa,KAAQ,CAyCpB;AAED;;;GAGG;AACH,qCAFa,MAAO,IAAI,CA2DvB;AA2CD;;;;;;;GAOG;AACH,wCALG;IAAyB,QAAQ,GAAzB,MAAM;IACY,MAAM,GAAxB,OAAO;IACW,KAAK,GAAvB,OAAO;CACf,OA2GF;AAED;;;;;;GAMG;AACH,2CAJG;IAA0B,cAAc,GAAhC,OAAO;IACW,KAAK,GAAvB,OAAO;CACf,OA0BF;AA3LD;;;;;GAKG;AACH,gDAJW,MAAM,iBACN,KAAQ,GACN,KAAQ,CAmCpB;AAnPD;;;;GAIG;AACH,2CAHW,MAAM,GACJ,MAAO,IAAI,CAYvB;AAED;;;;GAIG;AACH,2CAHW,MAAM,mBAOhB;AAED;;;GAGG;AACH,6CAFW,MAAM,QAOhB;AAnDD,gCAA0B,qBAAqB,CAAC"}
@@ -1,104 +0,0 @@
1
- /**
2
- * Policy Manager - Handles policy loading with intelligent caching
3
- *
4
- * Features:
5
- * - TTL-based caching for performance
6
- * - Graceful fallback to defaults when policy.yaml missing
7
- * - Cache inspection and management API
8
- * - Waiver validation and delta application
9
- */
10
- export class PolicyManager {
11
- constructor(options?: {});
12
- enableCaching: any;
13
- cacheTTL: any;
14
- policyCache: Map<any, any>;
15
- /**
16
- * Load CAWS policy from policy.yaml with caching
17
- *
18
- * @param {string} projectRoot - Project root directory
19
- * @param {Object} options - Loading options
20
- * @param {boolean} options.useCache - Use cache if available (default: true)
21
- * @param {number} options.cacheTTL - Cache TTL override in milliseconds
22
- * @returns {Promise<Object>} Policy object
23
- */
24
- loadPolicy(projectRoot: string, options?: {
25
- useCache: boolean;
26
- cacheTTL: number;
27
- }): Promise<any>;
28
- /**
29
- * Load a waiver document by ID
30
- *
31
- * @param {string} waiverId - Waiver ID (e.g., WV-0001)
32
- * @param {string} projectRoot - Project root directory
33
- * @returns {Promise<Object|null>} Waiver document or null if not found
34
- */
35
- loadWaiver(waiverId: string, projectRoot: string): Promise<any | null>;
36
- /**
37
- * Check if a waiver is currently valid
38
- *
39
- * @param {Object} waiver - Waiver document
40
- * @returns {boolean} True if waiver is valid and active
41
- */
42
- isWaiverValid(waiver: any): boolean;
43
- /**
44
- * Apply waivers to baseline budget
45
- *
46
- * @param {Object} baseline - Baseline budget from policy
47
- * @param {string[]} waiverIds - Array of waiver IDs to apply
48
- * @param {string} projectRoot - Project root directory
49
- * @returns {Promise<Object>} Effective budget with waivers applied
50
- */
51
- applyWaivers(baseline: any, waiverIds: string[], projectRoot: string): Promise<any>;
52
- /**
53
- * Validate policy structure
54
- *
55
- * @param {Object} policy - Policy to validate
56
- * @throws {Error} If policy is invalid
57
- */
58
- validatePolicy(policy: any): void;
59
- /**
60
- * Get default CAWS policy
61
- *
62
- * Returns sensible defaults when policy.yaml doesn't exist.
63
- *
64
- * @returns {Object} Default policy configuration
65
- */
66
- getDefaultPolicy(): any;
67
- /**
68
- * Clear policy cache
69
- *
70
- * @param {string} [projectRoot] - Specific project to clear, or all if omitted
71
- */
72
- clearCache(projectRoot?: string): void;
73
- /**
74
- * Get cache status for a project
75
- *
76
- * @param {string} projectRoot - Project root directory
77
- * @returns {Object} Cache status information
78
- */
79
- getCacheStatus(projectRoot: string): any;
80
- /**
81
- * Reload policy from disk (bypassing cache)
82
- *
83
- * @param {string} projectRoot - Project root directory
84
- * @returns {Promise<Object>} Fresh policy
85
- */
86
- reloadPolicy(projectRoot: string): Promise<any>;
87
- /**
88
- * Get all cached projects
89
- *
90
- * @returns {string[]} Array of project roots with cached policies
91
- */
92
- getCachedProjects(): string[];
93
- /**
94
- * Get cache statistics
95
- *
96
- * @returns {Object} Cache statistics
97
- */
98
- getCacheStats(): any;
99
- }
100
- export const defaultPolicyManager: PolicyManager;
101
- export declare function loadPolicy(projectRoot: any, options: any): Promise<any>;
102
- export declare function clearCache(projectRoot: any): void;
103
- export declare function getCacheStatus(projectRoot: any): any;
104
- //# sourceMappingURL=PolicyManager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PolicyManager.d.ts","sourceRoot":"","sources":["../../src/policy/PolicyManager.js"],"names":[],"mappings":"AAWA;;;;;;;;GAQG;AACH;IACE,0BAIC;IAHC,mBAAkD;IAClD,cAA0C;IAC1C,2BAA4B;IAG9B;;;;;;;;OAQG;IACH,wBANW,MAAM,YAEd;QAAyB,QAAQ,EAAzB,OAAO;QACS,QAAQ,EAAxB,MAAM;KACd,GAAU,OAAO,KAAQ,CAuG3B;IAED;;;;;;OAMG;IACH,qBAJW,MAAM,eACN,MAAM,GACJ,OAAO,CAAC,MAAO,IAAI,CAAC,CAchC;IAED;;;;;OAKG;IACH,4BAFa,OAAO,CA2BnB;IAED;;;;;;;OAOG;IACH,uCAJW,MAAM,EAAE,eACR,MAAM,GACJ,OAAO,KAAQ,CA2B3B;IAED;;;;;OAKG;IACH,kCA8BC;IAED;;;;;;OAMG;IACH,wBAoDC;IAED;;;;OAIG;IACH,yBAFW,MAAM,QAQhB;IAED;;;;;OAKG;IACH,4BAHW,MAAM,OAmBhB;IAED;;;;;OAKG;IACH,0BAHW,MAAM,GACJ,OAAO,KAAQ,CAK3B;IAED;;;;OAIG;IACH,qBAFa,MAAM,EAAE,CAIpB;IAED;;;;OAIG;IACH,qBA2BC;CACF;AAGD,iDAAiD;AAOnC,iFAA+E;AAC/E,2DAA6D;AACzD,8DAAiE"}
@@ -1,28 +0,0 @@
1
- /**
2
- * Scaffold Claude Code hooks for a CAWS project
3
- * Creates .claude/settings.json with hooks and .claude/hooks/ directory with scripts
4
- *
5
- * @param {string} projectDir - Project directory path
6
- * @param {string[]} levels - Hook levels to enable: 'safety', 'quality', 'scope', 'audit'
7
- */
8
- export function scaffoldClaudeHooks(projectDir: string, levels?: string[]): Promise<void>;
9
- /**
10
- * Generate Claude Code settings with hooks configuration
11
- * @param {string[]} levels - Enabled hook levels
12
- * @param {Set<string>} enabledHooks - Set of enabled hook script names
13
- * @returns {Object} Settings object for settings.json
14
- */
15
- export function generateClaudeSettings(levels: string[], _enabledHooks: any): any;
16
- /**
17
- * Check if Claude Code hooks are already configured
18
- * @param {string} projectDir - Project directory
19
- * @returns {boolean} True if hooks are configured
20
- */
21
- export function hasClaudeHooks(projectDir: string): boolean;
22
- /**
23
- * List configured Claude Code hooks
24
- * @param {string} projectDir - Project directory
25
- * @returns {Object} Hook configuration or null
26
- */
27
- export function getClaudeHooksConfig(projectDir: string): any;
28
- //# sourceMappingURL=claude-hooks.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude-hooks.d.ts","sourceRoot":"","sources":["../../src/scaffold/claude-hooks.js"],"names":[],"mappings":"AAaA;;;;;;GAMG;AACH,gDAHW,MAAM,WACN,MAAM,EAAE,iBA0IlB;AAED;;;;;GAKG;AACH,+CAJW,MAAM,EAAE,2BAsNlB;AAED;;;;GAIG;AACH,2CAHW,MAAM,GACJ,OAAO,CAcnB;AAED;;;;GAIG;AACH,iDAHW,MAAM,OAehB"}
@@ -1,7 +0,0 @@
1
- /**
2
- * Scaffold Cursor hooks for a CAWS project
3
- * @param {string} projectDir - Project directory path
4
- * @param {string[]} levels - Hook levels to enable
5
- */
6
- export function scaffoldCursorHooks(projectDir: string, levels?: string[]): Promise<void>;
7
- //# sourceMappingURL=cursor-hooks.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cursor-hooks.d.ts","sourceRoot":"","sources":["../../src/scaffold/cursor-hooks.js"],"names":[],"mappings":"AAaA;;;;GAIG;AACH,gDAHW,MAAM,WACN,MAAM,EAAE,iBA6JlB"}
@@ -1,38 +0,0 @@
1
- /**
2
- * Scaffold git hooks for CAWS provenance tracking
3
- * @param {string} projectDir - Project directory path
4
- * @param {Object} options - Hook options
5
- */
6
- export function scaffoldGitHooks(projectDir: string, options?: any): Promise<{
7
- added: number;
8
- skipped: number;
9
- }>;
10
- /**
11
- * Remove CAWS git hooks
12
- * @param {string} projectDir - Project directory path
13
- */
14
- export function removeGitHooks(projectDir: string): Promise<void>;
15
- /**
16
- * Check git hooks status
17
- * @param {string} projectDir - Project directory path
18
- */
19
- export function checkGitHooksStatus(projectDir: string): Promise<void>;
20
- /**
21
- * Generate pre-push hook content
22
- * Blocks --no-verify to enforce quality gates before pushing
23
- */
24
- export function generatePrePushHook(): string;
25
- /**
26
- * Generate pre-commit hook content with staged file quality gates
27
- * Implements fallback chain: Node script → CLI → Python scripts → Skip gracefully
28
- */
29
- export function generatePreCommitHook(options: any): string;
30
- /**
31
- * Generate post-commit hook content
32
- */
33
- export function generatePostCommitHook(): string;
34
- /**
35
- * Generate commit-msg hook content
36
- */
37
- export function generateCommitMsgHook(): string;
38
- //# sourceMappingURL=git-hooks.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"git-hooks.d.ts","sourceRoot":"","sources":["../../src/scaffold/git-hooks.js"],"names":[],"mappings":"AAUA;;;;GAIG;AACH,6CAHW,MAAM;;;GAwGhB;AAgvBD;;;GAGG;AACH,2CAFW,MAAM,iBAkChB;AAED;;;GAGG;AACH,gDAFW,MAAM,iBAgDhB;AAxYD;;;GAGG;AACH,8CA2MC;AA7oBD;;;GAGG;AACH,4DAgZC;AAED;;GAEG;AACH,iDAmCC;AAmND;;GAEG;AACH,gDA0FC"}
@@ -1,17 +0,0 @@
1
- /**
2
- * Scaffold existing project with CAWS components
3
- * @param {Object} options - Scaffold options
4
- */
5
- export function scaffoldProject(options: any): Promise<void>;
6
- export function scaffoldIDEIntegrations(targetDir: any, options: any): Promise<{
7
- added: number;
8
- skipped: number;
9
- }>;
10
- import { scaffoldClaudeHooks } from "./claude-hooks";
11
- /**
12
- * Set dependencies for scaffold module
13
- * @param {Object} deps - Dependencies object
14
- */
15
- export function setScaffoldDependencies(deps: any): void;
16
- export { scaffoldClaudeHooks };
17
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scaffold/index.js"],"names":[],"mappings":"AA4MA;;;GAGG;AACH,6DAikBC;AAxtBD;;;GAoIC;;AAMD;;;GAGG;AACH,yDAGC"}
@@ -1,94 +0,0 @@
1
- /**
2
- * Start a new session, creating the initial capsule with baseline state
3
- * @param {Object} options - Session options
4
- * @param {string} [options.role] - Agent role (worker, integrator, qa)
5
- * @param {string} [options.specId] - Associated feature spec ID
6
- * @param {string[]} [options.allowedGlobs] - Allowed file patterns
7
- * @param {string[]} [options.forbiddenGlobs] - Forbidden file patterns
8
- * @param {string} [options.intent] - What this session intends to accomplish
9
- * @returns {Object} Created capsule
10
- */
11
- export function startSession(options?: {
12
- role?: string;
13
- specId?: string;
14
- allowedGlobs?: string[];
15
- forbiddenGlobs?: string[];
16
- intent?: string;
17
- }): any;
18
- /**
19
- * Add a checkpoint to the current (most recent active) session
20
- * @param {Object} data - Checkpoint data
21
- * @param {string} [data.sessionId] - Specific session ID (uses latest active if omitted)
22
- * @param {string[]} [data.pathsTouched] - Files changed
23
- * @param {string[]} [data.artifactsWritten] - Generated artifacts
24
- * @param {Object[]} [data.testsRun] - Test results { name, status, evidence }
25
- * @param {Object[]} [data.determinismChecks] - Determinism checks { name, status, total }
26
- * @param {Object[]} [data.knownIssues] - Issues discovered { type, description }
27
- * @param {string} [data.intent] - Updated intent description
28
- * @returns {Object} Updated capsule
29
- */
30
- export function checkpointSession(data?: {
31
- sessionId?: string;
32
- pathsTouched?: string[];
33
- artifactsWritten?: string[];
34
- testsRun?: any[];
35
- determinismChecks?: any[];
36
- knownIssues?: any[];
37
- intent?: string;
38
- }): any;
39
- /**
40
- * End a session, finalizing the capsule with handoff information
41
- * @param {Object} data - End session data
42
- * @param {string} [data.sessionId] - Specific session ID (uses latest active if omitted)
43
- * @param {string[]} [data.nextActions] - What the next session should do
44
- * @param {string[]} [data.riskNotes] - Risk notes for handoff
45
- * @returns {Object} Finalized capsule
46
- */
47
- export function endSession(data?: {
48
- sessionId?: string;
49
- nextActions?: string[];
50
- riskNotes?: string[];
51
- }): any;
52
- /**
53
- * List all sessions
54
- * @param {Object} [options] - List options
55
- * @param {string} [options.status] - Filter by status (active, completed)
56
- * @param {number} [options.limit] - Max entries to return
57
- * @returns {Object[]} Session entries
58
- */
59
- export function listSessions(options?: {
60
- status?: string;
61
- limit?: number;
62
- }): any[];
63
- /**
64
- * Show a specific session's full capsule
65
- * @param {string} sessionId - Session ID (or "latest" for most recent)
66
- * @returns {Object} Full capsule
67
- */
68
- export function showSession(sessionId: string): any;
69
- /**
70
- * Briefing output for session start hooks - returns structured text
71
- * @returns {string} Briefing text
72
- */
73
- export function getBriefing(): string;
74
- /**
75
- * Load the session registry
76
- * @param {string} root - Repository root
77
- * @returns {Object} Registry object
78
- */
79
- export function loadRegistry(root: string): any;
80
- /**
81
- * Get the git repository root
82
- * @returns {string} Absolute path to repo root
83
- */
84
- export function getRepoRoot(): string;
85
- export const SESSIONS_DIR: ".caws/sessions";
86
- export const REGISTRY_FILE: ".caws/sessions.json";
87
- export const CAPSULE_SCHEMA_VERSION: "caws.capsule.v1";
88
- /**
89
- * Find all active sessions on a specific branch
90
- * @param {string} branch - Branch name to search
91
- * @returns {Object[]} Active sessions on that branch with id and metadata
92
- */
93
- export function findActiveSessionsOnBranch(branch: string): any[];
94
- //# sourceMappingURL=session-manager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/session/session-manager.js"],"names":[],"mappings":"AA4JA;;;;;;;;;GASG;AACH,uCAPG;IAAyB,IAAI,GAArB,MAAM;IACW,MAAM,GAAvB,MAAM;IACa,YAAY,GAA/B,MAAM,EAAE;IACW,cAAc,GAAjC,MAAM,EAAE;IACS,MAAM,GAAvB,MAAM;CACd,OAyFF;AAED;;;;;;;;;;;GAWG;AACH,yCATG;IAAsB,SAAS,GAAvB,MAAM;IACU,YAAY,GAA5B,MAAM,EAAE;IACQ,gBAAgB,GAAhC,MAAM,EAAE;IACQ,QAAQ,GAAxB,KAAQ;IACQ,iBAAiB,GAAjC,KAAQ;IACQ,WAAW,GAA3B,KAAQ;IACM,MAAM,GAApB,MAAM;CACd,OAwDF;AAED;;;;;;;GAOG;AACH,kCALG;IAAsB,SAAS,GAAvB,MAAM;IACU,WAAW,GAA3B,MAAM,EAAE;IACQ,SAAS,GAAzB,MAAM,EAAE;CAChB,OAgEF;AAED;;;;;;GAMG;AACH,uCAJG;IAAyB,MAAM,GAAvB,MAAM;IACW,KAAK,GAAtB,MAAM;CACd,GAAU,KAAQ,CAuBpB;AAED;;;;GAIG;AACH,uCAHW,MAAM,OA2BhB;AAED;;;GAGG;AACH,+BAFa,MAAM,CA8DlB;AAlZD;;;;GAIG;AACH,mCAHW,MAAM,OAahB;AApHD;;;GAGG;AACH,+BAFa,MAAM,CAMlB;AAZD,2BAAqB,gBAAgB,CAAC;AACtC,4BAAsB,qBAAqB,CAAC;AAC5C,qCAA+B,iBAAiB,CAAC;AAwgBjD;;;;GAIG;AACH,mDAHW,MAAM,GACJ,KAAQ,CAQpB"}
@@ -1,146 +0,0 @@
1
- /**
2
- * Spec File Manager - Handles WorkingSpec file operations and YAML conversion
3
- *
4
- * Features:
5
- * - Bidirectional WorkingSpec ↔ YAML conversion
6
- * - Temporary file support for validation workflows
7
- * - Backup/restore capabilities
8
- * - Automatic cleanup of old temporary files
9
- */
10
- export class SpecFileManager {
11
- constructor(config?: {});
12
- projectRoot: any;
13
- useTemporaryFiles: any;
14
- tempDir: any;
15
- /**
16
- * Convert WorkingSpec object to YAML string
17
- *
18
- * @param {Object} spec - WorkingSpec to convert
19
- * @returns {string} YAML string representation
20
- */
21
- specToYaml(spec: any): string;
22
- /**
23
- * Parse YAML string to WorkingSpec object
24
- *
25
- * @param {string} yamlContent - YAML string to parse
26
- * @returns {Object} Parsed WorkingSpec object
27
- * @throws {Error} If YAML is invalid or doesn't match WorkingSpec schema
28
- */
29
- yamlToSpec(yamlContent: string): any;
30
- /**
31
- * Get path to .caws/working-spec.yaml in project
32
- *
33
- * @returns {string} Absolute path to working spec file
34
- */
35
- getSpecFilePath(): string;
36
- /**
37
- * Check if working spec file exists
38
- *
39
- * @returns {Promise<boolean>} True if file exists
40
- */
41
- specFileExists(): Promise<boolean>;
42
- /**
43
- * Read working spec from .caws/working-spec.yaml
44
- *
45
- * @returns {Promise<Object>} Parsed WorkingSpec object
46
- * @throws {Error} If file doesn't exist or is invalid
47
- */
48
- readSpecFile(): Promise<any>;
49
- /**
50
- * Write WorkingSpec to file
51
- *
52
- * Writes to .caws/working-spec.yaml or a temporary file based on configuration.
53
- *
54
- * @param {Object} spec - WorkingSpec to write
55
- * @param {Object} options - Write options
56
- * @param {boolean} options.useTemp - Override temp file usage
57
- * @param {boolean} options.backup - Create backup before writing
58
- * @returns {Promise<Object>} Write result with file path and cleanup function
59
- */
60
- writeSpecFile(spec: any, options?: {
61
- useTemp: boolean;
62
- backup: boolean;
63
- }): Promise<any>;
64
- /**
65
- * Update existing working spec file
66
- *
67
- * Reads current spec, merges changes, and writes back.
68
- *
69
- * @param {Object} updates - Partial WorkingSpec with fields to update
70
- * @returns {Promise<Object>} Updated WorkingSpec
71
- */
72
- updateSpecFile(updates: any): Promise<any>;
73
- /**
74
- * Create backup of working spec
75
- *
76
- * @returns {Promise<string>} Path to backup file
77
- */
78
- backupSpecFile(): Promise<string>;
79
- /**
80
- * Restore working spec from backup
81
- *
82
- * @param {string} backupPath - Path to backup file
83
- * @returns {Promise<void>}
84
- */
85
- restoreSpecFile(backupPath: string): Promise<void>;
86
- /**
87
- * List all backup files
88
- *
89
- * @returns {Promise<string[]>} Array of backup file paths
90
- */
91
- listBackups(): Promise<string[]>;
92
- /**
93
- * Delete old backup files
94
- *
95
- * @param {Object} options - Cleanup options
96
- * @param {number} options.maxAge - Maximum age in milliseconds (default: 7 days)
97
- * @param {number} options.keep - Minimum number of backups to keep (default: 5)
98
- * @returns {Promise<number>} Number of backups deleted
99
- */
100
- cleanupBackups(options?: {
101
- maxAge: number;
102
- keep: number;
103
- }): Promise<number>;
104
- /**
105
- * Validate spec file exists and is parseable
106
- *
107
- * @returns {Promise<Object>} Validation result
108
- */
109
- validateSpecFile(): Promise<any>;
110
- /**
111
- * Clean up old temporary spec files
112
- *
113
- * Removes temp files older than specified age.
114
- *
115
- * @param {number} maxAge - Maximum age in milliseconds (default: 1 hour)
116
- * @returns {Promise<number>} Number of files cleaned up
117
- */
118
- cleanupTempFiles(maxAge?: number): Promise<number>;
119
- /**
120
- * Get spec file stats (size, modified date, etc.)
121
- *
122
- * @returns {Promise<Object>} File stats
123
- */
124
- getSpecFileStats(): Promise<any>;
125
- /**
126
- * Create a new SpecFileManager instance with different configuration
127
- *
128
- * @param {Object} config - New configuration
129
- * @returns {SpecFileManager} New instance
130
- */
131
- withConfig(config: any): SpecFileManager;
132
- }
133
- export const defaultSpecFileManager: SpecFileManager;
134
- /**
135
- * Create a SpecFileManager instance with default configuration
136
- *
137
- * @param {string} projectRoot - Project root directory
138
- * @param {Object} options - Additional options
139
- * @returns {SpecFileManager} SpecFileManager instance
140
- */
141
- export function createSpecFileManager(projectRoot: string, options?: any): SpecFileManager;
142
- export declare function specToYaml(spec: any): string;
143
- export declare function yamlToSpec(yaml: any): any;
144
- export declare function readSpecFile(projectRoot: any): Promise<any>;
145
- export declare function writeSpecFile(spec: any, projectRoot: any, options: any): Promise<any>;
146
- //# sourceMappingURL=SpecFileManager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SpecFileManager.d.ts","sourceRoot":"","sources":["../../src/spec/SpecFileManager.js"],"names":[],"mappings":"AAaA;;;;;;;;GAQG;AACH;IACE,yBAIC;IAHC,iBAAsD;IACtD,uBAA0D;IAC1D,aAA4C;IAG9C;;;;;OAKG;IACH,uBAFa,MAAM,CASlB;IAED;;;;;;OAMG;IACH,wBAJW,MAAM,OAqBhB;IAED;;;;OAIG;IACH,mBAFa,MAAM,CAIlB;IAED;;;;OAIG;IACH,kBAFa,OAAO,CAAC,OAAO,CAAC,CAS5B;IAED;;;;;OAKG;IACH,gBAHa,OAAO,KAAQ,CAe3B;IAED;;;;;;;;;;OAUG;IACH,mCAJG;QAAyB,OAAO,EAAxB,OAAO;QACU,MAAM,EAAvB,OAAO;KACf,GAAU,OAAO,KAAQ,CA2C3B;IAED;;;;;;;OAOG;IACH,8BAFa,OAAO,KAAQ,CAa3B;IAED;;;;OAIG;IACH,kBAFa,OAAO,CAAC,MAAM,CAAC,CAS3B;IAED;;;;;OAKG;IACH,4BAHW,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAKzB;IAED;;;;OAIG;IACH,eAFa,OAAO,CAAC,MAAM,EAAE,CAAC,CAoB7B;IAED;;;;;;;OAOG;IACH,yBAJG;QAAwB,MAAM,EAAtB,MAAM;QACU,IAAI,EAApB,MAAM;KACd,GAAU,OAAO,CAAC,MAAM,CAAC,CA+B3B;IAED;;;;OAIG;IACH,oBAFa,OAAO,KAAQ,CAe3B;IAED;;;;;;;OAOG;IACH,0BAHW,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CA6B3B;IAED;;;;OAIG;IACH,oBAFa,OAAO,KAAQ,CA0B3B;IAED;;;;;OAKG;IACH,yBAFa,eAAe,CAS3B;CACF;AAiBD,qDAAqD;AAfrD;;;;;;GAMG;AACH,mDAJW,MAAM,kBAEJ,eAAe,CAO3B;AAWa,sDAAiD;AACjD,mDAAiD;AAC/C,qEAKb;AACc,+FAKd"}
@@ -1,121 +0,0 @@
1
- #!/bin/bash
2
- # CAWS Tool Validation Hook
3
- # Validates MCP tool calls against CAWS security policies
4
- # @author @darianrosebrook
5
-
6
- set -e
7
-
8
- # Read input from Cursor
9
- INPUT=$(cat)
10
- TOOL_NAME=$(echo "$INPUT" | jq -r '.tool_name // ""')
11
- TOOL_ARGS=$(echo "$INPUT" | jq -r '.arguments // "{}"')
12
-
13
- # Only validate CAWS-related tools
14
- if [[ "$TOOL_NAME" =~ ^caws_ ]]; then
15
-
16
- echo "🔍 Validating CAWS tool call: $TOOL_NAME" >&2
17
-
18
- # Check if CAWS CLI is available
19
- if ! command -v caws &> /dev/null; then
20
- echo '{
21
- "userMessage": "❌ CAWS CLI not available",
22
- "agentMessage": "Cannot execute CAWS tools - CLI not installed",
23
- "block": true,
24
- "suggestions": [
25
- "Install CAWS CLI: npm install -g @caws/cli",
26
- "Check PATH includes CAWS CLI"
27
- ]
28
- }'
29
- exit 1
30
- fi
31
-
32
- # Check if we're in a CAWS project
33
- if [[ ! -f ".caws/working-spec.yaml" ]]; then
34
- echo '{
35
- "userMessage": "⚠️ Not in a CAWS project",
36
- "agentMessage": "CAWS tools require .caws/working-spec.yaml",
37
- "suggestions": [
38
- "Initialize CAWS project: caws init",
39
- "Create working spec: caws scaffold"
40
- ]
41
- }'
42
- fi
43
-
44
- # Validate tool-specific arguments
45
- case "$TOOL_NAME" in
46
- "caws_waiver_create")
47
- # Check waiver creation permissions
48
- IMPACT_LEVEL=$(echo "$TOOL_ARGS" | jq -r '.impactLevel // "low"')
49
-
50
- if [[ "$IMPACT_LEVEL" == "critical" ]]; then
51
- echo '{
52
- "userMessage": "🚨 Critical waiver requires approval",
53
- "agentMessage": "Critical impact waivers need human approval",
54
- "block": false,
55
- "warnings": [
56
- "Critical waivers require code owner review",
57
- "Waiver will be flagged for manual approval"
58
- ]
59
- }'
60
- fi
61
-
62
- # Check expiration time
63
- EXPIRES_AT=$(echo "$TOOL_ARGS" | jq -r '.expiresAt // ""')
64
- if [[ -n "$EXPIRES_AT" ]]; then
65
- EXPIRE_TIME=$(date -j -f "%Y-%m-%dT%H:%M:%S%Z" "$EXPIRES_AT" +%s 2>/dev/null || echo "")
66
- CURRENT_TIME=$(date +%s)
67
- DAYS_DIFF=$(( (EXPIRE_TIME - CURRENT_TIME) / 86400 ))
68
-
69
- if [[ $DAYS_DIFF -gt 90 ]]; then
70
- echo '{
71
- "userMessage": "⚠️ Waiver expiration too far in future",
72
- "agentMessage": "Waivers cannot exceed 90 days expiration",
73
- "suggestions": [
74
- "Reduce expiration time to within 90 days",
75
- "Consider shorter waiver periods for better security"
76
- ]
77
- }'
78
- fi
79
- fi
80
- ;;
81
-
82
- "caws_evaluate"|"caws_iterate")
83
- # These are generally safe to run
84
- echo '{"userMessage": "✅ CAWS quality tool validated", "agentMessage": "Tool execution approved"}'
85
- ;;
86
-
87
- *)
88
- # Unknown CAWS tool - allow but warn
89
- echo '{
90
- "userMessage": "⚠️ Unknown CAWS tool",
91
- "agentMessage": "Tool '"'"$TOOL_NAME"'"' not recognized - proceeding with caution",
92
- "suggestions": [
93
- "Verify tool name and arguments",
94
- "Check CAWS CLI documentation"
95
- ]
96
- }'
97
- ;;
98
- esac
99
-
100
- elif [[ "$TOOL_NAME" =~ (exec|shell|run|terminal) ]]; then
101
- # Generic shell execution - check for dangerous commands
102
- COMMAND=$(echo "$TOOL_ARGS" | jq -r '.command // .cmd // ""')
103
-
104
- DANGEROUS_COMMANDS=("rm -rf" "rm -rf /" "format" "mkfs" "dd" "fdisk" ">" "sudo" "chmod 777")
105
-
106
- for dangerous in "${DANGEROUS_COMMANDS[@]}"; do
107
- if [[ "$COMMAND" =~ $dangerous ]]; then
108
- echo '{
109
- "userMessage": "🚫 Dangerous command blocked",
110
- "agentMessage": "Command contains dangerous operations: '"'"$dangerous"'"'",
111
- "block": true,
112
- "suggestions": [
113
- "Avoid destructive operations",
114
- "Use safer alternatives",
115
- "Get explicit approval for dangerous commands"
116
- ]
117
- }'
118
- exit 1
119
- fi
120
- done
121
- fi