@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
@@ -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 };