zidane 7.1.4 → 7.1.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.
Files changed (108) hide show
  1. package/README.md +4 -0
  2. package/dist/{acp-DbYGzaVK.js → acp-BxRfclPQ.js} +3 -3
  3. package/dist/{acp-DbYGzaVK.js.map → acp-BxRfclPQ.js.map} +1 -1
  4. package/dist/acp-cli.js +4 -4
  5. package/dist/acp.d.ts +1 -1
  6. package/dist/acp.js +1 -1
  7. package/dist/{agent-BlGt76qk.js → agent-CJbmpTmA.js} +94 -106
  8. package/dist/agent-CJbmpTmA.js.map +1 -0
  9. package/dist/agent.d.ts +1 -1
  10. package/dist/agent.js +1 -1
  11. package/dist/{anthropic-DPPs3wjJ.js → anthropic-BQdAnY-w.js} +2 -2
  12. package/dist/{anthropic-DPPs3wjJ.js.map → anthropic-BQdAnY-w.js.map} +1 -1
  13. package/dist/{approvals-CnFq-_Gu.js → approvals-DMxUgyVd.js} +162 -56
  14. package/dist/approvals-DMxUgyVd.js.map +1 -0
  15. package/dist/{auth-CNetxyJH.js → auth-DvMdkpGD.js} +4 -4
  16. package/dist/{auth-CNetxyJH.js.map → auth-DvMdkpGD.js.map} +1 -1
  17. package/dist/chat/pure.d.ts +4 -4
  18. package/dist/chat/pure.js +2 -2
  19. package/dist/chat.d.ts +6 -6
  20. package/dist/chat.js +5 -5
  21. package/dist/contexts/daytona.d.ts +1 -1
  22. package/dist/contexts/e2b.d.ts +1 -1
  23. package/dist/daemon-cli.js +2 -1
  24. package/dist/daemon-cli.js.map +1 -1
  25. package/dist/eval.d.ts +1 -1
  26. package/dist/extensions.d.ts +1 -1
  27. package/dist/extensions.js +1 -1
  28. package/dist/{fetch-url-ma-5_p0p.js → fetch-url-DX75gpL0.js} +3 -2
  29. package/dist/fetch-url-DX75gpL0.js.map +1 -0
  30. package/dist/headless.d.ts +1 -1
  31. package/dist/headless.js +1 -1
  32. package/dist/{index-DtF2yPaI.d.ts → index-BMOl2Bog.d.ts} +20 -11
  33. package/dist/index-BMOl2Bog.d.ts.map +1 -0
  34. package/dist/{index-BIJKozYj.d.ts → index-DCYh6lOp.d.ts} +71 -5
  35. package/dist/index-DCYh6lOp.d.ts.map +1 -0
  36. package/dist/index.d.ts +3 -2
  37. package/dist/index.js +6 -5
  38. package/dist/{ipc-DZffY7UT.js → ipc-BZcE9wnT.js} +2 -2
  39. package/dist/{ipc-DZffY7UT.js.map → ipc-BZcE9wnT.js.map} +1 -1
  40. package/dist/ipc.d.ts +28 -6
  41. package/dist/ipc.d.ts.map +1 -1
  42. package/dist/ipc.js +4 -4
  43. package/dist/mcp.d.ts +1 -1
  44. package/dist/{oauth-B6F43fti.js → oauth-DxHO17JE.js} +10 -8
  45. package/dist/{oauth-B6F43fti.js.map → oauth-DxHO17JE.js.map} +1 -1
  46. package/dist/output/stream-json.d.ts +1 -1
  47. package/dist/output/terminal.d.ts +1 -1
  48. package/dist/plugins.d.ts +1 -1
  49. package/dist/presets.d.ts +1 -1
  50. package/dist/presets.js +1 -1
  51. package/dist/prompts-Pqc3JdW_.d.ts +116 -0
  52. package/dist/prompts-Pqc3JdW_.d.ts.map +1 -0
  53. package/dist/providers/anthropic.d.ts +1 -1
  54. package/dist/providers/anthropic.js +1 -1
  55. package/dist/providers/arcee.d.ts +1 -1
  56. package/dist/providers/baseten.d.ts +1 -1
  57. package/dist/providers/cerebras.d.ts +1 -1
  58. package/dist/providers/local.d.ts +1 -1
  59. package/dist/providers/openai-compat.d.ts +1 -1
  60. package/dist/providers/openai.d.ts +1 -1
  61. package/dist/providers/openai.js +1 -1
  62. package/dist/providers/openrouter.d.ts +1 -1
  63. package/dist/providers/xai.d.ts +1 -1
  64. package/dist/providers/xai.js +1 -1
  65. package/dist/{providers-DP9kwXYo.js → providers-BVhnFyiY.js} +2 -2
  66. package/dist/{providers-DP9kwXYo.js.map → providers-BVhnFyiY.js.map} +1 -1
  67. package/dist/providers.d.ts +1 -1
  68. package/dist/providers.js +3 -3
  69. package/dist/restate.d.ts +1 -1
  70. package/dist/restate.js +1 -1
  71. package/dist/session/sqlite.d.ts +1 -1
  72. package/dist/session.d.ts +1 -1
  73. package/dist/{server-Cdrcncg-.js → shell-path-BBH8xrmU.js} +95 -9
  74. package/dist/shell-path-BBH8xrmU.js.map +1 -0
  75. package/dist/skills.d.ts +1 -1
  76. package/dist/{tool-formatters-Baj_BroN.d.ts → tool-formatters-BDm0tjgy.d.ts} +2 -2
  77. package/dist/{tool-formatters-Baj_BroN.d.ts.map → tool-formatters-BDm0tjgy.d.ts.map} +1 -1
  78. package/dist/tools/fetch-url.d.ts +1 -1
  79. package/dist/tools/fetch-url.d.ts.map +1 -1
  80. package/dist/tools/fetch-url.js +1 -1
  81. package/dist/tools/prompts.d.ts +2 -0
  82. package/dist/tools/prompts.js +164 -0
  83. package/dist/tools/prompts.js.map +1 -0
  84. package/dist/tools/web-search.d.ts +1 -1
  85. package/dist/tools/web-search.d.ts.map +1 -1
  86. package/dist/tools/web-search.js +3 -3
  87. package/dist/tools/web-search.js.map +1 -1
  88. package/dist/tools.d.ts +3 -2
  89. package/dist/tools.js +3 -2
  90. package/dist/{transcript-anchors-DfnBVZX0.d.ts → transcript-anchors-DjcEsOYq.d.ts} +2 -2
  91. package/dist/{transcript-anchors-DfnBVZX0.d.ts.map → transcript-anchors-DjcEsOYq.d.ts.map} +1 -1
  92. package/dist/tui.d.ts +3 -3
  93. package/dist/tui.js +43 -25
  94. package/dist/tui.js.map +1 -1
  95. package/dist/{turn-operations-BHeYIvSY.js → turn-operations-JynC5ODZ.js} +30 -2
  96. package/dist/{turn-operations-BHeYIvSY.js.map → turn-operations-JynC5ODZ.js.map} +1 -1
  97. package/dist/{turn-operations-Cl3RNQ2O.d.ts → turn-operations-Rqk3E0Ue.d.ts} +34 -4
  98. package/dist/{turn-operations-Cl3RNQ2O.d.ts.map → turn-operations-Rqk3E0Ue.d.ts.map} +1 -1
  99. package/dist/types.d.ts +3 -2
  100. package/docs/ARCHITECTURE.md +14 -2
  101. package/docs/SKILL.md +31 -1
  102. package/package.json +6 -1
  103. package/dist/agent-BlGt76qk.js.map +0 -1
  104. package/dist/approvals-CnFq-_Gu.js.map +0 -1
  105. package/dist/fetch-url-ma-5_p0p.js.map +0 -1
  106. package/dist/index-BIJKozYj.d.ts.map +0 -1
  107. package/dist/index-DtF2yPaI.d.ts.map +0 -1
  108. package/dist/server-Cdrcncg-.js.map +0 -1
