erosolar-cli 2.1.172 → 2.1.174

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.
Files changed (172) hide show
  1. package/README.md +1 -1
  2. package/agents/erosolar-code.rules.json +2 -2
  3. package/agents/general.rules.json +21 -3
  4. package/dist/capabilities/statusCapability.js +2 -2
  5. package/dist/capabilities/statusCapability.js.map +1 -1
  6. package/dist/contracts/agent-schemas.json +5 -5
  7. package/dist/core/agent.d.ts +83 -24
  8. package/dist/core/agent.d.ts.map +1 -1
  9. package/dist/core/agent.js +499 -248
  10. package/dist/core/agent.js.map +1 -1
  11. package/dist/core/preferences.d.ts +1 -0
  12. package/dist/core/preferences.d.ts.map +1 -1
  13. package/dist/core/preferences.js +8 -1
  14. package/dist/core/preferences.js.map +1 -1
  15. package/dist/core/reliabilityPrompt.d.ts +9 -0
  16. package/dist/core/reliabilityPrompt.d.ts.map +1 -0
  17. package/dist/core/reliabilityPrompt.js +31 -0
  18. package/dist/core/reliabilityPrompt.js.map +1 -0
  19. package/dist/core/schemaValidator.js +3 -3
  20. package/dist/core/schemaValidator.js.map +1 -1
  21. package/dist/core/toolPreconditions.d.ts +0 -11
  22. package/dist/core/toolPreconditions.d.ts.map +1 -1
  23. package/dist/core/toolPreconditions.js +33 -164
  24. package/dist/core/toolPreconditions.js.map +1 -1
  25. package/dist/core/toolRuntime.d.ts.map +1 -1
  26. package/dist/core/toolRuntime.js +9 -114
  27. package/dist/core/toolRuntime.js.map +1 -1
  28. package/dist/core/updateChecker.d.ts +61 -1
  29. package/dist/core/updateChecker.d.ts.map +1 -1
  30. package/dist/core/updateChecker.js +147 -3
  31. package/dist/core/updateChecker.js.map +1 -1
  32. package/dist/headless/headlessApp.d.ts.map +1 -1
  33. package/dist/headless/headlessApp.js +0 -39
  34. package/dist/headless/headlessApp.js.map +1 -1
  35. package/dist/plugins/tools/nodeDefaults.d.ts.map +1 -1
  36. package/dist/plugins/tools/nodeDefaults.js +0 -2
  37. package/dist/plugins/tools/nodeDefaults.js.map +1 -1
  38. package/dist/providers/openaiResponsesProvider.d.ts.map +1 -1
  39. package/dist/providers/openaiResponsesProvider.js +79 -74
  40. package/dist/providers/openaiResponsesProvider.js.map +1 -1
  41. package/dist/runtime/agentController.d.ts.map +1 -1
  42. package/dist/runtime/agentController.js +6 -3
  43. package/dist/runtime/agentController.js.map +1 -1
  44. package/dist/runtime/agentSession.d.ts +0 -2
  45. package/dist/runtime/agentSession.d.ts.map +1 -1
  46. package/dist/runtime/agentSession.js +2 -2
  47. package/dist/runtime/agentSession.js.map +1 -1
  48. package/dist/shell/interactiveShell.d.ts +11 -18
  49. package/dist/shell/interactiveShell.d.ts.map +1 -1
  50. package/dist/shell/interactiveShell.js +273 -291
  51. package/dist/shell/interactiveShell.js.map +1 -1
  52. package/dist/shell/shellApp.d.ts.map +1 -1
  53. package/dist/shell/shellApp.js +7 -1
  54. package/dist/shell/shellApp.js.map +1 -1
  55. package/dist/shell/systemPrompt.d.ts.map +1 -1
  56. package/dist/shell/systemPrompt.js +4 -15
  57. package/dist/shell/systemPrompt.js.map +1 -1
  58. package/dist/subagents/taskRunner.js +2 -1
  59. package/dist/subagents/taskRunner.js.map +1 -1
  60. package/dist/tools/bashTools.d.ts.map +1 -1
  61. package/dist/tools/bashTools.js +101 -8
  62. package/dist/tools/bashTools.js.map +1 -1
  63. package/dist/tools/diffUtils.d.ts +8 -2
  64. package/dist/tools/diffUtils.d.ts.map +1 -1
  65. package/dist/tools/diffUtils.js +72 -13
  66. package/dist/tools/diffUtils.js.map +1 -1
  67. package/dist/tools/grepTools.d.ts.map +1 -1
  68. package/dist/tools/grepTools.js +10 -2
  69. package/dist/tools/grepTools.js.map +1 -1
  70. package/dist/tools/planningTools.d.ts +0 -10
  71. package/dist/tools/planningTools.d.ts.map +1 -1
  72. package/dist/tools/planningTools.js +0 -16
  73. package/dist/tools/planningTools.js.map +1 -1
  74. package/dist/tools/searchTools.d.ts.map +1 -1
  75. package/dist/tools/searchTools.js +4 -2
  76. package/dist/tools/searchTools.js.map +1 -1
  77. package/dist/ui/PromptController.d.ts +1 -4
  78. package/dist/ui/PromptController.d.ts.map +1 -1
  79. package/dist/ui/PromptController.js +1 -7
  80. package/dist/ui/PromptController.js.map +1 -1
  81. package/dist/ui/ShellUIAdapter.d.ts +292 -28
  82. package/dist/ui/ShellUIAdapter.d.ts.map +1 -1
  83. package/dist/ui/ShellUIAdapter.js +1513 -121
  84. package/dist/ui/ShellUIAdapter.js.map +1 -1
  85. package/dist/ui/UnifiedUIController.d.ts +81 -0
  86. package/dist/ui/UnifiedUIController.d.ts.map +1 -0
  87. package/dist/ui/UnifiedUIController.js +212 -0
  88. package/dist/ui/UnifiedUIController.js.map +1 -0
  89. package/dist/ui/UnifiedUIRenderer.d.ts +133 -30
  90. package/dist/ui/UnifiedUIRenderer.d.ts.map +1 -1
  91. package/dist/ui/UnifiedUIRenderer.js +939 -370
  92. package/dist/ui/UnifiedUIRenderer.js.map +1 -1
  93. package/dist/ui/animatedStatus.d.ts +128 -6
  94. package/dist/ui/animatedStatus.d.ts.map +1 -1
  95. package/dist/ui/animatedStatus.js +383 -50
  96. package/dist/ui/animatedStatus.js.map +1 -1
  97. package/dist/ui/animation/AnimationScheduler.d.ts +192 -0
  98. package/dist/ui/animation/AnimationScheduler.d.ts.map +1 -0
  99. package/dist/ui/animation/AnimationScheduler.js +432 -0
  100. package/dist/ui/animation/AnimationScheduler.js.map +1 -0
  101. package/dist/ui/display.d.ts +182 -26
  102. package/dist/ui/display.d.ts.map +1 -1
  103. package/dist/ui/display.js +678 -97
  104. package/dist/ui/display.js.map +1 -1
  105. package/dist/ui/inPlaceUpdater.d.ts +181 -0
  106. package/dist/ui/inPlaceUpdater.d.ts.map +1 -0
  107. package/dist/ui/inPlaceUpdater.js +515 -0
  108. package/dist/ui/inPlaceUpdater.js.map +1 -0
  109. package/dist/ui/interrupts/InterruptManager.d.ts +142 -0
  110. package/dist/ui/interrupts/InterruptManager.d.ts.map +1 -0
  111. package/dist/ui/interrupts/InterruptManager.js +439 -0
  112. package/dist/ui/interrupts/InterruptManager.js.map +1 -0
  113. package/dist/ui/layout.d.ts +0 -1
  114. package/dist/ui/layout.d.ts.map +1 -1
  115. package/dist/ui/layout.js +0 -12
  116. package/dist/ui/layout.js.map +1 -1
  117. package/dist/ui/orchestration/UIUpdateCoordinator.d.ts +61 -7
  118. package/dist/ui/orchestration/UIUpdateCoordinator.d.ts.map +1 -1
  119. package/dist/ui/orchestration/UIUpdateCoordinator.js +232 -20
  120. package/dist/ui/orchestration/UIUpdateCoordinator.js.map +1 -1
  121. package/dist/ui/shortcutsHelp.d.ts.map +1 -1
  122. package/dist/ui/shortcutsHelp.js +0 -1
  123. package/dist/ui/shortcutsHelp.js.map +1 -1
  124. package/dist/ui/telemetry/ResponseTracker.d.ts +22 -0
  125. package/dist/ui/telemetry/ResponseTracker.d.ts.map +1 -0
  126. package/dist/ui/telemetry/ResponseTracker.js +60 -0
  127. package/dist/ui/telemetry/ResponseTracker.js.map +1 -0
  128. package/dist/ui/telemetry/UITelemetry.d.ts +181 -0
  129. package/dist/ui/telemetry/UITelemetry.d.ts.map +1 -0
  130. package/dist/ui/telemetry/UITelemetry.js +446 -0
  131. package/dist/ui/telemetry/UITelemetry.js.map +1 -0
  132. package/dist/ui/unified/index.d.ts +30 -1
  133. package/dist/ui/unified/index.d.ts.map +1 -1
  134. package/dist/ui/unified/index.js +45 -2
  135. package/dist/ui/unified/index.js.map +1 -1
  136. package/dist/ui/unified/layout.d.ts +12 -0
  137. package/dist/ui/unified/layout.d.ts.map +1 -0
  138. package/dist/ui/unified/layout.js +96 -0
  139. package/dist/ui/unified/layout.js.map +1 -0
  140. package/package.json +2 -3
  141. package/dist/StringUtils.d.ts +0 -8
  142. package/dist/StringUtils.d.ts.map +0 -1
  143. package/dist/StringUtils.js +0 -11
  144. package/dist/StringUtils.js.map +0 -1
  145. package/dist/core/aiFlowSupervisor.d.ts +0 -44
  146. package/dist/core/aiFlowSupervisor.d.ts.map +0 -1
  147. package/dist/core/aiFlowSupervisor.js +0 -299
  148. package/dist/core/aiFlowSupervisor.js.map +0 -1
  149. package/dist/core/cliTestHarness.d.ts +0 -200
  150. package/dist/core/cliTestHarness.d.ts.map +0 -1
  151. package/dist/core/cliTestHarness.js +0 -549
  152. package/dist/core/cliTestHarness.js.map +0 -1
  153. package/dist/core/testUtils.d.ts +0 -121
  154. package/dist/core/testUtils.d.ts.map +0 -1
  155. package/dist/core/testUtils.js +0 -235
  156. package/dist/core/testUtils.js.map +0 -1
  157. package/dist/core/toolValidation.d.ts +0 -116
  158. package/dist/core/toolValidation.d.ts.map +0 -1
  159. package/dist/core/toolValidation.js +0 -282
  160. package/dist/core/toolValidation.js.map +0 -1
  161. package/dist/ui/planOverlay.d.ts +0 -28
  162. package/dist/ui/planOverlay.d.ts.map +0 -1
  163. package/dist/ui/planOverlay.js +0 -156
  164. package/dist/ui/planOverlay.js.map +0 -1
  165. package/dist/ui/streamingFormatter.d.ts +0 -30
  166. package/dist/ui/streamingFormatter.d.ts.map +0 -1
  167. package/dist/ui/streamingFormatter.js +0 -91
  168. package/dist/ui/streamingFormatter.js.map +0 -1
  169. package/dist/utils/errorUtils.d.ts +0 -16
  170. package/dist/utils/errorUtils.d.ts.map +0 -1
  171. package/dist/utils/errorUtils.js +0 -66
  172. package/dist/utils/errorUtils.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"testUtils.d.ts","sourceRoot":"","sources":["../../src/core/testUtils.ts"],"names":[],"mappings":"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"}
