zidane 6.1.13 → 6.2.6

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 (88) hide show
  1. package/dist/{acp-BqfKqQ9x.js → acp-CYJvnqPa.js} +2 -2
  2. package/dist/{acp-BqfKqQ9x.js.map → acp-CYJvnqPa.js.map} +1 -1
  3. package/dist/acp-cli.js +4 -4
  4. package/dist/acp.d.ts +1 -1
  5. package/dist/acp.js +1 -1
  6. package/dist/{agent-CZ3WSWqR.js → agent-D11SxCvA.js} +155 -75
  7. package/dist/agent-D11SxCvA.js.map +1 -0
  8. package/dist/agent.d.ts +1 -1
  9. package/dist/agent.js +2 -2
  10. package/dist/{anthropic-CV_OSYVD.js → anthropic-DdlSgT6K.js} +47 -25
  11. package/dist/anthropic-DdlSgT6K.js.map +1 -0
  12. package/dist/{auth-D5FfJtLf.js → auth-Ys_7TmRj.js} +2 -2
  13. package/dist/{auth-D5FfJtLf.js.map → auth-Ys_7TmRj.js.map} +1 -1
  14. package/dist/{cache-telemetry-BKAwsNxm.js → cache-telemetry-KJ7B-_Gh.js} +8 -3
  15. package/dist/cache-telemetry-KJ7B-_Gh.js.map +1 -0
  16. package/dist/chat/pure.d.ts +3 -3
  17. package/dist/chat/pure.js +2 -2
  18. package/dist/chat.d.ts +12 -5
  19. package/dist/chat.d.ts.map +1 -1
  20. package/dist/chat.js +7 -7
  21. package/dist/{completion-core-CXYSVhZo.js → completion-core-BRo86R_L.js} +23 -10
  22. package/dist/completion-core-BRo86R_L.js.map +1 -0
  23. package/dist/contexts/daytona.d.ts +1 -1
  24. package/dist/contexts/e2b.d.ts +1 -1
  25. package/dist/eval.d.ts +1 -1
  26. package/dist/extensions.d.ts +2 -2
  27. package/dist/extensions.js +2 -2
  28. package/dist/headless.d.ts +1 -1
  29. package/dist/headless.js +1 -1
  30. package/dist/{index-X02SI0nt.d.ts → index-CNyYEOy0.d.ts} +351 -42
  31. package/dist/index-CNyYEOy0.d.ts.map +1 -0
  32. package/dist/index.d.ts +2 -2
  33. package/dist/index.js +6 -6
  34. package/dist/{generate-data-WL_yGVL6.js → inline-autocomplete-BAwBcZtD.js} +191 -6
  35. package/dist/inline-autocomplete-BAwBcZtD.js.map +1 -0
  36. package/dist/mcp.d.ts +1 -1
  37. package/dist/output/stream-json.d.ts +1 -1
  38. package/dist/output/terminal.d.ts +1 -1
  39. package/dist/presets.d.ts +1 -1
  40. package/dist/presets.js +1 -1
  41. package/dist/providers/anthropic.d.ts +1 -1
  42. package/dist/providers/anthropic.js +1 -1
  43. package/dist/providers/arcee.d.ts +1 -1
  44. package/dist/providers/baseten.d.ts +1 -1
  45. package/dist/providers/cerebras.d.ts +1 -1
  46. package/dist/providers/local.d.ts +1 -1
  47. package/dist/providers/openai-compat.d.ts +1 -1
  48. package/dist/providers/openai.d.ts +1 -1
  49. package/dist/providers/openrouter.d.ts +1 -1
  50. package/dist/providers/xai.d.ts +1 -1
  51. package/dist/providers.d.ts +1 -1
  52. package/dist/providers.js +1 -1
  53. package/dist/restate.d.ts +1 -1
  54. package/dist/session/sqlite.d.ts +1 -1
  55. package/dist/session.d.ts +1 -1
  56. package/dist/skills.d.ts +1 -1
  57. package/dist/{tool-formatters-kg8O6wHZ.d.ts → tool-formatters-B7oWiy5m.d.ts} +2 -2
  58. package/dist/tool-formatters-B7oWiy5m.d.ts.map +1 -0
  59. package/dist/tools/fetch-url.d.ts +1 -1
  60. package/dist/tools/web-search.d.ts +1 -1
  61. package/dist/tools.d.ts +1 -1
  62. package/dist/tools.js +1 -1
  63. package/dist/{transcript-anchors-DAF4RbyU.d.ts → transcript-anchors-BUZ915pM.d.ts} +2 -2
  64. package/dist/{transcript-anchors-DAF4RbyU.d.ts.map → transcript-anchors-BUZ915pM.d.ts.map} +1 -1
  65. package/dist/{transcript-anchors-DAf0Mr_9.js → transcript-anchors-cc4gsU-j.js} +23 -8
  66. package/dist/transcript-anchors-cc4gsU-j.js.map +1 -0
  67. package/dist/tui.d.ts +25 -15
  68. package/dist/tui.d.ts.map +1 -1
  69. package/dist/tui.js +539 -57
  70. package/dist/tui.js.map +1 -1
  71. package/dist/{turn-operations-zkZ1L0eb.d.ts → turn-operations-2Ou_DkbC.d.ts} +3 -3
  72. package/dist/{turn-operations-zkZ1L0eb.d.ts.map → turn-operations-2Ou_DkbC.d.ts.map} +1 -1
  73. package/dist/{turn-operations-D9p-y9EC.js → turn-operations-CXjRaltC.js} +72 -2
  74. package/dist/{turn-operations-D9p-y9EC.js.map → turn-operations-CXjRaltC.js.map} +1 -1
  75. package/dist/types-BIarq1qE.js.map +1 -1
  76. package/dist/types.d.ts +1 -1
  77. package/docs/ARCHITECTURE.md +1 -1
  78. package/docs/EXTENSIONS.md +43 -6
  79. package/package.json +2 -1
  80. package/scripts/eval.ts +21 -3
  81. package/dist/agent-CZ3WSWqR.js.map +0 -1
  82. package/dist/anthropic-CV_OSYVD.js.map +0 -1
  83. package/dist/cache-telemetry-BKAwsNxm.js.map +0 -1
  84. package/dist/completion-core-CXYSVhZo.js.map +0 -1
  85. package/dist/generate-data-WL_yGVL6.js.map +0 -1
  86. package/dist/index-X02SI0nt.d.ts.map +0 -1
  87. package/dist/tool-formatters-kg8O6wHZ.d.ts.map +0 -1
  88. package/dist/transcript-anchors-DAf0Mr_9.js.map +0 -1
