@zhixuan92/multi-model-agent-core 0.1.1 → 0.3.0
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 +0 -6
- package/dist/config/schema.d.ts +73 -45
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +14 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/context/context-block-store.d.ts +75 -0
- package/dist/context/context-block-store.d.ts.map +1 -0
- package/dist/context/context-block-store.js +82 -0
- package/dist/context/context-block-store.js.map +1 -0
- package/dist/context/expand-context-blocks.d.ts +20 -0
- package/dist/context/expand-context-blocks.d.ts.map +1 -0
- package/dist/context/expand-context-blocks.js +46 -0
- package/dist/context/expand-context-blocks.js.map +1 -0
- package/dist/delegate-with-escalation.d.ts +34 -0
- package/dist/delegate-with-escalation.d.ts.map +1 -0
- package/dist/delegate-with-escalation.js +172 -0
- package/dist/delegate-with-escalation.js.map +1 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/model-profiles.json +42 -4
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +7 -1
- package/dist/provider.js.map +1 -1
- package/dist/routing/model-profiles.d.ts +9 -4
- package/dist/routing/model-profiles.d.ts.map +1 -1
- package/dist/routing/model-profiles.js +8 -0
- package/dist/routing/model-profiles.js.map +1 -1
- package/dist/run-tasks.d.ts +26 -2
- package/dist/run-tasks.d.ts.map +1 -1
- package/dist/run-tasks.js +61 -19
- package/dist/run-tasks.js.map +1 -1
- package/dist/runners/claude-runner.d.ts.map +1 -1
- package/dist/runners/claude-runner.js +721 -32
- package/dist/runners/claude-runner.js.map +1 -1
- package/dist/runners/codex-runner.d.ts.map +1 -1
- package/dist/runners/codex-runner.js +541 -48
- package/dist/runners/codex-runner.js.map +1 -1
- package/dist/runners/error-classification.d.ts +30 -0
- package/dist/runners/error-classification.d.ts.map +1 -0
- package/dist/runners/error-classification.js +72 -0
- package/dist/runners/error-classification.js.map +1 -0
- package/dist/runners/injection-type.d.ts +22 -0
- package/dist/runners/injection-type.d.ts.map +1 -0
- package/dist/runners/injection-type.js +34 -0
- package/dist/runners/injection-type.js.map +1 -0
- package/dist/runners/openai-runner.d.ts +5 -0
- package/dist/runners/openai-runner.d.ts.map +1 -1
- package/dist/runners/openai-runner.js +608 -36
- package/dist/runners/openai-runner.js.map +1 -1
- package/dist/runners/prevention.d.ts +41 -0
- package/dist/runners/prevention.d.ts.map +1 -0
- package/dist/runners/prevention.js +68 -0
- package/dist/runners/prevention.js.map +1 -0
- package/dist/runners/supervision.d.ts +137 -0
- package/dist/runners/supervision.d.ts.map +1 -0
- package/dist/runners/supervision.js +345 -0
- package/dist/runners/supervision.js.map +1 -0
- package/dist/tools/claude-adapter.d.ts.map +1 -1
- package/dist/tools/claude-adapter.js +6 -3
- package/dist/tools/claude-adapter.js.map +1 -1
- package/dist/tools/definitions.d.ts +3 -1
- package/dist/tools/definitions.d.ts.map +1 -1
- package/dist/tools/definitions.js +57 -5
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/openai-adapter.d.ts.map +1 -1
- package/dist/tools/openai-adapter.js +6 -3
- package/dist/tools/openai-adapter.js.map +1 -1
- package/dist/tools/scratchpad.d.ts +28 -0
- package/dist/tools/scratchpad.d.ts.map +1 -0
- package/dist/tools/scratchpad.js +49 -0
- package/dist/tools/scratchpad.js.map +1 -0
- package/dist/tools/tracker.d.ts +42 -2
- package/dist/tools/tracker.d.ts.map +1 -1
- package/dist/tools/tracker.js +63 -5
- package/dist/tools/tracker.js.map +1 -1
- package/dist/types.d.ts +261 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +43 -1
- package/dist/types.js.map +1 -1
- package/package.json +7 -3
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
export function validateCoverage(text, expected) {
|
|
2
|
+
if (expected.minSections !== undefined) {
|
|
3
|
+
const pattern = expected.sectionPattern ?? '^## ';
|
|
4
|
+
let re;
|
|
5
|
+
try {
|
|
6
|
+
re = new RegExp(pattern, 'gm');
|
|
7
|
+
}
|
|
8
|
+
catch (err) {
|
|
9
|
+
return {
|
|
10
|
+
valid: false,
|
|
11
|
+
kind: 'insufficient_coverage',
|
|
12
|
+
reason: `invalid sectionPattern regex: ${err instanceof Error ? err.message : String(err)}`,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
const count = (text.match(re) ?? []).length;
|
|
16
|
+
if (count < expected.minSections) {
|
|
17
|
+
return {
|
|
18
|
+
valid: false,
|
|
19
|
+
kind: 'insufficient_coverage',
|
|
20
|
+
reason: `only ${count} sections found, expected at least ${expected.minSections}`,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
if (expected.requiredMarkers?.length) {
|
|
25
|
+
const missing = expected.requiredMarkers.filter((marker) => !text.includes(marker));
|
|
26
|
+
if (missing.length > 0) {
|
|
27
|
+
const preview = missing.slice(0, 5).join(', ');
|
|
28
|
+
const extra = missing.length > 5 ? ` (+${missing.length - 5} more)` : '';
|
|
29
|
+
return {
|
|
30
|
+
valid: false,
|
|
31
|
+
kind: 'insufficient_coverage',
|
|
32
|
+
reason: `only ${expected.requiredMarkers.length - missing.length} of ${expected.requiredMarkers.length} required markers found, missing: ${preview}${extra}`,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return { valid: true };
|
|
37
|
+
}
|
|
38
|
+
export const TRACE_MAX_EVENTS = 80;
|
|
39
|
+
export const TRACE_MAX_CHARS = 16_384;
|
|
40
|
+
export const TRACE_DROP_PRIORITY = {
|
|
41
|
+
text_emission: 1,
|
|
42
|
+
tool_call: 2,
|
|
43
|
+
turn_start: 100,
|
|
44
|
+
turn_complete: 100,
|
|
45
|
+
injection: 100,
|
|
46
|
+
escalation_start: 100,
|
|
47
|
+
done: 100,
|
|
48
|
+
};
|
|
49
|
+
export function trimProgressTrace(events) {
|
|
50
|
+
if (events.length === 0)
|
|
51
|
+
return [];
|
|
52
|
+
const traceSize = (arr) => JSON.stringify(arr).length;
|
|
53
|
+
const isNeverDrop = (event) => (TRACE_DROP_PRIORITY[event.kind] ?? 50) >= 100;
|
|
54
|
+
const keep = [];
|
|
55
|
+
const droppable = [];
|
|
56
|
+
for (const event of events) {
|
|
57
|
+
(isNeverDrop(event) ? keep : droppable).push(event);
|
|
58
|
+
}
|
|
59
|
+
if (events.length <= TRACE_MAX_EVENTS && traceSize(events) <= TRACE_MAX_CHARS) {
|
|
60
|
+
return events;
|
|
61
|
+
}
|
|
62
|
+
const keepBytes = traceSize(keep);
|
|
63
|
+
const remainingEventBudget = Math.max(0, TRACE_MAX_EVENTS - keep.length);
|
|
64
|
+
const remainingByteBudget = Math.max(0, TRACE_MAX_CHARS - keepBytes);
|
|
65
|
+
const droppedKinds = {};
|
|
66
|
+
const sortedDroppable = [...droppable].sort((a, b) => (TRACE_DROP_PRIORITY[a.kind] ?? 50) - (TRACE_DROP_PRIORITY[b.kind] ?? 50));
|
|
67
|
+
let retained = sortedDroppable;
|
|
68
|
+
while (retained.length > remainingEventBudget ||
|
|
69
|
+
traceSize(retained) > remainingByteBudget) {
|
|
70
|
+
if (retained.length === 0)
|
|
71
|
+
break;
|
|
72
|
+
const victim = retained.shift();
|
|
73
|
+
droppedKinds[victim.kind] = (droppedKinds[victim.kind] ?? 0) + 1;
|
|
74
|
+
}
|
|
75
|
+
if ((retained.length > remainingEventBudget || traceSize(retained) > remainingByteBudget) &&
|
|
76
|
+
retained.length > 40) {
|
|
77
|
+
const retainedSet = new Set(retained);
|
|
78
|
+
const originalOrder = droppable.filter((event) => retainedSet.has(event));
|
|
79
|
+
const head = originalOrder.slice(0, 10);
|
|
80
|
+
const tail = originalOrder.slice(-30);
|
|
81
|
+
const keptSet = new Set([...head, ...tail]);
|
|
82
|
+
for (const event of originalOrder) {
|
|
83
|
+
if (!keptSet.has(event)) {
|
|
84
|
+
droppedKinds[event.kind] = (droppedKinds[event.kind] ?? 0) + 1;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
retained = [...head, ...tail];
|
|
88
|
+
}
|
|
89
|
+
const retainedSet = new Set(retained);
|
|
90
|
+
const merged = events.filter((event) => isNeverDrop(event) || retainedSet.has(event));
|
|
91
|
+
const droppedCount = droppable.length - retained.length;
|
|
92
|
+
const capExceededByBoundaryEvents = keep.length > TRACE_MAX_EVENTS || keepBytes > TRACE_MAX_CHARS;
|
|
93
|
+
if (droppedCount === 0 && !capExceededByBoundaryEvents) {
|
|
94
|
+
return merged;
|
|
95
|
+
}
|
|
96
|
+
return [
|
|
97
|
+
...merged,
|
|
98
|
+
{
|
|
99
|
+
kind: '_trimmed',
|
|
100
|
+
droppedCount,
|
|
101
|
+
droppedKinds,
|
|
102
|
+
...(capExceededByBoundaryEvents ? { capExceededByBoundaryEvents: true } : {}),
|
|
103
|
+
},
|
|
104
|
+
];
|
|
105
|
+
}
|
|
106
|
+
const DEFAULT_MIN_LENGTH = 200;
|
|
107
|
+
/** Tail window (chars) inspected by `endsWithContinuation` for continuation phrases. */
|
|
108
|
+
const CONTINUATION_TAIL_WINDOW = 80;
|
|
109
|
+
/** Tail length (chars) quoted back to the model in the re-prompt via `result.tail`. */
|
|
110
|
+
const REPROMPT_TAIL_QUOTE = 60;
|
|
111
|
+
/**
|
|
112
|
+
* Marker returned by `stripThinkingTags` when the entire final message was
|
|
113
|
+
* `<think>...</think>` reasoning and stripping left nothing. Exported here
|
|
114
|
+
* (rather than from openai-runner.ts) so that `validateCompletion` can detect
|
|
115
|
+
* the marker without importing the runner, and so other runners can reuse it
|
|
116
|
+
* when they implement their own thinking-only salvage. There is exactly one
|
|
117
|
+
* canonical constant.
|
|
118
|
+
*/
|
|
119
|
+
export const THINKING_DIAGNOSTIC_MARKER = '[model final message contained only <think>...</think> reasoning, no plain-text answer]';
|
|
120
|
+
const CONTINUATION_PHRASES = [
|
|
121
|
+
'let me',
|
|
122
|
+
'let me check',
|
|
123
|
+
'let me read',
|
|
124
|
+
'let me look',
|
|
125
|
+
'next i',
|
|
126
|
+
"i'll continue",
|
|
127
|
+
'i need to',
|
|
128
|
+
"now i'll",
|
|
129
|
+
'i should also',
|
|
130
|
+
'checking',
|
|
131
|
+
"i'll now",
|
|
132
|
+
];
|
|
133
|
+
const FRAGMENT_PUNCTUATION = [':', ',', '…'];
|
|
134
|
+
const TERMINAL_PUNCTUATION = ['.', '!', '?', '`', ')', ']', '}'];
|
|
135
|
+
const MARKDOWN_HINTS = [/^#{1,6} /m, /^- /m, /^\d+\. /m, /```/];
|
|
136
|
+
function endsWithContinuation(tail) {
|
|
137
|
+
const lower = tail.toLowerCase();
|
|
138
|
+
return CONTINUATION_PHRASES.some((p) => lower.endsWith(p) || lower.includes(p));
|
|
139
|
+
}
|
|
140
|
+
function endsWithFragmentPunctuation(text) {
|
|
141
|
+
const trimmed = text.trimEnd();
|
|
142
|
+
return FRAGMENT_PUNCTUATION.some((p) => trimmed.endsWith(p));
|
|
143
|
+
}
|
|
144
|
+
function hasMarkdownStructure(text) {
|
|
145
|
+
return MARKDOWN_HINTS.some((re) => re.test(text));
|
|
146
|
+
}
|
|
147
|
+
function endsWithTerminalPunctuation(text) {
|
|
148
|
+
const trimmed = text.trimEnd();
|
|
149
|
+
if (trimmed.length === 0)
|
|
150
|
+
return false;
|
|
151
|
+
const last = trimmed[trimmed.length - 1];
|
|
152
|
+
return TERMINAL_PUNCTUATION.includes(last);
|
|
153
|
+
}
|
|
154
|
+
// Detector order is most-specific-first: empty → thinking_only → long-enough →
|
|
155
|
+
// markdown → fragment → no_terminator. Markdown precedes fragment so that
|
|
156
|
+
// `Here:\n\`\`\`...\`\`\`` passes as a valid short response; fragment precedes
|
|
157
|
+
// no_terminator because the fragment re-prompt (which quotes the continuation
|
|
158
|
+
// phrase back at the model) is more actionable than the generic no-terminator one.
|
|
159
|
+
export function validateCompletion(text, opts = {}) {
|
|
160
|
+
const minLength = opts.minLength ?? DEFAULT_MIN_LENGTH;
|
|
161
|
+
if (!text || text.trim().length === 0) {
|
|
162
|
+
return { valid: false, kind: 'empty', reason: 'response was empty' };
|
|
163
|
+
}
|
|
164
|
+
if (text.trim() === THINKING_DIAGNOSTIC_MARKER) {
|
|
165
|
+
return {
|
|
166
|
+
valid: false,
|
|
167
|
+
kind: 'thinking_only',
|
|
168
|
+
reason: 'response contained only <think> reasoning content',
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
const trimmed = text.trim();
|
|
172
|
+
const tail = trimmed.slice(-CONTINUATION_TAIL_WINDOW);
|
|
173
|
+
// Long enough → trust the response.
|
|
174
|
+
if (trimmed.length >= minLength) {
|
|
175
|
+
return { valid: true };
|
|
176
|
+
}
|
|
177
|
+
// Short responses are valid only if they look complete (terminal punctuation
|
|
178
|
+
// or markdown structure). Without that, they're either fragments or
|
|
179
|
+
// unterminated.
|
|
180
|
+
const hasMarkdown = hasMarkdownStructure(trimmed);
|
|
181
|
+
if (hasMarkdown) {
|
|
182
|
+
return { valid: true };
|
|
183
|
+
}
|
|
184
|
+
if (endsWithFragmentPunctuation(trimmed) || endsWithContinuation(tail)) {
|
|
185
|
+
return {
|
|
186
|
+
valid: false,
|
|
187
|
+
kind: 'fragment',
|
|
188
|
+
reason: 'response is short and ends like an exploration fragment',
|
|
189
|
+
tail: trimmed.slice(-REPROMPT_TAIL_QUOTE),
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
if (!endsWithTerminalPunctuation(trimmed)) {
|
|
193
|
+
return {
|
|
194
|
+
valid: false,
|
|
195
|
+
kind: 'no_terminator',
|
|
196
|
+
reason: 'response is short and has no terminal punctuation or markdown structure',
|
|
197
|
+
tail: trimmed.slice(-REPROMPT_TAIL_QUOTE),
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
return { valid: true };
|
|
201
|
+
}
|
|
202
|
+
export function buildRePrompt(result) {
|
|
203
|
+
if (result.valid) {
|
|
204
|
+
throw new Error('buildRePrompt called on a valid response — this is a bug');
|
|
205
|
+
}
|
|
206
|
+
switch (result.kind) {
|
|
207
|
+
case 'empty':
|
|
208
|
+
return [
|
|
209
|
+
'Your previous response was empty. You did not produce a final answer to the task',
|
|
210
|
+
'and did not call any tools. Please respond again with your complete final answer',
|
|
211
|
+
'as plain text in this assistant message. The final answer is what gets returned',
|
|
212
|
+
'to the caller — there are no follow-up turns after you produce it. If you are not',
|
|
213
|
+
'yet done, call the tools you need first; otherwise produce the final answer now.',
|
|
214
|
+
].join(' ');
|
|
215
|
+
case 'thinking_only':
|
|
216
|
+
return [
|
|
217
|
+
'Your previous response contained only <think>...</think> reasoning, with no',
|
|
218
|
+
'plain-text answer outside the tags. The reasoning tags are stripped before the',
|
|
219
|
+
'response is returned to the caller, so a thinking-only response is equivalent',
|
|
220
|
+
'to no response at all. Please respond again with your complete final answer as',
|
|
221
|
+
'plain text outside any reasoning tags.',
|
|
222
|
+
].join(' ');
|
|
223
|
+
case 'fragment': {
|
|
224
|
+
const tail = result.tail ?? '';
|
|
225
|
+
return [
|
|
226
|
+
`Your previous response was an exploration fragment (it ended with "${tail}")`,
|
|
227
|
+
'rather than a final answer. You appear to have stopped mid-thought instead of',
|
|
228
|
+
'completing the task. Either: (a) continue exploring by calling the tools you',
|
|
229
|
+
'need, then produce your final answer, or (b) produce your complete final answer',
|
|
230
|
+
'now with whatever you have gathered so far — partial answers are acceptable and',
|
|
231
|
+
'useful, empty responses are not. Your final answer must be a plain-text',
|
|
232
|
+
'assistant message, not a tool call and not a thinking block.',
|
|
233
|
+
].join(' ');
|
|
234
|
+
}
|
|
235
|
+
case 'no_terminator': {
|
|
236
|
+
const tail = result.tail ?? '';
|
|
237
|
+
return [
|
|
238
|
+
`Your previous response appears to have stopped mid-thought (it ended with`,
|
|
239
|
+
`"${tail}"). Please produce your complete final answer with terminal punctuation`,
|
|
240
|
+
'or proper markdown structure. If you are still working, call the tools you need',
|
|
241
|
+
'first; otherwise produce the final answer now.',
|
|
242
|
+
].join(' ');
|
|
243
|
+
}
|
|
244
|
+
case 'insufficient_coverage':
|
|
245
|
+
return `Your previous answer was structurally valid but does not cover everything the brief required: ${result.reason}. Continue your report by addressing the missing items. Do NOT restart from the beginning — append the missing sections to what you already wrote.`;
|
|
246
|
+
default:
|
|
247
|
+
return 'Your previous response was incomplete. Please produce your complete final answer as plain text.';
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Compares two consecutive degenerate outputs for byte equality. Used by
|
|
252
|
+
* the supervision loop's same-output early-out: if the model produces
|
|
253
|
+
* identical garbage twice in a row, give up immediately instead of
|
|
254
|
+
* burning the third retry.
|
|
255
|
+
*/
|
|
256
|
+
export function sameDegenerateOutput(a, b) {
|
|
257
|
+
return a.trim() === b.trim();
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Resolves the effective inputTokenSoftLimit for a (provider, profile) pair.
|
|
261
|
+
*
|
|
262
|
+
* Precedence: `config.inputTokenSoftLimit` (user override) wins over
|
|
263
|
+
* `profile.inputTokenSoftLimit` (family default).
|
|
264
|
+
*
|
|
265
|
+
* Both fields are Zod-validated upstream:
|
|
266
|
+
* - `ProviderConfig.inputTokenSoftLimit` — `z.number().int().positive().optional()`
|
|
267
|
+
* (see packages/core/src/config/schema.ts)
|
|
268
|
+
* - `ModelProfile.inputTokenSoftLimit` — `z.number().int().positive()` (required)
|
|
269
|
+
*
|
|
270
|
+
* Because profile is guaranteed to carry a positive integer (DEFAULT_PROFILE
|
|
271
|
+
* supplies `100_000` when no prefix matches), there is no hardcoded
|
|
272
|
+
* constant fallback — the DEFAULT_PROFILE value is the de-facto fallback
|
|
273
|
+
* for unprofiled model IDs.
|
|
274
|
+
*/
|
|
275
|
+
export function resolveInputTokenSoftLimit(config, profile) {
|
|
276
|
+
return config.inputTokenSoftLimit ?? profile.inputTokenSoftLimit;
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Watchdog threshold ratios (fraction of the resolved `softLimit`).
|
|
280
|
+
* Exported so tests can reference the exact boundary values.
|
|
281
|
+
*
|
|
282
|
+
* - At/above `WATCHDOG_WARNING_RATIO` (80%) the supervision loop nudges
|
|
283
|
+
* the model toward salvage.
|
|
284
|
+
* - At/above `WATCHDOG_FORCE_SALVAGE_RATIO` (95%) the loop is forcibly
|
|
285
|
+
* terminated and the scratchpad is salvaged.
|
|
286
|
+
*/
|
|
287
|
+
export const WATCHDOG_WARNING_RATIO = 0.80;
|
|
288
|
+
export const WATCHDOG_FORCE_SALVAGE_RATIO = 0.95;
|
|
289
|
+
/**
|
|
290
|
+
* Given the cumulative input token usage and the resolved soft limit,
|
|
291
|
+
* returns the watchdog status:
|
|
292
|
+
* - 'ok' below 80%
|
|
293
|
+
* - 'warning' at or above 80%, below 95% (model is nudged)
|
|
294
|
+
* - 'force_salvage' at or above 95% (loop is forcibly terminated)
|
|
295
|
+
*
|
|
296
|
+
* Throws if `softLimit` is not a positive finite number. Runners call
|
|
297
|
+
* this independently, so a silent `'ok'` on a bad limit would mask
|
|
298
|
+
* upstream config bugs.
|
|
299
|
+
*/
|
|
300
|
+
export function checkWatchdogThreshold(cumulativeInputTokens, softLimit) {
|
|
301
|
+
if (!Number.isFinite(softLimit) || !(softLimit > 0)) {
|
|
302
|
+
throw new Error(`checkWatchdogThreshold: softLimit must be a positive finite number, got ${softLimit}`);
|
|
303
|
+
}
|
|
304
|
+
const ratio = cumulativeInputTokens / softLimit;
|
|
305
|
+
if (ratio >= WATCHDOG_FORCE_SALVAGE_RATIO)
|
|
306
|
+
return 'force_salvage';
|
|
307
|
+
if (ratio >= WATCHDOG_WARNING_RATIO)
|
|
308
|
+
return 'warning';
|
|
309
|
+
return 'ok';
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Emits a structured log line at watchdog threshold crossings.
|
|
313
|
+
*
|
|
314
|
+
* Gated on the `MULTI_MODEL_DEBUG` environment variable: the function is
|
|
315
|
+
* a no-op unless `process.env.MULTI_MODEL_DEBUG === '1'`. Any other value
|
|
316
|
+
* (including `'true'`, `'yes'`, or unset) suppresses the log.
|
|
317
|
+
*
|
|
318
|
+
* When enabled, a single line is written to `stderr` via `console.error`
|
|
319
|
+
* of the form:
|
|
320
|
+
* `[multi-model-agent] WATCHDOG <status>: provider=… model=… turn=… inputTokens=… softLimit=… percentOfLimit=… [scratchpadChars=…]`
|
|
321
|
+
*
|
|
322
|
+
* `scratchpadChars` is only appended when `status === 'force_salvage'`,
|
|
323
|
+
* since that is the transition where salvage content size matters for
|
|
324
|
+
* calibration. Used for empirical calibration of the 80% / 95%
|
|
325
|
+
* thresholds. See spec Part A.1.4 calibration logging.
|
|
326
|
+
*/
|
|
327
|
+
export function logWatchdogEvent(status, details) {
|
|
328
|
+
if (process.env.MULTI_MODEL_DEBUG !== '1')
|
|
329
|
+
return;
|
|
330
|
+
const percent = Math.round((details.inputTokens / details.softLimit) * 100);
|
|
331
|
+
const parts = [
|
|
332
|
+
`[multi-model-agent] WATCHDOG ${status}:`,
|
|
333
|
+
`provider=${details.provider}`,
|
|
334
|
+
`model=${details.model}`,
|
|
335
|
+
`turn=${details.turn}`,
|
|
336
|
+
`inputTokens=${details.inputTokens}`,
|
|
337
|
+
`softLimit=${details.softLimit}`,
|
|
338
|
+
`percentOfLimit=${percent}`,
|
|
339
|
+
];
|
|
340
|
+
if (status === 'force_salvage') {
|
|
341
|
+
parts.push(`scratchpadChars=${details.scratchpadChars}`);
|
|
342
|
+
}
|
|
343
|
+
console.error(parts.join(' '));
|
|
344
|
+
}
|
|
345
|
+
//# sourceMappingURL=supervision.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supervision.js","sourceRoot":"","sources":["../../src/runners/supervision.ts"],"names":[],"mappings":"AAyDA,MAAM,UAAU,gBAAgB,CAC9B,IAAY,EACZ,QAAmD;IAEnD,IAAI,QAAQ,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,IAAI,MAAM,CAAC;QAClD,IAAI,EAAU,CAAC;QACf,IAAI,CAAC;YACH,EAAE,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,IAAI,EAAE,uBAAuB;gBAC7B,MAAM,EAAE,iCAAiC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;aAC5F,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QAC5C,IAAI,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;YACjC,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,IAAI,EAAE,uBAAuB;gBAC7B,MAAM,EAAE,QAAQ,KAAK,sCAAsC,QAAQ,CAAC,WAAW,EAAE;aAClF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QACpF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YACzE,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,IAAI,EAAE,uBAAuB;gBAC7B,MAAM,EAAE,QAAQ,QAAQ,CAAC,eAAe,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,OAAO,QAAQ,CAAC,eAAe,CAAC,MAAM,qCAAqC,OAAO,GAAG,KAAK,EAAE;aAC7J,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC;AAEtC,MAAM,CAAC,MAAM,mBAAmB,GAA0C;IACxE,aAAa,EAAE,CAAC;IAChB,SAAS,EAAE,CAAC;IACZ,UAAU,EAAE,GAAG;IACf,aAAa,EAAE,GAAG;IAClB,SAAS,EAAE,GAAG;IACd,gBAAgB,EAAE,GAAG;IACrB,IAAI,EAAE,GAAG;CACV,CAAC;AAEF,MAAM,UAAU,iBAAiB,CAAC,MAAuB;IACvD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEnC,MAAM,SAAS,GAAG,CAAC,GAAoB,EAAU,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/E,MAAM,WAAW,GAAG,CAAC,KAAoB,EAAW,EAAE,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,GAAG,CAAC;IAEtG,MAAM,IAAI,GAAoB,EAAE,CAAC;IACjC,MAAM,SAAS,GAAoB,EAAE,CAAC;IACtC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,IAAI,gBAAgB,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,eAAe,EAAE,CAAC;QAC9E,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IACzE,MAAM,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC,CAAC;IAErE,MAAM,YAAY,GAAmD,EAAE,CAAC;IACxE,MAAM,eAAe,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CACzC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CACpF,CAAC;IACF,IAAI,QAAQ,GAAG,eAAe,CAAC;IAE/B,OACE,QAAQ,CAAC,MAAM,GAAG,oBAAoB;QACtC,SAAS,CAAC,QAAQ,CAAC,GAAG,mBAAmB,EACzC,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM;QACjC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAG,CAAC;QACjC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACnE,CAAC;IAED,IACE,CAAC,QAAQ,CAAC,MAAM,GAAG,oBAAoB,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,mBAAmB,CAAC;QACrF,QAAQ,CAAC,MAAM,GAAG,EAAE,EACpB,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1E,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QAC5C,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;YAClC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxB,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QACD,QAAQ,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAEtF,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IACxD,MAAM,2BAA2B,GAC/B,IAAI,CAAC,MAAM,GAAG,gBAAgB,IAAI,SAAS,GAAG,eAAe,CAAC;IAEhE,IAAI,YAAY,KAAK,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACvD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO;QACL,GAAG,MAAM;QACT;YACE,IAAI,EAAE,UAAmB;YACzB,YAAY;YACZ,YAAY;YACZ,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC,EAAE,2BAA2B,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9E;KACF,CAAC;AACJ,CAAC;AAED,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAE/B,wFAAwF;AACxF,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAEpC,uFAAuF;AACvF,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAE/B;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,0BAA0B,GACrC,yFAAyF,CAAC;AAE5F,MAAM,oBAAoB,GAAG;IAC3B,QAAQ;IACR,cAAc;IACd,aAAa;IACb,aAAa;IACb,QAAQ;IACR,eAAe;IACf,WAAW;IACX,UAAU;IACV,eAAe;IACf,UAAU;IACV,UAAU;CACX,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAE7C,MAAM,oBAAoB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACjE,MAAM,cAAc,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;AAEhE,SAAS,oBAAoB,CAAC,IAAY;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAClF,CAAC;AAED,SAAS,2BAA2B,CAAC,IAAY;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC/B,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAY;IACxC,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,2BAA2B,CAAC,IAAY;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC/B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACvC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACzC,OAAO,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED,+EAA+E;AAC/E,0EAA0E;AAC1E,+EAA+E;AAC/E,8EAA8E;AAC9E,mFAAmF;AACnF,MAAM,UAAU,kBAAkB,CAChC,IAAY,EACZ,OAAkC,EAAE;IAEpC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,kBAAkB,CAAC;IAEvD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;IACvE,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,0BAA0B,EAAE,CAAC;QAC/C,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,eAAe;YACrB,MAAM,EAAE,mDAAmD;SAC5D,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,wBAAwB,CAAC,CAAC;IAEtD,oCAAoC;IACpC,IAAI,OAAO,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;QAChC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,6EAA6E;IAC7E,oEAAoE;IACpE,gBAAgB;IAChB,MAAM,WAAW,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,IAAI,2BAA2B,CAAC,OAAO,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;QACvE,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,yDAAyD;YACjE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC;SAC1C,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1C,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,eAAe;YACrB,MAAM,EAAE,yEAAyE;YACjF,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,mBAAmB,CAAC;SAC1C,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAwB;IACpD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IAED,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,OAAO;YACV,OAAO;gBACL,kFAAkF;gBAClF,kFAAkF;gBAClF,iFAAiF;gBACjF,mFAAmF;gBACnF,kFAAkF;aACnF,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEd,KAAK,eAAe;YAClB,OAAO;gBACL,6EAA6E;gBAC7E,gFAAgF;gBAChF,+EAA+E;gBAC/E,gFAAgF;gBAChF,wCAAwC;aACzC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEd,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YAC/B,OAAO;gBACL,sEAAsE,IAAI,IAAI;gBAC9E,+EAA+E;gBAC/E,8EAA8E;gBAC9E,iFAAiF;gBACjF,iFAAiF;gBACjF,yEAAyE;gBACzE,8DAA8D;aAC/D,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACd,CAAC;QAED,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YAC/B,OAAO;gBACL,2EAA2E;gBAC3E,IAAI,IAAI,yEAAyE;gBACjF,iFAAiF;gBACjF,gDAAgD;aACjD,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACd,CAAC;QAED,KAAK,uBAAuB;YAC1B,OAAO,iGAAiG,MAAM,CAAC,MAAM,oJAAoJ,CAAC;QAE5Q;YACE,OAAO,iGAAiG,CAAC;IAC7G,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,CAAS,EAAE,CAAS;IACvD,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AAC/B,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,0BAA0B,CACxC,MAAsB,EACtB,OAAqB;IAErB,OAAO,MAAM,CAAC,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,CAAC;AACnE,CAAC;AAID;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC;AAC3C,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC;AAEjD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CACpC,qBAA6B,EAC7B,SAAiB;IAEjB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CACb,2EAA2E,SAAS,EAAE,CACvF,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,qBAAqB,GAAG,SAAS,CAAC;IAChD,IAAI,KAAK,IAAI,4BAA4B;QAAE,OAAO,eAAe,CAAC;IAClE,IAAI,KAAK,IAAI,sBAAsB;QAAE,OAAO,SAAS,CAAC;IACtD,OAAO,IAAI,CAAC;AACd,CAAC;AAWD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAAmC,EACnC,OAA6B;IAE7B,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,GAAG;QAAE,OAAO;IAClD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC;IAC5E,MAAM,KAAK,GAAG;QACZ,gCAAgC,MAAM,GAAG;QACzC,YAAY,OAAO,CAAC,QAAQ,EAAE;QAC9B,SAAS,OAAO,CAAC,KAAK,EAAE;QACxB,QAAQ,OAAO,CAAC,IAAI,EAAE;QACtB,eAAe,OAAO,CAAC,WAAW,EAAE;QACpC,aAAa,OAAO,CAAC,SAAS,EAAE;QAChC,kBAAkB,OAAO,EAAE;KAC5B,CAAC;IACF,IAAI,MAAM,KAAK,eAAe,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,mBAAmB,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-adapter.d.ts","sourceRoot":"","sources":["../../src/tools/claude-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,mBAAmB,EAAE,aAAa,GAAE,aAA0B,
|
|
1
|
+
{"version":3,"file":"claude-adapter.d.ts","sourceRoot":"","sources":["../../src/tools/claude-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,mBAAmB,EAAE,aAAa,GAAE,aAA0B,2EA6E1G"}
|
|
@@ -19,9 +19,12 @@ export function createClaudeToolServer(impl, sandboxPolicy = 'cwd-only') {
|
|
|
19
19
|
const files = await impl.glob(pattern);
|
|
20
20
|
return { content: [{ type: 'text', text: files.join('\n') || 'No files found.' }] };
|
|
21
21
|
});
|
|
22
|
-
const grepTool = tool('grep', 'Search for a pattern in a file
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
const grepTool = tool('grep', 'Search for a regex pattern in a file or directory. When given a directory, ' +
|
|
23
|
+
'recursively searches all files (output is prefixed with file:line). When given ' +
|
|
24
|
+
'a single file, returns matching lines with line numbers. Use this — not multiple ' +
|
|
25
|
+
'readFile calls — to find usages, imports, or patterns across a codebase.', {
|
|
26
|
+
pattern: z.string().describe('Regex pattern to search for'),
|
|
27
|
+
path: z.string().describe('File OR directory path. Directories are searched recursively.'),
|
|
25
28
|
}, async ({ pattern, path }) => {
|
|
26
29
|
const result = await impl.grep(pattern, path);
|
|
27
30
|
return { content: [{ type: 'text', text: result || 'No matches found.' }] };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-adapter.js","sourceRoot":"","sources":["../../src/tools/claude-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,UAAU,sBAAsB,CAAC,IAAyB,EAAE,gBAA+B,UAAU;IACzG,MAAM,QAAQ,GAAG,IAAI,CACnB,WAAW,EACX,2FAA2F,EAC3F,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC,EAAE,EAC/D,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QACnB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;KACtE,CAAC,CACH,CAAC;IAEF,MAAM,SAAS,GAAG,IAAI,CACpB,YAAY,EACZ,4FAA4F,EAC5F;QACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAClD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;KACjD,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QAC1B,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACpC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,iBAAiB,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;IACjF,CAAC,CACF,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,CACnB,WAAW,EACX,oHAAoH,EACpH,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC,EAAE,EAC5D,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC5C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;IAChF,CAAC,CACF,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,CACnB,MAAM,EACN,8DAA8D,EAC9D,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC,EAAE,EAC9E,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACpB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,iBAAiB,EAAE,CAAC,EAAE,CAAC;IAC/F,CAAC,CACF,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,CACnB,MAAM,EACN,
|
|
1
|
+
{"version":3,"file":"claude-adapter.js","sourceRoot":"","sources":["../../src/tools/claude-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,8 @@ import type { FileTracker } from './tracker.js';
|
|
|
2
2
|
import type { SandboxPolicy } from '../types.js';
|
|
3
3
|
export declare const MAX_READ_FILE_BYTES: number;
|
|
4
4
|
export declare const MAX_WRITE_FILE_BYTES: number;
|
|
5
|
+
export declare const MAX_GREP_OUTPUT_BYTES: number;
|
|
6
|
+
export declare const GREP_CHILD_BUFFER_BYTES: number;
|
|
5
7
|
export interface ShellResult {
|
|
6
8
|
stdout: string;
|
|
7
9
|
stderr: string;
|
|
@@ -12,7 +14,7 @@ export interface ToolImplementations {
|
|
|
12
14
|
writeFile(filePath: string, content: string): Promise<void>;
|
|
13
15
|
runShell(command: string): Promise<ShellResult>;
|
|
14
16
|
glob(pattern: string): Promise<string[]>;
|
|
15
|
-
grep(pattern: string,
|
|
17
|
+
grep(pattern: string, target: string): Promise<string>;
|
|
16
18
|
listFiles(dirPath: string): Promise<string[]>;
|
|
17
19
|
}
|
|
18
20
|
export declare function createToolImplementations(tracker: FileTracker, cwd: string, sandboxPolicy?: SandboxPolicy, signal?: AbortSignal): ToolImplementations;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/tools/definitions.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/tools/definitions.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAoBjD,eAAO,MAAM,mBAAmB,QAAmB,CAAC;AACpD,eAAO,MAAM,oBAAoB,QAAoB,CAAC;AACtD,eAAO,MAAM,qBAAqB,QAAa,CAAC;AAChD,eAAO,MAAM,uBAAuB,QAAkB,CAAC;AA6BvD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAChD,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvD,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CAC/C;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,WAAW,EACpB,GAAG,EAAE,MAAM,EACX,aAAa,GAAE,aAA0B,EACzC,MAAM,CAAC,EAAE,WAAW,GACnB,mBAAmB,CAyJrB"}
|
|
@@ -13,8 +13,17 @@ const execAsync = promisify(exec);
|
|
|
13
13
|
// readFile: 50 MB. Larger than any sensible source file.
|
|
14
14
|
// writeFile: 100 MB. Generous enough for build artefacts but caps disk-fill
|
|
15
15
|
// attacks where the model is told to write a multi-gigabyte file.
|
|
16
|
+
// grep: 200 KB rendered output. Recursive grep on a large repo can otherwise
|
|
17
|
+
// dump megabytes of matches into the model's context, which is both
|
|
18
|
+
// expensive and useless. Truncating with a marker forces the worker to
|
|
19
|
+
// refine its pattern.
|
|
20
|
+
// grep child: 4 MB stdout buffer. Process-level cap that's larger than the
|
|
21
|
+
// rendered cap so we never lose a real grep result that fits
|
|
22
|
+
// within the rendered limit just because of buffer overflow.
|
|
16
23
|
export const MAX_READ_FILE_BYTES = 50 * 1024 * 1024;
|
|
17
24
|
export const MAX_WRITE_FILE_BYTES = 100 * 1024 * 1024;
|
|
25
|
+
export const MAX_GREP_OUTPUT_BYTES = 200 * 1024;
|
|
26
|
+
export const GREP_CHILD_BUFFER_BYTES = 4 * 1024 * 1024;
|
|
18
27
|
function isWithin(parent, child) {
|
|
19
28
|
return child === parent || child.startsWith(parent + path.sep);
|
|
20
29
|
}
|
|
@@ -44,6 +53,7 @@ export function createToolImplementations(tracker, cwd, sandboxPolicy = 'cwd-onl
|
|
|
44
53
|
const confine = sandboxPolicy === 'cwd-only';
|
|
45
54
|
return {
|
|
46
55
|
async readFile(filePath) {
|
|
56
|
+
tracker.trackToolCall(`readFile(${filePath})`);
|
|
47
57
|
const resolved = path.resolve(cwd, filePath);
|
|
48
58
|
if (confine)
|
|
49
59
|
await assertWithinCwd(cwd, resolved);
|
|
@@ -53,9 +63,12 @@ export function createToolImplementations(tracker, cwd, sandboxPolicy = 'cwd-onl
|
|
|
53
63
|
if (stats.size > MAX_READ_FILE_BYTES) {
|
|
54
64
|
throw new Error(`File too large: ${filePath} is ${stats.size} bytes (max ${MAX_READ_FILE_BYTES})`);
|
|
55
65
|
}
|
|
56
|
-
|
|
66
|
+
const content = await fs.readFile(resolved, 'utf-8');
|
|
67
|
+
tracker.trackRead(resolved);
|
|
68
|
+
return content;
|
|
57
69
|
},
|
|
58
70
|
async writeFile(filePath, content) {
|
|
71
|
+
tracker.trackToolCall(`writeFile(${filePath}, ${content.length}B)`);
|
|
59
72
|
const resolved = path.resolve(cwd, filePath);
|
|
60
73
|
if (confine)
|
|
61
74
|
await assertWithinCwd(cwd, resolved);
|
|
@@ -70,6 +83,7 @@ export function createToolImplementations(tracker, cwd, sandboxPolicy = 'cwd-onl
|
|
|
70
83
|
tracker.trackWrite(resolved);
|
|
71
84
|
},
|
|
72
85
|
async runShell(command) {
|
|
86
|
+
tracker.trackToolCall(`runShell(${command.length > 80 ? command.slice(0, 77) + '…' : command})`);
|
|
73
87
|
if (confine) {
|
|
74
88
|
throw new Error('runShell is disabled under sandboxPolicy "cwd-only". Use readFile, writeFile, grep, glob, or listFiles instead.');
|
|
75
89
|
}
|
|
@@ -94,6 +108,7 @@ export function createToolImplementations(tracker, cwd, sandboxPolicy = 'cwd-onl
|
|
|
94
108
|
}
|
|
95
109
|
},
|
|
96
110
|
async glob(pattern) {
|
|
111
|
+
tracker.trackToolCall(`glob(${pattern})`);
|
|
97
112
|
try {
|
|
98
113
|
const results = [];
|
|
99
114
|
const realCwd = confine ? await fs.realpath(cwd) : null;
|
|
@@ -118,13 +133,43 @@ export function createToolImplementations(tracker, cwd, sandboxPolicy = 'cwd-onl
|
|
|
118
133
|
return [];
|
|
119
134
|
}
|
|
120
135
|
},
|
|
121
|
-
async grep(pattern,
|
|
122
|
-
|
|
136
|
+
async grep(pattern, target) {
|
|
137
|
+
tracker.trackToolCall(`grep(${target}, "${pattern.length > 60 ? pattern.slice(0, 57) + '…' : pattern}")`);
|
|
138
|
+
const resolved = path.resolve(cwd, target);
|
|
123
139
|
if (confine)
|
|
124
140
|
await assertWithinCwd(cwd, resolved);
|
|
141
|
+
// Detect file vs directory so we can pick the right grep mode. ENOENT
|
|
142
|
+
// is reported as a clear error so the worker doesn't think "no matches".
|
|
143
|
+
let isDirectory = false;
|
|
144
|
+
try {
|
|
145
|
+
const stats = await fs.stat(resolved);
|
|
146
|
+
isDirectory = stats.isDirectory();
|
|
147
|
+
}
|
|
148
|
+
catch (err) {
|
|
149
|
+
if (err.code === 'ENOENT') {
|
|
150
|
+
throw new Error(`grep target does not exist: ${target}`);
|
|
151
|
+
}
|
|
152
|
+
throw err;
|
|
153
|
+
}
|
|
154
|
+
tracker.trackRead(resolved);
|
|
155
|
+
// Directory targets get recursive grep with file:line prefixes; file
|
|
156
|
+
// targets keep the original line-only output for compactness.
|
|
157
|
+
const flags = isDirectory ? '-rn' : '-n';
|
|
158
|
+
const escapedPattern = pattern.replace(/'/g, "'\\''");
|
|
159
|
+
const escapedPath = resolved.replace(/'/g, "'\\''");
|
|
125
160
|
try {
|
|
126
|
-
const { stdout } = await execAsync(`grep
|
|
127
|
-
|
|
161
|
+
const { stdout } = await execAsync(`grep ${flags} -e '${escapedPattern}' '${escapedPath}'`, { signal, maxBuffer: GREP_CHILD_BUFFER_BYTES });
|
|
162
|
+
let output = stdout.trim();
|
|
163
|
+
// Cap rendered output so a recursive grep over a huge repo doesn't
|
|
164
|
+
// dump 200k matches into the model's context. The worker can refine
|
|
165
|
+
// its pattern instead.
|
|
166
|
+
if (output.length > MAX_GREP_OUTPUT_BYTES) {
|
|
167
|
+
const truncated = output.slice(0, MAX_GREP_OUTPUT_BYTES);
|
|
168
|
+
const remaining = output.slice(MAX_GREP_OUTPUT_BYTES);
|
|
169
|
+
const droppedLines = remaining.split('\n').length;
|
|
170
|
+
output = `${truncated}\n[grep output truncated: ${droppedLines}+ more lines dropped. Refine your pattern or narrow the search path.]`;
|
|
171
|
+
}
|
|
172
|
+
return output;
|
|
128
173
|
}
|
|
129
174
|
catch (err) {
|
|
130
175
|
if (err.name === 'AbortError')
|
|
@@ -132,14 +177,21 @@ export function createToolImplementations(tracker, cwd, sandboxPolicy = 'cwd-onl
|
|
|
132
177
|
// grep exit 1 = no matches (normal), exit 2+ = real error
|
|
133
178
|
if (err.code === 1)
|
|
134
179
|
return '';
|
|
180
|
+
// Child process buffer overflow surfaces as a stdio max-buffer error.
|
|
181
|
+
if (err.code === 'ERR_CHILD_PROCESS_STDIO_MAXBUFFER' || /maxBuffer/.test(err.message ?? '')) {
|
|
182
|
+
throw new Error(`grep output exceeded ${GREP_CHILD_BUFFER_BYTES} bytes before truncation. Refine your pattern or narrow the search path.`);
|
|
183
|
+
}
|
|
135
184
|
throw new Error(err.stderr?.trim() || `grep failed with exit code ${err.code}`);
|
|
136
185
|
}
|
|
137
186
|
},
|
|
138
187
|
async listFiles(dirPath) {
|
|
188
|
+
tracker.trackToolCall(`listFiles(${dirPath})`);
|
|
139
189
|
const resolved = path.resolve(cwd, dirPath);
|
|
140
190
|
if (confine)
|
|
141
191
|
await assertWithinCwd(cwd, resolved);
|
|
142
192
|
const entries = await fs.readdir(resolved, { withFileTypes: true });
|
|
193
|
+
tracker.trackRead(resolved);
|
|
194
|
+
tracker.trackDirectoryList(resolved);
|
|
143
195
|
return entries.map(e => e.isDirectory() ? `${e.name}/` : e.name).sort();
|
|
144
196
|
},
|
|
145
197
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/tools/definitions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,EAAE,IAAI,IAAI,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAIjC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC,4EAA4E;AAC5E,8EAA8E;AAC9E,0EAA0E;AAC1E,6EAA6E;AAC7E,2CAA2C;AAC3C,EAAE;AACF,yDAAyD;AACzD,4EAA4E;AAC5E,6EAA6E;AAC7E,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AACpD,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/tools/definitions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-adapter.d.ts","sourceRoot":"","sources":["../../src/tools/openai-adapter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,mBAAmB,EAAE,aAAa,GAAE,aAA0B;;;;;;;;
|
|
1
|
+
{"version":3,"file":"openai-adapter.d.ts","sourceRoot":"","sources":["../../src/tools/openai-adapter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,mBAAmB,EAAE,aAAa,GAAE,aAA0B;;;;;;;;8BAgFrG"}
|
|
@@ -45,10 +45,13 @@ export function createOpenAITools(impl, sandboxPolicy = 'cwd-only') {
|
|
|
45
45
|
});
|
|
46
46
|
const grepTool = tool({
|
|
47
47
|
name: 'grep',
|
|
48
|
-
description: 'Search for a pattern in a file.
|
|
48
|
+
description: 'Search for a regex pattern in a file or directory. When given a directory, ' +
|
|
49
|
+
'recursively searches all files (output is prefixed with file:line). When given ' +
|
|
50
|
+
'a single file, returns matching lines with line numbers. Use this — not multiple ' +
|
|
51
|
+
'readFile calls — to find usages, imports, or patterns across a codebase.',
|
|
49
52
|
parameters: z.object({
|
|
50
|
-
pattern: z.string().describe('
|
|
51
|
-
path: z.string().describe('File path
|
|
53
|
+
pattern: z.string().describe('Regex pattern to search for'),
|
|
54
|
+
path: z.string().describe('File OR directory path. Directories are searched recursively.'),
|
|
52
55
|
}),
|
|
53
56
|
execute: async ({ pattern, path }) => {
|
|
54
57
|
const result = await impl.grep(pattern, path);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-adapter.js","sourceRoot":"","sources":["../../src/tools/openai-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,UAAU,iBAAiB,CAAC,IAAyB,EAAE,gBAA+B,UAAU;IACpG,MAAM,QAAQ,GAAG,IAAI,CAAC;QACpB,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,2FAA2F;QACxG,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;SAC5D,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;KACjD,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,IAAI,CAAC;QACrB,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,4FAA4F;QACzG,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YAClD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;SACjD,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;YACnC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACpC,OAAO,iBAAiB,IAAI,EAAE,CAAC;QACjC,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,IAAI,CAAC;QACpB,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,oHAAoH;QACjI,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;YACnB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;SACzD,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;YAC7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC5C,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,IAAI,CAAC;QACpB,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,8DAA8D;QAC3E,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;YACnB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;SAC3E,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;YAC7B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC;QAC/C,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,IAAI,CAAC;QACpB,IAAI,EAAE,MAAM;QACZ,WAAW,
|
|
1
|
+
{"version":3,"file":"openai-adapter.js","sourceRoot":"","sources":["../../src/tools/openai-adapter.ts"],"names":[],"mappings":"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"}
|