erosolar-cli 1.7.414 → 1.7.415

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.
@@ -108,7 +108,7 @@
108
108
  },
109
109
  {
110
110
  "id": "guardrail.npm_publish",
111
- "summary": "When publishing to npm, use single command chain: 'npm version patch && npm run build && npm publish && git push'. Do NOT check version separately, do NOT run dry-run unless asked.",
111
+ "summary": "When publishing to npm, ensure a full release flow (auth, version bump, build/tests, publish, git push) and adapt to project scripts or the npm_publish tool instead of hard-coding one command chain.",
112
112
  "severity": "critical"
113
113
  },
114
114
  {
@@ -78,7 +78,7 @@
78
78
  },
79
79
  {
80
80
  "id": "guardrail.npm_publish",
81
- "summary": "When publishing to npm, use single command chain: 'npm version patch && npm run build && npm publish && git push'. Do NOT check version separately.",
81
+ "summary": "When publishing to npm, follow a complete release flow (auth, version bump, build/tests, publish, git push) using the approach that fits the repo—prefer automation tools but avoid rigid command chains.",
82
82
  "severity": "critical"
83
83
  },
84
84
  {
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Centralized guidance for bash command flows.
3
+ * Keeps publish/git heuristics in one place so bash tooling stays concise.
4
+ */
5
+ export type BashFlowSeverity = 'info' | 'warning' | 'critical';
6
+ export interface BashFlowWarning {
7
+ readonly code: string;
8
+ readonly message: string;
9
+ readonly suggestion?: string;
10
+ readonly severity?: BashFlowSeverity;
11
+ }
12
+ /**
13
+ * Analyze a bash command for common workflow gaps (publish, git efficiency).
14
+ */
15
+ export declare function analyzeBashFlow(command: string): BashFlowWarning[];
16
+ //# sourceMappingURL=bashCommandGuidance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bashCommandGuidance.d.ts","sourceRoot":"","sources":["../../src/core/bashCommandGuidance.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;AAE/D,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CACtC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,EAAE,CAoClE"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Centralized guidance for bash command flows.
3
+ * Keeps publish/git heuristics in one place so bash tooling stays concise.
4
+ */
5
+ /**
6
+ * Analyze a bash command for common workflow gaps (publish, git efficiency).
7
+ */
8
+ export function analyzeBashFlow(command) {
9
+ const warnings = [];
10
+ const normalized = command.toLowerCase();
11
+ if (!normalized.trim()) {
12
+ return warnings;
13
+ }
14
+ // Git efficiency: avoid repeated status calls in a single command chain.
15
+ const gitStatusMatches = normalized.match(/git status/g);
16
+ if (gitStatusMatches && gitStatusMatches.length > 1) {
17
+ warnings.push({
18
+ code: 'GIT_REDUNDANT_STATUS',
19
+ message: 'Multiple git status calls detected in one command',
20
+ suggestion: 'Combine git operations: git add -A && git commit -m "msg" && git push',
21
+ severity: 'info',
22
+ });
23
+ }
24
+ // Publish flow completeness for npm-style commands.
25
+ if (normalized.includes('npm publish')) {
26
+ const hasVersionStep = /\b(?:npm|pnpm|yarn)\s+version\b/.test(normalized);
27
+ const hasBuildOrTests = /\b(?:npm|pnpm|yarn)\s+(?:run\s+)?(build|test|lint|prepare)\b/.test(normalized);
28
+ const hasGitPush = /\bgit\s+push\b/.test(normalized);
29
+ if (!(hasVersionStep && hasBuildOrTests && hasGitPush)) {
30
+ warnings.push({
31
+ code: 'NPM_INCOMPLETE_WORKFLOW',
32
+ message: 'npm publish detected without a complete release flow',
33
+ suggestion: 'Include version bump, build/tests, and git push or use npm_publish to automate the full release',
34
+ severity: 'warning',
35
+ });
36
+ }
37
+ }
38
+ return warnings;
39
+ }
40
+ //# sourceMappingURL=bashCommandGuidance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bashCommandGuidance.js","sourceRoot":"","sources":["../../src/core/bashCommandGuidance.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,MAAM,QAAQ,GAAsB,EAAE,CAAC;IACvC,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAEzC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;QACvB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,yEAAyE;IACzE,MAAM,gBAAgB,GAAG,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACzD,IAAI,gBAAgB,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,sBAAsB;YAC5B,OAAO,EAAE,mDAAmD;YAC5D,UAAU,EAAE,uEAAuE;YACnF,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAC;IACL,CAAC;IAED,oDAAoD;IACpD,IAAI,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACvC,MAAM,cAAc,GAAG,iCAAiC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1E,MAAM,eAAe,GAAG,8DAA8D,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACxG,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAErD,IAAI,CAAC,CAAC,cAAc,IAAI,eAAe,IAAI,UAAU,CAAC,EAAE,CAAC;YACvD,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,yBAAyB;gBAC/B,OAAO,EAAE,sDAAsD;gBAC/D,UAAU,EAAE,iGAAiG;gBAC7G,QAAQ,EAAE,SAAS;aACpB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Pre-flight validation patterns for AI flow design.
3
+ * Catches common tool usage failures before execution and provides actionable guidance.
4
+ */
5
+ export interface PreflightWarning {
6
+ readonly code: string;
7
+ readonly message: string;
8
+ readonly severity: 'critical' | 'warning' | 'info';
9
+ readonly suggestion: string;
10
+ }
11
+ export declare const AI_FLOW_VALIDATION_PATTERNS: {
12
+ readonly EDIT_LONG_SINGLE_LINE: RegExp;
13
+ readonly EDIT_PLACEHOLDER_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp];
14
+ readonly EDIT_FUNCTION_SIGNATURE: RegExp;
15
+ readonly SEARCH_OVERLY_BROAD: readonly [RegExp, RegExp, RegExp, RegExp];
16
+ readonly GIT_REDUNDANT_STATUS: RegExp;
17
+ readonly GIT_INEFFICIENT_CHAIN: RegExp;
18
+ readonly NPM_INCOMPLETE_PUBLISH: RegExp;
19
+ readonly CONTEXT_REDUNDANT_SNAPSHOT: RegExp;
20
+ readonly VALIDATION_EARLY_RUN: RegExp;
21
+ };
22
+ /**
23
+ * Validate tool preconditions before execution to prevent common AI flow failures.
24
+ *
25
+ * This function implements the critical AI flow design principle: validate before execute.
26
+ * It catches common patterns that lead to tool failures and provides actionable guidance.
27
+ *
28
+ * @param toolName - Name of the tool being called
29
+ * @param args - Tool arguments
30
+ * @returns Array of pre-flight warnings (empty if all validations pass)
31
+ */
32
+ export declare function validateToolPreconditions(toolName: string, args: Record<string, unknown>): PreflightWarning[];
33
+ /**
34
+ * Enhanced AI flow validation for TypeScript software engineering
35
+ * Provides comprehensive validation of AI tool usage patterns
36
+ */
37
+ export declare function validateAIFlowPatterns(toolName: string, args: Record<string, unknown>, toolHistory: readonly {
38
+ toolName: string;
39
+ args: Record<string, unknown>;
40
+ timestamp?: number;
41
+ }[]): PreflightWarning[];
42
+ //# sourceMappingURL=toolPreconditions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolPreconditions.d.ts","sourceRoot":"","sources":["../../src/core/toolPreconditions.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;IACnD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAGD,eAAO,MAAM,2BAA2B;;;;;;;;;;CA+B9B,CAAC;AAEX;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,gBAAgB,EAAE,CA8KpB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,WAAW,EAAE,SAAS;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,GAC9F,gBAAgB,EAAE,CA6EpB"}
@@ -0,0 +1,347 @@
1
+ import { existsSync, realpathSync } from 'node:fs';
2
+ import { basename, dirname, isAbsolute, join, normalize as normalizePath, resolve as resolvePath } from 'node:path';
3
+ import { analyzeBashFlow } from './bashCommandGuidance.js';
4
+ // Enhanced AI flow validation patterns for TypeScript software engineering
5
+ export const AI_FLOW_VALIDATION_PATTERNS = {
6
+ // Edit tool patterns
7
+ EDIT_LONG_SINGLE_LINE: /^[^\n]{50,}$/, // Long single line without newlines
8
+ EDIT_PLACEHOLDER_PATTERNS: [
9
+ /\.\.\./, // ... placeholder
10
+ /\[.*\]/, // [content] placeholder
11
+ /\/\/\s*\.\.\./, // // ... comment placeholder
12
+ /\/\*\s*\.\.\.\s*\*\//, // /* ... */ comment placeholder
13
+ ],
14
+ EDIT_FUNCTION_SIGNATURE: /^(function|class|const|let|var|export)\s+\w+\s*\([^)]*$/, // Unbalanced function signature
15
+ // Search patterns
16
+ SEARCH_OVERLY_BROAD: [
17
+ /^\*$/, // Single asterisk
18
+ /^\.$/, // Single dot
19
+ /^\*\*\/\*\*$/, // **/** pattern
20
+ /^\*\*\/\*$/, // **/* pattern
21
+ ],
22
+ // Git patterns
23
+ GIT_REDUNDANT_STATUS: /git\s+status/i,
24
+ GIT_INEFFICIENT_CHAIN: /git\s+(status|add|commit|push)/i,
25
+ // NPM patterns
26
+ NPM_INCOMPLETE_PUBLISH: /npm\s+publish/i,
27
+ // Context patterns
28
+ CONTEXT_REDUNDANT_SNAPSHOT: /context_snapshot/i,
29
+ // Validation patterns
30
+ VALIDATION_EARLY_RUN: /(run_repo_checks|run_tests|run_build)/i,
31
+ };
32
+ /**
33
+ * Validate tool preconditions before execution to prevent common AI flow failures.
34
+ *
35
+ * This function implements the critical AI flow design principle: validate before execute.
36
+ * It catches common patterns that lead to tool failures and provides actionable guidance.
37
+ *
38
+ * @param toolName - Name of the tool being called
39
+ * @param args - Tool arguments
40
+ * @returns Array of pre-flight warnings (empty if all validations pass)
41
+ */
42
+ export function validateToolPreconditions(toolName, args) {
43
+ const warnings = [];
44
+ const toolLower = toolName.toLowerCase();
45
+ // -------------------------------------------------------------------------
46
+ // Edit Tool Validation - Critical for AI software engineering flow
47
+ // -------------------------------------------------------------------------
48
+ if (toolLower === 'edit') {
49
+ const oldString = args['old_string'];
50
+ const newString = args['new_string'];
51
+ const filePath = args['file_path'];
52
+ if (!oldString) {
53
+ // Empty old_string = new file creation - validate path structure
54
+ if (filePath && !filePath.startsWith('/')) {
55
+ warnings.push({
56
+ code: 'EDIT_RELATIVE_PATH',
57
+ message: 'Edit file_path should be absolute path for new file creation',
58
+ severity: 'warning',
59
+ suggestion: 'Use absolute path starting with / for file creation',
60
+ });
61
+ }
62
+ }
63
+ else {
64
+ // PATTERN 1: Long single line without newlines - likely didn't read file
65
+ if (!oldString.includes('\n') && oldString.length > 50) {
66
+ warnings.push({
67
+ code: 'EDIT_NO_CONTEXT',
68
+ message: 'Long single line without newlines detected in old_string',
69
+ severity: 'critical',
70
+ suggestion: 'AI should use Read tool first to get exact text including whitespace. Copy multiple lines for uniqueness.',
71
+ });
72
+ }
73
+ // PATTERN 2: Placeholder patterns - AI is guessing content
74
+ const placeholderPatterns = ['...', '[content]', '// ...', '# ...', '/* ... */', '[code]', 'TODO'];
75
+ if (placeholderPatterns.some((p) => oldString.includes(p))) {
76
+ warnings.push({
77
+ code: 'EDIT_PLACEHOLDER',
78
+ message: 'Placeholder patterns detected in old_string',
79
+ severity: 'critical',
80
+ suggestion: 'AI is guessing instead of reading actual file. Use Read tool to get exact file content.',
81
+ });
82
+ }
83
+ // PATTERN 3: Indentation mismatch detection
84
+ if (oldString && newString) {
85
+ const oldLines = oldString.split('\n');
86
+ const newLines = newString.split('\n');
87
+ if (oldLines.length > 1 && newLines.length > 1) {
88
+ const firstOldLine = oldLines[0] || '';
89
+ const firstNewLine = newLines[0] || '';
90
+ const oldIndent = firstOldLine.length - firstOldLine.trimStart().length;
91
+ const newIndent = firstNewLine.length - firstNewLine.trimStart().length;
92
+ if (oldIndent !== newIndent && oldIndent > 0) {
93
+ warnings.push({
94
+ code: 'EDIT_INDENT_MISMATCH',
95
+ message: `old_string starts with ${oldIndent} spaces, new_string starts with ${newIndent}`,
96
+ severity: 'warning',
97
+ suggestion: 'Mismatched indentation often causes Edit to fail matching.',
98
+ });
99
+ }
100
+ }
101
+ }
102
+ // PATTERN 4: Tab vs space mismatch
103
+ if (oldString && newString) {
104
+ const oldHasTabs = oldString.includes('\t');
105
+ const newHasTabs = newString.includes('\t');
106
+ if (oldHasTabs && !newHasTabs) {
107
+ warnings.push({
108
+ code: 'EDIT_WHITESPACE_MISMATCH',
109
+ message: 'old_string uses tabs, new_string uses spaces',
110
+ severity: 'warning',
111
+ suggestion: 'Whitespace type mismatch may cause Edit to fail.',
112
+ });
113
+ }
114
+ }
115
+ // PATTERN 5: Function signature truncation
116
+ if (oldString.includes('function ') || oldString.includes('def ') || oldString.includes('fn ')) {
117
+ const openParens = (oldString.match(/\(/g) || []).length;
118
+ const closeParens = (oldString.match(/\)/g) || []).length;
119
+ if (openParens !== closeParens) {
120
+ warnings.push({
121
+ code: 'EDIT_TRUNCATED_SIGNATURE',
122
+ message: 'Unbalanced parentheses in old_string - function signature may be truncated',
123
+ severity: 'warning',
124
+ suggestion: 'Use Read to get complete function signature.',
125
+ });
126
+ }
127
+ }
128
+ // PATTERN 6: Very short old_string for complex replacement
129
+ if (oldString.length < 20 && newString && newString.length > 100) {
130
+ warnings.push({
131
+ code: 'EDIT_SHORT_MATCH',
132
+ message: 'old_string is very short but new_string is large',
133
+ severity: 'warning',
134
+ suggestion: 'Short matches may hit multiple locations. Use more context in old_string.',
135
+ });
136
+ }
137
+ }
138
+ }
139
+ // -------------------------------------------------------------------------
140
+ // Search Operations Validation
141
+ // -------------------------------------------------------------------------
142
+ if (toolLower === 'grep' || toolLower === 'glob' || toolLower.includes('search')) {
143
+ const patternArg = args['pattern'];
144
+ const pattern = typeof patternArg === 'string' ? patternArg.trim() : '';
145
+ const isGrepTool = toolLower.includes('grep');
146
+ const effectiveHeadLimit = normalizeHeadLimit(toolLower, args);
147
+ const looksGlob = !isGrepTool && /[*?\[]/.test(pattern);
148
+ if (pattern) {
149
+ if (isBroadBasePattern(pattern)) {
150
+ warnings.push({
151
+ code: 'SEARCH_BROAD_PATTERN',
152
+ message: `Pattern '${pattern}' is too broad and may return thousands of files`,
153
+ severity: 'critical',
154
+ suggestion: "Use targeted patterns like '**/*.ts' or 'src/**/*.js' with head_limit parameter.",
155
+ });
156
+ }
157
+ if (looksGlob && !effectiveHeadLimit) {
158
+ warnings.push({
159
+ code: 'SEARCH_NO_LIMIT',
160
+ message: `Pattern '${pattern}' may match many files without head_limit`,
161
+ severity: 'info',
162
+ suggestion: 'Consider adding head_limit parameter to prevent context overflow.',
163
+ });
164
+ }
165
+ if (isGrepTool) {
166
+ const hasFileFilters = typeof args['glob'] === 'string' || typeof args['type'] === 'string';
167
+ if (isVeryBroadRegex(pattern) && !hasFileFilters) {
168
+ warnings.push({
169
+ code: 'SEARCH_CONTEXT_OVERFLOW_RISK',
170
+ message: `Regex pattern '${pattern}' is very broad and may match across many files`,
171
+ severity: 'warning',
172
+ suggestion: 'Add a glob/type filter or narrow the pattern to avoid overwhelming output.',
173
+ });
174
+ }
175
+ }
176
+ else if (looksGlob && isGlobContextOverflowRisk(pattern)) {
177
+ warnings.push({
178
+ code: 'SEARCH_CONTEXT_OVERFLOW_RISK',
179
+ message: `Broad search pattern '${pattern}' detected - high risk of context overflow`,
180
+ severity: 'warning',
181
+ suggestion: 'Use targeted patterns like "**/*.ts" with head_limit=20, or read specific files directly.',
182
+ });
183
+ }
184
+ }
185
+ }
186
+ // -------------------------------------------------------------------------
187
+ // Bash Command Efficiency
188
+ // -------------------------------------------------------------------------
189
+ if (toolLower === 'bash' || toolLower === 'execute_bash') {
190
+ const command = String(args['command'] || '');
191
+ const flowWarnings = analyzeBashFlow(command);
192
+ for (const flow of flowWarnings) {
193
+ warnings.push({
194
+ code: flow.code,
195
+ message: flow.message,
196
+ severity: flow.severity === 'critical' ? 'critical' : flow.severity === 'info' ? 'info' : 'warning',
197
+ suggestion: flow.suggestion ?? flow.message,
198
+ });
199
+ }
200
+ }
201
+ return warnings;
202
+ }
203
+ /**
204
+ * Enhanced AI flow validation for TypeScript software engineering
205
+ * Provides comprehensive validation of AI tool usage patterns
206
+ */
207
+ export function validateAIFlowPatterns(toolName, args, toolHistory) {
208
+ const warnings = [];
209
+ const toolLower = toolName.toLowerCase();
210
+ // Pattern: Edit without prior Read
211
+ if (toolLower === 'edit') {
212
+ const oldString = typeof args['old_string'] === 'string' ? args['old_string'] : undefined;
213
+ const isNewFileCreation = oldString !== undefined && oldString.length === 0;
214
+ const targetPath = normalizeFilePath(args['file_path']);
215
+ const hasRecentRead = toolHistory.some((call) => {
216
+ if (!targetPath) {
217
+ return false;
218
+ }
219
+ const callLower = call.toolName.toLowerCase();
220
+ if (!callLower.includes('read')) {
221
+ return false;
222
+ }
223
+ const readPath = normalizeFilePath(call.args['path'] ?? call.args['file_path']);
224
+ return Boolean(readPath && readPath === targetPath);
225
+ });
226
+ if (!isNewFileCreation && !hasRecentRead) {
227
+ warnings.push({
228
+ code: 'EDIT_WITHOUT_READ',
229
+ message: 'Edit attempted without prior file read',
230
+ severity: 'critical',
231
+ suggestion: 'Always use Read tool first to get exact text including whitespace and indentation.',
232
+ });
233
+ }
234
+ }
235
+ // Pattern: Multiple validation runs
236
+ if (toolLower === 'run_repo_checks' || toolLower === 'run_tests' || toolLower === 'run_build') {
237
+ const now = Date.now();
238
+ const recencyWindowMs = 15 * 60 * 1000; // Only warn when validations are clustered
239
+ const recentValidations = toolHistory
240
+ .filter((call) => call.toolName.toLowerCase().includes('run_') ||
241
+ call.toolName.toLowerCase().includes('test') ||
242
+ call.toolName.toLowerCase().includes('build'))
243
+ .filter((call) => {
244
+ if (typeof call.timestamp !== 'number') {
245
+ return true;
246
+ }
247
+ return now - call.timestamp <= recencyWindowMs;
248
+ });
249
+ if (recentValidations.length > 0) {
250
+ warnings.push({
251
+ code: 'DEFERRED_VALIDATION_REMINDER',
252
+ message: 'Validation already ran recently; batch edits and run one final pass at the end.',
253
+ severity: 'info',
254
+ suggestion: 'Finish implementation work first, then run a single build/test/check step to validate.',
255
+ });
256
+ }
257
+ }
258
+ // Pattern: Inefficient git operations
259
+ if (toolLower.includes('git')) {
260
+ const recentGitOps = toolHistory.filter((call) => call.toolName.toLowerCase().includes('git'));
261
+ if (recentGitOps.length >= 2) {
262
+ warnings.push({
263
+ code: 'GIT_EFFICIENCY_OPTIMIZATION',
264
+ message: 'Multiple git operations detected - consider combined commands',
265
+ severity: 'info',
266
+ suggestion: 'Use single combined commands like "git add -A && git commit -m msg && git push" instead of separate calls.',
267
+ });
268
+ }
269
+ }
270
+ return warnings;
271
+ }
272
+ function normalizeHeadLimit(toolName, args) {
273
+ const tool = toolName.toLowerCase();
274
+ const explicit = args['head_limit'];
275
+ if (typeof explicit === 'number' && Number.isFinite(explicit) && explicit > 0) {
276
+ return explicit;
277
+ }
278
+ if (tool === 'glob' || tool.includes('glob')) {
279
+ return 20;
280
+ }
281
+ if (tool.includes('search')) {
282
+ return 50;
283
+ }
284
+ if (tool.includes('grep')) {
285
+ const outputMode = typeof args['output_mode'] === 'string' ? args['output_mode'] : 'files_with_matches';
286
+ if (outputMode === 'content')
287
+ return 20;
288
+ if (outputMode === 'count')
289
+ return 50;
290
+ return 30;
291
+ }
292
+ return null;
293
+ }
294
+ function isBroadBasePattern(pattern) {
295
+ return pattern === '.' || pattern === '*' || pattern === '**/*';
296
+ }
297
+ function isGlobContextOverflowRisk(pattern) {
298
+ const literalPortion = pattern.replace(/[*?[\]]+/g, '');
299
+ const hasExtension = /\.[\w]+/.test(pattern);
300
+ const hasMeaningfulLiteral = literalPortion.replace(/[\\/]/g, '').length >= 3;
301
+ const deepGlobstar = pattern.includes('**') && !hasExtension && literalPortion.length < 6;
302
+ const wildcardHeavy = !hasExtension && !hasMeaningfulLiteral;
303
+ return deepGlobstar || wildcardHeavy;
304
+ }
305
+ function isVeryBroadRegex(pattern) {
306
+ const normalized = pattern.trim();
307
+ return normalized === '.*' || normalized === '.+' || normalized === '.';
308
+ }
309
+ function normalizeFilePath(pathValue) {
310
+ if (typeof pathValue !== 'string') {
311
+ return null;
312
+ }
313
+ const trimmed = pathValue.trim();
314
+ if (!trimmed) {
315
+ return null;
316
+ }
317
+ try {
318
+ const normalized = normalizePath(trimmed);
319
+ const absolutePath = isAbsolute(normalized) ? normalized : resolvePath(process.cwd(), normalized);
320
+ // Resolve symlinks on the deepest existing directory to avoid /var vs /private/var mismatches
321
+ let currentDir = dirname(absolutePath);
322
+ let suffix = basename(absolutePath);
323
+ while (true) {
324
+ if (existsSync(currentDir)) {
325
+ try {
326
+ const realDir = realpathSync(currentDir);
327
+ return normalizePath(join(realDir, suffix));
328
+ }
329
+ catch {
330
+ // If realpath fails, fall through to the default normalization
331
+ break;
332
+ }
333
+ }
334
+ const parentDir = dirname(currentDir);
335
+ if (parentDir === currentDir) {
336
+ break;
337
+ }
338
+ suffix = join(basename(currentDir), suffix);
339
+ currentDir = parentDir;
340
+ }
341
+ return normalizePath(absolutePath);
342
+ }
343
+ catch {
344
+ return trimmed;
345
+ }
346
+ }
347
+ //# sourceMappingURL=toolPreconditions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolPreconditions.js","sourceRoot":"","sources":["../../src/core/toolPreconditions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,158 @@
1
+ import { type JSONSchemaObject, type ProviderId, type ProviderToolDefinition, type ToolCallRequest } from './types.js';
2
+ import { ContextManager } from './contextManager.js';
3
+ import { type PreflightWarning } from './toolPreconditions.js';
4
+ /**
5
+ * Execution context for tool operations with strict TypeScript typing
6
+ */
7
+ export interface ToolExecutionContext {
8
+ readonly profileName: string;
9
+ readonly provider: ProviderId;
10
+ readonly model: string;
11
+ readonly workspaceContext?: string | null;
12
+ }
13
+ /**
14
+ * Type-safe tool observer with generic parameter inference for AI flow monitoring
15
+ */
16
+ export interface ToolRuntimeObserver<T extends Record<string, unknown> = Record<string, unknown>> {
17
+ /** Called when tool execution begins */
18
+ onToolStart?(call: ToolCallRequest & {
19
+ args: T;
20
+ }): void;
21
+ /** Called when tool execution completes successfully */
22
+ onToolResult?(call: ToolCallRequest & {
23
+ args: T;
24
+ }, output: string): void;
25
+ /** Called when tool execution fails */
26
+ onToolError?(call: ToolCallRequest & {
27
+ args: T;
28
+ }, error: string): void;
29
+ /** Called when cached result is used instead of execution */
30
+ onCacheHit?(call: ToolCallRequest & {
31
+ args: T;
32
+ }): void;
33
+ /** Called for progress updates during long-running operations */
34
+ onToolProgress?(call: ToolCallRequest & {
35
+ args: T;
36
+ }, progress: ToolProgressUpdate): void;
37
+ /** Called for pre-flight warnings before tool execution */
38
+ onToolWarning?(call: ToolCallRequest & {
39
+ args: T;
40
+ }, warning: PreflightWarning | string): void;
41
+ }
42
+ interface ToolRuntimeOptions {
43
+ readonly observer?: ToolRuntimeObserver;
44
+ readonly contextManager?: ContextManager;
45
+ readonly enableCache?: boolean;
46
+ readonly cacheTTLMs?: number;
47
+ }
48
+ /**
49
+ * Generic tool handler with parameter type inference for AI flow execution
50
+ */
51
+ type ToolHandler<T extends Record<string, unknown> = Record<string, unknown>> = (args: T) => Promise<string> | string;
52
+ /**
53
+ * Enhanced tool definition with parameter type safety for AI software engineering
54
+ */
55
+ export interface ToolDefinition<T extends Record<string, unknown> = Record<string, unknown>> {
56
+ /** Unique identifier for the tool */
57
+ readonly name: string;
58
+ /** Human-readable description for AI understanding */
59
+ readonly description: string;
60
+ /** JSON Schema defining the tool's parameter structure */
61
+ readonly parameters?: JSONSchemaObject;
62
+ /** Function that implements the tool's behavior */
63
+ readonly handler: ToolHandler<T>;
64
+ /** Whether results can be cached for performance optimization */
65
+ readonly cacheable?: boolean;
66
+ }
67
+ /**
68
+ * Collection of related tools grouped by functionality
69
+ */
70
+ export interface ToolSuite {
71
+ /** Unique identifier for the tool suite */
72
+ readonly id: string;
73
+ /** Human-readable description of the suite's purpose */
74
+ readonly description?: string;
75
+ /** Array of tool definitions in this suite */
76
+ readonly tools: readonly ToolDefinition[];
77
+ }
78
+ export interface ToolHistoryEntry {
79
+ toolName: string;
80
+ args: Record<string, unknown>;
81
+ timestamp: number;
82
+ }
83
+ export interface ToolProgressUpdate {
84
+ current: number;
85
+ total?: number;
86
+ message?: string;
87
+ }
88
+ /**
89
+ * Type-safe utility functions for tool runtime operations
90
+ */
91
+ export declare namespace ToolRuntimeUtils {
92
+ /**
93
+ * Creates a type-safe tool definition with inferred parameter types
94
+ */
95
+ function createToolDefinition<T extends Record<string, unknown>>(definition: ToolDefinition<T>): ToolDefinition<T>;
96
+ /**
97
+ * Creates a type-safe tool suite with inferred tool types
98
+ */
99
+ function createToolSuite(suite: ToolSuite): ToolSuite;
100
+ /**
101
+ * Type guard to check if a tool definition matches expected parameter schema
102
+ */
103
+ function isToolDefinition(__tool: ToolDefinition, expectedSchema?: JSONSchemaObject): boolean;
104
+ }
105
+ /**
106
+ * Interface describing the public API of ToolRuntime.
107
+ * Used by wrapper implementations like RestrictedToolRuntime.
108
+ */
109
+ export interface IToolRuntime {
110
+ listProviderTools(): ProviderToolDefinition[];
111
+ execute(call: ToolCallRequest, context?: {
112
+ profileName?: string;
113
+ provider?: string;
114
+ model?: string;
115
+ }): Promise<string>;
116
+ registerSuite(suite: ToolSuite): void;
117
+ unregisterSuite(id: string): void;
118
+ clearCache(): void;
119
+ getCacheStats(): {
120
+ size: number;
121
+ entries: number;
122
+ };
123
+ clearToolHistory(): void;
124
+ getToolHistory(): readonly ToolHistoryEntry[];
125
+ }
126
+ export declare class ToolRuntime implements IToolRuntime {
127
+ private readonly registry;
128
+ private readonly registrationOrder;
129
+ private readonly observer;
130
+ private readonly contextManager;
131
+ private readonly cache;
132
+ private readonly enableCache;
133
+ private readonly cacheTTLMs;
134
+ private readonly toolHistory;
135
+ private readonly maxHistorySize;
136
+ constructor(baseTools?: ToolDefinition[], options?: ToolRuntimeOptions);
137
+ registerSuite(suite: ToolSuite): void;
138
+ unregisterSuite(id: string): void;
139
+ listProviderTools(): ProviderToolDefinition[];
140
+ execute(call: ToolCallRequest, context?: {
141
+ profileName?: string;
142
+ provider?: string;
143
+ model?: string;
144
+ }): Promise<string>;
145
+ private getCacheKey;
146
+ clearCache(): void;
147
+ getCacheStats(): {
148
+ size: number;
149
+ entries: number;
150
+ };
151
+ clearToolHistory(): void;
152
+ getToolHistory(): readonly ToolHistoryEntry[];
153
+ private addTool;
154
+ private removeFromOrder;
155
+ }
156
+ export declare function createDefaultToolRuntime(context: ToolExecutionContext, toolSuites?: ToolSuite[], options?: ToolRuntimeOptions): ToolRuntime;
157
+ export {};
158
+ //# sourceMappingURL=toolRuntime.d.ts.map