package/dist/acp-cli.js CHANGED
@@ -1,18 +1,18 @@
1
1
  #!/usr/bin/env node
2
2
  import { m as openaiCompat } from "./openai-compat-Dy56weK8.js";
3
- import { Ct as basic_default } from "./agent-BlGt76qk.js";
3
+ import { Ct as basic_default } from "./agent-CJbmpTmA.js";
4
4
  import { r as createProcessContext } from "./contexts-CRE9pw07.js";
5
5
  import { createSandboxContext } from "./contexts/sandbox.js";
6
6
  import { p as resolveStorageDirs } from "./plugins-gbI7SBA6.js";
7
- import { r as anthropic } from "./anthropic-DPPs3wjJ.js";
7
+ import { r as anthropic } from "./anthropic-BQdAnY-w.js";
8
8
  import { arcee } from "./providers/arcee.js";
9
9
  import { baseten } from "./providers/baseten.js";
10
10
  import { cerebras } from "./providers/cerebras.js";
11
11
  import { openai } from "./providers/openai.js";
12
12
  import { openrouter } from "./providers/openrouter.js";
13
13
  import { xai } from "./providers/xai.js";
14
- import { d as StartUsageError, f as buildStartLocalOptions, h as startProviderNames, i as withAcpDefaultTools, m as startLocalArgOptions, p as parseStartArgValues, t as runAcpStdioServer } from "./acp-DbYGzaVK.js";
15
- import { T as modelsForDescriptor, h as BUILTIN_PROVIDERS, i as readCredentials, r as credentialsPath, t as detectAuth, v as credKeyOf } from "./auth-CNetxyJH.js";
14
+ import { d as StartUsageError, f as buildStartLocalOptions, h as startProviderNames, i as withAcpDefaultTools, m as startLocalArgOptions, p as parseStartArgValues, t as runAcpStdioServer } from "./acp-BxRfclPQ.js";
15
+ import { T as modelsForDescriptor, h as BUILTIN_PROVIDERS, i as readCredentials, r as credentialsPath, t as detectAuth, v as credKeyOf } from "./auth-DvMdkpGD.js";
16
16
  import { createDaytonaProvider } from "./contexts/daytona.js";
17
17
  import { createDockerContext } from "./contexts/docker.js";
18
18
  import { createE2BProvider } from "./contexts/e2b.js";
package/dist/acp.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { C_ as TurnUsage, Hg as PromptPart, O_ as ToolDef, Xi as AgentOptions, Zg as SessionContentBlock, jg as McpServerConfig, m_ as ToolResultContent, mg as AgentBehavior, nv as Session, ov as SessionStore, qi as Agent, t as Preset, ym as Provider } from "./index-BIJKozYj.js";
1
+ import { C_ as TurnUsage, Hg as PromptPart, O_ as ToolDef, Xi as AgentOptions, Zg as SessionContentBlock, av as Session, jg as McpServerConfig, lv as SessionStore, m_ as ToolResultContent, mg as AgentBehavior, qi as Agent, t as Preset, ym as Provider } from "./index-DCYh6lOp.js";
2
2
  import { m as ExecutionContext } from "./isolation-Kfoof0MM.js";
3
3
  import { Readable, Writable } from "node:stream";
4
4
 
package/dist/acp.js CHANGED
@@ -1,3 +1,3 @@
1
1
  import { n as JsonRpcRemoteError, r as createJsonRpcConnection } from "./json-rpc-rSWMUh9b.js";
2
- import { a as wrapToolsForAcpClient, c as sessionBlocksToAcp, i as withAcpDefaultTools, l as stopReasonFromRun, n as AcpProtocolError, o as acpMcpServersToZidane, r as createAcpServer, s as acpPromptToPromptParts, t as runAcpStdioServer, u as toolResultToAcpContent } from "./acp-DbYGzaVK.js";
2
+ import { a as wrapToolsForAcpClient, c as sessionBlocksToAcp, i as withAcpDefaultTools, l as stopReasonFromRun, n as AcpProtocolError, o as acpMcpServersToZidane, r as createAcpServer, s as acpPromptToPromptParts, t as runAcpStdioServer, u as toolResultToAcpContent } from "./acp-BxRfclPQ.js";
3
3
  export { AcpProtocolError, JsonRpcRemoteError, acpMcpServersToZidane, acpPromptToPromptParts, createAcpServer, createJsonRpcConnection, runAcpStdioServer, sessionBlocksToAcp, stopReasonFromRun, toolResultToAcpContent, withAcpDefaultTools, wrapToolsForAcpClient };
@@ -14,6 +14,7 @@ import { n as writeFileAtomicAsync, t as writeFileAtomic } from "./atomic-write-
14
14
  import { p as resolveStorageDirs, r as loadAgentPlugin } from "./plugins-gbI7SBA6.js";
15
15
  import { r as createLogger, t as consoleSink } from "./logger--C1VQjwJ.js";
16
16
  import { t as escapeXml } from "./xml-D5HBhJle.js";
17
+ import { toolPrompts } from "./tools/prompts.js";
17
18
  import { n as reconcileImageMediaType } from "./media-sniff-UKijEaiQ.js";
18
19
  import { f as wrapDiscoveredMcpTools, i as deriveMcpToolMeta, n as connectMcpServers, s as nonOwningMcpView } from "./mcp-CgNd-f3F.js";
19
20
  import { appendStaticSection, renderSystemForWire } from "./prompt.js";
