zidane 5.7.7 → 5.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -1
- package/dist/{agent-BSPhByzT.d.ts → agent-DYghZGC8.d.ts} +135 -2
- package/dist/agent-DYghZGC8.d.ts.map +1 -0
- package/dist/chat/pure.d.ts +3 -3
- package/dist/chat.d.ts +6 -6
- package/dist/chat.js +2 -2
- package/dist/headless-DnjYDckH.js +502 -0
- package/dist/headless-DnjYDckH.js.map +1 -0
- package/dist/headless.d.ts +2 -0
- package/dist/headless.js +2 -0
- package/dist/{index-B6h9C_JE.d.ts → index-B2cMuK6S.d.ts} +1285 -1124
- package/dist/index-B2cMuK6S.d.ts.map +1 -0
- package/dist/{index-DmbrQjOk.d.ts → index-CVzpMtdq.d.ts} +2 -2
- package/dist/{index-DmbrQjOk.d.ts.map → index-CVzpMtdq.d.ts.map} +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.js +6 -241
- package/dist/index.js.map +1 -1
- package/dist/{login-C8Kc4gH0.js → login-D-3A5CK7.js} +2 -2
- package/dist/{login-C8Kc4gH0.js.map → login-D-3A5CK7.js.map} +1 -1
- package/dist/mcp.d.ts +1 -1
- package/dist/{presets-DTxFbEZ5.js → presets-B1gWui0v.js} +2 -2
- package/dist/{presets-DTxFbEZ5.js.map → presets-B1gWui0v.js.map} +1 -1
- package/dist/presets.d.ts +2 -2
- package/dist/presets.js +1 -1
- package/dist/providers.d.ts +1 -1
- package/dist/restate.d.ts +1 -1
- package/dist/session/sqlite.d.ts +1 -1
- package/dist/session.d.ts +1 -1
- package/dist/skills.d.ts +2 -2
- package/dist/{tool-formatters-fUAp2Nr4.d.ts → tool-formatters-0FEGRd6w.d.ts} +2 -2
- package/dist/{tool-formatters-fUAp2Nr4.d.ts.map → tool-formatters-0FEGRd6w.d.ts.map} +1 -1
- package/dist/tools/fetch-url.d.ts +1 -1
- package/dist/tools/web-search.d.ts +1 -1
- package/dist/{tools-dkB_jARJ.js → tools-BmPeBGU1.js} +196 -5
- package/dist/tools-BmPeBGU1.js.map +1 -0
- package/dist/tools.d.ts +2 -2
- package/dist/tools.js +1 -1
- package/dist/{transcript-anchors-Cl7lbbeP.js → transcript-anchors-Bp5bV0Bv.js} +31 -4
- package/dist/transcript-anchors-Bp5bV0Bv.js.map +1 -0
- package/dist/{transcript-anchors-qxevvEwT.d.ts → transcript-anchors-D2erm5iS.d.ts} +4 -4
- package/dist/transcript-anchors-D2erm5iS.d.ts.map +1 -0
- package/dist/tui.d.ts +3 -3
- package/dist/tui.js +5 -5
- package/dist/tui.js.map +1 -1
- package/dist/{turn-operations-CE1prnuP.d.ts → turn-operations-CeUrtsaM.d.ts} +3 -3
- package/dist/{turn-operations-CE1prnuP.d.ts.map → turn-operations-CeUrtsaM.d.ts.map} +1 -1
- package/dist/types-BPw_i5vb.js.map +1 -1
- package/dist/types.d.ts +3 -3
- package/docs/ARCHITECTURE.md +2 -1
- package/docs/CHAT.md +19 -1
- package/docs/HEADLESS.md +138 -0
- package/docs/SKILL.md +1 -0
- package/package.json +8 -2
- package/dist/agent-BSPhByzT.d.ts.map +0 -1
- package/dist/index-B6h9C_JE.d.ts.map +0 -1
- package/dist/tools-dkB_jARJ.js.map +0 -1
- package/dist/transcript-anchors-Cl7lbbeP.js.map +0 -1
- package/dist/transcript-anchors-qxevvEwT.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presets-
|
|
1
|
+
{"version":3,"file":"presets-B1gWui0v.js","names":[],"sources":["../src/presets/basic.ts","../src/presets/index.ts"],"sourcesContent":["import { definePreset } from '.'\nimport { edit, listFiles, multiEdit, readFile, shell, shellKill, writeFile } from '../tools'\nimport { createSpawnTool } from '../tools/spawn'\n\n/**\n * Core tools available in every basic preset (without spawn).\n *\n * `edit` and `multi_edit` ship in the basic set because surgical edits are the\n * default modality for production agents — `write_file` is for full overwrites.\n * `glob` and `grep` are exported but opt-in: not every agent needs codebase\n * search, and shipping them by default would force `tool:gate` work onto\n * consumers that prefer the model to use `shell` + classic Unix tools.\n */\nexport const basicTools = { shell, shellKill, readFile, writeFile, listFiles, edit, multiEdit }\n\nexport default definePreset({\n name: 'basic',\n system: 'You are a helpful assistant with access to shell, file reading, file writing, surgical and multi-edit tools, directory listing, and sub-agent spawning. Prefer `edit` / `multi_edit` for in-place changes and `write_file` for full file overwrites. Use them to accomplish tasks in the project directory.',\n // `persist: true` shares the parent's session with every child agent — child\n // turns land in `session.turns` tagged with their own `runId`, and the run\n // itself is recorded in `session.runs` with `parentRunId` + `depth`. That's\n // what lets a reloaded TUI session reconstruct the full subagent tree (see\n // `eventsFromTurns` in `tui/store.ts`). Hosts that want children in-memory\n // only can construct their own preset with `createSpawnTool()`.\n tools: { ...basicTools, spawn: createSpawnTool({ persist: true }) },\n})\n","import type { AgentHooks, AgentOptions } from '../agent'\n\nexport type { AgentHookMap } from '../agent'\n\n/**\n * A preset is a reusable slice of `AgentOptions` — spread it into `createAgent()`\n * to configure tools, a default system prompt, aliases, behavior defaults, and\n * agent-lifetime hooks.\n *\n * `provider`, `execution`, `session`, and internal fields are excluded so presets\n * remain shareable and composable.\n *\n * ```ts\n * import { basic } from 'zidane/presets'\n * createAgent({ ...basic, provider })\n * ```\n *\n * ### Composing multiple presets\n *\n * Bare `...spread` is shallow — `{ ...a, ...b }` overwrites every key `b`\n * defines, including `hooks`. Use {@link composePresets} when you want\n * field-aware merging (per-event hook concat, tools shallow-merge, etc.):\n *\n * ```ts\n * createAgent({ ...composePresets(basic, telemetry, mine), provider })\n * ```\n */\nexport type Preset = Omit<Partial<AgentOptions>, 'provider' | 'execution' | 'session' | 'mcpConnector'>\n\n/**\n * Identity helper for type inference when defining a preset.\n */\nexport function definePreset(config: Preset): Preset {\n return config\n}\n\n/**\n * Field-aware composition of presets. Right-most preset wins for scalar fields;\n * objects shallow-merge; arrays and hook handler lists concatenate. Designed so\n * stacking presets does the obvious thing without the spread-collision footgun:\n *\n * - `name`, `system`, `eager`, `skills` → last-defined wins\n * - `tools`, `toolAliases`, `behavior` → shallow-merge (later keys override)\n * - `behavior.dedupTools`, `behavior.toolBudgets` → **deep-merge** (per-tool-name; later wins on collision)\n * - `mcpServers` → concat with last-wins on `name` collision\n * - `hooks` → per-event concat; every handler fires\n *\n * `hooks` always emerges as `event → handler[]` so downstream registration\n * (in `createAgent`) sees a uniform shape. Order of handlers within an event\n * follows preset order: earlier presets register first.\n *\n * `mcpServers` is deduped by `name` because shipping two servers with the same\n * name would trip the connector at runtime — a later preset overriding an\n * earlier preset's `github` server is the practical intent.\n *\n * `behavior.dedupTools` and `behavior.toolBudgets` get the same per-key deep-merge\n * because they are tool-name-keyed records — a preset that ships a dedup hasher\n * for one tool should not erase a hasher another preset ships for a different\n * tool. Last-wins still applies on a per-tool collision so a downstream preset\n * can override an upstream preset's policy for one specific tool. Other\n * `behavior` fields keep last-wins semantics.\n */\nexport function composePresets(...presets: Preset[]): Preset {\n const out: Preset = {}\n const hooksByEvent: { [K in keyof AgentHooks]?: AgentHooks[K][] } = {}\n // Keep mcpServers in source-order on first sight, but allow later\n // declarations to override earlier ones with the same `name`. A `Map`\n // keyed by name gives O(1) override + stable iteration.\n const mcpByName = new Map<string, NonNullable<Preset['mcpServers']>[number]>()\n\n for (const p of presets) {\n if (p.name !== undefined)\n out.name = p.name\n if (p.system !== undefined)\n out.system = p.system\n if (p.eager !== undefined)\n out.eager = p.eager\n if (p.skills !== undefined)\n out.skills = p.skills\n if (p.tools)\n out.tools = { ...out.tools, ...p.tools }\n if (p.toolAliases)\n out.toolAliases = { ...out.toolAliases, ...p.toolAliases }\n if (p.behavior) {\n // Top-level shallow-merge first; then deep-merge the two tool-name-keyed\n // sub-records so per-tool entries from earlier presets aren't clobbered.\n const merged: NonNullable<Preset['behavior']> = { ...out.behavior, ...p.behavior }\n if (out.behavior?.dedupTools || p.behavior.dedupTools) {\n merged.dedupTools = { ...out.behavior?.dedupTools, ...p.behavior.dedupTools }\n }\n if (out.behavior?.toolBudgets || p.behavior.toolBudgets) {\n merged.toolBudgets = { ...out.behavior?.toolBudgets, ...p.behavior.toolBudgets }\n }\n out.behavior = merged\n }\n if (p.mcpServers) {\n for (const server of p.mcpServers)\n mcpByName.set(server.name, server)\n }\n if (p.hooks) {\n for (const [event, handler] of Object.entries(p.hooks)) {\n if (handler === undefined)\n continue\n const list = Array.isArray(handler) ? handler : [handler]\n const key = event as keyof AgentHooks\n // Safe cast: we read the loose `AgentHookMap` shape (handler-or-array)\n // and re-emit only as arrays. Each `list` element matches the event's\n // handler signature by construction (the input was typed `AgentHookMap`).\n const bucket = (hooksByEvent[key] ??= []) as unknown[]\n bucket.push(...(list as unknown[]))\n }\n }\n }\n\n if (mcpByName.size > 0)\n out.mcpServers = [...mcpByName.values()]\n\n if (Object.keys(hooksByEvent).length > 0)\n out.hooks = hooksByEvent\n\n return out\n}\n\nexport { default as basic, basicTools } from './basic'\n"],"mappings":";;;;;;;;;;;AAaA,MAAa,aAAa;CAAE;CAAO;CAAW;CAAU;CAAW;CAAW;CAAM;AAAU;AAE9F,IAAA,gBAAe,aAAa;CAC1B,MAAM;CACN,QAAQ;CAOR,OAAO;EAAE,GAAG;EAAY,OAAO,gBAAgB,EAAE,SAAS,KAAK,CAAC;CAAE;AACpE,CAAC;;;;;;ACOD,SAAgB,aAAa,QAAwB;CACnD,OAAO;AACT;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BA,SAAgB,eAAe,GAAG,SAA2B;CAC3D,MAAM,MAAc,CAAC;CACrB,MAAM,eAA8D,CAAC;CAIrE,MAAM,4BAAY,IAAI,IAAuD;CAE7E,KAAK,MAAM,KAAK,SAAS;EACvB,IAAI,EAAE,SAAS,KAAA,GACb,IAAI,OAAO,EAAE;EACf,IAAI,EAAE,WAAW,KAAA,GACf,IAAI,SAAS,EAAE;EACjB,IAAI,EAAE,UAAU,KAAA,GACd,IAAI,QAAQ,EAAE;EAChB,IAAI,EAAE,WAAW,KAAA,GACf,IAAI,SAAS,EAAE;EACjB,IAAI,EAAE,OACJ,IAAI,QAAQ;GAAE,GAAG,IAAI;GAAO,GAAG,EAAE;EAAM;EACzC,IAAI,EAAE,aACJ,IAAI,cAAc;GAAE,GAAG,IAAI;GAAa,GAAG,EAAE;EAAY;EAC3D,IAAI,EAAE,UAAU;GAGd,MAAM,SAA0C;IAAE,GAAG,IAAI;IAAU,GAAG,EAAE;GAAS;GACjF,IAAI,IAAI,UAAU,cAAc,EAAE,SAAS,YACzC,OAAO,aAAa;IAAE,GAAG,IAAI,UAAU;IAAY,GAAG,EAAE,SAAS;GAAW;GAE9E,IAAI,IAAI,UAAU,eAAe,EAAE,SAAS,aAC1C,OAAO,cAAc;IAAE,GAAG,IAAI,UAAU;IAAa,GAAG,EAAE,SAAS;GAAY;GAEjF,IAAI,WAAW;EACjB;EACA,IAAI,EAAE,YACJ,KAAK,MAAM,UAAU,EAAE,YACrB,UAAU,IAAI,OAAO,MAAM,MAAM;EAErC,IAAI,EAAE,OACJ,KAAK,MAAM,CAAC,OAAO,YAAY,OAAO,QAAQ,EAAE,KAAK,GAAG;GACtD,IAAI,YAAY,KAAA,GACd;GACF,MAAM,OAAO,MAAM,QAAQ,OAAO,IAAI,UAAU,CAAC,OAAO;GACxD,MAAM,MAAM;GAKZ,CADgB,aAAa,SAAS,CAAC,GAChC,KAAK,GAAI,IAAkB;EACpC;CAEJ;CAEA,IAAI,UAAU,OAAO,GACnB,IAAI,aAAa,CAAC,GAAG,UAAU,OAAO,CAAC;CAEzC,IAAI,OAAO,KAAK,YAAY,EAAE,SAAS,GACrC,IAAI,QAAQ;CAEd,OAAO;AACT"}
|
package/dist/presets.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { n as AgentHookMap } from "./agent-
|
|
2
|
-
import { a as basicTools, i as _default, n as composePresets, r as definePreset, t as Preset } from "./index-
|
|
1
|
+
import { n as AgentHookMap } from "./agent-DYghZGC8.js";
|
|
2
|
+
import { a as basicTools, i as _default, n as composePresets, r as definePreset, t as Preset } from "./index-B2cMuK6S.js";
|
|
3
3
|
export { type AgentHookMap, Preset, _default as basic, basicTools, composePresets, definePreset };
|
package/dist/presets.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { i as basic_default, n as definePreset, r as basicTools, t as composePresets } from "./presets-
|
|
1
|
+
import { i as basic_default, n as definePreset, r as basicTools, t as composePresets } from "./presets-B1gWui0v.js";
|
|
2
2
|
export { basic_default as basic, basicTools, composePresets, definePreset };
|
package/dist/providers.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { At as openaiCompat, Bt as anthropic, Ct as OpenRouterParams, Dt as OpenAICompatParams, Et as OpenAICompatHttpError, Ft as CursorParams, It as cursor, Lt as CerebrasParams, Mt as openai, Nt as LocalParams, Ot as classifyOpenAICompatError, Pt as local, Rt as cerebras, St as sanitizeToolSpecs, Tt as OpenAICompatAuthHeader, Vt as applyAnthropicCacheBreakpoints, _t as TurnResult, bt as SchemaSanitizeResult, dt as StreamCallbacks, ft as StreamOptions, gt as ToolSpec, ht as ToolResult, jt as OpenAIParams, kt as mapOAIFinishReason, lt as Provider, mt as ToolCall, pt as TokenCountPayload, ut as ProviderCapabilities, vt as SchemaSanitizeOptions, wt as openrouter, xt as sanitizeToolSchema, yt as SchemaSanitizeProfile, zt as AnthropicParams } from "./agent-
|
|
1
|
+
import { At as openaiCompat, Bt as anthropic, Ct as OpenRouterParams, Dt as OpenAICompatParams, Et as OpenAICompatHttpError, Ft as CursorParams, It as cursor, Lt as CerebrasParams, Mt as openai, Nt as LocalParams, Ot as classifyOpenAICompatError, Pt as local, Rt as cerebras, St as sanitizeToolSpecs, Tt as OpenAICompatAuthHeader, Vt as applyAnthropicCacheBreakpoints, _t as TurnResult, bt as SchemaSanitizeResult, dt as StreamCallbacks, ft as StreamOptions, gt as ToolSpec, ht as ToolResult, jt as OpenAIParams, kt as mapOAIFinishReason, lt as Provider, mt as ToolCall, pt as TokenCountPayload, ut as ProviderCapabilities, vt as SchemaSanitizeOptions, wt as openrouter, xt as sanitizeToolSchema, yt as SchemaSanitizeProfile, zt as AnthropicParams } from "./agent-DYghZGC8.js";
|
|
2
2
|
export { type AnthropicParams, type CerebrasParams, type CursorParams, type LocalParams, type OpenAICompatAuthHeader, OpenAICompatHttpError, type OpenAICompatParams, type OpenAIParams, type OpenRouterParams, Provider, ProviderCapabilities, type SchemaSanitizeOptions, type SchemaSanitizeProfile, type SchemaSanitizeResult, StreamCallbacks, StreamOptions, TokenCountPayload, ToolCall, ToolResult, ToolSpec, TurnResult, anthropic, applyAnthropicCacheBreakpoints, cerebras, classifyOpenAICompatError, cursor, local, mapOAIFinishReason, openai, openaiCompat, openrouter, sanitizeToolSchema, sanitizeToolSpecs };
|
package/dist/restate.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { I as SessionStore, Ut as AgentClock, ft as StreamOptions, lt as Provider, y as ToolDef } from "./agent-
|
|
1
|
+
import { I as SessionStore, Ut as AgentClock, ft as StreamOptions, lt as Provider, y as ToolDef } from "./agent-DYghZGC8.js";
|
|
2
2
|
|
|
3
3
|
//#region src/restate/types.d.ts
|
|
4
4
|
/**
|
package/dist/session/sqlite.d.ts
CHANGED
package/dist/session.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { $ as autoDetectAndConvert, B as createRemoteStore, F as SessionRun, H as FileMapAdapter, I as SessionStore, L as createSession, M as CreateSessionOptions, N as Session, P as SessionData, R as loadSession, U as FileMapStoreOptions, V as createMemoryStore, W as createFileMapStore, Z as ToWireMessagesOptions, at as fromOpenAI, ct as toWireMessages,
|
|
1
|
+
import { $ as autoDetectAndConvert, B as createRemoteStore, F as SessionRun, H as FileMapAdapter, I as SessionStore, L as createSession, M as CreateSessionOptions, N as Session, P as SessionData, R as loadSession, U as FileMapStoreOptions, V as createMemoryStore, W as createFileMapStore, Z as ToWireMessagesOptions, at as fromOpenAI, ct as toWireMessages, fn as SessionMessage, it as fromAnthropic, ln as SessionContentBlock, ot as toAnthropic, pn as SessionTurn, st as toOpenAI, z as RemoteStoreOptions } from "./agent-DYghZGC8.js";
|
|
2
2
|
export { CreateSessionOptions, type FileMapAdapter, type FileMapStoreOptions, type RemoteStoreOptions, Session, type SessionContentBlock, SessionData, type SessionMessage, SessionRun, SessionStore, type SessionTurn, type ToWireMessagesOptions, autoDetectAndConvert, createFileMapStore, createMemoryStore, createRemoteStore, createSession, fromAnthropic, fromOpenAI, loadSession, toAnthropic, toOpenAI, toWireMessages };
|
package/dist/skills.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { A as SkillSource, D as SkillConfig, O as SkillDiagnostic, c as DeactivationReason, d as createSkillActivationState, j as SkillsConfig, k as SkillResource, l as SkillActivationState, o as ActivationVia, s as ActiveSkill, u as SkillActivationStateOptions } from "./agent-
|
|
2
|
-
import { S as installAllowedToolsGate, _ as inferSource, a as SkillValidationResult, b as buildCatalog, c as parseAllowedToolPattern, d as validateSkillName, f as resolveSkills, g as getDefaultScanPaths, h as discoverSkills, i as SkillValidationIssue, l as validateResourcePath, m as SourcedScanPath, n as writeSkillToDisk, o as isToolAllowedByUnion, p as interpolateShellCommands, r as writeSkillsToDisk, s as matchesAllowedTool, t as defineSkill, u as validateSkillForWrite, v as parseFrontmatter, x as IMPLICITLY_ALLOWED_SKILL_TOOLS, y as parseSkillFile } from "./index-
|
|
1
|
+
import { A as SkillSource, D as SkillConfig, O as SkillDiagnostic, c as DeactivationReason, d as createSkillActivationState, j as SkillsConfig, k as SkillResource, l as SkillActivationState, o as ActivationVia, s as ActiveSkill, u as SkillActivationStateOptions } from "./agent-DYghZGC8.js";
|
|
2
|
+
import { S as installAllowedToolsGate, _ as inferSource, a as SkillValidationResult, b as buildCatalog, c as parseAllowedToolPattern, d as validateSkillName, f as resolveSkills, g as getDefaultScanPaths, h as discoverSkills, i as SkillValidationIssue, l as validateResourcePath, m as SourcedScanPath, n as writeSkillToDisk, o as isToolAllowedByUnion, p as interpolateShellCommands, r as writeSkillsToDisk, s as matchesAllowedTool, t as defineSkill, u as validateSkillForWrite, v as parseFrontmatter, x as IMPLICITLY_ALLOWED_SKILL_TOOLS, y as parseSkillFile } from "./index-CVzpMtdq.js";
|
|
3
3
|
export { type ActivationVia, type ActiveSkill, type DeactivationReason, IMPLICITLY_ALLOWED_SKILL_TOOLS, type SkillActivationState, type SkillActivationStateOptions, type SkillConfig, type SkillDiagnostic, type SkillResource, type SkillSource, type SkillValidationIssue, type SkillValidationResult, type SkillsConfig, type SourcedScanPath, buildCatalog, createSkillActivationState, defineSkill, discoverSkills, getDefaultScanPaths, inferSource, installAllowedToolsGate, interpolateShellCommands, isToolAllowedByUnion, matchesAllowedTool, parseAllowedToolPattern, parseFrontmatter, parseSkillFile, resolveSkills, validateResourcePath, validateSkillForWrite, validateSkillName, writeSkillToDisk, writeSkillsToDisk };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { gn as ThinkingLevel, lt as Provider } from "./agent-DYghZGC8.js";
|
|
2
2
|
import { OAuthProviderInterface } from "@earendil-works/pi-ai/oauth";
|
|
3
3
|
import { ReactNode } from "react";
|
|
4
4
|
|
|
@@ -1468,4 +1468,4 @@ declare function displayNameFor(name: string, input?: Record<string, unknown>):
|
|
|
1468
1468
|
declare function formatToolCall(name: string, input: Record<string, unknown>): ToolFormatLine | null;
|
|
1469
1469
|
//#endregion
|
|
1470
1470
|
export { anthropicDescriptor as $, SessionMeta as A, collectReferences as B, EditHunk as C, Owner as D, EditPayload as E, CompletionContext as F, ProviderKey as G, mergeReferences as H, CompletionItem as I, CustomField as J, detectAuth as K, CompletionProvider as L, StreamEvent as M, ToolCallDisplay as N, Picked as O, ActiveTrigger as P, ProviderDescriptor as Q, CompletionReference as R, EditDiffDisplay as S, EditOutcomeKind as T, AuthMethod as U, findActiveTrigger as V, ProviderAuth as W, ModelOption as X, ModelInfo as Y, OUTPUT_RESERVE_TOKENS as Z, isEditErrorResult as _, formatToolCall as a, getModelInfo as at, selectableTurnIds as b, splitPromptSegments as c, modelSupportsReasoning as ct, RequestApproval as d, openrouterDescriptor as dt, cerebrasDescriptor as et, SafeModeActions as f, piIdOf as ft, EDIT_TOOL_NAMES as g, useSafeModeQueue as h, displayNameFor as i, getContextWindow as it, Settings as j, Screen as k, ApprovalDecision as l, modelsForDescriptor as lt, useSafeModeActions as m, ToolDisplayMeta as n, effectiveContextWindow as nt, PromptSegment as o, localDescriptor as ot, SafeModeProvider as p, restoreModelOptions as pt, BUILTIN_PROVIDERS as q, ToolFormatLine as r, enabledModelOptions as rt, PromptSegmentRef as s, modelOptionsFor as st, TOOL_DISPLAY as t, credKeyOf as tt, ApprovalRequest as u, openaiDescriptor as ut, isTurnHighlighted as v, EditOutcome as w, turnSelectionOwnership as x, isVisible as y, applyInsert as z };
|
|
1471
|
-
//# sourceMappingURL=tool-formatters-
|
|
1471
|
+
//# sourceMappingURL=tool-formatters-0FEGRd6w.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-formatters-
|
|
1
|
+
{"version":3,"file":"tool-formatters-0FEGRd6w.d.ts","names":[],"sources":["../src/chat/providers.ts","../src/chat/auth.ts","../src/chat/completion-core.ts","../src/chat/types.ts","../src/chat/turn-selection.ts","../src/chat/safe-mode-context.tsx","../src/chat/prompt-segments.ts","../src/chat/tool-formatters.ts"],"mappings":"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"}
|
|
@@ -3643,6 +3643,183 @@ function buildPromptMessage(provider, parts) {
|
|
|
3643
3643
|
return defaultPromptMessage(parts);
|
|
3644
3644
|
}
|
|
3645
3645
|
//#endregion
|
|
3646
|
+
//#region src/repeat-guard.ts
|
|
3647
|
+
const DEFAULT_BLOCK_THRESHOLD = 4;
|
|
3648
|
+
const DEFAULT_ABORT_THRESHOLD = 8;
|
|
3649
|
+
/**
|
|
3650
|
+
* Default tracked-tool predicate: `shell` exactly, plus any tool whose
|
|
3651
|
+
* canonical name ends in `_execute_sql` (the MCP SQL-runner shape,
|
|
3652
|
+
* `mcp_<server>_execute_sql`). Both are auto-approved, side-effect-light
|
|
3653
|
+
* retry magnets — the exact loop shapes the abort escalation exists for.
|
|
3654
|
+
*/
|
|
3655
|
+
function defaultRepeatGuardTracked(name) {
|
|
3656
|
+
return name === "shell" || name.endsWith("_execute_sql");
|
|
3657
|
+
}
|
|
3658
|
+
function compileMatchers(tools) {
|
|
3659
|
+
if (tools === void 0) return defaultRepeatGuardTracked;
|
|
3660
|
+
if (tools.length === 0) return () => false;
|
|
3661
|
+
const exact = /* @__PURE__ */ new Set();
|
|
3662
|
+
const fns = [];
|
|
3663
|
+
for (const m of tools) if (typeof m === "string") exact.add(m);
|
|
3664
|
+
else fns.push(m);
|
|
3665
|
+
return (name) => {
|
|
3666
|
+
if (exact.has(name)) return true;
|
|
3667
|
+
for (const fn of fns) try {
|
|
3668
|
+
if (fn(name)) return true;
|
|
3669
|
+
} catch {}
|
|
3670
|
+
return false;
|
|
3671
|
+
};
|
|
3672
|
+
}
|
|
3673
|
+
/**
|
|
3674
|
+
* Canonicalize a shell command so semantically-identical invocations collapse
|
|
3675
|
+
* to one streak key:
|
|
3676
|
+
*
|
|
3677
|
+
* - strip a leading `cd <path> &&` (or `cd <path>;`) prefix — the model often
|
|
3678
|
+
* re-prefixes the same command with a `cd` into the project root.
|
|
3679
|
+
* - strip a trailing verify-tail of the shape `& sleep N ; <anything>` or
|
|
3680
|
+
* `; sleep N && <anything>` that the model appends to poll a just-started
|
|
3681
|
+
* process (`… & sleep 2 ; curl localhost`).
|
|
3682
|
+
* - collapse runs of whitespace to single spaces and trim.
|
|
3683
|
+
*
|
|
3684
|
+
* Conservative on purpose: it does NOT reorder flags or parse the command —
|
|
3685
|
+
* it only removes the two wrappers we actually saw inflate distinct-looking
|
|
3686
|
+
* retries of the same core command, plus whitespace noise.
|
|
3687
|
+
*/
|
|
3688
|
+
function normalizeShellCommand(command) {
|
|
3689
|
+
let s = command.trim();
|
|
3690
|
+
for (;;) {
|
|
3691
|
+
const m = /^cd\s+(?:"[^"]*"|'[^']*'|\S+)\s*(?:&&|;)\s*/.exec(s);
|
|
3692
|
+
if (!m) break;
|
|
3693
|
+
s = s.slice(m[0].length);
|
|
3694
|
+
}
|
|
3695
|
+
s = s.replace(/\s*(?:&&|&|;)\s*sleep\s+\d+(?:\.\d+)?\s*(?:&&|&|;)\s.*$/i, "");
|
|
3696
|
+
s = s.replace(/\s*(?:&&|&|;)\s*sleep\s+\d+(?:\.\d+)?\s*$/i, "");
|
|
3697
|
+
s = s.replace(/\s+/g, " ").trim();
|
|
3698
|
+
return s;
|
|
3699
|
+
}
|
|
3700
|
+
/**
|
|
3701
|
+
* Built-in normalizer used when the consumer doesn't supply one. Shell-shaped
|
|
3702
|
+
* tools get {@link normalizeShellCommand}; SQL-runner tools get a whitespace-
|
|
3703
|
+
* collapsed query; everything else falls back to a stable JSON encoding.
|
|
3704
|
+
* Returns `undefined` when there's no meaningful payload to key on (so the
|
|
3705
|
+
* call is excluded from streak tracking rather than keyed on `'{}'`).
|
|
3706
|
+
*/
|
|
3707
|
+
function defaultRepeatGuardNormalize(name, input) {
|
|
3708
|
+
if (name === "shell") {
|
|
3709
|
+
const cmd = input.command;
|
|
3710
|
+
if (typeof cmd !== "string" || cmd.trim().length === 0) return void 0;
|
|
3711
|
+
return `shell:${normalizeShellCommand(cmd)}`;
|
|
3712
|
+
}
|
|
3713
|
+
if (name.endsWith("_execute_sql")) {
|
|
3714
|
+
const q = input.query ?? input.sql ?? input.statement;
|
|
3715
|
+
if (typeof q !== "string" || q.trim().length === 0) return void 0;
|
|
3716
|
+
return `sql:${q.replace(/\s+/g, " ").trim().toLowerCase()}`;
|
|
3717
|
+
}
|
|
3718
|
+
try {
|
|
3719
|
+
return `json:${stableStringify(input)}`;
|
|
3720
|
+
} catch {
|
|
3721
|
+
return;
|
|
3722
|
+
}
|
|
3723
|
+
}
|
|
3724
|
+
/** Deterministic JSON with sorted keys so key order doesn't split a streak. */
|
|
3725
|
+
function stableStringify(value) {
|
|
3726
|
+
return JSON.stringify(value, (_k, v) => {
|
|
3727
|
+
if (v && typeof v === "object" && !Array.isArray(v)) {
|
|
3728
|
+
const sorted = {};
|
|
3729
|
+
for (const k of Object.keys(v).sort()) sorted[k] = v[k];
|
|
3730
|
+
return sorted;
|
|
3731
|
+
}
|
|
3732
|
+
return v;
|
|
3733
|
+
});
|
|
3734
|
+
}
|
|
3735
|
+
function formatBlockReason(reason, name, count) {
|
|
3736
|
+
if (typeof reason === "string") return reason;
|
|
3737
|
+
if (typeof reason === "function") try {
|
|
3738
|
+
const out = reason(name, count);
|
|
3739
|
+
if (typeof out === "string" && out.length > 0) return out;
|
|
3740
|
+
} catch {}
|
|
3741
|
+
return `Identical \`${name}\` call repeated ${count} times in a row. This is not making progress — do NOT retry the same payload. Change the command/arguments, inspect why it's failing first, or move on to a different step.`;
|
|
3742
|
+
}
|
|
3743
|
+
/**
|
|
3744
|
+
* Install the consecutive-identical repeat guard on a hook bus.
|
|
3745
|
+
*
|
|
3746
|
+
* `getConfig` returns the resolved `behavior.repeatGuard` (run override merged
|
|
3747
|
+
* with agent defaults), called lazily so a config attached after install
|
|
3748
|
+
* still takes effect. `abort` is bound to the agent's `AbortController` — the
|
|
3749
|
+
* gate calls it at the abort threshold and the loop's existing post-turn
|
|
3750
|
+
* `signal.aborted` check terminates the run (mirrors how `toolBudgets`
|
|
3751
|
+
* receives `enqueueSteer` rather than reaching into the loop).
|
|
3752
|
+
*
|
|
3753
|
+
* Returns an `uninstall` fn — the agent calls it in `finally` so handlers and
|
|
3754
|
+
* streak state never leak across runs.
|
|
3755
|
+
*/
|
|
3756
|
+
function installRepeatGuard(hooks, getConfig, abort) {
|
|
3757
|
+
const streaks = /* @__PURE__ */ new Map();
|
|
3758
|
+
function streakKey(runId, name) {
|
|
3759
|
+
return `${runId ?? "-"}::${name}`;
|
|
3760
|
+
}
|
|
3761
|
+
function resolve(config) {
|
|
3762
|
+
const blockThreshold = Math.max(2, Math.floor(typeof config.blockThreshold === "number" && Number.isFinite(config.blockThreshold) ? config.blockThreshold : DEFAULT_BLOCK_THRESHOLD));
|
|
3763
|
+
const rawAbort = typeof config.abortThreshold === "number" && Number.isFinite(config.abortThreshold) ? config.abortThreshold : DEFAULT_ABORT_THRESHOLD;
|
|
3764
|
+
const abortThreshold = rawAbort > 0 ? Math.max(blockThreshold + 1, Math.floor(rawAbort)) : Infinity;
|
|
3765
|
+
return {
|
|
3766
|
+
isTracked: compileMatchers(config.tools),
|
|
3767
|
+
normalize: config.normalize ?? defaultRepeatGuardNormalize,
|
|
3768
|
+
blockThreshold,
|
|
3769
|
+
abortThreshold
|
|
3770
|
+
};
|
|
3771
|
+
}
|
|
3772
|
+
async function gateHandler(ctx) {
|
|
3773
|
+
if (ctx.block || ctx.result !== void 0) return;
|
|
3774
|
+
const config = getConfig();
|
|
3775
|
+
if (!config) return;
|
|
3776
|
+
const { isTracked, normalize, blockThreshold, abortThreshold } = resolve(config);
|
|
3777
|
+
if (!isTracked(ctx.name)) return;
|
|
3778
|
+
let key;
|
|
3779
|
+
try {
|
|
3780
|
+
key = normalize(ctx.name, ctx.input);
|
|
3781
|
+
} catch {
|
|
3782
|
+
return;
|
|
3783
|
+
}
|
|
3784
|
+
if (typeof key !== "string" || key.length === 0) return;
|
|
3785
|
+
const slot = streakKey(ctx.runId, ctx.name);
|
|
3786
|
+
const prior = streaks.get(slot);
|
|
3787
|
+
const count = prior && prior.key === key ? prior.count + 1 : 1;
|
|
3788
|
+
streaks.set(slot, {
|
|
3789
|
+
key,
|
|
3790
|
+
count
|
|
3791
|
+
});
|
|
3792
|
+
if (count < blockThreshold) return;
|
|
3793
|
+
if (count >= abortThreshold) {
|
|
3794
|
+
ctx.block = true;
|
|
3795
|
+
ctx.reason = formatBlockReason(config.blockReason, ctx.name, count);
|
|
3796
|
+
await hooks.callHook("repeat-guard:exceeded", {
|
|
3797
|
+
tool: ctx.name,
|
|
3798
|
+
count,
|
|
3799
|
+
threshold: abortThreshold,
|
|
3800
|
+
turnId: ctx.turnId,
|
|
3801
|
+
action: "abort"
|
|
3802
|
+
});
|
|
3803
|
+
abort();
|
|
3804
|
+
return;
|
|
3805
|
+
}
|
|
3806
|
+
ctx.block = true;
|
|
3807
|
+
ctx.reason = formatBlockReason(config.blockReason, ctx.name, count);
|
|
3808
|
+
await hooks.callHook("repeat-guard:exceeded", {
|
|
3809
|
+
tool: ctx.name,
|
|
3810
|
+
count,
|
|
3811
|
+
threshold: blockThreshold,
|
|
3812
|
+
turnId: ctx.turnId,
|
|
3813
|
+
action: "block"
|
|
3814
|
+
});
|
|
3815
|
+
}
|
|
3816
|
+
const unregister = hooks.hook("tool:gate", gateHandler);
|
|
3817
|
+
return function uninstall() {
|
|
3818
|
+
unregister();
|
|
3819
|
+
streaks.clear();
|
|
3820
|
+
};
|
|
3821
|
+
}
|
|
3822
|
+
//#endregion
|
|
3646
3823
|
//#region src/tool-budgets.ts
|
|
3647
3824
|
/**
|
|
3648
3825
|
* Install the per-tool soft-budget middleware on a hook bus.
|
|
@@ -4815,6 +4992,7 @@ const HOOK_EVENT_SET = new Set([
|
|
|
4815
4992
|
"output",
|
|
4816
4993
|
"budget:exceeded",
|
|
4817
4994
|
"tool-budget:exceeded",
|
|
4995
|
+
"repeat-guard:exceeded",
|
|
4818
4996
|
"pairing:repair",
|
|
4819
4997
|
"tracing:redact",
|
|
4820
4998
|
"agent:abort",
|
|
@@ -4905,6 +5083,7 @@ function resolveBehavior(agentBehavior, runBehavior) {
|
|
|
4905
5083
|
dedupTools: runBehavior?.dedupTools ?? agentBehavior?.dedupTools,
|
|
4906
5084
|
requireReadBeforeEdit: runBehavior?.requireReadBeforeEdit ?? agentBehavior?.requireReadBeforeEdit,
|
|
4907
5085
|
toolBudgets: runBehavior?.toolBudgets ?? agentBehavior?.toolBudgets,
|
|
5086
|
+
repeatGuard: runBehavior?.repeatGuard ?? agentBehavior?.repeatGuard,
|
|
4908
5087
|
readLineNumbers: runBehavior?.readLineNumbers ?? agentBehavior?.readLineNumbers,
|
|
4909
5088
|
elideStaleReads: runBehavior?.elideStaleReads ?? agentBehavior?.elideStaleReads,
|
|
4910
5089
|
toolDisclosure: runBehavior?.toolDisclosure ?? agentBehavior?.toolDisclosure ?? "eager",
|
|
@@ -4917,7 +5096,8 @@ function resolveBehavior(agentBehavior, runBehavior) {
|
|
|
4917
5096
|
tasksDir: runBehavior?.tasksDir ?? agentBehavior?.tasksDir,
|
|
4918
5097
|
disableBackgroundTasks: runBehavior?.disableBackgroundTasks ?? agentBehavior?.disableBackgroundTasks,
|
|
4919
5098
|
strictToolPairing: runBehavior?.strictToolPairing ?? agentBehavior?.strictToolPairing ?? false,
|
|
4920
|
-
maxConsecutivePauseTurns: runBehavior?.maxConsecutivePauseTurns ?? agentBehavior?.maxConsecutivePauseTurns
|
|
5099
|
+
maxConsecutivePauseTurns: runBehavior?.maxConsecutivePauseTurns ?? agentBehavior?.maxConsecutivePauseTurns,
|
|
5100
|
+
persistTurns: runBehavior?.persistTurns ?? agentBehavior?.persistTurns
|
|
4921
5101
|
};
|
|
4922
5102
|
}
|
|
4923
5103
|
/**
|
|
@@ -5291,7 +5471,7 @@ function createAgent({ provider, name: agentName, system: agentSystem, tools: ag
|
|
|
5291
5471
|
const thinking = options.thinking ?? "off";
|
|
5292
5472
|
const model = options.model ?? provider.meta.defaultModel;
|
|
5293
5473
|
const resolvedBehavior = resolveBehavior(agentBehavior, options.behavior);
|
|
5294
|
-
const { maxConcurrentTools, maxTurns, maxCostUsd, maxTotalTokens, maxTokens, retry, thinkingBudget, modelOptions: behaviorModelOptions, schema, cache, toolOutputBudget, toolOutputBudgetExcludeTools, compactStrategy, compactThreshold, compactKeepTurns, thinkingDecay, dedupTools, toolBudgets, elideStaleReads, toolDisclosure, toolSearch, surfaceMcpInstructions, persistThreshold, persistExcludeTools, persistDir, persistMaxBytes, strictToolPairing, maxConsecutivePauseTurns } = resolvedBehavior;
|
|
5474
|
+
const { maxConcurrentTools, maxTurns, maxCostUsd, maxTotalTokens, maxTokens, retry, thinkingBudget, modelOptions: behaviorModelOptions, schema, cache, toolOutputBudget, toolOutputBudgetExcludeTools, compactStrategy, compactThreshold, compactKeepTurns, thinkingDecay, dedupTools, toolBudgets, repeatGuard, elideStaleReads, toolDisclosure, toolSearch, surfaceMcpInstructions, persistThreshold, persistExcludeTools, persistDir, persistMaxBytes, strictToolPairing, maxConsecutivePauseTurns, persistTurns } = resolvedBehavior;
|
|
5295
5475
|
const modelOptions = options.modelOptions ?? behaviorModelOptions;
|
|
5296
5476
|
let system = options.system || agentSystem || "You are a helpful assistant.";
|
|
5297
5477
|
const baseSystemForBreakdown = renderSystemForWire(system);
|
|
@@ -5493,8 +5673,9 @@ function createAgent({ provider, name: agentName, system: agentSystem, tools: ag
|
|
|
5493
5673
|
count: turns.length
|
|
5494
5674
|
});
|
|
5495
5675
|
};
|
|
5496
|
-
const
|
|
5497
|
-
const
|
|
5676
|
+
const perTurnSync = session && persistTurns !== false;
|
|
5677
|
+
const unregisterTurnSync = perTurnSync ? hooks.hook("turn:after", persistPendingTurns) : void 0;
|
|
5678
|
+
const unregisterToolResultsSync = perTurnSync ? hooks.hook("tool-results:after", persistPendingTurns) : void 0;
|
|
5498
5679
|
async function flushTurns(opts = {}) {
|
|
5499
5680
|
if (!session) return;
|
|
5500
5681
|
if (opts.failureFallback) await synthesizeMissingToolResults(turns, await session.generateTurnId?.() ?? clock.randomUUID(), runId, provider, hooks, clock);
|
|
@@ -5529,6 +5710,7 @@ function createAgent({ provider, name: agentName, system: agentSystem, tools: ag
|
|
|
5529
5710
|
}
|
|
5530
5711
|
const uninstallAllowedToolsGate = installAllowedToolsGate(hooks, skillActivationState);
|
|
5531
5712
|
const uninstallToolBudgets = installToolBudgetsGate(hooks, () => toolBudgets, (msg) => steeringQueue.push(msg));
|
|
5713
|
+
const uninstallRepeatGuard = installRepeatGuard(hooks, () => repeatGuard, () => abortController?.abort());
|
|
5532
5714
|
const uninstallDedupTools = installDedupToolsGate(hooks, () => dedupTools, () => session ?? void 0);
|
|
5533
5715
|
const uninstallLazyDisclosureGate = installLazyDisclosureGate(hooks, disclosure.lazyCanonicalNames, unlocked, discoveryToolName);
|
|
5534
5716
|
const runStartMs = await clock.now();
|
|
@@ -5674,6 +5856,7 @@ function createAgent({ provider, name: agentName, system: agentSystem, tools: ag
|
|
|
5674
5856
|
await deactivateAllSkills();
|
|
5675
5857
|
uninstallAllowedToolsGate();
|
|
5676
5858
|
uninstallDedupTools();
|
|
5859
|
+
uninstallRepeatGuard();
|
|
5677
5860
|
uninstallToolBudgets();
|
|
5678
5861
|
uninstallLazyDisclosureGate();
|
|
5679
5862
|
unregisterSpawnHook();
|
|
@@ -7482,10 +7665,18 @@ const writeFile$1 = {
|
|
|
7482
7665
|
const bytes = Buffer.byteLength(targetContent);
|
|
7483
7666
|
if (existing === targetContent) return `No change needed: ${targetPath} already at target state (${bytes} bytes).`;
|
|
7484
7667
|
await ctx.execution.writeFile(ctx.handle, targetPath, targetContent);
|
|
7668
|
+
const readState = resolveReadStateMap(ctx);
|
|
7669
|
+
if (readState) readState.set(readStateKey(ctx.handle.cwd, targetPath), {
|
|
7670
|
+
contentHash: hashContent(targetContent),
|
|
7671
|
+
offset: 0,
|
|
7672
|
+
limit: Number.POSITIVE_INFINITY,
|
|
7673
|
+
maxBytes: Number.POSITIVE_INFINITY,
|
|
7674
|
+
mtimeMs: Date.now()
|
|
7675
|
+
});
|
|
7485
7676
|
return existing === void 0 ? `Created ${targetPath} (${bytes} bytes).` : `Updated ${targetPath} (${bytes} bytes).`;
|
|
7486
7677
|
}
|
|
7487
7678
|
};
|
|
7488
7679
|
//#endregion
|
|
7489
7680
|
export { getReadState as A, enabledModelOptions as B, PERSISTED_STUB_PREFIX as C, maybePersistToolResult as D, cleanupPersistedSession as E, OUTPUT_RESERVE_TOKENS as F, modelSupportsReasoning as G, getModelInfo as H, anthropicDescriptor as I, openrouterDescriptor as J, modelsForDescriptor as K, cerebrasDescriptor as L, readStateKey as M, resolveReadStateMap as N, resolvePersistDir as O, BUILTIN_PROVIDERS as P, credKeyOf as R, validateToolArgs as S, buildPersistedStub as T, localDescriptor as U, getContextWindow as V, modelOptionsFor as W, restoreModelOptions as X, piIdOf as Y, shell as _, multiEdit as a, TOOL_USE_CANCELLED_MESSAGE as b, grep as c, createAgent as d, createToolSearchTool as f, createShellTool as g, createSkillsReadTool as h, readFile$1 as i, hashContent as j, resolveTasksDir as k, glob$1 as l, createSkillsRunScriptTool as m, createSpawnTool as n, listFiles as o, createSkillsUseTool as p, openaiDescriptor as q, shellKill as r, createInteractionTool as s, writeFile$1 as t, edit as u, INTERRUPT_MESSAGE_FOR_TOOL_USE as v, PERSISTENCE_PREVIEW_BYTES as w, TOOL_USE_SKIPPED_MESSAGE as x, SHELL_CASCADE_CANCEL_MESSAGE as y, effectiveContextWindow as z };
|
|
7490
7681
|
|
|
7491
|
-
//# sourceMappingURL=tools-
|
|
7682
|
+
//# sourceMappingURL=tools-BmPeBGU1.js.map
|