@noesis-brain/mcp-server 2.1.3 → 2.1.5

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.
@@ -20,6 +20,16 @@ export interface AgentConfig {
20
20
  fake: boolean;
21
21
  }
22
22
  export declare function resolveAgentConfig(): AgentConfig;
23
+ interface JobPayload {
24
+ prompt?: string;
25
+ system?: string;
26
+ allowedTools?: string[];
27
+ maxTurns?: number;
28
+ images?: Array<{
29
+ mimeType: string;
30
+ data: string;
31
+ }>;
32
+ }
23
33
  /** Drop anything the server asked for that is not on the read-only allowlist. */
24
34
  export declare function clampAllowedTools(raw: unknown): string[];
25
35
  /** Clamp the server-requested turn budget into a sane range. */
@@ -74,6 +84,93 @@ export declare function buildSdkPrompt(prompt: string, images: Array<{
74
84
  mimeType: string;
75
85
  data: string;
76
86
  }> | undefined): string | AsyncGenerator<unknown>;
87
+ /** What the SDK expects back from a canUseTool decision. */
88
+ type PermissionDecision = {
89
+ behavior: 'allow';
90
+ updatedInput: Record<string, unknown>;
91
+ } | {
92
+ behavior: 'deny';
93
+ message: string;
94
+ };
95
+ /**
96
+ * SECOND, INDEPENDENT LAYER on the tool boundary.
97
+ *
98
+ * `tools: []` below is the primary control, but it works by way of the CLI's `--tools ""`
99
+ * flag, whose handling lives in a minified `cli.js` we cannot audit. This callback is a
100
+ * gate we own outright: the SDK routes every permission request through it
101
+ * (`--permission-prompt-tool stdio`), and the request carries an `agentID`, so calls made
102
+ * by a spawned `Task` SUBAGENT are covered too — which matters, because a subagent, not
103
+ * the main loop, did the file reading in the 2026-08-14 incident.
104
+ *
105
+ * Deliberately reuses ALLOWED_TOOLS so the daemon has ONE definition of what may run.
106
+ *
107
+ * DO NOT DELETE THIS AS DEAD CODE. It is the ONLY daemon-owned control over MCP tools.
108
+ * `tools: []` governs the SDK's BUILT-IN set and nothing else; the Noesis MCP server we
109
+ * spawn registers ~55 tools, and their definitions are not filtered by `allowedTools`, so
110
+ * the model can see and attempt every one of them — including `pull_notes`, which writes
111
+ * to an arbitrary local path, plus `add_root`, `sync_notes`, `trash_note`, `move_note`.
112
+ * For those, this callback is the whole boundary.
113
+ *
114
+ * MEASURED (30 runs, 2026-08-15), correcting an earlier comment that said the opposite:
115
+ * the gate DOES fire — it denied `mcp__noesis__list_roots` and `mcp__noesis__list_codebases`
116
+ * in real traffic, and the model received `is_error` results naming the refusal. An earlier
117
+ * 2-job sample saw zero firings and wrongly concluded the gate was inert; a permission tool
118
+ * is simply not consulted for calls that are already pre-approved, and that sample happened
119
+ * to exercise only pre-approved tools.
120
+ *
121
+ * KNOWN GAP, stated rather than glossed: the SDK's cache-warming sidechain
122
+ * (`isSidechain: true`) is a real model turn that emits genuine `Bash`/`Glob` calls against
123
+ * the daemon's cwd, with only the RESULT stubbed. `tools: []` does not reach it and this
124
+ * callback is never consulted there. Nothing executes — but that is Claude Code internal
125
+ * behaviour we neither own nor test, which is why the daemon is rooted at a neutral cwd
126
+ * (`scripts/start-agent.sh`), so the warmup probes an empty directory, not a source tree.
127
+ */
128
+ export declare function buildCanUseTool(
129
+ /**
130
+ * The tools permitted for THIS job — i.e. the output of `clampAllowedTools`, not the
131
+ * module-wide `ALLOWED_TOOLS`. Required, deliberately: an earlier version closed over
132
+ * `ALLOWED_TOOLS` and so turned a per-job clamp into a union. `clampAllowedTools`
133
+ * narrows to (what the server asked for ∩ ALLOWED_TOOLS); the gate then re-allowed all
134
+ * four regardless, so a job clamped to `get_note` could still execute `search_semantic`.
135
+ * The sets happen to coincide for chat today, which is exactly why it would have gone
136
+ * unnoticed until the first job kind with a narrower allowlist.
137
+ */
138
+ permitted: Iterable<string>, onDecision?: (toolName: string, allowed: boolean, agentID?: string) => void): (toolName: string, input?: unknown, ctx?: {
139
+ agentID?: string;
140
+ }) => Promise<PermissionDecision>;
141
+ /**
142
+ * The `options` object handed to sdk.query() — extracted, like buildSdkPrompt above, so
143
+ * the tool boundary is asserted by a test instead of resting on a comment. `tools: []`
144
+ * is the security-relevant field: see the note at its assignment. Takes the MCP-server
145
+ * factory as an argument so a test can supply a stub instead of a real spawn config.
146
+ */
147
+ export declare function buildQueryOptions(payload: JobPayload, mcpServersFor: () => Record<string, unknown>): Record<string, unknown>;
148
+ /** The prompt text for a job, with the fallback used when a payload carries none. */
149
+ export declare function resolveJobPrompt(payload: JobPayload, kindLabel: string): string;
150
+ /** The minimum of the Agent SDK this daemon uses — enough for a test to substitute a fake. */
151
+ export interface SdkLike {
152
+ query(args: {
153
+ prompt: unknown;
154
+ options: Record<string, unknown>;
155
+ }): AsyncIterable<unknown>;
156
+ }
157
+ /**
158
+ * The ONE place the SDK is invoked. Exported so a test can pass a fake `sdk` and assert
159
+ * what actually reaches `query()`.
160
+ *
161
+ * This exists because of a real gap: the suite pinned `buildQueryOptions` with a
162
+ * power-set mutation battery, but NOTHING pinned the call. Restoring the pre-fix inline
163
+ * options literal here — deleting `tools: []` and `canUseTool` outright — reverted the
164
+ * entire tool boundary with all 79 tests still green. The builder being correct is
165
+ * worthless if the caller stops using it, so both the seam below and the source-fitness
166
+ * test in `agentToolClamp.test.ts` guard this.
167
+ */
168
+ export declare function runSdkQuery(sdk: SdkLike, payload: JobPayload, kindLabel: string, mcpServersFor: () => Record<string, unknown>): AsyncIterable<unknown>;
169
+ /**
170
+ * The daemon's startup banner line — pulled out of runAgentDaemon() so the printed
171
+ * version string is directly unit-testable without starting the real (infinite) loop.
172
+ */
173
+ export declare function startupBanner(cfg: AgentConfig): string;
77
174
  /** Run the daemon loop until aborted. */
