@paths.design/caws-cli 7.0.2 → 8.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.
Files changed (217) hide show
  1. package/dist/budget-derivation.js +5 -4
  2. package/dist/commands/diagnose.js +24 -19
  3. package/dist/commands/init.js +51 -4
  4. package/dist/commands/quality-gates.js +147 -9
  5. package/dist/commands/specs.js +148 -14
  6. package/dist/commands/status.js +2 -2
  7. package/dist/commands/tool.js +2 -4
  8. package/dist/config/index.js +17 -8
  9. package/dist/generators/working-spec.js +19 -6
  10. package/dist/scaffold/git-hooks.js +245 -46
  11. package/dist/scaffold/index.js +53 -7
  12. package/dist/templates/.caws/tools/README.md +21 -0
  13. package/dist/templates/.cursor/README.md +311 -0
  14. package/dist/templates/.cursor/hooks/audit.sh +55 -0
  15. package/dist/templates/.cursor/hooks/block-dangerous.sh +83 -0
  16. package/dist/templates/.cursor/hooks/caws-quality-check.sh +52 -0
  17. package/dist/templates/.cursor/hooks/caws-scope-guard.sh +130 -0
  18. package/dist/templates/.cursor/hooks/caws-tool-validation.sh +121 -0
  19. package/dist/templates/.cursor/hooks/format.sh +38 -0
  20. package/dist/templates/.cursor/hooks/naming-check.sh +64 -0
  21. package/dist/templates/.cursor/hooks/scan-secrets.sh +46 -0
  22. package/dist/templates/.cursor/hooks/scope-guard.sh +52 -0
  23. package/dist/templates/.cursor/hooks/validate-spec.sh +83 -0
  24. package/dist/templates/.cursor/hooks.json +59 -0
  25. package/dist/templates/.cursor/rules/00-claims-verification.mdc +144 -0
  26. package/dist/templates/.cursor/rules/01-working-style.mdc +50 -0
  27. package/dist/templates/.cursor/rules/02-quality-gates.mdc +370 -0
  28. package/dist/templates/.cursor/rules/03-naming-and-refactor.mdc +33 -0
  29. package/dist/templates/.cursor/rules/04-logging-language-style.mdc +23 -0
  30. package/dist/templates/.cursor/rules/05-safe-defaults-guards.mdc +23 -0
  31. package/dist/templates/.cursor/rules/06-typescript-conventions.mdc +36 -0
  32. package/dist/templates/.cursor/rules/07-process-ops.mdc +20 -0
  33. package/dist/templates/.cursor/rules/08-solid-and-architecture.mdc +16 -0
  34. package/dist/templates/.cursor/rules/09-docstrings.mdc +89 -0
  35. package/dist/templates/.cursor/rules/10-documentation-quality-standards.mdc +390 -0
  36. package/dist/templates/.cursor/rules/11-scope-management-waivers.mdc +385 -0
  37. package/dist/templates/.cursor/rules/12-implementation-completeness.mdc +516 -0
  38. package/dist/templates/.cursor/rules/13-language-agnostic-standards.mdc +588 -0
  39. package/dist/templates/.cursor/rules/README.md +148 -0
  40. package/dist/templates/.github/copilot/instructions.md +311 -0
  41. package/dist/templates/.idea/runConfigurations/CAWS_Evaluate.xml +5 -0
  42. package/dist/templates/.idea/runConfigurations/CAWS_Validate.xml +5 -0
  43. package/dist/templates/.vscode/launch.json +56 -0
  44. package/dist/templates/.vscode/settings.json +93 -0
  45. package/dist/templates/.windsurf/workflows/caws-guided-development.md +92 -0
  46. package/dist/templates/COMMIT_CONVENTIONS.md +86 -0
  47. package/dist/templates/OIDC_SETUP.md +300 -0
  48. package/dist/templates/agents.md +1047 -0
  49. package/dist/templates/codemod/README.md +1 -0
  50. package/dist/templates/codemod/test.js +93 -0
  51. package/dist/templates/docs/README.md +150 -0
  52. package/dist/templates/scripts/quality-gates/check-god-objects.js +146 -0
  53. package/dist/templates/scripts/quality-gates/run-quality-gates.js +50 -0
  54. package/dist/templates/scripts/v3/analysis/todo_analyzer.py +1997 -0
  55. package/dist/tool-loader.js +6 -1
  56. package/dist/tool-validator.js +8 -2
  57. package/dist/utils/detection.js +4 -3
  58. package/dist/utils/git-lock.js +119 -0
  59. package/dist/utils/gitignore-updater.js +148 -0
  60. package/dist/utils/project-analysis.js +176 -16
  61. package/dist/utils/quality-gates.js +48 -7
  62. package/dist/utils/spec-resolver.js +27 -3
  63. package/dist/utils/yaml-validation.js +156 -0
  64. package/dist/validation/spec-validation.js +81 -2
  65. package/package.json +2 -2
  66. package/templates/.caws/schemas/waivers.schema.json +30 -0
  67. package/templates/.caws/schemas/working-spec.schema.json +133 -0
  68. package/templates/.caws/templates/working-spec.template.yml +74 -0
  69. package/templates/.caws/tools/README.md +21 -0
  70. package/templates/.caws/tools/scope-guard.js +208 -0
  71. package/templates/.caws/tools-allow.json +331 -0
  72. package/templates/.caws/waivers.yml +19 -0
  73. package/templates/.cursor/hooks/scope-guard.sh +2 -2
  74. package/templates/.cursor/hooks/validate-spec.sh +42 -7
  75. package/dist/budget-derivation.d.ts +0 -74
  76. package/dist/budget-derivation.d.ts.map +0 -1
  77. package/dist/cicd-optimizer.d.ts +0 -142
  78. package/dist/cicd-optimizer.d.ts.map +0 -1
  79. package/dist/commands/archive.d.ts +0 -50
  80. package/dist/commands/archive.d.ts.map +0 -1
  81. package/dist/commands/burnup.d.ts +0 -6
  82. package/dist/commands/burnup.d.ts.map +0 -1
  83. package/dist/commands/diagnose.d.ts +0 -52
  84. package/dist/commands/diagnose.d.ts.map +0 -1
  85. package/dist/commands/evaluate.d.ts +0 -8
  86. package/dist/commands/evaluate.d.ts.map +0 -1
  87. package/dist/commands/init.d.ts +0 -5
  88. package/dist/commands/init.d.ts.map +0 -1
  89. package/dist/commands/iterate.d.ts +0 -8
  90. package/dist/commands/iterate.d.ts.map +0 -1
  91. package/dist/commands/mode.d.ts +0 -24
  92. package/dist/commands/mode.d.ts.map +0 -1
  93. package/dist/commands/plan.d.ts +0 -49
  94. package/dist/commands/plan.d.ts.map +0 -1
  95. package/dist/commands/provenance.d.ts +0 -32
  96. package/dist/commands/provenance.d.ts.map +0 -1
  97. package/dist/commands/quality-gates.d.ts +0 -52
  98. package/dist/commands/quality-gates.d.ts.map +0 -1
  99. package/dist/commands/quality-monitor.d.ts +0 -17
  100. package/dist/commands/quality-monitor.d.ts.map +0 -1
  101. package/dist/commands/specs.d.ts +0 -71
  102. package/dist/commands/specs.d.ts.map +0 -1
  103. package/dist/commands/status.d.ts +0 -44
  104. package/dist/commands/status.d.ts.map +0 -1
  105. package/dist/commands/templates.d.ts +0 -74
  106. package/dist/commands/templates.d.ts.map +0 -1
  107. package/dist/commands/tool.d.ts +0 -13
  108. package/dist/commands/tool.d.ts.map +0 -1
  109. package/dist/commands/troubleshoot.d.ts +0 -8
  110. package/dist/commands/troubleshoot.d.ts.map +0 -1
  111. package/dist/commands/tutorial.d.ts +0 -55
  112. package/dist/commands/tutorial.d.ts.map +0 -1
  113. package/dist/commands/validate.d.ts +0 -15
  114. package/dist/commands/validate.d.ts.map +0 -1
  115. package/dist/commands/waivers.d.ts +0 -8
  116. package/dist/commands/waivers.d.ts.map +0 -1
  117. package/dist/commands/workflow.d.ts +0 -85
  118. package/dist/commands/workflow.d.ts.map +0 -1
  119. package/dist/config/index.d.ts +0 -29
  120. package/dist/config/index.d.ts.map +0 -1
  121. package/dist/config/modes.d.ts +0 -225
  122. package/dist/config/modes.d.ts.map +0 -1
  123. package/dist/constants/spec-types.d.ts +0 -41
  124. package/dist/constants/spec-types.d.ts.map +0 -1
  125. package/dist/error-handler.d.ts +0 -164
  126. package/dist/error-handler.d.ts.map +0 -1
  127. package/dist/generators/jest-config.d.ts +0 -32
  128. package/dist/generators/jest-config.d.ts.map +0 -1
  129. package/dist/generators/working-spec.d.ts +0 -13
  130. package/dist/generators/working-spec.d.ts.map +0 -1
  131. package/dist/index-new.d.ts +0 -5
  132. package/dist/index-new.d.ts.map +0 -1
  133. package/dist/index-new.js +0 -317
  134. package/dist/index.d.ts +0 -5
  135. package/dist/index.d.ts.map +0 -1
  136. package/dist/index.js.backup +0 -4711
  137. package/dist/minimal-cli.d.ts +0 -3
  138. package/dist/minimal-cli.d.ts.map +0 -1
  139. package/dist/policy/PolicyManager.d.ts +0 -104
  140. package/dist/policy/PolicyManager.d.ts.map +0 -1
  141. package/dist/scaffold/cursor-hooks.d.ts +0 -7
  142. package/dist/scaffold/cursor-hooks.d.ts.map +0 -1
  143. package/dist/scaffold/git-hooks.d.ts +0 -20
  144. package/dist/scaffold/git-hooks.d.ts.map +0 -1
  145. package/dist/scaffold/index.d.ts +0 -20
  146. package/dist/scaffold/index.d.ts.map +0 -1
  147. package/dist/spec/SpecFileManager.d.ts +0 -146
  148. package/dist/spec/SpecFileManager.d.ts.map +0 -1
  149. package/dist/test-analysis.d.ts +0 -182
  150. package/dist/test-analysis.d.ts.map +0 -1
  151. package/dist/tool-interface.d.ts +0 -236
  152. package/dist/tool-interface.d.ts.map +0 -1
  153. package/dist/tool-loader.d.ts +0 -77
  154. package/dist/tool-loader.d.ts.map +0 -1
  155. package/dist/tool-validator.d.ts +0 -72
  156. package/dist/tool-validator.d.ts.map +0 -1
  157. package/dist/utils/detection.d.ts +0 -7
  158. package/dist/utils/detection.d.ts.map +0 -1
  159. package/dist/utils/finalization.d.ts +0 -17
  160. package/dist/utils/finalization.d.ts.map +0 -1
  161. package/dist/utils/project-analysis.d.ts +0 -14
  162. package/dist/utils/project-analysis.d.ts.map +0 -1
  163. package/dist/utils/quality-gates.d.ts +0 -49
  164. package/dist/utils/quality-gates.d.ts.map +0 -1
  165. package/dist/utils/spec-resolver.d.ts +0 -88
  166. package/dist/utils/spec-resolver.d.ts.map +0 -1
  167. package/dist/utils/typescript-detector.d.ts +0 -63
  168. package/dist/utils/typescript-detector.d.ts.map +0 -1
  169. package/dist/validation/spec-validation.d.ts +0 -43
  170. package/dist/validation/spec-validation.d.ts.map +0 -1
  171. package/dist/waivers-manager.d.ts +0 -167
  172. package/dist/waivers-manager.d.ts.map +0 -1
  173. package/templates/apps/tools/caws/COMPLETION_REPORT.md +0 -331
  174. package/templates/apps/tools/caws/MIGRATION_SUMMARY.md +0 -360
  175. package/templates/apps/tools/caws/README.md +0 -463
  176. package/templates/apps/tools/caws/TEST_STATUS.md +0 -365
  177. package/templates/apps/tools/caws/attest.js +0 -357
  178. package/templates/apps/tools/caws/ci-optimizer.js +0 -642
  179. package/templates/apps/tools/caws/config.ts +0 -245
  180. package/templates/apps/tools/caws/cross-functional.js +0 -876
  181. package/templates/apps/tools/caws/dashboard.js +0 -1112
  182. package/templates/apps/tools/caws/flake-detector.ts +0 -362
  183. package/templates/apps/tools/caws/gates.js +0 -198
  184. package/templates/apps/tools/caws/gates.ts +0 -271
  185. package/templates/apps/tools/caws/language-adapters.ts +0 -381
  186. package/templates/apps/tools/caws/language-support.d.ts +0 -367
  187. package/templates/apps/tools/caws/language-support.d.ts.map +0 -1
  188. package/templates/apps/tools/caws/language-support.js +0 -585
  189. package/templates/apps/tools/caws/legacy-assessment.ts +0 -408
  190. package/templates/apps/tools/caws/legacy-assessor.js +0 -764
  191. package/templates/apps/tools/caws/mutant-analyzer.js +0 -734
  192. package/templates/apps/tools/caws/perf-budgets.ts +0 -349
  193. package/templates/apps/tools/caws/prompt-lint.js.backup +0 -274
  194. package/templates/apps/tools/caws/property-testing.js +0 -707
  195. package/templates/apps/tools/caws/provenance.d.ts +0 -14
  196. package/templates/apps/tools/caws/provenance.d.ts.map +0 -1
  197. package/templates/apps/tools/caws/provenance.js +0 -132
  198. package/templates/apps/tools/caws/provenance.js.backup +0 -73
  199. package/templates/apps/tools/caws/provenance.ts +0 -211
  200. package/templates/apps/tools/caws/security-provenance.ts +0 -483
  201. package/templates/apps/tools/caws/shared/base-tool.ts +0 -281
  202. package/templates/apps/tools/caws/shared/config-manager.ts +0 -366
  203. package/templates/apps/tools/caws/shared/gate-checker.ts +0 -849
  204. package/templates/apps/tools/caws/shared/types.ts +0 -444
  205. package/templates/apps/tools/caws/shared/validator.ts +0 -305
  206. package/templates/apps/tools/caws/shared/waivers-manager.ts +0 -174
  207. package/templates/apps/tools/caws/spec-test-mapper.ts +0 -391
  208. package/templates/apps/tools/caws/test-quality.js +0 -578
  209. package/templates/apps/tools/caws/validate.js +0 -76
  210. package/templates/apps/tools/caws/validate.ts +0 -228
  211. package/templates/apps/tools/caws/waivers.js +0 -344
  212. /package/{templates/apps/tools/caws → dist/templates/.caws}/schemas/waivers.schema.json +0 -0
  213. /package/{templates/apps/tools/caws → dist/templates/.caws}/schemas/working-spec.schema.json +0 -0
  214. /package/{templates/apps/tools/caws → dist/templates/.caws}/templates/working-spec.template.yml +0 -0
  215. /package/{templates/apps/tools/caws → dist/templates/.caws/tools}/scope-guard.js +0 -0
  216. /package/{templates/apps/tools/caws → dist/templates/.caws}/tools-allow.json +0 -0
  217. /package/{templates/apps/tools/caws → dist/templates/.caws}/waivers.yml +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"provenance.d.ts","sourceRoot":"","sources":["provenance.js"],"names":[],"mappings":";AAYA;;;;GAIG;AACH,uDAkCC;AAED;;;;GAIG;AACH,0DAFW,MAAM,QAShB"}