@@ -3505,13 +3506,7 @@ const recordArtifact = {
3505
3506
  isConcurrencySafe: true,
3506
3507
  spec: {
3507
3508
  name: RECORD_ARTIFACT_TOOL,
3508
- description: [
3509
- "Record a deliverable this session produced so the user can find it later in the artifacts panel. An artifact is an OUTPUT the user would want a link to — not a step of the work.",
3510
- "Worth recording: a pull request or merge request URL, a deployment / preview URL, an issue or ticket you filed, a release or tag, a generated report / export / dataset the user asked for, a build output they will pick up.",
3511
- "Not worth recording: source files you edited or created as part of implementing a change, scratch files, logs, intermediate results, anything already implied by the diff.",
3512
- "Pull requests from `gh pr create`, `git commit` commits and newly created branches are detected automatically — record those only when the automatic path could not see them (e.g. a PR opened from a background shell task).",
3513
- "Idempotent per (kind, uri): recording the same artifact again refreshes its label/meta."
3514
- ].join("\n"),
3509
+ description: toolPrompts.record_artifact,
3515
3510
  inputSchema: {
3516
3511
  type: "object",
3517
3512
  properties: {
@@ -3988,7 +3983,7 @@ async function wholeReadRefusal(execution, handle, path, what) {
3988
3983
  const edit = {
3989
3984
  spec: {
3990
3985
  name: "edit",
3991
- description: "Replace exact `old_string` with `new_string` in a file. Fails if `old_string` is not unique unless `replace_all: true`. Prefer over `write_file` for surgical changes: preserves the rest of the file. Tolerates `read_file` line-number prefixes (`<N>\\t…`, `<N>|…`, or `<N>→…`) in `old_string` / `new_string`; they are stripped before matching/writing, so you can paste a numbered chunk verbatim.",
3986
+ description: toolPrompts.edit,
3992
3987
  inputSchema: {
3993
3988
  type: "object",
3994
3989
  properties: {
@@ -4190,7 +4185,7 @@ const glob = {
4190
4185
  isConcurrencySafe: true,
4191
4186
  spec: {
4192
4187
  name: "glob",
4193
- description: "Match files by glob pattern (supports **, *, ?). Relative to the execution context cwd; patterns may reach outside the workspace (e.g. \"../shared/**/*.ts\"). By default each row is `<path>\\t<size-bytes>\\t<mtime-iso>`; set `metadata: false` for a plain newline-separated list of paths. Always sorted.",
4188
+ description: toolPrompts.glob,
4194
4189
  inputSchema: {
4195
4190
  type: "object",
4196
4191
  properties: {
@@ -4311,7 +4306,7 @@ const grep = {
4311
4306
  isConcurrencySafe: true,
4312
4307
  spec: {
4313
4308
  name: "grep",
4314
- description: "Search file contents by regex. Returns matching paths (default), match content, or per-file counts. Backed by ripgrep when available, with a portable shell-listing + regex fallback when `rg` is absent.",
4309
+ description: toolPrompts.grep,
4315
4310
  inputSchema: {
4316
4311
  type: "object",
4317
4312
  properties: {
@@ -4612,7 +4607,7 @@ function createInteractionTool(options) {
4612
4607
  return {
4613
4608
  spec: {
4614
4609
  name: options.name ?? "interaction",
4615
- description: options.description ?? "Request structured input from the user or external system.",
4610
+ description: options.description ?? toolPrompts.interaction,
4616
4611
  inputSchema: options.schema
4617
4612
  },
4618
4613
  async execute(input, ctx) {
@@ -4646,7 +4641,7 @@ const listFiles = {
4646
4641
  isConcurrencySafe: true,
4647
4642
  spec: {
4648
4643
  name: "list_files",
4649
- description: "List the immediate entries (files and subdirectories) at literal directory `path`. Returns a newline-separated list; subdirectories carry a trailing `/`; or `(empty directory)` when the directory exists but is empty. Non-recursive: use `glob` for pattern matching across nested directories.",
4644
+ description: toolPrompts.list_files,
4650
4645
  inputSchema: {
4651
4646
  type: "object",
4652
4647
  properties: { path: {
@@ -4714,11 +4709,7 @@ function createModelSearchTool(models) {
4714
4709
  return {
4715
4710
  spec: {
4716
4711
  name: "model_search",
4717
- description: [
4718
- "List the models available for spawned subagents, with per-Mtok pricing and context windows.",
4719
- "Use it to cost-tier delegation: find a cheap, fast model for mechanical or high-volume work before calling `spawn` with its id in the `model` field.",
4720
- "Pass `query` to filter by substring across model id, name, and provider; omit it to list everything."
4721
- ].join("\n"),
4712
+ description: toolPrompts.model_search,
4722
4713
  inputSchema: {
4723
4714
  type: "object",
4724
4715
  properties: { query: {
@@ -4764,7 +4755,7 @@ function annotationFor(outcomes) {
4764
4755
  const multiEdit = {
4765
4756
  spec: {
4766
4757
  name: "multi_edit",
4767
- description: "Apply a sequential list of edits to a file. Each edit operates on the result of the previous APPLIED edit. Prefer this over multiple `edit` calls when several non-overlapping changes are needed in the same file. Edits run best-effort: a per-step failure (`old_string` not found, ambiguous match without `replace_all`, identical strings) is reported in the result but does NOT block the remaining steps. The file is written iff at least one step applied. The result lists per-hunk outcomes (`applied` / `failed`) so the model can re-issue just the failures without resending the whole batch. Each step tolerates `read_file` line-number prefixes (`<N>\\t…`, `<N>|…`, or `<N>→…`) in `old_string` / `new_string`.",
4758
+ description: toolPrompts.multi_edit,
4768
4759
  inputSchema: {
4769
4760
  type: "object",
4770
4761
  properties: {
@@ -5235,7 +5226,7 @@ const readFile$1 = {
5235
5226
  isConcurrencySafe: true,
5236
5227
  spec: {
5237
5228
  name: "read_file",
5238
- description: "Read a file by path. Text files return lines [offset..offset+limit). Default offset=1, limit=2000. Each line is prefixed with its 1-indexed line number followed by a tab (e.g. `42\\tconst foo = bar`); the prefix is metadata, not part of the file. Mirrors Claude Code's `cat -n`-style compact output for token efficiency. A trailing footer explains how to read the rest when truncated. Images (png/jpg/gif/webp) and PDFs return structured attachments for capable models; other binary files return a short marker rather than mojibake.",
5229
+ description: toolPrompts.read_file,
5239
5230
  inputSchema: {
5240
5231
  type: "object",
5241
5232
  properties: {
@@ -5639,74 +5630,31 @@ function isReadOnlyShellCommand(command) {
5639
5630
  return false;
5640
5631
  }
5641
5632
  /**
5642
- * Canonical sibling tools that, when registered alongside `shell`, are worth
5643
- * nudging the model toward — re-running `ls`/`cat` to "verify" a path the
5644
- * model already inspected through a dedicated tool is a measurable Kimi/Sonnet
5645
- * failure mode. Each entry maps the canonical tool name to the line rendered
5646
- * in the description; the rendered tool name itself is alias-resolved at
5647
- * render time so deployments that wire-rename (e.g. `read_file` → `Read`)
5648
- * still point at a name the model recognizes from the tool spec.
5649
- */
5650
- const SHELL_SWAP_HINTS = [
5651
- {
5652
- canonical: "read_file",
5653
- label: "Read files",
5654
- instead: "cat/head/tail"
5655
- },
5656
- {
5657
- canonical: "glob",
5658
- label: "File search",
5659
- instead: "find/ls"
5660
- },
5661
- {
5662
- canonical: "grep",
5663
- label: "Content search",
5664
- instead: "grep/rg"
5665
- },
5666
- {
5667
- canonical: "list_files",
5668
- label: "Directory listings",
5669
- instead: "ls"
5670
- },
5671
- {
5672
- canonical: "edit",
5673
- label: "Edit files",
5674
- instead: "sed/awk"
5675
- },
5676
- {
5677
- canonical: "write_file",
5678
- label: "Write files",
5679
- instead: "echo>/heredoc"
5680
- }
5681
- ];
5682
- /**
5683
- * Build the `shell` tool's description text.
5633
+ * Build the `shell` tool's description text from `toolPrompts.shell`.
5684
5634
  *
5685
5635
  * - The background-mode paragraphs are appended only when `allowBackground`
5686
5636
  * is true so the model isn't pointed at a feature the agent has disabled.
5687
5637
  * - The "prefer the dedicated tool" swap block is appended only for siblings
5688
- * actually present in `registeredCanonicals`. Hosts that ship `shell`
5689
- * without `read_file`/`glob`/etc. don't see misleading nudges. Aliased
5690
- * names are rendered via `toolAliases` so the printed name matches what
5691
- * the model sees in the tool spec.
5638
+ * actually present in `registeredCanonicals` — re-running `ls`/`cat` to
5639
+ * "verify" a path the model already inspected through a dedicated tool is
5640
+ * a measurable Kimi/Sonnet failure mode. Hosts that ship `shell` without
5641
+ * `read_file`/`glob`/etc. don't see misleading nudges. Aliased names are
5642
+ * rendered via `toolAliases` so the printed name matches what the model
5643
+ * sees in the tool spec.
5692
5644
  */
5693
5645
  function buildShellDescription({ allowBackground, registeredCanonicals, toolAliases }) {
5694
- const lines = [
5695
- "Execute a shell command from the workspace root (the `Cwd` in your environment) and return its combined stdout/stderr. Every call starts there; `cd` never persists between calls. Use relative paths (`cd src/app && bun test`, `ls docs`), not absolute ones.",
5696
- "Output is tail-priority truncated at 32 KiB by default; errors and exit-code summaries live in the tail.",
5697
- "By default each call appends a `(exit N, Nms)` footer and surfaces non-empty stderr in a separate section even on success; set `metadata: false` to return only stdout. Set maxOutputBytes=0 to disable truncation.",
5698
- "Pass a short `description` (5-10 words) explaining the intent of the command; it surfaces in the user-facing transcript so the human can follow your reasoning at a glance. Skip it only for trivial reads where the command speaks for itself."
5699
- ];
5646
+ const prompt = toolPrompts.shell;
5647
+ const lines = [prompt.core];
5700
5648
  if (registeredCanonicals && registeredCanonicals.size > 0) {
5701
5649
  const swaps = [];
5702
- for (const { canonical, label, instead } of SHELL_SWAP_HINTS) {
5650
+ for (const { canonical, label, instead } of prompt.swapHints) {
5703
5651
  if (!registeredCanonicals.has(canonical)) continue;
5704
5652
  const wireName = toolAliases?.[canonical] ?? canonical;
5705
5653
  swaps.push(`- ${label}: use \`${wireName}\` (not ${instead})`);
5706
5654
  }
5707
- if (swaps.length > 0) lines.push("", "When a dedicated tool fits, prefer it over shell:", ...swaps, "", "Re-running `ls`/`cat` on the same path is not useful: the prior result is still current unless you wrote to that path since.");
5655
+ if (swaps.length > 0) lines.push("", prompt.preferDedicated, ...swaps, "", prompt.reminder);
5708
5656
  }
5709
- if (allowBackground) lines.push("", "Long-running commands (`npm run dev`, `python train.py`, anything that would otherwise block your turn for minutes) → `run_in_background: true`. The call returns immediately with `{ task_id, output_path, pid }`; stdout + stderr stream to the log file at `output_path`.", "", "After spawning a background task: end your current turn (do NOT keep iterating). A `<task-notification>` arrives on the agent's NEXT user-turn with the final status. Polling the log file in a loop wastes tokens and blocks your turn: the notification IS the wake-up. If you NEED to check progress immediately (rare), call `read_file({ path: output_path, ... })` exactly once and decide. To terminate, use `shell_kill({ task_id })`. If, and only if, your very next step depends on the task's outcome, block on it with `wait_task({ task_id })` instead of polling.", "", "When called from inside a `spawn`'d subagent: you have NO next user-turn; your `agent.run` ends as soon as you finish responding. Start the background task, return a brief summary including the `task_id`, and end your turn. Ownership of the task is transferred to the parent agent when your run finishes; the parent will see the notification on ITS next user-turn.");
5657
+ if (allowBackground) lines.push("", prompt.background);
5710
5658
  return lines.join("\n");
5711
5659
  }
5712
5660
  /**
@@ -5933,12 +5881,7 @@ const shellKill = {
5933
5881
  isConcurrencySafe: true,
5934
5882
  spec: {
5935
5883
  name: "shell_kill",
5936
- description: [
5937
- "Terminate a running background task started by `shell({ run_in_background: true })`.",
5938
- "Sends SIGTERM to the whole process group so the shell wrapper AND its child commands die together.",
5939
- "Returns the final exit info (status, exit code, output path) or a \"no such task\" message when the id is unknown / already cleaned up.",
5940
- "Idempotent: calling on a task that has already terminated returns the cached exit info without re-killing."
5941
- ].join("\n"),
5884
+ description: toolPrompts.shell_kill,
5942
5885
  inputSchema: {
5943
5886
  type: "object",
5944
5887
  properties: { task_id: {
@@ -5969,7 +5912,7 @@ function createSkillsReadTool(options) {
5969
5912
  isConcurrencySafe: true,
5970
5913
  spec: {
5971
5914
  name: "skills_read",
5972
- description: "Read a bundled resource file from an active skill. The skill must have been activated via skills_use first. Path is relative to the skill's directory (e.g. \"references/REFERENCE.md\", \"assets/template.txt\").",
5915
+ description: toolPrompts.skills_read,
5973
5916
  inputSchema: {
5974
5917
  type: "object",
5975
5918
  properties: {
@@ -6021,7 +5964,7 @@ function createSkillsRunScriptTool(options) {
6021
5964
  return {
6022
5965
  spec: {
6023
5966
  name: "skills_run_script",
6024
- description: "Execute a script bundled with an active skill (from its scripts/ directory). The skill must have been activated via skills_use first. Returns stdout, stderr, and the exit code. Honors the script's shebang.",
5967
+ description: toolPrompts.skills_run_script,
6025
5968
  inputSchema: {
6026
5969
  type: "object",
6027
5970
  properties: {
@@ -6114,7 +6057,7 @@ function createSkillsUseTool(options) {
6114
6057
  return {
6115
6058
  spec: {
6116
6059
  name: "skills_use",
6117
- description: "Activate or deactivate a specialized skill. Call with `mode: \"activate\"` (default) to load a skill's full instructions when a task matches its catalog description. Call with `mode: \"deactivate\"` to release a skill whose allowed-tools restrictions are now in the way, e.g. when the skill's work is done or the active skill is blocking unrelated tool calls. After activating, follow the returned instructions; use skills_read to load referenced files and skills_run_script to execute bundled scripts.",
6060
+ description: toolPrompts.skills_use,
6118
6061
  inputSchema: {
6119
6062
  type: "object",
6120
6063
  properties: {
@@ -6630,7 +6573,7 @@ function buildSpawnTool(options, state) {
6630
6573
  runsNestedAgent: true,
6631
6574
  spec: {
6632
6575
  name: "spawn",
6633
- description: `Spawn a sub-agent for a self-contained task that benefits from isolation (separate context window, separate retries): for example, a deep research dive or a long codegen pass on a specific file. The sub-agent inherits your tool set (including \`spawn\` itself, depth-capped) and your system prompt unless overridden, runs independently, and returns its final response. Do NOT spawn for sequential steps you could do yourself.${modelCatalog ? " Children can run on a DIFFERENT model via the `model` field: cost-tier your delegation: mechanical, parallelizable, or high-volume search work belongs on cheaper/faster models, while synthesis and judgment stay on your own model." : ""}${options.persist ? " A stopped or failed sub-agent can be CONTINUED instead of restarted: pass `resume` with its child label (e.g. \"child-2\") and put the continuation instruction in `task`; the child picks up with its prior conversation intact." : ""}`,
6576
+ description: toolPrompts.spawn.core + (modelCatalog ? toolPrompts.spawn.modelTiering : "") + (options.persist ? toolPrompts.spawn.resume : ""),
6634
6577
  inputSchema: {
6635
6578
  type: "object",
6636
6579
  properties: {
@@ -6764,6 +6707,7 @@ function buildSpawnTool(options, state) {
6764
6707
  ...ctx.system !== void 0 ? { system: ctx.system } : {},
6765
6708
  tools: filteredTools,
6766
6709
  ...ctx.toolAliases !== void 0 ? { toolAliases: ctx.toolAliases } : {},
6710
+ ...ctx.toolDescriptions !== void 0 ? { toolDescriptions: ctx.toolDescriptions } : {},
6767
6711
  ...inheritedMcp.mcpServers !== void 0 ? { mcpServers: inheritedMcp.mcpServers } : {},
6768
6712
  ...ctx.skills !== void 0 ? { skills: ctx.skills } : {},
6769
6713
  ...ctx.behavior !== void 0 ? { behavior: ctx.behavior } : {}
@@ -7105,14 +7049,7 @@ function createToolSearchTool(options) {
7105
7049
  isConcurrencySafe: true,
7106
7050
  spec: {
7107
7051
  name: "tool_search",
7108
- description: [
7109
- "Discover and load schemas for additional tools listed in <searchable_tools>.",
7110
- "Tools listed there are advertised by name + description only; their input",
7111
- "schemas are not loaded into context until you surface them through this tool.",
7112
- "Pass `query` for a substring search, `names` to load specific tools, or `server`",
7113
- "to load every tool from one MCP server.",
7114
- dispatcher ? `Returned tools become callable through \`${dispatcher}\` (name + arguments) for the rest of this run.` : "Returned tools become callable for the rest of this run."
7115
- ].join(" "),
7052
+ description: [toolPrompts.tool_search.core, dispatcher ? toolPrompts.tool_search.callableVia(dispatcher) : toolPrompts.tool_search.callable].join(" "),
7116
7053
  inputSchema: {
7117
7054
  type: "object",
7118
7055
  properties: {
@@ -7176,11 +7113,7 @@ const MAX_TIMEOUT_MS = 30 * 6e4;
7176
7113
  const waitTask = {
7177
7114
  spec: {
7178
7115
  name: "wait_task",
7179
- description: [
7180
- "Wait for a background task started by `shell({ run_in_background: true })` to exit, then return its final status.",
7181
- "Returns immediately when the task has already terminated. On timeout the task keeps running and you can wait again, keep working, or `shell_kill` it.",
7182
- "Prefer ending your turn and receiving the `<task-notification>` when you have other useful work or nothing depends on the result; use wait_task only when the next step genuinely needs the task's outcome."
7183
- ].join("\n"),
7116
+ description: toolPrompts.wait_task,
7184
7117
  inputSchema: {
7185
7118
  type: "object",
7186
7119
  properties: {
@@ -7237,7 +7170,7 @@ const waitTask = {
7237
7170
  const writeFile$1 = {
7238
7171
  spec: {
7239
7172
  name: "write_file",
7240
- description: "Write `content` to `path`, creating any missing parent directories. Overwrites existing files in full; prefer `edit` / `multi_edit` for surgical changes when you only want to alter part of a file. Returns one of: `Created <path> (N bytes)` (file did not exist), `Updated <path> (N bytes)` (content differed), or `No change needed: <path> already at target state (N bytes)`, so the model can detect no-ops without a separate `read_file`.",
7173
+ description: toolPrompts.write_file,
7241
7174
  inputSchema: {
7242
7175
  type: "object",
7243
7176
  properties: {
@@ -7329,7 +7262,7 @@ function definePreset(config) {
7329
7262
  * stacking presets does the obvious thing without the spread-collision footgun:
7330
7263
  *
7331
7264
  * - `name`, `system`, `eager`, `skills` → last-defined wins
7332
- * - `tools`, `toolAliases`, `behavior` → shallow-merge (later keys override)
7265
+ * - `tools`, `toolAliases`, `toolDescriptions`, `behavior` → shallow-merge (later keys override)
7333
7266
  * - `behavior.dedupTools`, `behavior.toolBudgets` → **deep-merge** (per-tool-name; later wins on collision)
7334
7267
  * - `mcpServers` → concat with last-wins on `name` collision
7335
7268
  * - `hooks` → per-event concat; every handler fires
@@ -7366,6 +7299,10 @@ function composePresets(...presets) {
7366
7299
  ...out.toolAliases,
7367
7300
  ...p.toolAliases
7368
7301
  };
7302
+ if (p.toolDescriptions) out.toolDescriptions = {
7303
+ ...out.toolDescriptions,
7304
+ ...p.toolDescriptions
7305
+ };
7369
7306
  if (p.behavior) {
7370
7307
  const merged = {
7371
7308
  ...out.behavior,
@@ -11706,7 +11643,7 @@ function createCallToolTool(options = {}) {
11706
11643
  isConcurrencySafe: false,
11707
11644
  spec: {
11708
11645
  name: CALL_TOOL_NAME,
11709
- description: `Invoke a tool listed in <searchable_tools>. Load its schema with \`${discovery}\` first (the result shows the exact \`name\` and input schema), then call it here with \`name\` set to that tool name and \`arguments\` set to an object matching its schema. Arguments are validated against the tool's own schema; a validation error names the offending field.`,
11646
+ description: toolPrompts.call_tool(discovery),
11710
11647
  inputSchema: {
11711
11648
  type: "object",
11712
11649
  properties: {
@@ -14623,6 +14560,7 @@ async function runSingleToolDispatch(ctx, call, turnId, fixed) {
14623
14560
  ...ctx.inheritance.name !== void 0 ? { name: ctx.inheritance.name } : {},
14624
14561
  ...ctx.inheritance.system !== void 0 ? { system: ctx.inheritance.system } : {},
14625
14562
  ...ctx.inheritance.toolAliases !== void 0 ? { toolAliases: ctx.inheritance.toolAliases } : {},
14563
+ ...ctx.inheritance.toolDescriptions !== void 0 ? { toolDescriptions: ctx.inheritance.toolDescriptions } : {},
14626
14564
  ...ctx.inheritance.mcpServers !== void 0 ? { mcpServers: ctx.inheritance.mcpServers } : {},
14627
14565
  ...mcpConnectionFor(ctx),
14628
14566
  ...ctx.inheritance.skills !== void 0 ? { skills: ctx.inheritance.skills } : {},
@@ -15306,6 +15244,7 @@ async function startDurableToolExecution(ctx, call, turnId, index) {
15306
15244
  ...ctx.inheritance.name !== void 0 ? { name: ctx.inheritance.name } : {},
15307
15245
  ...ctx.inheritance.system !== void 0 ? { system: ctx.inheritance.system } : {},
15308
15246
  ...ctx.inheritance.toolAliases !== void 0 ? { toolAliases: ctx.inheritance.toolAliases } : {},
15247
+ ...ctx.inheritance.toolDescriptions !== void 0 ? { toolDescriptions: ctx.inheritance.toolDescriptions } : {},
15309
15248
  ...ctx.inheritance.mcpServers !== void 0 ? { mcpServers: ctx.inheritance.mcpServers } : {},
15310
15249
  ...mcpConnectionFor(ctx),
15311
15250
  ...ctx.inheritance.skills !== void 0 ? { skills: ctx.inheritance.skills } : {},
@@ -16373,6 +16312,44 @@ function applyToolCatalogTransforms(tools, transforms, phase, mcpToolNames) {
16373
16312
  for (const tool of Object.values(next)) if (tool?.spec?.name) out[tool.spec.name] = tool;
16374
16313
  return out;
16375
16314
  }
16315
+ /**
16316
+ * Apply `AgentOptions.toolDescriptions` to a spec-name-indexed registry.
16317
+ * Returns a new record; matched tools are shallow-copied with a rewritten
16318
+ * `spec.description` so the host's original `ToolDef` (and the framework's
16319
+ * `builtinShell` identity) is never mutated. Unmatched keys are ignored.
16320
+ *
16321
+ * Callers run this LAST in their pipeline — after catalog transforms and the
16322
+ * built-in `shell` rewrite — so a function-form override sees the text the
16323
+ * model would otherwise have received.
16324
+ */
16325
+ function applyToolDescriptionOverrides(tools, overrides, mcpToolNames, mcpServers) {
16326
+ if (!overrides || Object.keys(overrides).length === 0) return tools;
16327
+ const out = { ...tools };
16328
+ for (const [name, override] of Object.entries(overrides)) {
16329
+ const tool = out[name];
16330
+ if (!tool) continue;
16331
+ const current = tool.spec.description || "";
16332
+ let description;
16333
+ if (typeof override === "string") description = override;
16334
+ else if (typeof override === "function") {
16335
+ const mcpServer = mcpToolNames.has(name) ? resolveMcpToolParts(name, mcpServers)?.server : void 0;
16336
+ description = override(current, {
16337
+ name,
16338
+ spec: tool.spec,
16339
+ ...mcpServer ? { mcpServer } : {}
16340
+ });
16341
+ } else continue;
16342
+ if (typeof description !== "string" || description === current) continue;
16343
+ out[name] = {
16344
+ ...tool,
16345
+ spec: {
16346
+ ...tool.spec,
16347
+ description
16348
+ }
16349
+ };
16350
+ }
16351
+ return out;
16352
+ }
16376
16353
  async function applySkillPolicies(input) {
16377
16354
  if (!input.policies?.length || input.skills.length === 0) return;
16378
16355
  const byName = new Map(input.skills.map((skill) => [skill.name, skill]));
@@ -16525,7 +16502,7 @@ function resolveToolSearchMode(toolSearch, providerName) {
16525
16502
  * dispatch-map lookup.
16526
16503
  */
16527
16504
  function buildRunDisclosureState(input) {
16528
- const { tools: baseTools, mcpToolNames, mcpServers, toolDisclosure, toolSearch, toolAliases, hasRunToolOverride, providerName } = input;
16505
+ const { tools: baseTools, mcpToolNames, mcpServers, toolDisclosure, toolSearch, toolAliases, toolDescriptions, hasRunToolOverride, providerName } = input;
16529
16506
  const toolSearchMode = resolveToolSearchMode(toolSearch, providerName);
16530
16507
  const disclosure = partitionToolDisclosure(baseTools, mcpToolNames, mcpServers, toolDisclosure, toolAliases);
16531
16508
  const unlocked = new Set(disclosure.eagerCanonicalNames);
@@ -16570,6 +16547,12 @@ function buildRunDisclosureState(input) {
16570
16547
  unlocked.add(CALL_TOOL_NAME);
16571
16548
  initialUnlocked.add(CALL_TOOL_NAME);
16572
16549
  }
16550
+ const injected = {};
16551
+ for (const name of Object.keys(tools)) if (!baseTools[name]) injected[name] = tools[name];
16552
+ tools = {
16553
+ ...tools,
16554
+ ...applyToolDescriptionOverrides(injected, toolDescriptions, mcpToolNames, mcpServers)
16555
+ };
16573
16556
  }
16574
16557
  return {
16575
16558
  disclosure,
@@ -16726,7 +16709,7 @@ async function drainTaskNotifications(input) {
16726
16709
  * run's capabilities.
16727
16710
  */
16728
16711
  function buildRunToolRegistry(input) {
16729
- const { runOverrideTools, sourceTools, mcpConnection, mcpServers, mcpToolNameSeparator, toolAliases, resolvedSkills, skillsConfig, skillActivationState, hooks, toolCatalogTransforms, executionContext, behavior } = input;
16712
+ const { runOverrideTools, sourceTools, mcpConnection, mcpServers, mcpToolNameSeparator, toolAliases, resolvedSkills, skillsConfig, skillActivationState, hooks, toolCatalogTransforms, toolDescriptions, executionContext, behavior } = input;
16730
16713
  const runBaseTools = runOverrideTools !== void 0 ? runOverrideTools : mcpConnection ? {
16731
16714
  ...sourceTools,
16732
16715
  ...mcpConnection.tools
@@ -16773,7 +16756,7 @@ function buildRunToolRegistry(input) {
16773
16756
  });
16774
16757
  }
16775
16758
  return {
16776
- tools,
16759
+ tools: applyToolDescriptionOverrides(tools, toolDescriptions, mcpToolNames, mcpServers),
16777
16760
  mcpToolNames,
16778
16761
  toolAliases: effectiveToolAliases
16779
16762
  };
@@ -17140,6 +17123,7 @@ function foldExtensionRegistry(options) {
17140
17123
  const composed = composeExtensionPreset(reg, {
17141
17124
  ...options.tools !== void 0 ? { tools: options.tools } : {},
17142
17125
  ...options.toolAliases !== void 0 ? { toolAliases: options.toolAliases } : {},
17126
+ ...options.toolDescriptions !== void 0 ? { toolDescriptions: options.toolDescriptions } : {},
17143
17127
  ...options.behavior !== void 0 ? { behavior: options.behavior } : {},
17144
17128
  ...options.mcpServers !== void 0 ? { mcpServers: options.mcpServers } : {},
17145
17129
  ...options.skills !== void 0 ? { skills: options.skills } : {},
@@ -17161,6 +17145,7 @@ function foldExtensionRegistry(options) {
17161
17145
  ...options,
17162
17146
  ...composed.tools !== void 0 ? { tools: composed.tools } : {},
17163
17147
  ...composed.toolAliases !== void 0 ? { toolAliases: composed.toolAliases } : {},
17148
+ ...composed.toolDescriptions !== void 0 ? { toolDescriptions: composed.toolDescriptions } : {},
17164
17149
  ...composed.behavior !== void 0 ? { behavior: composed.behavior } : {},
17165
17150
  ...composed.mcpServers !== void 0 ? { mcpServers: composed.mcpServers } : {},
17166
17151
  ...composed.skills !== void 0 ? { skills: composed.skills } : {},
@@ -17201,7 +17186,7 @@ function warnContextContributorFailureOnce(contributor, err) {
17201
17186
  process.stderr.write(`[zidane/agent] context breakdown contributor failed${owner}: ${errorMessage(err)}\n`);
17202
17187
  }
17203
17188
  function createAgent(rawOptions) {
17204
- const { provider: providerOption, name: agentName, system: agentSystem, tools: agentTools, toolAliases, behavior: agentBehavior, execution, handle: injectedHandle, mcpServers, session, readState: agentReadState, toolState: toolStateStore, skills: agentSkills, mcpConnector, mcpToolWrap, eager, hooks: initialHooks, clock: agentClock, toolKill, contextBreakdownSections, runTransforms, behaviorTransforms, toolCatalogTransforms, mcpConfigTransforms, skillPolicies, toolResultMetadata, artifacts: artifactsOption } = foldExtensionRegistry(rawOptions);
17189
+ const { provider: providerOption, name: agentName, system: agentSystem, tools: agentTools, toolAliases, toolDescriptions, behavior: agentBehavior, execution, handle: injectedHandle, mcpServers, session, readState: agentReadState, toolState: toolStateStore, skills: agentSkills, mcpConnector, mcpToolWrap, eager, hooks: initialHooks, clock: agentClock, toolKill, contextBreakdownSections, runTransforms, behaviorTransforms, toolCatalogTransforms, mcpConfigTransforms, skillPolicies, toolResultMetadata, artifacts: artifactsOption } = foldExtensionRegistry(rawOptions);
17205
17190
  const providers = normalizeProviders(providerOption);
17206
17191
  const provider = providers[0];
17207
17192
  const hooks = createHooks();
@@ -17479,6 +17464,7 @@ function createAgent(rawOptions) {
17479
17464
  skillActivationState,
17480
17465
  hooks,
17481
17466
  toolCatalogTransforms,
17467
+ toolDescriptions,
17482
17468
  executionContext,
17483
17469
  behavior: resolvedBehavior
17484
17470
  });
@@ -17489,6 +17475,7 @@ function createAgent(rawOptions) {
17489
17475
  toolDisclosure,
17490
17476
  toolSearch,
17491
17477
  toolAliases: effectiveToolAliases,
17478
+ toolDescriptions,
17492
17479
  hasRunToolOverride: options.tools !== void 0,
17493
17480
  providerName: runProvider.name
17494
17481
  });
@@ -17856,6 +17843,7 @@ function createAgent(rawOptions) {
17856
17843
  ...agentSystem !== void 0 ? { system: agentSystem } : {},
17857
17844
  tools: sourceTools,
17858
17845
  ...effectiveToolAliases !== void 0 ? { toolAliases: effectiveToolAliases } : {},
17846
+ ...toolDescriptions !== void 0 ? { toolDescriptions } : {},
17859
17847
  ...allMcpServers.length > 0 ? { mcpServers: allMcpServers } : {},
17860
17848
  mcpConnection: () => mcpConnection,
17861
17849
  ...agentSkills !== void 0 ? { skills: agentSkills } : {}
@@ -18229,7 +18217,7 @@ function createAgent(rawOptions) {
18229
18217
  ...mcpConnection.tools
18230
18218
  } : sourceTools;
18231
18219
  const mcpNames = new Set(mcpConnection ? Object.keys(mcpConnection.tools) : []);
18232
- const preRunTools = applyToolCatalogTransforms(baseTools, toolCatalogTransforms, "pre-run", mcpNames);
18220
+ const preRunTools = applyToolDescriptionOverrides(applyToolCatalogTransforms(baseTools, toolCatalogTransforms, "pre-run", mcpNames), toolDescriptions, mcpNames, mcpServers);
18233
18221
  const preRunSeparatorAliases = buildMcpToolNameSeparatorAliases(mcpNames, mcpServers, agentBehavior?.mcpToolNameSeparator ?? "_");
18234
18222
  const preRunBaseAliases = preRunSeparatorAliases ? {
18235
18223
  ...preRunSeparatorAliases,
@@ -18423,4 +18411,4 @@ function createAgent(rawOptions) {
18423
18411
  //#endregion
18424
18412
  export { ExtensionInstallError as $, defaultRepeatGuardTracked as $n, DEFAULT_KEYBINDINGS as $t, buildPostCompactAttachments as A, resolveExtensionConfigValue as An, reserveChildLabel as At, buildFullCompactPrompt as B, fileKind as Bn, multiEdit as Bt, rehomePersistedStubs as C, setDebugLogSink as Cn, basic_default as Ct, resolvePersistDir as D, isValidExtensionConfigItem as Dn, createToolSearchTool as Dt, resolveMcpWarningsDir as E, coerceExtensionConfigInput as En, waitTask as Et, BASE_INSTRUCTIONS as F, serializedPayloadBytes as Fn, createShellTool as Ft, sliceForCompaction as G, renderArtifactRow as Gn, createInteractionTool as Gt, buildUpToCompactPrompt as H, parseShortstat as Hn, formatModelLine as Ht, NO_TOOLS_PREAMBLE as I, BUILTIN_ARTIFACT_KINDS as In, shell as It, truncateHeadForPtlRetry as J, AUTO_COMPACT_MIN_GROWTH_FRACTION as Jn, edit as Jt, stripImagesFromTurns as K, resolveArtifactKind as Kn, grep as Kt, TRAILER as L, artifactKindLabel as Ln, tailTruncate as Lt, selectFilesFromSession as M, toWireConfigSchema as Mn, createSkillsRunScriptTool as Mt, selectRecentFiles as N, EXTENSION_BUS_MAX_PAYLOAD_BYTES as Nn, createSkillsReadTool as Nt, resolveSessionDir as O, isValidExtensionConfigValue as On, createSpawnTool as Ot, compactConversation as P, createExtensionBus as Pn, shellKill as Pt, createExtensionPromptBridge as Q, defaultRepeatGuardNormalize as Qn, recordArtifact as Qt, buildCompactPrompt as R, branchKind as Rn, readFile$1 as Rt, migrateSessionArtifactDirs as S, createDebugLog as Sn, basicTools as St, resolveLegacySessionDir as T, clampExtensionConfigNumber as Tn, WAIT_TASK_TIMED_OUT_PREFIX as Tt, ANCHOR_PREVIEW_MAX_CHARS as U, pullRequestKind as Un, matchModelEntries as Ut, buildTailCompactPrompt as V, githubTokenSource as Vn, createModelSearchTool as Vt, anchorPreviewFor as W, refreshArtifact as Wn, listFiles as Wt, CompactPromptTooLongError as X, effectiveContextWindow as Xn, artifacts_default as Xt, CompactInvalidInputError as Y, OUTPUT_RESERVE_TOKENS as Yn, validateToolArgs as Yt, EMPTY_EXTENSION_REGISTRY as Z, shouldAutoCompact as Zn, RECORD_ARTIFACT_TOOL as Zt, PERSISTED_STUB_PREFIX as _, discoverExtensions as _n, createArtifactsSurface as _t, stagedToolState as a, groupBindings as an, hydrateReadStateFromSessionAsync as ar, removeInstalledExtension as at, cleanupPersistedSession as b, parseExtensionScanPathEnv as bn, composePresets as bt, INTERRUPT_MESSAGE_FOR_TOOL_USE as c, mergeKeybindings as cn, discoverAndBuildExtensionRegistry as ct, TOOL_USE_SKIPPED_MESSAGE as d, readKeybindingsRaw as dn, composeExtensionPreset as dt, KEYBINDING_DEFS as en, normalizeShellCommand as er, fetchExtensionSource as et, applyCompactSummaryCutoff as f, resolveExtensionKeybindings as fn, disposeExtensionRegistry as ft, unwrapCallTool as g, defaultExtensionScanPaths as gn, partitionExtensionCatalog as gt, CALL_TOOL_NAME as h, ENTRY_CANDIDATES as hn, mergeContributions as ht, isToolStateOps as i, formatBindingForDisplay as in, hydrateReadStateFromSession as ir, readExtensionInstallProvenance as it, selectFilesFromReadState as j, sanitizeExtensionConfigActionPatch as jn, createSkillsUseTool as jt, resolveTasksDir as k, resolveExtensionConfig as kn, isSpawnTool as kt, SHELL_CASCADE_CANCEL_MESSAGE as l, parseBindingSpec as ln, buildExtensionPreset as lt, renderStaleReadNotice as m, registerExtensionHostModules as mn, filterRegistryPlugins as mt, DEFAULT_MAX_VALUE_BYTES as n, KEYBINDING_KEY_COL_WIDTH as nn, getReadState as nr, listExtensionCandidates as nt, normalizeProviders as o, keybindingsPath as on, readStateKey as or, updateInstalledExtension as ot, collectNewlyStaleReadPaths as p, stripJsonComments as pn, filterExtensionRegistry as pt, summaryToTurn as q, createArtifactDetectHook as qn, glob as qt, createToolStateController as r, ensureKeybindingsFile as rn, hashContent as rr, parseExtensionInstallSource as rt, resolveModelTargets as s, matchesBinding as sn, resolveReadStateMap as sr, createExtensionHud as st, createAgent as t, KEYBINDING_DEF_BY_ACTION as tn, stableStringify as tr, installExtensionFromSpec as tt, TOOL_USE_CANCELLED_MESSAGE as u, readKeybindings as un, buildExtensionRegistry as ut, PERSISTENCE_PREVIEW_BYTES as v, inlineLoadedExtension as vn, createExtensionHostRuntimeBridge as vt, resolveLegacyPersistDir as w, defineExtension as wn, writeFile$1 as wt, maybePersistToolResult as x, scanExtensionDirectories as xn, definePreset as xt, buildPersistedStub as y, isExtensionDefinition as yn, createWorkspaceSurface as yt, buildFromCompactPrompt as z, commitKind as zn, looksBinary as zt };
18425
18413
 
18426
- //# sourceMappingURL=agent-BlGt76qk.js.map
18414
+ //# sourceMappingURL=agent-CJbmpTmA.js.map