@x-code-cli/core 0.1.6 → 0.1.8
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/dist/agent/file-ingest.d.ts +62 -0
- package/dist/agent/file-ingest.d.ts.map +1 -0
- package/dist/agent/file-ingest.js +390 -0
- package/dist/agent/file-ingest.js.map +1 -0
- package/dist/agent/light-compact.d.ts +13 -0
- package/dist/agent/light-compact.d.ts.map +1 -0
- package/dist/agent/light-compact.js +106 -0
- package/dist/agent/light-compact.js.map +1 -0
- package/dist/agent/loop-guard.d.ts +50 -0
- package/dist/agent/loop-guard.d.ts.map +1 -0
- package/dist/agent/loop-guard.js +107 -0
- package/dist/agent/loop-guard.js.map +1 -0
- package/dist/agent/loop-state.d.ts +11 -0
- package/dist/agent/loop-state.d.ts.map +1 -1
- package/dist/agent/loop-state.js +2 -0
- package/dist/agent/loop-state.js.map +1 -1
- package/dist/agent/loop.d.ts +2 -2
- package/dist/agent/loop.d.ts.map +1 -1
- package/dist/agent/loop.js +65 -8
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/messages.d.ts +5 -2
- package/dist/agent/messages.d.ts.map +1 -1
- package/dist/agent/messages.js.map +1 -1
- package/dist/agent/provider-compat.d.ts +7 -0
- package/dist/agent/provider-compat.d.ts.map +1 -1
- package/dist/agent/provider-compat.js +122 -0
- package/dist/agent/provider-compat.js.map +1 -1
- package/dist/agent/system-prompt.js +3 -3
- package/dist/agent/system-prompt.js.map +1 -1
- package/dist/agent/tool-execution.d.ts.map +1 -1
- package/dist/agent/tool-execution.js +68 -26
- package/dist/agent/tool-execution.js.map +1 -1
- package/dist/agent/tool-result-sanitize.d.ts +8 -0
- package/dist/agent/tool-result-sanitize.d.ts.map +1 -0
- package/dist/agent/tool-result-sanitize.js +77 -0
- package/dist/agent/tool-result-sanitize.js.map +1 -0
- package/dist/agent/vision-fallback.d.ts +22 -0
- package/dist/agent/vision-fallback.d.ts.map +1 -0
- package/dist/agent/vision-fallback.js +127 -0
- package/dist/agent/vision-fallback.js.map +1 -0
- package/dist/index.d.ts +8 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/providers/cache-control.d.ts +29 -0
- package/dist/providers/cache-control.d.ts.map +1 -0
- package/dist/providers/cache-control.js +93 -0
- package/dist/providers/cache-control.js.map +1 -0
- package/dist/providers/capabilities.d.ts +15 -0
- package/dist/providers/capabilities.d.ts.map +1 -0
- package/dist/providers/capabilities.js +38 -0
- package/dist/providers/capabilities.js.map +1 -0
- package/dist/tools/index.d.ts +31 -5
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +1 -10
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/read-file.d.ts +29 -1
- package/dist/tools/read-file.d.ts.map +1 -1
- package/dist/tools/read-file.js +103 -10
- package/dist/tools/read-file.js.map +1 -1
- package/dist/tools/shell-provider.d.ts +13 -0
- package/dist/tools/shell-provider.d.ts.map +1 -0
- package/dist/tools/shell-provider.js +74 -0
- package/dist/tools/shell-provider.js.map +1 -0
- package/dist/tools/shell-utils.d.ts +1 -7
- package/dist/tools/shell-utils.d.ts.map +1 -1
- package/dist/tools/shell-utils.js +0 -17
- package/dist/tools/shell-utils.js.map +1 -1
- package/dist/tools/truncate.d.ts +36 -0
- package/dist/tools/truncate.d.ts.map +1 -0
- package/dist/tools/truncate.js +118 -0
- package/dist/tools/truncate.js.map +1 -0
- package/dist/tools/web-search.js +2 -2
- package/dist/tools/web-search.js.map +1 -1
- package/dist/utils/shell-error.d.ts +12 -0
- package/dist/utils/shell-error.d.ts.map +1 -0
- package/dist/utils/shell-error.js +73 -0
- package/dist/utils/shell-error.js.map +1 -0
- package/package.json +21 -12
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loop-guard.d.ts","sourceRoot":"","sources":["../../src/agent/loop-guard.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAGhD;uBACuB;AACvB,eAAO,MAAM,mBAAmB,IAAI,CAAA;AAEpC,4EAA4E;AAC5E,eAAO,MAAM,mBAAmB,IAAI,CAAA;AAEpC,yDAAyD;AACzD,eAAO,MAAM,gBAAgB,IAAI,CAAA;AAWjC;;sCAEsC;AACtC,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAGrE;AAED,MAAM,MAAM,SAAS;AACnB,2DAA2D;AACzD;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE;AAChB;;;mCAGmC;GACjC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE;AAC7D,4EAA4E;GAC1E;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAE7D;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,CAgC9G;AAED;8BAC8B;AAC9B,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAUvF;AAED;;4CAE4C;AAC5C,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,6BAE7F"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
// @x-code-cli/core — Doom-loop circuit breaker
|
|
2
|
+
//
|
|
3
|
+
// Detects when the model is repeatedly making the same tool call with the
|
|
4
|
+
// same arguments — usually because the previous call failed and the model's
|
|
5
|
+
// next best idea is to try it again verbatim. On Windows we see this most
|
|
6
|
+
// often with shell commands that fail for quoting reasons: the model tweaks
|
|
7
|
+
// nothing and retries the exact same line 5–10 times, each failure padding
|
|
8
|
+
// the context with a stack trace.
|
|
9
|
+
//
|
|
10
|
+
// Two stages:
|
|
11
|
+
// Stage 1 (soft, default threshold 3): inject a synthetic tool-result that
|
|
12
|
+
// tells the model "this exact call failed 3 times, stop and change your
|
|
13
|
+
// approach". The next turn sees the synthetic result and usually pivots.
|
|
14
|
+
// Stage 2 (hard, default threshold 5): abort the turn and prompt the user
|
|
15
|
+
// — 5 identical calls after the soft nudge means the nudge isn't helping
|
|
16
|
+
// and we should not pad another round of context.
|
|
17
|
+
//
|
|
18
|
+
// Detection is by SHA256 over `{toolName, stableInputJson}`. Stable stringify
|
|
19
|
+
// sorts object keys so `{a:1,b:2}` and `{b:2,a:1}` hash to the same value.
|
|
20
|
+
//
|
|
21
|
+
// Tuning note: we don't use opencode's "exactly 3 identical in a row"
|
|
22
|
+
// predicate — that misses the case where the model tries `foo`, then reads a
|
|
23
|
+
// file in between, then tries `foo` again. We instead look at the last N
|
|
24
|
+
// tool calls of the same toolName and check if K of them share the hash.
|
|
25
|
+
import crypto from 'node:crypto';
|
|
26
|
+
import { toolResultMessage } from './messages.js';
|
|
27
|
+
/** Tool calls at or above this count in the rolling window trigger the soft
|
|
28
|
+
* synthetic nudge. */
|
|
29
|
+
export const SOFT_LOOP_THRESHOLD = 3;
|
|
30
|
+
/** Tool calls at or above this count abort the turn and prompt the user. */
|
|
31
|
+
export const HARD_LOOP_THRESHOLD = 5;
|
|
32
|
+
/** Size of the rolling window we scan for duplicates. */
|
|
33
|
+
export const LOOP_WINDOW_SIZE = 8;
|
|
34
|
+
/** Stable JSON stringify: sorts object keys deterministically so semantically
|
|
35
|
+
* identical inputs hash to the same value regardless of key order. */
|
|
36
|
+
function stableStringify(value) {
|
|
37
|
+
if (value === null || typeof value !== 'object')
|
|
38
|
+
return JSON.stringify(value);
|
|
39
|
+
if (Array.isArray(value))
|
|
40
|
+
return '[' + value.map(stableStringify).join(',') + ']';
|
|
41
|
+
const entries = Object.entries(value).sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0));
|
|
42
|
+
return '{' + entries.map(([k, v]) => JSON.stringify(k) + ':' + stableStringify(v)).join(',') + '}';
|
|
43
|
+
}
|
|
44
|
+
/** Hash a tool call for duplicate detection. Truncated to 16 hex chars —
|
|
45
|
+
* collision probability at that length is vanishingly small for the 8-entry
|
|
46
|
+
* window we're comparing against. */
|
|
47
|
+
export function hashToolCall(toolName, input) {
|
|
48
|
+
const payload = toolName + '\x00' + stableStringify(input);
|
|
49
|
+
return crypto.createHash('sha256').update(payload).digest('hex').slice(0, 16);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Check whether the incoming tool call is a duplicate of recent calls in the
|
|
53
|
+
* window, and report what the caller should do. Does NOT mutate state — the
|
|
54
|
+
* caller commits the hash via {@link recordToolCall} once the call proceeds.
|
|
55
|
+
*
|
|
56
|
+
* We only count matches that share the same hash AND the same toolName; a
|
|
57
|
+
* fresh command with identical-looking args under a different tool never
|
|
58
|
+
* triggers the guard.
|
|
59
|
+
*/
|
|
60
|
+
export function checkForLoop(state, toolName, input, toolCallId) {
|
|
61
|
+
const hash = hashToolCall(toolName, input);
|
|
62
|
+
const window = state.recentToolCalls.slice(-LOOP_WINDOW_SIZE);
|
|
63
|
+
let identical = 0;
|
|
64
|
+
for (const entry of window) {
|
|
65
|
+
if (entry.toolName === toolName && entry.hash === hash)
|
|
66
|
+
identical++;
|
|
67
|
+
}
|
|
68
|
+
// The current incoming call is what pushes us over the threshold, so we
|
|
69
|
+
// compare against N-1 prior matches.
|
|
70
|
+
const priorMatches = identical;
|
|
71
|
+
if (priorMatches + 1 >= HARD_LOOP_THRESHOLD) {
|
|
72
|
+
return {
|
|
73
|
+
kind: 'hard-block',
|
|
74
|
+
toolName,
|
|
75
|
+
message: `Tool ${toolName} has been called with identical arguments ${priorMatches + 1} times in a row. The model is looping; aborting this turn.`,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
if (priorMatches + 1 >= SOFT_LOOP_THRESHOLD) {
|
|
79
|
+
return {
|
|
80
|
+
kind: 'soft-block',
|
|
81
|
+
toolCallId,
|
|
82
|
+
message: `This exact ${toolName} call (same arguments) has already been attempted ${priorMatches + 1} times this session with the same result. ` +
|
|
83
|
+
'DO NOT retry it. Change your approach — alter the arguments meaningfully, try a different tool, or ask the user what to do instead.',
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
return { kind: 'ok' };
|
|
87
|
+
}
|
|
88
|
+
/** Commit a tool call to the rolling window. Bound size so the array doesn't
|
|
89
|
+
* grow for long sessions. */
|
|
90
|
+
export function recordToolCall(state, toolName, input) {
|
|
91
|
+
const hash = hashToolCall(toolName, input);
|
|
92
|
+
state.recentToolCalls.push({ toolName, hash });
|
|
93
|
+
// Keep 2x the window to give checkForLoop some history beyond the active
|
|
94
|
+
// comparison window (lets us tune LOOP_WINDOW_SIZE without changing the
|
|
95
|
+
// persistence footprint).
|
|
96
|
+
const cap = LOOP_WINDOW_SIZE * 2;
|
|
97
|
+
if (state.recentToolCalls.length > cap) {
|
|
98
|
+
state.recentToolCalls.splice(0, state.recentToolCalls.length - cap);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/** Build a synthetic tool-result message telling the model the call was
|
|
102
|
+
* blocked by the loop guard. The model sees this as if the tool returned it
|
|
103
|
+
* and usually adjusts on the next turn. */
|
|
104
|
+
export function syntheticLoopBlockResult(toolName, toolCallId, message) {
|
|
105
|
+
return toolResultMessage(toolCallId, toolName, `[loop-guard] ${message}`);
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=loop-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loop-guard.js","sourceRoot":"","sources":["../../src/agent/loop-guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,17 @@ export interface LoopState {
|
|
|
9
9
|
startedAt: string;
|
|
10
10
|
filesModified: Set<string>;
|
|
11
11
|
turnCount: number;
|
|
12
|
+
/** Rolling record of recently executed tool calls, keyed by a hash of the
|
|
13
|
+
* tool name + stable-stringified input. Used by the doom-loop guard to
|
|
14
|
+
* detect when the model is looping on the same failing call. */
|
|
15
|
+
recentToolCalls: Array<{
|
|
16
|
+
toolName: string;
|
|
17
|
+
hash: string;
|
|
18
|
+
}>;
|
|
19
|
+
/** Cached system prompt text — rebuilt once per session so the prefix
|
|
20
|
+
* stays byte-stable across turns, enabling automatic prefix-caching on
|
|
21
|
+
* OpenAI-compatible providers (DeepSeek, Moonshot, Alibaba, …). */
|
|
22
|
+
systemPromptCache: string | null;
|
|
12
23
|
}
|
|
13
24
|
export declare function createLoopState(): LoopState;
|
|
14
25
|
//# sourceMappingURL=loop-state.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop-state.d.ts","sourceRoot":"","sources":["../../src/agent/loop-state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,IAAI,CAAA;AAEtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAEnD,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,YAAY,EAAE,CAAA;IACxB,UAAU,EAAE,UAAU,CAAA;IACtB,6FAA6F;IAC7F,eAAe,EAAE,MAAM,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC1B,SAAS,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"loop-state.d.ts","sourceRoot":"","sources":["../../src/agent/loop-state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,IAAI,CAAA;AAEtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAEnD,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,YAAY,EAAE,CAAA;IACxB,UAAU,EAAE,UAAU,CAAA;IACtB,6FAA6F;IAC7F,eAAe,EAAE,MAAM,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB;;qEAEiE;IACjE,eAAe,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC1D;;wEAEoE;IACpE,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAA;CACjC;AAED,wBAAgB,eAAe,IAAI,SAAS,CAY3C"}
|
package/dist/agent/loop-state.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop-state.js","sourceRoot":"","sources":["../../src/agent/loop-state.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"loop-state.js","sourceRoot":"","sources":["../../src/agent/loop-state.ts"],"names":[],"mappings":"AAwBA,MAAM,UAAU,eAAe;IAC7B,OAAO;QACL,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE;QAC/D,eAAe,EAAE,CAAC;QAClB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,aAAa,EAAE,IAAI,GAAG,EAAE;QACxB,SAAS,EAAE,CAAC;QACZ,eAAe,EAAE,EAAE;QACnB,iBAAiB,EAAE,IAAI;KACxB,CAAA;AACH,CAAC"}
|
package/dist/agent/loop.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import type { LanguageModel, ModelMessage } from 'ai';
|
|
1
|
+
import type { LanguageModel, ModelMessage, UserContent } from 'ai';
|
|
2
2
|
import type { AgentCallbacks, AgentOptions } from '../types/index.js';
|
|
3
3
|
import type { LoopState } from './loop-state.js';
|
|
4
4
|
export type { LoopState } from './loop-state.js';
|
|
5
5
|
/** Compress old messages into a summary. */
|
|
6
6
|
export declare function compressMessages(messages: ModelMessage[], model: LanguageModel): Promise<ModelMessage[]>;
|
|
7
7
|
/** Main agent loop. */
|
|
8
|
-
export declare function agentLoop(userMessage:
|
|
8
|
+
export declare function agentLoop(userMessage: UserContent, model: LanguageModel, options: AgentOptions, callbacks: AgentCallbacks, existingState?: LoopState): Promise<LoopState>;
|
|
9
9
|
/** Save session on exit. Summary generation makes an LLM call that can be
|
|
10
10
|
* slow, so we bound it with a 2s timeout — on Ctrl+C we want to return
|
|
11
11
|
* to the shell promptly, not wait for a roundtrip. If the timeout fires
|
package/dist/agent/loop.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/agent/loop.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/agent/loop.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,IAAI,CAAA;AAOlE,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAMrE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAQhD,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAKhD,4CAA4C;AAC5C,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAc9G;AAmOD,uBAAuB;AACvB,wBAAsB,SAAS,CAC7B,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,cAAc,EACzB,aAAa,CAAC,EAAE,SAAS,GACxB,OAAO,CAAC,SAAS,CAAC,CA2GpB;AAED;;;;8BAI8B;AAC9B,wBAAsB,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBzG"}
|
package/dist/agent/loop.js
CHANGED
|
@@ -4,16 +4,19 @@ import path from 'node:path';
|
|
|
4
4
|
import { generateText, streamText } from 'ai';
|
|
5
5
|
import { buildKnowledgeContext } from '../knowledge/loader.js';
|
|
6
6
|
import { generateSessionSummary, saveSessionSummary } from '../knowledge/session.js';
|
|
7
|
+
import { applyCacheControl } from '../providers/cache-control.js';
|
|
7
8
|
import { clearProgressReporter, setProgressReporter } from '../tools/progress.js';
|
|
8
9
|
import { toolRegistry, truncateToolResult } from '../tools/index.js';
|
|
9
10
|
import { debugLog } from '../utils.js';
|
|
10
11
|
import { classifyApiError, isContextTooLongError } from './api-errors.js';
|
|
11
12
|
import { estimateTokenCount, getCompressionThreshold, getMaxOutputTokens } from './context-window.js';
|
|
13
|
+
import { lightCompactMessages } from './light-compact.js';
|
|
12
14
|
import { createLoopState } from './loop-state.js';
|
|
13
|
-
import { ensureReasoningContentParts } from './provider-compat.js';
|
|
15
|
+
import { downgradeBinaryPartsForProvider, ensureReasoningContentParts } from './provider-compat.js';
|
|
14
16
|
import { drainStreamResult } from './stream-utils.js';
|
|
15
17
|
import { buildSystemPrompt } from './system-prompt.js';
|
|
16
18
|
import { processToolCalls } from './tool-execution.js';
|
|
19
|
+
import { truncateToolResultsInMessages } from './tool-result-sanitize.js';
|
|
17
20
|
/** Number of recent messages to keep verbatim when compressing. */
|
|
18
21
|
const KEEP_RECENT = 6;
|
|
19
22
|
/** Compress old messages into a summary. */
|
|
@@ -32,11 +35,25 @@ export async function compressMessages(messages, model) {
|
|
|
32
35
|
/**
|
|
33
36
|
* Proactive compression: compress when either the last real input-token count
|
|
34
37
|
* or the character-based estimate has crossed the threshold.
|
|
38
|
+
*
|
|
39
|
+
* Runs a light O(n) compaction first (drops loop-guard pairs — no LLM call,
|
|
40
|
+
* no network). If that brings us back under the threshold, we skip the
|
|
41
|
+
* expensive LLM-summary path entirely. This is the difference between a
|
|
42
|
+
* $0 10ms pass and a full summarisation round trip — for loop-induced
|
|
43
|
+
* bloat (by far the common case), the light path is enough.
|
|
35
44
|
*/
|
|
36
45
|
async function checkAndCompressContext(state, model, threshold, callbacks) {
|
|
37
46
|
const needsCompression = state.lastInputTokens > threshold || estimateTokenCount(state.messages) > threshold;
|
|
38
47
|
if (!needsCompression || state.messages.length <= KEEP_RECENT)
|
|
39
48
|
return;
|
|
49
|
+
const light = lightCompactMessages(state.messages);
|
|
50
|
+
if (light.dropped > 0) {
|
|
51
|
+
state.messages = light.messages;
|
|
52
|
+
const stillOver = estimateTokenCount(state.messages) > threshold;
|
|
53
|
+
callbacks.onContextCompressed(`Dropped ${light.dropped} looped tool-call message(s) to reclaim context${stillOver ? ' — still over threshold, summarising' : ''}.`);
|
|
54
|
+
if (!stillOver)
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
40
57
|
try {
|
|
41
58
|
const summary = await generateSessionSummary(state.messages, model, state.sessionId, state.startedAt, [
|
|
42
59
|
...state.filesModified,
|
|
@@ -105,6 +122,16 @@ async function streamChunksToUI(result, callbacks) {
|
|
|
105
122
|
/** Pull the response + usage off a completed stream and fold into state. */
|
|
106
123
|
async function collectTurnResponse(result, state, modelId, callbacks) {
|
|
107
124
|
const response = await result.response;
|
|
125
|
+
// CRITICAL: auto-executed tools (readFile / grep / glob / listDir / webFetch
|
|
126
|
+
// / webSearch) return their results through `response.messages` without
|
|
127
|
+
// passing through the manual `pushToolResult` path. Without a sanitizer
|
|
128
|
+
// pass here, reading an 800-line file or a grep that matched 2k times dumps
|
|
129
|
+
// the full content into `state.messages` and then rides along on every
|
|
130
|
+
// subsequent turn. The worst realized case before this sanitizer was a
|
|
131
|
+
// 9M-token context built from cumulative failed-shell stacks + unsliced
|
|
132
|
+
// file reads. Truncate here so the messages we persist match the per-tool
|
|
133
|
+
// budget used elsewhere in the loop.
|
|
134
|
+
truncateToolResultsInMessages(response.messages);
|
|
108
135
|
state.messages.push(...response.messages);
|
|
109
136
|
ensureReasoningContentParts(state.messages, modelId);
|
|
110
137
|
const usage = await result.usage;
|
|
@@ -120,12 +147,27 @@ async function collectTurnResponse(result, state, modelId, callbacks) {
|
|
|
120
147
|
}
|
|
121
148
|
/** Run one agent turn: stream to UI, collect response. Resilient to errors. */
|
|
122
149
|
async function runTurn(state, model, options, systemPrompt, callbacks) {
|
|
150
|
+
// Text-only providers (DeepSeek, custom) would 400 on any surviving
|
|
151
|
+
// image/file parts. Rewrite those parts to OCR'd text in-place before
|
|
152
|
+
// the stream starts. Multimodal providers short-circuit inside the
|
|
153
|
+
// helper based on their capability flags.
|
|
154
|
+
await downgradeBinaryPartsForProvider(state.messages, options.modelId);
|
|
155
|
+
// Per-provider prompt caching: Anthropic gets cache_control breakpoints on
|
|
156
|
+
// the system prompt + last two messages; OpenAI gets a stable
|
|
157
|
+
// promptCacheKey keyed on sessionId; OpenAI-compatible providers rely on
|
|
158
|
+
// the system-prompt cache in LoopState keeping the prefix byte-stable.
|
|
159
|
+
const cached = applyCacheControl({
|
|
160
|
+
system: systemPrompt,
|
|
161
|
+
messages: state.messages,
|
|
162
|
+
modelId: options.modelId,
|
|
163
|
+
sessionId: state.sessionId,
|
|
164
|
+
});
|
|
123
165
|
let result;
|
|
124
166
|
try {
|
|
125
167
|
result = streamText({
|
|
126
168
|
model,
|
|
127
|
-
system:
|
|
128
|
-
messages:
|
|
169
|
+
system: cached.system,
|
|
170
|
+
messages: cached.messages,
|
|
129
171
|
tools: toolRegistry,
|
|
130
172
|
maxRetries: 3,
|
|
131
173
|
abortSignal: options.abortSignal,
|
|
@@ -134,6 +176,12 @@ async function runTurn(state, model, options, systemPrompt, callbacks) {
|
|
|
134
176
|
// outright with HTTP 400. getMaxOutputTokens applies per-model ceilings;
|
|
135
177
|
// unknown models fall through to the module-level default.
|
|
136
178
|
maxOutputTokens: getMaxOutputTokens(options.modelId),
|
|
179
|
+
// AI SDK types `providerOptions` as `SharedV3ProviderOptions` (nested
|
|
180
|
+
// JSONObject). Our cache-control helper returns a looser
|
|
181
|
+
// `Record<string, unknown>` shape because provider-specific field sets
|
|
182
|
+
// drift too fast to keep a strict union in sync. The runtime contract
|
|
183
|
+
// is narrow JSON and we cast here at the single call site.
|
|
184
|
+
providerOptions: cached.providerOptions,
|
|
137
185
|
});
|
|
138
186
|
}
|
|
139
187
|
catch (err) {
|
|
@@ -199,11 +247,20 @@ export async function agentLoop(userMessage, model, options, callbacks, existing
|
|
|
199
247
|
while (state.turnCount < options.maxTurns) {
|
|
200
248
|
state.turnCount++;
|
|
201
249
|
await checkAndCompressContext(state, model, compressionThreshold, callbacks);
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
250
|
+
// Build the system prompt once per session and reuse it across turns.
|
|
251
|
+
// Stable byte-level prefix is a prerequisite for OpenAI-compatible
|
|
252
|
+
// providers' automatic prefix caching (DeepSeek, Moonshot, Alibaba,
|
|
253
|
+
// Zhipu, xAI). If this string changes between turns — e.g. because
|
|
254
|
+
// buildSystemPrompt interpolates a fresh timestamp — the cache misses
|
|
255
|
+
// every request.
|
|
256
|
+
if (!state.systemPromptCache) {
|
|
257
|
+
state.systemPromptCache = buildSystemPrompt({
|
|
258
|
+
knowledgeContext: fullKnowledgeContext,
|
|
259
|
+
modelId: options.modelId,
|
|
260
|
+
isGitRepo,
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
const systemPrompt = state.systemPromptCache;
|
|
207
264
|
const outcome = await runTurn(state, model, options, systemPrompt, callbacks);
|
|
208
265
|
if (outcome.kind === 'error')
|
|
209
266
|
break;
|
package/dist/agent/loop.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/agent/loop.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/agent/loop.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/messages.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import type { ModelMessage } from 'ai';
|
|
1
|
+
import type { FilePart, ImagePart, ModelMessage, TextPart } from 'ai';
|
|
2
|
+
/** Content accepted by a user message — a plain string for simple prompts,
|
|
3
|
+
* or a parts array for prompts that include attached images / files. */
|
|
4
|
+
export type UserContent = string | Array<TextPart | ImagePart | FilePart>;
|
|
2
5
|
/** Create a user message */
|
|
3
|
-
export declare function userMessage(content:
|
|
6
|
+
export declare function userMessage(content: UserContent): ModelMessage;
|
|
4
7
|
/** Create a tool result message */
|
|
5
8
|
export declare function toolResultMessage(toolCallId: string, toolName: string, result: string): ModelMessage;
|
|
6
9
|
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/agent/messages.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/agent/messages.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAA;AAErE;yEACyE;AACzE,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,KAAK,CAAC,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC,CAAA;AAEzE,4BAA4B;AAC5B,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,YAAY,CAE9D;AAED,mCAAmC;AACnC,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,CAYpG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/agent/messages.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/agent/messages.ts"],"names":[],"mappings":"AAOA,4BAA4B;AAC5B,MAAM,UAAU,WAAW,CAAC,OAAoB;IAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;AAClC,CAAC;AAED,mCAAmC;AACnC,MAAM,UAAU,iBAAiB,CAAC,UAAkB,EAAE,QAAgB,EAAE,MAAc;IACpF,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,aAAa;gBACnB,UAAU;gBACV,QAAQ;gBACR,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;aACxC;SACF;KACF,CAAA;AACH,CAAC"}
|
|
@@ -14,4 +14,11 @@ import type { ModelMessage } from 'ai';
|
|
|
14
14
|
* `"reasoning_content": ""` in the JSON body.
|
|
15
15
|
*/
|
|
16
16
|
export declare function ensureReasoningContentParts(messages: ModelMessage[], modelId: string): void;
|
|
17
|
+
/**
|
|
18
|
+
* Strip binary content parts from the conversation history in-place so that
|
|
19
|
+
* the next `streamText` call doesn't 400 on a provider that can't accept
|
|
20
|
+
* them. Replaces images with OCR'd text annotated as a fallback so the
|
|
21
|
+
* model knows it's looking at text, not the image itself.
|
|
22
|
+
*/
|
|
23
|
+
export declare function downgradeBinaryPartsForProvider(messages: ModelMessage[], modelId: string): Promise<void>;
|
|
17
24
|
//# sourceMappingURL=provider-compat.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-compat.d.ts","sourceRoot":"","sources":["../../src/agent/provider-compat.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"provider-compat.d.ts","sourceRoot":"","sources":["../../src/agent/provider-compat.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,IAAI,CAAA;AAKtC;;;;;;;;;;;;;GAaG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAc3F;AA0DD;;;;;GAKG;AACH,wBAAsB,+BAA+B,CACnD,QAAQ,EAAE,YAAY,EAAE,EACxB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAoEf"}
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
// @x-code-cli/core — Provider-specific compatibility shims
|
|
2
|
+
import fs from 'node:fs/promises';
|
|
3
|
+
import os from 'node:os';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { capabilitiesOf } from '../providers/capabilities.js';
|
|
6
|
+
import { ocrImage } from './file-ingest.js';
|
|
1
7
|
/**
|
|
2
8
|
* Ensure all assistant messages have a reasoning content part.
|
|
3
9
|
*
|
|
@@ -28,4 +34,120 @@ export function ensureReasoningContentParts(messages, modelId) {
|
|
|
28
34
|
}
|
|
29
35
|
}
|
|
30
36
|
}
|
|
37
|
+
const ocrCache = new Map();
|
|
38
|
+
async function ocrBuffer(buffer) {
|
|
39
|
+
const key = `${buffer.length}:${buffer.subarray(0, 64).toString('base64')}`;
|
|
40
|
+
const cached = ocrCache.get(key);
|
|
41
|
+
if (cached != null)
|
|
42
|
+
return cached;
|
|
43
|
+
// tesseract.js takes a path, URL, or Buffer. Buffers work but some
|
|
44
|
+
// versions have edge cases — writing to a tmp file is universally safe.
|
|
45
|
+
const tmp = path.join(os.tmpdir(), `xcc-ocr-${Date.now()}-${Math.random().toString(36).slice(2)}.png`);
|
|
46
|
+
try {
|
|
47
|
+
await fs.writeFile(tmp, buffer);
|
|
48
|
+
const text = await ocrImage(tmp);
|
|
49
|
+
ocrCache.set(key, text);
|
|
50
|
+
return text;
|
|
51
|
+
}
|
|
52
|
+
finally {
|
|
53
|
+
await fs.unlink(tmp).catch(() => { });
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function imagePartToBuffer(part) {
|
|
57
|
+
const img = part.image;
|
|
58
|
+
if (Buffer.isBuffer(img))
|
|
59
|
+
return img;
|
|
60
|
+
if (img instanceof Uint8Array)
|
|
61
|
+
return Buffer.from(img);
|
|
62
|
+
if (typeof img === 'string') {
|
|
63
|
+
// Could be base64 or a data URL. Strip the `data:...;base64,` prefix if present.
|
|
64
|
+
const commaIdx = img.indexOf(',');
|
|
65
|
+
const data = img.startsWith('data:') && commaIdx > 0 ? img.slice(commaIdx + 1) : img;
|
|
66
|
+
try {
|
|
67
|
+
return Buffer.from(data, 'base64');
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Strip binary content parts from the conversation history in-place so that
|
|
77
|
+
* the next `streamText` call doesn't 400 on a provider that can't accept
|
|
78
|
+
* them. Replaces images with OCR'd text annotated as a fallback so the
|
|
79
|
+
* model knows it's looking at text, not the image itself.
|
|
80
|
+
*/
|
|
81
|
+
export async function downgradeBinaryPartsForProvider(messages, modelId) {
|
|
82
|
+
const caps = capabilitiesOf(modelId);
|
|
83
|
+
if (caps.image && caps.pdf)
|
|
84
|
+
return;
|
|
85
|
+
for (const msg of messages) {
|
|
86
|
+
// User messages — content may be an array of TextPart | ImagePart | FilePart.
|
|
87
|
+
if (msg.role === 'user' && Array.isArray(msg.content)) {
|
|
88
|
+
const rewritten = [];
|
|
89
|
+
for (const part of msg.content) {
|
|
90
|
+
if (part.type === 'image' && !caps.image) {
|
|
91
|
+
const buffer = imagePartToBuffer(part);
|
|
92
|
+
const text = buffer ? await ocrBuffer(buffer) : '[image omitted]';
|
|
93
|
+
rewritten.push({
|
|
94
|
+
type: 'text',
|
|
95
|
+
text: `[Image replaced by local OCR — the current model cannot natively see images. Visual content is NOT visible.]\n${text}`,
|
|
96
|
+
});
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
if (part.type === 'file' && !caps.pdf) {
|
|
100
|
+
rewritten.push({
|
|
101
|
+
type: 'text',
|
|
102
|
+
text: `[File omitted: ${part.filename ?? 'unknown'} — current model does not accept file attachments.]`,
|
|
103
|
+
});
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
rewritten.push(part);
|
|
107
|
+
}
|
|
108
|
+
;
|
|
109
|
+
msg.content = rewritten;
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
// Tool result messages — content is always an array of tool-result parts.
|
|
113
|
+
if (msg.role === 'tool' && Array.isArray(msg.content)) {
|
|
114
|
+
for (const part of msg.content) {
|
|
115
|
+
if (part.type !== 'tool-result')
|
|
116
|
+
continue;
|
|
117
|
+
const output = part.output;
|
|
118
|
+
if (!output || output.type !== 'content' || !Array.isArray(output.value))
|
|
119
|
+
continue;
|
|
120
|
+
const rewritten = [];
|
|
121
|
+
for (const entry of output.value) {
|
|
122
|
+
if (entry.type === 'image-data' && !caps.image) {
|
|
123
|
+
const data = entry.data ?? '';
|
|
124
|
+
let text = '[image omitted]';
|
|
125
|
+
try {
|
|
126
|
+
const buffer = Buffer.from(data, 'base64');
|
|
127
|
+
text = await ocrBuffer(buffer);
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
// fall through with placeholder
|
|
131
|
+
}
|
|
132
|
+
rewritten.push({
|
|
133
|
+
type: 'text',
|
|
134
|
+
text: `[Image replaced by local OCR — the current model cannot natively see images.]\n${text}`,
|
|
135
|
+
});
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
if ((entry.type === 'file-data' || entry.type === 'file-url' || entry.type === 'file-id') && !caps.pdf) {
|
|
139
|
+
rewritten.push({
|
|
140
|
+
type: 'text',
|
|
141
|
+
text: `[File attachment omitted (${entry.filename ?? entry.mediaType ?? 'binary'}) — current model does not accept file attachments.]`,
|
|
142
|
+
});
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
rewritten.push(entry);
|
|
146
|
+
}
|
|
147
|
+
;
|
|
148
|
+
output.value = rewritten;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
31
153
|
//# sourceMappingURL=provider-compat.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-compat.js","sourceRoot":"","sources":["../../src/agent/provider-compat.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"provider-compat.js","sourceRoot":"","sources":["../../src/agent/provider-compat.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @x-code-cli/core — System Prompt management
|
|
2
|
-
import {
|
|
2
|
+
import { getShellProvider } from '../tools/shell-provider.js';
|
|
3
3
|
const BASE_SYSTEM_PROMPT = `You are X-Code, an AI coding assistant running in the user's terminal. You are powered by the {model} model.
|
|
4
4
|
|
|
5
5
|
When users ask about your identity, model, or version, you should tell them:
|
|
@@ -90,9 +90,9 @@ If you find a saved memory contradicts what you now observe, delete or update it
|
|
|
90
90
|
- Is Git Repo: {isGitRepo}`;
|
|
91
91
|
/** Build the full system prompt with dynamic values and optional knowledge context */
|
|
92
92
|
export function buildSystemPrompt(options) {
|
|
93
|
-
const
|
|
93
|
+
const shellProvider = getShellProvider();
|
|
94
94
|
let prompt = BASE_SYSTEM_PROMPT.replace(/\{platform\}/g, process.platform)
|
|
95
|
-
.replace(/\{shell\}/g,
|
|
95
|
+
.replace(/\{shell\}/g, shellProvider.type)
|
|
96
96
|
.replace(/\{cwd\}/g, process.cwd())
|
|
97
97
|
.replace(/\{model\}/g, options?.modelId ?? 'unknown')
|
|
98
98
|
.replace(/\{isGitRepo\}/g, options?.isGitRepo ? 'yes' : 'no');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../src/agent/system-prompt.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../src/agent/system-prompt.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAE7D,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAuFA,CAAA;AAE3B,sFAAsF;AACtF,MAAM,UAAU,iBAAiB,CAAC,OAIjC;IACC,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAA;IAExC,IAAI,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,QAAQ,CAAC;SACvE,OAAO,CAAC,YAAY,EAAE,aAAa,CAAC,IAAI,CAAC;SACzC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SAClC,OAAO,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,IAAI,SAAS,CAAC;SACpD,OAAO,CAAC,gBAAgB,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IAE/D,IAAI,OAAO,EAAE,gBAAgB,EAAE,CAAC;QAC9B,MAAM,IAAI,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAA;IAC7C,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-execution.d.ts","sourceRoot":"","sources":["../../src/agent/tool-execution.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tool-execution.d.ts","sourceRoot":"","sources":["../../src/agent/tool-execution.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGrE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAsHhD,KAAK,QAAQ,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAA;AA0HxF,oEAAoE;AACpE,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,QAAQ,EAAE,EACrB,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,cAAc,GACxB,OAAO,CAAC,IAAI,CAAC,CAIf"}
|