@paths.design/caws-cli 8.0.0 → 8.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/budget-derivation.d.ts +74 -0
- package/dist/budget-derivation.d.ts.map +1 -0
- package/dist/cicd-optimizer.d.ts +142 -0
- package/dist/cicd-optimizer.d.ts.map +1 -0
- package/dist/commands/archive.d.ts +50 -0
- package/dist/commands/archive.d.ts.map +1 -0
- package/dist/commands/burnup.d.ts +6 -0
- package/dist/commands/burnup.d.ts.map +1 -0
- package/dist/commands/diagnose.d.ts +52 -0
- package/dist/commands/diagnose.d.ts.map +1 -0
- package/dist/commands/evaluate.d.ts +8 -0
- package/dist/commands/evaluate.d.ts.map +1 -0
- package/dist/commands/init.d.ts +5 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/iterate.d.ts +8 -0
- package/dist/commands/iterate.d.ts.map +1 -0
- package/dist/commands/mode.d.ts +24 -0
- package/dist/commands/mode.d.ts.map +1 -0
- package/dist/commands/plan.d.ts +49 -0
- package/dist/commands/plan.d.ts.map +1 -0
- package/dist/commands/provenance.d.ts +32 -0
- package/dist/commands/provenance.d.ts.map +1 -0
- package/dist/commands/quality-gates.d.ts +6 -0
- package/dist/commands/quality-gates.d.ts.map +1 -0
- package/dist/commands/quality-gates.js +79 -2
- package/dist/commands/quality-monitor.d.ts +17 -0
- package/dist/commands/quality-monitor.d.ts.map +1 -0
- package/dist/commands/specs.d.ts +71 -0
- package/dist/commands/specs.d.ts.map +1 -0
- package/dist/commands/status.d.ts +44 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/templates.d.ts +74 -0
- package/dist/commands/templates.d.ts.map +1 -0
- package/dist/commands/tool.d.ts +13 -0
- package/dist/commands/tool.d.ts.map +1 -0
- package/dist/commands/troubleshoot.d.ts +8 -0
- package/dist/commands/troubleshoot.d.ts.map +1 -0
- package/dist/commands/tutorial.d.ts +55 -0
- package/dist/commands/tutorial.d.ts.map +1 -0
- package/dist/commands/validate.d.ts +15 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/waivers.d.ts +8 -0
- package/dist/commands/waivers.d.ts.map +1 -0
- package/dist/commands/workflow.d.ts +85 -0
- package/dist/commands/workflow.d.ts.map +1 -0
- package/dist/config/index.d.ts +29 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/modes.d.ts +225 -0
- package/dist/config/modes.d.ts.map +1 -0
- package/dist/constants/spec-types.d.ts +41 -0
- package/dist/constants/spec-types.d.ts.map +1 -0
- package/dist/error-handler.d.ts +164 -0
- package/dist/error-handler.d.ts.map +1 -0
- package/dist/generators/jest-config.d.ts +32 -0
- package/dist/generators/jest-config.d.ts.map +1 -0
- package/dist/generators/working-spec.d.ts +13 -0
- package/dist/generators/working-spec.d.ts.map +1 -0
- package/dist/index-new.d.ts +5 -0
- package/dist/index-new.d.ts.map +1 -0
- package/dist/index-new.js +317 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.backup +4711 -0
- package/dist/minimal-cli.d.ts +3 -0
- package/dist/minimal-cli.d.ts.map +1 -0
- package/dist/policy/PolicyManager.d.ts +104 -0
- package/dist/policy/PolicyManager.d.ts.map +1 -0
- package/dist/scaffold/cursor-hooks.d.ts +7 -0
- package/dist/scaffold/cursor-hooks.d.ts.map +1 -0
- package/dist/scaffold/git-hooks.d.ts +38 -0
- package/dist/scaffold/git-hooks.d.ts.map +1 -0
- package/dist/scaffold/index.d.ts +15 -0
- package/dist/scaffold/index.d.ts.map +1 -0
- package/dist/spec/SpecFileManager.d.ts +146 -0
- package/dist/spec/SpecFileManager.d.ts.map +1 -0
- package/dist/test-analysis.d.ts +182 -0
- package/dist/test-analysis.d.ts.map +1 -0
- package/dist/tool-interface.d.ts +236 -0
- package/dist/tool-interface.d.ts.map +1 -0
- package/dist/tool-loader.d.ts +77 -0
- package/dist/tool-loader.d.ts.map +1 -0
- package/dist/tool-validator.d.ts +72 -0
- package/dist/tool-validator.d.ts.map +1 -0
- package/dist/utils/async-utils.d.ts +73 -0
- package/dist/utils/async-utils.d.ts.map +1 -0
- package/dist/utils/command-wrapper.d.ts +66 -0
- package/dist/utils/command-wrapper.d.ts.map +1 -0
- package/dist/utils/detection.d.ts +14 -0
- package/dist/utils/detection.d.ts.map +1 -0
- package/dist/utils/finalization.d.ts +17 -0
- package/dist/utils/finalization.d.ts.map +1 -0
- package/dist/utils/git-lock.d.ts +13 -0
- package/dist/utils/git-lock.d.ts.map +1 -0
- package/dist/utils/gitignore-updater.d.ts +39 -0
- package/dist/utils/gitignore-updater.d.ts.map +1 -0
- package/dist/utils/project-analysis.d.ts +34 -0
- package/dist/utils/project-analysis.d.ts.map +1 -0
- package/dist/utils/promise-utils.d.ts +30 -0
- package/dist/utils/promise-utils.d.ts.map +1 -0
- package/dist/utils/quality-gates.d.ts +49 -0
- package/dist/utils/quality-gates.d.ts.map +1 -0
- package/dist/utils/spec-resolver.d.ts +80 -0
- package/dist/utils/spec-resolver.d.ts.map +1 -0
- package/dist/utils/typescript-detector.d.ts +63 -0
- package/dist/utils/typescript-detector.d.ts.map +1 -0
- package/dist/utils/yaml-validation.d.ts +32 -0
- package/dist/utils/yaml-validation.d.ts.map +1 -0
- package/dist/validation/spec-validation.d.ts +43 -0
- package/dist/validation/spec-validation.d.ts.map +1 -0
- package/dist/waivers-manager.d.ts +167 -0
- package/dist/waivers-manager.d.ts.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Standard tool execution result
|
|
4
|
+
*/
|
|
5
|
+
export type ToolExecutionResult = {
|
|
6
|
+
/**
|
|
7
|
+
* - Whether execution succeeded
|
|
8
|
+
*/
|
|
9
|
+
success: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* - Execution duration in milliseconds
|
|
12
|
+
*/
|
|
13
|
+
duration: number;
|
|
14
|
+
/**
|
|
15
|
+
* - Tool-specific output data
|
|
16
|
+
*/
|
|
17
|
+
output: any;
|
|
18
|
+
/**
|
|
19
|
+
* - Error messages if execution failed
|
|
20
|
+
*/
|
|
21
|
+
errors: Array<string>;
|
|
22
|
+
/**
|
|
23
|
+
* - Additional execution metadata
|
|
24
|
+
*/
|
|
25
|
+
metadata: any;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Tool metadata structure
|
|
29
|
+
*/
|
|
30
|
+
export type ToolMetadata = {
|
|
31
|
+
/**
|
|
32
|
+
* - Unique tool identifier
|
|
33
|
+
*/
|
|
34
|
+
id: string;
|
|
35
|
+
/**
|
|
36
|
+
* - Human-readable tool name
|
|
37
|
+
*/
|
|
38
|
+
name: string;
|
|
39
|
+
/**
|
|
40
|
+
* - Tool version (semver)
|
|
41
|
+
*/
|
|
42
|
+
version: string;
|
|
43
|
+
/**
|
|
44
|
+
* - Tool description
|
|
45
|
+
*/
|
|
46
|
+
description: string;
|
|
47
|
+
/**
|
|
48
|
+
* - Tool capabilities (e.g., ['validation', 'security'])
|
|
49
|
+
*/
|
|
50
|
+
capabilities: Array<string>;
|
|
51
|
+
/**
|
|
52
|
+
* - Tool author
|
|
53
|
+
*/
|
|
54
|
+
author: string;
|
|
55
|
+
/**
|
|
56
|
+
* - Tool license
|
|
57
|
+
*/
|
|
58
|
+
license: string;
|
|
59
|
+
/**
|
|
60
|
+
* - Required Node.js dependencies
|
|
61
|
+
*/
|
|
62
|
+
dependencies: Array<string>;
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Tool execution context
|
|
66
|
+
*/
|
|
67
|
+
export type ToolExecutionContext = {
|
|
68
|
+
/**
|
|
69
|
+
* - Current working directory
|
|
70
|
+
*/
|
|
71
|
+
workingDirectory: string;
|
|
72
|
+
/**
|
|
73
|
+
* - Environment variables
|
|
74
|
+
*/
|
|
75
|
+
environment: any;
|
|
76
|
+
/**
|
|
77
|
+
* - CAWS configuration
|
|
78
|
+
*/
|
|
79
|
+
config: any;
|
|
80
|
+
/**
|
|
81
|
+
* - Current working specification
|
|
82
|
+
*/
|
|
83
|
+
workingSpec: any;
|
|
84
|
+
/**
|
|
85
|
+
* - Execution timeout in milliseconds
|
|
86
|
+
*/
|
|
87
|
+
timeout: number;
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* @fileoverview CAWS Tool Interface - Base classes and contracts for tool implementation
|
|
91
|
+
* Defines the standard interface that all CAWS tools must implement
|
|
92
|
+
* @author @darianrosebrook
|
|
93
|
+
*/
|
|
94
|
+
/**
|
|
95
|
+
* Standard tool execution result
|
|
96
|
+
* @typedef {Object} ToolExecutionResult
|
|
97
|
+
* @property {boolean} success - Whether execution succeeded
|
|
98
|
+
* @property {number} duration - Execution duration in milliseconds
|
|
99
|
+
* @property {Object} output - Tool-specific output data
|
|
100
|
+
* @property {Array<string>} errors - Error messages if execution failed
|
|
101
|
+
* @property {Object} metadata - Additional execution metadata
|
|
102
|
+
*/
|
|
103
|
+
/**
|
|
104
|
+
* Tool metadata structure
|
|
105
|
+
* @typedef {Object} ToolMetadata
|
|
106
|
+
* @property {string} id - Unique tool identifier
|
|
107
|
+
* @property {string} name - Human-readable tool name
|
|
108
|
+
* @property {string} version - Tool version (semver)
|
|
109
|
+
* @property {string} description - Tool description
|
|
110
|
+
* @property {Array<string>} capabilities - Tool capabilities (e.g., ['validation', 'security'])
|
|
111
|
+
* @property {string} author - Tool author
|
|
112
|
+
* @property {string} license - Tool license
|
|
113
|
+
* @property {Array<string>} dependencies - Required Node.js dependencies
|
|
114
|
+
*/
|
|
115
|
+
/**
|
|
116
|
+
* Tool execution context
|
|
117
|
+
* @typedef {Object} ToolExecutionContext
|
|
118
|
+
* @property {string} workingDirectory - Current working directory
|
|
119
|
+
* @property {Object} environment - Environment variables
|
|
120
|
+
* @property {Object} config - CAWS configuration
|
|
121
|
+
* @property {Object} workingSpec - Current working specification
|
|
122
|
+
* @property {number} timeout - Execution timeout in milliseconds
|
|
123
|
+
*/
|
|
124
|
+
/**
|
|
125
|
+
* Base Tool class - All CAWS tools should extend this class
|
|
126
|
+
*/
|
|
127
|
+
export class BaseTool {
|
|
128
|
+
metadata: ToolMetadata;
|
|
129
|
+
/**
|
|
130
|
+
* Execute the tool with given parameters
|
|
131
|
+
* @param {Object} parameters - Tool-specific execution parameters
|
|
132
|
+
* @param {ToolExecutionContext} context - Execution context
|
|
133
|
+
* @returns {Promise<ToolExecutionResult>} Execution result
|
|
134
|
+
*/
|
|
135
|
+
execute(parameters?: any, context?: ToolExecutionContext): Promise<ToolExecutionResult>;
|
|
136
|
+
/**
|
|
137
|
+
* Get tool metadata
|
|
138
|
+
* @returns {ToolMetadata} Tool metadata
|
|
139
|
+
*/
|
|
140
|
+
getMetadata(): ToolMetadata;
|
|
141
|
+
/**
|
|
142
|
+
* Validate tool parameters
|
|
143
|
+
* @param {Object} _parameters - Parameters to validate
|
|
144
|
+
* @throws {Error} If parameters are invalid
|
|
145
|
+
*/
|
|
146
|
+
validateParameters(_parameters: any): boolean;
|
|
147
|
+
/**
|
|
148
|
+
* Execute tool implementation (must be overridden by subclasses)
|
|
149
|
+
* @param {Object} _parameters - Tool parameters
|
|
150
|
+
* @param {ToolExecutionContext} _context - Execution context
|
|
151
|
+
* @returns {Promise<Object>} Tool-specific result
|
|
152
|
+
*/
|
|
153
|
+
executeImpl(_parameters: any, _context: ToolExecutionContext): Promise<any>;
|
|
154
|
+
/**
|
|
155
|
+
* Normalize execution result to standard format
|
|
156
|
+
* @private
|
|
157
|
+
* @param {Object} result - Raw tool result
|
|
158
|
+
* @param {number} duration - Execution duration
|
|
159
|
+
* @returns {ToolExecutionResult} Normalized result
|
|
160
|
+
*/
|
|
161
|
+
private normalizeResult;
|
|
162
|
+
/**
|
|
163
|
+
* Create error result
|
|
164
|
+
* @private
|
|
165
|
+
* @param {Error} error - Execution error
|
|
166
|
+
* @param {number} duration - Execution duration
|
|
167
|
+
* @returns {ToolExecutionResult} Error result
|
|
168
|
+
*/
|
|
169
|
+
private createErrorResult;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Validation Tool base class - For tools that perform validation checks
|
|
173
|
+
*/
|
|
174
|
+
export class ValidationTool extends BaseTool {
|
|
175
|
+
capabilities: string[];
|
|
176
|
+
/**
|
|
177
|
+
* Execute validation
|
|
178
|
+
* @param {Object} parameters - Validation parameters
|
|
179
|
+
* @param {ToolExecutionContext} context - Execution context
|
|
180
|
+
* @returns {Promise<ToolExecutionResult>} Validation result
|
|
181
|
+
*/
|
|
182
|
+
executeImpl(parameters: any, context: ToolExecutionContext): Promise<ToolExecutionResult>;
|
|
183
|
+
/**
|
|
184
|
+
* Perform validation (must be implemented by subclasses)
|
|
185
|
+
* @param {Object} parameters - Validation parameters
|
|
186
|
+
* @param {ToolExecutionContext} context - Execution context
|
|
187
|
+
* @returns {Promise<Object>} Validation result
|
|
188
|
+
*/
|
|
189
|
+
validate(_parameters: any, _context: any): Promise<any>;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Quality Gate Tool base class - For tools that enforce quality standards
|
|
193
|
+
*/
|
|
194
|
+
export class QualityGateTool extends ValidationTool {
|
|
195
|
+
/**
|
|
196
|
+
* Get quality gate thresholds for current tier
|
|
197
|
+
* @param {number} tier - Risk tier (1-3)
|
|
198
|
+
* @returns {Object} Threshold configuration
|
|
199
|
+
*/
|
|
200
|
+
getTierThresholds(tier: number): any;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Security Tool base class - For tools that perform security checks
|
|
204
|
+
*/
|
|
205
|
+
export class SecurityTool extends ValidationTool {
|
|
206
|
+
/**
|
|
207
|
+
* Check for security violations
|
|
208
|
+
* @param {Object} target - Target to check (file, code, etc.)
|
|
209
|
+
* @returns {Promise<Array<Object>>} Array of security violations
|
|
210
|
+
*/
|
|
211
|
+
checkSecurityViolations(target: any): Promise<Array<any>>;
|
|
212
|
+
}
|
|
213
|
+
export namespace ToolUtils {
|
|
214
|
+
/**
|
|
215
|
+
* Create standardized success result
|
|
216
|
+
* @param {Object} output - Tool output
|
|
217
|
+
* @param {Object} metadata - Additional metadata
|
|
218
|
+
* @returns {ToolExecutionResult} Success result
|
|
219
|
+
*/
|
|
220
|
+
function createSuccessResult(output?: any, metadata?: any): ToolExecutionResult;
|
|
221
|
+
/**
|
|
222
|
+
* Create standardized error result
|
|
223
|
+
* @param {string} message - Error message
|
|
224
|
+
* @param {string} errorType - Error type
|
|
225
|
+
* @returns {ToolExecutionResult} Error result
|
|
226
|
+
*/
|
|
227
|
+
function createErrorResult(message: string, errorType?: string): ToolExecutionResult;
|
|
228
|
+
/**
|
|
229
|
+
* Validate required parameters
|
|
230
|
+
* @param {Object} _params - Parameters object
|
|
231
|
+
* @param {Array<string>} _required - Required parameter names
|
|
232
|
+
* @throws {Error} If required parameters are missing
|
|
233
|
+
*/
|
|
234
|
+
function validateRequired(_params: any, _required: Array<string>): void;
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=tool-interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-interface.d.ts","sourceRoot":"","sources":["../src/tool-interface.js"],"names":[],"mappings":";;;;;;;;aAWc,OAAO;;;;cACP,MAAM;;;;;;;;YAEN,KAAK,CAAC,MAAM,CAAC;;;;;;;;;;;;;QAOb,MAAM;;;;UACN,MAAM;;;;aACN,MAAM;;;;iBACN,MAAM;;;;kBACN,KAAK,CAAC,MAAM,CAAC;;;;YACb,MAAM;;;;aACN,MAAM;;;;kBACN,KAAK,CAAC,MAAM,CAAC;;;;;;;;;sBAMb,MAAM;;;;;;;;;;;;;;;;aAIN,MAAM;;AApCpB;;;;GAIG;AAEH;;;;;;;;GAQG;AAEH;;;;;;;;;;;GAWG;AAEH;;;;;;;;GAQG;AAEH;;GAEG;AACH;IAEI,uBAAkC;IAGpC;;;;;OAKG;IACH,oCAHW,oBAAoB,GAClB,OAAO,CAAC,mBAAmB,CAAC,CAmBxC;IAED;;;OAGG;IACH,eAFa,YAAY,CAIxB;IAED;;;;OAIG;IACH,8CAGC;IAED;;;;;OAKG;IACH,wCAHW,oBAAoB,GAClB,OAAO,KAAQ,CAI3B;IAED;;;;;;OAMG;IACH,wBAQC;IAED;;;;;;OAMG;IACH,0BAWC;CACF;AAED;;GAEG;AACH;IAGI,uBAAkC;IAGpC;;;;;OAKG;IACH,sCAHW,oBAAoB,GAClB,OAAO,CAAC,mBAAmB,CAAC,CAcxC;IAED;;;;;OAKG;IACH,2CAFa,OAAO,KAAQ,CAI3B;CACF;AAED;;GAEG;AACH;IAME;;;;OAIG;IACH,wBAHW,MAAM,OA6BhB;CACF;AAED;;GAEG;AACH;IAME;;;;OAIG;IACH,sCAFa,OAAO,CAAC,KAAK,KAAQ,CAAC,CAmBlC;CACF;;IAMC;;;;;OAKG;IACH,4DAFa,mBAAmB,CAU/B;IAED;;;;;OAKG;IACH,oCAJW,MAAM,cACN,MAAM,GACJ,mBAAmB,CAU/B;IAED;;;;;OAKG;IACH,mDAHW,KAAK,CAAC,MAAM,CAAC,QAQvB"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
export = ToolLoader;
|
|
3
|
+
/**
|
|
4
|
+
* Tool Loader - Discovers, validates, and loads CAWS tools dynamically
|
|
5
|
+
* @extends EventEmitter
|
|
6
|
+
*/
|
|
7
|
+
declare class ToolLoader extends EventEmitter<[never]> {
|
|
8
|
+
constructor(options?: {});
|
|
9
|
+
options: {
|
|
10
|
+
toolsDir: any;
|
|
11
|
+
cacheEnabled: boolean;
|
|
12
|
+
timeout: any;
|
|
13
|
+
maxTools: any;
|
|
14
|
+
};
|
|
15
|
+
loadedTools: Map<any, any>;
|
|
16
|
+
discoveredTools: Set<any>;
|
|
17
|
+
loadingState: string;
|
|
18
|
+
/**
|
|
19
|
+
* Discover available tools in the tools directory
|
|
20
|
+
* @returns {Promise<Array<string>>} Array of tool file paths
|
|
21
|
+
*/
|
|
22
|
+
discoverTools(): Promise<Array<string>>;
|
|
23
|
+
/**
|
|
24
|
+
* Load a specific tool module
|
|
25
|
+
* @param {string} toolPath - Path to tool file
|
|
26
|
+
* @returns {Promise<Object>} Loaded tool module
|
|
27
|
+
*/
|
|
28
|
+
loadTool(toolPath: string): Promise<any>;
|
|
29
|
+
/**
|
|
30
|
+
* Load all discovered tools
|
|
31
|
+
* @returns {Promise<Map<string, Object>>} Map of loaded tools
|
|
32
|
+
*/
|
|
33
|
+
loadAllTools(): Promise<Map<string, any>>;
|
|
34
|
+
/**
|
|
35
|
+
* Get a loaded tool by ID
|
|
36
|
+
* @param {string} toolId - Tool identifier
|
|
37
|
+
* @returns {Object|null} Tool object or null if not found
|
|
38
|
+
*/
|
|
39
|
+
getTool(toolId: string): any | null;
|
|
40
|
+
/**
|
|
41
|
+
* Get all loaded tools
|
|
42
|
+
* @returns {Map<string, Object>} Map of loaded tools
|
|
43
|
+
*/
|
|
44
|
+
getAllTools(): Map<string, any>;
|
|
45
|
+
/**
|
|
46
|
+
* Unload a tool (remove from cache)
|
|
47
|
+
* @param {string} toolId - Tool identifier
|
|
48
|
+
* @returns {boolean} True if tool was unloaded
|
|
49
|
+
*/
|
|
50
|
+
unloadTool(toolId: string): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Validate tool file before loading
|
|
53
|
+
* @private
|
|
54
|
+
* @param {string} toolPath - Path to tool file
|
|
55
|
+
*/
|
|
56
|
+
private validateToolFile;
|
|
57
|
+
/**
|
|
58
|
+
* Load module with timeout protection
|
|
59
|
+
* @private
|
|
60
|
+
* @param {string} toolPath - Path to tool file
|
|
61
|
+
*/
|
|
62
|
+
private loadModuleWithTimeout;
|
|
63
|
+
/**
|
|
64
|
+
* Validate tool interface compliance
|
|
65
|
+
* @private
|
|
66
|
+
* @param {Object} toolModule - Loaded tool module
|
|
67
|
+
* @param {string} toolId - Tool identifier
|
|
68
|
+
*/
|
|
69
|
+
private validateToolInterface;
|
|
70
|
+
/**
|
|
71
|
+
* Get loader statistics
|
|
72
|
+
* @returns {Object} Statistics object
|
|
73
|
+
*/
|
|
74
|
+
getStats(): any;
|
|
75
|
+
}
|
|
76
|
+
import { EventEmitter } from "events";
|
|
77
|
+
//# sourceMappingURL=tool-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-loader.d.ts","sourceRoot":"","sources":["../src/tool-loader.js"],"names":[],"mappings":";;AAcA;;;GAGG;AACH;IACE,0BAkBC;IAXC;;;;;MAMC;IAED,2BAA4B;IAC5B,0BAAgC;IAChC,qBAA0B;IAG5B;;;OAGG;IACH,iBAFa,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAkDlC;IAED;;;;OAIG;IACH,mBAHW,MAAM,GACJ,OAAO,KAAQ,CAmC3B;IAED;;;OAGG;IACH,gBAFa,OAAO,CAAC,GAAG,CAAC,MAAM,MAAS,CAAC,CAuBxC;IAED;;;;OAIG;IACH,gBAHW,MAAM,GACJ,MAAO,IAAI,CAIvB;IAED;;;OAGG;IACH,eAFa,GAAG,CAAC,MAAM,MAAS,CAI/B;IAED;;;;OAIG;IACH,mBAHW,MAAM,GACJ,OAAO,CAQnB;IAED;;;;OAIG;IACH,yBAgCC;IAED;;;;OAIG;IACH,8BAkBC;IAED;;;;;OAKG;IACH,8BAyBC;IAED;;;OAGG;IACH,gBAQC;CACF"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
export = ToolValidator;
|
|
3
|
+
/**
|
|
4
|
+
* Tool Validator - Security validation and allowlist enforcement
|
|
5
|
+
*/
|
|
6
|
+
declare class ToolValidator {
|
|
7
|
+
constructor(options?: {});
|
|
8
|
+
options: {
|
|
9
|
+
allowlistPath: any;
|
|
10
|
+
strictMode: boolean;
|
|
11
|
+
maxFileSize: any;
|
|
12
|
+
};
|
|
13
|
+
allowlist: any;
|
|
14
|
+
validationCache: Map<any, any>;
|
|
15
|
+
/**
|
|
16
|
+
* Load and parse the tools allowlist
|
|
17
|
+
* @returns {Promise<Array<string>>} Array of allowed commands/patterns
|
|
18
|
+
*/
|
|
19
|
+
loadAllowlist(): Promise<Array<string>>;
|
|
20
|
+
/**
|
|
21
|
+
* Validate a tool against security requirements
|
|
22
|
+
* @param {Object} tool - Tool object with module and metadata
|
|
23
|
+
* @returns {Promise<Object>} Validation result
|
|
24
|
+
*/
|
|
25
|
+
validateTool(tool: any): Promise<any>;
|
|
26
|
+
/**
|
|
27
|
+
* Check file-level security
|
|
28
|
+
* @private
|
|
29
|
+
* @param {Object} tool - Tool object
|
|
30
|
+
*/
|
|
31
|
+
private checkFileSecurity;
|
|
32
|
+
/**
|
|
33
|
+
* Check code-level security
|
|
34
|
+
* @private
|
|
35
|
+
* @param {Object} tool - Tool object
|
|
36
|
+
*/
|
|
37
|
+
private checkCodeSecurity;
|
|
38
|
+
/**
|
|
39
|
+
* Check interface compliance
|
|
40
|
+
* @private
|
|
41
|
+
* @param {Object} tool - Tool object
|
|
42
|
+
*/
|
|
43
|
+
private checkInterfaceCompliance;
|
|
44
|
+
/**
|
|
45
|
+
* Check metadata validity
|
|
46
|
+
* @private
|
|
47
|
+
* @param {Object} tool - Tool object
|
|
48
|
+
*/
|
|
49
|
+
private checkMetadataValidity;
|
|
50
|
+
/**
|
|
51
|
+
* Check dependency safety
|
|
52
|
+
* @private
|
|
53
|
+
* @param {Object} tool - Tool object
|
|
54
|
+
*/
|
|
55
|
+
private checkDependencySafety;
|
|
56
|
+
/**
|
|
57
|
+
* Validate a command against the allowlist
|
|
58
|
+
* @param {string} command - Command to validate
|
|
59
|
+
* @returns {boolean} True if command is allowed
|
|
60
|
+
*/
|
|
61
|
+
validateCommand(command: string): boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Clear validation cache
|
|
64
|
+
*/
|
|
65
|
+
clearCache(): void;
|
|
66
|
+
/**
|
|
67
|
+
* Get validator statistics
|
|
68
|
+
* @returns {Object} Statistics object
|
|
69
|
+
*/
|
|
70
|
+
getStats(): any;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=tool-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-validator.d.ts","sourceRoot":"","sources":["../src/tool-validator.js"],"names":[],"mappings":";;AAYA;;GAEG;AACH;IACE,0BAiBC;IATC;;;;MAKC;IAED,eAAqB;IACrB,+BAAgC;IAGlC;;;OAGG;IACH,iBAFa,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAqBlC;IAED;;;;OAIG;IACH,yBAFa,OAAO,KAAQ,CAsF3B;IAED;;;;OAIG;IACH,0BAgCC;IAED;;;;OAIG;IACH,0BA8CC;IAED;;;;OAIG;IACH,iCAkBC;IAED;;;;OAIG;IACH,8BAqCC;IAED;;;;OAIG;IACH,8BA4BC;IAED;;;;OAIG;IACH,yBAHW,MAAM,GACJ,OAAO,CAmBnB;IAED;;OAEG;IACH,mBAEC;IAED;;;OAGG;IACH,gBAOC;CACF"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Async Operation Utilities
|
|
3
|
+
* Provides consistent patterns for async operations, parallel execution, and resource cleanup
|
|
4
|
+
* @author @darianrosebrook
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Execute multiple async operations in parallel
|
|
8
|
+
* @param {Array<Promise>} promises - Array of promises to execute
|
|
9
|
+
* @param {Object} options - Options
|
|
10
|
+
* @param {boolean} [options.failFast=true] - Stop on first error
|
|
11
|
+
* @returns {Promise<Array>} Array of results
|
|
12
|
+
*/
|
|
13
|
+
export function parallel(promises: Array<Promise<any>>, options?: {
|
|
14
|
+
failFast?: boolean;
|
|
15
|
+
}): Promise<any[]>;
|
|
16
|
+
/**
|
|
17
|
+
* Execute async operations sequentially
|
|
18
|
+
* @param {Array<Function>} operations - Array of async functions to execute
|
|
19
|
+
* @param {Object} options - Options
|
|
20
|
+
* @param {boolean} [options.stopOnError=true] - Stop on first error
|
|
21
|
+
* @returns {Promise<Array>} Array of results
|
|
22
|
+
*/
|
|
23
|
+
export function sequential(operations: Array<Function>, options?: {
|
|
24
|
+
stopOnError?: boolean;
|
|
25
|
+
}): Promise<any[]>;
|
|
26
|
+
/**
|
|
27
|
+
* Retry an async operation with exponential backoff
|
|
28
|
+
* @param {Function} operation - Async function to retry
|
|
29
|
+
* @param {Object} options - Retry options
|
|
30
|
+
* @param {number} [options.maxRetries=3] - Maximum number of retries
|
|
31
|
+
* @param {number} [options.initialDelay=1000] - Initial delay in ms
|
|
32
|
+
* @param {number} [options.maxDelay=10000] - Maximum delay in ms
|
|
33
|
+
* @param {Function} [options.shouldRetry] - Function to determine if error should be retried
|
|
34
|
+
* @returns {Promise<any>} Operation result
|
|
35
|
+
*/
|
|
36
|
+
export function retry(operation: Function, options?: {
|
|
37
|
+
maxRetries?: number;
|
|
38
|
+
initialDelay?: number;
|
|
39
|
+
maxDelay?: number;
|
|
40
|
+
shouldRetry?: Function;
|
|
41
|
+
}): Promise<any>;
|
|
42
|
+
/**
|
|
43
|
+
* Execute operation with timeout
|
|
44
|
+
* @param {Promise} promise - Promise to execute
|
|
45
|
+
* @param {number} timeoutMs - Timeout in milliseconds
|
|
46
|
+
* @param {string} [errorMessage] - Custom error message
|
|
47
|
+
* @returns {Promise<any>} Operation result
|
|
48
|
+
*/
|
|
49
|
+
export function withTimeout(promise: Promise<any>, timeoutMs: number, errorMessage?: string): Promise<any>;
|
|
50
|
+
/**
|
|
51
|
+
* Execute operation with resource cleanup
|
|
52
|
+
* @param {Function} operation - Async operation to execute
|
|
53
|
+
* @param {Function} cleanup - Cleanup function (called in finally)
|
|
54
|
+
* @returns {Promise<any>} Operation result
|
|
55
|
+
*/
|
|
56
|
+
export function withCleanup(operation: Function, cleanup: Function): Promise<any>;
|
|
57
|
+
/**
|
|
58
|
+
* Execute multiple operations and collect all errors
|
|
59
|
+
* @param {Array<Function>} operations - Array of async functions
|
|
60
|
+
* @returns {Promise<{successes: Array, errors: Array}>} Results and errors
|
|
61
|
+
*/
|
|
62
|
+
export function collectResults(operations: Array<Function>): Promise<{
|
|
63
|
+
successes: any[];
|
|
64
|
+
errors: any[];
|
|
65
|
+
}>;
|
|
66
|
+
/**
|
|
67
|
+
* Execute operation with cancellation support
|
|
68
|
+
* @param {Function} operation - Async operation to execute
|
|
69
|
+
* @param {AbortSignal} signal - Abort signal for cancellation
|
|
70
|
+
* @returns {Promise<any>} Operation result
|
|
71
|
+
*/
|
|
72
|
+
export function withCancellation(operation: Function, signal: AbortSignal): Promise<any>;
|
|
73
|
+
//# sourceMappingURL=async-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-utils.d.ts","sourceRoot":"","sources":["../../src/utils/async-utils.js"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;GAMG;AACH,mCALW,KAAK,cAAS,YAEtB;IAA0B,QAAQ,GAA1B,OAAO;CACf,GAAU,OAAO,OAAO,CAmB1B;AAED;;;;;;GAMG;AACH,uCALW,KAAK,UAAU,YAEvB;IAA0B,WAAW,GAA7B,OAAO;CACf,GAAU,OAAO,OAAO,CAmB1B;AAED;;;;;;;;;GASG;AACH,qDANG;IAAyB,UAAU,GAA3B,MAAM;IACW,YAAY,GAA7B,MAAM;IACW,QAAQ,GAAzB,MAAM;IACa,WAAW;CACtC,GAAU,OAAO,CAAC,GAAG,CAAC,CA+BxB;AAED;;;;;;GAMG;AACH,8DAJW,MAAM,iBACN,MAAM,GACJ,OAAO,CAAC,GAAG,CAAC,CAWxB;AAED;;;;;GAKG;AACH,qEAFa,OAAO,CAAC,GAAG,CAAC,CAQxB;AAED;;;;GAIG;AACH,2CAHW,KAAK,UAAU,GACb,OAAO,CAAC;IAAC,SAAS,QAAQ;IAAC,MAAM,QAAO;CAAC,CAAC,CAmBtD;AAED;;;;;GAKG;AACH,8DAHW,WAAW,GACT,OAAO,CAAC,GAAG,CAAC,CAgBxB"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified command wrapper that provides:
|
|
3
|
+
* - Consistent error handling
|
|
4
|
+
* - Standardized output formatting
|
|
5
|
+
* - Execution timing
|
|
6
|
+
* - JSON output support
|
|
7
|
+
*
|
|
8
|
+
* @param {Function} commandFn - Async command function to execute
|
|
9
|
+
* @param {Object} options - Command options
|
|
10
|
+
* @param {string} options.commandName - Name of the command (for error context)
|
|
11
|
+
* @param {boolean} [options.includeTiming=true] - Include execution timing
|
|
12
|
+
* @param {boolean} [options.exitOnError=true] - Exit process on error
|
|
13
|
+
* @param {Object} [options.context={}] - Additional context for error handling
|
|
14
|
+
* @returns {Promise<any>} Command result
|
|
15
|
+
*/
|
|
16
|
+
export function commandWrapper(commandFn: Function, options?: {
|
|
17
|
+
commandName: string;
|
|
18
|
+
includeTiming?: boolean;
|
|
19
|
+
exitOnError?: boolean;
|
|
20
|
+
context?: any;
|
|
21
|
+
}): Promise<any>;
|
|
22
|
+
export namespace Output {
|
|
23
|
+
/**
|
|
24
|
+
* Output success message
|
|
25
|
+
* @param {string} message - Success message
|
|
26
|
+
* @param {Object} [data] - Additional data to output
|
|
27
|
+
*/
|
|
28
|
+
function success(message: string, data?: any): void;
|
|
29
|
+
/**
|
|
30
|
+
* Output error message
|
|
31
|
+
* @param {string} message - Error message
|
|
32
|
+
* @param {string[]} [suggestions] - Recovery suggestions
|
|
33
|
+
*/
|
|
34
|
+
function error(message: string, suggestions?: string[]): void;
|
|
35
|
+
/**
|
|
36
|
+
* Output warning message
|
|
37
|
+
* @param {string} message - Warning message
|
|
38
|
+
* @param {string} [suggestion] - Optional suggestion
|
|
39
|
+
*/
|
|
40
|
+
function warning(message: string, suggestion?: string): void;
|
|
41
|
+
/**
|
|
42
|
+
* Output info message
|
|
43
|
+
* @param {string} message - Info message
|
|
44
|
+
* @param {Object} [data] - Additional data
|
|
45
|
+
*/
|
|
46
|
+
function info(message: string, data?: any): void;
|
|
47
|
+
/**
|
|
48
|
+
* Output data in JSON format
|
|
49
|
+
* @param {Object} data - Data to output
|
|
50
|
+
* @param {boolean} [success=true] - Whether operation was successful
|
|
51
|
+
*/
|
|
52
|
+
function json(data: any, success?: boolean): void;
|
|
53
|
+
/**
|
|
54
|
+
* Output progress message
|
|
55
|
+
* @param {string} message - Progress message
|
|
56
|
+
*/
|
|
57
|
+
function progress(message: string): void;
|
|
58
|
+
/**
|
|
59
|
+
* Output section header
|
|
60
|
+
* @param {string} title - Section title
|
|
61
|
+
*/
|
|
62
|
+
function section(title: string): void;
|
|
63
|
+
}
|
|
64
|
+
import { isJsonOutput } from "../error-handler";
|
|
65
|
+
export { isJsonOutput };
|
|
66
|
+
//# sourceMappingURL=command-wrapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-wrapper.d.ts","sourceRoot":"","sources":["../../src/utils/command-wrapper.js"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;GAcG;AACH,8DANG;IAAwB,WAAW,EAA3B,MAAM;IACY,aAAa,GAA/B,OAAO;IACW,WAAW,GAA7B,OAAO;IACU,OAAO;CAChC,GAAU,OAAO,CAAC,GAAG,CAAC,CAuCxB;;IAMC;;;;OAIG;IACH,0BAHW,MAAM,oBAmBhB;IAED;;;;OAIG;IACH,wBAHW,MAAM,gBACN,MAAM,EAAE,QAuBlB;IAED;;;;OAIG;IACH,0BAHW,MAAM,eACN,MAAM,QAkBhB;IAED;;;;OAIG;IACH,uBAHW,MAAM,oBAmBhB;IAED;;;;OAIG;IACH,mCAFW,OAAO,QAIjB;IAED;;;OAGG;IACH,2BAFW,MAAM,QAMhB;IAED;;;OAGG;IACH,wBAFW,MAAM,QAOhB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detect CAWS setup in a directory
|
|
3
|
+
* @param {string} cwd - Current working directory
|
|
4
|
+
* @returns {Object} Setup information
|
|
5
|
+
*/
|
|
6
|
+
export function detectCAWSSetup(cwd?: string): any;
|
|
7
|
+
/**
|
|
8
|
+
* Find the package root directory by looking for package.json
|
|
9
|
+
* Works in both development (src/) and production (dist/) scenarios
|
|
10
|
+
* @param {string} startDir - Directory to start searching from (defaults to __dirname)
|
|
11
|
+
* @returns {string} Package root directory path
|
|
12
|
+
*/
|
|
13
|
+
export function findPackageRoot(startDir?: string): string;
|
|
14
|
+
//# sourceMappingURL=detection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detection.d.ts","sourceRoot":"","sources":["../../src/utils/detection.js"],"names":[],"mappings":"AA6BA;;;;GAIG;AACH,sCAHW,MAAM,OAqKhB;AA1LD;;;;;GAKG;AACH,2CAHW,MAAM,GACJ,MAAM,CAalB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate provenance manifest and git initialization (for both modes)
|
|
3
|
+
* @param {string} projectName - Project name
|
|
4
|
+
* @param {Object} options - Command options
|
|
5
|
+
* @param {Object} answers - User answers
|
|
6
|
+
*/
|
|
7
|
+
export function finalizeProject(projectName: string, options: any, answers: any): Promise<void>;
|
|
8
|
+
/**
|
|
9
|
+
* Display success message after project initialization
|
|
10
|
+
*/
|
|
11
|
+
export function continueToSuccess(): void;
|
|
12
|
+
/**
|
|
13
|
+
* Set dependencies for finalization utilities
|
|
14
|
+
* @param {Object} deps - Dependencies object
|
|
15
|
+
*/
|
|
16
|
+
export function setFinalizationDependencies(deps: any): void;
|
|
17
|
+
//# sourceMappingURL=finalization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finalization.d.ts","sourceRoot":"","sources":["../../src/utils/finalization.js"],"names":[],"mappings":"AA6BA;;;;;GAKG;AACH,6CAJW,MAAM,6CAgKhB;AAED;;GAEG;AACH,0CA0BC;AA1MD;;;GAGG;AACH,6DAGC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check for git lock files
|
|
3
|
+
* @param {string} projectRoot - Project root directory
|
|
4
|
+
* @returns {Object} Lock status information
|
|
5
|
+
*/
|
|
6
|
+
export function checkGitLock(projectRoot: string): any;
|
|
7
|
+
/**
|
|
8
|
+
* Format git lock error message
|
|
9
|
+
* @param {Object} lockStatus - Lock status from checkGitLock
|
|
10
|
+
* @returns {string} Formatted error message
|
|
11
|
+
*/
|
|
12
|
+
export function formatGitLockError(lockStatus: any): string;
|
|
13
|
+
//# sourceMappingURL=git-lock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-lock.d.ts","sourceRoot":"","sources":["../../src/utils/git-lock.js"],"names":[],"mappings":"AASA;;;;GAIG;AACH,0CAHW,MAAM,OA+DhB;AAED;;;;GAIG;AACH,qDAFa,MAAM,CAgClB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Update .gitignore to include CAWS runtime file exclusions
|
|
3
|
+
* @param {string} projectRoot - Project root directory
|
|
4
|
+
* @param {Object} options - Options
|
|
5
|
+
* @param {boolean} options.force - Force update even if entries exist
|
|
6
|
+
* @returns {Promise<boolean>} Whether .gitignore was updated
|
|
7
|
+
*/
|
|
8
|
+
export function updateGitignore(projectRoot: string, options?: {
|
|
9
|
+
force: boolean;
|
|
10
|
+
}): Promise<boolean>;
|
|
11
|
+
/**
|
|
12
|
+
* Verify .gitignore has proper CAWS entries
|
|
13
|
+
* @param {string} projectRoot - Project root directory
|
|
14
|
+
* @returns {Promise<boolean>} Whether .gitignore has CAWS entries
|
|
15
|
+
*/
|
|
16
|
+
export function verifyGitignore(projectRoot: string): Promise<boolean>;
|
|
17
|
+
/**
|
|
18
|
+
* CAWS .gitignore entries
|
|
19
|
+
*
|
|
20
|
+
* Strategy: Track shared/collaborative files, ignore local-only runtime data
|
|
21
|
+
*
|
|
22
|
+
* TRACKED (shared with team):
|
|
23
|
+
* - .caws/working-spec.yaml (main spec)
|
|
24
|
+
* - .caws/specs/*.yaml (feature specs)
|
|
25
|
+
* - .caws/policy.yaml (team policy)
|
|
26
|
+
* - .caws/waivers/*.yaml (project-wide waivers)
|
|
27
|
+
* - .caws/provenance/ (audit trails for compliance)
|
|
28
|
+
* - .caws/changes/ (change tracking for team visibility)
|
|
29
|
+
* - .caws/archive/ (archived changes for history)
|
|
30
|
+
* - .caws/plans/*.md (implementation plans)
|
|
31
|
+
*
|
|
32
|
+
* IGNORED (local-only):
|
|
33
|
+
* - .agent/ (agent runtime tracking, local to each developer)
|
|
34
|
+
* - Temporary files (*.tmp, *.bak)
|
|
35
|
+
* - Logs (caws.log, debug logs)
|
|
36
|
+
* - Local overrides (caws.local.*)
|
|
37
|
+
*/
|
|
38
|
+
export const CAWS_GITIGNORE_ENTRIES: "\n# CAWS Local Runtime Data (developer-specific, should not be tracked)\n# ====================================================================\n# Note: Specs, policy, waivers, provenance, and plans ARE tracked for team collaboration\n# Only local agent tracking, generated tools, and temporary files are ignored\n\n# Agent runtime tracking (local to each developer)\n.agent/\n\n# CAWS tools (now in .caws/tools/)\n.caws/tools/\n# Legacy location (for backward compatibility)\napps/tools/caws/\n\n# Temporary CAWS files\n**/*.caws.tmp\n**/*.working-spec.bak\n.caws/*.tmp\n.caws/*.bak\n\n# CAWS logs (local debugging)\ncaws-debug.log*\n**/caws.log\n.caws/*.log\n\n# Local development overrides (developer-specific)\ncaws.local.*\n.caws/local.*\n";
|
|
39
|
+
//# sourceMappingURL=gitignore-updater.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitignore-updater.d.ts","sourceRoot":"","sources":["../../src/utils/gitignore-updater.js"],"names":[],"mappings":"AA6DA;;;;;;GAMG;AACH,6CALW,MAAM,YAEd;IAAyB,KAAK,EAAtB,OAAO;CACf,GAAU,OAAO,CAAC,OAAO,CAAC,CA2D5B;AAED;;;;GAIG;AACH,6CAHW,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAW5B;AAnID;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,gxBA4BE"}
|