@paths.design/caws-cli 7.0.2 ā 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.
- package/dist/budget-derivation.js +5 -4
- package/dist/commands/diagnose.js +24 -19
- package/dist/commands/init.js +51 -4
- package/dist/commands/specs.js +40 -1
- package/dist/commands/status.js +2 -2
- package/dist/commands/tool.js +2 -3
- package/dist/config/index.js +17 -8
- package/dist/generators/working-spec.js +19 -6
- package/dist/scaffold/git-hooks.js +127 -29
- package/dist/scaffold/index.js +53 -7
- package/dist/templates/.caws/tools/README.md +20 -0
- package/dist/templates/.cursor/README.md +311 -0
- package/dist/templates/.cursor/hooks/audit.sh +55 -0
- package/dist/templates/.cursor/hooks/block-dangerous.sh +83 -0
- package/dist/templates/.cursor/hooks/caws-quality-check.sh +52 -0
- package/dist/templates/.cursor/hooks/caws-scope-guard.sh +130 -0
- package/dist/templates/.cursor/hooks/caws-tool-validation.sh +121 -0
- package/dist/templates/.cursor/hooks/format.sh +38 -0
- package/dist/templates/.cursor/hooks/naming-check.sh +64 -0
- package/dist/templates/.cursor/hooks/scan-secrets.sh +46 -0
- package/dist/templates/.cursor/hooks/scope-guard.sh +52 -0
- package/dist/templates/.cursor/hooks/validate-spec.sh +83 -0
- package/dist/templates/.cursor/hooks.json +59 -0
- package/dist/templates/.cursor/rules/00-claims-verification.mdc +144 -0
- package/dist/templates/.cursor/rules/01-working-style.mdc +50 -0
- package/dist/templates/.cursor/rules/02-quality-gates.mdc +370 -0
- package/dist/templates/.cursor/rules/03-naming-and-refactor.mdc +33 -0
- package/dist/templates/.cursor/rules/04-logging-language-style.mdc +23 -0
- package/dist/templates/.cursor/rules/05-safe-defaults-guards.mdc +23 -0
- package/dist/templates/.cursor/rules/06-typescript-conventions.mdc +36 -0
- package/dist/templates/.cursor/rules/07-process-ops.mdc +20 -0
- package/dist/templates/.cursor/rules/08-solid-and-architecture.mdc +16 -0
- package/dist/templates/.cursor/rules/09-docstrings.mdc +89 -0
- package/dist/templates/.cursor/rules/10-documentation-quality-standards.mdc +390 -0
- package/dist/templates/.cursor/rules/11-scope-management-waivers.mdc +385 -0
- package/dist/templates/.cursor/rules/12-implementation-completeness.mdc +516 -0
- package/dist/templates/.cursor/rules/13-language-agnostic-standards.mdc +588 -0
- package/dist/templates/.cursor/rules/README.md +148 -0
- package/dist/templates/.github/copilot/instructions.md +311 -0
- package/dist/templates/.idea/runConfigurations/CAWS_Evaluate.xml +5 -0
- package/dist/templates/.idea/runConfigurations/CAWS_Validate.xml +5 -0
- package/dist/templates/.vscode/launch.json +56 -0
- package/dist/templates/.vscode/settings.json +93 -0
- package/dist/templates/.windsurf/workflows/caws-guided-development.md +92 -0
- package/dist/templates/COMMIT_CONVENTIONS.md +86 -0
- package/dist/templates/OIDC_SETUP.md +300 -0
- package/dist/templates/agents.md +1047 -0
- package/dist/templates/codemod/README.md +1 -0
- package/dist/templates/codemod/test.js +93 -0
- package/dist/templates/docs/README.md +150 -0
- package/dist/templates/scripts/quality-gates/check-god-objects.js +146 -0
- package/dist/templates/scripts/quality-gates/run-quality-gates.js +50 -0
- package/dist/templates/scripts/v3/analysis/todo_analyzer.py +1997 -0
- package/dist/tool-loader.js +6 -1
- package/dist/tool-validator.js +8 -2
- package/dist/utils/detection.js +4 -3
- package/dist/utils/git-lock.js +118 -0
- package/dist/utils/gitignore-updater.js +148 -0
- package/dist/utils/quality-gates.js +47 -7
- package/dist/utils/spec-resolver.js +23 -3
- package/dist/utils/yaml-validation.js +155 -0
- package/dist/validation/spec-validation.js +81 -2
- package/package.json +2 -2
- package/templates/.caws/schemas/waivers.schema.json +30 -0
- package/templates/.caws/schemas/working-spec.schema.json +133 -0
- package/templates/.caws/templates/working-spec.template.yml +74 -0
- package/templates/.caws/tools/README.md +20 -0
- package/templates/.caws/tools/scope-guard.js +208 -0
- package/templates/.caws/tools-allow.json +331 -0
- package/templates/.caws/waivers.yml +19 -0
- package/templates/.cursor/hooks/scope-guard.sh +2 -2
- package/templates/.cursor/hooks/validate-spec.sh +42 -7
- package/templates/apps/tools/caws/COMPLETION_REPORT.md +0 -331
- package/templates/apps/tools/caws/MIGRATION_SUMMARY.md +0 -360
- package/templates/apps/tools/caws/README.md +0 -463
- package/templates/apps/tools/caws/TEST_STATUS.md +0 -365
- package/templates/apps/tools/caws/attest.js +0 -357
- package/templates/apps/tools/caws/ci-optimizer.js +0 -642
- package/templates/apps/tools/caws/config.ts +0 -245
- package/templates/apps/tools/caws/cross-functional.js +0 -876
- package/templates/apps/tools/caws/dashboard.js +0 -1112
- package/templates/apps/tools/caws/flake-detector.ts +0 -362
- package/templates/apps/tools/caws/gates.js +0 -198
- package/templates/apps/tools/caws/gates.ts +0 -271
- package/templates/apps/tools/caws/language-adapters.ts +0 -381
- package/templates/apps/tools/caws/language-support.d.ts +0 -367
- package/templates/apps/tools/caws/language-support.d.ts.map +0 -1
- package/templates/apps/tools/caws/language-support.js +0 -585
- package/templates/apps/tools/caws/legacy-assessment.ts +0 -408
- package/templates/apps/tools/caws/legacy-assessor.js +0 -764
- package/templates/apps/tools/caws/mutant-analyzer.js +0 -734
- package/templates/apps/tools/caws/perf-budgets.ts +0 -349
- package/templates/apps/tools/caws/prompt-lint.js.backup +0 -274
- package/templates/apps/tools/caws/property-testing.js +0 -707
- package/templates/apps/tools/caws/provenance.d.ts +0 -14
- package/templates/apps/tools/caws/provenance.d.ts.map +0 -1
- package/templates/apps/tools/caws/provenance.js +0 -132
- package/templates/apps/tools/caws/provenance.js.backup +0 -73
- package/templates/apps/tools/caws/provenance.ts +0 -211
- package/templates/apps/tools/caws/security-provenance.ts +0 -483
- package/templates/apps/tools/caws/shared/base-tool.ts +0 -281
- package/templates/apps/tools/caws/shared/config-manager.ts +0 -366
- package/templates/apps/tools/caws/shared/gate-checker.ts +0 -849
- package/templates/apps/tools/caws/shared/types.ts +0 -444
- package/templates/apps/tools/caws/shared/validator.ts +0 -305
- package/templates/apps/tools/caws/shared/waivers-manager.ts +0 -174
- package/templates/apps/tools/caws/spec-test-mapper.ts +0 -391
- package/templates/apps/tools/caws/test-quality.js +0 -578
- package/templates/apps/tools/caws/validate.js +0 -76
- package/templates/apps/tools/caws/validate.ts +0 -228
- package/templates/apps/tools/caws/waivers.js +0 -344
- /package/{templates/apps/tools/caws ā dist/templates/.caws}/schemas/waivers.schema.json +0 -0
- /package/{templates/apps/tools/caws ā dist/templates/.caws}/schemas/working-spec.schema.json +0 -0
- /package/{templates/apps/tools/caws ā dist/templates/.caws}/templates/working-spec.template.yml +0 -0
- /package/{templates/apps/tools/caws ā dist/templates/.caws/tools}/scope-guard.js +0 -0
- /package/{templates/apps/tools/caws ā dist/templates/.caws}/tools-allow.json +0 -0
- /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 };
|