78
175
  export declare function runAgentDaemon(cfg: AgentConfig, signal?: AbortSignal): Promise<void>;
79
176
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/agent/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAUH,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,wBAAgB,kBAAkB,IAAI,WAAW,CAUhD;AAqCD,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,EAAE,CAMxD;AAED,gEAAgE;AAChE,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAIlD;AA0BD;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAOrC;AAiED;;;;;GAKG;AACH,KAAK,YAAY,GACb;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAEpF;;;;;;;;;GASG;AACH,wBAAuB,iBAAiB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,CAOzF;AAED,0EAA0E;AAC1E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,YAAY,EAAE,CAQnH;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,SAAS,GAC5D,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,CAGlC;AAqHD,yCAAyC;AACzC,wBAAsB,cAAc,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAU1F"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/agent/runner.ts"],"names":[],"mappings":"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"}
@@ -208,14 +208,122 @@ export function buildSdkPrompt(prompt, images) {
208
208
  return singleUserMessage(buildImageContent(prompt, images));
209
209
  return prompt;
210
210
  }
211
+ /**
212
+ * SECOND, INDEPENDENT LAYER on the tool boundary.
213
+ *
214
+ * `tools: []` below is the primary control, but it works by way of the CLI's `--tools ""`
215
+ * flag, whose handling lives in a minified `cli.js` we cannot audit. This callback is a
216
+ * gate we own outright: the SDK routes every permission request through it
217
+ * (`--permission-prompt-tool stdio`), and the request carries an `agentID`, so calls made
218
+ * by a spawned `Task` SUBAGENT are covered too — which matters, because a subagent, not
219
+ * the main loop, did the file reading in the 2026-08-14 incident.
220
+ *
221
+ * Deliberately reuses ALLOWED_TOOLS so the daemon has ONE definition of what may run.
222
+ *
223
+ * DO NOT DELETE THIS AS DEAD CODE. It is the ONLY daemon-owned control over MCP tools.
224
+ * `tools: []` governs the SDK's BUILT-IN set and nothing else; the Noesis MCP server we
225
+ * spawn registers ~55 tools, and their definitions are not filtered by `allowedTools`, so
226
+ * the model can see and attempt every one of them — including `pull_notes`, which writes
227
+ * to an arbitrary local path, plus `add_root`, `sync_notes`, `trash_note`, `move_note`.
228
+ * For those, this callback is the whole boundary.
229
+ *
230
+ * MEASURED (30 runs, 2026-08-15), correcting an earlier comment that said the opposite:
231
+ * the gate DOES fire — it denied `mcp__noesis__list_roots` and `mcp__noesis__list_codebases`
232
+ * in real traffic, and the model received `is_error` results naming the refusal. An earlier
233
+ * 2-job sample saw zero firings and wrongly concluded the gate was inert; a permission tool
234
+ * is simply not consulted for calls that are already pre-approved, and that sample happened
235
+ * to exercise only pre-approved tools.
236
+ *
237
+ * KNOWN GAP, stated rather than glossed: the SDK's cache-warming sidechain
238
+ * (`isSidechain: true`) is a real model turn that emits genuine `Bash`/`Glob` calls against
239
+ * the daemon's cwd, with only the RESULT stubbed. `tools: []` does not reach it and this
240
+ * callback is never consulted there. Nothing executes — but that is Claude Code internal
241
+ * behaviour we neither own nor test, which is why the daemon is rooted at a neutral cwd
242
+ * (`scripts/start-agent.sh`), so the warmup probes an empty directory, not a source tree.
243
+ */
244
+ export function buildCanUseTool(
245
+ /**
246
+ * The tools permitted for THIS job — i.e. the output of `clampAllowedTools`, not the
247
+ * module-wide `ALLOWED_TOOLS`. Required, deliberately: an earlier version closed over
248
+ * `ALLOWED_TOOLS` and so turned a per-job clamp into a union. `clampAllowedTools`
249
+ * narrows to (what the server asked for ∩ ALLOWED_TOOLS); the gate then re-allowed all
250
+ * four regardless, so a job clamped to `get_note` could still execute `search_semantic`.
251
+ * The sets happen to coincide for chat today, which is exactly why it would have gone
252
+ * unnoticed until the first job kind with a narrower allowlist.
253
+ */
254
+ permitted, onDecision = logToolDecision) {
255
+ const permittedSet = new Set(permitted);
256
+ return async (toolName, input, ctx) => {
257
+ const allowed = permittedSet.has(toolName);
258
+ onDecision(toolName, allowed, ctx?.agentID);
259
+ return allowed
260
+ ? { behavior: 'allow', updatedInput: (input ?? {}) }
261
+ : { behavior: 'deny', message: `Tool "${toolName}" is not permitted for a Noesis job.` };
262
+ };
263
+ }
264
+ /** Default sink: stderr, so the daemon log is the evidence for whether the gate ever fires. */
265
+ function logToolDecision(toolName, allowed, agentID) {
266
+ console.error(`[noesis-agent] canUseTool ${allowed ? 'ALLOW' : 'DENY'} ${toolName}${agentID ? ` (agent=${agentID})` : ''}`);
267
+ }
268
+ /**
269
+ * The `options` object handed to sdk.query() — extracted, like buildSdkPrompt above, so
270
+ * the tool boundary is asserted by a test instead of resting on a comment. `tools: []`
271
+ * is the security-relevant field: see the note at its assignment. Takes the MCP-server
272
+ * factory as an argument so a test can supply a stub instead of a real spawn config.
273
+ */
274
+ export function buildQueryOptions(payload, mcpServersFor) {
275
+ const allowedTools = clampAllowedTools(payload.allowedTools);
276
+ return {
277
+ ...(payload.system ? { systemPrompt: payload.system } : {}),
278
+ // Suppress the SDK's built-in tool set entirely (`--tools ""`). Without it the CLI
279
+ // defaults to ALL built-ins — Bash, Read, Write, Edit, Grep, WebSearch — and
280
+ // ALLOWED_TOOLS above does NOT stop them: `allowedTools` is a PERMISSION allowlist,
281
+ // so unlisted tools are un-pre-approved, not absent, and their definitions still
282
+ // reach the model. Worse, the read-only built-ins need no approval at all, so they
283
+ // actually EXECUTE headless: on 2026-08-14 an English-coach Navi grepped this
284
+ // daemon's cwd and returned ~100 strings from the user's source tree (jobs 527/528);
285
+ // only the follow-up file Write stopped, at the permission gate. Unconditional by
286
+ // design — a server-supplied payload must never be able to ask for a filesystem
287
+ // primitive. MCP tools travel a separate channel (`--mcp-config`) and are
288
+ // unaffected: a `use_knowledge_base` Navi still calls search_notes (verified).
289
+ tools: [],
290
+ // Independent second layer — see buildCanUseTool. Covers subagent (`Task`) calls too.
291
+ canUseTool: buildCanUseTool(allowedTools),
292
+ allowedTools,
293
+ // Only spawn the Noesis MCP server when a tool actually survived clamping.
294
+ ...(allowedTools.length > 0 ? { mcpServers: mcpServersFor() } : {}),
295
+ maxTurns: clampMaxTurns(payload.maxTurns),
296
+ includePartialMessages: true,
297
+ };
298
+ }
299
+ /** The prompt text for a job, with the fallback used when a payload carries none. */
300
+ export function resolveJobPrompt(payload, kindLabel) {
301
+ return payload.prompt ?? `(${kindLabel} job with empty prompt)`;
302
+ }
303
+ /**
304
+ * The ONE place the SDK is invoked. Exported so a test can pass a fake `sdk` and assert
305
+ * what actually reaches `query()`.
306
+ *
307
+ * This exists because of a real gap: the suite pinned `buildQueryOptions` with a
308
+ * power-set mutation battery, but NOTHING pinned the call. Restoring the pre-fix inline
309
+ * options literal here — deleting `tools: []` and `canUseTool` outright — reverted the
310
+ * entire tool boundary with all 79 tests still green. The builder being correct is
311
+ * worthless if the caller stops using it, so both the seam below and the source-fitness
312
+ * test in `agentToolClamp.test.ts` guard this.
313
+ */
314
+ export function runSdkQuery(sdk, payload, kindLabel, mcpServersFor) {
315
+ return sdk.query({
316
+ prompt: buildSdkPrompt(resolveJobPrompt(payload, kindLabel), payload.images),
317
+ options: buildQueryOptions(payload, mcpServersFor),
318
+ });
319
+ }
211
320
  /**
212
321
  * Execute a claimed job and stream its output through the sink. Returns the final
213
322
  * text. Real mode runs the Claude Agent SDK on the user's subscription; fake mode
214
323
  * emits a canned response so the queue plumbing can be verified without a login.
215
324
  */
