@sayknow-cli/coding-agent 0.3.15 → 0.4.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.
Files changed (1474) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/package.json +133 -116
  3. package/scripts/build-sdk-package-smoke.ts +132 -0
  4. package/scripts/capture-notifications-settings-showcase.ts +435 -0
  5. package/scripts/compile-args.ts +5 -2
  6. package/scripts/g005-daemon-smoke.ts +4 -5
  7. package/scripts/g011-daemon-path-smoke.ts +5 -5
  8. package/scripts/generate-hotkeys-docs.ts +74 -0
  9. package/scripts/generate-sdk-adapter-parity-manifest.ts +163 -0
  10. package/scripts/generate-sdk-operation-inventory.ts +914 -0
  11. package/scripts/generate-telegram-baseline-manifest.ts +128 -0
  12. package/scripts/manifest-schema.ts +124 -0
  13. package/scripts/run-test-manifest.ts +153 -0
  14. package/scripts/run-threat-model-check.ts +217 -0
  15. package/scripts/verify-skc-sdk-canonicalization.ts +3647 -0
  16. package/scripts/verify-skc-sdk-rename.ts +90 -0
  17. package/src/append-only-mode.ts +1 -1
  18. package/src/async/job-manager.ts +455 -69
  19. package/src/cli/args.ts +43 -12
  20. package/src/cli/auth-gateway-cli.ts +2 -2
  21. package/src/cli/config-cli.ts +77 -3
  22. package/src/cli/daemon-cli.ts +63 -14
  23. package/src/cli/launch-disposition.ts +42 -0
  24. package/src/cli/list-models.ts +1 -1
  25. package/src/cli/notify-cli.ts +373 -283
  26. package/src/cli/session-picker.ts +20 -3
  27. package/src/cli/setup-cli.ts +1 -1
  28. package/src/cli/worktree-cli.ts +9 -287
  29. package/src/cli.ts +31 -11
  30. package/src/commands/config.ts +1 -1
  31. package/src/commands/daemon.ts +50 -6
  32. package/src/commands/gc.ts +11 -1
  33. package/src/commands/harness.ts +127 -142
  34. package/src/commands/launch.ts +11 -6
  35. package/src/commands/mcp-serve.ts +97 -13
  36. package/src/commands/mcp.ts +2 -2
  37. package/src/commands/notify.ts +44 -7
  38. package/src/commands/sdk.ts +453 -0
  39. package/src/commands/ultragoal.ts +4 -1
  40. package/src/commands/worktree.ts +10 -53
  41. package/src/commit/agentic/agent.ts +1 -0
  42. package/src/config/atomic-yaml-patch.ts +490 -0
  43. package/src/config/file-lock.ts +105 -43
  44. package/src/config/keybindings.ts +64 -20
  45. package/src/config/model-auth.ts +9 -0
  46. package/src/config/model-bindings-applier.ts +139 -0
  47. package/src/config/model-discovery-manager.ts +224 -0
  48. package/src/config/model-equivalence.ts +66 -0
  49. package/src/config/model-profile-activation.ts +233 -86
  50. package/src/config/model-profiles.ts +52 -49
  51. package/src/config/model-registry.ts +5 -4
  52. package/src/config/model-resolver.ts +487 -410
  53. package/src/config/model-selector-value.ts +50 -0
  54. package/src/config/models-config-schema.ts +17 -23
  55. package/src/config/settings-schema.ts +372 -21
  56. package/src/config/settings.ts +1120 -182
  57. package/src/coordinator-mcp/model-preset.ts +74 -20
  58. package/src/coordinator-mcp/policy.ts +76 -11
  59. package/src/coordinator-mcp/question-gate-codec.ts +274 -0
  60. package/src/coordinator-mcp/question-state.ts +778 -0
  61. package/src/coordinator-mcp/server.ts +3120 -3111
  62. package/src/daemon/builtin.ts +8 -5
  63. package/src/daemon/control-types.ts +1 -1
  64. package/src/daemon/runtime.ts +2 -2
  65. package/src/debug/index.ts +1 -1
  66. package/src/defaults/skc/skills/team/SKILL.md +27 -13
  67. package/src/defaults/skc/skills/ultragoal/SKILL.md +0 -2
  68. package/src/discovery/helpers.ts +1 -50
  69. package/src/discovery/mcp-json.ts +327 -20
  70. package/src/edit/index.ts +64 -0
  71. package/src/eval/js/shared/runtime.ts +1 -1
  72. package/src/eval/py/env.ts +26 -0
  73. package/src/eval/py/index.ts +2 -2
  74. package/src/eval/py/kernel.ts +5 -3
  75. package/src/export/html/template.generated.ts +1 -1
  76. package/src/export/html/template.js +52 -18
  77. package/src/extensibility/custom-tools/types.ts +1 -1
  78. package/src/extensibility/extensions/compact-handler.ts +3 -3
  79. package/src/extensibility/extensions/get-commands-handler.ts +2 -2
  80. package/src/extensibility/extensions/loader.ts +77 -5
  81. package/src/extensibility/extensions/runner.ts +124 -7
  82. package/src/extensibility/extensions/types.ts +215 -18
  83. package/src/extensibility/hooks/runner.ts +2 -2
  84. package/src/extensibility/hooks/types.ts +1 -1
  85. package/src/extensibility/plugins/marketplace/manager.ts +94 -10
  86. package/src/extensibility/runtime-skill-discovery.ts +33 -13
  87. package/src/extensibility/shared-events.ts +2 -0
  88. package/src/extensibility/skc-plugins/installer.ts +16 -16
  89. package/src/extensibility/slash-commands.ts +3 -3
  90. package/src/goals/continuation-timeout-guard.ts +79 -0
  91. package/src/goals/runtime.ts +7 -5
  92. package/src/goals/state.ts +18 -0
  93. package/src/harness-control-plane/lifecycle-reconciliation.ts +64 -0
  94. package/src/harness-control-plane/operate.ts +9 -9
  95. package/src/harness-control-plane/owner.ts +341 -41
  96. package/src/harness-control-plane/phase-rollup.ts +4 -7
  97. package/src/harness-control-plane/receipt-ingest.ts +5 -0
  98. package/src/harness-control-plane/receipt-spool.ts +51 -7
  99. package/src/harness-control-plane/receipts.ts +0 -1
  100. package/src/harness-control-plane/sdk-transport.ts +395 -0
  101. package/src/harness-control-plane/session-lease.ts +12 -130
  102. package/src/harness-control-plane/session-transport.ts +94 -0
  103. package/src/harness-control-plane/types.ts +1 -1
  104. package/src/hindsight/backend.ts +26 -27
  105. package/src/hindsight/client.ts +65 -2
  106. package/src/hindsight/state.ts +101 -32
  107. package/src/hooks/skill-state.ts +17 -11
  108. package/src/i18n/messages/en.ts +1 -0
  109. package/src/internal-urls/agent-protocol.ts +76 -5
  110. package/src/internal-urls/docs-index.generated.ts +44 -37
  111. package/src/internal-urls/local-protocol.ts +420 -18
  112. package/src/lsp/client.ts +43 -7
  113. package/src/lsp/config.ts +145 -26
  114. package/src/lsp/index.ts +7 -91
  115. package/src/lsp/lspmux.ts +39 -10
  116. package/src/lsp/path-trust.ts +81 -0
  117. package/src/main.ts +451 -236
  118. package/src/memories/index.ts +1 -0
  119. package/src/memories/storage.ts +6 -2
  120. package/src/modes/DESIGN.md +258 -0
  121. package/src/modes/acp/acp-agent.ts +1236 -2612
  122. package/src/modes/acp/acp-client-bridge.ts +2 -20
  123. package/src/modes/acp/acp-event-mapper.ts +18 -2
  124. package/src/modes/acp/acp-mode.ts +8 -36
  125. package/src/modes/acp/permission-mode.ts +25 -0
  126. package/src/modes/acp/startup-options.ts +6 -0
  127. package/src/modes/action-registry.ts +165 -0
  128. package/src/modes/bridge/bridge-mode.ts +6 -4
  129. package/src/modes/components/agent-dashboard.ts +37 -17
  130. package/src/modes/components/ansi-display-validator.ts +54 -0
  131. package/src/modes/components/chrome.ts +40 -0
  132. package/src/modes/components/command-palette.ts +168 -0
  133. package/src/modes/components/custom-editor.ts +105 -33
  134. package/src/modes/components/custom-provider-wizard.ts +77 -15
  135. package/src/modes/components/index.ts +2 -1
  136. package/src/modes/components/model-selector.ts +93 -35
  137. package/src/modes/components/notifications-settings-editor.ts +1403 -0
  138. package/src/modes/components/pet-capability.ts +115 -0
  139. package/src/modes/components/pet-selector.ts +15 -23
  140. package/src/modes/components/plan-preview-overlay.ts +295 -0
  141. package/src/modes/components/queue-mode-selector.ts +10 -27
  142. package/src/modes/components/queue-pane.ts +79 -0
  143. package/src/modes/components/read-tool-group.ts +13 -0
  144. package/src/modes/components/sayknow-pet-widget.ts +169 -20
  145. package/src/modes/components/session-observer-overlay.ts +213 -775
  146. package/src/modes/components/sessions-dashboard.ts +181 -0
  147. package/src/modes/components/settings-selector.ts +89 -12
  148. package/src/modes/components/show-images-selector.ts +10 -24
  149. package/src/modes/components/status-line/types.ts +1 -1
  150. package/src/modes/components/status-line.ts +1 -969
  151. package/src/modes/components/tasks-pane.ts +73 -0
  152. package/src/modes/components/theme-selector.ts +11 -31
  153. package/src/modes/components/tool-execution.ts +22 -0
  154. package/src/modes/components/tool-status-header.ts +1056 -0
  155. package/src/modes/components/tool-transcript-format.ts +393 -0
  156. package/src/modes/components/transcript-viewer-overlay.ts +446 -0
  157. package/src/modes/components/welcome.ts +4 -4
  158. package/src/modes/controllers/btw-controller.ts +1 -0
  159. package/src/modes/controllers/command-controller.ts +25 -17
  160. package/src/modes/controllers/event-controller.ts +14 -18
  161. package/src/modes/controllers/extension-ui-controller.ts +441 -37
  162. package/src/modes/controllers/goal-mode-controller.ts +493 -0
  163. package/src/modes/controllers/input-controller.ts +889 -263
  164. package/src/modes/controllers/mode-gate.ts +24 -0
  165. package/src/modes/controllers/plan-mode-controller.ts +519 -0
  166. package/src/modes/controllers/runtime-mcp-command-controller.ts +3 -0
  167. package/src/modes/controllers/selector-controller.ts +957 -54
  168. package/src/modes/controllers/stt-controller.ts +125 -0
  169. package/src/modes/index.ts +0 -22
  170. package/src/modes/interactive-mode.ts +376 -1130
  171. package/src/modes/jobs-observer.ts +3 -0
  172. package/src/modes/prompt-action-autocomplete.ts +7 -0
  173. package/src/modes/rpc/rpc-mode.ts +3 -1
  174. package/src/modes/runtime-init.ts +320 -6
  175. package/src/modes/shared/agent-wire/approval-gate.ts +9 -11
  176. package/src/modes/shared/agent-wire/command-dispatch.ts +3 -1
  177. package/src/modes/shared/agent-wire/deep-interview-gate.ts +65 -111
  178. package/src/modes/shared/agent-wire/event-contract.ts +7 -8
  179. package/src/modes/shared/agent-wire/event-envelope.ts +9 -17
  180. package/src/modes/shared/agent-wire/event-observation.ts +16 -7
  181. package/src/modes/shared/agent-wire/workflow-gate-broker.ts +1331 -89
  182. package/src/modes/shared/agent-wire/workflow-gate-schema.ts +19 -17
  183. package/src/modes/shared/agent-wire/workflow-gate-types.ts +407 -0
  184. package/src/modes/tasks-aggregator.ts +199 -0
  185. package/src/modes/transcript-item-registry.ts +229 -0
  186. package/src/modes/types.ts +63 -21
  187. package/src/modes/utils/ui-helpers.ts +17 -9
  188. package/src/notifications/index.ts +8 -2
  189. package/src/plan-mode/approved-plan.ts +3 -1
  190. package/src/prompts/agent-fragments/ralplan-persistence.md +6 -0
  191. package/src/prompts/agent-fragments/restricted-bash.md +1 -0
  192. package/src/prompts/agents/architect.md +3 -8
  193. package/src/prompts/agents/critic.md +3 -8
  194. package/src/prompts/agents/executor.md +3 -0
  195. package/src/prompts/agents/planner.md +4 -12
  196. package/src/prompts/system/custom-system-prompt.md +2 -24
  197. package/src/prompts/system/plan-mode-approved.md +8 -0
  198. package/src/prompts/system/system-prompt.md +18 -94
  199. package/src/prompts/tools/bash.md +4 -4
  200. package/src/prompts/tools/browser.md +15 -52
  201. package/src/prompts/tools/find.md +2 -2
  202. package/src/prompts/tools/hashline.md +13 -55
  203. package/src/prompts/tools/lsp.md +3 -3
  204. package/src/prompts/tools/read.md +3 -6
  205. package/src/prompts/tools/search-tool-bm25.md +0 -2
  206. package/src/prompts/tools/search.md +2 -4
  207. package/src/prompts/tools/skill-discovery.md +1 -2
  208. package/src/prompts/tools/task.md +1 -1
  209. package/src/runtime-mcp/client.ts +94 -19
  210. package/src/runtime-mcp/config.ts +27 -15
  211. package/src/runtime-mcp/discoverable-tool-metadata.ts +16 -13
  212. package/src/runtime-mcp/manager.ts +359 -106
  213. package/src/runtime-mcp/oauth-discovery.ts +116 -26
  214. package/src/runtime-mcp/oauth-flow.ts +42 -12
  215. package/src/runtime-mcp/transports/http.ts +49 -19
  216. package/src/runtime-mcp/transports/stdio.ts +47 -28
  217. package/src/runtime-mcp/types.ts +10 -0
  218. package/src/sdk/acp/adapter.ts +418 -0
  219. package/src/sdk/acp/index.ts +2 -0
  220. package/src/sdk/broker/broker.ts +877 -0
  221. package/src/sdk/broker/discovery.ts +238 -0
  222. package/src/sdk/broker/ensure.ts +393 -0
  223. package/src/sdk/broker/identity.ts +42 -0
  224. package/src/sdk/broker/index.ts +8 -0
  225. package/src/sdk/broker/internal-source-marker-2178.txt +1 -0
  226. package/src/sdk/broker/internal-source.bunfig.toml +1 -0
  227. package/src/sdk/broker/internal.ts +10 -0
  228. package/src/sdk/broker/lifecycle-codec.ts +11 -0
  229. package/src/sdk/broker/lifecycle-ledger.ts +583 -0
  230. package/src/sdk/broker/lifecycle.ts +3413 -0
  231. package/src/sdk/broker/process-incarnation.ts +151 -0
  232. package/src/sdk/broker/runtime.ts +164 -0
  233. package/src/sdk/broker/session-index.ts +678 -0
  234. package/src/sdk/broker/state-version.ts +47 -0
  235. package/src/sdk/broker/transport.ts +125 -0
  236. package/src/sdk/bus/attachment-registry.ts +23 -0
  237. package/src/sdk/bus/chat-adapters.ts +147 -0
  238. package/src/sdk/bus/chat-command-policy.ts +107 -0
  239. package/src/sdk/bus/chat-daemon-cli.ts +278 -0
  240. package/src/sdk/bus/chat-daemon-control.ts +1101 -0
  241. package/src/sdk/bus/chat-daemon-runtime.ts +527 -0
  242. package/src/sdk/bus/chat-effect-journal.ts +363 -0
  243. package/src/sdk/bus/config-commands.ts +192 -0
  244. package/src/sdk/bus/config.ts +568 -0
  245. package/src/sdk/bus/conversation-store.ts +367 -0
  246. package/src/sdk/bus/daemon-paths.ts +34 -0
  247. package/src/sdk/bus/discord-conversation.ts +85 -0
  248. package/src/sdk/bus/discord-daemon.ts +2292 -0
  249. package/src/sdk/bus/discord-live-provider.ts +521 -0
  250. package/src/sdk/bus/discord-provider.ts +56 -0
  251. package/src/sdk/bus/engine.ts +100 -0
  252. package/src/sdk/bus/helpers.ts +135 -0
  253. package/src/sdk/bus/html-format.ts +518 -0
  254. package/src/sdk/bus/index.ts +4961 -0
  255. package/src/sdk/bus/lifecycle-commands.ts +291 -0
  256. package/src/sdk/bus/lifecycle-control-runtime.ts +1409 -0
  257. package/src/sdk/bus/lifecycle-orchestrator.ts +458 -0
  258. package/src/sdk/bus/managed-daemon.ts +163 -0
  259. package/src/sdk/bus/native-runtime-compatibility.ts +42 -0
  260. package/src/sdk/bus/natives-augment.d.ts +63 -0
  261. package/src/sdk/bus/notification-orchestration.ts +535 -0
  262. package/src/sdk/bus/notification-service.ts +1174 -0
  263. package/src/sdk/bus/operator-runtime.ts +171 -0
  264. package/src/sdk/bus/rate-limit-pool.ts +276 -0
  265. package/src/sdk/bus/recent-activity.ts +279 -0
  266. package/src/sdk/bus/reply-sent-store.ts +134 -0
  267. package/src/sdk/bus/rich-document.ts +258 -0
  268. package/src/sdk/bus/rich-draft.ts +107 -0
  269. package/src/sdk/bus/rich-render.ts +135 -0
  270. package/src/sdk/bus/session-control.ts +439 -0
  271. package/src/sdk/bus/slack-conversation.ts +74 -0
  272. package/src/sdk/bus/slack-daemon.ts +2144 -0
  273. package/src/sdk/bus/slack-live-provider.ts +380 -0
  274. package/src/sdk/bus/slack-provider.ts +76 -0
  275. package/src/sdk/bus/telegram-cli.ts +194 -0
  276. package/src/sdk/bus/telegram-daemon-cli.ts +292 -0
  277. package/src/sdk/bus/telegram-daemon-contract.ts +27 -0
  278. package/src/sdk/bus/telegram-daemon-control.ts +642 -0
  279. package/src/sdk/bus/telegram-daemon.ts +6675 -0
  280. package/src/sdk/bus/telegram-reference.ts +436 -0
  281. package/src/sdk/bus/telegram-setup.ts +663 -0
  282. package/src/sdk/bus/threaded-inbound.ts +141 -0
  283. package/src/sdk/bus/threaded-render.ts +294 -0
  284. package/src/sdk/bus/topic-registry.ts +364 -0
  285. package/src/sdk/cli/index.ts +1 -0
  286. package/src/sdk/cli/session-cli.ts +275 -0
  287. package/src/sdk/client/client.ts +1 -0
  288. package/src/sdk/client/discovery.ts +108 -0
  289. package/src/sdk/client/index.ts +2 -0
  290. package/src/sdk/host/control/dispatch.ts +388 -0
  291. package/src/sdk/host/control/index.ts +10 -0
  292. package/src/sdk/host/control/operations.ts +68 -0
  293. package/src/sdk/host/events.ts +91 -0
  294. package/src/sdk/host/host.ts +338 -0
  295. package/src/sdk/host/index.ts +4 -0
  296. package/src/sdk/host/query/cursor.ts +189 -0
  297. package/src/sdk/host/query/handlers.ts +531 -0
  298. package/src/sdk/host/query/index.ts +3 -0
  299. package/src/sdk/host/query/revision-store.ts +1149 -0
  300. package/src/sdk/host/reverse-leases.ts +325 -0
  301. package/src/sdk/host/types.ts +29 -0
  302. package/src/sdk/index.ts +14 -0
  303. package/src/sdk/lifecycle-session.ts +39 -0
  304. package/src/sdk/mcp/index.ts +1 -0
  305. package/src/sdk/mcp/server.ts +332 -0
  306. package/src/sdk/models.ts +168 -0
  307. package/src/sdk/protocol/adapter-validation.ts +48 -0
  308. package/src/sdk/protocol/operation-inventory.generated.json +4719 -0
  309. package/src/sdk/protocol/operation-registry.ts +312 -0
  310. package/src/sdk/session-directory.ts +141 -0
  311. package/src/sdk/session.ts +2869 -0
  312. package/src/sdk/startup-capability.ts +189 -0
  313. package/src/secrets/index.ts +53 -10
  314. package/src/secrets/obfuscator.ts +21 -18
  315. package/src/secrets/regex.ts +2 -0
  316. package/src/session/agent-session.ts +5602 -2138
  317. package/src/session/agent-storage.ts +18 -0
  318. package/src/session/artifacts.ts +188 -23
  319. package/src/session/cache-economics.ts +25 -8
  320. package/src/session/context-estimation.ts +7 -2
  321. package/src/session/default-model-selection.ts +93 -0
  322. package/src/session/fallback-chain-controller.ts +186 -0
  323. package/src/session/internal/managed-session-scope.ts +2402 -0
  324. package/src/session/internal/managed-session-storage.ts +1559 -0
  325. package/src/session/messages.ts +91 -2
  326. package/src/session/session-manager-internal.ts +33 -0
  327. package/src/session/session-manager.ts +2578 -392
  328. package/src/session/session-storage.ts +550 -40
  329. package/src/session/streaming-output.ts +6 -0
  330. package/src/session/volatile-context-pruning.ts +78 -0
  331. package/src/session/yield-queue.ts +20 -0
  332. package/src/setup/credential-auto-import.ts +291 -35
  333. package/src/setup/hermes/templates/operator-instructions.v1.md +4 -6
  334. package/src/setup/provider-onboarding.ts +36 -61
  335. package/src/setup/provider-presets.json +5 -0
  336. package/src/skc-runtime/deep-interview-recorder.ts +70 -3
  337. package/src/skc-runtime/deep-interview-state.ts +441 -5
  338. package/src/skc-runtime/gc-render.ts +19 -1
  339. package/src/skc-runtime/gc-runtime.ts +68 -3
  340. package/src/skc-runtime/goal-mode-request.ts +55 -8
  341. package/src/skc-runtime/launch-worktree.ts +5 -5
  342. package/src/skc-runtime/linux-proc.ts +71 -0
  343. package/src/skc-runtime/managed-owner-admission.ts +352 -0
  344. package/src/skc-runtime/managed-owner-supervisor.ts +162 -0
  345. package/src/skc-runtime/psmux-detect.ts +82 -4
  346. package/src/skc-runtime/ralplan-runtime.ts +74 -90
  347. package/src/skc-runtime/session-resolution.ts +18 -3
  348. package/src/skc-runtime/session-state-sidecar.ts +47 -138
  349. package/src/skc-runtime/state-argv.ts +292 -0
  350. package/src/skc-runtime/state-migrations.ts +1 -1
  351. package/src/skc-runtime/state-runtime.ts +387 -451
  352. package/src/skc-runtime/state-writer.ts +36 -40
  353. package/src/skc-runtime/team-launch.ts +319 -0
  354. package/src/skc-runtime/team-notify.ts +326 -0
  355. package/src/skc-runtime/team-runtime.ts +8 -2
  356. package/src/skc-runtime/team-store.ts +828 -0
  357. package/src/skc-runtime/team-workers.ts +962 -0
  358. package/src/skc-runtime/tmux-owner-isolation-cli.ts +55 -28
  359. package/src/skc-runtime/tmux-owner-isolation.ts +136 -11
  360. package/src/skc-runtime/tmux-sessions.ts +23 -34
  361. package/src/skc-runtime/ultragoal-change-set.ts +172 -0
  362. package/src/skc-runtime/ultragoal-evidence.ts +874 -0
  363. package/src/skc-runtime/ultragoal-guard.ts +136 -18
  364. package/src/skc-runtime/ultragoal-owner-loss-recovery.ts +328 -0
  365. package/src/skc-runtime/ultragoal-pipeline.ts +306 -0
  366. package/src/skc-runtime/ultragoal-receipt-freshness.ts +102 -1
  367. package/src/skc-runtime/ultragoal-runtime.ts +325 -1322
  368. package/src/skc-runtime/windows-powershell-command.ts +58 -0
  369. package/src/skc-runtime/workflow-cli-common.ts +30 -0
  370. package/src/skc-runtime/workflow-manifest.generated.json +58 -0
  371. package/src/skc-runtime/workflow-manifest.ts +18 -0
  372. package/src/skill-state/active-state.ts +3 -13
  373. package/src/skill-state/workflow-mutation-guard.ts +661 -0
  374. package/src/skill-state/workflow-state-contract.ts +6 -41
  375. package/src/slash-commands/builtin-registry.ts +115 -41
  376. package/src/system-prompt.ts +37 -44
  377. package/src/task/agents.ts +19 -1
  378. package/src/task/executor.ts +223 -45
  379. package/src/task/index.ts +124 -56
  380. package/src/thinking.ts +21 -6
  381. package/src/tool-discovery/tool-index.ts +20 -134
  382. package/src/tools/ask-answer-registry.ts +16 -2
  383. package/src/tools/ast-edit.ts +1 -1
  384. package/src/tools/bash-allowed-prefixes.ts +79 -29
  385. package/src/tools/bash-skill-urls.ts +14 -3
  386. package/src/tools/bash.ts +40 -2
  387. package/src/tools/browser/STEALTH-THIRD-PARTY-NOTICES.md +26 -0
  388. package/src/tools/browser/benchmark/detector-report.ts +157 -0
  389. package/src/tools/browser/benchmark/run-suite.ts +39 -0
  390. package/src/tools/browser/dead-tab-recovery.ts +78 -0
  391. package/src/tools/browser/launch.ts +127 -20
  392. package/src/tools/browser/profile-discovery.ts +63 -0
  393. package/src/tools/browser/profile-posture.ts +59 -0
  394. package/src/tools/browser/profile-reuse.ts +102 -0
  395. package/src/tools/browser/profile-warmup.ts +109 -0
  396. package/src/tools/browser/readable.ts +1 -1
  397. package/src/tools/browser/registry.ts +87 -11
  398. package/src/tools/browser/screenshot-format.ts +34 -0
  399. package/src/tools/browser/tab-protocol.ts +4 -0
  400. package/src/tools/browser/tab-supervisor.ts +392 -142
  401. package/src/tools/browser/tab-worker-entry.ts +33 -14
  402. package/src/tools/browser/tab-worker-path-resolver.ts +67 -0
  403. package/src/tools/browser/tab-worker-smoke.ts +87 -0
  404. package/src/tools/browser/tab-worker.ts +8 -6
  405. package/src/tools/browser.ts +6 -0
  406. package/src/tools/computer.ts +10 -3
  407. package/src/tools/cron.ts +30 -16
  408. package/src/tools/fetch.ts +11 -4
  409. package/src/tools/index.ts +88 -32
  410. package/src/tools/output-meta.ts +19 -7
  411. package/src/tools/path-utils.ts +42 -35
  412. package/src/tools/plan-mode-guard.ts +1 -0
  413. package/src/tools/puppeteer/14_stealth_permissions.txt +57 -0
  414. package/src/tools/puppeteer/15_stealth_webrtc.txt +60 -0
  415. package/src/tools/read.ts +226 -65
  416. package/src/tools/resource-gc.ts +125 -36
  417. package/src/tools/search-tool-bm25.ts +11 -74
  418. package/src/tools/sqlite-reader.ts +3 -2
  419. package/src/tools/subagent-render.ts +19 -8
  420. package/src/tools/subagent.ts +129 -34
  421. package/src/tools/telegram-send.ts +2 -2
  422. package/src/utils/event-bus.ts +9 -4
  423. package/src/utils/file-mentions.ts +4 -4
  424. package/src/utils/image-loading.ts +85 -34
  425. package/src/utils/image-resize.ts +16 -9
  426. package/src/utils/pasted-image-loading.ts +514 -0
  427. package/src/utils/pasted-image-path.ts +223 -98
  428. package/src/web/scrapers/html-to-markdown.ts +68 -0
  429. package/src/web/scrapers/readthedocs.ts +1 -1
  430. package/src/web/scrapers/types.ts +1 -68
  431. package/src/web/search/index.ts +3 -3
  432. package/src/web/search/providers/openai-compatible.ts +76 -23
  433. package/dist/types/append-only-mode.d.ts +0 -31
  434. package/dist/types/async/index.d.ts +0 -2
  435. package/dist/types/async/job-manager.d.ts +0 -328
  436. package/dist/types/async/support.d.ts +0 -2
  437. package/dist/types/autoresearch/dashboard.d.ts +0 -4
  438. package/dist/types/autoresearch/git.d.ts +0 -36
  439. package/dist/types/autoresearch/helpers.d.ts +0 -24
  440. package/dist/types/autoresearch/index.d.ts +0 -2
  441. package/dist/types/autoresearch/state.d.ts +0 -17
  442. package/dist/types/autoresearch/storage.d.ts +0 -142
  443. package/dist/types/autoresearch/tools/init-experiment.d.ts +0 -31
  444. package/dist/types/autoresearch/tools/log-experiment.d.ts +0 -23
  445. package/dist/types/autoresearch/tools/run-experiment.d.ts +0 -8
  446. package/dist/types/autoresearch/tools/update-notes.d.ts +0 -12
  447. package/dist/types/autoresearch/types.d.ts +0 -154
  448. package/dist/types/build-metadata.d.ts +0 -7
  449. package/dist/types/capability/context-file.d.ts +0 -17
  450. package/dist/types/capability/extension-module.d.ts +0 -15
  451. package/dist/types/capability/extension.d.ts +0 -28
  452. package/dist/types/capability/fs.d.ts +0 -20
  453. package/dist/types/capability/hook.d.ts +0 -19
  454. package/dist/types/capability/index.d.ts +0 -80
  455. package/dist/types/capability/instruction.d.ts +0 -17
  456. package/dist/types/capability/mcp.d.ts +0 -49
  457. package/dist/types/capability/prompt.d.ts +0 -15
  458. package/dist/types/capability/rule.d.ts +0 -69
  459. package/dist/types/capability/settings.d.ts +0 -15
  460. package/dist/types/capability/skill.d.ts +0 -36
  461. package/dist/types/capability/slash-command.d.ts +0 -17
  462. package/dist/types/capability/ssh.d.ts +0 -23
  463. package/dist/types/capability/system-prompt.d.ts +0 -15
  464. package/dist/types/capability/tool.d.ts +0 -19
  465. package/dist/types/capability/types.d.ts +0 -154
  466. package/dist/types/cli/agents-cli.d.ts +0 -12
  467. package/dist/types/cli/args.d.ts +0 -57
  468. package/dist/types/cli/auth-broker-cli.d.ts +0 -25
  469. package/dist/types/cli/auth-gateway-cli.d.ts +0 -18
  470. package/dist/types/cli/classify-install-target.d.ts +0 -8
  471. package/dist/types/cli/commands/init-xdg.d.ts +0 -1
  472. package/dist/types/cli/completion-cli.d.ts +0 -41
  473. package/dist/types/cli/config-cli.d.ts +0 -23
  474. package/dist/types/cli/daemon-cli.d.ts +0 -27
  475. package/dist/types/cli/fast-help.d.ts +0 -1
  476. package/dist/types/cli/file-processor.d.ts +0 -11
  477. package/dist/types/cli/fixture-report.d.ts +0 -20
  478. package/dist/types/cli/fixture-report.test.d.ts +0 -1
  479. package/dist/types/cli/grep-cli.d.ts +0 -17
  480. package/dist/types/cli/initial-message.d.ts +0 -17
  481. package/dist/types/cli/list-models.d.ts +0 -36
  482. package/dist/types/cli/local-provider-smoke.d.ts +0 -59
  483. package/dist/types/cli/malloc-env-guard.d.ts +0 -65
  484. package/dist/types/cli/malloc-env-guard.test.d.ts +0 -1
  485. package/dist/types/cli/mcp-cli.d.ts +0 -25
  486. package/dist/types/cli/migrate-cli.d.ts +0 -20
  487. package/dist/types/cli/nofile-limit.d.ts +0 -11
  488. package/dist/types/cli/notify-cli.d.ts +0 -39
  489. package/dist/types/cli/plugin-cli.d.ts +0 -34
  490. package/dist/types/cli/read-cli.d.ts +0 -4
  491. package/dist/types/cli/session-picker.d.ts +0 -4
  492. package/dist/types/cli/setup-cli.d.ts +0 -73
  493. package/dist/types/cli/shell-cli.d.ts +0 -8
  494. package/dist/types/cli/skills-cli.d.ts +0 -9
  495. package/dist/types/cli/ssh-cli.d.ts +0 -21
  496. package/dist/types/cli/stats-cli.d.ts +0 -17
  497. package/dist/types/cli/telegram-cli.d.ts +0 -13
  498. package/dist/types/cli/update-cli.d.ts +0 -108
  499. package/dist/types/cli/web-search-cli.d.ts +0 -32
  500. package/dist/types/cli/worktree-cli.d.ts +0 -26
  501. package/dist/types/cli.d.ts +0 -140
  502. package/dist/types/commands/acp.d.ts +0 -12
  503. package/dist/types/commands/agents.d.ts +0 -34
  504. package/dist/types/commands/auth-broker.d.ts +0 -54
  505. package/dist/types/commands/auth-gateway.d.ts +0 -32
  506. package/dist/types/commands/codex-native-hook.d.ts +0 -6
  507. package/dist/types/commands/commit.d.ts +0 -27
  508. package/dist/types/commands/completion.d.ts +0 -29
  509. package/dist/types/commands/config.d.ts +0 -33
  510. package/dist/types/commands/contribution-prep.d.ts +0 -18
  511. package/dist/types/commands/coordinator.d.ts +0 -19
  512. package/dist/types/commands/daemon.d.ts +0 -45
  513. package/dist/types/commands/deep-interview.d.ts +0 -54
  514. package/dist/types/commands/gc.d.ts +0 -26
  515. package/dist/types/commands/grep.d.ts +0 -42
  516. package/dist/types/commands/harness.d.ts +0 -43
  517. package/dist/types/commands/launch.d.ts +0 -131
  518. package/dist/types/commands/local-provider.d.ts +0 -34
  519. package/dist/types/commands/mcp-serve.d.ts +0 -24
  520. package/dist/types/commands/mcp.d.ts +0 -70
  521. package/dist/types/commands/migrate.d.ts +0 -33
  522. package/dist/types/commands/notify.d.ts +0 -47
  523. package/dist/types/commands/plugin.d.ts +0 -58
  524. package/dist/types/commands/ralplan.d.ts +0 -7
  525. package/dist/types/commands/read.d.ts +0 -15
  526. package/dist/types/commands/rlm.d.ts +0 -10
  527. package/dist/types/commands/session.d.ts +0 -30
  528. package/dist/types/commands/setup.d.ts +0 -105
  529. package/dist/types/commands/shell.d.ts +0 -21
  530. package/dist/types/commands/skills.d.ts +0 -26
  531. package/dist/types/commands/ssh.d.ts +0 -48
  532. package/dist/types/commands/state.d.ts +0 -7
  533. package/dist/types/commands/stats.d.ts +0 -25
  534. package/dist/types/commands/team.d.ts +0 -24
  535. package/dist/types/commands/telegram.d.ts +0 -22
  536. package/dist/types/commands/ultragoal.d.ts +0 -8
  537. package/dist/types/commands/update.d.ts +0 -20
  538. package/dist/types/commands/web-search.d.ts +0 -87
  539. package/dist/types/commands/worktree.d.ts +0 -34
  540. package/dist/types/commit/agentic/agent.d.ts +0 -31
  541. package/dist/types/commit/agentic/fallback.d.ts +0 -5
  542. package/dist/types/commit/agentic/index.d.ts +0 -2
  543. package/dist/types/commit/agentic/state.d.ts +0 -58
  544. package/dist/types/commit/agentic/tools/analyze-file.d.ts +0 -19
  545. package/dist/types/commit/agentic/tools/git-file-diff.d.ts +0 -10
  546. package/dist/types/commit/agentic/tools/git-hunk.d.ts +0 -9
  547. package/dist/types/commit/agentic/tools/git-overview.d.ts +0 -9
  548. package/dist/types/commit/agentic/tools/index.d.ts +0 -16
  549. package/dist/types/commit/agentic/tools/propose-changelog.d.ts +0 -28
  550. package/dist/types/commit/agentic/tools/propose-commit.d.ts +0 -36
  551. package/dist/types/commit/agentic/tools/recent-commits.d.ts +0 -7
  552. package/dist/types/commit/agentic/tools/schemas.d.ts +0 -27
  553. package/dist/types/commit/agentic/tools/split-commit.d.ts +0 -53
  554. package/dist/types/commit/agentic/topo-sort.d.ts +0 -4
  555. package/dist/types/commit/agentic/trivial.d.ts +0 -7
  556. package/dist/types/commit/agentic/validation.d.ts +0 -20
  557. package/dist/types/commit/analysis/conventional.d.ts +0 -22
  558. package/dist/types/commit/analysis/index.d.ts +0 -4
  559. package/dist/types/commit/analysis/scope.d.ts +0 -6
  560. package/dist/types/commit/analysis/summary.d.ts +0 -19
  561. package/dist/types/commit/analysis/validation.d.ts +0 -8
  562. package/dist/types/commit/changelog/detect.d.ts +0 -2
  563. package/dist/types/commit/changelog/generate.d.ts +0 -30
  564. package/dist/types/commit/changelog/index.d.ts +0 -30
  565. package/dist/types/commit/changelog/parse.d.ts +0 -2
  566. package/dist/types/commit/cli.d.ts +0 -3
  567. package/dist/types/commit/git/diff.d.ts +0 -5
  568. package/dist/types/commit/index.d.ts +0 -4
  569. package/dist/types/commit/map-reduce/index.d.ts +0 -28
  570. package/dist/types/commit/map-reduce/map-phase.d.ts +0 -17
  571. package/dist/types/commit/map-reduce/reduce-phase.d.ts +0 -13
  572. package/dist/types/commit/map-reduce/utils.d.ts +0 -2
  573. package/dist/types/commit/message.d.ts +0 -2
  574. package/dist/types/commit/model-selection.d.ts +0 -15
  575. package/dist/types/commit/pipeline.d.ts +0 -5
  576. package/dist/types/commit/shared-llm.d.ts +0 -54
  577. package/dist/types/commit/types.d.ts +0 -78
  578. package/dist/types/commit/utils/exclusions.d.ts +0 -4
  579. package/dist/types/commit/utils.d.ts +0 -20
  580. package/dist/types/config/config-file.d.ts +0 -58
  581. package/dist/types/config/file-lock-gc.d.ts +0 -5
  582. package/dist/types/config/file-lock.d.ts +0 -36
  583. package/dist/types/config/keybindings.d.ts +0 -364
  584. package/dist/types/config/model-equivalence.d.ts +0 -24
  585. package/dist/types/config/model-profile-activation.d.ts +0 -65
  586. package/dist/types/config/model-profiles.d.ts +0 -39
  587. package/dist/types/config/model-registry.d.ts +0 -473
  588. package/dist/types/config/model-resolver.d.ts +0 -217
  589. package/dist/types/config/models-config-schema.d.ts +0 -700
  590. package/dist/types/config/prompt-templates.d.ts +0 -32
  591. package/dist/types/config/resolve-config-value.d.ts +0 -17
  592. package/dist/types/config/settings-schema.d.ts +0 -4223
  593. package/dist/types/config/settings.d.ts +0 -158
  594. package/dist/types/config/skill-settings-defaults.d.ts +0 -14
  595. package/dist/types/config/telegram-autostart.d.ts +0 -14
  596. package/dist/types/config/telegram-env-bridge.d.ts +0 -18
  597. package/dist/types/config.d.ts +0 -66
  598. package/dist/types/coordinator/contract.d.ts +0 -4
  599. package/dist/types/coordinator-mcp/model-preset.d.ts +0 -45
  600. package/dist/types/coordinator-mcp/policy.d.ts +0 -27
  601. package/dist/types/coordinator-mcp/safety.d.ts +0 -26
  602. package/dist/types/coordinator-mcp/server.d.ts +0 -139
  603. package/dist/types/coordinator-mcp/session-reaper.d.ts +0 -53
  604. package/dist/types/cursor.d.ts +0 -24
  605. package/dist/types/daemon/builtin.d.ts +0 -20
  606. package/dist/types/daemon/control-types.d.ts +0 -67
  607. package/dist/types/daemon/operator-contract.d.ts +0 -47
  608. package/dist/types/daemon/runtime.d.ts +0 -25
  609. package/dist/types/dap/client.d.ts +0 -39
  610. package/dist/types/dap/config.d.ts +0 -6
  611. package/dist/types/dap/index.d.ts +0 -4
  612. package/dist/types/dap/session.d.ts +0 -108
  613. package/dist/types/dap/types.d.ts +0 -524
  614. package/dist/types/debug/crash-diagnostics.d.ts +0 -45
  615. package/dist/types/debug/index.d.ts +0 -15
  616. package/dist/types/debug/log-formatting.d.ts +0 -4
  617. package/dist/types/debug/log-viewer.d.ts +0 -68
  618. package/dist/types/debug/profiler.d.ts +0 -24
  619. package/dist/types/debug/raw-sse-buffer.d.ts +0 -44
  620. package/dist/types/debug/raw-sse.d.ts +0 -16
  621. package/dist/types/debug/report-bundle.d.ts +0 -55
  622. package/dist/types/debug/runtime-gauges.d.ts +0 -6
  623. package/dist/types/debug/system-info.d.ts +0 -26
  624. package/dist/types/deep-interview/plaintext-gate-guard.d.ts +0 -11
  625. package/dist/types/deep-interview/render-middleware.d.ts +0 -6
  626. package/dist/types/defaults/skc/extensions/grok-build/index.d.ts +0 -1
  627. package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/index.d.ts +0 -1
  628. package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/models/catalog.d.ts +0 -29
  629. package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/payload/sanitize.d.ts +0 -27
  630. package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/provider/billing.d.ts +0 -8
  631. package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/provider/register.d.ts +0 -5
  632. package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/provider/stream.d.ts +0 -10
  633. package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/provider/usage.d.ts +0 -2
  634. package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/shared/base-url.d.ts +0 -2
  635. package/dist/types/defaults/skc/extensions/grok-cli-vendor/src/shared/errors.d.ts +0 -38
  636. package/dist/types/defaults/skc-defaults.d.ts +0 -64
  637. package/dist/types/defaults/skc-grok-cli.d.ts +0 -5
  638. package/dist/types/discovery/agents-md.d.ts +0 -1
  639. package/dist/types/discovery/agents.d.ts +0 -12
  640. package/dist/types/discovery/builtin.d.ts +0 -1
  641. package/dist/types/discovery/claude-plugins.d.ts +0 -1
  642. package/dist/types/discovery/claude.d.ts +0 -1
  643. package/dist/types/discovery/cline.d.ts +0 -1
  644. package/dist/types/discovery/codex.d.ts +0 -1
  645. package/dist/types/discovery/cursor.d.ts +0 -19
  646. package/dist/types/discovery/gemini.d.ts +0 -1
  647. package/dist/types/discovery/github.d.ts +0 -1
  648. package/dist/types/discovery/helpers.d.ts +0 -271
  649. package/dist/types/discovery/index.d.ts +0 -48
  650. package/dist/types/discovery/mcp-json.d.ts +0 -1
  651. package/dist/types/discovery/opencode.d.ts +0 -1
  652. package/dist/types/discovery/plugin-dir-roots.d.ts +0 -15
  653. package/dist/types/discovery/ssh.d.ts +0 -1
  654. package/dist/types/discovery/substitute-plugin-root.d.ts +0 -1
  655. package/dist/types/discovery/vscode.d.ts +0 -1
  656. package/dist/types/discovery/windsurf.d.ts +0 -15
  657. package/dist/types/edit/apply-patch/index.d.ts +0 -35
  658. package/dist/types/edit/apply-patch/parser.d.ts +0 -34
  659. package/dist/types/edit/diff.d.ts +0 -75
  660. package/dist/types/edit/file-read-cache.d.ts +0 -25
  661. package/dist/types/edit/index.d.ts +0 -58
  662. package/dist/types/edit/modes/apply-patch.d.ts +0 -24
  663. package/dist/types/edit/modes/patch.d.ts +0 -99
  664. package/dist/types/edit/modes/replace.d.ts +0 -149
  665. package/dist/types/edit/normalize.d.ts +0 -43
  666. package/dist/types/edit/notebook.d.ts +0 -26
  667. package/dist/types/edit/read-file.d.ts +0 -8
  668. package/dist/types/edit/renderer.d.ts +0 -110
  669. package/dist/types/edit/streaming.d.ts +0 -66
  670. package/dist/types/eval/backend.d.ts +0 -40
  671. package/dist/types/eval/index.d.ts +0 -4
  672. package/dist/types/eval/js/context-manager.d.ts +0 -27
  673. package/dist/types/eval/js/executor.d.ts +0 -29
  674. package/dist/types/eval/js/index.d.ts +0 -10
  675. package/dist/types/eval/js/shared/helpers.d.ts +0 -38
  676. package/dist/types/eval/js/shared/indirect-eval.d.ts +0 -14
  677. package/dist/types/eval/js/shared/prelude.d.ts +0 -1
  678. package/dist/types/eval/js/shared/rewrite-imports.d.ts +0 -6
  679. package/dist/types/eval/js/shared/runtime.d.ts +0 -47
  680. package/dist/types/eval/js/shared/types.d.ts +0 -24
  681. package/dist/types/eval/js/tool-bridge.d.ts +0 -18
  682. package/dist/types/eval/js/worker-core.d.ts +0 -5
  683. package/dist/types/eval/js/worker-entry.d.ts +0 -1
  684. package/dist/types/eval/js/worker-protocol.d.ts +0 -77
  685. package/dist/types/eval/py/display.d.ts +0 -25
  686. package/dist/types/eval/py/executor.d.ts +0 -88
  687. package/dist/types/eval/py/index.d.ts +0 -10
  688. package/dist/types/eval/py/kernel.d.ts +0 -65
  689. package/dist/types/eval/py/prelude.d.ts +0 -1
  690. package/dist/types/eval/py/runtime.d.ts +0 -29
  691. package/dist/types/eval/py/tool-bridge.d.ts +0 -20
  692. package/dist/types/eval/types.d.ts +0 -52
  693. package/dist/types/exa/factory.d.ts +0 -13
  694. package/dist/types/exa/index.d.ts +0 -20
  695. package/dist/types/exa/mcp-client.d.ts +0 -45
  696. package/dist/types/exa/render.d.ts +0 -19
  697. package/dist/types/exa/researcher.d.ts +0 -9
  698. package/dist/types/exa/search.d.ts +0 -9
  699. package/dist/types/exa/types.d.ts +0 -155
  700. package/dist/types/exa/websets.d.ts +0 -9
  701. package/dist/types/exec/bash-executor.d.ts +0 -64
  702. package/dist/types/exec/exec.d.ts +0 -25
  703. package/dist/types/exec/idle-timeout-watchdog.d.ts +0 -18
  704. package/dist/types/exec/non-interactive-env.d.ts +0 -1
  705. package/dist/types/export/custom-share.d.ts +0 -20
  706. package/dist/types/export/html/index.d.ts +0 -10
  707. package/dist/types/export/html/template.generated.d.ts +0 -1
  708. package/dist/types/export/html/template.macro.d.ts +0 -5
  709. package/dist/types/export/ttsr.d.ts +0 -55
  710. package/dist/types/extensibility/custom-commands/bundled/ci-green/index.d.ts +0 -9
  711. package/dist/types/extensibility/custom-commands/index.d.ts +0 -2
  712. package/dist/types/extensibility/custom-commands/loader.d.ts +0 -29
  713. package/dist/types/extensibility/custom-commands/types.d.ts +0 -106
  714. package/dist/types/extensibility/custom-tools/index.d.ts +0 -6
  715. package/dist/types/extensibility/custom-tools/loader.d.ts +0 -69
  716. package/dist/types/extensibility/custom-tools/types.d.ts +0 -229
  717. package/dist/types/extensibility/custom-tools/wrapper.d.ts +0 -24
  718. package/dist/types/extensibility/extensions/compact-handler.d.ts +0 -26
  719. package/dist/types/extensibility/extensions/get-commands-handler.d.ts +0 -29
  720. package/dist/types/extensibility/extensions/index.d.ts +0 -9
  721. package/dist/types/extensibility/extensions/loader.d.ts +0 -43
  722. package/dist/types/extensibility/extensions/prefix-command-bridge.d.ts +0 -35
  723. package/dist/types/extensibility/extensions/runner.d.ts +0 -135
  724. package/dist/types/extensibility/extensions/types.d.ts +0 -920
  725. package/dist/types/extensibility/extensions/wrapper.d.ts +0 -55
  726. package/dist/types/extensibility/hooks/index.d.ts +0 -5
  727. package/dist/types/extensibility/hooks/loader.d.ts +0 -89
  728. package/dist/types/extensibility/hooks/runner.d.ts +0 -126
  729. package/dist/types/extensibility/hooks/tool-wrapper.d.ts +0 -25
  730. package/dist/types/extensibility/hooks/types.d.ts +0 -431
  731. package/dist/types/extensibility/plugins/doctor.d.ts +0 -3
  732. package/dist/types/extensibility/plugins/git-url.d.ts +0 -34
  733. package/dist/types/extensibility/plugins/index.d.ts +0 -8
  734. package/dist/types/extensibility/plugins/installer.d.ts +0 -5
  735. package/dist/types/extensibility/plugins/legacy-pi-compat.d.ts +0 -2
  736. package/dist/types/extensibility/plugins/loader.d.ts +0 -31
  737. package/dist/types/extensibility/plugins/manager.d.ts +0 -65
  738. package/dist/types/extensibility/plugins/marketplace/cache.d.ts +0 -41
  739. package/dist/types/extensibility/plugins/marketplace/fetcher.d.ts +0 -48
  740. package/dist/types/extensibility/plugins/marketplace/index.d.ts +0 -6
  741. package/dist/types/extensibility/plugins/marketplace/manager.d.ts +0 -57
  742. package/dist/types/extensibility/plugins/marketplace/registry.d.ts +0 -34
  743. package/dist/types/extensibility/plugins/marketplace/source-resolver.d.ts +0 -28
  744. package/dist/types/extensibility/plugins/marketplace/types.d.ts +0 -130
  745. package/dist/types/extensibility/plugins/parser.d.ts +0 -52
  746. package/dist/types/extensibility/plugins/security-scanner.d.ts +0 -31
  747. package/dist/types/extensibility/plugins/types.d.ts +0 -149
  748. package/dist/types/extensibility/runtime-skill-discovery.d.ts +0 -20
  749. package/dist/types/extensibility/shared-events.d.ts +0 -281
  750. package/dist/types/extensibility/skc-plugins/activation.d.ts +0 -14
  751. package/dist/types/extensibility/skc-plugins/compiler.d.ts +0 -19
  752. package/dist/types/extensibility/skc-plugins/constrained-hooks.d.ts +0 -29
  753. package/dist/types/extensibility/skc-plugins/index.d.ts +0 -18
  754. package/dist/types/extensibility/skc-plugins/injection.d.ts +0 -40
  755. package/dist/types/extensibility/skc-plugins/installer.d.ts +0 -13
  756. package/dist/types/extensibility/skc-plugins/loader.d.ts +0 -3
  757. package/dist/types/extensibility/skc-plugins/mcp-policy.d.ts +0 -26
  758. package/dist/types/extensibility/skc-plugins/observability.d.ts +0 -27
  759. package/dist/types/extensibility/skc-plugins/paths.d.ts +0 -8
  760. package/dist/types/extensibility/skc-plugins/prompt-appendix.d.ts +0 -16
  761. package/dist/types/extensibility/skc-plugins/registry.d.ts +0 -32
  762. package/dist/types/extensibility/skc-plugins/runtime-adapters.d.ts +0 -64
  763. package/dist/types/extensibility/skc-plugins/schema.d.ts +0 -3
  764. package/dist/types/extensibility/skc-plugins/session-validation.d.ts +0 -42
  765. package/dist/types/extensibility/skc-plugins/state.d.ts +0 -9
  766. package/dist/types/extensibility/skc-plugins/tools.d.ts +0 -8
  767. package/dist/types/extensibility/skc-plugins/types.d.ts +0 -220
  768. package/dist/types/extensibility/skc-plugins/validation.d.ts +0 -11
  769. package/dist/types/extensibility/skills.d.ts +0 -82
  770. package/dist/types/extensibility/slash-commands.d.ts +0 -48
  771. package/dist/types/extensibility/tool-proxy.d.ts +0 -4
  772. package/dist/types/extensibility/typebox.d.ts +0 -155
  773. package/dist/types/extensibility/utils.d.ts +0 -12
  774. package/dist/types/goals/index.d.ts +0 -3
  775. package/dist/types/goals/runtime.d.ts +0 -63
  776. package/dist/types/goals/state.d.ts +0 -32
  777. package/dist/types/goals/tools/goal-tool.d.ts +0 -62
  778. package/dist/types/harness-control-plane/classifier.d.ts +0 -13
  779. package/dist/types/harness-control-plane/control-endpoint.d.ts +0 -31
  780. package/dist/types/harness-control-plane/finalize.d.ts +0 -60
  781. package/dist/types/harness-control-plane/gc-adapter.d.ts +0 -3
  782. package/dist/types/harness-control-plane/operate.d.ts +0 -35
  783. package/dist/types/harness-control-plane/owner.d.ts +0 -53
  784. package/dist/types/harness-control-plane/phase-rollup.d.ts +0 -23
  785. package/dist/types/harness-control-plane/preserve.d.ts +0 -19
  786. package/dist/types/harness-control-plane/receipt-ingest.d.ts +0 -19
  787. package/dist/types/harness-control-plane/receipt-spool.d.ts +0 -19
  788. package/dist/types/harness-control-plane/receipts.d.ts +0 -149
  789. package/dist/types/harness-control-plane/rpc-adapter.d.ts +0 -69
  790. package/dist/types/harness-control-plane/seams.d.ts +0 -21
  791. package/dist/types/harness-control-plane/session-lease.d.ts +0 -65
  792. package/dist/types/harness-control-plane/state-machine.d.ts +0 -24
  793. package/dist/types/harness-control-plane/storage.d.ts +0 -81
  794. package/dist/types/harness-control-plane/types.d.ts +0 -187
  795. package/dist/types/hashline/anchors.d.ts +0 -20
  796. package/dist/types/hashline/apply.d.ts +0 -14
  797. package/dist/types/hashline/constants.d.ts +0 -19
  798. package/dist/types/hashline/diff-preview.d.ts +0 -2
  799. package/dist/types/hashline/diff.d.ts +0 -17
  800. package/dist/types/hashline/execute.d.ts +0 -4
  801. package/dist/types/hashline/hash.d.ts +0 -123
  802. package/dist/types/hashline/index.d.ts +0 -13
  803. package/dist/types/hashline/input.d.ts +0 -11
  804. package/dist/types/hashline/parser.d.ts +0 -7
  805. package/dist/types/hashline/prefixes.d.ts +0 -7
  806. package/dist/types/hashline/recovery.d.ts +0 -27
  807. package/dist/types/hashline/stream.d.ts +0 -2
  808. package/dist/types/hashline/types.d.ts +0 -77
  809. package/dist/types/hindsight/backend.d.ts +0 -13
  810. package/dist/types/hindsight/bank.d.ts +0 -54
  811. package/dist/types/hindsight/client.d.ts +0 -224
  812. package/dist/types/hindsight/config.d.ts +0 -51
  813. package/dist/types/hindsight/content.d.ts +0 -70
  814. package/dist/types/hindsight/index.d.ts +0 -8
  815. package/dist/types/hindsight/mental-models.d.ts +0 -125
  816. package/dist/types/hindsight/state.d.ts +0 -99
  817. package/dist/types/hindsight/transcript.d.ts +0 -28
  818. package/dist/types/hooks/codex-native-hooks-config.d.ts +0 -29
  819. package/dist/types/hooks/native-skill-hook.d.ts +0 -28
  820. package/dist/types/hooks/skill-keywords.d.ts +0 -18
  821. package/dist/types/hooks/skill-state.d.ts +0 -93
  822. package/dist/types/i18n/index.d.ts +0 -38
  823. package/dist/types/i18n/messages/de.d.ts +0 -2
  824. package/dist/types/i18n/messages/de.messages.d.ts +0 -1
  825. package/dist/types/i18n/messages/de.settings.d.ts +0 -1
  826. package/dist/types/i18n/messages/en.d.ts +0 -81
  827. package/dist/types/i18n/messages/es.d.ts +0 -2
  828. package/dist/types/i18n/messages/es.messages.d.ts +0 -1
  829. package/dist/types/i18n/messages/es.settings.d.ts +0 -1
  830. package/dist/types/i18n/messages/fr.d.ts +0 -2
  831. package/dist/types/i18n/messages/fr.messages.d.ts +0 -1
  832. package/dist/types/i18n/messages/fr.settings.d.ts +0 -1
  833. package/dist/types/i18n/messages/ja.d.ts +0 -2
  834. package/dist/types/i18n/messages/ja.messages.d.ts +0 -1
  835. package/dist/types/i18n/messages/ja.settings.d.ts +0 -1
  836. package/dist/types/i18n/messages/ko.d.ts +0 -2
  837. package/dist/types/i18n/messages/ko.messages.d.ts +0 -1
  838. package/dist/types/i18n/messages/ko.settings.d.ts +0 -1
  839. package/dist/types/i18n/messages/zh.d.ts +0 -2
  840. package/dist/types/i18n/messages/zh.messages.d.ts +0 -1
  841. package/dist/types/i18n/messages/zh.settings.d.ts +0 -1
  842. package/dist/types/index.d.ts +0 -33
  843. package/dist/types/internal-urls/agent-protocol.d.ts +0 -12
  844. package/dist/types/internal-urls/artifact-protocol.d.ts +0 -6
  845. package/dist/types/internal-urls/docs-index.generated.d.ts +0 -2
  846. package/dist/types/internal-urls/index.d.ts +0 -20
  847. package/dist/types/internal-urls/issue-pr-protocol.d.ts +0 -17
  848. package/dist/types/internal-urls/json-query.d.ts +0 -30
  849. package/dist/types/internal-urls/local-protocol.d.ts +0 -43
  850. package/dist/types/internal-urls/mcp-protocol.d.ts +0 -12
  851. package/dist/types/internal-urls/memory-protocol.d.ts +0 -23
  852. package/dist/types/internal-urls/parse.d.ts +0 -19
  853. package/dist/types/internal-urls/registry-helpers.d.ts +0 -11
  854. package/dist/types/internal-urls/router.d.ts +0 -14
  855. package/dist/types/internal-urls/rule-protocol.d.ts +0 -6
  856. package/dist/types/internal-urls/skc-protocol.d.ts +0 -12
  857. package/dist/types/internal-urls/skill-protocol.d.ts +0 -13
  858. package/dist/types/internal-urls/types.d.ts +0 -109
  859. package/dist/types/lsp/client.d.ts +0 -66
  860. package/dist/types/lsp/clients/biome-client.d.ts +0 -16
  861. package/dist/types/lsp/clients/index.d.ts +0 -19
  862. package/dist/types/lsp/clients/lsp-linter-client.d.ts +0 -16
  863. package/dist/types/lsp/clients/swiftlint-client.d.ts +0 -20
  864. package/dist/types/lsp/config.d.ts +0 -65
  865. package/dist/types/lsp/edits.d.ts +0 -23
  866. package/dist/types/lsp/index.d.ts +0 -130
  867. package/dist/types/lsp/lspmux.d.ts +0 -58
  868. package/dist/types/lsp/render.d.ts +0 -32
  869. package/dist/types/lsp/startup-events.d.ts +0 -12
  870. package/dist/types/lsp/types.d.ts +0 -306
  871. package/dist/types/lsp/utils.d.ts +0 -108
  872. package/dist/types/main.d.ts +0 -139
  873. package/dist/types/memories/index.d.ts +0 -28
  874. package/dist/types/memories/storage.d.ts +0 -110
  875. package/dist/types/memory-backend/index.d.ts +0 -4
  876. package/dist/types/memory-backend/local-backend.d.ts +0 -9
  877. package/dist/types/memory-backend/off-backend.d.ts +0 -7
  878. package/dist/types/memory-backend/resolve.d.ts +0 -15
  879. package/dist/types/memory-backend/types.d.ts +0 -61
  880. package/dist/types/migrate/action-planner.d.ts +0 -11
  881. package/dist/types/migrate/adapters/claude-code.d.ts +0 -2
  882. package/dist/types/migrate/adapters/codex.d.ts +0 -5
  883. package/dist/types/migrate/adapters/index.d.ts +0 -45
  884. package/dist/types/migrate/adapters/opencode.d.ts +0 -2
  885. package/dist/types/migrate/executor.d.ts +0 -2
  886. package/dist/types/migrate/mcp-mapper.d.ts +0 -20
  887. package/dist/types/migrate/report.d.ts +0 -18
  888. package/dist/types/migrate/skill-normalizer.d.ts +0 -27
  889. package/dist/types/migrate/types.d.ts +0 -126
  890. package/dist/types/modes/acp/acp-agent.d.ts +0 -78
  891. package/dist/types/modes/acp/acp-client-bridge.d.ts +0 -9
  892. package/dist/types/modes/acp/acp-event-mapper.d.ts +0 -36
  893. package/dist/types/modes/acp/acp-mode.d.ts +0 -17
  894. package/dist/types/modes/acp/index.d.ts +0 -2
  895. package/dist/types/modes/acp/terminal-auth.d.ts +0 -6
  896. package/dist/types/modes/bridge/auth.d.ts +0 -12
  897. package/dist/types/modes/bridge/bridge-client-bridge.d.ts +0 -9
  898. package/dist/types/modes/bridge/bridge-mode.d.ts +0 -47
  899. package/dist/types/modes/bridge/bridge-ui-context.d.ts +0 -88
  900. package/dist/types/modes/bridge/event-stream.d.ts +0 -8
  901. package/dist/types/modes/components/agent-dashboard.d.ts +0 -21
  902. package/dist/types/modes/components/assistant-message.d.ts +0 -20
  903. package/dist/types/modes/components/bash-execution.d.ts +0 -29
  904. package/dist/types/modes/components/bordered-loader.d.ts +0 -11
  905. package/dist/types/modes/components/branch-summary-message.d.ts +0 -13
  906. package/dist/types/modes/components/btw-panel.d.ts +0 -16
  907. package/dist/types/modes/components/compaction-summary-message.d.ts +0 -13
  908. package/dist/types/modes/components/countdown-timer.d.ts +0 -14
  909. package/dist/types/modes/components/custom-editor.d.ts +0 -69
  910. package/dist/types/modes/components/custom-message.d.ts +0 -15
  911. package/dist/types/modes/components/custom-model-preset-wizard.d.ts +0 -12
  912. package/dist/types/modes/components/custom-provider-wizard.d.ts +0 -10
  913. package/dist/types/modes/components/diff.d.ts +0 -11
  914. package/dist/types/modes/components/dynamic-border.d.ts +0 -14
  915. package/dist/types/modes/components/eval-execution.d.ts +0 -23
  916. package/dist/types/modes/components/execution-shared.d.ts +0 -46
  917. package/dist/types/modes/components/extensions/extension-dashboard.d.ts +0 -26
  918. package/dist/types/modes/components/extensions/extension-list.d.ts +0 -39
  919. package/dist/types/modes/components/extensions/index.d.ts +0 -8
  920. package/dist/types/modes/components/extensions/inspector-panel.d.ts +0 -8
  921. package/dist/types/modes/components/extensions/state-manager.d.ts +0 -50
  922. package/dist/types/modes/components/extensions/types.d.ts +0 -151
  923. package/dist/types/modes/components/footer.d.ts +0 -30
  924. package/dist/types/modes/components/history-search.d.ts +0 -7
  925. package/dist/types/modes/components/hook-editor.d.ts +0 -18
  926. package/dist/types/modes/components/hook-input.d.ts +0 -15
  927. package/dist/types/modes/components/hook-message.d.ts +0 -15
  928. package/dist/types/modes/components/hook-selector.d.ts +0 -59
  929. package/dist/types/modes/components/index.d.ts +0 -35
  930. package/dist/types/modes/components/irc-sidebar.d.ts +0 -32
  931. package/dist/types/modes/components/jobs-overlay-model.d.ts +0 -31
  932. package/dist/types/modes/components/jobs-overlay.d.ts +0 -30
  933. package/dist/types/modes/components/keybinding-hints.d.ts +0 -40
  934. package/dist/types/modes/components/login-dialog.d.ts +0 -32
  935. package/dist/types/modes/components/message-frame.d.ts +0 -42
  936. package/dist/types/modes/components/model-selector.d.ts +0 -60
  937. package/dist/types/modes/components/oauth-selector.d.ts +0 -17
  938. package/dist/types/modes/components/pet-selector.d.ts +0 -11
  939. package/dist/types/modes/components/plugin-selector.d.ts +0 -26
  940. package/dist/types/modes/components/plugin-settings.d.ts +0 -66
  941. package/dist/types/modes/components/provider-onboarding-selector.d.ts +0 -7
  942. package/dist/types/modes/components/queue-mode-selector.d.ts +0 -9
  943. package/dist/types/modes/components/queued-message-selector.d.ts +0 -12
  944. package/dist/types/modes/components/read-tool-group.d.ts +0 -30
  945. package/dist/types/modes/components/runtime-mcp-add-wizard.d.ts +0 -26
  946. package/dist/types/modes/components/sayknow-pet-widget.d.ts +0 -59
  947. package/dist/types/modes/components/session-observer-overlay.d.ts +0 -11
  948. package/dist/types/modes/components/session-selector.d.ts +0 -43
  949. package/dist/types/modes/components/settings-defs.d.ts +0 -50
  950. package/dist/types/modes/components/settings-selector.d.ts +0 -64
  951. package/dist/types/modes/components/show-images-selector.d.ts +0 -9
  952. package/dist/types/modes/components/skill-hud/render.d.ts +0 -2
  953. package/dist/types/modes/components/skill-message.d.ts +0 -10
  954. package/dist/types/modes/components/status-line/context-thresholds.d.ts +0 -4
  955. package/dist/types/modes/components/status-line/git-utils.d.ts +0 -28
  956. package/dist/types/modes/components/status-line/index.d.ts +0 -4
  957. package/dist/types/modes/components/status-line/presets.d.ts +0 -3
  958. package/dist/types/modes/components/status-line/segments.d.ts +0 -5
  959. package/dist/types/modes/components/status-line/separators.d.ts +0 -3
  960. package/dist/types/modes/components/status-line/token-rate.d.ts +0 -10
  961. package/dist/types/modes/components/status-line/types.d.ts +0 -83
  962. package/dist/types/modes/components/status-line.d.ts +0 -94
  963. package/dist/types/modes/components/theme-selector.d.ts +0 -10
  964. package/dist/types/modes/components/thinking-selector.d.ts +0 -15
  965. package/dist/types/modes/components/todo-reminder.d.ts +0 -13
  966. package/dist/types/modes/components/tool-execution.d.ts +0 -55
  967. package/dist/types/modes/components/tree-selector.d.ts +0 -31
  968. package/dist/types/modes/components/ttsr-notification.d.ts +0 -13
  969. package/dist/types/modes/components/two-column-body.d.ts +0 -9
  970. package/dist/types/modes/components/user-message-selector.d.ts +0 -28
  971. package/dist/types/modes/components/user-message.d.ts +0 -8
  972. package/dist/types/modes/components/visual-truncate.d.ts +0 -19
  973. package/dist/types/modes/components/welcome.d.ts +0 -46
  974. package/dist/types/modes/controllers/btw-controller.d.ts +0 -10
  975. package/dist/types/modes/controllers/command-controller-shared.d.ts +0 -47
  976. package/dist/types/modes/controllers/command-controller.d.ts +0 -40
  977. package/dist/types/modes/controllers/event-controller.d.ts +0 -21
  978. package/dist/types/modes/controllers/extension-ui-controller.d.ts +0 -80
  979. package/dist/types/modes/controllers/input-controller.d.ts +0 -42
  980. package/dist/types/modes/controllers/runtime-mcp-command-controller.d.ts +0 -10
  981. package/dist/types/modes/controllers/selector-controller.d.ts +0 -68
  982. package/dist/types/modes/controllers/ssh-command-controller.d.ts +0 -10
  983. package/dist/types/modes/controllers/todo-command-controller.d.ts +0 -7
  984. package/dist/types/modes/emoji-autocomplete.d.ts +0 -16
  985. package/dist/types/modes/index.d.ts +0 -10
  986. package/dist/types/modes/interactive-mode.d.ts +0 -297
  987. package/dist/types/modes/irc-observation-ledger.d.ts +0 -22
  988. package/dist/types/modes/jobs-observer.d.ts +0 -57
  989. package/dist/types/modes/oauth-manual-input.d.ts +0 -8
  990. package/dist/types/modes/print-mode.d.ts +0 -44
  991. package/dist/types/modes/prompt-action-autocomplete.d.ts +0 -50
  992. package/dist/types/modes/rpc/host-tools.d.ts +0 -1
  993. package/dist/types/modes/rpc/host-uris.d.ts +0 -1
  994. package/dist/types/modes/rpc/rpc-client.d.ts +0 -299
  995. package/dist/types/modes/rpc/rpc-mode.d.ts +0 -86
  996. package/dist/types/modes/rpc/rpc-socket-security.d.ts +0 -10
  997. package/dist/types/modes/rpc/rpc-types.d.ts +0 -810
  998. package/dist/types/modes/runtime-init.d.ts +0 -21
  999. package/dist/types/modes/session-observer-registry.d.ts +0 -26
  1000. package/dist/types/modes/shared/agent-wire/approval-gate.d.ts +0 -57
  1001. package/dist/types/modes/shared/agent-wire/command-contract.d.ts +0 -18
  1002. package/dist/types/modes/shared/agent-wire/command-dispatch.d.ts +0 -37
  1003. package/dist/types/modes/shared/agent-wire/command-validation.d.ts +0 -2
  1004. package/dist/types/modes/shared/agent-wire/deep-interview-gate.d.ts +0 -102
  1005. package/dist/types/modes/shared/agent-wire/event-contract.d.ts +0 -103
  1006. package/dist/types/modes/shared/agent-wire/event-envelope.d.ts +0 -60
  1007. package/dist/types/modes/shared/agent-wire/event-observation.d.ts +0 -37
  1008. package/dist/types/modes/shared/agent-wire/handshake.d.ts +0 -56
  1009. package/dist/types/modes/shared/agent-wire/host-tool-bridge.d.ts +0 -16
  1010. package/dist/types/modes/shared/agent-wire/host-uri-bridge.d.ts +0 -17
  1011. package/dist/types/modes/shared/agent-wire/protocol.d.ts +0 -25
  1012. package/dist/types/modes/shared/agent-wire/responses.d.ts +0 -4
  1013. package/dist/types/modes/shared/agent-wire/scopes.d.ts +0 -18
  1014. package/dist/types/modes/shared/agent-wire/session-registry.d.ts +0 -25
  1015. package/dist/types/modes/shared/agent-wire/ui-request-broker.d.ts +0 -42
  1016. package/dist/types/modes/shared/agent-wire/ui-result.d.ts +0 -27
  1017. package/dist/types/modes/shared/agent-wire/unattended-action-policy.d.ts +0 -29
  1018. package/dist/types/modes/shared/agent-wire/unattended-audit.d.ts +0 -68
  1019. package/dist/types/modes/shared/agent-wire/unattended-run-controller.d.ts +0 -166
  1020. package/dist/types/modes/shared/agent-wire/unattended-session.d.ts +0 -127
  1021. package/dist/types/modes/shared/agent-wire/workflow-gate-broker.d.ts +0 -154
  1022. package/dist/types/modes/shared/agent-wire/workflow-gate-schema.d.ts +0 -39
  1023. package/dist/types/modes/shared.d.ts +0 -15
  1024. package/dist/types/modes/slash-command-visibility.d.ts +0 -1
  1025. package/dist/types/modes/theme/defaults/index.d.ts +0 -652
  1026. package/dist/types/modes/theme/mermaid-cache.d.ts +0 -9
  1027. package/dist/types/modes/theme/shimmer.d.ts +0 -38
  1028. package/dist/types/modes/theme/theme.d.ts +0 -275
  1029. package/dist/types/modes/tmux-scroll.d.ts +0 -18
  1030. package/dist/types/modes/types.d.ts +0 -318
  1031. package/dist/types/modes/utils/abort-message.d.ts +0 -4
  1032. package/dist/types/modes/utils/context-usage.d.ts +0 -36
  1033. package/dist/types/modes/utils/hotkeys-markdown.d.ts +0 -5
  1034. package/dist/types/modes/utils/injected-user-submission.d.ts +0 -52
  1035. package/dist/types/modes/utils/irc-message.d.ts +0 -38
  1036. package/dist/types/modes/utils/keybinding-matchers.d.ts +0 -10
  1037. package/dist/types/modes/utils/terminal-bell.d.ts +0 -3
  1038. package/dist/types/modes/utils/tools-markdown.d.ts +0 -5
  1039. package/dist/types/modes/utils/ui-helpers.d.ts +0 -75
  1040. package/dist/types/notifications/attachment-registry.d.ts +0 -17
  1041. package/dist/types/notifications/chat-adapters.d.ts +0 -9
  1042. package/dist/types/notifications/config-commands.d.ts +0 -64
  1043. package/dist/types/notifications/config.d.ts +0 -132
  1044. package/dist/types/notifications/daemon-paths.d.ts +0 -17
  1045. package/dist/types/notifications/engine.d.ts +0 -59
  1046. package/dist/types/notifications/helpers.d.ts +0 -55
  1047. package/dist/types/notifications/html-format.d.ts +0 -75
  1048. package/dist/types/notifications/index.d.ts +0 -219
  1049. package/dist/types/notifications/lifecycle-commands.d.ts +0 -69
  1050. package/dist/types/notifications/lifecycle-control-runtime.d.ts +0 -107
  1051. package/dist/types/notifications/lifecycle-orchestrator.d.ts +0 -144
  1052. package/dist/types/notifications/managed-daemon.d.ts +0 -48
  1053. package/dist/types/notifications/notification-service.d.ts +0 -144
  1054. package/dist/types/notifications/operator-runtime.d.ts +0 -52
  1055. package/dist/types/notifications/rate-limit-pool.d.ts +0 -113
  1056. package/dist/types/notifications/recent-activity.d.ts +0 -39
  1057. package/dist/types/notifications/reply-sent-store.d.ts +0 -53
  1058. package/dist/types/notifications/rich-draft.d.ts +0 -68
  1059. package/dist/types/notifications/rich-render.d.ts +0 -90
  1060. package/dist/types/notifications/telegram-cli.d.ts +0 -19
  1061. package/dist/types/notifications/telegram-daemon-cli.d.ts +0 -28
  1062. package/dist/types/notifications/telegram-daemon-control.d.ts +0 -70
  1063. package/dist/types/notifications/telegram-daemon.d.ts +0 -558
  1064. package/dist/types/notifications/telegram-reference.d.ts +0 -136
  1065. package/dist/types/notifications/threaded-inbound.d.ts +0 -77
  1066. package/dist/types/notifications/threaded-render.d.ts +0 -88
  1067. package/dist/types/notifications/topic-registry.d.ts +0 -89
  1068. package/dist/types/plan-mode/approved-plan.d.ts +0 -49
  1069. package/dist/types/plan-mode/state.d.ts +0 -6
  1070. package/dist/types/registry/agent-registry.d.ts +0 -64
  1071. package/dist/types/reminders/star-reminder.d.ts +0 -115
  1072. package/dist/types/research-plan/index.d.ts +0 -1
  1073. package/dist/types/research-plan/ledger.d.ts +0 -33
  1074. package/dist/types/rlm/artifacts.d.ts +0 -9
  1075. package/dist/types/rlm/complete-research-tool.d.ts +0 -35
  1076. package/dist/types/rlm/data-context.d.ts +0 -6
  1077. package/dist/types/rlm/index.d.ts +0 -47
  1078. package/dist/types/rlm/notebook.d.ts +0 -12
  1079. package/dist/types/rlm/preset.d.ts +0 -23
  1080. package/dist/types/rlm/python-tool.d.ts +0 -16
  1081. package/dist/types/rlm/report.d.ts +0 -14
  1082. package/dist/types/rlm/types.d.ts +0 -37
  1083. package/dist/types/runtime/process-lifecycle.d.ts +0 -108
  1084. package/dist/types/runtime-api-key.d.ts +0 -7
  1085. package/dist/types/runtime-credential-selector.d.ts +0 -7
  1086. package/dist/types/runtime-mcp/client.d.ts +0 -74
  1087. package/dist/types/runtime-mcp/config-writer.d.ts +0 -89
  1088. package/dist/types/runtime-mcp/config.d.ts +0 -77
  1089. package/dist/types/runtime-mcp/discoverable-tool-metadata.d.ts +0 -7
  1090. package/dist/types/runtime-mcp/index.d.ts +0 -18
  1091. package/dist/types/runtime-mcp/json-rpc.d.ts +0 -22
  1092. package/dist/types/runtime-mcp/loader.d.ts +0 -45
  1093. package/dist/types/runtime-mcp/manager.d.ts +0 -195
  1094. package/dist/types/runtime-mcp/oauth-discovery.d.ts +0 -40
  1095. package/dist/types/runtime-mcp/oauth-flow.d.ts +0 -59
  1096. package/dist/types/runtime-mcp/render.d.ts +0 -25
  1097. package/dist/types/runtime-mcp/smithery-auth.d.ts +0 -16
  1098. package/dist/types/runtime-mcp/smithery-connect.d.ts +0 -38
  1099. package/dist/types/runtime-mcp/smithery-registry.d.ts +0 -51
  1100. package/dist/types/runtime-mcp/tool-bridge.d.ts +0 -86
  1101. package/dist/types/runtime-mcp/tool-cache.d.ts +0 -8
  1102. package/dist/types/runtime-mcp/transports/http.d.ts +0 -36
  1103. package/dist/types/runtime-mcp/transports/index.d.ts +0 -5
  1104. package/dist/types/runtime-mcp/transports/stdio.d.ts +0 -29
  1105. package/dist/types/runtime-mcp/types.d.ts +0 -349
  1106. package/dist/types/sdk.d.ts +0 -256
  1107. package/dist/types/secrets/index.d.ts +0 -9
  1108. package/dist/types/secrets/obfuscator.d.ts +0 -23
  1109. package/dist/types/secrets/regex.d.ts +0 -2
  1110. package/dist/types/session/agent-session.d.ts +0 -1238
  1111. package/dist/types/session/agent-storage.d.ts +0 -101
  1112. package/dist/types/session/artifacts.d.ts +0 -64
  1113. package/dist/types/session/auth-broker-config.d.ts +0 -13
  1114. package/dist/types/session/auth-storage.d.ts +0 -6
  1115. package/dist/types/session/blob-store.d.ts +0 -160
  1116. package/dist/types/session/cache-economics.d.ts +0 -79
  1117. package/dist/types/session/client-bridge.d.ts +0 -88
  1118. package/dist/types/session/context-estimation.d.ts +0 -31
  1119. package/dist/types/session/contribution-prep.d.ts +0 -47
  1120. package/dist/types/session/file-mention-pruning.d.ts +0 -8
  1121. package/dist/types/session/history-storage.d.ts +0 -16
  1122. package/dist/types/session/messages.d.ts +0 -169
  1123. package/dist/types/session/provider-safety-stop.d.ts +0 -5
  1124. package/dist/types/session/session-dump-format.d.ts +0 -22
  1125. package/dist/types/session/session-manager.d.ts +0 -781
  1126. package/dist/types/session/session-storage.d.ts +0 -230
  1127. package/dist/types/session/streaming-output.d.ts +0 -209
  1128. package/dist/types/session/tool-choice-queue.d.ts +0 -84
  1129. package/dist/types/session/yield-queue.d.ts +0 -24
  1130. package/dist/types/setup/credential-auto-import.d.ts +0 -63
  1131. package/dist/types/setup/credential-import.d.ts +0 -82
  1132. package/dist/types/setup/hermes-setup.d.ts +0 -78
  1133. package/dist/types/setup/host-plugin-setup.d.ts +0 -39
  1134. package/dist/types/setup/model-onboarding-guidance.d.ts +0 -9
  1135. package/dist/types/setup/provider-onboarding.d.ts +0 -52
  1136. package/dist/types/skc-runtime/cli-write-receipt.d.ts +0 -24
  1137. package/dist/types/skc-runtime/deep-interview-ambiguity.d.ts +0 -39
  1138. package/dist/types/skc-runtime/deep-interview-recorder.d.ts +0 -114
  1139. package/dist/types/skc-runtime/deep-interview-runtime.d.ts +0 -36
  1140. package/dist/types/skc-runtime/deep-interview-state.d.ts +0 -127
  1141. package/dist/types/skc-runtime/gc-render.d.ts +0 -6
  1142. package/dist/types/skc-runtime/gc-runtime.d.ts +0 -134
  1143. package/dist/types/skc-runtime/goal-mode-request.d.ts +0 -53
  1144. package/dist/types/skc-runtime/launch-tmux.d.ts +0 -78
  1145. package/dist/types/skc-runtime/launch-worktree.d.ts +0 -46
  1146. package/dist/types/skc-runtime/ledger-event-renderer.d.ts +0 -68
  1147. package/dist/types/skc-runtime/psmux-detect.d.ts +0 -78
  1148. package/dist/types/skc-runtime/ralplan-runtime.d.ts +0 -26
  1149. package/dist/types/skc-runtime/restricted-role-agent-bash.d.ts +0 -3
  1150. package/dist/types/skc-runtime/session-layout.d.ts +0 -59
  1151. package/dist/types/skc-runtime/session-resolution.d.ts +0 -47
  1152. package/dist/types/skc-runtime/session-state-sidecar.d.ts +0 -70
  1153. package/dist/types/skc-runtime/state-graph.d.ts +0 -4
  1154. package/dist/types/skc-runtime/state-migrations.d.ts +0 -33
  1155. package/dist/types/skc-runtime/state-renderer.d.ts +0 -70
  1156. package/dist/types/skc-runtime/state-runtime.d.ts +0 -38
  1157. package/dist/types/skc-runtime/state-schema.d.ts +0 -319
  1158. package/dist/types/skc-runtime/state-validation.d.ts +0 -6
  1159. package/dist/types/skc-runtime/state-writer.d.ts +0 -244
  1160. package/dist/types/skc-runtime/team-gc.d.ts +0 -7
  1161. package/dist/types/skc-runtime/team-runtime.d.ts +0 -355
  1162. package/dist/types/skc-runtime/tmux-common.d.ts +0 -111
  1163. package/dist/types/skc-runtime/tmux-gc.d.ts +0 -7
  1164. package/dist/types/skc-runtime/tmux-owner-isolation-cli.d.ts +0 -5
  1165. package/dist/types/skc-runtime/tmux-owner-isolation.d.ts +0 -309
  1166. package/dist/types/skc-runtime/tmux-sessions.d.ts +0 -94
  1167. package/dist/types/skc-runtime/ultragoal-guard.d.ts +0 -93
  1168. package/dist/types/skc-runtime/ultragoal-receipt-freshness.d.ts +0 -42
  1169. package/dist/types/skc-runtime/ultragoal-runtime.d.ts +0 -410
  1170. package/dist/types/skc-runtime/workflow-command-ref.d.ts +0 -43
  1171. package/dist/types/skc-runtime/workflow-manifest.d.ts +0 -54
  1172. package/dist/types/skill-state/active-state.d.ts +0 -126
  1173. package/dist/types/skill-state/canonical-skills.d.ts +0 -3
  1174. package/dist/types/skill-state/deep-interview-mutation-guard.d.ts +0 -38
  1175. package/dist/types/skill-state/initial-phase.d.ts +0 -12
  1176. package/dist/types/skill-state/workflow-hud.d.ts +0 -83
  1177. package/dist/types/skill-state/workflow-state-contract.d.ts +0 -57
  1178. package/dist/types/skill-state/workflow-state-version.d.ts +0 -3
  1179. package/dist/types/slash-commands/acp-builtins.d.ts +0 -18
  1180. package/dist/types/slash-commands/builtin-registry.d.ts +0 -24
  1181. package/dist/types/slash-commands/helpers/context-report.d.ts +0 -7
  1182. package/dist/types/slash-commands/helpers/fast-status-report.d.ts +0 -82
  1183. package/dist/types/slash-commands/helpers/format.d.ts +0 -10
  1184. package/dist/types/slash-commands/helpers/mcp.d.ts +0 -3
  1185. package/dist/types/slash-commands/helpers/parse.d.ts +0 -33
  1186. package/dist/types/slash-commands/helpers/ssh.d.ts +0 -3
  1187. package/dist/types/slash-commands/helpers/todo.d.ts +0 -3
  1188. package/dist/types/slash-commands/helpers/usage-report.d.ts +0 -7
  1189. package/dist/types/slash-commands/types.d.ts +0 -120
  1190. package/dist/types/ssh/config-writer.d.ts +0 -49
  1191. package/dist/types/ssh/connection-manager.d.ts +0 -33
  1192. package/dist/types/ssh/ssh-executor.d.ts +0 -37
  1193. package/dist/types/ssh/sshfs-mount.d.ts +0 -6
  1194. package/dist/types/ssh/utils.d.ts +0 -2
  1195. package/dist/types/stt/downloader.d.ts +0 -9
  1196. package/dist/types/stt/index.d.ts +0 -3
  1197. package/dist/types/stt/recorder.d.ts +0 -13
  1198. package/dist/types/stt/setup.d.ts +0 -18
  1199. package/dist/types/stt/stt-controller.d.ts +0 -16
  1200. package/dist/types/stt/transcriber.d.ts +0 -16
  1201. package/dist/types/system-prompt.d.ts +0 -118
  1202. package/dist/types/task/agents.d.ts +0 -28
  1203. package/dist/types/task/commands.d.ts +0 -35
  1204. package/dist/types/task/discovery.d.ts +0 -19
  1205. package/dist/types/task/executor.d.ts +0 -127
  1206. package/dist/types/task/fork-context-advisory.d.ts +0 -13
  1207. package/dist/types/task/fork-context-budget.d.ts +0 -7
  1208. package/dist/types/task/id.d.ts +0 -7
  1209. package/dist/types/task/index.d.ts +0 -43
  1210. package/dist/types/task/name-generator.d.ts +0 -16
  1211. package/dist/types/task/output-manager.d.ts +0 -36
  1212. package/dist/types/task/parallel.d.ts +0 -34
  1213. package/dist/types/task/receipt.d.ts +0 -89
  1214. package/dist/types/task/render.d.ts +0 -28
  1215. package/dist/types/task/roi-reconciliation.d.ts +0 -27
  1216. package/dist/types/task/simple-mode.d.ts +0 -8
  1217. package/dist/types/task/skc-command.d.ts +0 -7
  1218. package/dist/types/task/spawn-gate.d.ts +0 -29
  1219. package/dist/types/task/subprocess-tool-registry.d.ts +0 -72
  1220. package/dist/types/task/token-log.d.ts +0 -30
  1221. package/dist/types/task/token-log.test.d.ts +0 -1
  1222. package/dist/types/task/types.d.ts +0 -516
  1223. package/dist/types/task/worktree.d.ts +0 -94
  1224. package/dist/types/thinking-metadata.d.ts +0 -16
  1225. package/dist/types/thinking.d.ts +0 -22
  1226. package/dist/types/tool-discovery/tool-index.d.ts +0 -112
  1227. package/dist/types/tools/archive-reader.d.ts +0 -40
  1228. package/dist/types/tools/ask-answer-registry.d.ts +0 -18
  1229. package/dist/types/tools/ask.d.ts +0 -123
  1230. package/dist/types/tools/ast-edit.d.ts +0 -77
  1231. package/dist/types/tools/ast-grep.d.ts +0 -69
  1232. package/dist/types/tools/auto-generated-guard.d.ts +0 -17
  1233. package/dist/types/tools/bash-allowed-prefixes.d.ts +0 -10
  1234. package/dist/types/tools/bash-command-fixup.d.ts +0 -11
  1235. package/dist/types/tools/bash-interactive.d.ts +0 -16
  1236. package/dist/types/tools/bash-interceptor.d.ts +0 -24
  1237. package/dist/types/tools/bash-pty-selection.d.ts +0 -7
  1238. package/dist/types/tools/bash-skill-urls.d.ts +0 -31
  1239. package/dist/types/tools/bash.d.ts +0 -157
  1240. package/dist/types/tools/bisect.d.ts +0 -81
  1241. package/dist/types/tools/browser/actions.d.ts +0 -54
  1242. package/dist/types/tools/browser/attach.d.ts +0 -50
  1243. package/dist/types/tools/browser/launch.d.ts +0 -62
  1244. package/dist/types/tools/browser/readable.d.ts +0 -17
  1245. package/dist/types/tools/browser/registry.d.ts +0 -57
  1246. package/dist/types/tools/browser/render.d.ts +0 -53
  1247. package/dist/types/tools/browser/tab-protocol.d.ts +0 -144
  1248. package/dist/types/tools/browser/tab-supervisor.d.ts +0 -109
  1249. package/dist/types/tools/browser/tab-worker-entry.d.ts +0 -1
  1250. package/dist/types/tools/browser/tab-worker.d.ts +0 -19
  1251. package/dist/types/tools/browser.d.ts +0 -211
  1252. package/dist/types/tools/calculator.d.ts +0 -76
  1253. package/dist/types/tools/checkpoint.d.ts +0 -63
  1254. package/dist/types/tools/composer-bash-policy.d.ts +0 -14
  1255. package/dist/types/tools/computer/render.d.ts +0 -17
  1256. package/dist/types/tools/computer-gc.d.ts +0 -23
  1257. package/dist/types/tools/computer.d.ts +0 -465
  1258. package/dist/types/tools/conflict-detect.d.ts +0 -205
  1259. package/dist/types/tools/context.d.ts +0 -19
  1260. package/dist/types/tools/cron.d.ts +0 -91
  1261. package/dist/types/tools/debug.d.ts +0 -209
  1262. package/dist/types/tools/eval.d.ts +0 -108
  1263. package/dist/types/tools/fetch.d.ts +0 -84
  1264. package/dist/types/tools/file-recorder.d.ts +0 -13
  1265. package/dist/types/tools/find.d.ts +0 -95
  1266. package/dist/types/tools/fs-cache-invalidation.d.ts +0 -15
  1267. package/dist/types/tools/gh-format.d.ts +0 -6
  1268. package/dist/types/tools/gh-renderer.d.ts +0 -25
  1269. package/dist/types/tools/gh.d.ts +0 -356
  1270. package/dist/types/tools/github-cache.d.ts +0 -103
  1271. package/dist/types/tools/grouped-file-output.d.ts +0 -36
  1272. package/dist/types/tools/hindsight-recall.d.ts +0 -21
  1273. package/dist/types/tools/hindsight-reflect.d.ts +0 -23
  1274. package/dist/types/tools/hindsight-retain.d.ts +0 -27
  1275. package/dist/types/tools/image-gen.d.ts +0 -79
  1276. package/dist/types/tools/index.d.ts +0 -371
  1277. package/dist/types/tools/irc.d.ts +0 -79
  1278. package/dist/types/tools/job.d.ts +0 -78
  1279. package/dist/types/tools/json-tree.d.ts +0 -23
  1280. package/dist/types/tools/jtd-to-json-schema.d.ts +0 -29
  1281. package/dist/types/tools/jtd-to-typescript.d.ts +0 -26
  1282. package/dist/types/tools/jtd-utils.d.ts +0 -42
  1283. package/dist/types/tools/list-limit.d.ts +0 -12
  1284. package/dist/types/tools/match-line-format.d.ts +0 -11
  1285. package/dist/types/tools/monitor.d.ts +0 -54
  1286. package/dist/types/tools/output-meta.d.ts +0 -204
  1287. package/dist/types/tools/path-utils.d.ts +0 -147
  1288. package/dist/types/tools/plan-mode-guard.d.ts +0 -18
  1289. package/dist/types/tools/read.d.ts +0 -85
  1290. package/dist/types/tools/recipe/index.d.ts +0 -45
  1291. package/dist/types/tools/recipe/render.d.ts +0 -36
  1292. package/dist/types/tools/recipe/runner.d.ts +0 -60
  1293. package/dist/types/tools/recipe/runners/cargo.d.ts +0 -16
  1294. package/dist/types/tools/recipe/runners/index.d.ts +0 -2
  1295. package/dist/types/tools/recipe/runners/just.d.ts +0 -2
  1296. package/dist/types/tools/recipe/runners/make.d.ts +0 -2
  1297. package/dist/types/tools/recipe/runners/pkg.d.ts +0 -2
  1298. package/dist/types/tools/recipe/runners/task.d.ts +0 -2
  1299. package/dist/types/tools/render-mermaid.d.ts +0 -37
  1300. package/dist/types/tools/render-utils.d.ts +0 -158
  1301. package/dist/types/tools/renderers.d.ts +0 -26
  1302. package/dist/types/tools/resolve.d.ts +0 -80
  1303. package/dist/types/tools/resource-gc.d.ts +0 -54
  1304. package/dist/types/tools/review.d.ts +0 -63
  1305. package/dist/types/tools/search-tool-bm25.d.ts +0 -65
  1306. package/dist/types/tools/search.d.ts +0 -93
  1307. package/dist/types/tools/skill-discovery.d.ts +0 -40
  1308. package/dist/types/tools/skill.d.ts +0 -48
  1309. package/dist/types/tools/sqlite-reader.d.ts +0 -94
  1310. package/dist/types/tools/ssh.d.ts +0 -67
  1311. package/dist/types/tools/subagent-render.d.ts +0 -31
  1312. package/dist/types/tools/subagent.d.ts +0 -117
  1313. package/dist/types/tools/telegram-send.d.ts +0 -39
  1314. package/dist/types/tools/todo-write.d.ts +0 -120
  1315. package/dist/types/tools/tool-errors.d.ts +0 -33
  1316. package/dist/types/tools/tool-result.d.ts +0 -30
  1317. package/dist/types/tools/tool-timeouts.d.ts +0 -56
  1318. package/dist/types/tools/ultragoal-ask-guard.d.ts +0 -12
  1319. package/dist/types/tools/vim.d.ts +0 -58
  1320. package/dist/types/tools/write.d.ts +0 -59
  1321. package/dist/types/tools/yield.d.ts +0 -25
  1322. package/dist/types/tui/code-cell.d.ts +0 -32
  1323. package/dist/types/tui/file-list.d.ts +0 -22
  1324. package/dist/types/tui/hyperlink.d.ts +0 -42
  1325. package/dist/types/tui/index.d.ts +0 -11
  1326. package/dist/types/tui/output-block.d.ts +0 -28
  1327. package/dist/types/tui/status-line.d.ts +0 -18
  1328. package/dist/types/tui/tree-list.d.ts +0 -19
  1329. package/dist/types/tui/types.d.ts +0 -13
  1330. package/dist/types/tui/utils.d.ts +0 -36
  1331. package/dist/types/utils/changelog.d.ts +0 -37
  1332. package/dist/types/utils/clipboard.d.ts +0 -22
  1333. package/dist/types/utils/cmux-workspace.d.ts +0 -52
  1334. package/dist/types/utils/command-args.d.ts +0 -9
  1335. package/dist/types/utils/commit-message-generator.d.ts +0 -7
  1336. package/dist/types/utils/edit-mode.d.ts +0 -13
  1337. package/dist/types/utils/event-bus.d.ts +0 -6
  1338. package/dist/types/utils/external-editor.d.ts +0 -19
  1339. package/dist/types/utils/file-display-mode.d.ts +0 -27
  1340. package/dist/types/utils/file-mentions.d.ts +0 -25
  1341. package/dist/types/utils/git.d.ts +0 -393
  1342. package/dist/types/utils/image-loading.d.ts +0 -26
  1343. package/dist/types/utils/image-resize.d.ts +0 -39
  1344. package/dist/types/utils/lang-from-path.d.ts +0 -8
  1345. package/dist/types/utils/linkedom.d.ts +0 -4
  1346. package/dist/types/utils/markit.d.ts +0 -7
  1347. package/dist/types/utils/open.d.ts +0 -2
  1348. package/dist/types/utils/pasted-image-path.d.ts +0 -32
  1349. package/dist/types/utils/session-color.d.ts +0 -10
  1350. package/dist/types/utils/shell-snapshot.d.ts +0 -5
  1351. package/dist/types/utils/sixel.d.ts +0 -21
  1352. package/dist/types/utils/title-generator.d.ts +0 -31
  1353. package/dist/types/utils/tool-choice.d.ts +0 -20
  1354. package/dist/types/utils/tools-manager.d.ts +0 -9
  1355. package/dist/types/vim/buffer.d.ts +0 -41
  1356. package/dist/types/vim/commands.d.ts +0 -6
  1357. package/dist/types/vim/engine.d.ts +0 -47
  1358. package/dist/types/vim/parser.d.ts +0 -3
  1359. package/dist/types/vim/render.d.ts +0 -25
  1360. package/dist/types/vim/types.d.ts +0 -182
  1361. package/dist/types/web/insane/bridge.d.ts +0 -103
  1362. package/dist/types/web/insane/url-guard.d.ts +0 -25
  1363. package/dist/types/web/kagi.d.ts +0 -23
  1364. package/dist/types/web/parallel.d.ts +0 -58
  1365. package/dist/types/web/scrapers/artifacthub.d.ts +0 -6
  1366. package/dist/types/web/scrapers/arxiv.d.ts +0 -5
  1367. package/dist/types/web/scrapers/aur.d.ts +0 -5
  1368. package/dist/types/web/scrapers/biorxiv.d.ts +0 -5
  1369. package/dist/types/web/scrapers/bluesky.d.ts +0 -5
  1370. package/dist/types/web/scrapers/brew.d.ts +0 -5
  1371. package/dist/types/web/scrapers/cheatsh.d.ts +0 -8
  1372. package/dist/types/web/scrapers/chocolatey.d.ts +0 -5
  1373. package/dist/types/web/scrapers/choosealicense.d.ts +0 -2
  1374. package/dist/types/web/scrapers/cisa-kev.d.ts +0 -5
  1375. package/dist/types/web/scrapers/clojars.d.ts +0 -5
  1376. package/dist/types/web/scrapers/coingecko.d.ts +0 -5
  1377. package/dist/types/web/scrapers/crates-io.d.ts +0 -5
  1378. package/dist/types/web/scrapers/crossref.d.ts +0 -2
  1379. package/dist/types/web/scrapers/devto.d.ts +0 -5
  1380. package/dist/types/web/scrapers/discogs.d.ts +0 -8
  1381. package/dist/types/web/scrapers/discourse.d.ts +0 -5
  1382. package/dist/types/web/scrapers/dockerhub.d.ts +0 -5
  1383. package/dist/types/web/scrapers/docs-rs.d.ts +0 -2
  1384. package/dist/types/web/scrapers/fdroid.d.ts +0 -5
  1385. package/dist/types/web/scrapers/firefox-addons.d.ts +0 -2
  1386. package/dist/types/web/scrapers/flathub.d.ts +0 -2
  1387. package/dist/types/web/scrapers/github-gist.d.ts +0 -5
  1388. package/dist/types/web/scrapers/github.d.ts +0 -12
  1389. package/dist/types/web/scrapers/gitlab.d.ts +0 -5
  1390. package/dist/types/web/scrapers/go-pkg.d.ts +0 -5
  1391. package/dist/types/web/scrapers/hackage.d.ts +0 -5
  1392. package/dist/types/web/scrapers/hackernews.d.ts +0 -2
  1393. package/dist/types/web/scrapers/hex.d.ts +0 -5
  1394. package/dist/types/web/scrapers/huggingface.d.ts +0 -2
  1395. package/dist/types/web/scrapers/iacr.d.ts +0 -5
  1396. package/dist/types/web/scrapers/index.d.ts +0 -84
  1397. package/dist/types/web/scrapers/jetbrains-marketplace.d.ts +0 -2
  1398. package/dist/types/web/scrapers/lemmy.d.ts +0 -2
  1399. package/dist/types/web/scrapers/lobsters.d.ts +0 -5
  1400. package/dist/types/web/scrapers/mastodon.d.ts +0 -5
  1401. package/dist/types/web/scrapers/maven.d.ts +0 -6
  1402. package/dist/types/web/scrapers/mdn.d.ts +0 -2
  1403. package/dist/types/web/scrapers/metacpan.d.ts +0 -5
  1404. package/dist/types/web/scrapers/musicbrainz.d.ts +0 -5
  1405. package/dist/types/web/scrapers/npm.d.ts +0 -5
  1406. package/dist/types/web/scrapers/nuget.d.ts +0 -5
  1407. package/dist/types/web/scrapers/nvd.d.ts +0 -5
  1408. package/dist/types/web/scrapers/ollama.d.ts +0 -2
  1409. package/dist/types/web/scrapers/open-vsx.d.ts +0 -5
  1410. package/dist/types/web/scrapers/opencorporates.d.ts +0 -5
  1411. package/dist/types/web/scrapers/openlibrary.d.ts +0 -5
  1412. package/dist/types/web/scrapers/orcid.d.ts +0 -5
  1413. package/dist/types/web/scrapers/osv.d.ts +0 -5
  1414. package/dist/types/web/scrapers/packagist.d.ts +0 -5
  1415. package/dist/types/web/scrapers/pub-dev.d.ts +0 -5
  1416. package/dist/types/web/scrapers/pubmed.d.ts +0 -5
  1417. package/dist/types/web/scrapers/pypi.d.ts +0 -5
  1418. package/dist/types/web/scrapers/rawg.d.ts +0 -2
  1419. package/dist/types/web/scrapers/readthedocs.d.ts +0 -2
  1420. package/dist/types/web/scrapers/reddit.d.ts +0 -5
  1421. package/dist/types/web/scrapers/repology.d.ts +0 -5
  1422. package/dist/types/web/scrapers/rfc.d.ts +0 -5
  1423. package/dist/types/web/scrapers/rubygems.d.ts +0 -5
  1424. package/dist/types/web/scrapers/searchcode.d.ts +0 -2
  1425. package/dist/types/web/scrapers/sec-edgar.d.ts +0 -5
  1426. package/dist/types/web/scrapers/semantic-scholar.d.ts +0 -2
  1427. package/dist/types/web/scrapers/snapcraft.d.ts +0 -2
  1428. package/dist/types/web/scrapers/sourcegraph.d.ts +0 -2
  1429. package/dist/types/web/scrapers/spdx.d.ts +0 -5
  1430. package/dist/types/web/scrapers/spotify.d.ts +0 -8
  1431. package/dist/types/web/scrapers/stackoverflow.d.ts +0 -6
  1432. package/dist/types/web/scrapers/terraform.d.ts +0 -5
  1433. package/dist/types/web/scrapers/tldr.d.ts +0 -7
  1434. package/dist/types/web/scrapers/twitter.d.ts +0 -5
  1435. package/dist/types/web/scrapers/types.d.ts +0 -83
  1436. package/dist/types/web/scrapers/utils.d.ts +0 -32
  1437. package/dist/types/web/scrapers/vimeo.d.ts +0 -5
  1438. package/dist/types/web/scrapers/vscode-marketplace.d.ts +0 -5
  1439. package/dist/types/web/scrapers/w3c.d.ts +0 -2
  1440. package/dist/types/web/scrapers/wikidata.d.ts +0 -5
  1441. package/dist/types/web/scrapers/wikipedia.d.ts +0 -5
  1442. package/dist/types/web/scrapers/youtube.d.ts +0 -13
  1443. package/dist/types/web/search/index.d.ts +0 -118
  1444. package/dist/types/web/search/provider.d.ts +0 -55
  1445. package/dist/types/web/search/providers/anthropic.d.ts +0 -32
  1446. package/dist/types/web/search/providers/base.d.ts +0 -90
  1447. package/dist/types/web/search/providers/brave.d.ts +0 -27
  1448. package/dist/types/web/search/providers/codex.d.ts +0 -35
  1449. package/dist/types/web/search/providers/duckduckgo.d.ts +0 -57
  1450. package/dist/types/web/search/providers/exa.d.ts +0 -52
  1451. package/dist/types/web/search/providers/gemini.d.ts +0 -57
  1452. package/dist/types/web/search/providers/insane.d.ts +0 -53
  1453. package/dist/types/web/search/providers/jina.d.ts +0 -26
  1454. package/dist/types/web/search/providers/kagi.d.ts +0 -24
  1455. package/dist/types/web/search/providers/kimi.d.ts +0 -27
  1456. package/dist/types/web/search/providers/openai-compatible.d.ts +0 -9
  1457. package/dist/types/web/search/providers/parallel.d.ts +0 -15
  1458. package/dist/types/web/search/providers/perplexity.d.ts +0 -38
  1459. package/dist/types/web/search/providers/searxng.d.ts +0 -44
  1460. package/dist/types/web/search/providers/synthetic.d.ts +0 -21
  1461. package/dist/types/web/search/providers/tavily.d.ts +0 -29
  1462. package/dist/types/web/search/providers/text-citations.d.ts +0 -23
  1463. package/dist/types/web/search/providers/utils.d.ts +0 -88
  1464. package/dist/types/web/search/providers/xai.d.ts +0 -64
  1465. package/dist/types/web/search/providers/zai.d.ts +0 -28
  1466. package/dist/types/web/search/render.d.ts +0 -36
  1467. package/dist/types/web/search/types.d.ts +0 -372
  1468. package/dist/types/web/search/utils.d.ts +0 -4
  1469. package/dist/types/workflow/workflow-intent-diff.d.ts +0 -25
  1470. package/dist/types/workflow/workflow-intent-report-consumer.d.ts +0 -50
  1471. package/dist/types/workflow/workflow-intent-report-schema.d.ts +0 -2
  1472. package/dist/types/workflow/workflow-intent-report.d.ts +0 -48
  1473. package/dist/types/workspace-tree.d.ts +0 -42
  1474. package/src/sdk.ts +0 -2623
