@paths.design/caws-cli 8.0.1 → 8.2.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.
- package/README.md +5 -6
- package/dist/commands/archive.d.ts +1 -0
- package/dist/commands/archive.d.ts.map +1 -1
- package/dist/commands/archive.js +114 -6
- package/dist/commands/burnup.d.ts.map +1 -1
- package/dist/commands/burnup.js +109 -10
- package/dist/commands/diagnose.js +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +185 -39
- package/dist/commands/mode.d.ts +2 -1
- package/dist/commands/mode.d.ts.map +1 -1
- package/dist/commands/mode.js +24 -14
- package/dist/commands/provenance.d.ts.map +1 -1
- package/dist/commands/provenance.js +216 -93
- package/dist/commands/quality-gates.d.ts.map +1 -1
- package/dist/commands/quality-gates.js +3 -1
- package/dist/commands/specs.d.ts.map +1 -1
- package/dist/commands/specs.js +184 -6
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +134 -10
- package/dist/commands/templates.js +2 -2
- package/dist/commands/worktree.d.ts +7 -0
- package/dist/commands/worktree.d.ts.map +1 -0
- package/dist/commands/worktree.js +136 -0
- package/dist/config/lite-scope.d.ts +33 -0
- package/dist/config/lite-scope.d.ts.map +1 -0
- package/dist/config/lite-scope.js +158 -0
- package/dist/config/modes.d.ts +90 -51
- package/dist/config/modes.d.ts.map +1 -1
- package/dist/config/modes.js +26 -0
- package/dist/error-handler.d.ts +3 -16
- package/dist/error-handler.d.ts.map +1 -1
- package/dist/error-handler.js +6 -98
- package/dist/generators/jest-config-generator.d.ts +32 -0
- package/dist/generators/jest-config-generator.d.ts.map +1 -0
- package/dist/generators/jest-config-generator.js +242 -0
- package/dist/index.js +40 -7
- package/dist/minimal-cli.js +3 -1
- package/dist/scaffold/claude-hooks.d.ts +28 -0
- package/dist/scaffold/claude-hooks.d.ts.map +1 -0
- package/dist/scaffold/claude-hooks.js +344 -0
- package/dist/scaffold/index.d.ts +2 -0
- package/dist/scaffold/index.d.ts.map +1 -1
- package/dist/scaffold/index.js +96 -76
- package/dist/templates/.caws/schemas/scope.schema.json +52 -0
- package/dist/templates/.caws/schemas/working-spec.schema.json +1 -1
- package/dist/templates/.caws/schemas/worktrees.schema.json +36 -0
- package/dist/templates/.claude/README.md +190 -0
- package/dist/templates/.claude/hooks/audit.sh +96 -0
- package/dist/templates/.claude/hooks/block-dangerous.sh +123 -0
- package/dist/templates/.claude/hooks/lite-sprawl-check.sh +117 -0
- package/dist/templates/.claude/hooks/naming-check.sh +97 -0
- package/dist/templates/.claude/hooks/quality-check.sh +68 -0
- package/dist/templates/.claude/hooks/scan-secrets.sh +85 -0
- package/dist/templates/.claude/hooks/scope-guard.sh +192 -0
- package/dist/templates/.claude/hooks/simplification-guard.sh +92 -0
- package/dist/templates/.claude/hooks/validate-spec.sh +76 -0
- package/dist/templates/.claude/settings.json +95 -0
- package/dist/templates/.cursor/README.md +0 -3
- package/dist/templates/.github/copilot-instructions.md +82 -0
- package/dist/templates/.junie/guidelines.md +73 -0
- package/dist/templates/.vscode/launch.json +0 -27
- package/dist/templates/.windsurf/rules/caws-quality-standards.md +54 -0
- package/dist/templates/CLAUDE.md +101 -0
- package/dist/templates/agents.md +73 -1016
- package/dist/templates/docs/README.md +5 -5
- package/dist/test-analysis.d.ts +50 -1
- package/dist/test-analysis.d.ts.map +1 -1
- package/dist/test-analysis.js +203 -10
- package/dist/utils/error-categories.d.ts +52 -0
- package/dist/utils/error-categories.d.ts.map +1 -0
- package/dist/utils/error-categories.js +210 -0
- package/dist/utils/gitignore-updater.d.ts +1 -1
- package/dist/utils/gitignore-updater.d.ts.map +1 -1
- package/dist/utils/gitignore-updater.js +4 -0
- package/dist/utils/ide-detection.js +133 -0
- package/dist/utils/quality-gates-utils.d.ts +49 -0
- package/dist/utils/quality-gates-utils.d.ts.map +1 -0
- package/dist/utils/quality-gates-utils.js +402 -0
- package/dist/utils/typescript-detector.d.ts +8 -5
- package/dist/utils/typescript-detector.d.ts.map +1 -1
- package/dist/utils/typescript-detector.js +36 -90
- package/dist/validation/spec-validation.d.ts.map +1 -1
- package/dist/validation/spec-validation.js +59 -6
- package/dist/worktree/worktree-manager.d.ts +54 -0
- package/dist/worktree/worktree-manager.d.ts.map +1 -0
- package/dist/worktree/worktree-manager.js +378 -0
- package/package.json +9 -3
- package/templates/.caws/schemas/scope.schema.json +52 -0
- package/templates/.caws/schemas/working-spec.schema.json +1 -1
- package/templates/.caws/schemas/worktrees.schema.json +36 -0
- package/templates/.claude/README.md +190 -0
- package/templates/.claude/hooks/audit.sh +96 -0
- package/templates/.claude/hooks/block-dangerous.sh +123 -0
- package/templates/.claude/hooks/lite-sprawl-check.sh +117 -0
- package/templates/.claude/hooks/naming-check.sh +97 -0
- package/templates/.claude/hooks/quality-check.sh +68 -0
- package/templates/.claude/hooks/scan-secrets.sh +85 -0
- package/templates/.claude/hooks/scope-guard.sh +192 -0
- package/templates/.claude/hooks/simplification-guard.sh +92 -0
- package/templates/.claude/hooks/validate-spec.sh +76 -0
- package/templates/.claude/settings.json +95 -0
- package/templates/.cursor/README.md +0 -3
- package/templates/.github/copilot-instructions.md +82 -0
- package/templates/.junie/guidelines.md +73 -0
- package/templates/.vscode/launch.json +0 -27
- package/templates/.windsurf/rules/caws-quality-standards.md +54 -0
- package/templates/AGENTS.md +104 -0
- package/templates/CLAUDE.md +101 -0
- package/templates/docs/README.md +5 -5
- package/templates/.github/copilot/instructions.md +0 -311
- package/templates/agents.md +0 -1047
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview CAWS Lite-Mode Scope Configuration Loader
|
|
3
|
+
* Reads and validates .caws/scope.json for guardrails-only mode
|
|
4
|
+
* @author @darianrosebrook
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const fs = require('fs-extra');
|
|
8
|
+
const path = require('path');
|
|
9
|
+
const micromatch = require('micromatch');
|
|
10
|
+
|
|
11
|
+
const SCOPE_FILE = '.caws/scope.json';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Default scope configuration for lite mode
|
|
15
|
+
* @returns {Object} Default scope.json contents
|
|
16
|
+
*/
|
|
17
|
+
function getLiteScopeDefaults() {
|
|
18
|
+
return {
|
|
19
|
+
version: 1,
|
|
20
|
+
allowedDirectories: ['src/', 'tests/', 'docs/'],
|
|
21
|
+
bannedPatterns: {
|
|
22
|
+
files: ['*-enhanced.*', '*-final.*', '*-v2.*', '*-copy.*'],
|
|
23
|
+
directories: ['*venv*', '.venv', 'm-venv', 'env/'],
|
|
24
|
+
docs: ['*-summary.md', '*-recap.md', '*-plan.md', 'sprint-*'],
|
|
25
|
+
},
|
|
26
|
+
maxNewFilesPerCommit: 10,
|
|
27
|
+
designatedVenvPath: '.venv',
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Load lite scope configuration from .caws/scope.json
|
|
33
|
+
* @param {string} [projectRoot] - Project root directory (defaults to cwd)
|
|
34
|
+
* @returns {Object} Scope configuration (defaults if file not found)
|
|
35
|
+
*/
|
|
36
|
+
function loadLiteScope(projectRoot) {
|
|
37
|
+
const root = projectRoot || process.cwd();
|
|
38
|
+
const scopePath = path.join(root, SCOPE_FILE);
|
|
39
|
+
|
|
40
|
+
try {
|
|
41
|
+
if (!fs.existsSync(scopePath)) {
|
|
42
|
+
return getLiteScopeDefaults();
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const raw = fs.readFileSync(scopePath, 'utf8');
|
|
46
|
+
const config = JSON.parse(raw);
|
|
47
|
+
|
|
48
|
+
// Merge with defaults for any missing fields
|
|
49
|
+
const defaults = getLiteScopeDefaults();
|
|
50
|
+
return {
|
|
51
|
+
version: config.version || defaults.version,
|
|
52
|
+
allowedDirectories: config.allowedDirectories || defaults.allowedDirectories,
|
|
53
|
+
bannedPatterns: {
|
|
54
|
+
files: config.bannedPatterns?.files || defaults.bannedPatterns.files,
|
|
55
|
+
directories: config.bannedPatterns?.directories || defaults.bannedPatterns.directories,
|
|
56
|
+
docs: config.bannedPatterns?.docs || defaults.bannedPatterns.docs,
|
|
57
|
+
},
|
|
58
|
+
maxNewFilesPerCommit: config.maxNewFilesPerCommit ?? defaults.maxNewFilesPerCommit,
|
|
59
|
+
designatedVenvPath: config.designatedVenvPath || defaults.designatedVenvPath,
|
|
60
|
+
};
|
|
61
|
+
} catch (error) {
|
|
62
|
+
// If file is malformed, return defaults
|
|
63
|
+
return getLiteScopeDefaults();
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Check if a file path is allowed by the scope configuration
|
|
69
|
+
* @param {string} filePath - Relative file path to check
|
|
70
|
+
* @param {Object} [scope] - Scope configuration (loads from disk if not provided)
|
|
71
|
+
* @param {string} [projectRoot] - Project root directory
|
|
72
|
+
* @returns {boolean} Whether the path is allowed
|
|
73
|
+
*/
|
|
74
|
+
function isPathAllowed(filePath, scope, projectRoot) {
|
|
75
|
+
const config = scope || loadLiteScope(projectRoot);
|
|
76
|
+
const dirs = config.allowedDirectories;
|
|
77
|
+
|
|
78
|
+
// If no allowed directories specified, everything is allowed
|
|
79
|
+
if (!dirs || dirs.length === 0) {
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Normalize the file path
|
|
84
|
+
const normalized = filePath.replace(/\\/g, '/');
|
|
85
|
+
|
|
86
|
+
// Check if file is within any allowed directory
|
|
87
|
+
for (const dir of dirs) {
|
|
88
|
+
const normalizedDir = dir.replace(/\\/g, '/').replace(/\/$/, '');
|
|
89
|
+
if (normalized.startsWith(normalizedDir + '/') || normalized === normalizedDir) {
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Also allow root-level config files (package.json, etc.)
|
|
95
|
+
if (!normalized.includes('/')) {
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Allow .caws/ directory itself
|
|
100
|
+
if (normalized.startsWith('.caws/')) {
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Check if a filename or path matches any banned pattern
|
|
109
|
+
* @param {string} filePath - File path to check
|
|
110
|
+
* @param {Object} [scope] - Scope configuration (loads from disk if not provided)
|
|
111
|
+
* @param {string} [projectRoot] - Project root directory
|
|
112
|
+
* @returns {{ matched: boolean, pattern: string|null, category: string|null }} Match result
|
|
113
|
+
*/
|
|
114
|
+
function matchesBannedPattern(filePath, scope, projectRoot) {
|
|
115
|
+
const config = scope || loadLiteScope(projectRoot);
|
|
116
|
+
const banned = config.bannedPatterns;
|
|
117
|
+
const basename = path.basename(filePath);
|
|
118
|
+
const normalized = filePath.replace(/\\/g, '/');
|
|
119
|
+
|
|
120
|
+
// Check file patterns
|
|
121
|
+
if (banned.files && banned.files.length > 0) {
|
|
122
|
+
if (micromatch.isMatch(basename, banned.files, { dot: true })) {
|
|
123
|
+
const matched = banned.files.find((p) => micromatch.isMatch(basename, p, { dot: true }));
|
|
124
|
+
return { matched: true, pattern: matched, category: 'files' };
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// Check directory patterns
|
|
129
|
+
if (banned.directories && banned.directories.length > 0) {
|
|
130
|
+
const parts = normalized.split('/');
|
|
131
|
+
for (const part of parts) {
|
|
132
|
+
if (micromatch.isMatch(part, banned.directories, { dot: true })) {
|
|
133
|
+
const matched = banned.directories.find((p) =>
|
|
134
|
+
micromatch.isMatch(part, p, { dot: true })
|
|
135
|
+
);
|
|
136
|
+
return { matched: true, pattern: matched, category: 'directories' };
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// Check doc patterns
|
|
142
|
+
if (banned.docs && banned.docs.length > 0) {
|
|
143
|
+
if (micromatch.isMatch(basename, banned.docs, { dot: true })) {
|
|
144
|
+
const matched = banned.docs.find((p) => micromatch.isMatch(basename, p, { dot: true }));
|
|
145
|
+
return { matched: true, pattern: matched, category: 'docs' };
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
return { matched: false, pattern: null, category: null };
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
module.exports = {
|
|
153
|
+
loadLiteScope,
|
|
154
|
+
isPathAllowed,
|
|
155
|
+
matchesBannedPattern,
|
|
156
|
+
getLiteScopeDefaults,
|
|
157
|
+
SCOPE_FILE,
|
|
158
|
+
};
|
package/dist/config/modes.d.ts
CHANGED
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
export namespace COMPLEXITY_TIERS {
|
|
2
|
-
namespace
|
|
2
|
+
namespace lite {
|
|
3
3
|
let name: string;
|
|
4
4
|
let description: string;
|
|
5
5
|
let color: chalk.Chalk;
|
|
6
6
|
let icon: string;
|
|
7
7
|
namespace features {
|
|
8
8
|
let workingSpec: boolean;
|
|
9
|
-
let
|
|
10
|
-
let
|
|
11
|
-
let
|
|
12
|
-
let
|
|
13
|
-
let
|
|
14
|
-
let noChangeBudgets: boolean;
|
|
15
|
-
let noMultiSpec: boolean;
|
|
9
|
+
let destructiveCommandBlocking: boolean;
|
|
10
|
+
let fileSprawlDetection: boolean;
|
|
11
|
+
let scopeFence: boolean;
|
|
12
|
+
let simplificationGuard: boolean;
|
|
13
|
+
let worktreeIsolation: boolean;
|
|
16
14
|
}
|
|
17
15
|
namespace qualityRequirements {
|
|
18
16
|
let testCoverage: number;
|
|
@@ -22,12 +20,11 @@ export namespace COMPLEXITY_TIERS {
|
|
|
22
20
|
let riskTiers: string[];
|
|
23
21
|
namespace commands {
|
|
24
22
|
let init: boolean;
|
|
25
|
-
let validate: boolean;
|
|
26
23
|
let status: boolean;
|
|
27
|
-
let
|
|
24
|
+
let worktree: boolean;
|
|
28
25
|
}
|
|
29
26
|
}
|
|
30
|
-
namespace
|
|
27
|
+
namespace simple {
|
|
31
28
|
let name_1: string;
|
|
32
29
|
export { name_1 as name };
|
|
33
30
|
let description_1: string;
|
|
@@ -39,15 +36,13 @@ export namespace COMPLEXITY_TIERS {
|
|
|
39
36
|
export namespace features_1 {
|
|
40
37
|
let workingSpec_1: boolean;
|
|
41
38
|
export { workingSpec_1 as workingSpec };
|
|
42
|
-
export let
|
|
43
|
-
let
|
|
44
|
-
export
|
|
45
|
-
export let
|
|
46
|
-
export let
|
|
47
|
-
export let
|
|
48
|
-
export let
|
|
49
|
-
export let multiSpec: boolean;
|
|
50
|
-
export let changeFolders: boolean;
|
|
39
|
+
export let basicValidation: boolean;
|
|
40
|
+
export let statusDisplay: boolean;
|
|
41
|
+
export let noQualityGates: boolean;
|
|
42
|
+
export let noProvenance: boolean;
|
|
43
|
+
export let noWaivers: boolean;
|
|
44
|
+
export let noChangeBudgets: boolean;
|
|
45
|
+
export let noMultiSpec: boolean;
|
|
51
46
|
}
|
|
52
47
|
export { features_1 as features };
|
|
53
48
|
export namespace qualityRequirements_1 {
|
|
@@ -64,25 +59,14 @@ export namespace COMPLEXITY_TIERS {
|
|
|
64
59
|
export namespace commands_1 {
|
|
65
60
|
let init_1: boolean;
|
|
66
61
|
export { init_1 as init };
|
|
67
|
-
let
|
|
68
|
-
export { validate_1 as validate };
|
|
62
|
+
export let validate: boolean;
|
|
69
63
|
let status_1: boolean;
|
|
70
64
|
export { status_1 as status };
|
|
71
|
-
let
|
|
72
|
-
export { specs_1 as specs };
|
|
73
|
-
export let diagnose: boolean;
|
|
74
|
-
export let evaluate: boolean;
|
|
75
|
-
export let iterate: boolean;
|
|
76
|
-
let provenance_1: boolean;
|
|
77
|
-
export { provenance_1 as provenance };
|
|
78
|
-
let waivers_1: boolean;
|
|
79
|
-
export { waivers_1 as waivers };
|
|
80
|
-
export let hooks: boolean;
|
|
81
|
-
export let archive: boolean;
|
|
65
|
+
export let specs: boolean;
|
|
82
66
|
}
|
|
83
67
|
export { commands_1 as commands };
|
|
84
68
|
}
|
|
85
|
-
namespace
|
|
69
|
+
namespace standard {
|
|
86
70
|
let name_2: string;
|
|
87
71
|
export { name_2 as name };
|
|
88
72
|
let description_2: string;
|
|
@@ -94,6 +78,61 @@ export namespace COMPLEXITY_TIERS {
|
|
|
94
78
|
export namespace features_2 {
|
|
95
79
|
let workingSpec_2: boolean;
|
|
96
80
|
export { workingSpec_2 as workingSpec };
|
|
81
|
+
export let fullValidation: boolean;
|
|
82
|
+
let statusDisplay_1: boolean;
|
|
83
|
+
export { statusDisplay_1 as statusDisplay };
|
|
84
|
+
export let qualityGates: boolean;
|
|
85
|
+
export let provenance: boolean;
|
|
86
|
+
export let waivers: boolean;
|
|
87
|
+
export let changeBudgets: boolean;
|
|
88
|
+
export let multiSpec: boolean;
|
|
89
|
+
export let changeFolders: boolean;
|
|
90
|
+
}
|
|
91
|
+
export { features_2 as features };
|
|
92
|
+
export namespace qualityRequirements_2 {
|
|
93
|
+
let testCoverage_2: number;
|
|
94
|
+
export { testCoverage_2 as testCoverage };
|
|
95
|
+
let mutationScore_2: number;
|
|
96
|
+
export { mutationScore_2 as mutationScore };
|
|
97
|
+
let contracts_2: string;
|
|
98
|
+
export { contracts_2 as contracts };
|
|
99
|
+
}
|
|
100
|
+
export { qualityRequirements_2 as qualityRequirements };
|
|
101
|
+
let riskTiers_2: string[];
|
|
102
|
+
export { riskTiers_2 as riskTiers };
|
|
103
|
+
export namespace commands_2 {
|
|
104
|
+
let init_2: boolean;
|
|
105
|
+
export { init_2 as init };
|
|
106
|
+
let validate_1: boolean;
|
|
107
|
+
export { validate_1 as validate };
|
|
108
|
+
let status_2: boolean;
|
|
109
|
+
export { status_2 as status };
|
|
110
|
+
let specs_1: boolean;
|
|
111
|
+
export { specs_1 as specs };
|
|
112
|
+
export let diagnose: boolean;
|
|
113
|
+
export let evaluate: boolean;
|
|
114
|
+
export let iterate: boolean;
|
|
115
|
+
let provenance_1: boolean;
|
|
116
|
+
export { provenance_1 as provenance };
|
|
117
|
+
let waivers_1: boolean;
|
|
118
|
+
export { waivers_1 as waivers };
|
|
119
|
+
export let hooks: boolean;
|
|
120
|
+
export let archive: boolean;
|
|
121
|
+
}
|
|
122
|
+
export { commands_2 as commands };
|
|
123
|
+
}
|
|
124
|
+
namespace enterprise {
|
|
125
|
+
let name_3: string;
|
|
126
|
+
export { name_3 as name };
|
|
127
|
+
let description_3: string;
|
|
128
|
+
export { description_3 as description };
|
|
129
|
+
let color_3: chalk.Chalk;
|
|
130
|
+
export { color_3 as color };
|
|
131
|
+
let icon_3: string;
|
|
132
|
+
export { icon_3 as icon };
|
|
133
|
+
export namespace features_3 {
|
|
134
|
+
let workingSpec_3: boolean;
|
|
135
|
+
export { workingSpec_3 as workingSpec };
|
|
97
136
|
let fullValidation_1: boolean;
|
|
98
137
|
export { fullValidation_1 as fullValidation };
|
|
99
138
|
let statusDisplay_2: boolean;
|
|
@@ -114,25 +153,25 @@ export namespace COMPLEXITY_TIERS {
|
|
|
114
153
|
export let compliance: boolean;
|
|
115
154
|
export let advancedMonitoring: boolean;
|
|
116
155
|
}
|
|
117
|
-
export {
|
|
118
|
-
export namespace
|
|
119
|
-
let
|
|
120
|
-
export {
|
|
121
|
-
let
|
|
122
|
-
export {
|
|
123
|
-
let
|
|
124
|
-
export {
|
|
156
|
+
export { features_3 as features };
|
|
157
|
+
export namespace qualityRequirements_3 {
|
|
158
|
+
let testCoverage_3: number;
|
|
159
|
+
export { testCoverage_3 as testCoverage };
|
|
160
|
+
let mutationScore_3: number;
|
|
161
|
+
export { mutationScore_3 as mutationScore };
|
|
162
|
+
let contracts_3: string;
|
|
163
|
+
export { contracts_3 as contracts };
|
|
125
164
|
}
|
|
126
|
-
export {
|
|
127
|
-
let
|
|
128
|
-
export {
|
|
129
|
-
export namespace
|
|
130
|
-
let
|
|
131
|
-
export {
|
|
165
|
+
export { qualityRequirements_3 as qualityRequirements };
|
|
166
|
+
let riskTiers_3: string[];
|
|
167
|
+
export { riskTiers_3 as riskTiers };
|
|
168
|
+
export namespace commands_3 {
|
|
169
|
+
let init_3: boolean;
|
|
170
|
+
export { init_3 as init };
|
|
132
171
|
let validate_2: boolean;
|
|
133
172
|
export { validate_2 as validate };
|
|
134
|
-
let
|
|
135
|
-
export {
|
|
173
|
+
let status_3: boolean;
|
|
174
|
+
export { status_3 as status };
|
|
136
175
|
let specs_2: boolean;
|
|
137
176
|
export { specs_2 as specs };
|
|
138
177
|
let diagnose_1: boolean;
|
|
@@ -153,7 +192,7 @@ export namespace COMPLEXITY_TIERS {
|
|
|
153
192
|
export let testAnalysis: boolean;
|
|
154
193
|
export let qualityMonitor: boolean;
|
|
155
194
|
}
|
|
156
|
-
export {
|
|
195
|
+
export { commands_3 as commands };
|
|
157
196
|
}
|
|
158
197
|
}
|
|
159
198
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modes.d.ts","sourceRoot":"","sources":["../../src/config/modes.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"modes.d.ts","sourceRoot":"","sources":["../../src/config/modes.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqJA;;;;GAIG;AACH,8BAHW,MAAM,OAKhB;AAED;;;GAGG;AACH,qCAFa,MAAM,EAAE,CAIpB;AA8FD;;;GAGG;AACH,kCAFa,OAAO,CAAC,MAAM,CAAC,CAgB3B;AAED;;;;GAIG;AACH,qCAHW,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAuB5B;AA1ID;;;;;GAKG;AACH,4CAJW,MAAM,SACN,MAAM,GACJ,OAAO,CAKnB;AAED;;;;;GAKG;AACH,0CAJW,MAAM,SACN,MAAM,GACJ,OAAO,CAKnB;AAED;;;;GAIG;AACH,8CAHW,MAAM,OAMhB;AAED;;;;GAIG;AACH,6CAHW,MAAM,GACJ,MAAM,EAAE,CAKpB;AAED;;;;;GAKG;AACH,8CAJW,MAAM,mBACN,MAAM,GACJ,OAAO,CAKnB;AAED;;GAEG;AACH,8CAkCC;AAkDD;;;;GAIG;AACH,0DAFa,MAAM,CAsBlB"}
|
package/dist/config/modes.js
CHANGED
|
@@ -10,6 +10,32 @@ const chalk = require('chalk');
|
|
|
10
10
|
* CAWS Complexity Tiers
|
|
11
11
|
*/
|
|
12
12
|
const COMPLEXITY_TIERS = {
|
|
13
|
+
lite: {
|
|
14
|
+
name: 'Lite',
|
|
15
|
+
description: 'Guardrails-only mode — no YAML specs required',
|
|
16
|
+
color: chalk.magenta,
|
|
17
|
+
icon: '🛡️',
|
|
18
|
+
features: {
|
|
19
|
+
workingSpec: false,
|
|
20
|
+
destructiveCommandBlocking: true,
|
|
21
|
+
fileSprawlDetection: true,
|
|
22
|
+
scopeFence: true,
|
|
23
|
+
simplificationGuard: true,
|
|
24
|
+
worktreeIsolation: true,
|
|
25
|
+
},
|
|
26
|
+
qualityRequirements: {
|
|
27
|
+
testCoverage: 0,
|
|
28
|
+
mutationScore: 0,
|
|
29
|
+
contracts: 'none',
|
|
30
|
+
},
|
|
31
|
+
riskTiers: ['T3'],
|
|
32
|
+
commands: {
|
|
33
|
+
init: true,
|
|
34
|
+
status: true,
|
|
35
|
+
worktree: true,
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
|
|
13
39
|
simple: {
|
|
14
40
|
name: 'Simple',
|
|
15
41
|
description: 'Minimal CAWS for small projects and quick prototyping',
|
package/dist/error-handler.d.ts
CHANGED
|
@@ -8,16 +8,7 @@ export class CAWSError extends Error {
|
|
|
8
8
|
timestamp: Date;
|
|
9
9
|
executionTime: any;
|
|
10
10
|
}
|
|
11
|
-
|
|
12
|
-
let VALIDATION: string;
|
|
13
|
-
let PERMISSION: string;
|
|
14
|
-
let FILESYSTEM: string;
|
|
15
|
-
let NETWORK: string;
|
|
16
|
-
let CONFIGURATION: string;
|
|
17
|
-
let USER_INPUT: string;
|
|
18
|
-
let DEPENDENCY: string;
|
|
19
|
-
let UNKNOWN: string;
|
|
20
|
-
}
|
|
11
|
+
import { ERROR_CATEGORIES } from "./utils/error-categories";
|
|
21
12
|
/**
|
|
22
13
|
* Execution timing utilities
|
|
23
14
|
*/
|
|
@@ -29,12 +20,7 @@ export class ExecutionTimer {
|
|
|
29
20
|
getDuration(): number;
|
|
30
21
|
formatDuration(): string;
|
|
31
22
|
}
|
|
32
|
-
|
|
33
|
-
* Get error category from error object or message
|
|
34
|
-
* @param {Error|string} error - Error object or message
|
|
35
|
-
* @returns {string} Error category
|
|
36
|
-
*/
|
|
37
|
-
export function getErrorCategory(error: Error | string): string;
|
|
23
|
+
import { getErrorCategory } from "./utils/error-categories";
|
|
38
24
|
/**
|
|
39
25
|
* Wrap async operations with consistent error handling and timing
|
|
40
26
|
* @param {Function} operation - Async operation to wrap
|
|
@@ -161,4 +147,5 @@ export function getAllTroubleshootingGuides(): any;
|
|
|
161
147
|
* @returns {string|null} Issue key if match found, null otherwise
|
|
162
148
|
*/
|
|
163
149
|
export function suggestTroubleshootingGuide(errorMessage: string): string | null;
|
|
150
|
+
export { ERROR_CATEGORIES, getErrorCategory };
|
|
164
151
|
//# sourceMappingURL=error-handler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../src/error-handler.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../src/error-handler.js"],"names":[],"mappings":"AAcA;;GAEG;AACH;IACE,+DAOC;IAJC,cAAqD;IACrD,mBAA2F;IAC3F,gBAA2B;IAC3B,mBAAyB;CAE5B;;AAED;;GAEG;AACH;IAEI,kBAAqB;IACrB,gBAAmB;IAGrB,cAEC;IAED,cAGC;IAED,sBAIC;IAED,yBAMC;CACF;;AAED;;;;;;GAMG;AACH,yDAJW,MAAM,kBACN,OAAO,GACL,OAAO,CAAC,GAAG,CAAC,CA8BxB;AAED;;;;;;GAMG;AACH,wDAJW,MAAM,kBACN,OAAO,GACL,GAAG,CA8Bf;AAgSD;;;;;GAKG;AACH,sCAJW,KAAK,wBAEL,OAAO,QAmDjB;AA0JD;;;GAGG;AACH,2CAqBC;AAnXD;;;;;;GAMG;AACH,8CALW,KAAK,YACL,MAAM,kBAEJ,MAAM,EAAE,CAwDpB;AAED;;;;;GAKG;AACH,+CAJW,MAAM,kBAEJ,MAAM,CA4BlB;AAxJD;;;;;GAKG;AACH,0CAJW,MAAM,iBACN,MAAM,EAAE,GACN,MAAM,GAAC,IAAI,CAiBvB;AAjHD;;GAEG;AACH;;;;;EAuFE;AA4JF;;;;GAIG;AACH,qDAFW,OAAO,UAIjB;AAED;;;GAGG;AACH,gCAFa,OAAO,CAQnB;AAED;;;;GAIG;AACH,kDAFW,OAAO,OAcjB;AA2DD;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0GE;AAEF;;;;GAIG;AACH,kDAHW,MAAM,GACJ,MAAO,IAAI,CAIvB;AAED;;;GAGG;AACH,mDAEC;AAED;;;;GAIG;AACH,0DAHW,MAAM,GACJ,MAAM,GAAC,IAAI,CAmBvB"}
|
package/dist/error-handler.js
CHANGED
|
@@ -5,104 +5,12 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
const chalk = require('chalk');
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
PERMISSION: 'permission',
|
|
15
|
-
FILESYSTEM: 'filesystem',
|
|
16
|
-
NETWORK: 'network',
|
|
17
|
-
CONFIGURATION: 'configuration',
|
|
18
|
-
USER_INPUT: 'user_input',
|
|
19
|
-
DEPENDENCY: 'dependency',
|
|
20
|
-
UNKNOWN: 'unknown',
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Error code mappings for common system errors
|
|
25
|
-
*/
|
|
26
|
-
const ERROR_CODES = {
|
|
27
|
-
EACCES: ERROR_CATEGORIES.PERMISSION,
|
|
28
|
-
EPERM: ERROR_CATEGORIES.PERMISSION,
|
|
29
|
-
ENOENT: ERROR_CATEGORIES.FILESYSTEM,
|
|
30
|
-
ENOTFOUND: ERROR_CATEGORIES.NETWORK,
|
|
31
|
-
ECONNREFUSED: ERROR_CATEGORIES.NETWORK,
|
|
32
|
-
ETIMEDOUT: ERROR_CATEGORIES.NETWORK,
|
|
33
|
-
ENOSPC: ERROR_CATEGORIES.FILESYSTEM,
|
|
34
|
-
EEXIST: ERROR_CATEGORIES.FILESYSTEM,
|
|
35
|
-
EISDIR: ERROR_CATEGORIES.FILESYSTEM,
|
|
36
|
-
ENOTDIR: ERROR_CATEGORIES.FILESYSTEM,
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Get error category from error object or message
|
|
41
|
-
* @param {Error|string} error - Error object or message
|
|
42
|
-
* @returns {string} Error category
|
|
43
|
-
*/
|
|
44
|
-
function getErrorCategory(error) {
|
|
45
|
-
const errorMessage = typeof error === 'string' ? error : error.message;
|
|
46
|
-
const errorCode = typeof error === 'object' && error.code ? error.code : null;
|
|
47
|
-
|
|
48
|
-
// Check error codes first
|
|
49
|
-
if (errorCode && ERROR_CODES[errorCode]) {
|
|
50
|
-
return ERROR_CODES[errorCode];
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
// Check message patterns
|
|
54
|
-
const lowerMessage = errorMessage.toLowerCase();
|
|
55
|
-
|
|
56
|
-
if (
|
|
57
|
-
lowerMessage.includes('validation') ||
|
|
58
|
-
lowerMessage.includes('invalid') ||
|
|
59
|
-
lowerMessage.includes('required')
|
|
60
|
-
) {
|
|
61
|
-
return ERROR_CATEGORIES.VALIDATION;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
if (
|
|
65
|
-
lowerMessage.includes('permission') ||
|
|
66
|
-
lowerMessage.includes('access') ||
|
|
67
|
-
lowerMessage.includes('denied')
|
|
68
|
-
) {
|
|
69
|
-
return ERROR_CATEGORIES.PERMISSION;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
if (
|
|
73
|
-
lowerMessage.includes('file') ||
|
|
74
|
-
lowerMessage.includes('directory') ||
|
|
75
|
-
lowerMessage.includes('path')
|
|
76
|
-
) {
|
|
77
|
-
return ERROR_CATEGORIES.FILESYSTEM;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
if (
|
|
81
|
-
lowerMessage.includes('network') ||
|
|
82
|
-
lowerMessage.includes('connection') ||
|
|
83
|
-
lowerMessage.includes('timeout')
|
|
84
|
-
) {
|
|
85
|
-
return ERROR_CATEGORIES.NETWORK;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
if (
|
|
89
|
-
lowerMessage.includes('config') ||
|
|
90
|
-
lowerMessage.includes('setting') ||
|
|
91
|
-
lowerMessage.includes('option')
|
|
92
|
-
) {
|
|
93
|
-
return ERROR_CATEGORIES.CONFIGURATION;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
if (
|
|
97
|
-
lowerMessage.includes('input') ||
|
|
98
|
-
lowerMessage.includes('prompt') ||
|
|
99
|
-
lowerMessage.includes('answer')
|
|
100
|
-
) {
|
|
101
|
-
return ERROR_CATEGORIES.USER_INPUT;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
return ERROR_CATEGORIES.UNKNOWN;
|
|
105
|
-
}
|
|
8
|
+
const {
|
|
9
|
+
ERROR_CATEGORIES,
|
|
10
|
+
ERROR_CODES,
|
|
11
|
+
getErrorCategory,
|
|
12
|
+
getCategorySuggestions,
|
|
13
|
+
} = require('./utils/error-categories');
|
|
106
14
|
|
|
107
15
|
/**
|
|
108
16
|
* Enhanced error class with category and recovery suggestions
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configure Jest for TypeScript project
|
|
3
|
+
* @param {string} projectDir - Project directory path
|
|
4
|
+
* @param {Object} options - Configuration options
|
|
5
|
+
* @returns {Promise<Object>} Configuration result
|
|
6
|
+
*/
|
|
7
|
+
export function configureJestForTypeScript(projectDir?: string, options?: any): Promise<any>;
|
|
8
|
+
/**
|
|
9
|
+
* Generate Jest configuration for TypeScript project
|
|
10
|
+
* @param {Object} options - Configuration options
|
|
11
|
+
* @returns {string} Jest configuration content
|
|
12
|
+
*/
|
|
13
|
+
export function generateJestConfig(options?: any): string;
|
|
14
|
+
/**
|
|
15
|
+
* Generate test setup file for TypeScript
|
|
16
|
+
* @returns {string} Setup file content
|
|
17
|
+
*/
|
|
18
|
+
export function generateTestSetup(): string;
|
|
19
|
+
/**
|
|
20
|
+
* Install Jest and TypeScript dependencies
|
|
21
|
+
* @param {string} projectDir - Project directory
|
|
22
|
+
* @param {Object} packageJson - Existing package.json
|
|
23
|
+
* @returns {Promise<Object>} Installation result
|
|
24
|
+
*/
|
|
25
|
+
export function installJestDependencies(projectDir: string, packageJson: any): Promise<any>;
|
|
26
|
+
/**
|
|
27
|
+
* Get Jest configuration recommendations
|
|
28
|
+
* @param {string} projectDir - Project directory path
|
|
29
|
+
* @returns {Object} Recommendations
|
|
30
|
+
*/
|
|
31
|
+
export function getJestRecommendations(projectDir?: string): any;
|
|
32
|
+
//# sourceMappingURL=jest-config-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jest-config-generator.d.ts","sourceRoot":"","sources":["../../src/generators/jest-config-generator.js"],"names":[],"mappings":"AA+GA;;;;;GAKG;AACH,wDAJW,MAAM,kBAEJ,OAAO,KAAQ,CAgE3B;AAzKD;;;;GAIG;AACH,mDAFa,MAAM,CA0ClB;AAED;;;GAGG;AACH,qCAFa,MAAM,CAiBlB;AAED;;;;;GAKG;AACH,oDAJW,MAAM,qBAEJ,OAAO,KAAQ,CA2B3B;AAwED;;;;GAIG;AACH,oDAHW,MAAM,OAkDhB"}
|