erosolar-cli 2.0.4 → 2.1.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/agents/erosolar-security.rules.json +147 -0
- package/dist/capabilities/enhancedAnalysisCapability.d.ts +13 -0
- package/dist/capabilities/enhancedAnalysisCapability.d.ts.map +1 -0
- package/dist/capabilities/enhancedAnalysisCapability.js +20 -0
- package/dist/capabilities/enhancedAnalysisCapability.js.map +1 -0
- package/dist/capabilities/offsecOpsCapability.d.ts +6 -0
- package/dist/capabilities/offsecOpsCapability.d.ts.map +1 -0
- package/dist/capabilities/offsecOpsCapability.js +20 -0
- package/dist/capabilities/offsecOpsCapability.js.map +1 -0
- package/dist/capabilities/offsecSearchCapability.d.ts +12 -0
- package/dist/capabilities/offsecSearchCapability.d.ts.map +1 -0
- package/dist/capabilities/offsecSearchCapability.js +27 -0
- package/dist/capabilities/offsecSearchCapability.js.map +1 -0
- package/dist/capabilities/taoCapability.d.ts +6 -0
- package/dist/capabilities/taoCapability.d.ts.map +1 -0
- package/dist/capabilities/taoCapability.js +20 -0
- package/dist/capabilities/taoCapability.js.map +1 -0
- package/dist/capabilities/toolRegistry.d.ts +2 -1
- package/dist/capabilities/toolRegistry.d.ts.map +1 -1
- package/dist/capabilities/toolRegistry.js +6 -1
- package/dist/capabilities/toolRegistry.js.map +1 -1
- package/dist/contracts/agent-schemas.json +18 -19
- package/dist/contracts/tools.schema.json +38 -8
- package/dist/core/contextManager.d.ts +8 -2
- package/dist/core/contextManager.d.ts.map +1 -1
- package/dist/core/contextManager.js +15 -2
- package/dist/core/contextManager.js.map +1 -1
- package/dist/core/deepBugAnalyzer.d.ts +128 -0
- package/dist/core/deepBugAnalyzer.d.ts.map +1 -0
- package/dist/core/deepBugAnalyzer.js +406 -0
- package/dist/core/deepBugAnalyzer.js.map +1 -0
- package/dist/core/hypothesisEngine.d.ts +113 -0
- package/dist/core/hypothesisEngine.d.ts.map +1 -0
- package/dist/core/hypothesisEngine.js +264 -0
- package/dist/core/hypothesisEngine.js.map +1 -0
- package/dist/core/intelligentSummarizer.d.ts +79 -0
- package/dist/core/intelligentSummarizer.d.ts.map +1 -0
- package/dist/core/intelligentSummarizer.js +273 -0
- package/dist/core/intelligentSummarizer.js.map +1 -0
- package/dist/core/offsecAlphaZero.d.ts +3 -0
- package/dist/core/offsecAlphaZero.d.ts.map +1 -1
- package/dist/core/offsecAlphaZero.js +166 -5
- package/dist/core/offsecAlphaZero.js.map +1 -1
- package/dist/core/productTestHarness.d.ts +113 -0
- package/dist/core/productTestHarness.d.ts.map +1 -0
- package/dist/core/productTestHarness.js +345 -0
- package/dist/core/productTestHarness.js.map +1 -0
- package/dist/core/toolPatternAnalyzer.d.ts +87 -0
- package/dist/core/toolPatternAnalyzer.d.ts.map +1 -0
- package/dist/core/toolPatternAnalyzer.js +272 -0
- package/dist/core/toolPatternAnalyzer.js.map +1 -0
- package/dist/plugins/tools/enhancedAnalysis/enhancedAnalysisPlugin.d.ts +3 -0
- package/dist/plugins/tools/enhancedAnalysis/enhancedAnalysisPlugin.d.ts.map +1 -0
- package/dist/plugins/tools/enhancedAnalysis/enhancedAnalysisPlugin.js +14 -0
- package/dist/plugins/tools/enhancedAnalysis/enhancedAnalysisPlugin.js.map +1 -0
- package/dist/plugins/tools/enhancedCodeIntelligence/enhancedCodeIntelligencePlugin.d.ts +3 -0
- package/dist/plugins/tools/enhancedCodeIntelligence/enhancedCodeIntelligencePlugin.d.ts.map +1 -0
- package/dist/plugins/tools/enhancedCodeIntelligence/enhancedCodeIntelligencePlugin.js +12 -0
- package/dist/plugins/tools/enhancedCodeIntelligence/enhancedCodeIntelligencePlugin.js.map +1 -0
- package/dist/plugins/tools/enhancedDevWorkflow/enhancedDevWorkflowPlugin.d.ts +3 -0
- package/dist/plugins/tools/enhancedDevWorkflow/enhancedDevWorkflowPlugin.d.ts.map +1 -0
- package/dist/plugins/tools/enhancedDevWorkflow/enhancedDevWorkflowPlugin.js +12 -0
- package/dist/plugins/tools/enhancedDevWorkflow/enhancedDevWorkflowPlugin.js.map +1 -0
- package/dist/plugins/tools/nodeDefaults.d.ts.map +1 -1
- package/dist/plugins/tools/nodeDefaults.js +12 -0
- package/dist/plugins/tools/nodeDefaults.js.map +1 -1
- package/dist/plugins/tools/offsec/offsecOpsPlugin.d.ts +3 -0
- package/dist/plugins/tools/offsec/offsecOpsPlugin.d.ts.map +1 -0
- package/dist/plugins/tools/offsec/offsecOpsPlugin.js +10 -0
- package/dist/plugins/tools/offsec/offsecOpsPlugin.js.map +1 -0
- package/dist/plugins/tools/offsec/offsecSearchPlugin.d.ts +3 -0
- package/dist/plugins/tools/offsec/offsecSearchPlugin.d.ts.map +1 -0
- package/dist/plugins/tools/offsec/offsecSearchPlugin.js +12 -0
- package/dist/plugins/tools/offsec/offsecSearchPlugin.js.map +1 -0
- package/dist/plugins/tools/tao/taoPlugin.d.ts +3 -0
- package/dist/plugins/tools/tao/taoPlugin.d.ts.map +1 -0
- package/dist/plugins/tools/tao/taoPlugin.js +10 -0
- package/dist/plugins/tools/tao/taoPlugin.js.map +1 -0
- package/dist/shell/interactiveShell.d.ts +7 -0
- package/dist/shell/interactiveShell.d.ts.map +1 -1
- package/dist/shell/interactiveShell.js +70 -22
- package/dist/shell/interactiveShell.js.map +1 -1
- package/dist/shell/shellApp.js +1 -1
- package/dist/shell/shellApp.js.map +1 -1
- package/dist/shell/systemPrompt.d.ts.map +1 -1
- package/dist/shell/systemPrompt.js +3 -0
- package/dist/shell/systemPrompt.js.map +1 -1
- package/dist/tools/enhancedAnalysisTools.d.ts +9 -0
- package/dist/tools/enhancedAnalysisTools.d.ts.map +1 -0
- package/dist/tools/enhancedAnalysisTools.js +382 -0
- package/dist/tools/enhancedAnalysisTools.js.map +1 -0
- package/dist/tools/enhancedCodeIntelligenceTools.d.ts +1 -21
- package/dist/tools/enhancedCodeIntelligenceTools.d.ts.map +1 -1
- package/dist/tools/enhancedCodeIntelligenceTools.js +378 -256
- package/dist/tools/enhancedCodeIntelligenceTools.js.map +1 -1
- package/dist/tools/enhancedDevWorkflowTools.d.ts +2 -10
- package/dist/tools/enhancedDevWorkflowTools.d.ts.map +1 -1
- package/dist/tools/enhancedDevWorkflowTools.js +293 -165
- package/dist/tools/enhancedDevWorkflowTools.js.map +1 -1
- package/dist/tools/interactionTools.d.ts.map +1 -1
- package/dist/tools/interactionTools.js +55 -0
- package/dist/tools/interactionTools.js.map +1 -1
- package/dist/tools/offsec/offsecOperationsTools.d.ts +3 -0
- package/dist/tools/offsec/offsecOperationsTools.d.ts.map +1 -0
- package/dist/tools/offsec/offsecOperationsTools.js +333 -0
- package/dist/tools/offsec/offsecOperationsTools.js.map +1 -0
- package/dist/tools/offsecSearchTools.d.ts +3 -0
- package/dist/tools/offsecSearchTools.d.ts.map +1 -0
- package/dist/tools/offsecSearchTools.js +330 -0
- package/dist/tools/offsecSearchTools.js.map +1 -0
- package/dist/tools/taoOperations.d.ts +7 -0
- package/dist/tools/taoOperations.d.ts.map +1 -0
- package/dist/tools/taoOperations.js +744 -0
- package/dist/tools/taoOperations.js.map +1 -0
- package/dist/ui/PromptController.d.ts +5 -1
- package/dist/ui/PromptController.d.ts.map +1 -1
- package/dist/ui/PromptController.js +6 -0
- package/dist/ui/PromptController.js.map +1 -1
- package/dist/ui/ShellUIAdapter.d.ts +10 -6
- package/dist/ui/ShellUIAdapter.d.ts.map +1 -1
- package/dist/ui/ShellUIAdapter.js +68 -66
- package/dist/ui/ShellUIAdapter.js.map +1 -1
- package/dist/ui/UnifiedUIRenderer.d.ts +2 -0
- package/dist/ui/UnifiedUIRenderer.d.ts.map +1 -1
- package/dist/ui/UnifiedUIRenderer.js +22 -0
- package/dist/ui/UnifiedUIRenderer.js.map +1 -1
- package/dist/ui/globalWriteLock.d.ts.map +1 -1
- package/dist/ui/globalWriteLock.js +6 -0
- package/dist/ui/globalWriteLock.js.map +1 -1
- package/dist/ui/streamingFormatter.d.ts +11 -0
- package/dist/ui/streamingFormatter.d.ts.map +1 -1
- package/dist/ui/streamingFormatter.js +27 -1
- package/dist/ui/streamingFormatter.js.map +1 -1
- package/package.json +4 -13
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Comprehensive Product Test Harness
|
|
3
|
+
*
|
|
4
|
+
* This module provides extensive testing capabilities similar to human product testing,
|
|
5
|
+
* including runtime creation, execution, and validation of code.
|
|
6
|
+
*/
|
|
7
|
+
import { spawn } from 'node:child_process';
|
|
8
|
+
import { writeFileSync, readFileSync, mkdirSync, existsSync, rmSync } from 'node:fs';
|
|
9
|
+
import { join } from 'node:path';
|
|
10
|
+
import { tmpdir } from 'node:os';
|
|
11
|
+
/**
|
|
12
|
+
* Product Test Harness - Comprehensive testing like a human QA engineer
|
|
13
|
+
*/
|
|
14
|
+
export class ProductTestHarness {
|
|
15
|
+
scenarios = [];
|
|
16
|
+
results = [];
|
|
17
|
+
/**
|
|
18
|
+
* Add a test scenario
|
|
19
|
+
*/
|
|
20
|
+
addScenario(scenario) {
|
|
21
|
+
this.scenarios.push(scenario);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Add multiple scenarios
|
|
25
|
+
*/
|
|
26
|
+
addScenarios(scenarios) {
|
|
27
|
+
this.scenarios.push(...scenarios);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Run all test scenarios
|
|
31
|
+
*/
|
|
32
|
+
async runAll() {
|
|
33
|
+
this.results = [];
|
|
34
|
+
for (const scenario of this.scenarios) {
|
|
35
|
+
const result = await this.runScenario(scenario);
|
|
36
|
+
this.results.push(result);
|
|
37
|
+
}
|
|
38
|
+
const passed = this.results.filter(r => r.passed).length;
|
|
39
|
+
const failed = this.results.length - passed;
|
|
40
|
+
return {
|
|
41
|
+
passed,
|
|
42
|
+
failed,
|
|
43
|
+
total: this.results.length,
|
|
44
|
+
results: this.results,
|
|
45
|
+
summary: this.generateSummary(),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Run a single test scenario
|
|
50
|
+
*/
|
|
51
|
+
async runScenario(scenario) {
|
|
52
|
+
const startTime = Date.now();
|
|
53
|
+
let result;
|
|
54
|
+
try {
|
|
55
|
+
// Setup
|
|
56
|
+
if (scenario.setup) {
|
|
57
|
+
await scenario.setup();
|
|
58
|
+
}
|
|
59
|
+
// Execute with timeout
|
|
60
|
+
const timeout = scenario.timeout ?? 30000; // 30s default
|
|
61
|
+
const executePromise = scenario.execute();
|
|
62
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
63
|
+
setTimeout(() => reject(new Error('Test timeout exceeded')), timeout);
|
|
64
|
+
});
|
|
65
|
+
result = await Promise.race([executePromise, timeoutPromise]);
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
result = {
|
|
69
|
+
scenario: scenario.name,
|
|
70
|
+
passed: false,
|
|
71
|
+
duration: Date.now() - startTime,
|
|
72
|
+
output: '',
|
|
73
|
+
error: error instanceof Error ? error.message : String(error),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
finally {
|
|
77
|
+
// Teardown
|
|
78
|
+
if (scenario.teardown) {
|
|
79
|
+
try {
|
|
80
|
+
await scenario.teardown();
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
// Log teardown errors but don't fail the test
|
|
84
|
+
console.error(`Teardown error for ${scenario.name}:`, error);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return result;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Generate test summary
|
|
92
|
+
*/
|
|
93
|
+
generateSummary() {
|
|
94
|
+
const passed = this.results.filter(r => r.passed).length;
|
|
95
|
+
const failed = this.results.length - passed;
|
|
96
|
+
const totalDuration = this.results.reduce((sum, r) => sum + r.duration, 0);
|
|
97
|
+
let summary = `\n${'='.repeat(60)}\n`;
|
|
98
|
+
summary += `TEST SUMMARY\n`;
|
|
99
|
+
summary += `${'='.repeat(60)}\n`;
|
|
100
|
+
summary += `Total Tests: ${this.results.length}\n`;
|
|
101
|
+
summary += `Passed: ${passed} ✓\n`;
|
|
102
|
+
summary += `Failed: ${failed} ✗\n`;
|
|
103
|
+
summary += `Success Rate: ${((passed / this.results.length) * 100).toFixed(1)}%\n`;
|
|
104
|
+
summary += `Total Duration: ${totalDuration}ms\n`;
|
|
105
|
+
summary += `${'='.repeat(60)}\n`;
|
|
106
|
+
if (failed > 0) {
|
|
107
|
+
summary += `\nFailed Tests:\n`;
|
|
108
|
+
this.results.filter(r => !r.passed).forEach(r => {
|
|
109
|
+
summary += ` ✗ ${r.scenario}\n`;
|
|
110
|
+
if (r.error) {
|
|
111
|
+
summary += ` Error: ${r.error}\n`;
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
return summary;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Clear all scenarios and results
|
|
119
|
+
*/
|
|
120
|
+
clear() {
|
|
121
|
+
this.scenarios = [];
|
|
122
|
+
this.results = [];
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Create an isolated runtime environment for testing
|
|
127
|
+
*/
|
|
128
|
+
export function createRuntimeEnvironment(id) {
|
|
129
|
+
const envId = id ?? `test_${Date.now()}_${Math.random().toString(36).substring(7)}`;
|
|
130
|
+
const workDir = join(tmpdir(), 'erosolar-test-env', envId);
|
|
131
|
+
// Create work directory
|
|
132
|
+
if (!existsSync(workDir)) {
|
|
133
|
+
mkdirSync(workDir, { recursive: true });
|
|
134
|
+
}
|
|
135
|
+
const env = {
|
|
136
|
+
workDir,
|
|
137
|
+
cleanup: () => {
|
|
138
|
+
try {
|
|
139
|
+
if (existsSync(workDir)) {
|
|
140
|
+
rmSync(workDir, { recursive: true, force: true });
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
console.error(`Failed to cleanup runtime environment ${envId}:`, error);
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
execute: async (code, language) => {
|
|
148
|
+
const startTime = Date.now();
|
|
149
|
+
// Prepare execution based on language
|
|
150
|
+
let command;
|
|
151
|
+
let args;
|
|
152
|
+
let scriptPath;
|
|
153
|
+
if (language === 'typescript') {
|
|
154
|
+
// For TypeScript, write to file and use ts-node
|
|
155
|
+
scriptPath = join(workDir, 'script.ts');
|
|
156
|
+
writeFileSync(scriptPath, code);
|
|
157
|
+
command = 'npx';
|
|
158
|
+
args = ['ts-node', scriptPath];
|
|
159
|
+
}
|
|
160
|
+
else if (language === 'node') {
|
|
161
|
+
scriptPath = join(workDir, 'script.js');
|
|
162
|
+
writeFileSync(scriptPath, code);
|
|
163
|
+
command = 'node';
|
|
164
|
+
args = [scriptPath];
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
// bash
|
|
168
|
+
scriptPath = join(workDir, 'script.sh');
|
|
169
|
+
writeFileSync(scriptPath, code);
|
|
170
|
+
command = 'bash';
|
|
171
|
+
args = [scriptPath];
|
|
172
|
+
}
|
|
173
|
+
return new Promise((resolve) => {
|
|
174
|
+
let stdout = '';
|
|
175
|
+
let stderr = '';
|
|
176
|
+
const proc = spawn(command, args, {
|
|
177
|
+
cwd: workDir,
|
|
178
|
+
env: { ...process.env },
|
|
179
|
+
});
|
|
180
|
+
proc.stdout?.on('data', (data) => {
|
|
181
|
+
stdout += data.toString();
|
|
182
|
+
});
|
|
183
|
+
proc.stderr?.on('data', (data) => {
|
|
184
|
+
stderr += data.toString();
|
|
185
|
+
});
|
|
186
|
+
proc.on('error', (error) => {
|
|
187
|
+
resolve({
|
|
188
|
+
stdout,
|
|
189
|
+
stderr,
|
|
190
|
+
exitCode: 1,
|
|
191
|
+
duration: Date.now() - startTime,
|
|
192
|
+
error,
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
proc.on('close', (exitCode) => {
|
|
196
|
+
resolve({
|
|
197
|
+
stdout,
|
|
198
|
+
stderr,
|
|
199
|
+
exitCode: exitCode ?? 0,
|
|
200
|
+
duration: Date.now() - startTime,
|
|
201
|
+
});
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
},
|
|
205
|
+
writeFile: (path, content) => {
|
|
206
|
+
const fullPath = join(workDir, path);
|
|
207
|
+
const dir = join(fullPath, '..');
|
|
208
|
+
if (!existsSync(dir)) {
|
|
209
|
+
mkdirSync(dir, { recursive: true });
|
|
210
|
+
}
|
|
211
|
+
writeFileSync(fullPath, content);
|
|
212
|
+
},
|
|
213
|
+
readFile: (path) => {
|
|
214
|
+
const fullPath = join(workDir, path);
|
|
215
|
+
return readFileSync(fullPath, 'utf-8');
|
|
216
|
+
},
|
|
217
|
+
fileExists: (path) => {
|
|
218
|
+
const fullPath = join(workDir, path);
|
|
219
|
+
return existsSync(fullPath);
|
|
220
|
+
},
|
|
221
|
+
};
|
|
222
|
+
return env;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Common test scenarios generator
|
|
226
|
+
*/
|
|
227
|
+
export class TestScenarioGenerator {
|
|
228
|
+
/**
|
|
229
|
+
* Generate basic functionality tests
|
|
230
|
+
*/
|
|
231
|
+
static generateBasicTests(functionName, testCases) {
|
|
232
|
+
return testCases.map((testCase, index) => ({
|
|
233
|
+
name: `${functionName}_test_${index + 1}`,
|
|
234
|
+
description: testCase.description,
|
|
235
|
+
execute: async () => {
|
|
236
|
+
const passed = testCase.input === testCase.expected;
|
|
237
|
+
return {
|
|
238
|
+
scenario: testCase.description,
|
|
239
|
+
passed,
|
|
240
|
+
duration: 0,
|
|
241
|
+
output: `Expected: ${testCase.expected}, Got: ${testCase.input}`,
|
|
242
|
+
metrics: {
|
|
243
|
+
assertions: [{
|
|
244
|
+
name: 'equality_check',
|
|
245
|
+
passed,
|
|
246
|
+
expected: testCase.expected,
|
|
247
|
+
actual: testCase.input,
|
|
248
|
+
}],
|
|
249
|
+
},
|
|
250
|
+
};
|
|
251
|
+
},
|
|
252
|
+
}));
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Generate edge case tests
|
|
256
|
+
*/
|
|
257
|
+
static generateEdgeCaseTests(functionCode) {
|
|
258
|
+
const scenarios = [];
|
|
259
|
+
// Test with null/undefined
|
|
260
|
+
scenarios.push({
|
|
261
|
+
name: 'null_input_test',
|
|
262
|
+
description: 'Test function behavior with null input',
|
|
263
|
+
execute: async () => {
|
|
264
|
+
const env = createRuntimeEnvironment();
|
|
265
|
+
try {
|
|
266
|
+
const testCode = `
|
|
267
|
+
${functionCode}
|
|
268
|
+
const result = testFunction(null);
|
|
269
|
+
console.log(JSON.stringify(result));
|
|
270
|
+
`;
|
|
271
|
+
const result = await env.execute(testCode, 'node');
|
|
272
|
+
return {
|
|
273
|
+
scenario: 'null_input_test',
|
|
274
|
+
passed: result.exitCode === 0,
|
|
275
|
+
duration: result.duration,
|
|
276
|
+
output: result.stdout,
|
|
277
|
+
error: result.stderr,
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
finally {
|
|
281
|
+
env.cleanup();
|
|
282
|
+
}
|
|
283
|
+
},
|
|
284
|
+
});
|
|
285
|
+
// Test with empty values
|
|
286
|
+
scenarios.push({
|
|
287
|
+
name: 'empty_input_test',
|
|
288
|
+
description: 'Test function behavior with empty input',
|
|
289
|
+
execute: async () => {
|
|
290
|
+
const env = createRuntimeEnvironment();
|
|
291
|
+
try {
|
|
292
|
+
const testCode = `
|
|
293
|
+
${functionCode}
|
|
294
|
+
const result = testFunction('');
|
|
295
|
+
console.log(JSON.stringify(result));
|
|
296
|
+
`;
|
|
297
|
+
const result = await env.execute(testCode, 'node');
|
|
298
|
+
return {
|
|
299
|
+
scenario: 'empty_input_test',
|
|
300
|
+
passed: result.exitCode === 0,
|
|
301
|
+
duration: result.duration,
|
|
302
|
+
output: result.stdout,
|
|
303
|
+
error: result.stderr,
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
finally {
|
|
307
|
+
env.cleanup();
|
|
308
|
+
}
|
|
309
|
+
},
|
|
310
|
+
});
|
|
311
|
+
return scenarios;
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Generate performance tests
|
|
315
|
+
*/
|
|
316
|
+
static generatePerformanceTest(name, code, maxDurationMs) {
|
|
317
|
+
return {
|
|
318
|
+
name: `${name}_performance`,
|
|
319
|
+
description: `Performance test: should complete within ${maxDurationMs}ms`,
|
|
320
|
+
execute: async () => {
|
|
321
|
+
const env = createRuntimeEnvironment();
|
|
322
|
+
try {
|
|
323
|
+
const result = await env.execute(code, 'node');
|
|
324
|
+
const passed = result.duration < maxDurationMs && result.exitCode === 0;
|
|
325
|
+
return {
|
|
326
|
+
scenario: `${name}_performance`,
|
|
327
|
+
passed,
|
|
328
|
+
duration: result.duration,
|
|
329
|
+
output: result.stdout,
|
|
330
|
+
error: passed ? undefined : `Exceeded ${maxDurationMs}ms (took ${result.duration}ms)`,
|
|
331
|
+
metrics: {
|
|
332
|
+
cpuTime: result.duration,
|
|
333
|
+
exitCode: result.exitCode,
|
|
334
|
+
},
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
finally {
|
|
338
|
+
env.cleanup();
|
|
339
|
+
}
|
|
340
|
+
},
|
|
341
|
+
timeout: maxDurationMs * 2,
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
//# sourceMappingURL=productTestHarness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"productTestHarness.js","sourceRoot":"","sources":["../../src/core/productTestHarness.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Execution Pattern Analyzer
|
|
3
|
+
*
|
|
4
|
+
* Analyzes tool usage patterns to help the AI learn optimal workflows.
|
|
5
|
+
* Critical for Claude Code to operate efficiently without wasting context
|
|
6
|
+
* on redundant operations.
|
|
7
|
+
*/
|
|
8
|
+
export interface ToolCall {
|
|
9
|
+
name: string;
|
|
10
|
+
args: Record<string, unknown>;
|
|
11
|
+
timestamp: number;
|
|
12
|
+
duration?: number;
|
|
13
|
+
success: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface Pattern {
|
|
16
|
+
id: string;
|
|
17
|
+
description: string;
|
|
18
|
+
sequence: string[];
|
|
19
|
+
frequency: number;
|
|
20
|
+
avgDuration: number;
|
|
21
|
+
successRate: number;
|
|
22
|
+
examples: ToolCall[][];
|
|
23
|
+
}
|
|
24
|
+
export interface Inefficiency {
|
|
25
|
+
type: 'redundant' | 'inefficient_order' | 'missing_step' | 'wrong_tool';
|
|
26
|
+
description: string;
|
|
27
|
+
suggestion: string;
|
|
28
|
+
severity: 'low' | 'medium' | 'high';
|
|
29
|
+
affectedCalls: string[];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Analyzes tool execution patterns and suggests optimizations
|
|
33
|
+
*/
|
|
34
|
+
export declare class ToolPatternAnalyzer {
|
|
35
|
+
private callHistory;
|
|
36
|
+
private readonly maxHistory;
|
|
37
|
+
private detectedPatterns;
|
|
38
|
+
/**
|
|
39
|
+
* Record a tool call
|
|
40
|
+
*/
|
|
41
|
+
recordCall(call: ToolCall): void;
|
|
42
|
+
/**
|
|
43
|
+
* Get recent tool calls
|
|
44
|
+
*/
|
|
45
|
+
getRecentCalls(count?: number): ToolCall[];
|
|
46
|
+
/**
|
|
47
|
+
* Detect inefficiencies in recent tool usage
|
|
48
|
+
*/
|
|
49
|
+
detectInefficiencies(lookback?: number): Inefficiency[];
|
|
50
|
+
/**
|
|
51
|
+
* Detect redundant file reads
|
|
52
|
+
*/
|
|
53
|
+
private detectRedundantReads;
|
|
54
|
+
/**
|
|
55
|
+
* Detect missing validation after edits
|
|
56
|
+
*/
|
|
57
|
+
private detectMissingValidation;
|
|
58
|
+
/**
|
|
59
|
+
* Detect inefficient search patterns
|
|
60
|
+
*/
|
|
61
|
+
private detectInefficientSearches;
|
|
62
|
+
/**
|
|
63
|
+
* Detect wrong tool choices
|
|
64
|
+
*/
|
|
65
|
+
private detectWrongToolChoices;
|
|
66
|
+
/**
|
|
67
|
+
* Update detected patterns from call history
|
|
68
|
+
*/
|
|
69
|
+
private updatePatterns;
|
|
70
|
+
/**
|
|
71
|
+
* Get detected patterns sorted by frequency
|
|
72
|
+
*/
|
|
73
|
+
getPatterns(): Pattern[];
|
|
74
|
+
/**
|
|
75
|
+
* Generate workflow suggestions based on patterns
|
|
76
|
+
*/
|
|
77
|
+
generateSuggestions(): string[];
|
|
78
|
+
/**
|
|
79
|
+
* Clear all history and patterns
|
|
80
|
+
*/
|
|
81
|
+
clear(): void;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Global singleton instance
|
|
85
|
+
*/
|
|
86
|
+
export declare const toolPatternAnalyzer: ToolPatternAnalyzer;
|
|
87
|
+
//# sourceMappingURL=toolPatternAnalyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolPatternAnalyzer.d.ts","sourceRoot":"","sources":["../../src/core/toolPatternAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,WAAW,GAAG,mBAAmB,GAAG,cAAc,GAAG,YAAY,CAAC;IACxE,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACpC,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAO;IAClC,OAAO,CAAC,gBAAgB,CAAmC;IAE3D;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAYhC;;OAEG;IACH,cAAc,CAAC,KAAK,GAAE,MAAW,GAAG,QAAQ,EAAE;IAI9C;;OAEG;IACH,oBAAoB,CAAC,QAAQ,GAAE,MAAW,GAAG,YAAY,EAAE;IAmB3D;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA6B5B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA6C/B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAwCjC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA2C9B;;OAEG;IACH,OAAO,CAAC,cAAc;IA4BtB;;OAEG;IACH,WAAW,IAAI,OAAO,EAAE;IAKxB;;OAEG;IACH,mBAAmB,IAAI,MAAM,EAAE;IAuB/B;;OAEG;IACH,KAAK,IAAI,IAAI;CAId;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,qBAA4B,CAAC"}
|