package/dist/acp-cli.js CHANGED
@@ -1,17 +1,17 @@
1
1
  #!/usr/bin/env node
2
- import { Ft as resolveStorageDirs, lt as basic_default } from "./agent-CZ3WSWqR.js";
2
+ import { Ft as resolveStorageDirs, lt as basic_default } from "./agent-D11SxCvA.js";
3
3
  import { r as createProcessContext } from "./contexts-A4ep-iJs.js";
4
4
  import { createSandboxContext } from "./contexts/sandbox.js";
5
5
  import { m as openaiCompat } from "./openai-compat-TA7aihJ-.js";
6
- import { t as anthropic } from "./anthropic-CV_OSYVD.js";
6
+ import { t as anthropic } from "./anthropic-DdlSgT6K.js";
7
7
  import { arcee } from "./providers/arcee.js";
8
8
  import { baseten } from "./providers/baseten.js";
9
9
  import { cerebras } from "./providers/cerebras.js";
10
10
  import { t as xai } from "./xai-kGdhWmds.js";
11
11
  import { openai } from "./providers/openai.js";
12
12
  import { openrouter } from "./providers/openrouter.js";
13
- import { d as StartUsageError, f as buildStartLocalOptions, h as startProviderNames, i as withAcpDefaultTools, m as startLocalArgOptions, p as parseStartArgValues, t as runAcpStdioServer } from "./acp-BqfKqQ9x.js";
14
- import { f as credKeyOf, i as readCredentials, l as BUILTIN_PROVIDERS, r as credentialsPath, t as detectAuth, y as modelsForDescriptor } from "./auth-D5FfJtLf.js";
13
+ import { d as StartUsageError, f as buildStartLocalOptions, h as startProviderNames, i as withAcpDefaultTools, m as startLocalArgOptions, p as parseStartArgValues, t as runAcpStdioServer } from "./acp-CYJvnqPa.js";
14
+ import { f as credKeyOf, i as readCredentials, l as BUILTIN_PROVIDERS, r as credentialsPath, t as detectAuth, y as modelsForDescriptor } from "./auth-Ys_7TmRj.js";
15
15
  import { createDaytonaProvider } from "./contexts/daytona.js";
16
16
  import { createDockerContext } from "./contexts/docker.js";
17
17
  import { createE2BProvider } from "./contexts/e2b.js";
package/dist/acp.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { $d as PromptPart, Dd as AgentBehavior, Hd as McpServerConfig, Li as AgentOptions, Lp as Provider, Pf as ToolDef, Pi as Agent, Qf as Session, bf as ToolResultContent, cf as SessionContentBlock, kf as TurnUsage, np as SessionStore, t as Preset } from "./index-X02SI0nt.js";
1
+ import { Kf as ToolDef, Li as AgentOptions, Mf as ToolResultContent, Pi as Agent, Vf as TurnUsage, Yp as Provider, bf as SessionContentBlock, df as PromptPart, ef as McpServerConfig, mp as SessionStore, t as Preset, up as Session, zd as AgentBehavior } from "./index-CNyYEOy0.js";
2
2
  import { c as ExecutionContext } from "./types-BDccavwj.js";
3
3
  import { Readable, Writable } from "node:stream";
4
4
 
