erosolar-cli 2.1.172 → 2.1.173
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 +1 -1
- package/agents/erosolar-code.rules.json +2 -2
- package/agents/general.rules.json +21 -3
- package/dist/capabilities/askUserCapability.js +1 -1
- package/dist/capabilities/askUserCapability.js.map +1 -1
- package/dist/capabilities/statusCapability.js +2 -2
- package/dist/capabilities/statusCapability.js.map +1 -1
- package/dist/codex/capabilities/codexCoreCapability.d.ts +6 -0
- package/dist/codex/capabilities/codexCoreCapability.d.ts.map +1 -0
- package/dist/codex/capabilities/codexCoreCapability.js +516 -0
- package/dist/codex/capabilities/codexCoreCapability.js.map +1 -0
- package/dist/codex/fs.d.ts +4 -0
- package/dist/codex/fs.d.ts.map +1 -0
- package/dist/codex/fs.js +25 -0
- package/dist/codex/fs.js.map +1 -0
- package/dist/codex/persistence/planStore.d.ts +4 -0
- package/dist/codex/persistence/planStore.d.ts.map +1 -0
- package/dist/codex/persistence/planStore.js +59 -0
- package/dist/codex/persistence/planStore.js.map +1 -0
- package/dist/codex/pluginAllowlist.d.ts +4 -0
- package/dist/codex/pluginAllowlist.d.ts.map +1 -0
- package/dist/codex/pluginAllowlist.js +14 -0
- package/dist/codex/pluginAllowlist.js.map +1 -0
- package/dist/codex/types.d.ts +21 -0
- package/dist/codex/types.d.ts.map +1 -0
- package/dist/codex/types.js +62 -0
- package/dist/codex/types.js.map +1 -0
- package/dist/contracts/agent-schemas.json +5 -5
- package/dist/core/agent.d.ts +83 -24
- package/dist/core/agent.d.ts.map +1 -1
- package/dist/core/agent.js +499 -248
- package/dist/core/agent.js.map +1 -1
- package/dist/core/preferences.d.ts +1 -0
- package/dist/core/preferences.d.ts.map +1 -1
- package/dist/core/preferences.js +8 -1
- package/dist/core/preferences.js.map +1 -1
- package/dist/core/reliabilityPrompt.d.ts +9 -0
- package/dist/core/reliabilityPrompt.d.ts.map +1 -0
- package/dist/core/reliabilityPrompt.js +31 -0
- package/dist/core/reliabilityPrompt.js.map +1 -0
- package/dist/core/schemaValidator.js +3 -3
- package/dist/core/schemaValidator.js.map +1 -1
- package/dist/core/toolPreconditions.d.ts +0 -11
- package/dist/core/toolPreconditions.d.ts.map +1 -1
- package/dist/core/toolPreconditions.js +33 -164
- package/dist/core/toolPreconditions.js.map +1 -1
- package/dist/core/toolRuntime.d.ts.map +1 -1
- package/dist/core/toolRuntime.js +9 -114
- package/dist/core/toolRuntime.js.map +1 -1
- package/dist/core/updateChecker.d.ts +61 -1
- package/dist/core/updateChecker.d.ts.map +1 -1
- package/dist/core/updateChecker.js +147 -3
- package/dist/core/updateChecker.js.map +1 -1
- package/dist/headless/evalMode.d.ts.map +1 -1
- package/dist/headless/evalMode.js +6 -0
- package/dist/headless/evalMode.js.map +1 -1
- package/dist/headless/headlessApp.d.ts.map +1 -1
- package/dist/headless/headlessApp.js +6 -39
- package/dist/headless/headlessApp.js.map +1 -1
- package/dist/mcp/sseClient.d.ts +4 -1
- package/dist/mcp/sseClient.d.ts.map +1 -1
- package/dist/mcp/sseClient.js +36 -2
- package/dist/mcp/sseClient.js.map +1 -1
- package/dist/mcp/stdioClient.d.ts +4 -1
- package/dist/mcp/stdioClient.d.ts.map +1 -1
- package/dist/mcp/stdioClient.js +41 -1
- package/dist/mcp/stdioClient.js.map +1 -1
- package/dist/mcp/toolBridge.d.ts +3 -0
- package/dist/mcp/toolBridge.d.ts.map +1 -1
- package/dist/mcp/toolBridge.js +2 -2
- package/dist/mcp/toolBridge.js.map +1 -1
- package/dist/mcp/types.d.ts +18 -0
- package/dist/mcp/types.d.ts.map +1 -1
- package/dist/plugins/tools/nodeDefaults.d.ts.map +1 -1
- package/dist/plugins/tools/nodeDefaults.js +0 -2
- package/dist/plugins/tools/nodeDefaults.js.map +1 -1
- package/dist/providers/openaiResponsesProvider.d.ts.map +1 -1
- package/dist/providers/openaiResponsesProvider.js +79 -74
- package/dist/providers/openaiResponsesProvider.js.map +1 -1
- package/dist/runtime/agentController.d.ts.map +1 -1
- package/dist/runtime/agentController.js +6 -3
- package/dist/runtime/agentController.js.map +1 -1
- package/dist/runtime/agentSession.d.ts +0 -2
- package/dist/runtime/agentSession.d.ts.map +1 -1
- package/dist/runtime/agentSession.js +2 -2
- package/dist/runtime/agentSession.js.map +1 -1
- package/dist/shell/interactiveShell.d.ts +25 -18
- package/dist/shell/interactiveShell.d.ts.map +1 -1
- package/dist/shell/interactiveShell.js +345 -291
- package/dist/shell/interactiveShell.js.map +1 -1
- package/dist/shell/shellApp.d.ts.map +1 -1
- package/dist/shell/shellApp.js +15 -8
- package/dist/shell/shellApp.js.map +1 -1
- package/dist/shell/systemPrompt.d.ts.map +1 -1
- package/dist/shell/systemPrompt.js +4 -15
- package/dist/shell/systemPrompt.js.map +1 -1
- package/dist/subagents/taskRunner.js +2 -1
- package/dist/subagents/taskRunner.js.map +1 -1
- package/dist/tools/bashTools.d.ts.map +1 -1
- package/dist/tools/bashTools.js +101 -8
- package/dist/tools/bashTools.js.map +1 -1
- package/dist/tools/diffUtils.d.ts +8 -2
- package/dist/tools/diffUtils.d.ts.map +1 -1
- package/dist/tools/diffUtils.js +72 -13
- package/dist/tools/diffUtils.js.map +1 -1
- package/dist/tools/grepTools.d.ts.map +1 -1
- package/dist/tools/grepTools.js +10 -2
- package/dist/tools/grepTools.js.map +1 -1
- package/dist/tools/planningTools.d.ts +0 -10
- package/dist/tools/planningTools.d.ts.map +1 -1
- package/dist/tools/planningTools.js +0 -16
- package/dist/tools/planningTools.js.map +1 -1
- package/dist/tools/searchTools.d.ts.map +1 -1
- package/dist/tools/searchTools.js +4 -2
- package/dist/tools/searchTools.js.map +1 -1
- package/dist/ui/PromptController.d.ts +7 -4
- package/dist/ui/PromptController.d.ts.map +1 -1
- package/dist/ui/PromptController.js +4 -7
- package/dist/ui/PromptController.js.map +1 -1
- package/dist/ui/ShellUIAdapter.d.ts +286 -28
- package/dist/ui/ShellUIAdapter.d.ts.map +1 -1
- package/dist/ui/ShellUIAdapter.js +1485 -121
- package/dist/ui/ShellUIAdapter.js.map +1 -1
- package/dist/ui/UnifiedUIController.d.ts +80 -0
- package/dist/ui/UnifiedUIController.d.ts.map +1 -0
- package/dist/ui/UnifiedUIController.js +211 -0
- package/dist/ui/UnifiedUIController.js.map +1 -0
- package/dist/ui/UnifiedUIRenderer.d.ts +102 -46
- package/dist/ui/UnifiedUIRenderer.d.ts.map +1 -1
- package/dist/ui/UnifiedUIRenderer.js +680 -610
- package/dist/ui/UnifiedUIRenderer.js.map +1 -1
- package/dist/ui/animatedStatus.d.ts +128 -6
- package/dist/ui/animatedStatus.d.ts.map +1 -1
- package/dist/ui/animatedStatus.js +383 -50
- package/dist/ui/animatedStatus.js.map +1 -1
- package/dist/ui/animation/AnimationScheduler.d.ts +192 -0
- package/dist/ui/animation/AnimationScheduler.d.ts.map +1 -0
- package/dist/ui/animation/AnimationScheduler.js +432 -0
- package/dist/ui/animation/AnimationScheduler.js.map +1 -0
- package/dist/ui/display.d.ts +179 -25
- package/dist/ui/display.d.ts.map +1 -1
- package/dist/ui/display.js +678 -96
- package/dist/ui/display.js.map +1 -1
- package/dist/ui/inPlaceUpdater.d.ts +181 -0
- package/dist/ui/inPlaceUpdater.d.ts.map +1 -0
- package/dist/ui/inPlaceUpdater.js +515 -0
- package/dist/ui/inPlaceUpdater.js.map +1 -0
- package/dist/ui/interrupts/InterruptManager.d.ts +142 -0
- package/dist/ui/interrupts/InterruptManager.d.ts.map +1 -0
- package/dist/ui/interrupts/InterruptManager.js +439 -0
- package/dist/ui/interrupts/InterruptManager.js.map +1 -0
- package/dist/ui/layout.d.ts +0 -1
- package/dist/ui/layout.d.ts.map +1 -1
- package/dist/ui/layout.js +0 -12
- package/dist/ui/layout.js.map +1 -1
- package/dist/ui/orchestration/StatusOrchestrator.d.ts +1 -1
- package/dist/ui/orchestration/StatusOrchestrator.js +1 -1
- package/dist/ui/orchestration/UIUpdateCoordinator.d.ts +61 -7
- package/dist/ui/orchestration/UIUpdateCoordinator.d.ts.map +1 -1
- package/dist/ui/orchestration/UIUpdateCoordinator.js +232 -20
- package/dist/ui/orchestration/UIUpdateCoordinator.js.map +1 -1
- package/dist/ui/shortcutsHelp.d.ts.map +1 -1
- package/dist/ui/shortcutsHelp.js +0 -1
- package/dist/ui/shortcutsHelp.js.map +1 -1
- package/dist/ui/telemetry/ResponseTracker.d.ts +22 -0
- package/dist/ui/telemetry/ResponseTracker.d.ts.map +1 -0
- package/dist/ui/telemetry/ResponseTracker.js +60 -0
- package/dist/ui/telemetry/ResponseTracker.js.map +1 -0
- package/dist/ui/telemetry/UITelemetry.d.ts +181 -0
- package/dist/ui/telemetry/UITelemetry.d.ts.map +1 -0
- package/dist/ui/telemetry/UITelemetry.js +446 -0
- package/dist/ui/telemetry/UITelemetry.js.map +1 -0
- package/dist/ui/unified/index.d.ts +28 -1
- package/dist/ui/unified/index.d.ts.map +1 -1
- package/dist/ui/unified/index.js +41 -2
- package/dist/ui/unified/index.js.map +1 -1
- package/dist/ui/unified/layout.d.ts +12 -0
- package/dist/ui/unified/layout.d.ts.map +1 -0
- package/dist/ui/unified/layout.js +96 -0
- package/dist/ui/unified/layout.js.map +1 -0
- package/package.json +1 -2
- package/dist/StringUtils.d.ts +0 -8
- package/dist/StringUtils.d.ts.map +0 -1
- package/dist/StringUtils.js +0 -11
- package/dist/StringUtils.js.map +0 -1
- package/dist/core/aiFlowSupervisor.d.ts +0 -44
- package/dist/core/aiFlowSupervisor.d.ts.map +0 -1
- package/dist/core/aiFlowSupervisor.js +0 -299
- package/dist/core/aiFlowSupervisor.js.map +0 -1
- package/dist/core/cliTestHarness.d.ts +0 -200
- package/dist/core/cliTestHarness.d.ts.map +0 -1
- package/dist/core/cliTestHarness.js +0 -549
- package/dist/core/cliTestHarness.js.map +0 -1
- package/dist/core/testUtils.d.ts +0 -121
- package/dist/core/testUtils.d.ts.map +0 -1
- package/dist/core/testUtils.js +0 -235
- package/dist/core/testUtils.js.map +0 -1
- package/dist/core/toolValidation.d.ts +0 -116
- package/dist/core/toolValidation.d.ts.map +0 -1
- package/dist/core/toolValidation.js +0 -282
- package/dist/core/toolValidation.js.map +0 -1
- package/dist/ui/planOverlay.d.ts +0 -28
- package/dist/ui/planOverlay.d.ts.map +0 -1
- package/dist/ui/planOverlay.js +0 -156
- package/dist/ui/planOverlay.js.map +0 -1
- package/dist/ui/streamingFormatter.d.ts +0 -30
- package/dist/ui/streamingFormatter.d.ts.map +0 -1
- package/dist/ui/streamingFormatter.js +0 -91
- package/dist/ui/streamingFormatter.js.map +0 -1
- package/dist/utils/errorUtils.d.ts +0 -16
- package/dist/utils/errorUtils.d.ts.map +0 -1
- package/dist/utils/errorUtils.js +0 -66
- package/dist/utils/errorUtils.js.map +0 -1
|
@@ -1,549 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CLI Test Harness - PTY-based interactive CLI testing
|
|
3
|
-
*
|
|
4
|
-
* This module provides real runtime verification of CLI behavior by:
|
|
5
|
-
* 1. Spawning the CLI in a pseudo-terminal (PTY)
|
|
6
|
-
* 2. Sending simulated user input (including paste sequences)
|
|
7
|
-
* 3. Capturing and analyzing output
|
|
8
|
-
* 4. Verifying expected behaviors
|
|
9
|
-
*
|
|
10
|
-
* @license MIT
|
|
11
|
-
*/
|
|
12
|
-
import { spawn } from 'node:child_process';
|
|
13
|
-
import { join } from 'node:path';
|
|
14
|
-
import { EventEmitter } from 'node:events';
|
|
15
|
-
// ============================================================================
|
|
16
|
-
// CONSTANTS
|
|
17
|
-
// ============================================================================
|
|
18
|
-
const BRACKETED_PASTE_START = '\x1b[200~';
|
|
19
|
-
const BRACKETED_PASTE_END = '\x1b[201~';
|
|
20
|
-
const SPECIAL_KEYS = {
|
|
21
|
-
'enter': '\r',
|
|
22
|
-
'tab': '\t',
|
|
23
|
-
'escape': '\x1b',
|
|
24
|
-
'ctrl-c': '\x03',
|
|
25
|
-
'ctrl-d': '\x04',
|
|
26
|
-
};
|
|
27
|
-
// ============================================================================
|
|
28
|
-
// CLI TEST HARNESS
|
|
29
|
-
// ============================================================================
|
|
30
|
-
export class CLITestHarness extends EventEmitter {
|
|
31
|
-
config;
|
|
32
|
-
process = null;
|
|
33
|
-
output = '';
|
|
34
|
-
errors = '';
|
|
35
|
-
exitCode = null;
|
|
36
|
-
ptyModule = null;
|
|
37
|
-
constructor(config) {
|
|
38
|
-
super();
|
|
39
|
-
this.config = {
|
|
40
|
-
cwd: config.cwd,
|
|
41
|
-
env: config.env ?? {},
|
|
42
|
-
timeout: config.timeout ?? 30000,
|
|
43
|
-
usePty: config.usePty ?? false,
|
|
44
|
-
cliPath: config.cliPath ?? join(config.cwd, 'dist/bin/erosolar-optimized.js'),
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Try to load node-pty for true PTY support
|
|
49
|
-
*/
|
|
50
|
-
async loadPtyModule() {
|
|
51
|
-
if (this.ptyModule)
|
|
52
|
-
return true;
|
|
53
|
-
try {
|
|
54
|
-
// Dynamic import to avoid hard dependency
|
|
55
|
-
// @ts-expect-error - node-pty is optional
|
|
56
|
-
this.ptyModule = await import('node-pty');
|
|
57
|
-
return true;
|
|
58
|
-
}
|
|
59
|
-
catch {
|
|
60
|
-
return false;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Start the CLI process
|
|
65
|
-
*/
|
|
66
|
-
async start() {
|
|
67
|
-
this.output = '';
|
|
68
|
-
this.errors = '';
|
|
69
|
-
this.exitCode = null;
|
|
70
|
-
const env = {
|
|
71
|
-
...process.env,
|
|
72
|
-
...this.config.env,
|
|
73
|
-
// Disable color output for easier parsing
|
|
74
|
-
NO_COLOR: '1',
|
|
75
|
-
FORCE_COLOR: '0',
|
|
76
|
-
// Set non-interactive mode hints
|
|
77
|
-
CI: '1',
|
|
78
|
-
};
|
|
79
|
-
if (this.config.usePty && await this.loadPtyModule()) {
|
|
80
|
-
await this.startWithPty(env);
|
|
81
|
-
}
|
|
82
|
-
else {
|
|
83
|
-
await this.startWithStdio(env);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Start CLI with PTY (for interactive features like bracketed paste)
|
|
88
|
-
*/
|
|
89
|
-
async startWithPty(env) {
|
|
90
|
-
const pty = this.ptyModule;
|
|
91
|
-
this.process = pty.spawn('node', [this.config.cliPath], {
|
|
92
|
-
name: 'xterm-256color',
|
|
93
|
-
cols: 120,
|
|
94
|
-
rows: 30,
|
|
95
|
-
cwd: this.config.cwd,
|
|
96
|
-
env,
|
|
97
|
-
});
|
|
98
|
-
this.process.onData((data) => {
|
|
99
|
-
this.output += data;
|
|
100
|
-
this.emit('output', data);
|
|
101
|
-
});
|
|
102
|
-
this.process.onExit(({ exitCode }) => {
|
|
103
|
-
this.exitCode = exitCode;
|
|
104
|
-
this.emit('exit', exitCode);
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* Start CLI with standard stdio (fallback, limited interactive support)
|
|
109
|
-
*/
|
|
110
|
-
async startWithStdio(env) {
|
|
111
|
-
this.process = spawn('node', [this.config.cliPath], {
|
|
112
|
-
cwd: this.config.cwd,
|
|
113
|
-
env,
|
|
114
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
115
|
-
});
|
|
116
|
-
this.process.stdout?.on('data', (data) => {
|
|
117
|
-
const str = data.toString();
|
|
118
|
-
this.output += str;
|
|
119
|
-
this.emit('output', str);
|
|
120
|
-
});
|
|
121
|
-
this.process.stderr?.on('data', (data) => {
|
|
122
|
-
const str = data.toString();
|
|
123
|
-
this.errors += str;
|
|
124
|
-
this.emit('error', str);
|
|
125
|
-
});
|
|
126
|
-
this.process.on('exit', (code) => {
|
|
127
|
-
this.exitCode = code ?? 0;
|
|
128
|
-
this.emit('exit', code);
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* Send input to the CLI
|
|
133
|
-
*/
|
|
134
|
-
write(input) {
|
|
135
|
-
if (!this.process) {
|
|
136
|
-
throw new Error('CLI process not started');
|
|
137
|
-
}
|
|
138
|
-
if (this.config.usePty && this.ptyModule) {
|
|
139
|
-
this.process.write(input);
|
|
140
|
-
}
|
|
141
|
-
else {
|
|
142
|
-
this.process.stdin?.write(input);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
/**
|
|
146
|
-
* Send a bracketed paste sequence
|
|
147
|
-
*/
|
|
148
|
-
paste(content) {
|
|
149
|
-
this.write(BRACKETED_PASTE_START + content + BRACKETED_PASTE_END);
|
|
150
|
-
}
|
|
151
|
-
/**
|
|
152
|
-
* Send a special key
|
|
153
|
-
*/
|
|
154
|
-
sendKey(key) {
|
|
155
|
-
const sequence = SPECIAL_KEYS[key];
|
|
156
|
-
if (sequence) {
|
|
157
|
-
this.write(sequence);
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
/**
|
|
161
|
-
* Wait for output matching a pattern
|
|
162
|
-
*/
|
|
163
|
-
async waitForOutput(pattern, timeout = 5000) {
|
|
164
|
-
const startTime = Date.now();
|
|
165
|
-
const regex = typeof pattern === 'string' ? new RegExp(pattern, 'i') : pattern;
|
|
166
|
-
return new Promise((resolve, reject) => {
|
|
167
|
-
const check = () => {
|
|
168
|
-
if (regex.test(this.output)) {
|
|
169
|
-
resolve(this.output);
|
|
170
|
-
return;
|
|
171
|
-
}
|
|
172
|
-
if (Date.now() - startTime > timeout) {
|
|
173
|
-
reject(new Error(`Timeout waiting for pattern: ${pattern}`));
|
|
174
|
-
return;
|
|
175
|
-
}
|
|
176
|
-
setTimeout(check, 100);
|
|
177
|
-
};
|
|
178
|
-
check();
|
|
179
|
-
});
|
|
180
|
-
}
|
|
181
|
-
/**
|
|
182
|
-
* Wait for a specified duration
|
|
183
|
-
*/
|
|
184
|
-
async wait(ms) {
|
|
185
|
-
return new Promise(resolve => setTimeout(resolve, ms));
|
|
186
|
-
}
|
|
187
|
-
/**
|
|
188
|
-
* Get current output
|
|
189
|
-
*/
|
|
190
|
-
getOutput() {
|
|
191
|
-
return this.output;
|
|
192
|
-
}
|
|
193
|
-
/**
|
|
194
|
-
* Get current errors
|
|
195
|
-
*/
|
|
196
|
-
getErrors() {
|
|
197
|
-
return this.errors;
|
|
198
|
-
}
|
|
199
|
-
/**
|
|
200
|
-
* Stop the CLI process
|
|
201
|
-
*/
|
|
202
|
-
async stop() {
|
|
203
|
-
if (!this.process) {
|
|
204
|
-
return this.exitCode ?? 0;
|
|
205
|
-
}
|
|
206
|
-
return new Promise((resolve) => {
|
|
207
|
-
const timeout = setTimeout(() => {
|
|
208
|
-
this.process?.kill('SIGKILL');
|
|
209
|
-
}, 5000);
|
|
210
|
-
this.process.on('exit', (code) => {
|
|
211
|
-
clearTimeout(timeout);
|
|
212
|
-
resolve(code ?? 0);
|
|
213
|
-
});
|
|
214
|
-
// Try graceful shutdown first
|
|
215
|
-
this.sendKey('ctrl-c');
|
|
216
|
-
setTimeout(() => {
|
|
217
|
-
this.sendKey('ctrl-d');
|
|
218
|
-
}, 500);
|
|
219
|
-
});
|
|
220
|
-
}
|
|
221
|
-
/**
|
|
222
|
-
* Run a complete test scenario
|
|
223
|
-
*/
|
|
224
|
-
async runScenario(scenario) {
|
|
225
|
-
const startTime = Date.now();
|
|
226
|
-
const result = {
|
|
227
|
-
scenario,
|
|
228
|
-
passed: true,
|
|
229
|
-
duration: 0,
|
|
230
|
-
output: '',
|
|
231
|
-
errors: [],
|
|
232
|
-
expectations: [],
|
|
233
|
-
};
|
|
234
|
-
try {
|
|
235
|
-
// Start the CLI
|
|
236
|
-
await this.start();
|
|
237
|
-
// Wait for initial startup
|
|
238
|
-
await this.wait(1000);
|
|
239
|
-
// Execute input sequence
|
|
240
|
-
for (const input of scenario.inputs) {
|
|
241
|
-
await this.executeInput(input);
|
|
242
|
-
}
|
|
243
|
-
// Wait for processing
|
|
244
|
-
await this.wait(500);
|
|
245
|
-
// Check expectations
|
|
246
|
-
for (const expectation of scenario.expectations) {
|
|
247
|
-
const expResult = await this.checkExpectation(expectation);
|
|
248
|
-
result.expectations.push(expResult);
|
|
249
|
-
if (!expResult.passed) {
|
|
250
|
-
result.passed = false;
|
|
251
|
-
result.errors.push(expResult.reason || 'Expectation failed');
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
catch (error) {
|
|
256
|
-
result.passed = false;
|
|
257
|
-
result.errors.push(error instanceof Error ? error.message : String(error));
|
|
258
|
-
}
|
|
259
|
-
finally {
|
|
260
|
-
await this.stop();
|
|
261
|
-
result.output = this.output;
|
|
262
|
-
result.duration = Date.now() - startTime;
|
|
263
|
-
}
|
|
264
|
-
return result;
|
|
265
|
-
}
|
|
266
|
-
/**
|
|
267
|
-
* Execute a single input action
|
|
268
|
-
*/
|
|
269
|
-
async executeInput(input) {
|
|
270
|
-
switch (input.type) {
|
|
271
|
-
case 'text':
|
|
272
|
-
if (input.content) {
|
|
273
|
-
this.write(input.content);
|
|
274
|
-
}
|
|
275
|
-
break;
|
|
276
|
-
case 'paste':
|
|
277
|
-
if (input.content) {
|
|
278
|
-
this.paste(input.content);
|
|
279
|
-
}
|
|
280
|
-
break;
|
|
281
|
-
case 'key':
|
|
282
|
-
if (input.key) {
|
|
283
|
-
this.sendKey(input.key);
|
|
284
|
-
}
|
|
285
|
-
break;
|
|
286
|
-
case 'wait':
|
|
287
|
-
await this.wait(input.delay ?? 100);
|
|
288
|
-
break;
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
/**
|
|
292
|
-
* Check a single expectation
|
|
293
|
-
*/
|
|
294
|
-
async checkExpectation(expectation) {
|
|
295
|
-
const timeout = expectation.timeout ?? 5000;
|
|
296
|
-
try {
|
|
297
|
-
switch (expectation.type) {
|
|
298
|
-
case 'output_contains': {
|
|
299
|
-
const pattern = expectation.value;
|
|
300
|
-
try {
|
|
301
|
-
await this.waitForOutput(pattern, timeout);
|
|
302
|
-
return { expectation, passed: true, actual: this.output };
|
|
303
|
-
}
|
|
304
|
-
catch {
|
|
305
|
-
return {
|
|
306
|
-
expectation,
|
|
307
|
-
passed: false,
|
|
308
|
-
actual: this.output.slice(-500),
|
|
309
|
-
reason: `Output does not contain: "${pattern}"`,
|
|
310
|
-
};
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
case 'output_matches': {
|
|
314
|
-
const regex = expectation.value instanceof RegExp
|
|
315
|
-
? expectation.value
|
|
316
|
-
: new RegExp(expectation.value);
|
|
317
|
-
if (regex.test(this.output)) {
|
|
318
|
-
return { expectation, passed: true, actual: this.output };
|
|
319
|
-
}
|
|
320
|
-
return {
|
|
321
|
-
expectation,
|
|
322
|
-
passed: false,
|
|
323
|
-
actual: this.output.slice(-500),
|
|
324
|
-
reason: `Output does not match: ${regex}`,
|
|
325
|
-
};
|
|
326
|
-
}
|
|
327
|
-
case 'output_not_contains': {
|
|
328
|
-
const pattern = expectation.value;
|
|
329
|
-
if (!this.output.includes(pattern)) {
|
|
330
|
-
return { expectation, passed: true };
|
|
331
|
-
}
|
|
332
|
-
return {
|
|
333
|
-
expectation,
|
|
334
|
-
passed: false,
|
|
335
|
-
actual: this.output.slice(-500),
|
|
336
|
-
reason: `Output unexpectedly contains: "${pattern}"`,
|
|
337
|
-
};
|
|
338
|
-
}
|
|
339
|
-
case 'exit_code': {
|
|
340
|
-
const expected = expectation.value;
|
|
341
|
-
if (this.exitCode === expected) {
|
|
342
|
-
return { expectation, passed: true, actual: String(this.exitCode) };
|
|
343
|
-
}
|
|
344
|
-
return {
|
|
345
|
-
expectation,
|
|
346
|
-
passed: false,
|
|
347
|
-
actual: String(this.exitCode),
|
|
348
|
-
reason: `Exit code ${this.exitCode} !== expected ${expected}`,
|
|
349
|
-
};
|
|
350
|
-
}
|
|
351
|
-
default:
|
|
352
|
-
return {
|
|
353
|
-
expectation,
|
|
354
|
-
passed: false,
|
|
355
|
-
reason: `Unknown expectation type: ${expectation.type}`,
|
|
356
|
-
};
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
catch (error) {
|
|
360
|
-
return {
|
|
361
|
-
expectation,
|
|
362
|
-
passed: false,
|
|
363
|
-
reason: error instanceof Error ? error.message : String(error),
|
|
364
|
-
};
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
// ============================================================================
|
|
369
|
-
// PREDEFINED TEST SCENARIOS
|
|
370
|
-
// ============================================================================
|
|
371
|
-
/**
|
|
372
|
-
* Create a paste handling test scenario
|
|
373
|
-
*/
|
|
374
|
-
export function createPasteTestScenario(content, expectedLineCount) {
|
|
375
|
-
return {
|
|
376
|
-
id: `paste-${expectedLineCount}-lines`,
|
|
377
|
-
description: `Test pasting ${expectedLineCount} lines of content`,
|
|
378
|
-
category: 'paste',
|
|
379
|
-
inputs: [
|
|
380
|
-
{ type: 'wait', delay: 2000 }, // Wait for CLI to initialize
|
|
381
|
-
{ type: 'paste', content },
|
|
382
|
-
{ type: 'wait', delay: 500 },
|
|
383
|
-
{ type: 'key', key: 'enter' },
|
|
384
|
-
{ type: 'wait', delay: 1000 },
|
|
385
|
-
],
|
|
386
|
-
expectations: [
|
|
387
|
-
{
|
|
388
|
-
type: 'output_contains',
|
|
389
|
-
value: `${expectedLineCount} line`,
|
|
390
|
-
description: 'Should show line count in preview',
|
|
391
|
-
},
|
|
392
|
-
],
|
|
393
|
-
};
|
|
394
|
-
}
|
|
395
|
-
/**
|
|
396
|
-
* Create a multi-line input test scenario
|
|
397
|
-
*/
|
|
398
|
-
export function createMultiLineInputScenario() {
|
|
399
|
-
const multiLineContent = 'function test() {\n console.log("hello");\n return true;\n}';
|
|
400
|
-
return {
|
|
401
|
-
id: 'multi-line-input',
|
|
402
|
-
description: 'Test multi-line code input handling',
|
|
403
|
-
category: 'input',
|
|
404
|
-
inputs: [
|
|
405
|
-
{ type: 'wait', delay: 2000 },
|
|
406
|
-
{ type: 'paste', content: multiLineContent },
|
|
407
|
-
{ type: 'wait', delay: 500 },
|
|
408
|
-
{ type: 'key', key: 'enter' },
|
|
409
|
-
{ type: 'wait', delay: 2000 },
|
|
410
|
-
],
|
|
411
|
-
expectations: [
|
|
412
|
-
{
|
|
413
|
-
type: 'output_contains',
|
|
414
|
-
value: '4 line',
|
|
415
|
-
description: 'Should show 4 lines in preview',
|
|
416
|
-
},
|
|
417
|
-
{
|
|
418
|
-
type: 'output_not_contains',
|
|
419
|
-
value: 'error',
|
|
420
|
-
description: 'Should not show errors',
|
|
421
|
-
},
|
|
422
|
-
],
|
|
423
|
-
};
|
|
424
|
-
}
|
|
425
|
-
/**
|
|
426
|
-
* Create a slash command test scenario
|
|
427
|
-
*/
|
|
428
|
-
export function createSlashCommandScenario(command) {
|
|
429
|
-
return {
|
|
430
|
-
id: `slash-${command.replace('/', '')}`,
|
|
431
|
-
description: `Test /${command} slash command`,
|
|
432
|
-
category: 'command',
|
|
433
|
-
inputs: [
|
|
434
|
-
{ type: 'wait', delay: 2000 },
|
|
435
|
-
{ type: 'text', content: `/${command}` },
|
|
436
|
-
{ type: 'key', key: 'enter' },
|
|
437
|
-
{ type: 'wait', delay: 1000 },
|
|
438
|
-
],
|
|
439
|
-
expectations: [
|
|
440
|
-
{
|
|
441
|
-
type: 'output_not_contains',
|
|
442
|
-
value: 'Unknown command',
|
|
443
|
-
description: 'Command should be recognized',
|
|
444
|
-
},
|
|
445
|
-
],
|
|
446
|
-
};
|
|
447
|
-
}
|
|
448
|
-
// ============================================================================
|
|
449
|
-
// VERIFICATION INTEGRATION
|
|
450
|
-
// ============================================================================
|
|
451
|
-
/**
|
|
452
|
-
* Run verification tests for a specific claim type
|
|
453
|
-
*/
|
|
454
|
-
export async function runVerificationTests(claimType, workingDir) {
|
|
455
|
-
const harness = new CLITestHarness({
|
|
456
|
-
cwd: workingDir,
|
|
457
|
-
timeout: 60000,
|
|
458
|
-
usePty: true, // Try PTY first
|
|
459
|
-
});
|
|
460
|
-
const scenarios = [];
|
|
461
|
-
// Select scenarios based on claim type
|
|
462
|
-
switch (claimType) {
|
|
463
|
-
case 'paste_handling':
|
|
464
|
-
scenarios.push(createPasteTestScenario('line1\nline2\nline3', 3), createPasteTestScenario('a\nb\nc\nd\ne\nf\ng\nh\ni\nj', 10), createMultiLineInputScenario());
|
|
465
|
-
break;
|
|
466
|
-
case 'slash_commands':
|
|
467
|
-
scenarios.push(createSlashCommandScenario('help'), createSlashCommandScenario('model'), createSlashCommandScenario('clear'));
|
|
468
|
-
break;
|
|
469
|
-
case 'build_success':
|
|
470
|
-
// For build claims, we don't need PTY - just run npm build
|
|
471
|
-
scenarios.push({
|
|
472
|
-
id: 'build-check',
|
|
473
|
-
description: 'Verify project builds successfully',
|
|
474
|
-
category: 'command',
|
|
475
|
-
inputs: [],
|
|
476
|
-
expectations: [],
|
|
477
|
-
});
|
|
478
|
-
break;
|
|
479
|
-
default:
|
|
480
|
-
// Generic behavior test
|
|
481
|
-
scenarios.push({
|
|
482
|
-
id: 'startup-check',
|
|
483
|
-
description: 'Verify CLI starts without errors',
|
|
484
|
-
category: 'behavior',
|
|
485
|
-
inputs: [
|
|
486
|
-
{ type: 'wait', delay: 3000 },
|
|
487
|
-
{ type: 'key', key: 'ctrl-c' },
|
|
488
|
-
],
|
|
489
|
-
expectations: [
|
|
490
|
-
{
|
|
491
|
-
type: 'output_not_contains',
|
|
492
|
-
value: 'Error:',
|
|
493
|
-
description: 'Should not show errors on startup',
|
|
494
|
-
},
|
|
495
|
-
],
|
|
496
|
-
});
|
|
497
|
-
}
|
|
498
|
-
const results = [];
|
|
499
|
-
let allPassed = true;
|
|
500
|
-
for (const scenario of scenarios) {
|
|
501
|
-
const result = await harness.runScenario(scenario);
|
|
502
|
-
results.push(result);
|
|
503
|
-
if (!result.passed) {
|
|
504
|
-
allPassed = false;
|
|
505
|
-
}
|
|
506
|
-
}
|
|
507
|
-
const passed = results.filter(r => r.passed).length;
|
|
508
|
-
const failed = results.filter(r => !r.passed).length;
|
|
509
|
-
const summary = `${passed}/${results.length} tests passed${failed > 0 ? `, ${failed} failed` : ''}`;
|
|
510
|
-
return {
|
|
511
|
-
passed: allPassed,
|
|
512
|
-
results,
|
|
513
|
-
summary,
|
|
514
|
-
};
|
|
515
|
-
}
|
|
516
|
-
/**
|
|
517
|
-
* Verify a single claim using the appropriate method (PTY-based)
|
|
518
|
-
*/
|
|
519
|
-
export async function verifyClaim(claim, workingDir) {
|
|
520
|
-
const startTime = Date.now();
|
|
521
|
-
// Route ALL claims through PTY-based verification
|
|
522
|
-
const verification = await runVerificationTests(claim.context['feature'] || claim.category, workingDir);
|
|
523
|
-
return {
|
|
524
|
-
claim,
|
|
525
|
-
passed: verification.passed,
|
|
526
|
-
method: 'pty',
|
|
527
|
-
output: verification.results.map(r => r.output).join('\n'),
|
|
528
|
-
error: verification.passed ? undefined : verification.summary,
|
|
529
|
-
duration: Date.now() - startTime,
|
|
530
|
-
};
|
|
531
|
-
}
|
|
532
|
-
/**
|
|
533
|
-
* Verify all claims using unified PTY harness
|
|
534
|
-
*/
|
|
535
|
-
export async function verifyAllClaims(claims, workingDir) {
|
|
536
|
-
const results = [];
|
|
537
|
-
for (const claim of claims) {
|
|
538
|
-
const result = await verifyClaim(claim, workingDir);
|
|
539
|
-
results.push(result);
|
|
540
|
-
}
|
|
541
|
-
const passed = results.filter(r => r.passed).length;
|
|
542
|
-
const failed = results.filter(r => !r.passed).length;
|
|
543
|
-
return {
|
|
544
|
-
results,
|
|
545
|
-
summary: { total: claims.length, passed, failed },
|
|
546
|
-
};
|
|
547
|
-
}
|
|
548
|
-
export default CLITestHarness;
|
|
549
|
-
//# sourceMappingURL=cliTestHarness.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cliTestHarness.js","sourceRoot":"","sources":["../../src/core/cliTestHarness.ts"],"names":[],"mappings":"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"}
|
package/dist/core/testUtils.d.ts
DELETED
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Comprehensive test utilities for tool validation and AI flow testing
|
|
3
|
-
* Provides type-safe testing patterns for erosolar-cli software engineering
|
|
4
|
-
*/
|
|
5
|
-
import type { ToolCallRequest, ToolResponse, JSONSchemaObject, Result, ToolSuccessResponse, ToolErrorResponse, ToolWarningResponse } from './types.js';
|
|
6
|
-
import { validateToolPreconditions, validateAIFlowPatterns } from './toolPreconditions.js';
|
|
7
|
-
/**
|
|
8
|
-
* Test utilities for tool validation and AI flow testing
|
|
9
|
-
*/
|
|
10
|
-
export declare namespace ToolTestUtils {
|
|
11
|
-
/**
|
|
12
|
-
* Creates a mock tool call for testing
|
|
13
|
-
*/
|
|
14
|
-
function createMockToolCall(name: string, args?: Record<string, unknown>): ToolCallRequest;
|
|
15
|
-
/**
|
|
16
|
-
* Creates a mock successful tool response
|
|
17
|
-
*/
|
|
18
|
-
function createMockSuccessResponse(content: string, metadata?: ToolSuccessResponse['metadata']): ToolSuccessResponse;
|
|
19
|
-
/**
|
|
20
|
-
* Creates a mock error tool response
|
|
21
|
-
*/
|
|
22
|
-
function createMockErrorResponse(code: string, message: string, recoverable?: boolean): ToolErrorResponse;
|
|
23
|
-
/**
|
|
24
|
-
* Creates a mock warning tool response
|
|
25
|
-
*/
|
|
26
|
-
function createMockWarningResponse(content: string, warnings: ToolWarningResponse['warnings']): ToolWarningResponse;
|
|
27
|
-
/**
|
|
28
|
-
* Validates tool arguments against schema with detailed error reporting
|
|
29
|
-
*/
|
|
30
|
-
function validateToolArgs(toolName: string, schema: JSONSchemaObject | undefined, args: Record<string, unknown>): Result<void, string[]>;
|
|
31
|
-
/**
|
|
32
|
-
* Tests AI flow patterns with tool history simulation
|
|
33
|
-
*/
|
|
34
|
-
function testAIFlowPatterns(toolName: string, args: Record<string, unknown>, toolHistory: Array<{
|
|
35
|
-
toolName: string;
|
|
36
|
-
args: Record<string, unknown>;
|
|
37
|
-
timestamp: number;
|
|
38
|
-
}>): {
|
|
39
|
-
preflightWarnings: ReturnType<typeof validateToolPreconditions>;
|
|
40
|
-
aiFlowWarnings: ReturnType<typeof validateAIFlowPatterns>;
|
|
41
|
-
};
|
|
42
|
-
/**
|
|
43
|
-
* Type-safe assertion for tool responses
|
|
44
|
-
*/
|
|
45
|
-
function assertToolSuccess(response: ToolResponse): asserts response is ToolSuccessResponse;
|
|
46
|
-
/**
|
|
47
|
-
* Type-safe assertion for tool errors
|
|
48
|
-
*/
|
|
49
|
-
function assertToolError(response: ToolResponse): asserts response is ToolErrorResponse;
|
|
50
|
-
/**
|
|
51
|
-
* Type-safe assertion for tool warnings
|
|
52
|
-
*/
|
|
53
|
-
function assertToolWarning(response: ToolResponse): asserts response is ToolWarningResponse;
|
|
54
|
-
/**
|
|
55
|
-
* Creates a test suite for tool validation
|
|
56
|
-
*/
|
|
57
|
-
function createToolTestSuite(toolName: string, schema: JSONSchemaObject | undefined): {
|
|
58
|
-
/**
|
|
59
|
-
* Test valid arguments
|
|
60
|
-
*/
|
|
61
|
-
testValidArgs(args: Record<string, unknown>): void;
|
|
62
|
-
/**
|
|
63
|
-
* Test invalid arguments
|
|
64
|
-
*/
|
|
65
|
-
testInvalidArgs(args: Record<string, unknown>, expectedErrors: string[]): void;
|
|
66
|
-
/**
|
|
67
|
-
* Test required arguments
|
|
68
|
-
*/
|
|
69
|
-
testRequiredArgs(requiredArgs: string[]): void;
|
|
70
|
-
};
|
|
71
|
-
/**
|
|
72
|
-
* Performance testing utilities
|
|
73
|
-
*/
|
|
74
|
-
namespace Performance {
|
|
75
|
-
/**
|
|
76
|
-
* Measures tool execution time
|
|
77
|
-
*/
|
|
78
|
-
function measureExecutionTime<T>(fn: () => Promise<T> | T): Promise<{
|
|
79
|
-
result: T;
|
|
80
|
-
executionTime: number;
|
|
81
|
-
}>;
|
|
82
|
-
/**
|
|
83
|
-
* Runs performance benchmark
|
|
84
|
-
*/
|
|
85
|
-
function benchmark(fn: () => Promise<unknown> | unknown, iterations?: number): Promise<{
|
|
86
|
-
averageTime: number;
|
|
87
|
-
minTime: number;
|
|
88
|
-
maxTime: number;
|
|
89
|
-
totalTime: number;
|
|
90
|
-
}>;
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* AI flow testing utilities
|
|
94
|
-
*/
|
|
95
|
-
namespace AIFlow {
|
|
96
|
-
/**
|
|
97
|
-
* Simulates a complete AI flow with tool history
|
|
98
|
-
*/
|
|
99
|
-
function simulateAIFlow(flow: Array<{
|
|
100
|
-
toolName: string;
|
|
101
|
-
args: Record<string, unknown>;
|
|
102
|
-
}>): Array<{
|
|
103
|
-
toolName: string;
|
|
104
|
-
args: Record<string, unknown>;
|
|
105
|
-
warnings: ReturnType<typeof validateAIFlowPatterns>;
|
|
106
|
-
}>;
|
|
107
|
-
/**
|
|
108
|
-
* Tests for common AI flow anti-patterns
|
|
109
|
-
*/
|
|
110
|
-
function detectAntiPatterns(flow: Array<{
|
|
111
|
-
toolName: string;
|
|
112
|
-
args: Record<string, unknown>;
|
|
113
|
-
}>): {
|
|
114
|
-
sequentialReads: boolean;
|
|
115
|
-
editWithoutRead: boolean;
|
|
116
|
-
multipleValidations: boolean;
|
|
117
|
-
inefficientGitOps: boolean;
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
//# sourceMappingURL=testUtils.d.ts.map
|