@@ -1,235 +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 { validateToolArguments, ToolArgumentValidationError } from './schemaValidator.js';
6
- import { validateToolPreconditions, validateAIFlowPatterns } from './toolPreconditions.js';
7
- /**
8
- * Test utilities for tool validation and AI flow testing
9
- */
10
- export var ToolTestUtils;
11
- (function (ToolTestUtils) {
12
- /**
13
- * Creates a mock tool call for testing
14
- */
15
- function createMockToolCall(name, args = {}) {
16
- return {
17
- id: `test-${Date.now()}-${Math.random().toString(36).substring(2)}`,
18
- name,
19
- arguments: args
20
- };
21
- }
22
- ToolTestUtils.createMockToolCall = createMockToolCall;
23
- /**
24
- * Creates a mock successful tool response
25
- */
26
- function createMockSuccessResponse(content, metadata) {
27
- return {
28
- type: 'success',
29
- content,
30
- metadata: {
31
- timestamp: Date.now(),
32
- toolName: 'test-tool',
33
- ...metadata
34
- }
35
- };
36
- }
37
- ToolTestUtils.createMockSuccessResponse = createMockSuccessResponse;
38
- /**
39
- * Creates a mock error tool response
40
- */
41
- function createMockErrorResponse(code, message, recoverable = false) {
42
- return {
43
- type: 'error',
44
- error: {
45
- code,
46
- message,
47
- recoverable,
48
- toolName: 'test-tool'
49
- }
50
- };
51
- }
52
- ToolTestUtils.createMockErrorResponse = createMockErrorResponse;
53
- /**
54
- * Creates a mock warning tool response
55
- */
56
- function createMockWarningResponse(content, warnings) {
57
- return {
58
- type: 'warning',
59
- content,
60
- warnings
61
- };
62
- }
63
- ToolTestUtils.createMockWarningResponse = createMockWarningResponse;
64
- /**
65
- * Validates tool arguments against schema with detailed error reporting
66
- */
67
- function validateToolArgs(toolName, schema, args) {
68
- try {
69
- validateToolArguments(toolName, schema, args);
70
- return { ok: true, value: undefined };
71
- }
72
- catch (error) {
73
- if (error instanceof ToolArgumentValidationError) {
74
- return { ok: false, error: [...error.issues] };
75
- }
76
- return { ok: false, error: [String(error)] };
77
- }
78
- }
79
- ToolTestUtils.validateToolArgs = validateToolArgs;
80
- /**
81
- * Tests AI flow patterns with tool history simulation
82
- */
83
- function testAIFlowPatterns(toolName, args, toolHistory) {
84
- return {
85
- preflightWarnings: validateToolPreconditions(toolName, args),
86
- aiFlowWarnings: validateAIFlowPatterns(toolName, args, toolHistory)
87
- };
88
- }
89
- ToolTestUtils.testAIFlowPatterns = testAIFlowPatterns;
90
- /**
91
- * Type-safe assertion for tool responses
92
- */
93
- function assertToolSuccess(response) {
94
- if (response.type !== 'success') {
95
- throw new Error(`Expected success response, got ${response.type}`);
96
- }
97
- }
98
- ToolTestUtils.assertToolSuccess = assertToolSuccess;
99
- /**
100
- * Type-safe assertion for tool errors
101
- */
102
- function assertToolError(response) {
103
- if (response.type !== 'error') {
104
- throw new Error(`Expected error response, got ${response.type}`);
105
- }
106
- }
107
- ToolTestUtils.assertToolError = assertToolError;
108
- /**
109
- * Type-safe assertion for tool warnings
110
- */
111
- function assertToolWarning(response) {
112
- if (response.type !== 'warning') {
113
- throw new Error(`Expected warning response, got ${response.type}`);
114
- }
115
- }
116
- ToolTestUtils.assertToolWarning = assertToolWarning;
117
- /**
118
- * Creates a test suite for tool validation
119
- */
120
- function createToolTestSuite(toolName, schema) {
121
- return {
122
- /**
123
- * Test valid arguments
124
- */
125
- testValidArgs(args) {
126
- const result = validateToolArgs(toolName, schema, args);
127
- if (!result.ok) {
128
- throw new Error(`Expected valid arguments: ${result.error.join(', ')}`);
129
- }
130
- },
131
- /**
132
- * Test invalid arguments
133
- */
134
- testInvalidArgs(args, expectedErrors) {
135
- const result = validateToolArgs(toolName, schema, args);
136
- if (result.ok) {
137
- throw new Error('Expected invalid arguments');
138
- }
139
- const missingErrors = expectedErrors.filter(expected => !result.error.some(actual => actual.includes(expected)));
140
- if (missingErrors.length > 0) {
141
- throw new Error(`Missing expected errors: ${missingErrors.join(', ')}`);
142
- }
143
- },
144
- /**
145
- * Test required arguments
146
- */
147
- testRequiredArgs(requiredArgs) {
148
- for (const arg of requiredArgs) {
149
- const result = validateToolArgs(toolName, schema, {});
150
- if (result.ok || !result.error.some(e => e.includes(arg))) {
151
- throw new Error(`Expected missing required argument: ${arg}`);
152
- }
153
- }
154
- }
155
- };
156
- }
157
- ToolTestUtils.createToolTestSuite = createToolTestSuite;
158
- /**
159
- * Performance testing utilities
160
- */
161
- let Performance;
162
- (function (Performance) {
163
- /**
164
- * Measures tool execution time
165
- */
166
- async function measureExecutionTime(fn) {
167
- const start = performance.now();
168
- const result = await fn();
169
- const executionTime = performance.now() - start;
170
- return { result, executionTime };
171
- }
172
- Performance.measureExecutionTime = measureExecutionTime;
173
- /**
174
- * Runs performance benchmark
175
- */
176
- async function benchmark(fn, iterations = 100) {
177
- const times = [];
178
- for (let i = 0; i < iterations; i++) {
179
- const start = performance.now();
180
- await fn();
181
- const end = performance.now();
182
- times.push(end - start);
183
- }
184
- const totalTime = times.reduce((sum, time) => sum + time, 0);
185
- const averageTime = totalTime / iterations;
186
- const minTime = Math.min(...times);
187
- const maxTime = Math.max(...times);
188
- return { averageTime, minTime, maxTime, totalTime };
189
- }
190
- Performance.benchmark = benchmark;
191
- })(Performance = ToolTestUtils.Performance || (ToolTestUtils.Performance = {}));
192
- /**
193
- * AI flow testing utilities
194
- */
195
- let AIFlow;
196
- (function (AIFlow) {
197
- /**
198
- * Simulates a complete AI flow with tool history
199
- */
200
- function simulateAIFlow(flow) {
201
- const toolHistory = [];
202
- const results = [];
203
- for (const step of flow) {
204
- const warnings = validateAIFlowPatterns(step.toolName, step.args, toolHistory);
205
- results.push({
206
- toolName: step.toolName,
207
- args: step.args,
208
- warnings
209
- });
210
- // Add to history for next iteration
211
- toolHistory.push({
212
- toolName: step.toolName,
213
- args: step.args,
214
- timestamp: Date.now()
215
- });
216
- }
217
- return results;
218
- }
219
- AIFlow.simulateAIFlow = simulateAIFlow;
220
- /**
221
- * Tests for common AI flow anti-patterns
222
- */
223
- function detectAntiPatterns(flow) {
224
- const toolNames = flow.map(step => step.toolName);
225
- return {
226
- sequentialReads: toolNames.filter(name => name.includes('read') || name.includes('Read')).length > 1,
227
- editWithoutRead: toolNames.includes('Edit') && !toolNames.some(name => name.includes('read') || name.includes('Read')),
228
- multipleValidations: toolNames.filter(name => name.includes('test') || name.includes('validate') || name.includes('check')).length > 1,
229
- inefficientGitOps: toolNames.filter(name => name.includes('git') || name.includes('Git')).length > 2
230
- };
231
- }
232
- AIFlow.detectAntiPatterns = detectAntiPatterns;
233
- })(AIFlow = ToolTestUtils.AIFlow || (ToolTestUtils.AIFlow = {}));
234
- })(ToolTestUtils || (ToolTestUtils = {}));
235
- //# sourceMappingURL=testUtils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"testUtils.js","sourceRoot":"","sources":["../../src/core/testUtils.ts"],"names":[],"mappings":"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"}
@@ -1,116 +0,0 @@
1
- /**
2
- * Comprehensive Tool Validation System
3
- *
4
- * Provides proactive validation for AI tool usage with:
5
- * - Pre-flight validation before tool execution
6
- * - Real-time AI flow guidance
7
- * - Pattern-based anti-pattern detection
8
- * - Recovery suggestions for common failures
9
- */
10
- import type { ToolDefinition } from './toolRuntime.js';
11
- /**
12
- * Tool validation result
13
- */
14
- export interface ToolValidationResult {
15
- readonly valid: boolean;
16
- readonly warnings: ToolValidationWarning[];
17
- readonly suggestions: ToolValidationSuggestion[];
18
- readonly criticalErrors: ToolValidationError[];
19
- }
20
- /**
21
- * Tool validation warning
22
- */
23
- export interface ToolValidationWarning {
24
- readonly code: string;
25
- readonly message: string;
26
- readonly severity: 'low' | 'medium' | 'high';
27
- readonly suggestion?: string;
28
- }
29
- /**
30
- * Tool validation error
31
- */
32
- export interface ToolValidationError {
33
- readonly code: string;
34
- readonly message: string;
35
- readonly recovery?: string;
36
- }
37
- /**
38
- * Tool validation suggestion
39
- */
40
- export interface ToolValidationSuggestion {
41
- readonly code: string;
42
- readonly message: string;
43
- readonly action: string;
44
- }
45
- /**
46
- * AI flow guidance patterns
47
- */
48
- export interface AIFlowPattern {
49
- readonly pattern: string;
50
- readonly description: string;
51
- readonly guidance: string;
52
- readonly examples: string[];
53
- }
54
- /**
55
- * Tool usage context
56
- */
57
- export interface ToolUsageContext {
58
- readonly toolName: string;
59
- readonly parameters: Record<string, unknown>;
60
- readonly workspaceContext?: {
61
- readonly currentFiles: string[];
62
- readonly recentOperations: string[];
63
- readonly workspacePath: string;
64
- };
65
- }
66
- /**
67
- * Comprehensive tool validator
68
- */
69
- export declare class ToolValidator {
70
- private readonly patterns;
71
- /**
72
- * Validate tool usage before execution
73
- */
74
- validateToolUsage(tool: ToolDefinition, context: ToolUsageContext): ToolValidationResult;
75
- /**
76
- * Validate tool-specific patterns
77
- */
78
- private validateToolSpecific;
79
- /**
80
- * Validate Edit tool usage
81
- */
82
- private validateEditTool;
83
- /**
84
- * Validate search tools (Glob, Grep)
85
- */
86
- private validateSearchTools;
87
- /**
88
- * Validate bash commands
89
- */
90
- private validateBashCommands;
91
- /**
92
- * Validate AI flow patterns
93
- */
94
- private validateAIFlowPatterns;
95
- /**
96
- * Validate performance optimizations
97
- */
98
- private validatePerformance;
99
- private containsPlaceholderPattern;
100
- private isLongSingleLine;
101
- private hasIndentationMismatch;
102
- private detectIndentation;
103
- private isOverlyBroadPattern;
104
- private isBroadPattern;
105
- private mapFlowSeverity;
106
- /**
107
- * Get AI flow guidance for a specific pattern
108
- */
109
- getAIFlowGuidance(patternId: string): AIFlowPattern | undefined;
110
- /**
111
- * Get all AI flow patterns
112
- */
113
- getAllAIFlowPatterns(): AIFlowPattern[];
114
- }
115
- export declare const globalToolValidator: ToolValidator;
116
- //# sourceMappingURL=toolValidation.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"toolValidation.d.ts","sourceRoot":"","sources":["../../src/core/toolValidation.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGvD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,EAAE,CAAC;IAC3C,QAAQ,CAAC,WAAW,EAAE,wBAAwB,EAAE,CAAC;IACjD,QAAQ,CAAC,cAAc,EAAE,mBAAmB,EAAE,CAAC;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC7C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,QAAQ,CAAC,gBAAgB,CAAC,EAAE;QAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;QAChC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,EAAE,CAAC;QACpC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;KAChC,CAAC;CACH;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAuDvB;IAEF;;OAEG;IACH,iBAAiB,CACf,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,gBAAgB,GACxB,oBAAoB;IAsBvB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAqB5B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAuCxB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA4B3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA6B5B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAsB9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAwB3B,OAAO,CAAC,0BAA0B;IAWlC,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,sBAAsB;IAM9B,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,eAAe;IAWvB;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI/D;;OAEG;IACH,oBAAoB,IAAI,aAAa,EAAE;CAGxC;AAGD,eAAO,MAAM,mBAAmB,eAAsB,CAAC"}
@@ -1,282 +0,0 @@
1
- /**
2
- * Comprehensive Tool Validation System
3
- *
4
- * Provides proactive validation for AI tool usage with:
5
- * - Pre-flight validation before tool execution
6
- * - Real-time AI flow guidance
7
- * - Pattern-based anti-pattern detection
8
- * - Recovery suggestions for common failures
9
- */
10
- import { analyzeBashFlow } from './bashCommandGuidance.js';
11
- /**
12
- * Comprehensive tool validator
13
- */
14
- export class ToolValidator {
15
- patterns = [
16
- {
17
- pattern: 'edit_without_read',
18
- description: 'Attempting Edit tool without first reading the file',
19
- guidance: 'ALWAYS use Read tool before Edit tool to get exact text including whitespace and indentation',
20
- examples: [
21
- 'Edit tool called without preceding Read tool',
22
- 'old_string contains guessed content instead of exact file content'
23
- ]
24
- },
25
- {
26
- pattern: 'broad_search_pattern',
27
- description: 'Using overly broad search patterns that may cause context overflow',
28
- guidance: 'Use specific search patterns like "**/*.ts" or "src/**/*.js" instead of "*" or "."',
29
- examples: [
30
- 'Glob(".") or Glob("*") without head_limit',
31
- 'Search patterns that could return thousands of files'
32
- ]
33
- },
34
- {
35
- pattern: 'redundant_git_operations',
36
- description: 'Running multiple git status calls or inefficient git command chains',
37
- guidance: 'Use single combined commands: "git add -A && git commit -m msg && git push"',
38
- examples: [
39
- 'git status → git add → git status → git commit → git push',
40
- 'Multiple git status calls in sequence'
41
- ]
42
- },
43
- {
44
- pattern: 'incomplete_npm_publish',
45
- description: 'npm publish detected without confirming release prerequisites',
46
- guidance: 'Ensure auth, version bump, build/tests, publish, and git push follow the project release process; automation (npm_publish) is preferred but not required',
47
- examples: [
48
- 'Running npm publish before bumping version',
49
- 'Publishing without build/test steps required by the project'
50
- ]
51
- },
52
- {
53
- pattern: 'sequential_file_reads',
54
- description: 'Reading files sequentially when parallel execution is possible',
55
- guidance: 'Use parallel tool calls for independent file reads to improve performance',
56
- examples: [
57
- 'Multiple Read calls in separate tool calls',
58
- 'Sequential file operations that could be parallelized'
59
- ]
60
- },
61
- {
62
- pattern: 'validation_after_each_edit',
63
- description: 'Running validation after each individual edit',
64
- guidance: 'Complete ALL edits first, run ONE validation at the end only if needed',
65
- examples: [
66
- 'Running type-check after each file edit',
67
- 'Running build/test after every small change'
68
- ]
69
- }
70
- ];
71
- /**
72
- * Validate tool usage before execution
73
- */
74
- validateToolUsage(tool, context) {
75
- const warnings = [];
76
- const suggestions = [];
77
- const criticalErrors = [];
78
- // Tool-specific validation
79
- this.validateToolSpecific(tool, context, warnings, suggestions, criticalErrors);
80
- // AI flow pattern validation
81
- this.validateAIFlowPatterns(tool, context, warnings, suggestions);
82
- // Performance optimization validation
83
- this.validatePerformance(tool, context, warnings, suggestions);
84
- return {
85
- valid: criticalErrors.length === 0,
86
- warnings,
87
- suggestions,
88
- criticalErrors
89
- };
90
- }
91
- /**
92
- * Validate tool-specific patterns
93
- */
94
- validateToolSpecific(tool, context, warnings, suggestions, criticalErrors) {
95
- switch (tool.name) {
96
- case 'Edit':
97
- this.validateEditTool(tool, context, warnings, criticalErrors);
98
- break;
99
- case 'Glob':
100
- case 'Grep':
101
- this.validateSearchTools(tool, context, warnings, suggestions);
102
- break;
103
- case 'execute_bash':
104
- this.validateBashCommands(tool, context, warnings, suggestions);
105
- break;
106
- }
107
- }
108
- /**
109
- * Validate Edit tool usage
110
- */
111
- validateEditTool(tool, context, warnings, criticalErrors) {
112
- const params = tool.parameters;
113
- // Check for placeholder patterns in old_string
114
- if (params.old_string && this.containsPlaceholderPattern(params.old_string)) {
115
- warnings.push({
116
- code: 'EDIT_PLACEHOLDER_DETECTED',
117
- message: 'Edit tool old_string contains placeholder patterns',
118
- severity: 'high',
119
- suggestion: 'Use Read tool first to get exact file content instead of guessing'
120
- });
121
- }
122
- // Check for long single lines (likely guessed content)
123
- if (params.old_string && this.isLongSingleLine(params.old_string)) {
124
- warnings.push({
125
- code: 'EDIT_LONG_SINGLE_LINE',
126
- message: 'Edit tool old_string is a long single line (likely guessed content)',
127
- severity: 'medium',
128
- suggestion: 'Read the file first to get exact multi-line content'
129
- });
130
- }
131
- // Check for indentation mismatches
132
- if (params.old_string && params.new_string && this.hasIndentationMismatch(params.old_string, params.new_string)) {
133
- warnings.push({
134
- code: 'EDIT_INDENTATION_MISMATCH',
135
- message: 'Edit tool old_string and new_string have indentation mismatches',
136
- severity: 'high',
137
- suggestion: 'Ensure exact whitespace matching between old and new strings'
138
- });
139
- }
140
- }
141
- /**
142
- * Validate search tools (Glob, Grep)
143
- */
144
- validateSearchTools(tool, context, warnings, suggestions) {
145
- const params = tool.parameters;
146
- // Check for overly broad patterns
147
- if (params.pattern && this.isOverlyBroadPattern(params.pattern)) {
148
- warnings.push({
149
- code: 'SEARCH_OVERLY_BROAD',
150
- message: `Search pattern "${params.pattern}" is overly broad`,
151
- severity: 'medium',
152
- suggestion: 'Use specific patterns like "**/*.ts" or add head_limit parameter'
153
- });
154
- }
155
- // Suggest head_limit for broad patterns
156
- if (params.pattern && this.isBroadPattern(params.pattern) && !params.head_limit) {
157
- suggestions.push({
158
- code: 'SEARCH_SUGGEST_HEAD_LIMIT',
159
- message: 'Broad search pattern detected without head_limit',
160
- action: 'Add head_limit parameter to prevent context overflow'
161
- });
162
- }
163
- }
164
- /**
165
- * Validate bash commands
166
- */
167
- validateBashCommands(tool, context, warnings, suggestions) {
168
- const params = tool.parameters;
169
- if (!params.command)
170
- return;
171
- const flowWarnings = analyzeBashFlow(params.command);
172
- for (const flow of flowWarnings) {
173
- warnings.push({
174
- code: flow.code,
175
- message: flow.message,
176
- severity: this.mapFlowSeverity(flow.severity),
177
- suggestion: flow.suggestion,
178
- });
179
- if (flow.suggestion) {
180
- suggestions.push({
181
- code: flow.code,
182
- message: flow.message,
183
- action: flow.suggestion,
184
- });
185
- }
186
- }
187
- }
188
- /**
189
- * Validate AI flow patterns
190
- */
191
- validateAIFlowPatterns(tool, context, warnings, suggestions) {
192
- // Check for sequential file reads
193
- if (tool.name === 'read_file' && context.workspaceContext?.recentOperations) {
194
- const recentReads = context.workspaceContext.recentOperations
195
- .filter(op => op === 'read_file')
196
- .length;
197
- if (recentReads > 2) {
198
- suggestions.push({
199
- code: 'PARALLEL_READ_SUGGESTION',
200
- message: 'Multiple sequential file reads detected',
201
- action: 'Use parallel tool calls (e.g., read_files) for independent file reads to improve performance'
202
- });
203
- }
204
- }
205
- }
206
- /**
207
- * Validate performance optimizations
208
- */
209
- validatePerformance(tool, context, warnings, suggestions) {
210
- // Add performance optimization suggestions
211
- if (tool.name === 'execute_bash' && context.workspaceContext?.recentOperations) {
212
- const recentValidations = context.workspaceContext.recentOperations
213
- .filter(op => op.includes('validate') || op.includes('test') || op.includes('build'))
214
- .length;
215
- if (recentValidations > 1) {
216
- warnings.push({
217
- code: 'EXCESSIVE_VALIDATION',
218
- message: 'Multiple validation operations detected',
219
- severity: 'low',
220
- suggestion: 'Complete ALL edits first, run ONE validation at the end only if needed'
221
- });
222
- }
223
- }
224
- }
225
- // Helper methods
226
- containsPlaceholderPattern(text) {
227
- const patterns = [
228
- /\.\.\./,
229
- /\[.*\]/,
230
- /\/\/.*\.\.\./,
231
- /TODO/,
232
- /FIXME/
233
- ];
234
- return patterns.some(pattern => pattern.test(text));
235
- }
236
- isLongSingleLine(text) {
237
- const lines = text.split('\n');
238
- return lines.length === 1 && text.length > 100;
239
- }
240
- hasIndentationMismatch(oldString, newString) {
241
- const oldIndent = this.detectIndentation(oldString);
242
- const newIndent = this.detectIndentation(newString);
243
- return oldIndent !== newIndent;
244
- }
245
- detectIndentation(text) {
246
- const firstLine = text.split('\n')[0] || '';
247
- const match = firstLine.match(/^(\s+)/);
248
- return match?.[1] ?? '';
249
- }
250
- isOverlyBroadPattern(pattern) {
251
- const broadPatterns = ['.', '*', '**'];
252
- return broadPatterns.includes(pattern);
253
- }
254
- isBroadPattern(pattern) {
255
- return pattern.includes('*') && !pattern.includes('.');
256
- }
257
- mapFlowSeverity(severity) {
258
- switch (severity) {
259
- case 'critical':
260
- return 'high';
261
- case 'info':
262
- return 'low';
263
- default:
264
- return 'medium';
265
- }
266
- }
267
- /**
268
- * Get AI flow guidance for a specific pattern
269
- */
270
- getAIFlowGuidance(patternId) {
271
- return this.patterns.find(p => p.pattern === patternId);
272
- }
273
- /**
274
- * Get all AI flow patterns
275
- */
276
- getAllAIFlowPatterns() {
277
- return [...this.patterns];
278
- }
279
- }
280
- // Global tool validator instance
281
- export const globalToolValidator = new ToolValidator();
282
- //# sourceMappingURL=toolValidation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"toolValidation.js","sourceRoot":"","sources":["../../src/core/toolValidation.ts"],"names":[],"mappings":"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"}