216
325
  async function executeJob(cfg, job, sink) {
217
- const prompt = job.payload.prompt ?? `(${job.kind} job with empty prompt)`;
218
- const images = job.payload.images;
326
+ const prompt = resolveJobPrompt(job.payload, job.kind);
219
327
  if (cfg.fake) {
220
328
  const canned = `Noesis local agent (fake mode) processed a "${job.kind}" job. Prompt was: ${prompt.slice(0, 80)}`;
221
329
  for (const word of canned.split(' ')) {
@@ -238,18 +346,7 @@ async function executeJob(cfg, job, sink) {
238
346
  let finalText = '';
239
347
  let sawDelta = false;
240
348
  let terminalText = '';
241
- const allowedTools = clampAllowedTools(job.payload.allowedTools);
242
- const stream = sdk.query({
243
- prompt: buildSdkPrompt(prompt, images),
244
- options: {
245
- ...(job.payload.system ? { systemPrompt: job.payload.system } : {}),
246
- allowedTools,
247
- // Only spawn the Noesis MCP server when a tool actually survived clamping.
248
- ...(allowedTools.length > 0 ? { mcpServers: noesisMcpServers(cfg) } : {}),
249
- maxTurns: clampMaxTurns(job.payload.maxTurns),
250
- includePartialMessages: true,
251
- },
252
- });
349
+ const stream = runSdkQuery(sdk, job.payload, job.kind, () => noesisMcpServers(cfg));
253
350
  // With includePartialMessages the stream carries BOTH incremental `stream_event`
254
351
  // deltas AND a terminal `assistant` message holding the whole reply. Taking both
255
352
  // would emit the answer twice, so deltas win and the terminal message is only a
@@ -330,6 +427,13 @@ async function runJob(cfg, job) {
330
427
  });
331
428
  }
332
429
  }
430
+ /**
431
+ * The daemon's startup banner line — pulled out of runAgentDaemon() so the printed
432
+ * version string is directly unit-testable without starting the real (infinite) loop.
433
+ */
434
+ export function startupBanner(cfg) {
435
+ return `[noesis-agent] v${agentVersion()} started (concurrency=${cfg.concurrency}${cfg.fake ? ', FAKE mode' : ''}) → ${cfg.apiBaseUrl}`;
436
+ }
333
437
  /** Run the daemon loop until aborted. */
334
438
  export async function runAgentDaemon(cfg, signal) {
335
439
  // Footgun guard: keep billing on the subscription, not the metered API.
@@ -337,7 +441,7 @@ export async function runAgentDaemon(cfg, signal) {
337
441
  console.error('[noesis-agent] WARNING: ANTHROPIC_API_KEY is set — unsetting it so the Claude Agent SDK uses your subscription, not the metered API.');
338
442
  delete process.env.ANTHROPIC_API_KEY;
339
443
  }
340
- console.error(`[noesis-agent] started (concurrency=${cfg.concurrency}${cfg.fake ? ', FAKE mode' : ''}) → ${cfg.apiBaseUrl}`);
444
+ console.error(startupBanner(cfg));
341
445
  const workers = Array.from({ length: cfg.concurrency }, (_, i) => workerLoop(cfg, `worker-${i + 1}`, signal));
342
446
  await Promise.all(workers);
343
447
  }
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/agent/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAM,oBAAoB;AACxD,MAAM,cAAc,GAAG,GAAG,CAAC,CAAS,4CAA4C;AAChF,MAAM,YAAY,GAAG,MAAM,CAAC,CAAQ,gEAAgE;AACpG,MAAM,eAAe,GAAG,CAAC,CAAC;AAS1B,MAAM,UAAU,kBAAkB;IAChC,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACzE,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC;IACpD,IAAI,CAAC,UAAU,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;IAC/F,CAAC;IACD,IAAI,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;IAC5E,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,CAAC;QAAE,WAAW,GAAG,CAAC,CAAC;IACtE,IAAI,WAAW,GAAG,eAAe;QAAE,WAAW,GAAG,eAAe,CAAC;IACjE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,GAAG,EAAE,CAAC;AAC5F,CAAC;AAkBD;;;;;;;;GAQG;AACH,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;IAC5B,2BAA2B;IAC3B,8BAA8B;IAC9B,uBAAuB;IACvB,yBAAyB;CAC1B,CAAC,CAAC;AAEH,8FAA8F;AAC9F,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAE7B,iFAAiF;AACjF,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC5C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3F,MAAM,OAAO,GAAI,GAAiB,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IACxD,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,CAAC,KAAK,CAAC,0BAA0B,OAAO,8CAA8C,CAAC,CAAC;IAChH,OAAO,IAAI,CAAC;AACd,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,aAAa,CAAC,GAAY;IACxC,MAAM,CAAC,GAAG,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChF,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IACpB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;AACxC,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,GAAgB;IACxC,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACrE,OAAO;QACL,MAAM,EAAE;YACN,OAAO,EAAE,OAAO,CAAC,QAAQ;YACzB,IAAI,EAAE,CAAC,KAAK,CAAC;YACb,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,gBAAgB,EAAE,GAAG,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,CAAC,UAAU,EAAE;SACxF;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,GAAG,CAAC,GAAgB,EAAE,IAAY,EAAE,IAAa;IAC9D,OAAO,KAAK,CAAC,GAAG,GAAG,CAAC,UAAU,GAAG,IAAI,EAAE,EAAE;QACvC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,aAAa,EAAE,UAAU,GAAG,CAAC,QAAQ,EAAE,EAAE;QACxF,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KAC3B,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY;IAC1B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1E,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,KAAK,CAAC,GAAgB,EAAE,QAAgB;IACrD,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,EAAE,uBAAuB,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;IAChG,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA+B,CAAC;IAC9D,OAAO,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC;AAC1B,CAAC;AAED,sFAAsF;AACtF,MAAM,SAAS;IAOO;IAA0B;IAAuB;IAN7D,MAAM,GAAG,EAAE,CAAC;IACZ,UAAU,GAA0C,IAAI,CAAC;IACzD,cAAc,GAA0C,IAAI,CAAC;IAC7D,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACtB,MAAM,GAAG,KAAK,CAAC;IAEvB,YAAoB,GAAgB,EAAU,KAAa,EAAU,KAAa;QAA9D,QAAG,GAAH,GAAG,CAAa;QAAU,UAAK,GAAL,KAAK,CAAQ;QAAU,UAAK,GAAL,KAAK,CAAQ;IAAG,CAAC;IAEtF,KAAK;QACH,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,EAAE,cAAc,CAAC,CAAC;QACvE,yEAAyE;QACzE,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE;YACrC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,IAAI,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3E,KAAK,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,yDAAyD;YACrF,CAAC;QACH,CAAC,EAAE,YAAY,CAAC,CAAC;IACnB,CAAC;IAED,IAAI,CAAC,IAAY;QACf,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC;IACtB,CAAC;IAEO,KAAK,CAAC,KAAK;QACjB,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACpD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,MAA8C;QACrE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,mBAAmB,IAAI,CAAC,KAAK,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YACvG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACvB,0EAA0E;gBAC1E,uDAAuD;gBACvD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACrB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,2DAA2D;QAC7D,CAAC;IACH,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,IAAI,CAAC,UAAU;YAAE,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpD,IAAI,IAAI,CAAC,cAAc;YAAE,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC9D,CAAC;CACF;AAYD;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,iBAAiB,CAAC,OAAuB;IAC9D,MAAM;QACJ,IAAI,EAAE,MAAM;QACZ,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;QAClC,kBAAkB,EAAE,IAAI;KACzB,CAAC;AACJ,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,MAAiD;IACjG,MAAM,MAAM,GAAmB,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAClD,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE;KACrE,CAAC,CAAC,CAAC;IACJ,mFAAmF;IACnF,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,kBAAkB,EAAE,CAAC,CAAC;IAClE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAc,EACd,MAA6D;IAE7D,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,iBAAiB,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7F,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,UAAU,CAAC,GAAgB,EAAE,GAAe,EAAE,IAAe;IAC1E,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,GAAG,CAAC,IAAI,yBAAyB,CAAC;IAC3E,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;IAElC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,+CAA+C,GAAG,CAAC,IAAI,sBAAsB,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QAClH,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,QAAQ,EAAE;gBAAE,MAAM;YAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;YACtB,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,4EAA4E;IAC5E,8EAA8E;IAC9E,iFAAiF;IACjF,kEAAkE;IAClE,MAAM,SAAS,GAAG,gCAAgC,CAAC;IACnD,8DAA8D;IAC9D,MAAM,GAAG,GAAQ,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;QAClD,MAAM,IAAI,KAAK,CAAC,mFAAmF,CAAC,CAAC;IACvG,CAAC,CAAC,CAAC;IACH,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,MAAM,YAAY,GAAG,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC;QACvB,MAAM,EAAE,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC;QACtC,OAAO,EAAE;YACP,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnE,YAAY;YACZ,2EAA2E;YAC3E,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzE,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC;YAC7C,sBAAsB,EAAE,IAAI;SAC7B;KACF,CAAC,CAAC;IACH,iFAAiF;IACjF,iFAAiF;IACjF,gFAAgF;IAChF,iFAAiF;IACjF,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;QACnC,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE,MAAM;QAC3B,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,KAAK,EAAE,CAAC;YACV,QAAQ,GAAG,IAAI,CAAC;YAChB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjB,SAAS,IAAI,KAAK,CAAC;YACnB,SAAS;QACX,CAAC;QACD,wEAAwE;QACxE,0EAA0E;QAC1E,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,KAAK;YAAE,YAAY,IAAI,KAAK,CAAC;IACnC,CAAC;IACD,IAAI,CAAC,QAAQ,IAAI,YAAY,EAAE,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACxB,SAAS,GAAG,YAAY,CAAC;IAC3B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,SAAS,kBAAkB,CAAC,OAAgB;IAC1C,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACvD,MAAM,CAAC,GAAG,OAA8B,CAAC;IACzC,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc;QAAE,OAAO,EAAE,CAAC;IACzC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC;IACnB,IAAI,EAAE,EAAE,IAAI,KAAK,qBAAqB,IAAI,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;IACpG,IAAI,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;IAC3D,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,wFAAwF;AACxF,SAAS,mBAAmB,CAAC,OAAgB;IAC3C,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACvD,MAAM,CAAC,GAAG,OAA8B,CAAC;IACzC,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACvF,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC,IAAI,CAAC;IAC9C,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC;IAChD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,GAAgB,EAAE,GAAe;IACrD,MAAM,IAAI,GAAG,IAAI,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IACtD,IAAI,CAAC,KAAK,EAAE,CAAC;IACb,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAC9C,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACpB,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE,OAAO,CAAC,yCAAyC;QACtE,MAAM,GAAG,CAAC,GAAG,EAAE,mBAAmB,GAAG,CAAC,KAAK,WAAW,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAClG,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACpB,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE,OAAO;QAC5B,MAAM,GAAG,CAAC,GAAG,EAAE,mBAAmB,GAAG,CAAC,KAAK,WAAW,EAAE;YACtD,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACxD,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,yCAAyC;AACzC,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAgB,EAAE,MAAoB;IACzE,wEAAwE;IACxE,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,sIAAsI,CAAC,CAAC;QACtJ,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IACvC,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,uCAAuC,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IAE7H,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9G,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,GAAgB,EAAE,QAAgB,EAAE,MAAoB;IAChF,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;QACxB,IAAI,GAAG,GAAsB,IAAI,CAAC;QAClC,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,+BAA+B;QACjC,CAAC;QACD,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,CAAC,KAAK,CAAC,kBAAkB,QAAQ,YAAY,GAAG,CAAC,IAAI,QAAQ,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YAC7F,MAAM,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/agent/runner.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,YAAY,EAAyC,KAAK,IAAI,EAA2D,MAAM,wBAAwB,CAAC;AAsIjK;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAC1C;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAejD;AAqBD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,YAAY,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI,CA64F7E;AA0DD;;;;GAIG;AACH,KAAK,YAAY,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;IACnC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC,CAAC;AAEF,sFAAsF;AACtF,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAYxF;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,MAAM,EAAE,EACnB,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,YAAY,EACpB,KAAK,GAAE,OAAe,EACtB,kBAAkB,GAAE,OAAe,GAClC,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAigBhF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAI9F;AA+DD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GACrE,MAAM,CA2FR;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd,CAqBA;AA4SD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAY/E"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,YAAY,EAAyC,KAAK,IAAI,EAA2D,MAAM,wBAAwB,CAAC;AAsIjK;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAC1C;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAejD;AAqBD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,YAAY,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI,CA64F7E;AA0DD;;;;GAIG;AACH,KAAK,YAAY,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;IACnC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC,CAAC;AAEF,sFAAsF;AACtF,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAYxF;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,MAAM,EAAE,EACnB,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,YAAY,EACpB,KAAK,GAAE,OAAe,EACtB,kBAAkB,GAAE,OAAe,GAClC,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAigBhF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAI9F;AA8ED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GACrE,MAAM,CAkFR;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd,CAqBA;AA4SD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAY/E"}
@@ -3276,6 +3276,19 @@ function parseCloudKeywords(keywords) {
3276
3276
  return [];
3277
3277
  }
