@visorcraft/idlehands 2.2.4 → 2.2.7
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/capture.js +98 -0
- package/dist/agent/capture.js.map +1 -0
- package/dist/agent/client-pool.js +115 -0
- package/dist/agent/client-pool.js.map +1 -0
- package/dist/agent/conversation-branch.js +50 -0
- package/dist/agent/conversation-branch.js.map +1 -0
- package/dist/agent/tools-schema.js +16 -3
- package/dist/agent/tools-schema.js.map +1 -1
- package/dist/agent.js +465 -56
- package/dist/agent.js.map +1 -1
- package/dist/anton/verifier-utils.js +75 -3
- package/dist/anton/verifier-utils.js.map +1 -1
- package/dist/anton/verifier.js +2 -1
- package/dist/anton/verifier.js.map +1 -1
- package/dist/bot/anton-run.js +1 -0
- package/dist/bot/anton-run.js.map +1 -1
- package/dist/bot/basic-commands.js +10 -1
- package/dist/bot/basic-commands.js.map +1 -1
- package/dist/bot/budget-command.js +74 -0
- package/dist/bot/budget-command.js.map +1 -0
- package/dist/bot/capture-commands.js +82 -0
- package/dist/bot/capture-commands.js.map +1 -0
- package/dist/bot/command-logic.js +6 -1
- package/dist/bot/command-logic.js.map +1 -1
- package/dist/bot/commands.js +157 -1
- package/dist/bot/commands.js.map +1 -1
- package/dist/bot/cost-command.js +80 -0
- package/dist/bot/cost-command.js.map +1 -0
- package/dist/bot/diff-command.js +48 -0
- package/dist/bot/diff-command.js.map +1 -0
- package/dist/bot/discord-commands.js +152 -18
- package/dist/bot/discord-commands.js.map +1 -1
- package/dist/bot/discord.js +86 -6
- package/dist/bot/discord.js.map +1 -1
- package/dist/bot/rollback-command.js +33 -0
- package/dist/bot/rollback-command.js.map +1 -0
- package/dist/bot/runtime-model-picker.js +77 -0
- package/dist/bot/runtime-model-picker.js.map +1 -0
- package/dist/bot/session-settings.js +28 -30
- package/dist/bot/session-settings.js.map +1 -1
- package/dist/bot/telegram-commands.js +161 -36
- package/dist/bot/telegram-commands.js.map +1 -1
- package/dist/bot/telegram.js +13 -1
- package/dist/bot/telegram.js.map +1 -1
- package/dist/bot/ux/events.js.map +1 -1
- package/dist/bot/ux/progress-to-events.js +11 -0
- package/dist/bot/ux/progress-to-events.js.map +1 -1
- package/dist/cli/commands/anton.js +3 -0
- package/dist/cli/commands/anton.js.map +1 -1
- package/dist/cli/commands/editing.js +37 -2
- package/dist/cli/commands/editing.js.map +1 -1
- package/dist/cli/commands/session.js +1 -1
- package/dist/cli/commands/session.js.map +1 -1
- package/dist/config.js +161 -0
- package/dist/config.js.map +1 -1
- package/dist/progress/turn-progress.js +203 -129
- package/dist/progress/turn-progress.js.map +1 -1
- package/dist/routing/hysteresis.js +69 -0
- package/dist/routing/hysteresis.js.map +1 -0
- package/dist/routing/mode.js +32 -0
- package/dist/routing/mode.js.map +1 -0
- package/dist/routing/turn-router.js +128 -0
- package/dist/routing/turn-router.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CaptureManager — Records API request/response exchanges to JSONL files
|
|
3
|
+
* with optional redaction of sensitive headers (API keys, tokens).
|
|
4
|
+
*
|
|
5
|
+
* Extracted from agent.ts to reduce file size and isolate capture concerns.
|
|
6
|
+
*/
|
|
7
|
+
import fs from 'node:fs/promises';
|
|
8
|
+
import path from 'node:path';
|
|
9
|
+
export class CaptureManager {
|
|
10
|
+
enabled = false;
|
|
11
|
+
redactEnabled = true;
|
|
12
|
+
filePath;
|
|
13
|
+
lastRecord = null;
|
|
14
|
+
capturesDir;
|
|
15
|
+
constructor(stateDir) {
|
|
16
|
+
this.capturesDir = path.join(stateDir, 'captures');
|
|
17
|
+
}
|
|
18
|
+
// ── Public API (matches previous closures) ──────────────────────────
|
|
19
|
+
async on(filePath) {
|
|
20
|
+
const target = filePath?.trim() ? path.resolve(filePath) : this.defaultPath();
|
|
21
|
+
await fs.mkdir(path.dirname(target), { recursive: true });
|
|
22
|
+
await fs.appendFile(target, '', 'utf8');
|
|
23
|
+
this.enabled = true;
|
|
24
|
+
this.filePath = target;
|
|
25
|
+
return target;
|
|
26
|
+
}
|
|
27
|
+
off() {
|
|
28
|
+
this.enabled = false;
|
|
29
|
+
}
|
|
30
|
+
async last(filePath) {
|
|
31
|
+
if (!this.lastRecord) {
|
|
32
|
+
throw new Error('No captured request/response pair is available yet.');
|
|
33
|
+
}
|
|
34
|
+
const target = filePath?.trim()
|
|
35
|
+
? path.resolve(filePath)
|
|
36
|
+
: this.filePath || this.defaultPath();
|
|
37
|
+
await this.appendRecord(this.lastRecord, target);
|
|
38
|
+
return target;
|
|
39
|
+
}
|
|
40
|
+
setRedact(enabled) {
|
|
41
|
+
this.redactEnabled = enabled;
|
|
42
|
+
}
|
|
43
|
+
getRedact() {
|
|
44
|
+
return this.redactEnabled;
|
|
45
|
+
}
|
|
46
|
+
open() {
|
|
47
|
+
return this.filePath || null;
|
|
48
|
+
}
|
|
49
|
+
get path() {
|
|
50
|
+
return this.filePath;
|
|
51
|
+
}
|
|
52
|
+
// ── Exchange hook (attach to OpenAIClient) ──────────────────────────
|
|
53
|
+
/**
|
|
54
|
+
* Returns a hook function suitable for `client.setExchangeHook()`.
|
|
55
|
+
* The hook stores the last record and, if capture is enabled, appends it.
|
|
56
|
+
*/
|
|
57
|
+
createExchangeHook() {
|
|
58
|
+
return async (record) => {
|
|
59
|
+
this.lastRecord = record;
|
|
60
|
+
if (!this.enabled)
|
|
61
|
+
return;
|
|
62
|
+
const outFile = this.filePath || this.defaultPath();
|
|
63
|
+
this.filePath = outFile;
|
|
64
|
+
await this.appendRecord(record, outFile);
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
// ── Internal helpers ────────────────────────────────────────────────
|
|
68
|
+
defaultPath() {
|
|
69
|
+
const stamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
70
|
+
return path.join(this.capturesDir, `${stamp}.jsonl`);
|
|
71
|
+
}
|
|
72
|
+
redactRecord(record) {
|
|
73
|
+
if (!this.redactEnabled)
|
|
74
|
+
return record;
|
|
75
|
+
const redacted = JSON.parse(JSON.stringify(record));
|
|
76
|
+
const walk = (obj) => {
|
|
77
|
+
if (!obj || typeof obj !== 'object')
|
|
78
|
+
return;
|
|
79
|
+
for (const key of Object.keys(obj)) {
|
|
80
|
+
const lower = key.toLowerCase();
|
|
81
|
+
if (lower === 'authorization' || lower === 'api-key' || lower === 'x-api-key') {
|
|
82
|
+
obj[key] = '[REDACTED]';
|
|
83
|
+
}
|
|
84
|
+
else if (typeof obj[key] === 'object') {
|
|
85
|
+
walk(obj[key]);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
walk(redacted);
|
|
90
|
+
return redacted;
|
|
91
|
+
}
|
|
92
|
+
async appendRecord(record, outPath) {
|
|
93
|
+
await fs.mkdir(path.dirname(outPath), { recursive: true });
|
|
94
|
+
const safe = this.redactRecord(record);
|
|
95
|
+
await fs.appendFile(outPath, JSON.stringify(safe) + '\n', 'utf8');
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=capture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/agent/capture.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
export class ClientPool {
|
|
2
|
+
routedClients = new Map();
|
|
3
|
+
probedEndpoints = new Set();
|
|
4
|
+
primary;
|
|
5
|
+
primaryEndpoint;
|
|
6
|
+
apiKey;
|
|
7
|
+
cfg;
|
|
8
|
+
capture;
|
|
9
|
+
ClientCtor;
|
|
10
|
+
constructor(opts) {
|
|
11
|
+
this.primary = opts.primary;
|
|
12
|
+
this.primaryEndpoint = opts.primaryEndpoint;
|
|
13
|
+
this.apiKey = opts.apiKey;
|
|
14
|
+
this.cfg = opts.cfg;
|
|
15
|
+
this.capture = opts.capture;
|
|
16
|
+
this.ClientCtor = opts.ClientCtor;
|
|
17
|
+
}
|
|
18
|
+
/** Get or create a client for the given endpoint. Returns primary if no endpoint or same as primary. */
|
|
19
|
+
getForEndpoint(endpoint) {
|
|
20
|
+
if (!endpoint)
|
|
21
|
+
return this.primary;
|
|
22
|
+
const normalized = this.normalize(endpoint);
|
|
23
|
+
if (!normalized || normalized === this.normalize(this.primaryEndpoint))
|
|
24
|
+
return this.primary;
|
|
25
|
+
const existing = this.routedClients.get(normalized);
|
|
26
|
+
if (existing)
|
|
27
|
+
return existing;
|
|
28
|
+
const routed = new this.ClientCtor(normalized, this.apiKey, this.cfg.verbose);
|
|
29
|
+
this.applyRuntimeOptions(routed);
|
|
30
|
+
this.attachCaptureHook(routed);
|
|
31
|
+
this.routedClients.set(normalized, routed);
|
|
32
|
+
return routed;
|
|
33
|
+
}
|
|
34
|
+
/** Probe an endpoint's connection if not already probed. */
|
|
35
|
+
async probeIfNeeded(endpoint) {
|
|
36
|
+
const normalized = this.normalize(endpoint);
|
|
37
|
+
if (!normalized || this.probedEndpoints.has(normalized))
|
|
38
|
+
return;
|
|
39
|
+
const client = this.getForEndpoint(endpoint);
|
|
40
|
+
if (typeof client.probeConnection === 'function') {
|
|
41
|
+
try {
|
|
42
|
+
await client.probeConnection();
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
// best-effort
|
|
46
|
+
}
|
|
47
|
+
this.probedEndpoints.add(normalized);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/** Attach capture hook to the primary client. */
|
|
51
|
+
attachToPrimary() {
|
|
52
|
+
this.attachCaptureHook(this.primary);
|
|
53
|
+
}
|
|
54
|
+
/** Clear all cached clients and probed endpoints (e.g. on endpoint change). */
|
|
55
|
+
reset() {
|
|
56
|
+
this.routedClients.clear();
|
|
57
|
+
this.probedEndpoints.clear();
|
|
58
|
+
}
|
|
59
|
+
/** Mark an endpoint as already probed. */
|
|
60
|
+
markProbed(endpoint) {
|
|
61
|
+
this.probedEndpoints.add(this.normalize(endpoint));
|
|
62
|
+
}
|
|
63
|
+
/** Check if an endpoint has been probed. */
|
|
64
|
+
isProbed(endpoint) {
|
|
65
|
+
return this.probedEndpoints.has(this.normalize(endpoint));
|
|
66
|
+
}
|
|
67
|
+
/** Update the primary client reference (e.g. after setEndpoint). */
|
|
68
|
+
setPrimary(client) {
|
|
69
|
+
this.primary = client;
|
|
70
|
+
}
|
|
71
|
+
/** Close all routed clients. */
|
|
72
|
+
async closeAll() {
|
|
73
|
+
for (const c of this.routedClients.values()) {
|
|
74
|
+
if (typeof c.close === 'function') {
|
|
75
|
+
try {
|
|
76
|
+
await c.close();
|
|
77
|
+
}
|
|
78
|
+
catch { /* ignore */ }
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
this.routedClients.clear();
|
|
82
|
+
this.probedEndpoints.clear();
|
|
83
|
+
}
|
|
84
|
+
normalize(endpoint) {
|
|
85
|
+
return endpoint.trim().replace(/\/+$/, '');
|
|
86
|
+
}
|
|
87
|
+
applyRuntimeOptions(target) {
|
|
88
|
+
if (typeof target.setVerbose === 'function') {
|
|
89
|
+
target.setVerbose(this.cfg.verbose);
|
|
90
|
+
}
|
|
91
|
+
if (typeof this.cfg.response_timeout === 'number' && this.cfg.response_timeout > 0) {
|
|
92
|
+
target.setResponseTimeout(this.cfg.response_timeout);
|
|
93
|
+
}
|
|
94
|
+
if (typeof target.setConnectionTimeout === 'function' &&
|
|
95
|
+
typeof this.cfg.connection_timeout === 'number' &&
|
|
96
|
+
this.cfg.connection_timeout > 0) {
|
|
97
|
+
target.setConnectionTimeout(this.cfg.connection_timeout);
|
|
98
|
+
}
|
|
99
|
+
if (typeof target.setInitialConnectionCheck === 'function' &&
|
|
100
|
+
typeof this.cfg.initial_connection_check === 'boolean') {
|
|
101
|
+
target.setInitialConnectionCheck(this.cfg.initial_connection_check);
|
|
102
|
+
}
|
|
103
|
+
if (typeof target.setInitialConnectionProbeTimeout === 'function' &&
|
|
104
|
+
typeof this.cfg.initial_connection_timeout === 'number' &&
|
|
105
|
+
this.cfg.initial_connection_timeout > 0) {
|
|
106
|
+
target.setInitialConnectionProbeTimeout(this.cfg.initial_connection_timeout);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
attachCaptureHook(target) {
|
|
110
|
+
if (typeof target.setExchangeHook !== 'function')
|
|
111
|
+
return;
|
|
112
|
+
target.setExchangeHook(this.capture.createExchangeHook());
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=client-pool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-pool.js","sourceRoot":"","sources":["../../src/agent/client-pool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ConversationBranch — Lightweight conversation checkpointing and rollback.
|
|
3
|
+
*
|
|
4
|
+
* Snapshots the messages array at each user turn boundary, allowing
|
|
5
|
+
* `/rollback` to restore the conversation to a previous state.
|
|
6
|
+
*/
|
|
7
|
+
export class ConversationBranch {
|
|
8
|
+
checkpoints = [];
|
|
9
|
+
maxCheckpoints;
|
|
10
|
+
constructor(maxCheckpoints = 20) {
|
|
11
|
+
this.maxCheckpoints = maxCheckpoints;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Save a checkpoint before a new user turn starts.
|
|
15
|
+
* Call this at the beginning of `ask()`, before the user message is appended.
|
|
16
|
+
*/
|
|
17
|
+
checkpoint(messageCount, instructionPreview) {
|
|
18
|
+
this.checkpoints.push({
|
|
19
|
+
messageCount,
|
|
20
|
+
createdAt: Date.now(),
|
|
21
|
+
preview: instructionPreview.slice(0, 100),
|
|
22
|
+
});
|
|
23
|
+
// Keep bounded
|
|
24
|
+
if (this.checkpoints.length > this.maxCheckpoints) {
|
|
25
|
+
this.checkpoints.shift();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Pop the most recent checkpoint and return the target message count.
|
|
30
|
+
* Returns null if no checkpoints exist.
|
|
31
|
+
*/
|
|
32
|
+
rollback() {
|
|
33
|
+
return this.checkpoints.pop() ?? null;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* List available checkpoints (most recent first).
|
|
37
|
+
*/
|
|
38
|
+
list() {
|
|
39
|
+
return [...this.checkpoints].reverse();
|
|
40
|
+
}
|
|
41
|
+
/** Number of available rollback points. */
|
|
42
|
+
get depth() {
|
|
43
|
+
return this.checkpoints.length;
|
|
44
|
+
}
|
|
45
|
+
/** Clear all checkpoints (e.g. on session reset). */
|
|
46
|
+
reset() {
|
|
47
|
+
this.checkpoints = [];
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=conversation-branch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-branch.js","sourceRoot":"","sources":["../../src/agent/conversation-branch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,MAAM,OAAO,kBAAkB;IACrB,WAAW,GAAiB,EAAE,CAAC;IACtB,cAAc,CAAS;IAExC,YAAY,cAAc,GAAG,EAAE;QAC7B,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,YAAoB,EAAE,kBAA0B;QACzD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YACpB,YAAY;YACZ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,OAAO,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;SAC1C,CAAC,CAAC;QAEH,eAAe;QACf,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAClD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC;IACzC,CAAC;IAED,2CAA2C;IAC3C,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;IACjC,CAAC;IAED,qDAAqD;IACrD,KAAK;QACH,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;IACxB,CAAC;CACF"}
|
|
@@ -13,6 +13,14 @@ const int = (min, max) => ({
|
|
|
13
13
|
...(max !== undefined && { maximum: max }),
|
|
14
14
|
});
|
|
15
15
|
const SCHEMA_CACHE = new Map();
|
|
16
|
+
/**
|
|
17
|
+
* Tools that are read-only / lightweight — kept in the fast-lane slim schema.
|
|
18
|
+
* Everything else (write, edit, patch, insert, undo, spawn) is omitted.
|
|
19
|
+
*/
|
|
20
|
+
const FAST_LANE_TOOLS = new Set([
|
|
21
|
+
'read_file', 'read_files', 'list_dir', 'search_files', 'exec',
|
|
22
|
+
'vault_search',
|
|
23
|
+
]);
|
|
16
24
|
function cacheKey(opts) {
|
|
17
25
|
return [
|
|
18
26
|
opts?.activeVaultTools ? 'a1' : 'a0',
|
|
@@ -20,6 +28,7 @@ function cacheKey(opts) {
|
|
|
20
28
|
opts?.sysMode ? 's1' : 's0',
|
|
21
29
|
opts?.lspTools ? 'l1' : 'l0',
|
|
22
30
|
opts?.allowSpawnTask === false ? 'sp0' : 'sp1',
|
|
31
|
+
opts?.slimFast ? 'sf1' : 'sf0',
|
|
23
32
|
].join('|');
|
|
24
33
|
}
|
|
25
34
|
export function buildToolsSchema(opts) {
|
|
@@ -78,7 +87,7 @@ export function buildToolsSchema(opts) {
|
|
|
78
87
|
type: 'function',
|
|
79
88
|
function: {
|
|
80
89
|
name: 'write_file',
|
|
81
|
-
description: 'Write file (atomic, backup). Existing non-empty files require overwrite=true (or force=true).',
|
|
90
|
+
description: 'Write file (atomic, backup). Prefer edit_range/apply_patch for edits to existing files; use write_file mainly for new files or intentional full rewrites. Existing non-empty files require overwrite=true (or force=true).',
|
|
82
91
|
parameters: obj({ path: str(), content: str(), overwrite: bool(), force: bool() }, [
|
|
83
92
|
'path',
|
|
84
93
|
'content',
|
|
@@ -273,9 +282,13 @@ export function buildToolsSchema(opts) {
|
|
|
273
282
|
if (opts?.mcpTools?.length) {
|
|
274
283
|
schemas.push(...opts.mcpTools);
|
|
275
284
|
}
|
|
285
|
+
// Fast-lane slim: keep only read-only / lightweight tools to reduce token overhead.
|
|
286
|
+
const final = opts?.slimFast
|
|
287
|
+
? schemas.filter((t) => FAST_LANE_TOOLS.has(t.function.name))
|
|
288
|
+
: schemas;
|
|
276
289
|
if (canUseCache) {
|
|
277
|
-
SCHEMA_CACHE.set(key,
|
|
290
|
+
SCHEMA_CACHE.set(key, final);
|
|
278
291
|
}
|
|
279
|
-
return
|
|
292
|
+
return final;
|
|
280
293
|
}
|
|
281
294
|
//# sourceMappingURL=tools-schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools-schema.js","sourceRoot":"","sources":["../../src/agent/tools-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAGvD,MAAM,GAAG,GAAG,CAAC,UAA+B,EAAE,WAAqB,EAAE,EAAE,EAAE,CAAC,CAAC;IACzE,IAAI,EAAE,QAAQ;IACd,oBAAoB,EAAE,KAAK;IAC3B,UAAU;IACV,QAAQ;CACT,CAAC,CAAC;AACH,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;AACvC,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;AACzC,MAAM,GAAG,GAAG,CAAC,GAAY,EAAE,GAAY,EAAE,EAAE,CAAC,CAAC;IAC3C,IAAI,EAAE,SAAS;IACf,GAAG,CAAC,GAAG,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAC1C,GAAG,CAAC,GAAG,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;CAC3C,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,IAAI,GAAG,EAAwB,CAAC;AAErD,SAAS,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"tools-schema.js","sourceRoot":"","sources":["../../src/agent/tools-schema.ts"],"names":[],"mappings":"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"}
|