@@ -4,16 +4,29 @@
4
4
 
5
5
  import { ThinkingLevel } from "@sayknow-cli/agent-core";
6
6
  import { type Api, DEFAULT_MODEL_PER_PROVIDER, type KnownProvider, type Model, modelsAreEqual } from "@sayknow-cli/ai";
7
- import { fuzzyMatch } from "@sayknow-cli/tui";
7
+
8
8
  import { logger } from "@sayknow-cli/utils";
9
9
  import chalk from "chalk";
10
- import { parseThinkingLevel, resolveThinkingLevelForModel } from "../thinking";
11
- import { isAuthenticated, kNoAuth, MODEL_ROLE_IDS, type ModelRegistry, type ModelRole } from "./model-registry";
10
+ import { parseThinkingLevel, resolveThinkingLevelForModel, splitSelectorThinkingSuffix } from "../thinking";
11
+ import { isAuthenticatedOrKeyless } from "./model-auth";
12
+ import { compareEquivalentModelVariants } from "./model-equivalence";
13
+ import { MODEL_ROLE_IDS, type ModelRegistry, type ModelRole } from "./model-registry";
14
+ import { type ModelSelectorValue, normalizeModelSelectorValue } from "./model-selector-value";
12
15
  import type { Settings } from "./settings";