3278
3278
  }
3279
+ /**
3280
+ * Serialize a single frontmatter scalar (title/description) via js-yaml so values
3281
+ * containing YAML-significant characters (colons, quotes, etc.) round-trip safely.
3282
+ * lineWidth: -1 disables js-yaml's 80-col folding, which would otherwise turn long
3283
+ * values into a multi-line `>-` block instead of keeping the one-line-per-field style.
3284
+ */
3285
+ function yamlScalarLine(key, value) {
3286
+ return yaml.dump({ [key]: value }, { lineWidth: -1 }).trimEnd();
3287
+ }
3288
+ /** Serialize a frontmatter list (keywords) the same way, one array entry per line. */
3289
+ function yamlListLines(key, items) {
3290
+ return yaml.dump({ [key]: items }, { lineWidth: -1 }).trimEnd().split('\n');
3291
+ }
3279
3292
  /**
3280
3293
  * Update frontmatter in file content with new metadata values
3281
3294
  * Preserves existing frontmatter structure and only updates specified fields
@@ -3290,14 +3303,11 @@ export function updateFrontmatter(content, updates) {
3290
3303
  }
3291
3304
  const frontmatterLines = ['---'];
3292
3305
  if (updates.title)
3293
- frontmatterLines.push(`title: ${updates.title}`);
3306
+ frontmatterLines.push(yamlScalarLine('title', updates.title));
3294
3307
  if (updates.description)
3295
- frontmatterLines.push(`description: ${updates.description}`);
3308
+ frontmatterLines.push(yamlScalarLine('description', updates.description));
3296
3309
  if (updates.keywords && updates.keywords.length > 0) {
3297
- frontmatterLines.push('keywords:');
3298
- for (const kw of updates.keywords) {
3299
- frontmatterLines.push(` - ${kw}`);
3300
- }
3310
+ frontmatterLines.push(...yamlListLines('keywords', updates.keywords));
3301
3311
  }
3302
3312
  frontmatterLines.push('---');
3303
3313
  return frontmatterLines.join('\n') + '\n' + content;
@@ -3326,24 +3336,21 @@ export function updateFrontmatter(content, updates) {
3326
3336
  const key = line.substring(0, colonIndex).trim().toLowerCase();
3327
3337
  if (key === 'title' && updates.title !== undefined) {
3328
3338
  if (!updatedKeys.has('title')) {
3329
- newLines.push(`title: ${updates.title}`);
3339
+ newLines.push(yamlScalarLine('title', updates.title));
3330
3340
  updatedKeys.add('title');
3331
3341
  }
3332
3342
  lastReplacedKey = 'title';
3333
3343
  }
3334
3344
  else if (key === 'description' && updates.description !== undefined) {
3335
3345
  if (!updatedKeys.has('description')) {
3336
- newLines.push(`description: ${updates.description}`);
3346
+ newLines.push(yamlScalarLine('description', updates.description));
3337
3347
  updatedKeys.add('description');
3338
3348
  }
3339
3349
  lastReplacedKey = 'description';
3340
3350
  }
3341
3351
  else if ((key === 'keywords' || key === 'tags') && updates.keywords !== undefined) {
3342
3352
  if (!updatedKeys.has('keywords')) {
3343
- newLines.push('keywords:');
3344
- for (const kw of updates.keywords) {
3345
- newLines.push(` - ${kw}`);
3346
- }
3353
+ newLines.push(...yamlListLines('keywords', updates.keywords));
3347
3354
  updatedKeys.add('keywords');
3348
3355
  }
3349
3356
  lastReplacedKey = 'keywords';
@@ -3355,16 +3362,13 @@ export function updateFrontmatter(content, updates) {
3355
3362
  }
3356
3363
  // Add any new keys that weren't in original frontmatter
3357
3364
  if (updates.title !== undefined && !updatedKeys.has('title')) {
3358
- newLines.push(`title: ${updates.title}`);
3365
+ newLines.push(yamlScalarLine('title', updates.title));
3359
3366
  }
3360
3367
  if (updates.description !== undefined && !updatedKeys.has('description')) {
3361
- newLines.push(`description: ${updates.description}`);
3368
+ newLines.push(yamlScalarLine('description', updates.description));
3362
3369
  }
3363
3370
  if (updates.keywords !== undefined && !updatedKeys.has('keywords')) {
3364
- newLines.push('keywords:');
3365
- for (const kw of updates.keywords) {
3366
- newLines.push(` - ${kw}`);
3367
- }
3371
+ newLines.push(...yamlListLines('keywords', updates.keywords));
3368
3372
  }
3369
3373
  return '---\n' + newLines.filter(l => l.trim() !== '').join('\n') + '\n---\n' + bodyContent;
3370
3374
  }