@@ -1,132 +0,0 @@
1
- /**
2
- * @fileoverview CAWS Provenance Tool
3
- * @author @darianrosebrook
4
- *
5
- * Note: For enhanced TypeScript version with better error handling, use provenance.ts
6
- * This .js version provides basic provenance for backward compatibility
7
- */
8
-
9
- /**
10
- * Generates provenance information for a CAWS project
11
- * @returns {Object} Provenance data with metadata and artifacts
12
- */
13
- function generateProvenance() {
14
- try {
15
- const fs = require('fs');
16
- const crypto = require('crypto');
17
-
18
- // Check if we're in a CAWS project
19
- if (!fs.existsSync('.caws')) {
20
- throw new Error('Not in a CAWS project directory');
21
- }
22
-
23
- const workingSpecPath = '.caws/working-spec.yaml';
24
- if (!fs.existsSync(workingSpecPath)) {
25
- throw new Error('Working specification file not found');
26
- }
27
-
28
- // Load working spec
29
- const yaml = require('js-yaml');
30
- const specContent = fs.readFileSync(workingSpecPath, 'utf8');
31
- const spec = yaml.load(specContent);
32
-
33
- // Generate provenance data
34
- const provenance = {
35
- agent: 'caws-cli',
36
- model: 'cli-interactive',
37
- modelHash: (() => {
38
- try {
39
- return require('../../../package.json').version || '1.0.0';
40
- } catch (error) {
41
- return '1.0.0'; // Fallback version if package.json not found
42
- }
43
- })(),
44
- toolAllowlist: [
45
- 'node',
46
- 'npm',
47
- 'git',
48
- 'fs-extra',
49
- 'inquirer',
50
- 'commander',
51
- 'js-yaml',
52
- 'ajv',
53
- 'chalk',
54
- ],
55
- artifacts: ['.caws/working-spec.yaml'],
56
- results: {
57
- project_id: spec.id,
58
- project_title: spec.title,
59
- risk_tier: spec.risk_tier,
60
- mode: spec.mode,
61
- change_budget: spec.change_budget,
62
- blast_radius: spec.blast_radius,
63
- operational_rollback_slo: spec.operational_rollback_slo,
64
- },
65
- approvals: [],
66
- timestamp: new Date().toISOString(),
67
- version: '1.0.0',
68
- hash: '', // Will be calculated below
69
- };
70
-
71
- // Calculate hash
72
- provenance.hash = crypto
73
- .createHash('sha256')
74
- .update(JSON.stringify(provenance, Object.keys(provenance).sort()))
75
- .digest('hex');
76
-
77
- return provenance;
78
- } catch (error) {
79
- throw new Error(`Provenance generation failed: ${error.message}`);
80
- }
81
- }
82
-
83
- /**
84
- * Saves provenance data to a file
85
- * @param {Object} provenance - Provenance data to save
86
- * @param {string} outputPath - Path where to save the provenance file
87
- */
88
- function saveProvenance(provenance, outputPath) {
89
- try {
90
- const fs = require('fs');
91
- const path = require('path');
92
-
93
- // Ensure directory exists
94
- const dir = path.dirname(outputPath);
95
- if (!fs.existsSync(dir)) {
96
- fs.mkdirSync(dir, { recursive: true });
97
- }
98
-
99
- // Save provenance
100
- fs.writeFileSync(outputPath, JSON.stringify(provenance, null, 2));
101
- console.log(`āœ… Provenance saved to ${outputPath}`);
102
- } catch (error) {
103
- throw new Error(`Failed to save provenance: ${error.message}`);
104
- }
105
- }
106
-
107
- // Handle direct script execution
108
- if (require.main === module) {
109
- const command = process.argv[2];
110
-
111
- try {
112
- if (command === 'generate') {
113
- const provenance = generateProvenance();
114
- const outputPath = process.argv[3] || '.agent/provenance.json';
115
- saveProvenance(provenance, outputPath);
116
- console.log('āœ… Provenance generated successfully');
117
- } else {
118
- console.log('CAWS Provenance Tool');
119
- console.log('');
120
- console.log('Usage:');
121
- console.log(' node provenance.js generate [output-path]');
122
- console.log('');
123
- console.log('Note: For enhanced features, use: npx tsx provenance.ts');
124
- process.exit(1);
125
- }
126
- } catch (error) {
127
- console.error(`āŒ Error: ${error.message}`);
128
- process.exit(1);
129
- }
130
- }
131
-
132
- module.exports = { generateProvenance, saveProvenance };
@@ -1,73 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * @fileoverview CAWS Provenance Tracker - Real Implementation
5
- * @author @darianrosebrook
6
- */
7
-
8
- const fs = require('fs');
9
- const path = require('path');
10
- const crypto = require('crypto');
11
- const { execSync } = require('child_process');
12
-
13
- /**
14
- * Generate comprehensive provenance data for CAWS operations
15
- * @param {Object} options - Configuration options
16
- * @returns {Object} Complete provenance record
17
- */
18
- function generateProvenance(options = {}) {
19
- const projectRoot = options.projectRoot || process.cwd();
20
-
21
- return {
22
- // Agent and model information
23
- agent: options.agent || 'caws-cli',
24
- model: options.model || 'cli-interactive',
25
- model_hash: options.modelHash || generateModelHash(),
26
-
27
- // Tool and security information
28
- tool_allowlist: options.toolAllowlist || generateToolAllowlist(projectRoot),
29
- prompts: options.prompts || [],
30
-
31
- // Git and version control information
32
- commit: getCurrentCommit(projectRoot),
33
- branch: getCurrentBranch(projectRoot),
34
- repository: getRepositoryInfo(projectRoot),
35
-
36
- // File and artifact information
37
- artifacts: generateArtifactList(projectRoot),
38
- dependencies: generateDependencyInfo(projectRoot),
39
-
40
- // Execution results and metadata
41
- results: options.results || {},
42
- approvals: options.approvals || [],
43
- execution_context: generateExecutionContext(),
44
-
45
- // Security and integrity
46
- integrity: generateIntegrityInfo(),
47
-
48
- // Timestamps and versioning
49
- timestamp: new Date().toISOString(),
50
- version: require(path.join(projectRoot, 'package.json')).version || '1.0.0',
51
- provenance_hash: generateProvenanceHash(),
52
-
53
- // Build and deployment information
54
- build_info: generateBuildInfo(projectRoot),
55
-
56
- // Change tracking
57
- change_summary: generateChangeSummary(projectRoot),
58
- };
59
- }
60
-
61
- // Mock provenance saving
62
- function saveProvenance(provenance, filepath) {
63
- const dir = path.dirname(filepath);
64
- if (!fs.existsSync(dir)) {
65
- fs.mkdirSync(dir, { recursive: true });
66
- }
67
- fs.writeFileSync(filepath, JSON.stringify(provenance, null, 2));
68
- }
69
-
70
- module.exports = {
71
- generateProvenance,
72
- saveProvenance,
73
- };
@@ -1,211 +0,0 @@
1
- #!/usr/bin/env tsx
2
-
3
- /**
4
- * CAWS Provenance Tool
5
- * Enhanced provenance generation with metadata and hashing
6
- *
7
- * @author @darianrosebrook
8
- */
9
-
10
- import * as fs from 'fs';
11
- import * as path from 'path';
12
- import * as crypto from 'crypto';
13
- import * as yaml from 'js-yaml';
14
- import { CawsBaseTool } from './shared/base-tool.js';
15
-
16
- interface ProvenanceData {
17
- agent: string;
18
- model: string;
19
- modelHash: string;
20
- toolAllowlist: string[];
21
- artifacts: string[];
22
- results: Record<string, any>;
23
- approvals: string[];
24
- timestamp: string;
25
- version: string;
26
- hash: string;
27
- }
28
-
29
- class ProvenanceCLI extends CawsBaseTool {
30
- /**
31
- * Generate provenance information for a CAWS project
32
- */
33
- generateProvenance(): ProvenanceData {
34
- try {
35
- // Check if we're in a CAWS project
36
- if (!this.pathExists('.caws')) {
37
- throw new Error('Not in a CAWS project directory');
38
- }
39
-
40
- const workingSpecPath = '.caws/working-spec.yaml';
41
- if (!this.pathExists(workingSpecPath)) {
42
- throw new Error('Working specification file not found');
43
- }
44
-
45
- // Load working spec
46
- const specContent = fs.readFileSync(workingSpecPath, 'utf8');
47
- const spec = yaml.load(specContent) as any;
48
-
49
- // Load package.json for version
50
- let version = '1.0.0';
51
- const packageJsonPath = path.join(process.cwd(), 'package.json');
52
- if (this.pathExists(packageJsonPath)) {
53
- const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
54
- version = pkg.version || version;
55
- }
56
-
57
- // Generate provenance data
58
- const provenance: ProvenanceData = {
59
- agent: 'caws-cli',
60
- model: process.env.CAWS_MODEL || 'cli-interactive',
61
- modelHash: version,
62
- toolAllowlist: [
63
- 'node',
64
- 'npm',
65
- 'git',
66
- 'fs-extra',
67
- 'inquirer',
68
- 'commander',
69
- 'js-yaml',
70
- 'ajv',
71
- 'chalk',
72
- 'tsx',
73
- 'typescript',
74
- ],
75
- artifacts: ['.caws/working-spec.yaml'],
76
- results: {
77
- project_id: spec.id || 'unknown',
78
- project_title: spec.title || 'Unknown Project',
79
- risk_tier: spec.risk_tier || 3,
80
- mode: spec.mode || 'standard',
81
- change_budget: spec.change_budget,
82
- blast_radius: spec.blast_radius,
83
- operational_rollback_slo: spec.operational_rollback_slo,
84
- acceptance_criteria_count: spec.acceptance?.length || 0,
85
- contracts_count: spec.contracts?.length || 0,
86
- },
87
- approvals: spec.approvals || [],
88
- timestamp: new Date().toISOString(),
89
- version: '1.0.0',
90
- hash: '', // Will be calculated below
91
- };
92
-
93
- // Calculate hash
94
- const hashContent = JSON.stringify(provenance, Object.keys(provenance).sort());
95
- provenance.hash = crypto.createHash('sha256').update(hashContent).digest('hex');
96
-
97
- return provenance;
98
- } catch (error) {
99
- throw new Error(`Provenance generation failed: ${error}`);
100
- }
101
- }
102
-
103
- /**
104
- * Save provenance data to a file
105
- */
106
- saveProvenance(provenance: ProvenanceData, outputPath: string): void {
107
- try {
108
- // Ensure directory exists
109
- const dir = path.dirname(outputPath);
110
- if (!this.pathExists(dir)) {
111
- fs.mkdirSync(dir, { recursive: true });
112
- }
113
-
114
- // Save provenance
115
- fs.writeFileSync(outputPath, JSON.stringify(provenance, null, 2));
116
- this.logSuccess(`Provenance saved to ${outputPath}`);
117
- } catch (error) {
118
- throw new Error(`Failed to save provenance: ${error}`);
119
- }
120
- }
121
-
122
- /**
123
- * Display provenance information
124
- */
125
- displayProvenance(provenance: ProvenanceData): void {
126
- console.log('\nšŸ“‹ CAWS Provenance');
127
- console.log('='.repeat(50));
128
- console.log(`Agent: ${provenance.agent}`);
129
- console.log(`Model: ${provenance.model}`);
130
- console.log(`Version: ${provenance.version}`);
131
- console.log(`Timestamp: ${provenance.timestamp}`);
132
- console.log(`Hash: ${provenance.hash.substring(0, 16)}...`);
133
-
134
- console.log('\nšŸ“Š Project Results:');
135
- Object.entries(provenance.results).forEach(([key, value]) => {
136
- if (value !== undefined && value !== null) {
137
- console.log(` ${key}: ${value}`);
138
- }
139
- });
140
-
141
- console.log('\nšŸ”§ Tool Allowlist:');
142
- provenance.toolAllowlist.slice(0, 5).forEach((tool) => {
143
- console.log(` - ${tool}`);
144
- });
145
- if (provenance.toolAllowlist.length > 5) {
146
- console.log(` ... and ${provenance.toolAllowlist.length - 5} more`);
147
- }
148
-
149
- console.log('\nšŸ“¦ Artifacts:');
150
- provenance.artifacts.forEach((artifact) => {
151
- console.log(` - ${artifact}`);
152
- });
153
-
154
- if (provenance.approvals.length > 0) {
155
- console.log('\nāœ… Approvals:');
156
- provenance.approvals.forEach((approval) => {
157
- console.log(` - ${approval}`);
158
- });
159
- }
160
-
161
- console.log('='.repeat(50));
162
- }
163
- }
164
-
165
- // Main CLI handler
166
- if (import.meta.url === `file://${process.argv[1]}`) {
167
- const command = process.argv[2];
168
- const cli = new ProvenanceCLI();
169
-
170
- try {
171
- switch (command) {
172
- case 'generate': {
173
- const provenance = cli.generateProvenance();
174
- const outputPath = process.argv[3] || '.agent/provenance.json';
175
- cli.saveProvenance(provenance, outputPath);
176
- cli.displayProvenance(provenance);
177
- break;
178
- }
179
-
180
- case 'show': {
181
- const filePath = process.argv[3] || '.agent/provenance.json';
182
- if (!cli.pathExists(filePath)) {
183
- console.error(`āŒ Provenance file not found: ${filePath}`);
184
- process.exit(1);
185
- }
186
-
187
- const content = fs.readFileSync(filePath, 'utf8');
188
- const provenance = JSON.parse(content) as ProvenanceData;
189
- cli.displayProvenance(provenance);
190
- break;
191
- }
192
-
193
- default:
194
- console.log('CAWS Provenance Tool');
195
- console.log('');
196
- console.log('Commands:');
197
- console.log(' generate [output] - Generate and save provenance data');
198
- console.log(' show [file] - Display provenance from file');
199
- console.log('');
200
- console.log('Examples:');
201
- console.log(' provenance.ts generate .agent/provenance.json');
202
- console.log(' provenance.ts show .agent/provenance.json');
203
- process.exit(1);
204
- }
205
- } catch (error) {
206
- console.error(`āŒ Error: ${error}`);
207
- process.exit(1);
208
- }
209
- }
210
-
211
- export { ProvenanceCLI };