package/dist/acp.js CHANGED
@@ -1,2 +1,2 @@
1
- import { _ as createJsonRpcConnection, a as wrapToolsForAcpClient, c as sessionBlocksToAcp, g as JsonRpcRemoteError, 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-BqfKqQ9x.js";
1
+ import { _ as createJsonRpcConnection, a as wrapToolsForAcpClient, c as sessionBlocksToAcp, g as JsonRpcRemoteError, 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-CYJvnqPa.js";
2
2
  export { AcpProtocolError, JsonRpcRemoteError, acpMcpServersToZidane, acpPromptToPromptParts, createAcpServer, createJsonRpcConnection, runAcpStdioServer, sessionBlocksToAcp, stopReasonFromRun, toolResultToAcpContent, withAcpDefaultTools, wrapToolsForAcpClient };
@@ -1020,6 +1020,7 @@ function isValidExtensionConfigItem(item) {
1020
1020
  case "string": return typeof item.default === "string";
1021
1021
  case "enum": return typeof item.default === "string" && Array.isArray(item.options) && item.options.length > 0 && item.options.every((o) => o && typeof o.value === "string" && typeof o.label === "string") && item.options.some((o) => o.value === item.default);
1022
1022
  case "model": return typeof item.default === "string";
1023
+ case "action": return typeof item.run === "function" && (item.status === void 0 || typeof item.status === "function");
1023
1024
  default: return unreachableInvalidItem(item);
1024
1025
  }
1025
1026
  }
@@ -1061,6 +1062,7 @@ function isValidExtensionConfigValue(item, value) {
1061
1062
  case "model":
1062
1063
  if (typeof value !== "string") return false;
1063
1064
  break;
1065
+ case "action": return false;
1064
1066
  default: return unreachableInvalidItem(item);
1065
1067
  }
1066
1068
  if (item.validate) try {
@@ -1070,13 +1072,8 @@ function isValidExtensionConfigValue(item, value) {
1070
1072
  }
1071
1073
  return true;
1072
1074
  }
1073
- /**
1074
- * Resolve the effective value of a config item from its persisted value.
1075
- * THE single place graceful degradation lives: a `persisted` that's
1076
- * `undefined` (never set) OR fails {@link isValidExtensionConfigValue}
1077
- * collapses to `item.default`.
1078
- */
1079
1075
  function resolveExtensionConfigValue(item, persisted) {
1076
+ if (item.type === "action") return void 0;
1080
1077
  if (persisted === void 0) return item.default;
1081
1078
  if (!isValidExtensionConfigValue(item, persisted)) return item.default;
1082
1079
  return persisted;
@@ -1131,15 +1128,46 @@ function resolveExtensionConfig(registry, settings, extName, key) {
1131
1128
  return resolveExtensionConfigValue(item, settings?.extensionConfig?.[extName]?.[key]);
1132
1129
  }
1133
1130
  /**
1131
+ * Gate the `config` patch an action returned before the host persists it.
1132
+ * Per-entry, an item is accepted only when it names a registered VALUE
1133
+ * item of the declaring extension and passes that item's schema
1134
+ * ({@link isValidExtensionConfigValue}); everything else lands in
1135
+ * `rejected` for logging. Pure — the host applies `accepted` through its
1136
+ * own settings write path.
1137
+ */
1138
+ function sanitizeExtensionConfigActionPatch(items, patch) {
1139
+ const accepted = {};
1140
+ const rejected = [];
1141
+ if (!patch || typeof patch !== "object") return {
1142
+ accepted,
1143
+ rejected
1144
+ };
1145
+ for (const [key, value] of Object.entries(patch)) {
1146
+ const item = items?.[key];
1147
+ if (!item || item.type === "action" || !isValidExtensionConfigValue(item, value)) {
1148
+ rejected.push(key);
1149
+ continue;
1150
+ }
1151
+ accepted[key] = value;
1152
+ }
1153
+ return {
1154
+ accepted,
1155
+ rejected
1156
+ };
1157
+ }
1158
+ /**
1134
1159
  * Project the merged registry's config schema into a wire-safe shape:
1135
1160
  * categories as a flat array, items flattened to a single list carrying
1136
1161
  * their `extension` + `category`, with the non-serializable `validate`
1137
- * callback stripped. Pure factored out so its serialization is unit
1138
- * testable without an Electron / IPC harness.
1162
+ * callback stripped. Action items are omitted entirely their `run`
1163
+ * callback only exists in the main process, so a remote renderer (the
1164
+ * GUI) has nothing it could do with the row. Pure — factored out so its
1165
+ * serialization is unit testable without an Electron / IPC harness.
1139
1166
  */
1140
1167
  function toWireConfigSchema(registry) {
1141
1168
  const items = [];
1142
1169
  for (const [extension, byKey] of Object.entries(registry.configItems)) for (const stored of Object.values(byKey)) {
1170
+ if (stored.type === "action") continue;
1143
1171
  const { validate: _validate, ...rest } = stored;
1144
1172
  items.push({
1145
1173
  ...rest,
@@ -1309,8 +1337,12 @@ function findEntryFile(dir) {
1309
1337
  return null;
1310
1338
  }
1311
1339
  /**
1312
- * Discover + load every enabled / trusted extension reachable from the
1313
- * default scan paths. Returns one {@link LoadedExtension} per scan entry:
1340
+ * Discover + load every trusted extension reachable from the default
1341
+ * scan paths including ones the user's enable allowlist has toggled
1342
+ * OFF. Disabled extensions still import (and later run `setup()`) so
1343
+ * their config schema is browsable in Settings before enabling; the
1344
+ * allowlist gates their CONTRIBUTIONS at registry level, not their code.
1345
+ * The trust boundary stays with `trustProjectExtensions`. Returns one {@link LoadedExtension} per scan entry:
1314
1346
  * skipped entries have no definition, failed entries carry `error`.
1315
1347
  * Loaders never throw — the host can decide what to do with load errors
1316
1348
  * (typically: ship them to the Settings panel).
@@ -1343,22 +1375,11 @@ async function discoverExtensions(opts = {}) {
1343
1375
  }));
1344
1376
  }
1345
1377
  function selectExtensionEntries(entries, opts) {
1346
- const enabled = opts.enabled === void 0 ? null : new Set(opts.enabled);
1347
1378
  const trustProjectExtensions = opts.trustProjectExtensions ?? process.env.ZIDANE_TRUST_PROJECT_EXTENSIONS === "1";
1348
1379
  const selected = /* @__PURE__ */ new Map();
1349
1380
  const locked = /* @__PURE__ */ new Set();
1350
1381
  for (const entry of entries) {
1351
1382
  if (locked.has(entry.name)) continue;
1352
- if (enabled && !enabled.has(entry.name)) {
1353
- selected.set(entry.name, {
1354
- name: entry.name,
1355
- dir: entry.dir,
1356
- source: entry.source,
1357
- ...entry.manifest ? { manifest: entry.manifest } : {}
1358
- });
1359
- locked.add(entry.name);
1360
- continue;
1361
- }
1362
1383
  if (entry.source === "project" && !trustProjectExtensions) {
1363
1384
  if (!selected.has(entry.name)) selected.set(entry.name, {
1364
1385
  name: entry.name,
@@ -5956,10 +5977,7 @@ async function buildExtensionRegistry(loaded, options = {}) {
5956
5977
  continue;
5957
5978
  }
5958
5979
  extensionNameOwners.add(entry.name);
5959
- if (disabled.has(entry.name)) {
5960
- inactive.push(entry);
5961
- continue;
5962
- }
5980
+ const isDisabled = disabled.has(entry.name);
5963
5981
  const logger = createLogger(sink, { extension: entry.name });
5964
5982
  const gate = { open: true };
5965
5983
  const perExtSinks = {
@@ -5979,6 +5997,7 @@ async function buildExtensionRegistry(loaded, options = {}) {
5979
5997
  skillPolicies: [],
5980
5998
  promptTransforms: [],
5981
5999
  completionProviders: [],
6000
+ inlineAutocompleteProviders: [],
5982
6001
  commands: [],
5983
6002
  themes: createRecord(),
5984
6003
  agents: createRecord(),
@@ -5995,7 +6014,7 @@ async function buildExtensionRegistry(loaded, options = {}) {
5995
6014
  guiPanels: []
5996
6015
  };
5997
6016
  const abort = new AbortController();
5998
- const hudWriter = options.hud?.claim(entry.name);
6017
+ const hudWriter = isDisabled ? void 0 : options.hud?.claim(entry.name);
5999
6018
  if (hudWriter) hudWriters.push(hudWriter);
6000
6019
  const ctx = makeContext({
6001
6020
  definition: entry.definition,
@@ -6005,10 +6024,11 @@ async function buildExtensionRegistry(loaded, options = {}) {
6005
6024
  gate,
6006
6025
  signal: abort.signal,
6007
6026
  sinks: perExtSinks,
6027
+ disabled: isDisabled,
6008
6028
  ...options.readSettings !== void 0 ? { readSettings: options.readSettings } : {},
6009
6029
  ...hudWriter !== void 0 ? { hudWriter } : {},
6010
- ...options.promptBridge !== void 0 ? { promptBridge: options.promptBridge } : {},
6011
- ...options.hostRuntime !== void 0 ? { hostRuntime: options.hostRuntime } : {},
6030
+ ...!isDisabled && options.promptBridge !== void 0 ? { promptBridge: options.promptBridge } : {},
6031
+ ...!isDisabled && options.hostRuntime !== void 0 ? { hostRuntime: options.hostRuntime } : {},
6012
6032
  paths: resolveContextPaths(options)
6013
6033
  });
6014
6034
  candidates.push({
@@ -6021,7 +6041,8 @@ async function buildExtensionRegistry(loaded, options = {}) {
6021
6041
  abort,
6022
6042
  sinks: perExtSinks,
6023
6043
  ctx,
6024
- setupTimeoutMs
6044
+ setupTimeoutMs,
6045
+ disabled: isDisabled
6025
6046
  });
6026
6047
  }
6027
6048
  const settled = await Promise.all(candidates.map(setupExtension));
@@ -6032,6 +6053,14 @@ async function buildExtensionRegistry(loaded, options = {}) {
6032
6053
  for (const result of settled) {
6033
6054
  const { entry, logger, sinks: perExtSinks } = result.candidate;
6034
6055
  if (result.ok) {
6056
+ if (result.candidate.disabled) {
6057
+ inactive.push({
6058
+ ...entry,
6059
+ contributions: captureContributions(perExtSinks),
6060
+ setupRan: true
6061
+ });
6062
+ continue;
6063
+ }
6035
6064
  for (const binding of perExtSinks.keybindings) {
6036
6065
  const idOwner = keybindingIdOwners.get(binding.id);
6037
6066
  if (idOwner === entry.name) {
@@ -6082,49 +6111,19 @@ async function buildExtensionRegistry(loaded, options = {}) {
6082
6111
  }
6083
6112
  for (const renderer of perExtSinks.renderers) if (rendererIdOwners.get(renderer.id)) logger.warn("duplicate renderer id — the earlier registration wins", { id: renderer.id });
6084
6113
  else rendererIdOwners.set(renderer.id, entry.name);
6085
- const contributions = {
6086
- tools: perExtSinks.tools,
6087
- hooks: perExtSinks.hooks,
6088
- mcpServers: perExtSinks.mcpServers,
6089
- skills: perExtSinks.skills,
6090
- systemFragments: perExtSinks.systemFragments,
6091
- contextBreakdownSections: perExtSinks.contextBreakdownSections,
6092
- contextPanelSections: perExtSinks.contextPanelSections,
6093
- toolResultMetadata: perExtSinks.toolResultMetadata,
6094
- runTransforms: perExtSinks.runTransforms,
6095
- behaviorTransforms: perExtSinks.behaviorTransforms,
6096
- providerMiddlewares: perExtSinks.providerMiddlewares,
6097
- toolCatalogTransforms: perExtSinks.toolCatalogTransforms,
6098
- mcpConfigTransforms: perExtSinks.mcpConfigTransforms,
6099
- skillPolicies: perExtSinks.skillPolicies,
6100
- promptTransforms: perExtSinks.promptTransforms,
6101
- completionProviders: perExtSinks.completionProviders,
6102
- commands: perExtSinks.commands,
6103
- themes: perExtSinks.themes,
6104
- agents: perExtSinks.agents,
6105
- providers: perExtSinks.providers,
6106
- subagents: perExtSinks.subagents,
6107
- subagentOverrides: perExtSinks.subagentOverrides,
6108
- configCategories: perExtSinks.configCategories,
6109
- configItems: perExtSinks.configItems,
6110
- tui: {
6111
- keybindings: perExtSinks.keybindings,
6112
- footerHints: perExtSinks.footerHints,
6113
- modals: perExtSinks.modals,
6114
- renderers: perExtSinks.renderers,
6115
- toolRenderers: perExtSinks.toolRenderers
6116
- },
6117
- gui: { panels: perExtSinks.guiPanels }
6118
- };
6119
6114
  active.push({
6120
6115
  ...entry,
6121
- contributions,
6116
+ contributions: captureContributions(perExtSinks),
6122
6117
  setupRan: true
6123
6118
  });
6124
6119
  } else {
6125
6120
  const message = result.error;
6126
6121
  logger.error("setup threw", { error: message });
6127
- inactive.push({
6122
+ if (result.candidate.disabled) inactive.push({
6123
+ ...entry,
6124
+ setupRan: true
6125
+ });
6126
+ else inactive.push({
6128
6127
  ...entry,
6129
6128
  error: message,
6130
6129
  setupRan: true
@@ -6139,6 +6138,44 @@ async function buildExtensionRegistry(loaded, options = {}) {
6139
6138
  await disposeLoadedExtensions([...active, ...inactive], sink);
6140
6139
  } });
6141
6140
  }
6141
+ /** Freeze one extension's sinks into its `contributions` snapshot. */
6142
+ function captureContributions(perExtSinks) {
6143
+ return {
6144
+ tools: perExtSinks.tools,
6145
+ hooks: perExtSinks.hooks,
6146
+ mcpServers: perExtSinks.mcpServers,
6147
+ skills: perExtSinks.skills,
6148
+ systemFragments: perExtSinks.systemFragments,
6149
+ contextBreakdownSections: perExtSinks.contextBreakdownSections,
6150
+ contextPanelSections: perExtSinks.contextPanelSections,
6151
+ toolResultMetadata: perExtSinks.toolResultMetadata,
6152
+ runTransforms: perExtSinks.runTransforms,
6153
+ behaviorTransforms: perExtSinks.behaviorTransforms,
6154
+ providerMiddlewares: perExtSinks.providerMiddlewares,
6155
+ toolCatalogTransforms: perExtSinks.toolCatalogTransforms,
6156
+ mcpConfigTransforms: perExtSinks.mcpConfigTransforms,
6157
+ skillPolicies: perExtSinks.skillPolicies,
6158
+ promptTransforms: perExtSinks.promptTransforms,
6159
+ completionProviders: perExtSinks.completionProviders,
6160
+ inlineAutocompleteProviders: perExtSinks.inlineAutocompleteProviders,
6161
+ commands: perExtSinks.commands,
6162
+ themes: perExtSinks.themes,
6163
+ agents: perExtSinks.agents,
6164
+ providers: perExtSinks.providers,
6165
+ subagents: perExtSinks.subagents,
6166
+ subagentOverrides: perExtSinks.subagentOverrides,
6167
+ configCategories: perExtSinks.configCategories,
6168
+ configItems: perExtSinks.configItems,
6169
+ tui: {
6170
+ keybindings: perExtSinks.keybindings,
6171
+ footerHints: perExtSinks.footerHints,
6172
+ modals: perExtSinks.modals,
6173
+ renderers: perExtSinks.renderers,
6174
+ toolRenderers: perExtSinks.toolRenderers
6175
+ },
6176
+ gui: { panels: perExtSinks.guiPanels }
6177
+ };
6178
+ }
6142
6179
  async function setupExtension(candidate) {
6143
6180
  const timeoutMessage = `setup timed out after ${candidate.setupTimeoutMs}ms`;
6144
6181
  try {
@@ -6197,6 +6234,8 @@ function mergeContributions(active, inactive = [], options = {}) {
6197
6234
  const skillPolicies = [];
6198
6235
  const promptTransforms = [];
6199
6236
  const completionProviders = [];
6237
+ const inlineAutocompleteProviders = [];
6238
+ const seenInlineAutocompleteIds = /* @__PURE__ */ new Set();
6200
6239
  const commands = [];
6201
6240
  const seenCommandNames = /* @__PURE__ */ new Set();
6202
6241
  const themes = createRecord();
@@ -6237,11 +6276,20 @@ function mergeContributions(active, inactive = [], options = {}) {
6237
6276
  skillPolicies.push(...c.skillPolicies);
6238
6277
  promptTransforms.push(...c.promptTransforms);
6239
6278
  completionProviders.push(...c.completionProviders);
6279
+ for (const provider of c.inlineAutocompleteProviders) {
6280
+ if (seenInlineAutocompleteIds.has(provider.id)) continue;
6281
+ seenInlineAutocompleteIds.add(provider.id);
6282
+ inlineAutocompleteProviders.push(provider);
6283
+ }
6240
6284
  for (const command of c.commands) {
6241
6285
  const key = command.name.toLowerCase();
6242
6286
  if (seenCommandNames.has(key)) continue;
6243
6287
  seenCommandNames.add(key);
6244
- commands.push(command);
6288
+ for (const alias of command.aliases ?? []) seenCommandNames.add(alias.toLowerCase());
6289
+ commands.push(command.group === void 0 ? {
6290
+ ...command,
6291
+ group: entry.name
6292
+ } : command);
6245
6293
  }
6246
6294
  Object.assign(themes, c.themes);
6247
6295
  Object.assign(agents, c.agents);
@@ -6272,6 +6320,16 @@ function mergeContributions(active, inactive = [], options = {}) {
6272
6320
  toolRenderers.push(...c.tui.toolRenderers);
6273
6321
  guiPanels.push(...c.gui.panels);
6274
6322
  }
6323
+ for (const entry of inactive) {
6324
+ const c = entry.contributions;
6325
+ if (entry.error || !c) continue;
6326
+ for (const [id, category] of Object.entries(c.configCategories)) if (!(id in configCategories)) configCategories[id] = category;
6327
+ if (Object.keys(c.configItems).length > 0 && !(entry.name in configItems)) {
6328
+ const items = createRecord();
6329
+ Object.assign(items, c.configItems);
6330
+ configItems[entry.name] = items;
6331
+ }
6332
+ }
6275
6333
  return {
6276
6334
  loaded: active,
6277
6335
  inactive,
@@ -6291,6 +6349,7 @@ function mergeContributions(active, inactive = [], options = {}) {
6291
6349
  skillPolicies,
6292
6350
  promptTransforms,
6293
6351
  completionProviders,
6352
+ inlineAutocompleteProviders,
6294
6353
  commands,
6295
6354
  themes,
6296
6355
  agents,
@@ -6417,7 +6476,7 @@ function partitionExtensionCatalog(loaded, inactive) {
6417
6476
  };
6418
6477
  }
6419
6478
  function makeContext(opts) {
6420
- const { definition, source, dir, logger, gate, signal, sinks, readSettings, paths, hudWriter, promptBridge, hostRuntime } = opts;
6479
+ const { definition, source, dir, logger, gate, signal, sinks, readSettings, paths, hudWriter, promptBridge, hostRuntime, disabled = false } = opts;
6421
6480
  function guardOpen(method) {
6422
6481
  if (gate.open) return true;
6423
6482
  logger.warn("registration after setup() resolved — call ignored", { method });
@@ -6484,6 +6543,18 @@ function makeContext(opts) {
6484
6543
  }
6485
6544
  sinks.completionProviders.push(provider);
6486
6545
  };
6546
+ const registerInlineAutocompleteProvider = (provider) => {
6547
+ if (!guardOpen("registerInlineAutocompleteProvider")) return;
6548
+ if (!provider || typeof provider.id !== "string" || provider.id.length === 0) {
6549
+ logger.warn("registerInlineAutocompleteProvider: missing id");
6550
+ return;
6551
+ }
6552
+ if (typeof provider.suggest !== "function") {
6553
+ logger.warn("registerInlineAutocompleteProvider: needs a suggest()", { id: provider.id });
6554
+ return;
6555
+ }
6556
+ sinks.inlineAutocompleteProviders.push(provider);
6557
+ };
6487
6558
  const registerCommand = (command) => {
6488
6559
  if (!guardOpen("registerCommand")) return;
6489
6560
  if (!command || typeof command.name !== "string" || command.name.length === 0) {
@@ -6498,6 +6569,12 @@ function makeContext(opts) {
6498
6569
  logger.warn("registerCommand: needs a run() or a non-empty steps[]", { name: command.name });
6499
6570
  return;
6500
6571
  }
6572
+ if (command.aliases !== void 0) {
6573
+ if (!Array.isArray(command.aliases) || command.aliases.some((a) => typeof a !== "string" || a.length === 0 || /\s/.test(a) || a.startsWith("/"))) {
6574
+ logger.warn("registerCommand: aliases must be single tokens without a leading slash", { name: command.name });
6575
+ return;
6576
+ }
6577
+ }
6501
6578
  sinks.commands.push(command);
6502
6579
  };
6503
6580
  const registerTheme = (theme) => {
@@ -6949,6 +7026,7 @@ function makeContext(opts) {
6949
7026
  registerMcpServer,
6950
7027
  registerSkill,
6951
7028
  registerCompletionProvider,
7029
+ registerInlineAutocompleteProvider,
6952
7030
  registerCommand,
6953
7031
  registerTheme,
6954
7032
  registerAgent,
@@ -6972,6 +7050,7 @@ function makeContext(opts) {
6972
7050
  registerConfigCategory,
6973
7051
  registerConfigItem,
6974
7052
  config: configSurface,
7053
+ disabled,
6975
7054
  tui: {
6976
7055
  registerKeybinding,
6977
7056
  registerFooterHint,
@@ -7038,9 +7117,7 @@ function resolveContextPaths(options) {
7038
7117
  *
7039
7118
  * The `disabled` set honors the allowlist for inline extensions too:
7040
7119
  * the TUI treats inline as toggleable everywhere else (Settings tab,
7041
- * live filtering), so letting a toggled-off inline extension run
7042
- * `setup()` here would leak its providers / agents / themes into the
7043
- * registry anyway.
7120
+ * live filtering), so both ride the same inactive-classification path.
7044
7121
  */
7045
7122
  async function discoverAndBuildExtensionRegistry(opts = {}) {
7046
7123
  const candidates = [...await discoverExtensions({
@@ -7048,7 +7125,6 @@ async function discoverAndBuildExtensionRegistry(opts = {}) {
7048
7125
  ...opts.home !== void 0 ? { home: opts.home } : {},
7049
7126
  ...opts.prefix !== void 0 ? { prefix: opts.prefix } : {},
7050
7127
  ...opts.extensionScanPaths !== void 0 ? { extensionScanPaths: opts.extensionScanPaths } : {},
7051
- ...opts.enabledAllowlist !== void 0 ? { enabled: opts.enabledAllowlist } : {},
7052
7128
  ...opts.trustProjectExtensions !== void 0 ? { trustProjectExtensions: opts.trustProjectExtensions } : {},
7053
7129
  ...opts.signal !== void 0 ? { signal: opts.signal } : {}
7054
7130
  }), ...opts.inlineExtensions ?? []];
@@ -7638,6 +7714,7 @@ const EMPTY_EXTENSION_REGISTRY = Object.freeze({
7638
7714
  skillPolicies: Object.freeze([]),
7639
7715
  promptTransforms: Object.freeze([]),
7640
7716
  completionProviders: Object.freeze([]),
7717
+ inlineAutocompleteProviders: Object.freeze([]),
7641
7718
  commands: Object.freeze([]),
7642
7719
  themes: Object.freeze({}),
7643
7720
  agents: Object.freeze({}),
@@ -10819,7 +10896,7 @@ async function executeTurn(ctx, turn, priorUsage) {
10819
10896
  sanitizedMessages = aged.messages;
10820
10897
  markReadStateForElidedPaths(ctx, ctx.handle.cwd, aged.elidedReadPaths);
10821
10898
  }
10822
- const effectiveThinkingBudget = applyThinkingDecay(ctx.thinkingBudget, ctx.thinkingDecay, turn);
10899
+ const effectiveThinkingBudget = ctx.thinking === "adaptive" && ctx.provider.meta.capabilities?.adaptiveBudgetIsEnvelope === true ? ctx.thinkingBudget : applyThinkingDecay(ctx.thinkingBudget, ctx.thinkingDecay, turn + 1);
10823
10900
  const formattedTools = ctx.rebuildFormattedTools ? ctx.rebuildFormattedTools(ctx.provider) : ctx.formattedTools;
10824
10901
  const streamOptions = {
10825
10902
  model: ctx.model,
@@ -10829,6 +10906,7 @@ async function executeTurn(ctx, turn, priorUsage) {
10829
10906
  maxTokens: ctx.maxTokens,
10830
10907
  thinking: ctx.thinking,
10831
10908
  thinkingBudget: effectiveThinkingBudget,
10909
+ ...ctx.taskBudget !== void 0 ? { taskBudget: ctx.taskBudget } : {},
10832
10910
  ...ctx.modelOptions ? { modelOptions: ctx.modelOptions } : {},
10833
10911
  cache: ctx.cache ?? true,
10834
10912
  signal: ctx.signal
@@ -12802,6 +12880,7 @@ function resolveBehavior(agentBehavior, runBehavior) {
12802
12880
  destroyTimeoutMs: runBehavior?.destroyTimeoutMs ?? agentBehavior?.destroyTimeoutMs,
12803
12881
  maxTokens: runBehavior?.maxTokens ?? agentBehavior?.maxTokens,
12804
12882
  thinkingBudget: runBehavior?.thinkingBudget ?? agentBehavior?.thinkingBudget,
12883
+ taskBudget: runBehavior?.taskBudget ?? agentBehavior?.taskBudget,
12805
12884
  thinkingOverrunPolicy: runBehavior?.thinkingOverrunPolicy ?? agentBehavior?.thinkingOverrunPolicy,
12806
12885
  modelOptions: runBehavior?.modelOptions ?? agentBehavior?.modelOptions,
12807
12886
  schema: runBehavior?.schema ?? agentBehavior?.schema,
@@ -13687,7 +13766,7 @@ function createAgent(rawOptions) {
13687
13766
  const thinking = options.thinking ?? "off";
13688
13767
  const model = targets[0].model;
13689
13768
  if (runProvider.meta?.clearsContextServerSide) resolvedBehavior.dedupReads = false;
13690
- const { maxConcurrentTools, toolBatchExecutor, toolBatchTimeoutMs, shouldRethrowToolError, maxTurns, maxTurnsWarning, maxTurnsWarningMessage, maxCostUsd, maxTotalTokens, maxWallMs, providerStreamStartTimeoutMs, providerStreamTimeoutMs, maxTokens, retry, thinkingBudget, thinkingOverrunPolicy, modelOptions: behaviorModelOptions, schema, cache, toolOutputBudget, toolOutputBudgetExcludeTools, compactStrategy, compactThreshold, compactKeepTurns, thinkingDecay, writeFileExistingPolicy, textToolCallRescue, unknownToolRecovery, progressNudges, dedupTools, toolBudgets, repeatGuard, elideStaleReads, mediaKeepTurns, autoCompact, toolDisclosure, mcpToolNameSeparator, toolSearch, surfaceMcpInstructions, persistThreshold, persistExcludeTools, persistDir, persistMaxBytes, strictToolPairing, maxPairingRepairsPerTurn, maxConsecutivePauseTurns, resumeOnMaxTokens, persistTurns } = resolvedBehavior;
13769
+ const { maxConcurrentTools, toolBatchExecutor, toolBatchTimeoutMs, shouldRethrowToolError, maxTurns, maxTurnsWarning, maxTurnsWarningMessage, maxCostUsd, maxTotalTokens, maxWallMs, providerStreamStartTimeoutMs, providerStreamTimeoutMs, maxTokens, retry, thinkingBudget, taskBudget, thinkingOverrunPolicy, modelOptions: behaviorModelOptions, schema, cache, toolOutputBudget, toolOutputBudgetExcludeTools, compactStrategy, compactThreshold, compactKeepTurns, thinkingDecay, writeFileExistingPolicy, textToolCallRescue, unknownToolRecovery, progressNudges, dedupTools, toolBudgets, repeatGuard, elideStaleReads, mediaKeepTurns, autoCompact, toolDisclosure, mcpToolNameSeparator, toolSearch, surfaceMcpInstructions, persistThreshold, persistExcludeTools, persistDir, persistMaxBytes, strictToolPairing, maxPairingRepairsPerTurn, maxConsecutivePauseTurns, resumeOnMaxTokens, persistTurns } = resolvedBehavior;
13691
13770
  const modelOptions = options.modelOptions ?? behaviorModelOptions;
13692
13771
  let system = options.system || agentSystem || "You are a helpful assistant.";
13693
13772
  const baseSystemForBreakdown = renderSystemForWire(system);
@@ -14113,6 +14192,7 @@ function createAgent(rawOptions) {
14113
14192
  ...options.parentRunId ? { parentRunId: options.parentRunId } : {},
14114
14193
  depth: runDepth,
14115
14194
  thinkingBudget,
14195
+ ...taskBudget !== void 0 ? { taskBudget } : {},
14116
14196
  ...modelOptions ? { modelOptions } : {},
14117
14197
  schema,
14118
14198
  cache,
@@ -14714,6 +14794,6 @@ function createAgent(rawOptions) {
14714
14794
  };
14715
14795
  }
14716
14796
  //#endregion
14717
- export { composeExtensionPreset as $, discoverExtensions as $t, ANCHOR_PREVIEW_MAX_CHARS as A, createInteractionTool as At, ExtensionInstallError as B, ensureKeybindingsFile as Bt, NO_TOOLS_PREAMBLE as C, readFile$1 as Ct, buildFullCompactPrompt as D, formatModelLine as Dt, buildFromCompactPrompt as E, createModelSearchTool as Et, truncateHeadForPtlRetry as F, resolveStorageDirs as Ft, readExtensionInstallProvenance as G, mergeKeybindings as Gt, installExtensionFromSpec as H, groupBindings as Ht, CompactInvalidInputError as I, DEFAULT_KEYBINDINGS as It, createExtensionHud as J, readKeybindingsRaw as Jt, removeInstalledExtension as K, parseBindingSpec as Kt, CompactPromptTooLongError as L, KEYBINDING_DEFS as Lt, sliceForCompaction as M, glob as Mt, stripImagesFromTurns as N, edit as Nt, buildTailCompactPrompt as O, matchModelEntries as Ot, summaryToTurn as P, validateToolArgs as Pt, buildExtensionRegistry as Q, defaultExtensionScanPaths as Qt, EMPTY_EXTENSION_REGISTRY as R, KEYBINDING_DEF_BY_ACTION as Rt, BASE_INSTRUCTIONS as S, tailTruncate as St, buildCompactPrompt as T, multiEdit as Tt, listExtensionCandidates as U, keybindingsPath as Ut, fetchExtensionSource as V, formatBindingForDisplay as Vt, parseExtensionInstallSource as W, matchesBinding as Wt, discoverAndBuildExtensionRegistry as X, stripJsonComments as Xt, registerExtensionHostModules as Y, resolveExtensionKeybindings as Yt, buildExtensionPreset as Z, ENTRY_CANDIDATES as Zt, buildPostCompactAttachments as _, defaultRepeatGuardTracked as _n, createSkillsRunScriptTool as _t, SHELL_CASCADE_CANCEL_MESSAGE as a, clampExtensionConfigNumber as an, createWorkspaceSurface as at, selectRecentFiles as b, createShellTool as bt, applyCompactSummaryCutoff as c, isValidExtensionConfigValue as cn, basicTools as ct, buildPersistedStub as d, toWireConfigSchema as dn, WAIT_TASK_TIMED_OUT_PREFIX as dt, inlineLoadedExtension as en, disposeExtensionRegistry as et, cleanupPersistedSession as f, AUTO_COMPACT_MIN_GROWTH_FRACTION as fn, waitTask as ft, resolveTasksDir as g, defaultRepeatGuardNormalize as gn, createSkillsUseTool as gt, resolvePersistDir as h, shouldAutoCompact as hn, isSpawnTool as ht, INTERRUPT_MESSAGE_FOR_TOOL_USE as i, defineExtension as in, createExtensionHostRuntimeBridge as it, anchorPreviewFor as j, grep as jt, buildUpToCompactPrompt as k, listFiles as kt, PERSISTED_STUB_PREFIX as l, resolveExtensionConfig as ln, basic_default as lt, resolveMcpWarningsDir as m, effectiveContextWindow as mn, createSpawnTool as mt, normalizeProviders as n, parseExtensionScanPathEnv as nn, mergeContributions as nt, TOOL_USE_CANCELLED_MESSAGE as o, coerceExtensionConfigInput as on, composePresets as ot, maybePersistToolResult as p, OUTPUT_RESERVE_TOKENS as pn, createToolSearchTool as pt, updateInstalledExtension as q, readKeybindings as qt, resolveModelTargets as r, scanExtensionDirectories as rn, partitionExtensionCatalog as rt, TOOL_USE_SKIPPED_MESSAGE as s, isValidExtensionConfigItem as sn, definePreset as st, createAgent as t, isExtensionDefinition as tn, filterExtensionRegistry as tt, PERSISTENCE_PREVIEW_BYTES as u, resolveExtensionConfigValue as un, writeFile$1 as ut, selectFilesFromReadState as v, normalizeShellCommand as vn, createSkillsReadTool as vt, TRAILER as w, looksBinary as wt, compactConversation as x, shell as xt, selectFilesFromSession as y, stableStringify as yn, shellKill as yt, createExtensionPromptBridge as z, KEYBINDING_KEY_COL_WIDTH as zt };
14797
+ export { composeExtensionPreset as $, discoverExtensions as $t, ANCHOR_PREVIEW_MAX_CHARS as A, createInteractionTool as At, ExtensionInstallError as B, ensureKeybindingsFile as Bt, NO_TOOLS_PREAMBLE as C, readFile$1 as Ct, buildFullCompactPrompt as D, formatModelLine as Dt, buildFromCompactPrompt as E, createModelSearchTool as Et, truncateHeadForPtlRetry as F, resolveStorageDirs as Ft, readExtensionInstallProvenance as G, mergeKeybindings as Gt, installExtensionFromSpec as H, groupBindings as Ht, CompactInvalidInputError as I, DEFAULT_KEYBINDINGS as It, createExtensionHud as J, readKeybindingsRaw as Jt, removeInstalledExtension as K, parseBindingSpec as Kt, CompactPromptTooLongError as L, KEYBINDING_DEFS as Lt, sliceForCompaction as M, glob as Mt, stripImagesFromTurns as N, edit as Nt, buildTailCompactPrompt as O, matchModelEntries as Ot, summaryToTurn as P, validateToolArgs as Pt, buildExtensionRegistry as Q, defaultExtensionScanPaths as Qt, EMPTY_EXTENSION_REGISTRY as R, KEYBINDING_DEF_BY_ACTION as Rt, BASE_INSTRUCTIONS as S, tailTruncate as St, buildCompactPrompt as T, multiEdit as Tt, listExtensionCandidates as U, keybindingsPath as Ut, fetchExtensionSource as V, formatBindingForDisplay as Vt, parseExtensionInstallSource as W, matchesBinding as Wt, discoverAndBuildExtensionRegistry as X, stripJsonComments as Xt, registerExtensionHostModules as Y, resolveExtensionKeybindings as Yt, buildExtensionPreset as Z, ENTRY_CANDIDATES as Zt, buildPostCompactAttachments as _, defaultRepeatGuardNormalize as _n, createSkillsRunScriptTool as _t, SHELL_CASCADE_CANCEL_MESSAGE as a, clampExtensionConfigNumber as an, createWorkspaceSurface as at, selectRecentFiles as b, stableStringify as bn, createShellTool as bt, applyCompactSummaryCutoff as c, isValidExtensionConfigValue as cn, basicTools as ct, buildPersistedStub as d, sanitizeExtensionConfigActionPatch as dn, WAIT_TASK_TIMED_OUT_PREFIX as dt, inlineLoadedExtension as en, disposeExtensionRegistry as et, cleanupPersistedSession as f, toWireConfigSchema as fn, waitTask as ft, resolveTasksDir as g, shouldAutoCompact as gn, createSkillsUseTool as gt, resolvePersistDir as h, effectiveContextWindow as hn, isSpawnTool as ht, INTERRUPT_MESSAGE_FOR_TOOL_USE as i, defineExtension as in, createExtensionHostRuntimeBridge as it, anchorPreviewFor as j, grep as jt, buildUpToCompactPrompt as k, listFiles as kt, PERSISTED_STUB_PREFIX as l, resolveExtensionConfig as ln, basic_default as lt, resolveMcpWarningsDir as m, OUTPUT_RESERVE_TOKENS as mn, createSpawnTool as mt, normalizeProviders as n, parseExtensionScanPathEnv as nn, mergeContributions as nt, TOOL_USE_CANCELLED_MESSAGE as o, coerceExtensionConfigInput as on, composePresets as ot, maybePersistToolResult as p, AUTO_COMPACT_MIN_GROWTH_FRACTION as pn, createToolSearchTool as pt, updateInstalledExtension as q, readKeybindings as qt, resolveModelTargets as r, scanExtensionDirectories as rn, partitionExtensionCatalog as rt, TOOL_USE_SKIPPED_MESSAGE as s, isValidExtensionConfigItem as sn, definePreset as st, createAgent as t, isExtensionDefinition as tn, filterExtensionRegistry as tt, PERSISTENCE_PREVIEW_BYTES as u, resolveExtensionConfigValue as un, writeFile$1 as ut, selectFilesFromReadState as v, defaultRepeatGuardTracked as vn, createSkillsReadTool as vt, TRAILER as w, looksBinary as wt, compactConversation as x, shell as xt, selectFilesFromSession as y, normalizeShellCommand as yn, shellKill as yt, createExtensionPromptBridge as z, KEYBINDING_KEY_COL_WIDTH as zt };
14718
14798
 
14719
- //# sourceMappingURL=agent-CZ3WSWqR.js.map
14799
+ //# sourceMappingURL=agent-D11SxCvA.js.map