erosolar-cli 2.1.168 → 2.1.170
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/statusCapability.js +2 -2
- package/dist/capabilities/statusCapability.js.map +1 -1
- 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/headlessApp.d.ts.map +1 -1
- package/dist/headless/headlessApp.js +0 -39
- package/dist/headless/headlessApp.js.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 +11 -12
- package/dist/shell/interactiveShell.d.ts.map +1 -1
- package/dist/shell/interactiveShell.js +269 -193
- package/dist/shell/interactiveShell.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/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 +2 -3
- package/dist/ui/PromptController.d.ts.map +1 -1
- package/dist/ui/PromptController.js +2 -3
- package/dist/ui/PromptController.js.map +1 -1
- package/dist/ui/ShellUIAdapter.d.ts +71 -18
- package/dist/ui/ShellUIAdapter.d.ts.map +1 -1
- package/dist/ui/ShellUIAdapter.js +237 -139
- package/dist/ui/ShellUIAdapter.js.map +1 -1
- package/dist/ui/UnifiedUIController.d.ts +0 -1
- package/dist/ui/UnifiedUIController.d.ts.map +1 -1
- package/dist/ui/UnifiedUIController.js +0 -1
- package/dist/ui/UnifiedUIController.js.map +1 -1
- package/dist/ui/UnifiedUIRenderer.d.ts +122 -7
- package/dist/ui/UnifiedUIRenderer.d.ts.map +1 -1
- package/dist/ui/UnifiedUIRenderer.js +823 -130
- package/dist/ui/UnifiedUIRenderer.js.map +1 -1
- package/dist/ui/animatedStatus.d.ts +129 -0
- package/dist/ui/animatedStatus.d.ts.map +1 -0
- package/dist/ui/animatedStatus.js +384 -0
- package/dist/ui/animatedStatus.js.map +1 -0
- package/dist/ui/display.d.ts +13 -48
- package/dist/ui/display.d.ts.map +1 -1
- package/dist/ui/display.js +22 -105
- package/dist/ui/display.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/unified/index.d.ts +1 -1
- package/dist/ui/unified/index.d.ts.map +1 -1
- package/dist/ui/unified/index.js +0 -2
- package/dist/ui/unified/index.js.map +1 -1
- 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/compactRenderer.d.ts +0 -139
- package/dist/ui/compactRenderer.d.ts.map +0 -1
- package/dist/ui/compactRenderer.js +0 -398
- package/dist/ui/compactRenderer.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,299 +0,0 @@
|
|
|
1
|
-
const CHANGE_KEYWORDS = [
|
|
2
|
-
'fix',
|
|
3
|
-
'bug',
|
|
4
|
-
'issue',
|
|
5
|
-
'broken',
|
|
6
|
-
'error',
|
|
7
|
-
'implement',
|
|
8
|
-
'add ',
|
|
9
|
-
'update',
|
|
10
|
-
'upgrade',
|
|
11
|
-
'refactor',
|
|
12
|
-
'rewrite',
|
|
13
|
-
'optimize',
|
|
14
|
-
'support',
|
|
15
|
-
];
|
|
16
|
-
/**
|
|
17
|
-
* Keywords that indicate an informational/read-only query where no changes are expected.
|
|
18
|
-
* When these are detected, we skip most risk checks to avoid false positives.
|
|
19
|
-
*/
|
|
20
|
-
const INFORMATIONAL_KEYWORDS = [
|
|
21
|
-
'summarize',
|
|
22
|
-
'summary',
|
|
23
|
-
'explain',
|
|
24
|
-
'describe',
|
|
25
|
-
'what is',
|
|
26
|
-
'what are',
|
|
27
|
-
'how does',
|
|
28
|
-
'how do',
|
|
29
|
-
'show me',
|
|
30
|
-
'list ',
|
|
31
|
-
'tell me',
|
|
32
|
-
'analyze',
|
|
33
|
-
'review',
|
|
34
|
-
'understand',
|
|
35
|
-
'overview',
|
|
36
|
-
'structure',
|
|
37
|
-
'architecture',
|
|
38
|
-
'documentation',
|
|
39
|
-
'help me understand',
|
|
40
|
-
'walk me through',
|
|
41
|
-
'breakdown',
|
|
42
|
-
'highlights',
|
|
43
|
-
'key files',
|
|
44
|
-
'main files',
|
|
45
|
-
'codebase',
|
|
46
|
-
'repo structure',
|
|
47
|
-
'project structure',
|
|
48
|
-
'directory structure',
|
|
49
|
-
];
|
|
50
|
-
const COMPLETION_KEYWORDS = [
|
|
51
|
-
'fixed',
|
|
52
|
-
'implemented',
|
|
53
|
-
'added',
|
|
54
|
-
'updated',
|
|
55
|
-
'refactored',
|
|
56
|
-
'resolved',
|
|
57
|
-
'completed',
|
|
58
|
-
'done',
|
|
59
|
-
'working now',
|
|
60
|
-
'applied',
|
|
61
|
-
'addressed',
|
|
62
|
-
];
|
|
63
|
-
const VALIDATION_KEYWORDS = [
|
|
64
|
-
'test',
|
|
65
|
-
'tests',
|
|
66
|
-
'jest',
|
|
67
|
-
'vitest',
|
|
68
|
-
'mocha',
|
|
69
|
-
'ava',
|
|
70
|
-
'cypress',
|
|
71
|
-
'playwright',
|
|
72
|
-
'build',
|
|
73
|
-
'lint',
|
|
74
|
-
'typecheck',
|
|
75
|
-
'type-check',
|
|
76
|
-
'tsc',
|
|
77
|
-
];
|
|
78
|
-
/**
|
|
79
|
-
* Evaluate a single agent run for risk of "looks right but wrong" hallucinations.
|
|
80
|
-
* Uses heuristic signals: whether change work was requested, tool usage per run,
|
|
81
|
-
* claims in the final response, and absence of validation.
|
|
82
|
-
*/
|
|
83
|
-
export function assessAiFlow(context) {
|
|
84
|
-
const windowedTools = filterToolsForRun(context.toolHistory, context.startedAt);
|
|
85
|
-
const stats = classifyTools(windowedTools);
|
|
86
|
-
const diffEvidence = context.diffSnapshots?.length ? context.diffSnapshots : undefined;
|
|
87
|
-
// Check if this is an informational/read-only query first
|
|
88
|
-
const isInformationalQuery = containsKeyword(context.prompt, INFORMATIONAL_KEYWORDS);
|
|
89
|
-
// For informational queries, only flag issues if there's something truly problematic
|
|
90
|
-
// (e.g., claiming to have made changes when none were made)
|
|
91
|
-
if (isInformationalQuery && stats.modifyingTools === 0) {
|
|
92
|
-
// This is a read-only query handled with read-only tools - no risks
|
|
93
|
-
return {
|
|
94
|
-
risks: [],
|
|
95
|
-
recommendations: [],
|
|
96
|
-
stats: {
|
|
97
|
-
totalTools: windowedTools.length,
|
|
98
|
-
modifyingTools: stats.modifyingTools,
|
|
99
|
-
validationTools: stats.validationTools,
|
|
100
|
-
readTools: stats.readTools,
|
|
101
|
-
gitDiffChecks: stats.gitDiffChecks,
|
|
102
|
-
gitStatusChecks: stats.gitStatusChecks,
|
|
103
|
-
},
|
|
104
|
-
evidence: diffEvidence ? { diffs: diffEvidence } : undefined,
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
const requiresChange = containsKeyword(context.prompt, CHANGE_KEYWORDS) && !isInformationalQuery;
|
|
108
|
-
const isBugReport = /\b(bug|error|broken|fails?|failing|incorrect)\b/i.test(context.prompt) && !isInformationalQuery;
|
|
109
|
-
const claimsCompletion = containsKeyword(context.response, COMPLETION_KEYWORDS);
|
|
110
|
-
const claimsValidation = containsKeyword(context.response, VALIDATION_KEYWORDS);
|
|
111
|
-
const risks = [];
|
|
112
|
-
const recommendations = [];
|
|
113
|
-
if (requiresChange && windowedTools.length === 0) {
|
|
114
|
-
risks.push({
|
|
115
|
-
id: 'no-tools-executed',
|
|
116
|
-
severity: 'critical',
|
|
117
|
-
summary: 'Change-request with zero tool usage',
|
|
118
|
-
details: 'User asked for changes but no tools were executed in this run.',
|
|
119
|
-
});
|
|
120
|
-
recommendations.push('Re-run the request and actually inspect/modify files with the edit/write tools.');
|
|
121
|
-
}
|
|
122
|
-
if (requiresChange && stats.modifyingTools === 0 && windowedTools.length > 0) {
|
|
123
|
-
risks.push({
|
|
124
|
-
id: 'no-modifications-observed',
|
|
125
|
-
severity: 'high',
|
|
126
|
-
summary: 'Only read/analysis tools were used',
|
|
127
|
-
details: 'No modifying tools ran despite a change-focused request.',
|
|
128
|
-
});
|
|
129
|
-
recommendations.push('Apply edits using Edit/Write (or a bash patch) before claiming completion.');
|
|
130
|
-
}
|
|
131
|
-
if (claimsCompletion && stats.modifyingTools === 0) {
|
|
132
|
-
risks.push({
|
|
133
|
-
id: 'claims-completion-without-changes',
|
|
134
|
-
severity: 'high',
|
|
135
|
-
summary: 'Completion claimed with no evidence of edits',
|
|
136
|
-
details: 'Final message claims work is complete but no modifying tools ran.',
|
|
137
|
-
});
|
|
138
|
-
recommendations.push('Perform the actual changes and surface a diff before marking complete.');
|
|
139
|
-
}
|
|
140
|
-
if (claimsValidation && stats.validationTools === 0) {
|
|
141
|
-
risks.push({
|
|
142
|
-
id: 'claims-validation-without-evidence',
|
|
143
|
-
severity: 'medium',
|
|
144
|
-
summary: 'Tests/build claimed without running validation tools',
|
|
145
|
-
details: 'Response mentions tests/builds but none were observed.',
|
|
146
|
-
});
|
|
147
|
-
recommendations.push('Run tests/builds (npm test, npm run build, lint) to back the claim.');
|
|
148
|
-
}
|
|
149
|
-
if (stats.modifyingTools > 0 && stats.validationTools === 0) {
|
|
150
|
-
risks.push({
|
|
151
|
-
id: 'unvalidated-modifications',
|
|
152
|
-
severity: 'medium',
|
|
153
|
-
summary: 'Edits were made with no validation',
|
|
154
|
-
details: 'Changes were applied but no tests/builds were executed afterward.',
|
|
155
|
-
});
|
|
156
|
-
recommendations.push('Run a targeted validation command after edits to confirm behavior.');
|
|
157
|
-
}
|
|
158
|
-
if (isBugReport && stats.validationTools === 0) {
|
|
159
|
-
risks.push({
|
|
160
|
-
id: 'no-reproduction-attempt',
|
|
161
|
-
severity: 'medium',
|
|
162
|
-
summary: 'Bug report handled without reproduction',
|
|
163
|
-
details: 'No reproduction or failing command/test was attempted.',
|
|
164
|
-
});
|
|
165
|
-
recommendations.push('Attempt to reproduce the bug with a failing test or command before proposing a fix.');
|
|
166
|
-
}
|
|
167
|
-
if (stats.modifyingTools > 0 && stats.gitDiffChecks === 0) {
|
|
168
|
-
risks.push({
|
|
169
|
-
id: 'no-diff-captured',
|
|
170
|
-
severity: 'medium',
|
|
171
|
-
summary: 'Changes applied without capturing a git diff',
|
|
172
|
-
details: 'No git diff/show commands were observed after edits.',
|
|
173
|
-
});
|
|
174
|
-
recommendations.push('Capture `git diff` or `git show` after edits to provide evidence of changes.');
|
|
175
|
-
}
|
|
176
|
-
return {
|
|
177
|
-
risks,
|
|
178
|
-
recommendations,
|
|
179
|
-
stats: {
|
|
180
|
-
totalTools: windowedTools.length,
|
|
181
|
-
modifyingTools: stats.modifyingTools,
|
|
182
|
-
validationTools: stats.validationTools,
|
|
183
|
-
readTools: stats.readTools,
|
|
184
|
-
gitDiffChecks: stats.gitDiffChecks,
|
|
185
|
-
gitStatusChecks: stats.gitStatusChecks,
|
|
186
|
-
},
|
|
187
|
-
evidence: diffEvidence ? { diffs: diffEvidence } : undefined,
|
|
188
|
-
};
|
|
189
|
-
}
|
|
190
|
-
function filterToolsForRun(history, startedAt) {
|
|
191
|
-
const WINDOW_PADDING_MS = 200; // include slight overlap for pre-flight calls
|
|
192
|
-
const cutoff = Math.max(0, startedAt - WINDOW_PADDING_MS);
|
|
193
|
-
return history.filter((entry) => entry.timestamp >= cutoff);
|
|
194
|
-
}
|
|
195
|
-
function classifyTools(tools) {
|
|
196
|
-
let modifyingTools = 0;
|
|
197
|
-
let validationTools = 0;
|
|
198
|
-
let readTools = 0;
|
|
199
|
-
let gitDiffChecks = 0;
|
|
200
|
-
let gitStatusChecks = 0;
|
|
201
|
-
for (const entry of tools) {
|
|
202
|
-
const name = entry.toolName.toLowerCase();
|
|
203
|
-
const commands = extractCommands(entry);
|
|
204
|
-
if (isModificationTool(name, commands)) {
|
|
205
|
-
modifyingTools++;
|
|
206
|
-
}
|
|
207
|
-
else if (isValidationTool(name, commands)) {
|
|
208
|
-
validationTools++;
|
|
209
|
-
}
|
|
210
|
-
else if (isReadTool(name)) {
|
|
211
|
-
readTools++;
|
|
212
|
-
}
|
|
213
|
-
for (const cmd of commands) {
|
|
214
|
-
if (commandIsGitDiff(cmd)) {
|
|
215
|
-
gitDiffChecks++;
|
|
216
|
-
}
|
|
217
|
-
if (commandIsGitStatus(cmd)) {
|
|
218
|
-
gitStatusChecks++;
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
return { modifyingTools, validationTools, readTools, gitDiffChecks, gitStatusChecks };
|
|
223
|
-
}
|
|
224
|
-
function isModificationTool(name, commands) {
|
|
225
|
-
if (name.includes('edit') ||
|
|
226
|
-
name.includes('write') ||
|
|
227
|
-
name.includes('patch') ||
|
|
228
|
-
name.includes('apply_patch') ||
|
|
229
|
-
name.includes('replace') ||
|
|
230
|
-
name.includes('notebook_edit') ||
|
|
231
|
-
name.includes('codegen') ||
|
|
232
|
-
name.includes('update')) {
|
|
233
|
-
return true;
|
|
234
|
-
}
|
|
235
|
-
return commands.some(commandSuggestsWrite);
|
|
236
|
-
}
|
|
237
|
-
function isValidationTool(name, commands) {
|
|
238
|
-
if (name.includes('test') ||
|
|
239
|
-
name.includes('lint') ||
|
|
240
|
-
name.includes('build') ||
|
|
241
|
-
name.includes('check') ||
|
|
242
|
-
name.includes('validate')) {
|
|
243
|
-
return true;
|
|
244
|
-
}
|
|
245
|
-
return commands.some(commandSuggestsValidation);
|
|
246
|
-
}
|
|
247
|
-
function isReadTool(name) {
|
|
248
|
-
return (name.includes('read') ||
|
|
249
|
-
name.includes('list') ||
|
|
250
|
-
name.includes('search') ||
|
|
251
|
-
name.includes('glob') ||
|
|
252
|
-
name.includes('grep') ||
|
|
253
|
-
name.includes('find'));
|
|
254
|
-
}
|
|
255
|
-
function extractCommands(entry) {
|
|
256
|
-
const commands = [];
|
|
257
|
-
const args = entry.args;
|
|
258
|
-
const command = args['command'];
|
|
259
|
-
if (typeof command === 'string' && command.trim()) {
|
|
260
|
-
commands.push(command.trim());
|
|
261
|
-
}
|
|
262
|
-
const commandList = args['commands'];
|
|
263
|
-
if (Array.isArray(commandList)) {
|
|
264
|
-
for (const value of commandList) {
|
|
265
|
-
if (typeof value === 'string' && value.trim()) {
|
|
266
|
-
commands.push(value.trim());
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
return commands;
|
|
271
|
-
}
|
|
272
|
-
function commandSuggestsWrite(command) {
|
|
273
|
-
const normalized = command.toLowerCase();
|
|
274
|
-
return (normalized.includes('cat >') ||
|
|
275
|
-
normalized.includes('tee ') ||
|
|
276
|
-
normalized.includes('apply_patch') ||
|
|
277
|
-
normalized.includes('>>') ||
|
|
278
|
-
/\b(sed|perl|python)\s+-i\b/.test(normalized) ||
|
|
279
|
-
/\b(git\s+(apply|checkout|commit|push))\b/.test(normalized));
|
|
280
|
-
}
|
|
281
|
-
function commandSuggestsValidation(command) {
|
|
282
|
-
const normalized = command.toLowerCase();
|
|
283
|
-
return (/\b(npm|yarn|pnpm)\s+(run\s+)?(test|lint|build|typecheck|type-check)\b/.test(normalized) ||
|
|
284
|
-
/\b(jest|vitest|mocha|ava|pytest|go\s+test|cargo\s+test|pytest)\b/.test(normalized) ||
|
|
285
|
-
/\b(tsc|eslint|flake8|mypy|ruff)\b/.test(normalized));
|
|
286
|
-
}
|
|
287
|
-
function commandIsGitDiff(command) {
|
|
288
|
-
const normalized = command.toLowerCase();
|
|
289
|
-
return /\bgit\s+(diff|show)\b/.test(normalized);
|
|
290
|
-
}
|
|
291
|
-
function commandIsGitStatus(command) {
|
|
292
|
-
const normalized = command.toLowerCase();
|
|
293
|
-
return /\bgit\s+status\b/.test(normalized);
|
|
294
|
-
}
|
|
295
|
-
function containsKeyword(text, keywords) {
|
|
296
|
-
const lower = text.toLowerCase();
|
|
297
|
-
return keywords.some((keyword) => lower.includes(keyword));
|
|
298
|
-
}
|
|
299
|
-
//# sourceMappingURL=aiFlowSupervisor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"aiFlowSupervisor.js","sourceRoot":"","sources":["../../src/core/aiFlowSupervisor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,200 +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 { EventEmitter } from 'node:events';
|
|
13
|
-
export interface CLITestConfig {
|
|
14
|
-
/** Working directory for the CLI */
|
|
15
|
-
cwd: string;
|
|
16
|
-
/** Environment variables */
|
|
17
|
-
env?: Record<string, string>;
|
|
18
|
-
/** Timeout for the entire test (ms) */
|
|
19
|
-
timeout?: number;
|
|
20
|
-
/** Whether to use PTY mode (requires node-pty) */
|
|
21
|
-
usePty?: boolean;
|
|
22
|
-
/** Path to CLI entry point */
|
|
23
|
-
cliPath?: string;
|
|
24
|
-
}
|
|
25
|
-
export interface TestInput {
|
|
26
|
-
/** Type of input to send */
|
|
27
|
-
type: 'text' | 'paste' | 'key' | 'wait';
|
|
28
|
-
/** The content to send */
|
|
29
|
-
content?: string;
|
|
30
|
-
/** For 'key' type: special key name */
|
|
31
|
-
key?: 'enter' | 'tab' | 'escape' | 'ctrl-c' | 'ctrl-d';
|
|
32
|
-
/** For 'wait' type: milliseconds to wait */
|
|
33
|
-
delay?: number;
|
|
34
|
-
}
|
|
35
|
-
export interface TestExpectation {
|
|
36
|
-
/** Type of expectation */
|
|
37
|
-
type: 'output_contains' | 'output_matches' | 'output_not_contains' | 'exit_code';
|
|
38
|
-
/** Pattern or value to check */
|
|
39
|
-
value: string | number | RegExp;
|
|
40
|
-
/** Description for error messages */
|
|
41
|
-
description?: string;
|
|
42
|
-
/** Timeout for this specific expectation (ms) */
|
|
43
|
-
timeout?: number;
|
|
44
|
-
}
|
|
45
|
-
export interface CLITestScenario {
|
|
46
|
-
/** Unique test identifier */
|
|
47
|
-
id: string;
|
|
48
|
-
/** Human-readable description */
|
|
49
|
-
description: string;
|
|
50
|
-
/** Category of test */
|
|
51
|
-
category: 'paste' | 'input' | 'command' | 'output' | 'behavior';
|
|
52
|
-
/** Sequence of inputs to send */
|
|
53
|
-
inputs: TestInput[];
|
|
54
|
-
/** Expected outcomes */
|
|
55
|
-
expectations: TestExpectation[];
|
|
56
|
-
/** Setup commands to run before test */
|
|
57
|
-
setup?: string[];
|
|
58
|
-
/** Cleanup commands to run after test */
|
|
59
|
-
cleanup?: string[];
|
|
60
|
-
}
|
|
61
|
-
export interface TestResult {
|
|
62
|
-
scenario: CLITestScenario;
|
|
63
|
-
passed: boolean;
|
|
64
|
-
duration: number;
|
|
65
|
-
output: string;
|
|
66
|
-
errors: string[];
|
|
67
|
-
expectations: Array<{
|
|
68
|
-
expectation: TestExpectation;
|
|
69
|
-
passed: boolean;
|
|
70
|
-
actual?: string;
|
|
71
|
-
reason?: string;
|
|
72
|
-
}>;
|
|
73
|
-
}
|
|
74
|
-
declare const SPECIAL_KEYS: Record<string, string>;
|
|
75
|
-
export declare class CLITestHarness extends EventEmitter {
|
|
76
|
-
private config;
|
|
77
|
-
private process;
|
|
78
|
-
private output;
|
|
79
|
-
private errors;
|
|
80
|
-
private exitCode;
|
|
81
|
-
private ptyModule;
|
|
82
|
-
constructor(config: CLITestConfig);
|
|
83
|
-
/**
|
|
84
|
-
* Try to load node-pty for true PTY support
|
|
85
|
-
*/
|
|
86
|
-
private loadPtyModule;
|
|
87
|
-
/**
|
|
88
|
-
* Start the CLI process
|
|
89
|
-
*/
|
|
90
|
-
start(): Promise<void>;
|
|
91
|
-
/**
|
|
92
|
-
* Start CLI with PTY (for interactive features like bracketed paste)
|
|
93
|
-
*/
|
|
94
|
-
private startWithPty;
|
|
95
|
-
/**
|
|
96
|
-
* Start CLI with standard stdio (fallback, limited interactive support)
|
|
97
|
-
*/
|
|
98
|
-
private startWithStdio;
|
|
99
|
-
/**
|
|
100
|
-
* Send input to the CLI
|
|
101
|
-
*/
|
|
102
|
-
write(input: string): void;
|
|
103
|
-
/**
|
|
104
|
-
* Send a bracketed paste sequence
|
|
105
|
-
*/
|
|
106
|
-
paste(content: string): void;
|
|
107
|
-
/**
|
|
108
|
-
* Send a special key
|
|
109
|
-
*/
|
|
110
|
-
sendKey(key: keyof typeof SPECIAL_KEYS): void;
|
|
111
|
-
/**
|
|
112
|
-
* Wait for output matching a pattern
|
|
113
|
-
*/
|
|
114
|
-
waitForOutput(pattern: string | RegExp, timeout?: number): Promise<string>;
|
|
115
|
-
/**
|
|
116
|
-
* Wait for a specified duration
|
|
117
|
-
*/
|
|
118
|
-
wait(ms: number): Promise<void>;
|
|
119
|
-
/**
|
|
120
|
-
* Get current output
|
|
121
|
-
*/
|
|
122
|
-
getOutput(): string;
|
|
123
|
-
/**
|
|
124
|
-
* Get current errors
|
|
125
|
-
*/
|
|
126
|
-
getErrors(): string;
|
|
127
|
-
/**
|
|
128
|
-
* Stop the CLI process
|
|
129
|
-
*/
|
|
130
|
-
stop(): Promise<number>;
|
|
131
|
-
/**
|
|
132
|
-
* Run a complete test scenario
|
|
133
|
-
*/
|
|
134
|
-
runScenario(scenario: CLITestScenario): Promise<TestResult>;
|
|
135
|
-
/**
|
|
136
|
-
* Execute a single input action
|
|
137
|
-
*/
|
|
138
|
-
private executeInput;
|
|
139
|
-
/**
|
|
140
|
-
* Check a single expectation
|
|
141
|
-
*/
|
|
142
|
-
private checkExpectation;
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* Create a paste handling test scenario
|
|
146
|
-
*/
|
|
147
|
-
export declare function createPasteTestScenario(content: string, expectedLineCount: number): CLITestScenario;
|
|
148
|
-
/**
|
|
149
|
-
* Create a multi-line input test scenario
|
|
150
|
-
*/
|
|
151
|
-
export declare function createMultiLineInputScenario(): CLITestScenario;
|
|
152
|
-
/**
|
|
153
|
-
* Create a slash command test scenario
|
|
154
|
-
*/
|
|
155
|
-
export declare function createSlashCommandScenario(command: string): CLITestScenario;
|
|
156
|
-
/**
|
|
157
|
-
* Run verification tests for a specific claim type
|
|
158
|
-
*/
|
|
159
|
-
export declare function runVerificationTests(claimType: string, workingDir: string): Promise<{
|
|
160
|
-
passed: boolean;
|
|
161
|
-
results: TestResult[];
|
|
162
|
-
summary: string;
|
|
163
|
-
}>;
|
|
164
|
-
/**
|
|
165
|
-
* Claim structure for unified verification
|
|
166
|
-
*/
|
|
167
|
-
export interface VerificationClaim {
|
|
168
|
-
id: string;
|
|
169
|
-
statement: string;
|
|
170
|
-
category: string;
|
|
171
|
-
context: Record<string, unknown>;
|
|
172
|
-
}
|
|
173
|
-
/**
|
|
174
|
-
* Result of verifying a single claim
|
|
175
|
-
*/
|
|
176
|
-
export interface UnifiedClaimResult {
|
|
177
|
-
claim: VerificationClaim;
|
|
178
|
-
passed: boolean;
|
|
179
|
-
method: 'pty' | 'shell' | 'file_check' | 'unit_test';
|
|
180
|
-
output: string;
|
|
181
|
-
error?: string;
|
|
182
|
-
duration: number;
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* Verify a single claim using the appropriate method (PTY-based)
|
|
186
|
-
*/
|
|
187
|
-
export declare function verifyClaim(claim: VerificationClaim, workingDir: string): Promise<UnifiedClaimResult>;
|
|
188
|
-
/**
|
|
189
|
-
* Verify all claims using unified PTY harness
|
|
190
|
-
*/
|
|
191
|
-
export declare function verifyAllClaims(claims: VerificationClaim[], workingDir: string): Promise<{
|
|
192
|
-
results: UnifiedClaimResult[];
|
|
193
|
-
summary: {
|
|
194
|
-
total: number;
|
|
195
|
-
passed: number;
|
|
196
|
-
failed: number;
|
|
197
|
-
};
|
|
198
|
-
}>;
|
|
199
|
-
export default CLITestHarness;
|
|
200
|
-
//# sourceMappingURL=cliTestHarness.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cliTestHarness.d.ts","sourceRoot":"","sources":["../../src/core/cliTestHarness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAM3C,MAAM,WAAW,aAAa;IAC5B,oCAAoC;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,4BAA4B;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,4BAA4B;IAC5B,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;IACxC,0BAA0B;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uCAAuC;IACvC,GAAG,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACvD,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,0BAA0B;IAC1B,IAAI,EAAE,iBAAiB,GAAG,gBAAgB,GAAG,qBAAqB,GAAG,WAAW,CAAC;IACjF,gCAAgC;IAChC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAChC,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,6BAA6B;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB;IACvB,QAAQ,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;IAChE,iCAAiC;IACjC,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,wBAAwB;IACxB,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,eAAe,CAAC;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,EAAE,KAAK,CAAC;QAClB,WAAW,EAAE,eAAe,CAAC;QAC7B,MAAM,EAAE,OAAO,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;CACJ;AASD,QAAA,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMxC,CAAC;AAMF,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,SAAS,CAAa;gBAElB,MAAM,EAAE,aAAa;IAWjC;;OAEG;YACW,aAAa;IAa3B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAsB5B;;OAEG;YACW,YAAY;IAsB1B;;OAEG;YACW,cAAc;IAyB5B;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAY1B;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI5B;;OAEG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,OAAO,YAAY,GAAG,IAAI;IAO7C;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,GAAE,MAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAuBtF;;OAEG;IACG,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrC;;OAEG;IACH,SAAS,IAAI,MAAM;IAInB;;OAEG;IACH,SAAS,IAAI,MAAM;IAInB;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAuB7B;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC;IAgDjE;;OAEG;YACW,YAAY;IA0B1B;;OAEG;YACW,gBAAgB;CAkF/B;AAMD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,eAAe,CAoBnG;AAED;;GAEG;AACH,wBAAgB,4BAA4B,IAAI,eAAe,CA2B9D;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAmB3E;AAMD;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC;IACT,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC,CA8ED;AAMD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,iBAAiB,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,KAAK,GAAG,OAAO,GAAG,YAAY,GAAG,WAAW,CAAC;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,iBAAiB,EACxB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,kBAAkB,CAAC,CAiB7B;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,iBAAiB,EAAE,EAC3B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC;IACT,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5D,CAAC,CAeD;AAED,eAAe,cAAc,CAAC"}
|