13
16
 
14
17
  /** Default model IDs for each known provider */
15
18
  export const defaultModelPerProvider: Record<KnownProvider, string> = DEFAULT_MODEL_PER_PROVIDER;
16
19
 
20
+ /**
21
+ * Cursor's current RPC transport executes its exec protocol while streaming and
22
+ * has no client-side tool-call mode. Managed fallback attempts must not enable
23
+ * that irreversible path.
24
+ */
25
+ export function managedCursorFallbackUnavailableReason(model: Model<Api>, selector: string): string | undefined {
26
+ if (model.api !== "cursor-agent") return undefined;
27
+ return `Cursor model ${selector} requires provider-side tool execution and cannot be used in a retryable fallback chain`;
28
+ }
29
+
17
30
  export interface ScopedModelSelection {
18
31
  model: Model<Api>;
19
32
  thinkingLevel?: ThinkingLevel;
@@ -24,6 +37,9 @@ export interface ScopedModel extends ScopedModelSelection {
24
37
  explicitThinkingLevel: boolean;
25
38
  }
26
39
 
40
+ export type { SelectorThinkingSuffix } from "../thinking";
41
+ export { splitSelectorThinkingSuffix } from "../thinking";
42
+
27
43
  /**
28
44
  * Parse a model string in "provider/modelId" format.
29
45
  * Returns undefined if the format is invalid.
@@ -33,18 +49,11 @@ export function parseModelString(
33
49
  ): { provider: string; id: string; thinkingLevel?: ThinkingLevel } | undefined {
34
50
  const slashIdx = modelStr.indexOf("/");
35
51
  if (slashIdx <= 0) return undefined;
36
- const id = modelStr.slice(slashIdx + 1);
37
52
  const provider = modelStr.slice(0, slashIdx);
38
- // Strip valid thinking level suffix (e.g., "Anthropic model-sonnet-4-6:high" -> id "Anthropic model-sonnet-4-6", thinkingLevel "high")
39
- const colonIdx = id.lastIndexOf(":");
40
- if (colonIdx !== -1) {
41
- const suffix = id.slice(colonIdx + 1);
42
- const thinkingLevel = parseThinkingLevel(suffix);
43
- if (thinkingLevel) {
44
- return { provider, id: id.slice(0, colonIdx), thinkingLevel };
45
- }
46
- }
47
- return { provider, id };
53
+ const suffix = splitSelectorThinkingSuffix(modelStr);
54
+ return suffix.thinkingLevel
55
+ ? { provider, id: suffix.selector.slice(slashIdx + 1), thinkingLevel: suffix.thinkingLevel }
56
+ : { provider, id: modelStr.slice(slashIdx + 1) };
48
57
  }
49
58
 
50
59
  /**
@@ -112,15 +121,22 @@ function cloneModelWithRequestedId(model: Model<Api>, requestedId: string): Mode
112
121
  };
113
122
  }
114
123
 
115
- const kProviderModelIndex = Symbol("model-resolver.providerIndex");
116
- type ModelsWithProviderIndex = readonly Model<Api>[] & {
117
- [kProviderModelIndex]?: Map<string, Model<Api> | null>;
118
- };
124
+ const providerModelIndexes = new WeakMap<
125
+ readonly Model<Api>[],
126
+ { fingerprint: string; models: readonly Model<Api>[]; index: Map<string, Model<Api> | null> }
127
+ >();
128
+
129
+ function modelFingerprint(availableModels: readonly Model<Api>[]): string {
130
+ return availableModels.map(model => `${model.provider}\u0000${model.id}`).join("\u0001");
131
+ }
119
132
 
120
133
  function getProviderModelIndex(availableModels: readonly Model<Api>[]): Map<string, Model<Api> | null> {
121
- const tagged = availableModels as ModelsWithProviderIndex;
122
- const cached = tagged[kProviderModelIndex];
123
- if (cached) return cached;
134
+ const fingerprint = modelFingerprint(availableModels);
135
+ const cached = providerModelIndexes.get(availableModels);
136
+ if (cached?.fingerprint === fingerprint && cached.models.every((model, index) => model === availableModels[index])) {
137
+ return cached.index;
138
+ }
139
+
124
140
  const index = new Map<string, Model<Api> | null>();
125
141
  for (const m of availableModels) {
126
142
  const key = `${m.provider.toLowerCase()}\u0000${m.id.toLowerCase()}`;
@@ -130,7 +146,8 @@ function getProviderModelIndex(availableModels: readonly Model<Api>[]): Map<stri
130
146
  index.set(key, m);
131
147
  }
132
148
  }
133
- tagged[kProviderModelIndex] = index;
149
+ providerModelIndexes.set(availableModels, { fingerprint, models: [...availableModels], index });
150
+
134
151
  return index;
135
152
  }
136
153
 
@@ -147,13 +164,10 @@ export function resolveProviderModelReference(
147
164
  return undefined;
148
165
  }
149
166
 
150
- // Prefer an exact provider/model id match before falling back to the
151
- // case-insensitive index. Some provider catalogs intentionally carry both a
152
- // machine-id form (for example `minimax-m3`) and a display-cased alias
153
- // (`MiniMax-M3`). The lowercase index correctly treats those aliases as
154
- // ambiguous for fuzzy/case-insensitive lookup, but an exact selector should
155
- // still resolve deterministically.
156
- const caseExact = availableModels.find(m => m.provider === trimmedProvider && m.id === trimmedModelId);
167
+ // Preserve exact provider/id replacement semantics before case-insensitive
168
+ // ambiguity handling. Custom entries can intentionally replace a bundled
169
+ // model while a differently-cased catalog alias remains present.
170
+ const caseExact = availableModels.find(model => model.provider === trimmedProvider && model.id === trimmedModelId);
157
171
  if (caseExact) return caseExact;
158
172
 
159
173
  const index = getProviderModelIndex(availableModels);
@@ -194,8 +208,8 @@ export type CanonicalModelRegistry = Partial<
194
208
  >;
195
209
  export type ModelLookupRegistry = Pick<ModelRegistry, "getAvailable"> & Partial<CanonicalModelRegistry>;
196
210
  type CliModelRegistry = Pick<ModelRegistry, "getAll"> & Partial<CanonicalModelRegistry>;
197
- type InitialModelRegistry = Pick<ModelRegistry, "getAvailable" | "find">;
198
- type RestorableModelRegistry = Pick<ModelRegistry, "getAvailable" | "find" | "getApiKey">;
211
+ type InitialModelRegistry = Pick<ModelRegistry, "getAvailable">;
212
+ type RestorableModelRegistry = Pick<ModelRegistry, "getAvailable" | "getApiKey">;
199
213
 
200
214
  interface ModelPreferenceContext {
201
215
  modelUsageRank: Map<string, number>;
@@ -204,68 +218,99 @@ interface ModelPreferenceContext {
204
218
  modelOrder: Map<string, number>;
205
219
  }
206
220
 
221
+ const preferenceContexts = new WeakMap<
222
+ readonly Model<Api>[],
223
+ {
224
+ fingerprint: string;
225
+ models: readonly Model<Api>[];
226
+ cacheKey: string;
227
+ context: ModelPreferenceContext;
228
+ }
229
+ >();
230
+
231
+ function modelPreferenceKey(model: Pick<Model<Api>, "provider" | "id">): string {
232
+ return `${model.provider}/${model.id}`.toLowerCase();
233
+ }
234
+
235
+ function preferenceCacheKey(preferences: ModelMatchPreferences | undefined): string {
236
+ return JSON.stringify([preferences?.usageOrder ?? [], preferences?.deprioritizeProviders ?? ["openrouter"]]);
237
+ }
238
+
207
239
  function buildPreferenceContext(
208
240
  availableModels: Model<Api>[],
209
241
  preferences: ModelMatchPreferences | undefined,
210
242
  ): ModelPreferenceContext {
243
+ const fingerprint = modelFingerprint(availableModels);
244
+ const cacheKey = preferenceCacheKey(preferences);
245
+ const cached = preferenceContexts.get(availableModels);
246
+ if (
247
+ cached?.fingerprint === fingerprint &&
248
+ cached.cacheKey === cacheKey &&
249
+ cached.models.every((model, index) => model === availableModels[index])
250
+ ) {
251
+ return cached.context;
252
+ }
253
+
211
254
  const modelUsageRank = new Map<string, number>();
212
255
  const providerUsageRank = new Map<string, number>();
213
256
  const usageOrder = preferences?.usageOrder ?? [];
214
257
  for (let i = 0; i < usageOrder.length; i += 1) {
215
258
  const key = usageOrder[i];
216
- if (!modelUsageRank.has(key)) {
217
- modelUsageRank.set(key, i);
218
- }
259
+ if (!modelUsageRank.has(key.toLowerCase())) modelUsageRank.set(key.toLowerCase(), i);
219
260
  const parsed = parseModelString(key);
220
- if (parsed && !providerUsageRank.has(parsed.provider)) {
221
- providerUsageRank.set(parsed.provider, i);
261
+ if (parsed && !providerUsageRank.has(parsed.provider.toLowerCase())) {
262
+ providerUsageRank.set(parsed.provider.toLowerCase(), i);
222
263
  }
223
264
  }
224
265
 
225
- const deprioritizedProviders = new Set(preferences?.deprioritizeProviders ?? ["openrouter"]);
266
+ const deprioritizedProviders = new Set(
267
+ (preferences?.deprioritizeProviders ?? ["openrouter"]).map(provider => provider.toLowerCase()),
268
+ );
269
+
226
270
  const modelOrder = new Map<string, number>();
227
271
  for (let i = 0; i < availableModels.length; i += 1) {
228
272
  modelOrder.set(formatModelString(availableModels[i]), i);
229
273
  }
274
+ const context = { modelUsageRank, providerUsageRank, deprioritizedProviders, modelOrder };
275
+ preferenceContexts.set(availableModels, {
276
+ fingerprint,
277
+ models: [...availableModels],
278
+ cacheKey,
279
+ context,
280
+ });
230
281
 
231
- return { modelUsageRank, providerUsageRank, deprioritizedProviders, modelOrder };
282
+ return context;
232
283
  }
233
284
 
234
285
  function pickPreferredModel(candidates: Model<Api>[], context: ModelPreferenceContext): Model<Api> {
235
286
  if (candidates.length <= 1) return candidates[0];
236
287
  return [...candidates].sort((a, b) => {
237
- const aKey = formatModelString(a);
238
- const bKey = formatModelString(b);
239
- const aUsage = context.modelUsageRank.get(aKey);
240
- const bUsage = context.modelUsageRank.get(bKey);
288
+ const aUsage = context.modelUsageRank.get(modelPreferenceKey(a));
289
+ const bUsage = context.modelUsageRank.get(modelPreferenceKey(b));
290
+
241
291
  if (aUsage !== undefined || bUsage !== undefined) {
242
292
  return (aUsage ?? Number.POSITIVE_INFINITY) - (bUsage ?? Number.POSITIVE_INFINITY);
243
293
  }
244
294
 
245
- const aProviderUsage = context.providerUsageRank.get(a.provider);
246
- const bProviderUsage = context.providerUsageRank.get(b.provider);
295
+ const aProviderUsage = context.providerUsageRank.get(a.provider.toLowerCase());
296
+ const bProviderUsage = context.providerUsageRank.get(b.provider.toLowerCase());
297
+
247
298
  if (aProviderUsage !== undefined || bProviderUsage !== undefined) {
248
299
  return (aProviderUsage ?? Number.POSITIVE_INFINITY) - (bProviderUsage ?? Number.POSITIVE_INFINITY);
249
300
  }
250
301
 
251
- // Prefer vision-capable variants over configured provider/registration order
252
- // so an ambiguous id never resolves to a text-only namesake when a
253
- // vision-capable variant of the same id is available.
254
- const aVision = a.input.includes("image") ? 0 : 1;
255
- const bVision = b.input.includes("image") ? 0 : 1;
256
- if (aVision !== bVision) {
257
- return aVision - bVision;
302
+ const variantRank = compareEquivalentModelVariants(a, b, { finalize: false });
303
+ if (variantRank !== 0) {
304
+ return variantRank;
258
305
  }
259
306
 
260
- const aDeprioritized = context.deprioritizedProviders.has(a.provider);
261
- const bDeprioritized = context.deprioritizedProviders.has(b.provider);
307
+ const aDeprioritized = context.deprioritizedProviders.has(a.provider.toLowerCase());
308
+ const bDeprioritized = context.deprioritizedProviders.has(b.provider.toLowerCase());
262
309
  if (aDeprioritized !== bDeprioritized) {
263
310
  return aDeprioritized ? 1 : -1;
264
311
  }
265
312
 
266
- const aOrder = context.modelOrder.get(aKey) ?? 0;
267
- const bOrder = context.modelOrder.get(bKey) ?? 0;
268
- return aOrder - bOrder;
313
+ return compareEquivalentModelVariants(a, b, { modelOrder: context.modelOrder });
269
314
  })[0];
270
315
  }
271
316
 
@@ -310,6 +355,7 @@ function findExactCanonicalModelMatch(
310
355
  modelReference: string,
311
356
  availableModels: Model<Api>[],
312
357
  modelRegistry: CanonicalModelRegistry | undefined,
358
+ sessionId?: string,
313
359
  ): Model<Api> | undefined {
314
360
  if (!modelRegistry) {
315
361
  return undefined;
@@ -324,6 +370,33 @@ function findExactCanonicalModelMatch(
324
370
  });
325
371
  }
326
372
 
373
+ /**
374
+ * Resolve an unqualified exact alias through its canonical record so it uses
375
+ * the registry's equivalent-variant ranking rather than generic fuzzy policy.
376
+ */
377
+ function findExactEquivalentModelMatch(
378
+ modelReference: string,
379
+ availableModels: Model<Api>[],
380
+ modelRegistry: CanonicalModelRegistry | undefined,
381
+ sessionId?: string,
382
+ ): Model<Api> | undefined {
383
+ if (!modelRegistry?.getCanonicalId || !modelRegistry.resolveCanonicalModel) return undefined;
384
+ const trimmedReference = modelReference.trim();
385
+ if (!trimmedReference || trimmedReference.includes("/")) return undefined;
386
+ const exactMatches = availableModels.filter(model => model.id.toLowerCase() === trimmedReference.toLowerCase());
387
+ if (exactMatches.length === 0) return undefined;
388
+ const canonicalIds = new Set(
389
+ exactMatches
390
+ .map(model => modelRegistry.getCanonicalId!(model))
391
+ .filter((canonicalId): canonicalId is string => Boolean(canonicalId)),
392
+ );
393
+ if (canonicalIds.size !== 1) return undefined;
394
+ return modelRegistry.resolveCanonicalModel([...canonicalIds][0]!, {
395
+ availableOnly: false,
396
+ candidates: availableModels,
397
+ });
398
+ }
399
+
327
400
  /**
328
401
  * Try to match a pattern to a model from the available models list.
329
402
  * Returns the matched model or undefined if no match found.
@@ -332,7 +405,7 @@ function tryMatchModel(
332
405
  modelPattern: string,
333
406
  availableModels: Model<Api>[],
334
407
  context: ModelPreferenceContext,
335
- options?: { modelRegistry?: CanonicalModelRegistry },
408
+ options?: { modelRegistry?: CanonicalModelRegistry; sessionId?: string },
336
409
  ): Model<Api> | undefined {
337
410
  // Explicit provider/model selectors always bypass canonical coalescing.
338
411
  const exactRefMatch = findExactModelReferenceMatch(modelPattern, availableModels);
@@ -341,11 +414,26 @@ function tryMatchModel(
341
414
  }
342
415
 
343
416
  // Exact canonical ids coalesce provider variants before bare-id matching.
344
- const exactCanonicalMatch = findExactCanonicalModelMatch(modelPattern, availableModels, options?.modelRegistry);
417
+ const exactCanonicalMatch = findExactCanonicalModelMatch(
418
+ modelPattern,
419
+ availableModels,
420
+ options?.modelRegistry,
421
+ options?.sessionId,
422
+ );
345
423
  if (exactCanonicalMatch) {
346
424
  return exactCanonicalMatch;
347
425
  }
348
426
 
427
+ const exactEquivalentMatch = findExactEquivalentModelMatch(
428
+ modelPattern,
429
+ availableModels,
430
+ options?.modelRegistry,
431
+ options?.sessionId,
432
+ );
433
+ if (exactEquivalentMatch) {
434
+ return exactEquivalentMatch;
435
+ }
436
+
349
437
  // Exact ID match (case-insensitive) — this must happen before provider-scoped
350
438
  // fuzzy matching so raw IDs that contain slashes (for example OpenRouter model
351
439
  // IDs like "openai/gpt-4o:extended") still resolve as IDs instead of being
@@ -354,41 +442,19 @@ function tryMatchModel(
354
442
  if (exactMatches.length > 0) {
355
443
  return pickPreferredModel(exactMatches, context);
356
444
  }
357
- // Check for provider/modelId format — fuzzy match within provider only.
445
+ // Provider-qualified selectors are exact-only. Case-only duplicate catalog
446
+ // entries still rank deterministically within the explicitly named provider.
358
447
  const slashIndex = modelPattern.indexOf("/");
359
448
  if (slashIndex !== -1) {
360
- const provider = modelPattern.substring(0, slashIndex);
361
- const modelId = modelPattern.substring(slashIndex + 1);
362
- const providerModels = availableModels.filter(m => m.provider.toLowerCase() === provider.toLowerCase());
363
- if (providerModels.length === 0) {
364
- // The prefix is not a known provider in this candidate set, so treat the
365
- // slash as part of the raw model ID and continue with generic matching.
366
- } else {
367
- const scored = providerModels
368
- .map(model => ({ model, match: fuzzyMatch(modelId, model.id) }))
369
- .filter(entry => entry.match.matches);
370
- if (scored.length === 0) {
371
- return undefined;
372
- }
373
-
374
- scored.sort((a, b) => {
375
- if (a.match.score !== b.match.score) return a.match.score - b.match.score;
376
- const aKey = formatModelString(a.model);
377
- const bKey = formatModelString(b.model);
378
- const aUsage = context.modelUsageRank.get(aKey) ?? Number.POSITIVE_INFINITY;
379
- const bUsage = context.modelUsageRank.get(bKey) ?? Number.POSITIVE_INFINITY;
380
- if (aUsage !== bUsage) return aUsage - bUsage;
381
-
382
- const aProviderUsage = context.providerUsageRank.get(a.model.provider) ?? Number.POSITIVE_INFINITY;
383
- const bProviderUsage = context.providerUsageRank.get(b.model.provider) ?? Number.POSITIVE_INFINITY;
384
- if (aProviderUsage !== bProviderUsage) return aProviderUsage - bProviderUsage;
385
-
386
- const aOrder = context.modelOrder.get(aKey) ?? 0;
387
- const bOrder = context.modelOrder.get(bKey) ?? 0;
388
- return aOrder - bOrder;
389
- });
390
- return scored[0]?.model;
391
- }
449
+ const provider = modelPattern.slice(0, slashIndex).trim().toLowerCase();
450
+ const modelId = modelPattern
451
+ .slice(slashIndex + 1)
452
+ .trim()
453
+ .toLowerCase();
454
+ const providerExactMatches = availableModels.filter(
455
+ model => model.provider.toLowerCase() === provider && model.id.toLowerCase() === modelId,
456
+ );
457
+ return providerExactMatches.length > 0 ? pickPreferredModel(providerExactMatches, context) : undefined;
392
458
  }
393
459
 
394
460
  // No exact match - fall back to partial matching
@@ -430,84 +496,80 @@ export interface ParsedModelResult {
430
496
  explicitThinkingLevel: boolean;
431
497
  }
432
498
 
499
+ export interface ResolveSelectorOptions {
500
+ allowInvalidThinkingSelectorFallback?: boolean;
501
+ modelRegistry?: CanonicalModelRegistry;
502
+ preferences?: ModelMatchPreferences;
503
+ sessionId?: string;
504
+ }
505
+
433
506
  /**
434
- * Parse a pattern to extract model and thinking level.
435
- * Handles models with colons in their IDs (e.g., OpenRouter's :exacto suffix).
436
- *
437
- * Algorithm:
438
- * 1. Try to match full pattern as a model
439
- * 2. If found, return it with undefined thinking level
440
- * 3. If not found and has colons, split on last colon:
441
- * - If suffix is valid thinking level, use it and recurse on prefix
442
- * - If suffix is invalid, warn and recurse on prefix
443
- *
444
- * @internal Exported for testing
507
+ * Resolve one selector through ordered exact, canonical, bare-id, provider-fuzzy,
508
+ * substring/alias, and glob stages. Thinking is split only after a full selector
509
+ * cannot resolve, which preserves OpenRouter route suffixes in concrete IDs.
445
510
  */
446
- function parseModelPatternWithContext(
447
- pattern: string,
448
- availableModels: Model<Api>[],
449
- context: ModelPreferenceContext,
450
- options?: { allowInvalidThinkingSelectorFallback?: boolean; modelRegistry?: CanonicalModelRegistry },
511
+ export function resolveSelector(
512
+ selector: string,
513
+ candidates: Model<Api>[],
514
+ options?: ResolveSelectorOptions,
451
515
  ): ParsedModelResult {
452
- // Try exact match first
453
- const exactMatch = tryMatchModel(pattern, availableModels, context, options);
454
- if (exactMatch) {
455
- return { model: exactMatch, thinkingLevel: undefined, warning: undefined, explicitThinkingLevel: false };
456
- }
457
-
458
- // No match - try splitting on last colon if present
459
- const lastColonIndex = pattern.lastIndexOf(":");
460
- if (lastColonIndex === -1) {
461
- // No colons, pattern simply doesn't match any model
516
+ const context = buildPreferenceContext(candidates, options?.preferences);
517
+ const exact = tryMatchModel(selector, candidates, context, options);
518
+ if (exact) return { model: exact, thinkingLevel: undefined, warning: undefined, explicitThinkingLevel: false };
519
+ const glob = findGlobMatch(selector, candidates, context);
520
+ if (glob) return { model: glob, thinkingLevel: undefined, warning: undefined, explicitThinkingLevel: false };
521
+
522
+ const suffix = splitSelectorThinkingSuffix(selector);
523
+ if (
524
+ suffix.selector === selector ||
525
+ (suffix.invalidSuffix !== undefined && !(options?.allowInvalidThinkingSelectorFallback ?? true))
526
+ ) {
462
527
  return { model: undefined, thinkingLevel: undefined, warning: undefined, explicitThinkingLevel: false };
463
528
  }
464
529
 
465
- const prefix = pattern.substring(0, lastColonIndex);
466
- const suffix = pattern.substring(lastColonIndex + 1);
467
-
468
- const parsedThinkingLevel = parseThinkingLevel(suffix);
469
- if (parsedThinkingLevel) {
470
- // Valid thinking level - recurse on prefix and use this level
471
- const result = parseModelPatternWithContext(prefix, availableModels, context, options);
472
- if (result.model) {
473
- // Only use this thinking level if no warning from inner recursion
474
- const explicitThinkingLevel = !result.warning;
475
- return {
476
- model: result.model,
477
- thinkingLevel: explicitThinkingLevel ? parsedThinkingLevel : undefined,
478
- warning: result.warning,
479
- explicitThinkingLevel,
480
- };
481
- }
482
- return result;
483
- }
484
-
485
- const allowFallback = options?.allowInvalidThinkingSelectorFallback ?? true;
486
- if (!allowFallback) {
487
- return { model: undefined, thinkingLevel: undefined, warning: undefined, explicitThinkingLevel: false };
530
+ const model =
531
+ tryMatchModel(suffix.selector, candidates, context, options) ??
532
+ findGlobMatch(suffix.selector, candidates, context);
533
+ if (!model) return { model: undefined, thinkingLevel: undefined, warning: undefined, explicitThinkingLevel: false };
534
+ if (suffix.thinkingLevel) {
535
+ return { model, thinkingLevel: suffix.thinkingLevel, warning: undefined, explicitThinkingLevel: true };
488
536
  }
537
+ return {
538
+ model,
539
+ thinkingLevel: undefined,
540
+ warning: `Invalid thinking level "${suffix.invalidSuffix}" in pattern "${selector}". Using default instead.`,
541
+ explicitThinkingLevel: false,
542
+ };
543
+ }
489
544
 
490
- // Invalid suffix - recurse on prefix and warn
491
- const result = parseModelPatternWithContext(prefix, availableModels, context, options);
492
- if (result.model) {
493
- return {
494
- model: result.model,
495
- thinkingLevel: undefined,
496
- warning: `Invalid thinking level "${suffix}" in pattern "${pattern}". Using default instead.`,
497
- explicitThinkingLevel: false,
498
- };
499
- }
500
- return result;
545
+ function findGlobMatch(
546
+ selector: string,
547
+ candidates: Model<Api>[],
548
+ context: ModelPreferenceContext,
549
+ ): Model<Api> | undefined {
550
+ if (!selector.includes("*") && !selector.includes("?") && !selector.includes("[")) return undefined;
551
+ const glob = new Bun.Glob(selector.toLowerCase());
552
+ return pickPreferredModel(
553
+ candidates.filter(
554
+ model => glob.match(formatModelString(model).toLowerCase()) || glob.match(model.id.toLowerCase()),
555
+ ),
556
+ context,
557
+ );
501
558
  }
502
559
 
560
+ /** @internal Exported for testing and legacy adapters. */
561
+
503
562
  export function parseModelPattern(
504
563
  pattern: string,
505
564
  availableModels: Model<Api>[],
506
565
  preferences?: ModelMatchPreferences,
507
- options?: { allowInvalidThinkingSelectorFallback?: boolean; modelRegistry?: CanonicalModelRegistry },
566
+ options?: {
567
+ allowInvalidThinkingSelectorFallback?: boolean;
568
+ modelRegistry?: CanonicalModelRegistry;
569
+ sessionId?: string;
570
+ },
508
571
  ): ParsedModelResult {
509
- const context = buildPreferenceContext(availableModels, preferences);
510
- return parseModelPatternWithContext(pattern, availableModels, context, options);
572
+ return resolveSelector(pattern, availableModels, { ...options, preferences });
511
573
  }
512
574
 
513
575
  const PREFIX_MODEL_ROLE = "pi/";
@@ -524,10 +586,8 @@ function getModelRoleAlias(value: string): ModelRole | undefined {
524
586
  return undefined;
525
587
  }
526
588
 
527
- function normalizeModelPatternList(value: string | string[] | undefined): string[] {
528
- if (!value) return [];
529
- const patterns = Array.isArray(value) ? value : value.split(",");
530
- return patterns.map(pattern => pattern.trim()).filter(Boolean);
589
+ function normalizeModelPatternList(value: ModelSelectorValue | undefined): string[] {
590
+ return normalizeModelSelectorValue(value);
531
591
  }
532
592
 
533
593
  function isSessionInheritedAgentPattern(value: string): boolean {
@@ -538,14 +598,14 @@ function resolveConfiguredRolePattern(value: string, settings?: Settings): strin
538
598
  const normalized = value.trim();
539
599
  if (!normalized) return undefined;
540
600
 
541
- const lastColonIndex = normalized.lastIndexOf(":");
542
- const thinkingLevel =
543
- lastColonIndex > PREFIX_MODEL_ROLE.length ? parseThinkingLevel(normalized.slice(lastColonIndex + 1)) : undefined;
544
- const aliasCandidate = thinkingLevel ? normalized.slice(0, lastColonIndex) : normalized;
601
+ const suffix = splitSelectorThinkingSuffix(normalized);
602
+ const thinkingLevel = suffix.thinkingLevel;
603
+ const aliasCandidate = thinkingLevel ? suffix.selector : normalized;
545
604
  const role = getModelRoleAlias(aliasCandidate);
605
+
546
606
  if (!role) return [normalized];
547
607
 
548
- const configured = settings?.getModelRole(role)?.trim();
608
+ const configured = settings?.getModelRole(role);
549
609
  const resolved = configured ? normalizeModelPatternList(configured) : undefined;
550
610
  if (!resolved || resolved.length === 0) {
551
611
  return undefined;
@@ -560,14 +620,14 @@ function resolveConfiguredRolePattern(value: string, settings?: Settings): strin
560
620
  export function expandRoleAlias(value: string, settings?: Settings): string {
561
621
  const normalized = value.trim();
562
622
  if (normalized === DEFAULT_MODEL_ROLE) {
563
- return settings?.getModelRole("default") ?? value;
623
+ return normalizeModelPatternList(settings?.getModelRole("default"))[0] ?? value;
564
624
  }
565
625
 
566
626
  const resolved = resolveConfiguredRolePattern(value, settings)?.[0];
567
627
  return resolved ?? value;
568
628
  }
569
629
 
570
- export function resolveConfiguredModelPatterns(value: string | string[] | undefined, settings?: Settings): string[] {
630
+ export function resolveConfiguredModelPatterns(value: ModelSelectorValue | undefined, settings?: Settings): string[] {
571
631
  const patterns = normalizeModelPatternList(value);
572
632
  return patterns.flatMap(pattern => {
573
633
  const resolved = resolveConfiguredRolePattern(pattern, settings);
@@ -575,8 +635,8 @@ export function resolveConfiguredModelPatterns(value: string | string[] | undefi
575
635
  });
576
636
  }
577
637
  export interface AgentModelPatternResolutionOptions {
578
- settingsOverride?: string | string[];
579
- agentModel?: string | string[];
638
+ settingsOverride?: ModelSelectorValue;
639
+ agentModel?: ModelSelectorValue;
580
640
  settings?: Settings;
581
641
  activeModelPattern?: string;
582
642
  fallbackModelPattern?: string;
@@ -597,7 +657,10 @@ export function resolveAgentModelPatterns(options: AgentModelPatternResolutionOp
597
657
  }
598
658
 
599
659
  const fallback =
600
- activeModelPattern?.trim() || fallbackModelPattern?.trim() || settings?.getModelRole("default")?.trim() || "";
660
+ activeModelPattern?.trim() ||
661
+ fallbackModelPattern?.trim() ||
662
+ normalizeModelPatternList(settings?.getModelRole("default"))[0] ||
663
+ "";
601
664
  return resolveConfiguredModelPatterns(fallback, settings);
602
665
  }
603
666
 
@@ -612,21 +675,19 @@ export interface ResolvedModelRoleValue {
612
675
  }
613
676
 
614
677
  export function resolveModelRoleValue(
615
- roleValue: string | undefined,
678
+ roleValue: ModelSelectorValue | undefined,
616
679
  availableModels: Model<Api>[],
617
- options?: { settings?: Settings; matchPreferences?: ModelMatchPreferences; modelRegistry?: CanonicalModelRegistry },
680
+ options?: {
681
+ settings?: Settings;
682
+ matchPreferences?: ModelMatchPreferences;
683
+ modelRegistry?: CanonicalModelRegistry;
684
+ sessionId?: string;
685
+ },
618
686
  ): ResolvedModelRoleValue {
619
- if (!roleValue) {
620
- return { model: undefined, thinkingLevel: undefined, explicitThinkingLevel: false, warning: undefined };
621
- }
622
-
623
- const normalized = roleValue.trim();
624
- if (!normalized || normalized === DEFAULT_MODEL_ROLE) {
625
- return { model: undefined, thinkingLevel: undefined, explicitThinkingLevel: false, warning: undefined };
626
- }
627
-
628
- const effectivePatterns = resolveConfiguredRolePattern(normalized, options?.settings);
629
- if (!effectivePatterns || effectivePatterns.length === 0) {
687
+ const effectivePatterns = normalizeModelPatternList(roleValue).flatMap(
688
+ pattern => resolveConfiguredRolePattern(pattern, options?.settings) ?? [],
689
+ );
690
+ if (effectivePatterns.length === 0) {
630
691
  return { model: undefined, thinkingLevel: undefined, explicitThinkingLevel: false, warning: undefined };
631
692
  }
632
693
 
@@ -634,6 +695,7 @@ export function resolveModelRoleValue(
634
695
  for (const effectivePattern of effectivePatterns) {
635
696
  const resolved = parseModelPattern(effectivePattern, availableModels, options?.matchPreferences, {
636
697
  modelRegistry: options?.modelRegistry,
698
+ sessionId: options?.sessionId,
637
699
  });
638
700
  if (resolved.model) {
639
701
  return {
@@ -654,20 +716,18 @@ export function resolveModelRoleValue(
654
716
  }
655
717
 
656
718
  export function extractExplicitThinkingSelector(
657
- value: string | undefined,
719
+ value: ModelSelectorValue | undefined,
658
720
  settings?: Settings,
659
721
  ): ThinkingLevel | undefined {
660
- if (!value) return undefined;
661
- const normalized = value.trim();
722
+ const normalized = normalizeModelPatternList(value)[0];
662
723
  if (!normalized || normalized === DEFAULT_MODEL_ROLE) return undefined;
663
724
 
664
725
  const visited = new Set<string>();
665
726
  let current = normalized;
666
727
  while (!visited.has(current)) {
667
728
  visited.add(current);
668
- const lastColonIndex = current.lastIndexOf(":");
669
- const thinkingSelector =
670
- lastColonIndex > PREFIX_MODEL_ROLE.length ? parseThinkingLevel(current.slice(lastColonIndex + 1)) : undefined;
729
+ const thinkingSelector = splitSelectorThinkingSuffix(current).thinkingLevel;
730
+
671
731
  if (thinkingSelector) {
672
732
  return thinkingSelector;
673
733
  }
@@ -689,12 +749,7 @@ export function resolveModelFromString(
689
749
  matchPreferences?: ModelMatchPreferences,
690
750
  modelRegistry?: CanonicalModelRegistry,
691
751
  ): Model<Api> | undefined {
692
- const parsed = parseModelString(value);
693
- if (parsed) {
694
- const exact = available.find(model => model.provider === parsed.provider && model.id === parsed.id);
695
- if (exact) return exact;
696
- }
697
- return parseModelPattern(value, available, matchPreferences, { modelRegistry }).model;
752
+ return resolveSelector(value, available, { preferences: matchPreferences, modelRegistry }).model;
698
753
  }
699
754
 
700
755
  /**
@@ -712,12 +767,13 @@ export function resolveModelFromSettings(options: {
712
767
  let sawConfiguredProviderQualifiedRole = false;
713
768
  for (const role of roles) {
714
769
  const configured = settings.getModelRole(role);
715
- if (!configured) continue;
716
- const expanded = expandRoleAlias(configured, settings).trim();
770
+ const expanded = normalizeModelPatternList(configured)[0];
771
+ if (!expanded) continue;
772
+ const resolvedValue = expandRoleAlias(expanded, settings).trim();
717
773
  if (expanded.includes("/")) {
718
774
  sawConfiguredProviderQualifiedRole = true;
719
775
  }
720
- const resolved = resolveModelFromString(expanded, availableModels, matchPreferences, modelRegistry);
776
+ const resolved = resolveModelFromString(resolvedValue, availableModels, matchPreferences, modelRegistry);
721
777
  if (resolved) return resolved;
722
778
  }
723
779
  return sawConfiguredProviderQualifiedRole ? undefined : availableModels[0];
@@ -730,6 +786,7 @@ export function resolveModelOverride(
730
786
  modelPatterns: string[],
731
787
  modelRegistry: ModelLookupRegistry,
732
788
  settings?: Settings,
789
+ sessionId?: string,
733
790
  ): { model?: Model<Api>; thinkingLevel?: ThinkingLevel; explicitThinkingLevel: boolean } {
734
791
  if (modelPatterns.length === 0) return { explicitThinkingLevel: false };
735
792
  const availableModels = modelRegistry.getAvailable();
@@ -739,6 +796,7 @@ export function resolveModelOverride(
739
796
  settings,
740
797
  matchPreferences,
741
798
  modelRegistry,
799
+ sessionId,
742
800
  });
743
801
  if (model) {
744
802
  return { model, thinkingLevel, explicitThinkingLevel };
@@ -747,6 +805,61 @@ export function resolveModelOverride(
747
805
  return { explicitThinkingLevel: false };
748
806
  }
749
807
 
808
+ /**
809
+ * Resolve a configured fallback chain to its first callable entry without
810
+ * charging requests. For retryable chains, consumers MUST pass
811
+ * `{ managedFallback: true }` so unsuitable entries (including Cursor's
812
+ * provider-side tool mode) fail closed during resolution before any request
813
+ * is attempted. Single-entry chains remain non-managed selections.
814
+ */
815
+ export interface ModelChainResolutionOptions {
816
+ managedFallback?: boolean;
817
+ }
818
+
819
+ export async function resolveModelChainWithAuth(
820
+ modelPatterns: readonly string[],
821
+ modelRegistry: ModelLookupRegistry & Pick<ModelRegistry, "getApiKey">,
822
+ settings?: Settings,
823
+ sessionId?: string,
824
+ options?: ModelChainResolutionOptions,
825
+ ): Promise<{
826
+ model?: Model<Api>;
827
+ thinkingLevel?: ThinkingLevel;
828
+ explicitThinkingLevel: boolean;
829
+ activeIndex: number;
830
+ skips: Array<{ selector: string; reason: string }>;
831
+ }> {
832
+ const availableModels = modelRegistry.getAvailable();
833
+ const matchPreferences = { usageOrder: settings?.getStorage()?.getModelUsageOrder() };
834
+ const skips: Array<{ selector: string; reason: string }> = [];
835
+ for (let activeIndex = 0; activeIndex < modelPatterns.length; activeIndex += 1) {
836
+ const selector = modelPatterns[activeIndex];
837
+ const candidate = resolveModelRoleValue(selector, availableModels, {
838
+ settings,
839
+ matchPreferences,
840
+ modelRegistry,
841
+ sessionId,
842
+ });
843
+ if (!candidate.model) {
844
+ skips.push({ selector, reason: "unknown_model" });
845
+ continue;
846
+ }
847
+ if (options?.managedFallback && modelPatterns.length > 1) {
848
+ const cursorReason = managedCursorFallbackUnavailableReason(candidate.model, selector);
849
+ if (cursorReason) {
850
+ skips.push({ selector, reason: cursorReason });
851
+ continue;
852
+ }
853
+ }
854
+ const key = await modelRegistry.getApiKey(candidate.model, sessionId);
855
+ if (isAuthenticatedOrKeyless(key)) {
856
+ return { ...candidate, activeIndex, skips };
857
+ }
858
+ skips.push({ selector, reason: "unauthenticated" });
859
+ }
860
+ return { explicitThinkingLevel: false, activeIndex: modelPatterns.length, skips };
861
+ }
862
+
750
863
  /**
751
864
  * Resolve a list of override patterns to the first matching model, with an
752
865
  * auth-aware fallback to the parent session's active model.
@@ -773,7 +886,9 @@ export async function resolveModelOverrideWithAuthFallback(
773
886
  parentActiveModelPattern: string | undefined,
774
887
  modelRegistry: ModelLookupRegistry & Pick<ModelRegistry, "getApiKey">,
775
888
  settings?: Settings,
776
- sessionId?: string,
889
+ authSessionId?: string,
890
+ options?: ModelChainResolutionOptions,
891
+ canonicalSessionId?: string,
777
892
  ): Promise<{
778
893
  model?: Model<Api>;
779
894
  thinkingLevel?: ThinkingLevel;
@@ -781,31 +896,74 @@ export async function resolveModelOverrideWithAuthFallback(
781
896
  authFallbackUsed: boolean;
782
897
  requestedModel?: Model<Api>;
783
898
  fallbackReason?: "auth_unavailable";
899
+ activeIndex?: number;
900
+ parentFallbackSelector?: string;
901
+ skips: Array<{ selector: string; reason: string }>;
784
902
  }> {
785
- const primary = resolveModelOverride(modelPatterns, modelRegistry, settings);
786
- const unchanged = { ...primary, requestedModel: primary.model, authFallbackUsed: false };
787
- if (!primary.model || !parentActiveModelPattern) {
788
- return unchanged;
789
- }
790
-
791
- const primaryKey = await modelRegistry.getApiKey(primary.model, sessionId);
792
- if (primaryKey === kNoAuth || isAuthenticated(primaryKey)) {
793
- return unchanged;
794
- }
795
-
796
- const fallback = resolveModelOverride([parentActiveModelPattern], modelRegistry, settings);
797
- if (!fallback.model) {
798
- return unchanged;
799
- }
800
- if (modelsAreEqual(fallback.model, primary.model)) {
801
- return unchanged;
903
+ const availableModels = modelRegistry.getAvailable();
904
+ const matchPreferences = { usageOrder: settings?.getStorage()?.getModelUsageOrder() };
905
+ let requestedModel: Model<Api> | undefined;
906
+ let requestedResolution: ResolvedModelRoleValue | undefined;
907
+ const skips: Array<{ selector: string; reason: string }> = [];
908
+ let activeIndex = 0;
909
+ const canonicalScope = canonicalSessionId ?? authSessionId;
910
+ if (canonicalScope && parentActiveModelPattern) {
911
+ const parentActiveModel = resolveModelOverride([parentActiveModelPattern], modelRegistry, settings).model;
912
+ // TODO(upstream-v0.11): ModelRegistry.seedCanonicalVariant was removed;
913
+ // rewire canonical-variant seeding if a successor API appears.
914
+ void parentActiveModel;
802
915
  }
803
- const fallbackKey = await modelRegistry.getApiKey(fallback.model, sessionId);
804
- if (!isAuthenticated(fallbackKey)) {
805
- return unchanged;
916
+ for (const pattern of modelPatterns) {
917
+ const candidate = resolveModelRoleValue(pattern, availableModels, {
918
+ settings,
919
+ matchPreferences,
920
+ modelRegistry,
921
+ sessionId: canonicalScope,
922
+ });
923
+ if (!requestedModel && candidate.model) {
924
+ requestedModel = candidate.model;
925
+ requestedResolution = candidate;
926
+ }
927
+ if (!candidate.model) {
928
+ skips.push({ selector: pattern, reason: "unknown_model" });
929
+ activeIndex += 1;
930
+ continue;
931
+ }
932
+ if (options?.managedFallback && modelPatterns.length > 1) {
933
+ const cursorReason = managedCursorFallbackUnavailableReason(candidate.model, pattern);
934
+ if (cursorReason) {
935
+ skips.push({ selector: pattern, reason: cursorReason });
936
+ activeIndex += 1;
937
+ continue;
938
+ }
939
+ }
940
+ const key = await modelRegistry.getApiKey(candidate.model, authSessionId);
941
+ if (isAuthenticatedOrKeyless(key)) {
942
+ return { ...candidate, requestedModel: candidate.model, authFallbackUsed: false, activeIndex, skips };
943
+ }
944
+ skips.push({ selector: pattern, reason: "unauthenticated" });
945
+ activeIndex += 1;
946
+ }
947
+ const fallback = parentActiveModelPattern
948
+ ? resolveModelOverride([parentActiveModelPattern], modelRegistry, settings, authSessionId)
949
+ : { explicitThinkingLevel: false };
950
+ if (fallback.model) {
951
+ const fallbackKey = await modelRegistry.getApiKey(fallback.model, authSessionId);
952
+ if (isAuthenticatedOrKeyless(fallbackKey)) {
953
+ const isParentSubstitution = requestedModel === undefined || !modelsAreEqual(fallback.model, requestedModel);
954
+ return {
955
+ ...fallback,
956
+ requestedModel,
957
+ authFallbackUsed: requestedModel !== undefined && isParentSubstitution,
958
+ fallbackReason: requestedModel && isParentSubstitution ? "auth_unavailable" : undefined,
959
+ parentFallbackSelector: isParentSubstitution ? formatModelString(fallback.model) : undefined,
960
+ skips,
961
+ };
962
+ }
806
963
  }
807
-
808
- return { ...fallback, requestedModel: primary.model, authFallbackUsed: true, fallbackReason: "auth_unavailable" };
964
+ return requestedResolution
965
+ ? { ...requestedResolution, requestedModel, authFallbackUsed: false, activeIndex, skips }
966
+ : { explicitThinkingLevel: false, requestedModel, authFallbackUsed: false, activeIndex, skips };
809
967
  }
810
968
 
811
969
  /**
@@ -836,21 +994,20 @@ function resolveExactCanonicalScopePattern(
836
994
  modelRegistry: Pick<ModelRegistry, "getCanonicalVariants">,
837
995
  availableModels: Model<Api>[],
838
996
  ): { models: Model<Api>[]; thinkingLevel?: ThinkingLevel; explicitThinkingLevel: boolean } | undefined {
839
- const lastColonIndex = pattern.lastIndexOf(":");
840
- let canonicalId = pattern;
841
- let thinkingLevel: ThinkingLevel | undefined;
842
- let explicitThinkingLevel = false;
843
-
844
- if (lastColonIndex !== -1) {
845
- const suffix = pattern.substring(lastColonIndex + 1);
846
- const parsedThinkingLevel = parseThinkingLevel(suffix);
847
- if (parsedThinkingLevel) {
848
- canonicalId = pattern.substring(0, lastColonIndex);
849
- thinkingLevel = parsedThinkingLevel;
850
- explicitThinkingLevel = true;
851
- }
997
+ // Exact concrete selectors must win before a suffix is interpreted as thinking.
998
+ // This preserves canonical/OpenRouter model IDs that themselves contain colons.
999
+ if (
1000
+ findExactModelReferenceMatch(pattern, availableModels) ||
1001
+ (pattern.includes(":") && availableModels.some(model => model.id.toLowerCase() === pattern.trim().toLowerCase()))
1002
+ ) {
1003
+ return undefined;
852
1004
  }
853
1005
 
1006
+ const suffix = splitSelectorThinkingSuffix(pattern);
1007
+ const canonicalId = suffix.thinkingLevel ? suffix.selector : pattern;
1008
+ const thinkingLevel = suffix.thinkingLevel;
1009
+ const explicitThinkingLevel = thinkingLevel !== undefined;
1010
+
854
1011
  const variants = modelRegistry
855
1012
  .getCanonicalVariants(canonicalId, { availableOnly: true, candidates: availableModels })
856
1013
  .map(variant => variant.model);
@@ -862,43 +1019,39 @@ function resolveExactCanonicalScopePattern(
862
1019
  }
863
1020
 
864
1021
  /**
865
- * Resolve model patterns to actual Model objects with optional thinking levels
866
- * Format: "pattern:level" where :level is optional
867
- * For each pattern, finds all matching models and picks the best version:
868
- * 1. Prefer alias (e.g., Anthropic model-sonnet-4-5) over dated versions (Anthropic model-sonnet-4-5-20250929)
869
- * 2. If no alias, pick the latest dated version
870
- *
871
- * Supports models with colons in their IDs (e.g., OpenRouter's model:exacto).
872
- * The algorithm tries to match the full pattern first, then progressively
873
- * strips colon-suffixes to find a match.
1022
+ * Resolve model patterns to actual Model objects with optional thinking levels.
1023
+ * A `:level` suffix is interpreted only after the complete selector fails to
1024
+ * resolve, preserving concrete model IDs that contain colon-bearing route suffixes.
1025
+ * For each non-glob pattern, alias IDs are preferred over dated versions; otherwise
1026
+ * the latest dated version is selected.
874
1027
  */
1028
+
875
1029
  export async function resolveModelScope(
876
1030
  patterns: string[],
877
1031
  modelRegistry: Pick<ModelRegistry, "getAvailable" | "getCanonicalVariants">,
878
1032
  preferences?: ModelMatchPreferences,
879
1033
  ): Promise<ScopedModel[]> {
880
1034
  const availableModels = modelRegistry.getAvailable();
881
- const context = buildPreferenceContext(availableModels, preferences);
1035
+
882
1036
  const scopedModels: ScopedModel[] = [];
1037
+ const addScopedModel = (selection: ScopedModel): void => {
1038
+ const duplicate = scopedModels.some(
1039
+ existing =>
1040
+ modelsAreEqual(existing.model, selection.model) &&
1041
+ existing.thinkingLevel === selection.thinkingLevel &&
1042
+ existing.explicitThinkingLevel === selection.explicitThinkingLevel,
1043
+ );
1044
+ if (!duplicate) scopedModels.push(selection);
1045
+ };
883
1046
 
884
1047
  for (const pattern of patterns) {
885
1048
  // Check if pattern contains glob characters
886
1049
  if (pattern.includes("*") || pattern.includes("?") || pattern.includes("[")) {
887
- // Extract optional thinking level suffix (e.g., "provider/*:high")
888
- const colonIdx = pattern.lastIndexOf(":");
889
- let globPattern = pattern;
890
- let thinkingLevel: ThinkingLevel | undefined;
891
- let explicitThinkingLevel = false;
892
-
893
- if (colonIdx !== -1) {
894
- const suffix = pattern.substring(colonIdx + 1);
895
- const parsedThinkingLevel = parseThinkingLevel(suffix);
896
- if (parsedThinkingLevel) {
897
- thinkingLevel = parsedThinkingLevel;
898
- explicitThinkingLevel = true;
899
- globPattern = pattern.substring(0, colonIdx);
900
- }
901
- }
1050
+ // Extract the optional thinking suffix once, preserving route suffixes.
1051
+ const suffix = splitSelectorThinkingSuffix(pattern);
1052
+ const globPattern = suffix.thinkingLevel ? suffix.selector : pattern;
1053
+ const thinkingLevel = suffix.thinkingLevel;
1054
+ const explicitThinkingLevel = thinkingLevel !== undefined;
902
1055
 
903
1056
  // Match against "provider/modelId" format OR just model ID
904
1057
  // This allows "*sonnet*" to match without requiring "anthropic/*sonnet*"
@@ -914,42 +1067,37 @@ export async function resolveModelScope(
914
1067
  }
915
1068
 
916
1069
  for (const model of matchingModels) {
917
- if (!scopedModels.find(sm => modelsAreEqual(sm.model, model))) {
918
- scopedModels.push({
919
- model,
920
- thinkingLevel: explicitThinkingLevel
921
- ? (resolveThinkingLevelForModel(model, thinkingLevel) ?? thinkingLevel)
922
- : thinkingLevel,
923
- explicitThinkingLevel,
924
- });
925
- }
1070
+ addScopedModel({
1071
+ model,
1072
+ thinkingLevel: explicitThinkingLevel
1073
+ ? (resolveThinkingLevelForModel(model, thinkingLevel) ?? thinkingLevel)
1074
+ : thinkingLevel,
1075
+ explicitThinkingLevel,
1076
+ });
926
1077
  }
1078
+
927
1079
  continue;
928
1080
  }
929
1081
 
930
1082
  const exactCanonical = resolveExactCanonicalScopePattern(pattern, modelRegistry, availableModels);
931
1083
  if (exactCanonical) {
932
1084
  for (const model of exactCanonical.models) {
933
- if (!scopedModels.find(sm => modelsAreEqual(sm.model, model))) {
934
- scopedModels.push({
935
- model,
936
- thinkingLevel: exactCanonical.explicitThinkingLevel
937
- ? (resolveThinkingLevelForModel(model, exactCanonical.thinkingLevel) ??
938
- exactCanonical.thinkingLevel)
939
- : exactCanonical.thinkingLevel,
940
- explicitThinkingLevel: exactCanonical.explicitThinkingLevel,
941
- });
942
- }
1085
+ addScopedModel({
1086
+ model,
1087
+ thinkingLevel: exactCanonical.explicitThinkingLevel
1088
+ ? (resolveThinkingLevelForModel(model, exactCanonical.thinkingLevel) ?? exactCanonical.thinkingLevel)
1089
+ : exactCanonical.thinkingLevel,
1090
+ explicitThinkingLevel: exactCanonical.explicitThinkingLevel,
1091
+ });
943
1092
  }
1093
+
944
1094
  continue;
945
1095
  }
946
1096
 
947
- const { model, thinkingLevel, warning, explicitThinkingLevel } = parseModelPatternWithContext(
948
- pattern,
949
- availableModels,
950
- context,
951
- { modelRegistry },
952
- );
1097
+ const { model, thinkingLevel, warning, explicitThinkingLevel } = resolveSelector(pattern, availableModels, {
1098
+ modelRegistry,
1099
+ preferences,
1100
+ });
953
1101
 
954
1102
  if (warning) {
955
1103
  logger.warn(warning);
@@ -960,16 +1108,13 @@ export async function resolveModelScope(
960
1108
  continue;
961
1109
  }
962
1110
 
963
- // Avoid duplicates
964
- if (!scopedModels.find(sm => modelsAreEqual(sm.model, model))) {
965
- scopedModels.push({
966
- model,
967
- thinkingLevel: explicitThinkingLevel
968
- ? (resolveThinkingLevelForModel(model, thinkingLevel) ?? thinkingLevel)
969
- : thinkingLevel,
970
- explicitThinkingLevel,
971
- });
972
- }
1111
+ addScopedModel({
1112
+ model,
1113
+ thinkingLevel: explicitThinkingLevel
1114
+ ? (resolveThinkingLevelForModel(model, thinkingLevel) ?? thinkingLevel)
1115
+ : thinkingLevel,
1116
+ explicitThinkingLevel,
1117
+ });
973
1118
  }
974
1119
 
975
1120
  return scopedModels;
@@ -1013,9 +1158,7 @@ export interface ResolveCliModelResult {
1013
1158
  error: string | undefined;
1014
1159
  }
1015
1160
 
1016
- /**
1017
- * Resolve a single model from CLI flags.
1018
- */
1161
+ /** Resolve a single model from CLI flags through the staged selector resolver. */
1019
1162
  export function resolveCliModel(options: {
1020
1163
  cliProvider?: string;
1021
1164
  cliModel?: string;
@@ -1023,10 +1166,7 @@ export function resolveCliModel(options: {
1023
1166
  preferences?: ModelMatchPreferences;
1024
1167
  }): ResolveCliModelResult {
1025
1168
  const { cliProvider, cliModel, modelRegistry, preferences } = options;
1026
-
1027
- if (!cliModel) {
1028
- return { model: undefined, selector: undefined, warning: undefined, error: undefined };
1029
- }
1169
+ if (!cliModel) return { model: undefined, selector: undefined, warning: undefined, error: undefined };
1030
1170
 
1031
1171
  const availableModels = modelRegistry.getAll();
1032
1172
  if (availableModels.length === 0) {
@@ -1038,12 +1178,9 @@ export function resolveCliModel(options: {
1038
1178
  };
1039
1179
  }
1040
1180
 
1041
- const providerMap = new Map<string, string>();
1042
- for (const model of availableModels) {
1043
- providerMap.set(model.provider.toLowerCase(), model.provider);
1044
- }
1045
-
1046
- let provider = cliProvider ? providerMap.get(cliProvider.toLowerCase()) : undefined;
1181
+ const provider = cliProvider
1182
+ ? availableModels.find(model => model.provider.toLowerCase() === cliProvider.toLowerCase())?.provider
1183
+ : undefined;
1047
1184
  if (cliProvider && !provider) {
1048
1185
  return {
1049
1186
  model: undefined,
@@ -1053,117 +1190,55 @@ export function resolveCliModel(options: {
1053
1190
  };
1054
1191
  }
1055
1192
 
1056
- const trimmedModel = cliModel.trim();
1057
- if (!provider) {
1058
- const lower = trimmedModel.toLowerCase();
1059
- // When input has provider/id format (e.g. "zai/glm-5"), prefer decomposed
1060
- // provider+id match over flat id match. Without this, a model with id
1061
- // "zai/glm-5" on provider "vercel-ai-gateway" wins over provider "zai"
1062
- // with id "glm-5", because Array.find returns the first catalog hit.
1063
- const slashIdx = lower.indexOf("/");
1064
- let exact: (typeof availableModels)[number] | undefined;
1065
- if (slashIdx !== -1) {
1066
- const prefix = lower.substring(0, slashIdx);
1067
- const suffix = trimmedModel.substring(slashIdx + 1);
1068
- exact = resolveProviderModelReference(prefix, suffix, availableModels);
1069
- }
1070
- if (!exact && !trimmedModel.includes(":")) {
1071
- const canonicalMatch = modelRegistry.resolveCanonicalModel?.(trimmedModel, { availableOnly: false });
1072
- if (canonicalMatch) {
1073
- return {
1074
- model: canonicalMatch,
1075
- selector: modelRegistry.getCanonicalId?.(canonicalMatch) ?? trimmedModel,
1076
- warning: undefined,
1077
- thinkingLevel: undefined,
1078
- error: undefined,
1079
- };
1080
- }
1081
- }
1082
- if (!exact) {
1083
- exact = availableModels.find(
1084
- model => model.id.toLowerCase() === lower || `${model.provider}/${model.id}`.toLowerCase() === lower,
1085
- );
1086
- }
1087
- if (exact) {
1088
- return {
1089
- model: exact,
1090
- selector: formatModelString(exact),
1091
- warning: undefined,
1092
- thinkingLevel: undefined,
1093
- error: undefined,
1094
- };
1095
- }
1096
- }
1097
-
1098
- let pattern = trimmedModel;
1099
-
1100
- if (!provider) {
1101
- const slashIndex = cliModel.indexOf("/");
1102
- if (slashIndex !== -1) {
1103
- const maybeProvider = cliModel.substring(0, slashIndex);
1104
- const canonical = providerMap.get(maybeProvider.toLowerCase());
1105
- if (canonical) {
1106
- provider = canonical;
1107
- pattern = cliModel.substring(slashIndex + 1);
1108
- }
1109
- }
1110
- } else {
1111
- const prefix = `${provider}/`;
1112
- if (cliModel.toLowerCase().startsWith(prefix.toLowerCase())) {
1113
- pattern = cliModel.substring(prefix.length);
1114
- }
1115
- }
1116
-
1117
- if (provider) {
1118
- const exactProviderMatch = resolveProviderModelReference(provider, pattern, availableModels);
1119
- if (exactProviderMatch) {
1120
- return {
1121
- model: exactProviderMatch,
1122
- selector: formatModelString(exactProviderMatch),
1123
- warning: undefined,
1124
- thinkingLevel: undefined,
1125
- error: undefined,
1126
- };
1127
- }
1128
- }
1129
-
1130
- const candidates = provider ? availableModels.filter(model => model.provider === provider) : availableModels;
1131
- const { model, thinkingLevel, warning } = parseModelPattern(pattern, candidates, preferences, {
1132
- allowInvalidThinkingSelectorFallback: false,
1133
- modelRegistry,
1134
- });
1193
+ const modelInput = cliModel.trim();
1194
+ const providerPrefix = provider ? `${provider}/` : "";
1195
+ const pattern =
1196
+ provider && modelInput.toLowerCase().startsWith(providerPrefix.toLowerCase())
1197
+ ? modelInput.slice(providerPrefix.length)
1198
+ : modelInput;
1199
+ const candidates = provider
1200
+ ? availableModels.filter(model => model.provider.toLowerCase() === provider.toLowerCase())
1201
+ : availableModels;
1202
+ const selectorInput = provider ? `${provider}/${pattern}` : pattern;
1203
+ const exactProviderResolved = provider
1204
+ ? resolveSelector(selectorInput, candidates, {
1205
+ allowInvalidThinkingSelectorFallback: false,
1206
+ preferences,
1207
+ })
1208
+ : undefined;
1209
+ const resolved = exactProviderResolved?.model
1210
+ ? exactProviderResolved
1211
+ : resolveSelector(provider ? pattern : selectorInput, candidates, {
1212
+ allowInvalidThinkingSelectorFallback: false,
1213
+ modelRegistry: provider ? undefined : modelRegistry,
1214
+ preferences,
1215
+ });
1135
1216
 
1136
- if (!model) {
1137
- const display = provider ? `${provider}/${pattern}` : cliModel;
1217
+ if (!resolved.model) {
1138
1218
  return {
1139
1219
  model: undefined,
1140
1220
  selector: undefined,
1141
1221
  thinkingLevel: undefined,
1142
- warning,
1143
- error: `Model "${display}" not found. Use --list-models to see available models.`,
1222
+ warning: resolved.warning,
1223
+ error: `Model "${selectorInput}" not found. Use --list-models to see available models.`,
1144
1224
  };
1145
1225
  }
1146
1226
 
1147
- let selector = provider ? formatModelString(model) : undefined;
1148
- if (!provider) {
1149
- const lastColonIndex = pattern.lastIndexOf(":");
1150
- const canonicalCandidate =
1151
- lastColonIndex !== -1 && parseThinkingLevel(pattern.substring(lastColonIndex + 1))
1152
- ? pattern.substring(0, lastColonIndex)
1153
- : pattern;
1154
- if (!canonicalCandidate.includes("/")) {
1155
- const canonicalResolved = modelRegistry.resolveCanonicalModel?.(canonicalCandidate, { availableOnly: false });
1156
- if (canonicalResolved && canonicalResolved.provider === model.provider && canonicalResolved.id === model.id) {
1157
- selector = modelRegistry.getCanonicalId?.(canonicalResolved) ?? canonicalCandidate;
1158
- }
1159
- }
1160
- }
1161
-
1227
+ const suffix = splitSelectorThinkingSuffix(selectorInput);
1228
+ const canonicalSelector = suffix.selector.includes("/") ? undefined : suffix.selector;
1229
+ const canonicalModel = canonicalSelector
1230
+ ? modelRegistry.resolveCanonicalModel?.(canonicalSelector, { availableOnly: false, candidates: availableModels })
1231
+ : undefined;
1162
1232
  return {
1163
- model,
1164
- selector,
1165
- thinkingLevel,
1166
- warning,
1233
+ model: resolved.model,
1234
+ selector:
1235
+ canonicalModel &&
1236
+ canonicalModel.provider === resolved.model.provider &&
1237
+ canonicalModel.id === resolved.model.id
1238
+ ? (modelRegistry.getCanonicalId?.(canonicalModel) ?? canonicalSelector)
1239
+ : formatModelString(resolved.model),
1240
+ thinkingLevel: resolved.thinkingLevel,
1241
+ warning: resolved.warning,
1167
1242
  error: undefined,
1168
1243
  };
1169
1244
  }
@@ -1208,7 +1283,8 @@ export async function findInitialModel(options: {
1208
1283
 
1209
1284
  // 1. CLI args take priority
1210
1285
  if (cliProvider && cliModel) {
1211
- const found = modelRegistry.find(cliProvider, cliModel);
1286
+ const found = resolveProviderModelReference(cliProvider, cliModel, modelRegistry.getAvailable());
1287
+
1212
1288
  if (!found) {
1213
1289
  console.error(chalk.red(`Model ${cliProvider}/${cliModel} not found`));
1214
1290
  process.exit(1);
@@ -1232,7 +1308,8 @@ export async function findInitialModel(options: {
1232
1308
 
1233
1309
  // 3. Try saved default from settings
1234
1310
  if (defaultProvider && defaultModelId) {
1235
- const found = modelRegistry.find(defaultProvider, defaultModelId);
1311
+ const found = resolveProviderModelReference(defaultProvider, defaultModelId, modelRegistry.getAvailable());
1312
+
1236
1313
  if (found) {
1237
1314
  model = found;
1238
1315
  thinkingLevel = resolveThinkingLevelForModel(found, defaultThinkingSelector);
@@ -1271,7 +1348,7 @@ export async function restoreModelFromSession(
1271
1348
  shouldPrintMessages: boolean,
1272
1349
  modelRegistry: RestorableModelRegistry,
1273
1350
  ): Promise<{ model: Model<Api> | undefined; fallbackMessage: string | undefined }> {
1274
- const restoredModel = modelRegistry.find(savedProvider, savedModelId);
1351
+ const restoredModel = resolveProviderModelReference(savedProvider, savedModelId, modelRegistry.getAvailable());
1275
1352
 
1276
1353
  // Check if restored model exists and has a valid API key
1277
1354
  const hasApiKey = restoredModel ? !!(await modelRegistry.getApiKey(restoredModel)) : false;