@gajae-code/coding-agent 0.18.11 → 0.19.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 (462) hide show
  1. package/CHANGELOG.md +760 -0
  2. package/dist/types/async/job-manager.d.ts +7 -3
  3. package/dist/types/async/result-formatting.d.ts +2 -0
  4. package/dist/types/autoresearch/git.d.ts +1 -1
  5. package/dist/types/capability/fs.d.ts +2 -2
  6. package/dist/types/capability/rule.d.ts +7 -2
  7. package/dist/types/cli/accounts-cli.d.ts +2 -2
  8. package/dist/types/cli/append-system-prompt.d.ts +6 -0
  9. package/dist/types/cli/args.d.ts +7 -2
  10. package/dist/types/cli/customize-doctor-precedence.d.ts +16 -0
  11. package/dist/types/cli/customize-doctor.d.ts +4 -3
  12. package/dist/types/cli/doctor/install-repairs.d.ts +4 -1
  13. package/dist/types/cli/install-activation.d.ts +10 -4
  14. package/dist/types/cli/public-command-errors.d.ts +2 -0
  15. package/dist/types/cli/root-flags.d.ts +0 -12
  16. package/dist/types/cli/update-cli.d.ts +21 -3
  17. package/dist/types/cli-main.d.ts +0 -6
  18. package/dist/types/cli-ordinary.d.ts +2 -2
  19. package/dist/types/commands/accounts.d.ts +2 -1
  20. package/dist/types/commands/launch.d.ts +0 -6
  21. package/dist/types/commands/migrate.d.ts +1 -1
  22. package/dist/types/commands/sdk.d.ts +13 -0
  23. package/dist/types/commit/changelog/index.d.ts +1 -0
  24. package/dist/types/commit/map-reduce/index.d.ts +4 -4
  25. package/dist/types/config/autorouting-tier-map.d.ts +53 -1
  26. package/dist/types/config/config-hot-reload-trust.d.ts +12 -0
  27. package/dist/types/config/config-hot-reload.d.ts +44 -0
  28. package/dist/types/config/file-lock.d.ts +52 -3
  29. package/dist/types/config/model-discovery-manager.d.ts +2 -0
  30. package/dist/types/config/model-profile-activation.d.ts +79 -9
  31. package/dist/types/config/model-registry.d.ts +72 -8
  32. package/dist/types/config/model-resolver.d.ts +7 -4
  33. package/dist/types/config/models-config-schema.d.ts +10 -0
  34. package/dist/types/config/settings-schema.d.ts +57 -4
  35. package/dist/types/config/settings.d.ts +33 -1
  36. package/dist/types/coordinator-mcp/server.d.ts +4 -0
  37. package/dist/types/customization/import.d.ts +2 -0
  38. package/dist/types/customization/types.d.ts +1 -1
  39. package/dist/types/dap/config.d.ts +8 -4
  40. package/dist/types/dap/session.d.ts +11 -2
  41. package/dist/types/debug/system-info.d.ts +6 -1
  42. package/dist/types/discovery/helpers.d.ts +7 -2
  43. package/dist/types/discovery/mcp-compat.d.ts +3 -1
  44. package/dist/types/edit/index.d.ts +5 -0
  45. package/dist/types/edit/modes/patch.d.ts +14 -0
  46. package/dist/types/edit/modes/replace.d.ts +3 -0
  47. package/dist/types/eval/py/runtime.d.ts +9 -0
  48. package/dist/types/exec/bash-executor.d.ts +12 -0
  49. package/dist/types/export/ttsr.d.ts +19 -0
  50. package/dist/types/extensibility/extensions/types.d.ts +5 -1
  51. package/dist/types/extensibility/slash-commands.d.ts +1 -0
  52. package/dist/types/gjc-runtime/managed-owner-admission.d.ts +3 -0
  53. package/dist/types/gjc-runtime/ralplan-current-final.d.ts +54 -0
  54. package/dist/types/gjc-runtime/ralplan-runtime.d.ts +5 -0
  55. package/dist/types/gjc-runtime/session-state-lock.d.ts +2 -0
  56. package/dist/types/gjc-runtime/state-runtime.d.ts +0 -2
  57. package/dist/types/gjc-runtime/tmux-sessions.d.ts +24 -0
  58. package/dist/types/gjc-runtime/ultragoal-change-set.d.ts +6 -0
  59. package/dist/types/gjc-runtime/ultragoal-runtime.d.ts +1 -0
  60. package/dist/types/harness-control-plane/receipt-spool.d.ts +4 -0
  61. package/dist/types/hindsight/content.d.ts +5 -6
  62. package/dist/types/internal-urls/types.d.ts +2 -0
  63. package/dist/types/lsp/clients/swiftlint-client.d.ts +0 -4
  64. package/dist/types/main.d.ts +23 -18
  65. package/dist/types/migrate/action-planner.d.ts +10 -1
  66. package/dist/types/migrate/adapters/codex.d.ts +2 -1
  67. package/dist/types/migrate/adapters/index.d.ts +42 -1
  68. package/dist/types/migrate/executor.d.ts +3 -1
  69. package/dist/types/migrate/hook-module.d.ts +23 -0
  70. package/dist/types/migrate/report.d.ts +2 -1
  71. package/dist/types/migrate/types.d.ts +82 -3
  72. package/dist/types/modes/components/agent-dashboard.d.ts +1 -1
  73. package/dist/types/modes/components/model-selector.d.ts +43 -0
  74. package/dist/types/modes/components/settings-selector.d.ts +6 -0
  75. package/dist/types/modes/controllers/selector-controller.d.ts +2 -0
  76. package/dist/types/modes/prompt-suggestion-controller.d.ts +1 -1
  77. package/dist/types/modes/theme/theme.d.ts +1 -0
  78. package/dist/types/modes/utils/host-status.d.ts +15 -11
  79. package/dist/types/runtime-mcp/content-limits.d.ts +4 -0
  80. package/dist/types/runtime-mcp/manager.d.ts +7 -0
  81. package/dist/types/runtime-mcp/plugin-mcp-name-filter.d.ts +22 -0
  82. package/dist/types/runtime-mcp/project-host-values.d.ts +11 -5
  83. package/dist/types/runtime-mcp/tool-bridge.d.ts +4 -0
  84. package/dist/types/sdk/broker/broker-exit.d.ts +3 -3
  85. package/dist/types/sdk/broker/broker.d.ts +29 -2
  86. package/dist/types/sdk/broker/daemon-entry.d.ts +11 -1
  87. package/dist/types/sdk/broker/doctor-restart.d.ts +1 -1
  88. package/dist/types/sdk/broker/ensure.d.ts +141 -9
  89. package/dist/types/sdk/broker/hop.d.ts +45 -0
  90. package/dist/types/sdk/broker/lifecycle-ledger.d.ts +18 -10
  91. package/dist/types/sdk/broker/lifecycle.d.ts +22 -0
  92. package/dist/types/sdk/broker/lock-host-identity.d.ts +5 -0
  93. package/dist/types/sdk/broker/session-index.d.ts +6 -1
  94. package/dist/types/sdk/broker/transport.d.ts +2 -0
  95. package/dist/types/sdk/bus/chat-command-policy.d.ts +2 -1
  96. package/dist/types/sdk/bus/index.d.ts +44 -0
  97. package/dist/types/sdk/bus/reconciliation-store.d.ts +10 -0
  98. package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +9 -1
  99. package/dist/types/sdk/bus/telegram-daemon.d.ts +2 -0
  100. package/dist/types/sdk/bus/threaded-render.d.ts +2 -1
  101. package/dist/types/sdk/cli/session-cli.d.ts +0 -1
  102. package/dist/types/sdk/host/control/operations.d.ts +5 -1
  103. package/dist/types/sdk/host/events.d.ts +4 -0
  104. package/dist/types/sdk/host/host.d.ts +2 -1
  105. package/dist/types/sdk/host/prompt-image-upload.d.ts +43 -0
  106. package/dist/types/sdk/host/session-runtime.d.ts +40 -8
  107. package/dist/types/sdk/host/surface-policy.d.ts +2 -1
  108. package/dist/types/sdk/lifecycle/service.d.ts +12 -0
  109. package/dist/types/sdk/prompt-deadline-flush.d.ts +42 -4
  110. package/dist/types/sdk/prompt-deadline-manager.d.ts +2 -0
  111. package/dist/types/sdk/prompt-status.d.ts +11 -4
  112. package/dist/types/sdk/protocol/adapter-validation.d.ts +10 -4
  113. package/dist/types/sdk/reconciliation-extensions.d.ts +1 -1
  114. package/dist/types/sdk/session-list.d.ts +1 -1
  115. package/dist/types/session/agent-session.d.ts +107 -9
  116. package/dist/types/session/internal/managed-session-scope.d.ts +2 -2
  117. package/dist/types/session/internal/managed-session-storage.d.ts +1 -1
  118. package/dist/types/session/internal/native-publish-outcome.d.ts +1 -1
  119. package/dist/types/session/messages.d.ts +5 -1
  120. package/dist/types/session/session-manager.d.ts +29 -3
  121. package/dist/types/session/startup-auth-config.d.ts +24 -2
  122. package/dist/types/session/streaming-output.d.ts +11 -0
  123. package/dist/types/session/terminal-abort.d.ts +3 -1
  124. package/dist/types/session-import/service.d.ts +1 -1
  125. package/dist/types/skill-state/workflow-mutation-guard.d.ts +20 -4
  126. package/dist/types/slash-commands/helpers/mcp.d.ts +5 -0
  127. package/dist/types/slash-commands/helpers/provider-auth-status.d.ts +8 -0
  128. package/dist/types/ssh/ssh-executor.d.ts +8 -1
  129. package/dist/types/system-prompt.d.ts +3 -2
  130. package/dist/types/task/executor.d.ts +19 -2
  131. package/dist/types/task/role-body.d.ts +11 -0
  132. package/dist/types/tools/ast-edit-write-path.d.ts +10 -0
  133. package/dist/types/tools/atomic-file-write.d.ts +9 -7
  134. package/dist/types/tools/awaiting-input.d.ts +28 -0
  135. package/dist/types/tools/bash-allowed-prefixes.d.ts +17 -0
  136. package/dist/types/tools/bash-skill-urls.d.ts +4 -0
  137. package/dist/types/tools/bash.d.ts +7 -0
  138. package/dist/types/tools/descriptors.d.ts +15 -2
  139. package/dist/types/tools/fetch.d.ts +7 -1
  140. package/dist/types/tools/index.d.ts +2 -0
  141. package/dist/types/tools/irc.d.ts +5 -3
  142. package/dist/types/tools/python.d.ts +1 -1
  143. package/dist/types/tools/report-issue.d.ts +41 -0
  144. package/dist/types/tools/subagent.d.ts +23 -0
  145. package/dist/types/tools/tmux-self-injection-guard.d.ts +2 -0
  146. package/dist/types/tools/ultragoal-ask-guard.d.ts +1 -1
  147. package/dist/types/tools/write.d.ts +2 -0
  148. package/dist/types/utils/file-mentions.d.ts +5 -0
  149. package/dist/types/utils/image-limits.d.ts +7 -0
  150. package/dist/types/utils/image-loading.d.ts +0 -1
  151. package/dist/types/utils/open.d.ts +0 -1
  152. package/dist/types/utils/pasted-image-loading.d.ts +1 -5
  153. package/dist/types/utils/prompt-suggestion.d.ts +2 -2
  154. package/dist/types/utils/shell-snapshot.d.ts +2 -0
  155. package/dist/types/utils/title-generator.d.ts +13 -3
  156. package/dist/types/web/scrapers/types.d.ts +8 -1
  157. package/dist/types/web/search/providers/codex.d.ts +6 -7
  158. package/dist/types/web/search/providers/insane.d.ts +7 -1
  159. package/dist/types/web/search/providers/searxng.d.ts +5 -0
  160. package/package.json +10 -9
  161. package/scripts/acp-conformance-agent.ts +12 -2
  162. package/scripts/build-binary.ts +2 -1
  163. package/scripts/capture-subagent-compact-panel-showcase.ts +105 -0
  164. package/scripts/generate-docs-index.ts +8 -1
  165. package/scripts/generate-sdk-operation-inventory.ts +38 -4
  166. package/src/async/job-manager.ts +356 -56
  167. package/src/async/result-formatting.ts +40 -0
  168. package/src/autoresearch/git.ts +9 -2
  169. package/src/autoresearch/prompts/prompt-setup.md +1 -1
  170. package/src/capability/fs.ts +58 -22
  171. package/src/capability/index.ts +2 -2
  172. package/src/capability/rule.ts +11 -2
  173. package/src/cli/accounts-cli.ts +176 -8
  174. package/src/cli/append-system-prompt.ts +12 -0
  175. package/src/cli/args.ts +11 -7
  176. package/src/cli/auth-broker-cli.ts +21 -11
  177. package/src/cli/customize-doctor-precedence.ts +31 -0
  178. package/src/cli/customize-doctor.ts +49 -39
  179. package/src/cli/doctor/install-repairs.ts +35 -5
  180. package/src/cli/fast-help.ts +1 -3
  181. package/src/cli/install-activation.ts +47 -4
  182. package/src/cli/migrate-cli.ts +19 -6
  183. package/src/cli/public-command-errors.ts +6 -0
  184. package/src/cli/root-flags.ts +2 -4
  185. package/src/cli/stats-cli.ts +9 -5
  186. package/src/cli/update-cli.ts +471 -13
  187. package/src/cli-ordinary.ts +7 -2
  188. package/src/commands/accounts.ts +10 -5
  189. package/src/commands/harness.ts +25 -15
  190. package/src/commands/migrate.ts +3 -3
  191. package/src/commands/sdk.ts +277 -50
  192. package/src/commands/ultragoal.ts +16 -8
  193. package/src/commit/agentic/agent.ts +6 -6
  194. package/src/commit/analysis/conventional.ts +14 -5
  195. package/src/commit/changelog/index.ts +39 -1
  196. package/src/commit/map-reduce/index.ts +7 -7
  197. package/src/commit/message.ts +10 -3
  198. package/src/commit/pipeline.ts +12 -12
  199. package/src/config/autorouting-tier-map.ts +50 -1
  200. package/src/config/config-file.ts +106 -3
  201. package/src/config/config-hot-reload-trust.ts +148 -0
  202. package/src/config/config-hot-reload.ts +742 -0
  203. package/src/config/file-lock.ts +1615 -328
  204. package/src/config/keybindings.ts +154 -7
  205. package/src/config/model-bindings-applier.ts +85 -47
  206. package/src/config/model-discovery-manager.ts +10 -0
  207. package/src/config/model-profile-activation.ts +889 -148
  208. package/src/config/model-registry.ts +1706 -205
  209. package/src/config/model-resolver.ts +52 -22
  210. package/src/config/models-config-schema.ts +6 -0
  211. package/src/config/settings-schema.ts +73 -4
  212. package/src/config/settings.ts +460 -24
  213. package/src/coordinator-mcp/policy.ts +26 -1
  214. package/src/coordinator-mcp/server.ts +37 -2
  215. package/src/crash/sanitize.ts +7 -1
  216. package/src/customization/import.ts +279 -8
  217. package/src/customization/inventory.ts +24 -8
  218. package/src/customization/types.ts +1 -0
  219. package/src/dap/client.ts +3 -2
  220. package/src/dap/config.ts +31 -11
  221. package/src/dap/defaults.json +1 -1
  222. package/src/dap/session.ts +161 -36
  223. package/src/debug/crash-diagnostics.ts +89 -6
  224. package/src/debug/report-bundle.ts +90 -2
  225. package/src/debug/system-info.ts +8 -3
  226. package/src/defaults/gjc/extensions/grok-cli-vendor/src/shared/base-url.ts +21 -7
  227. package/src/discovery/agents-md.ts +1 -1
  228. package/src/discovery/builtin.ts +4 -3
  229. package/src/discovery/helpers.ts +25 -16
  230. package/src/discovery/mcp-compat.ts +120 -17
  231. package/src/edit/apply-patch/index.ts +12 -1
  232. package/src/edit/index.ts +204 -22
  233. package/src/edit/modes/patch.ts +214 -8
  234. package/src/edit/modes/replace.ts +136 -0
  235. package/src/eval/js/context-manager.ts +29 -3
  236. package/src/eval/js/worker-entry.ts +51 -18
  237. package/src/eval/py/executor.ts +14 -4
  238. package/src/eval/py/runner.py +144 -5
  239. package/src/eval/py/runtime.ts +44 -4
  240. package/src/exec/bash-executor.ts +81 -4
  241. package/src/exec/bash-shell-guardian.ts +4 -1
  242. package/src/exec/bash-shell-supervisor.ts +8 -4
  243. package/src/exec/isolated-shell.ts +5 -1
  244. package/src/exec/non-interactive-env.ts +0 -1
  245. package/src/export/html/index.ts +86 -6
  246. package/src/export/ttsr.ts +176 -1
  247. package/src/extensibility/custom-tools/wrapper.ts +3 -1
  248. package/src/extensibility/extensions/loader.ts +10 -1
  249. package/src/extensibility/extensions/ouroboros-ooo-bridge.ts +63 -1
  250. package/src/extensibility/extensions/types.ts +5 -1
  251. package/src/extensibility/hooks/loader.ts +10 -2
  252. package/src/extensibility/plugins/marketplace/fetcher.ts +2 -2
  253. package/src/extensibility/plugins/marketplace/manager.ts +36 -10
  254. package/src/extensibility/slash-commands.ts +5 -0
  255. package/src/gjc-runtime/gc-runtime.ts +37 -7
  256. package/src/gjc-runtime/launch-tmux.ts +30 -15
  257. package/src/gjc-runtime/launch-worktree.test.ts +148 -0
  258. package/src/gjc-runtime/launch-worktree.ts +101 -14
  259. package/src/gjc-runtime/managed-owner-admission.ts +46 -2
  260. package/src/gjc-runtime/ralplan-current-final.ts +294 -0
  261. package/src/gjc-runtime/ralplan-runtime.ts +95 -1
  262. package/src/gjc-runtime/session-resolution.ts +38 -6
  263. package/src/gjc-runtime/session-state-lock.ts +59 -14
  264. package/src/gjc-runtime/state-runtime.ts +23 -19
  265. package/src/gjc-runtime/state-writer.ts +109 -5
  266. package/src/gjc-runtime/tmux-sessions.ts +93 -13
  267. package/src/gjc-runtime/ultragoal-change-set.ts +90 -11
  268. package/src/gjc-runtime/ultragoal-guard.ts +9 -1
  269. package/src/gjc-runtime/ultragoal-runtime.ts +15 -5
  270. package/src/harness-control-plane/finalize.ts +11 -0
  271. package/src/harness-control-plane/receipt-spool.ts +105 -28
  272. package/src/harness-control-plane/storage.ts +124 -6
  273. package/src/hindsight/content.ts +116 -16
  274. package/src/hindsight/mental-models.ts +22 -10
  275. package/src/hindsight/state.ts +7 -4
  276. package/src/hooks/native-skill-hook.ts +17 -12
  277. package/src/internal-urls/artifact-protocol.ts +3 -1
  278. package/src/internal-urls/docs-index.generated.ts +23 -22
  279. package/src/internal-urls/local-protocol.ts +167 -8
  280. package/src/internal-urls/types.ts +2 -0
  281. package/src/lsp/client.ts +2 -1
  282. package/src/lsp/clients/biome-client.ts +2 -0
  283. package/src/lsp/clients/swiftlint-client.ts +2 -0
  284. package/src/lsp/index.ts +29 -0
  285. package/src/lsp/workspace-path.ts +23 -0
  286. package/src/main.ts +330 -92
  287. package/src/memories/index.ts +25 -2
  288. package/src/migrate/action-planner.ts +574 -2
  289. package/src/migrate/adapters/claude-code.ts +162 -5
  290. package/src/migrate/adapters/codex.ts +77 -7
  291. package/src/migrate/adapters/index.ts +258 -5
  292. package/src/migrate/adapters/opencode.ts +10 -1
  293. package/src/migrate/executor.ts +222 -7
  294. package/src/migrate/hook-module.ts +193 -0
  295. package/src/migrate/report.ts +63 -2
  296. package/src/migrate/types.ts +84 -4
  297. package/src/modes/DESIGN.md +51 -0
  298. package/src/modes/acp/acp-agent.ts +10 -1
  299. package/src/modes/acp/permission-mode.ts +18 -1
  300. package/src/modes/components/agent-dashboard.ts +20 -4
  301. package/src/modes/components/assistant-message.ts +55 -1
  302. package/src/modes/components/customization/customization-dashboard.ts +7 -0
  303. package/src/modes/components/customization/import-wizard.ts +29 -3
  304. package/src/modes/components/model-selector.ts +157 -103
  305. package/src/modes/components/settings-selector.ts +103 -37
  306. package/src/modes/components/welcome.ts +3 -1
  307. package/src/modes/controllers/command-controller.ts +300 -9
  308. package/src/modes/controllers/event-controller.ts +1 -1
  309. package/src/modes/controllers/extension-ui-controller.ts +31 -1
  310. package/src/modes/controllers/goal-mode-controller.ts +79 -10
  311. package/src/modes/controllers/input-controller.ts +2 -0
  312. package/src/modes/controllers/plan-mode-controller.ts +66 -11
  313. package/src/modes/controllers/runtime-mcp-command-controller.ts +7 -6
  314. package/src/modes/controllers/selector-controller.ts +76 -7
  315. package/src/modes/interactive-mode.ts +123 -4
  316. package/src/modes/prompt-suggestion-controller.ts +1 -1
  317. package/src/modes/runtime-init.ts +5 -1
  318. package/src/modes/theme/theme.ts +15 -0
  319. package/src/modes/utils/host-status.ts +21 -10
  320. package/src/prompts/agent-fragments/browser-aside.md +2 -2
  321. package/src/prompts/system/irc-incoming.md +3 -1
  322. package/src/prompts/tools/debug.md +1 -1
  323. package/src/prompts/tools/irc.md +1 -1
  324. package/src/prompts/tools/read.md +1 -1
  325. package/src/prompts/tools/report-issue.md +13 -0
  326. package/src/prompts/tools/task.md +1 -1
  327. package/src/runtime-credential-selector.ts +2 -2
  328. package/src/runtime-mcp/content-limits.ts +7 -0
  329. package/src/runtime-mcp/manager-pool.test.ts +5 -4
  330. package/src/runtime-mcp/manager.ts +40 -3
  331. package/src/runtime-mcp/oauth-flow.ts +32 -6
  332. package/src/runtime-mcp/plugin-mcp-name-filter.ts +62 -0
  333. package/src/runtime-mcp/project-host-values.ts +12 -8
  334. package/src/runtime-mcp/render.ts +16 -1
  335. package/src/runtime-mcp/tool-bridge.ts +194 -21
  336. package/src/runtime-mcp/transports/stdio.ts +2 -1
  337. package/src/sdk/broker/broker-exit.ts +10 -5
  338. package/src/sdk/broker/broker.ts +484 -85
  339. package/src/sdk/broker/daemon-entry.ts +338 -116
  340. package/src/sdk/broker/doctor-restart.ts +2 -1
  341. package/src/sdk/broker/ensure.ts +1214 -268
  342. package/src/sdk/broker/hop.ts +286 -0
  343. package/src/sdk/broker/lifecycle-ledger.ts +38 -11
  344. package/src/sdk/broker/lifecycle.ts +102 -6
  345. package/src/sdk/broker/lock-host-identity.ts +29 -0
  346. package/src/sdk/broker/session-index.ts +91 -16
  347. package/src/sdk/broker/transport.ts +17 -1
  348. package/src/sdk/bus/chat-command-policy.ts +16 -3
  349. package/src/sdk/bus/chat-daemon-control.ts +2 -2
  350. package/src/sdk/bus/index.ts +460 -35
  351. package/src/sdk/bus/reconciliation-store.ts +201 -8
  352. package/src/sdk/bus/session-control.ts +2 -0
  353. package/src/sdk/bus/slack-daemon.ts +105 -9
  354. package/src/sdk/bus/telegram-daemon-contract.ts +9 -1
  355. package/src/sdk/bus/telegram-daemon.ts +10 -2
  356. package/src/sdk/bus/threaded-render.ts +20 -1
  357. package/src/sdk/cli/session-cli.ts +23 -6
  358. package/src/sdk/host/control/dispatch.ts +13 -1
  359. package/src/sdk/host/control/operations.ts +10 -1
  360. package/src/sdk/host/events.ts +67 -4
  361. package/src/sdk/host/host.ts +8 -2
  362. package/src/sdk/host/prompt-image-upload.ts +438 -0
  363. package/src/sdk/host/sdk-surface-parity.test.ts +15 -0
  364. package/src/sdk/host/session-runtime.test.ts +1737 -129
  365. package/src/sdk/host/session-runtime.ts +684 -83
  366. package/src/sdk/host/surface-policy.ts +4 -0
  367. package/src/sdk/host/websocket-transport.lifecycle.test.ts +90 -2
  368. package/src/sdk/host/websocket-transport.ts +19 -7
  369. package/src/sdk/lifecycle/service.ts +15 -1
  370. package/src/sdk/prompt-deadline-flush.ts +78 -5
  371. package/src/sdk/prompt-deadline-manager.ts +68 -14
  372. package/src/sdk/prompt-status.ts +6 -4
  373. package/src/sdk/protocol/adapter-validation.ts +81 -12
  374. package/src/sdk/protocol/operation-inventory.generated.json +261 -2
  375. package/src/sdk/protocol/operation-registry.ts +33 -3
  376. package/src/sdk/reconciliation-extensions.ts +1 -0
  377. package/src/sdk/session-list.ts +1 -0
  378. package/src/sdk/session.ts +237 -97
  379. package/src/session/agent-session.ts +2726 -479
  380. package/src/session/history-storage.ts +182 -12
  381. package/src/session/internal/managed-session-scope.ts +173 -57
  382. package/src/session/internal/managed-session-storage.ts +85 -12
  383. package/src/session/internal/native-publish-outcome.ts +5 -1
  384. package/src/session/messages.ts +47 -6
  385. package/src/session/session-manager.ts +326 -19
  386. package/src/session/startup-auth-config.ts +116 -8
  387. package/src/session/streaming-output.ts +262 -4
  388. package/src/session/terminal-abort.ts +14 -2
  389. package/src/session-import/redact.ts +53 -2
  390. package/src/session-import/service.ts +1 -0
  391. package/src/skill-state/workflow-mutation-guard.ts +2145 -206
  392. package/src/slash-commands/builtin-registry.ts +21 -6
  393. package/src/slash-commands/helpers/credential-switch.ts +10 -5
  394. package/src/slash-commands/helpers/mcp.ts +11 -3
  395. package/src/slash-commands/helpers/provider-auth-status.ts +456 -0
  396. package/src/ssh/ssh-executor.ts +9 -2
  397. package/src/stt/recorder.ts +26 -9
  398. package/src/system-prompt.ts +61 -16
  399. package/src/task/executor.ts +115 -20
  400. package/src/task/index.ts +389 -175
  401. package/src/task/role-body.ts +84 -0
  402. package/src/task/token-log-mode.test.ts +162 -0
  403. package/src/task/token-log.ts +91 -2
  404. package/src/tools/archive-reader.ts +650 -37
  405. package/src/tools/ask.ts +1 -0
  406. package/src/tools/ast-edit-write-path.ts +64 -0
  407. package/src/tools/ast-edit.ts +18 -1
  408. package/src/tools/ast-grep.ts +7 -2
  409. package/src/tools/atomic-file-write.ts +46 -15
  410. package/src/tools/auto-generated-guard.ts +15 -3
  411. package/src/tools/awaiting-input.ts +114 -0
  412. package/src/tools/bash-allowed-prefixes.ts +214 -6
  413. package/src/tools/bash-interactive.ts +14 -2
  414. package/src/tools/bash-skill-urls.ts +58 -5
  415. package/src/tools/bash.ts +113 -26
  416. package/src/tools/browser/tab-worker.ts +39 -13
  417. package/src/tools/browser.ts +17 -7
  418. package/src/tools/cron.ts +10 -1
  419. package/src/tools/debug.ts +16 -8
  420. package/src/tools/descriptors.test.ts +44 -0
  421. package/src/tools/descriptors.ts +50 -6
  422. package/src/tools/eval.ts +15 -0
  423. package/src/tools/fetch.ts +93 -4
  424. package/src/tools/gh.ts +27 -12
  425. package/src/tools/image-gen.ts +20 -6
  426. package/src/tools/index.ts +2 -0
  427. package/src/tools/irc.ts +5 -3
  428. package/src/tools/monitor.ts +9 -1
  429. package/src/tools/output-meta.ts +74 -5
  430. package/src/tools/python.ts +1 -1
  431. package/src/tools/read.ts +26 -37
  432. package/src/tools/recipe/runner.ts +23 -12
  433. package/src/tools/render-utils.ts +2 -2
  434. package/src/tools/report-issue.ts +184 -0
  435. package/src/tools/search.ts +3 -2
  436. package/src/tools/ssh.ts +274 -8
  437. package/src/tools/subagent-render.ts +114 -12
  438. package/src/tools/subagent.ts +118 -5
  439. package/src/tools/tmux-self-injection-guard.ts +3301 -122
  440. package/src/tools/todo-write.ts +41 -3
  441. package/src/tools/tool-catalog.generated.ts +32 -4
  442. package/src/tools/ultragoal-ask-guard.ts +13 -1
  443. package/src/tools/write.ts +42 -3
  444. package/src/tui/tree-list.ts +15 -1
  445. package/src/utils/commit-message-generator.ts +12 -4
  446. package/src/utils/external-editor.ts +21 -7
  447. package/src/utils/file-mentions.ts +75 -7
  448. package/src/utils/git.ts +38 -7
  449. package/src/utils/image-limits.ts +8 -0
  450. package/src/utils/image-loading.ts +1 -1
  451. package/src/utils/open.ts +73 -4
  452. package/src/utils/pasted-image-loading.ts +9 -8
  453. package/src/utils/prompt-suggestion.ts +5 -4
  454. package/src/utils/shell-snapshot.ts +9 -1
  455. package/src/utils/title-generator.ts +72 -22
  456. package/src/web/scrapers/index.ts +3 -1
  457. package/src/web/scrapers/types.ts +8 -0
  458. package/src/web/scrapers/youtube.ts +3 -2
  459. package/src/web/search/index.ts +2 -1
  460. package/src/web/search/providers/codex.ts +29 -32
  461. package/src/web/search/providers/insane.ts +91 -28
  462. package/src/web/search/providers/searxng.ts +62 -10
@@ -1,24 +1,59 @@
1
+ import { MAX_STAGED_PROMPT_IMAGES } from "../../utils/image-limits";
2
+
1
3
  const RELOAD_COMPONENTS = new Set(["config", "models", "skills", "extensions", "tools"]);
2
- const SERVICE_TIERS = new Set(["none", "auto", "default", "flex", "scale", "priority", "openai-only", "claude-only"]);
4
+ const SERVICE_TIERS = new Set([
5
+ "none",
6
+ "auto",
7
+ "default",
8
+ "flex",
9
+ "scale",
10
+ "priority",
11
+ "ultrafast",
12
+ "openai-only",
13
+ "claude-only",
14
+ ]);
3
15
 
4
16
  type Input = Record<string, unknown>;
5
17
 
6
18
  type SecretInputError = { code: "secret_field_forbidden"; message: string };
7
19
  const SECRET_FIELD = /(?:secret|token|password|credential|authorization|api[_-]?key)/i;
8
20
 
21
+ type UltrafastRestrictionError = { code: "ultrafast_tier_forbidden"; message: string };
22
+
23
+ function containsUltrafastServiceTier(value: unknown): boolean {
24
+ if (Array.isArray(value)) return value.some(containsUltrafastServiceTier);
25
+ if (!value || typeof value !== "object") return false;
26
+ return Object.entries(value as Record<string, unknown>).some(
27
+ ([key, nested]) =>
28
+ ((key === "serviceTier" || key.endsWith(".serviceTier")) && nested === "ultrafast") ||
29
+ containsUltrafastServiceTier(nested),
30
+ );
31
+ }
32
+
9
33
  function containsSecretField(value: unknown): boolean {
10
34
  if (Array.isArray(value)) return value.some(containsSecretField);
11
35
  if (!value || typeof value !== "object") return false;
12
36
  return Object.entries(value).some(([key, nested]) => SECRET_FIELD.test(key) || containsSecretField(nested));
13
37
  }
14
38
 
15
- /** Rejects secret-bearing config patches from model-facing adapter inputs. */
16
- export function validateAdapterSecretFields(operation: string, input: Input): SecretInputError | undefined {
17
- if (operation === "config.patch" && containsSecretField(input)) {
18
- return {
19
- code: "secret_field_forbidden",
20
- message: "config.patch secret fields are not available through this adapter.",
21
- };
39
+ /** Rejects secret-bearing and ultrafast-tier config patches from model-facing adapter inputs. */
40
+ export function validateAdapterSecretFields(
41
+ operation: string,
42
+ input: Input,
43
+ ): SecretInputError | UltrafastRestrictionError | undefined {
44
+ if (operation === "config.patch") {
45
+ if (containsSecretField(input)) {
46
+ return {
47
+ code: "secret_field_forbidden",
48
+ message: "config.patch secret fields are not available through this adapter.",
49
+ };
50
+ }
51
+ if (containsUltrafastServiceTier(input)) {
52
+ return {
53
+ code: "ultrafast_tier_forbidden",
54
+ message: "config.patch serviceTier ultrafast is restricted to trusted local sources.",
55
+ };
56
+ }
22
57
  }
23
58
  return undefined;
24
59
  }
@@ -40,10 +75,35 @@ function hasUsablePromptImage(value: unknown): boolean {
40
75
  );
41
76
  }
42
77
 
78
+ function hasValidStagedPromptImages(value: unknown): boolean {
79
+ if (!Array.isArray(value) || value.length === 0 || value.length > MAX_STAGED_PROMPT_IMAGES) return false;
80
+ const ids = new Set<string>();
81
+ return value.every(descriptor => {
82
+ if (!descriptor || typeof descriptor !== "object" || Array.isArray(descriptor)) return false;
83
+ const image = descriptor as Record<string, unknown>;
84
+ if (Object.keys(image).some(key => key !== "id") || typeof image.id !== "string" || image.id.trim().length === 0)
85
+ return false;
86
+ if (ids.has(image.id)) return false;
87
+ ids.add(image.id);
88
+ return true;
89
+ });
90
+ }
91
+
43
92
  /** Rejects instruction-bearing controls before correlation or provider work. */
44
93
  export function validateRequiredPromptText(operation: string, input: Input): AdapterValidationError | undefined {
94
+ if (operation === "turn.prompt" && input.stagedImages !== undefined) {
95
+ if (input.images !== undefined)
96
+ return { code: "invalid_input", message: "Direct and staged images cannot be mixed." };
97
+ if (!hasValidStagedPromptImages(input.stagedImages))
98
+ return {
99
+ code: "invalid_input",
100
+ message: `stagedImages must contain 1–${MAX_STAGED_PROMPT_IMAGES} valid image IDs.`,
101
+ };
102
+ }
45
103
  const hasUsableImage =
46
- operation === "turn.prompt" && Array.isArray(input.images) && input.images.some(hasUsablePromptImage);
104
+ operation === "turn.prompt" &&
105
+ ((Array.isArray(input.images) && input.images.some(hasUsablePromptImage)) ||
106
+ hasValidStagedPromptImages(input.stagedImages));
47
107
  if (
48
108
  PROMPT_OPERATIONS.has(operation) &&
49
109
  (typeof input.text !== "string" || (input.text.trim().length === 0 && !hasUsableImage))
@@ -53,8 +113,12 @@ export function validateRequiredPromptText(operation: string, input: Input): Ada
53
113
  return undefined;
54
114
  }
55
115
 
56
- /** Validates controls that adapters must reject before forwarding them to a host. */
57
- export function validateAdapterControl(operation: string, input: Input): AdapterValidationError | undefined {
116
+ /** Validates controls before forwarding them; adapters reject ultrafast unless explicitly trusted. */
117
+ export function validateAdapterControl(
118
+ operation: string,
119
+ input: Input,
120
+ options: { allowUltrafastTier?: boolean } = {},
121
+ ): AdapterValidationError | undefined {
58
122
  const promptError = validateRequiredPromptText(operation, input);
59
123
  if (promptError) return promptError;
60
124
  if (operation === "runtime.reload") {
@@ -68,7 +132,12 @@ export function validateAdapterControl(operation: string, input: Input): Adapter
68
132
  };
69
133
  }
70
134
  }
71
- if (operation === "service_tier.set" && (typeof input.tier !== "string" || !SERVICE_TIERS.has(input.tier))) {
135
+ if (
136
+ operation === "service_tier.set" &&
137
+ (typeof input.tier !== "string" ||
138
+ !SERVICE_TIERS.has(input.tier) ||
139
+ (input.tier === "ultrafast" && options.allowUltrafastTier !== true))
140
+ ) {
72
141
  return { code: "invalid_input", message: "service_tier.set tier is invalid." };
73
142
  }
74
143
  return undefined;
@@ -953,6 +953,78 @@
953
953
  "packages/coding-agent/test/sdk-operation-inventory.test.ts"
954
954
  ]
955
955
  },
956
+ {
957
+ "sourceId": "registry:C54",
958
+ "sourceFile": "packages/coding-agent/src/sdk/protocol/operation-registry.ts",
959
+ "sourceKind": "registry",
960
+ "decision": "include",
961
+ "sdkId": "turn.image.begin",
962
+ "adapterMappings": {
963
+ "telegram": "prohibited",
964
+ "discord": "prohibited",
965
+ "slack": "prohibited",
966
+ "mcp": "prohibited",
967
+ "acp": "prohibited",
968
+ "daemonCli": "machine_only"
969
+ },
970
+ "testIds": [
971
+ "packages/coding-agent/test/sdk-operation-inventory.test.ts"
972
+ ]
973
+ },
974
+ {
975
+ "sourceId": "registry:C55",
976
+ "sourceFile": "packages/coding-agent/src/sdk/protocol/operation-registry.ts",
977
+ "sourceKind": "registry",
978
+ "decision": "include",
979
+ "sdkId": "turn.image.append",
980
+ "adapterMappings": {
981
+ "telegram": "prohibited",
982
+ "discord": "prohibited",
983
+ "slack": "prohibited",
984
+ "mcp": "prohibited",
985
+ "acp": "prohibited",
986
+ "daemonCli": "machine_only"
987
+ },
988
+ "testIds": [
989
+ "packages/coding-agent/test/sdk-operation-inventory.test.ts"
990
+ ]
991
+ },
992
+ {
993
+ "sourceId": "registry:C56",
994
+ "sourceFile": "packages/coding-agent/src/sdk/protocol/operation-registry.ts",
995
+ "sourceKind": "registry",
996
+ "decision": "include",
997
+ "sdkId": "turn.image.finish",
998
+ "adapterMappings": {
999
+ "telegram": "prohibited",
1000
+ "discord": "prohibited",
1001
+ "slack": "prohibited",
1002
+ "mcp": "prohibited",
1003
+ "acp": "prohibited",
1004
+ "daemonCli": "machine_only"
1005
+ },
1006
+ "testIds": [
1007
+ "packages/coding-agent/test/sdk-operation-inventory.test.ts"
1008
+ ]
1009
+ },
1010
+ {
1011
+ "sourceId": "registry:C57",
1012
+ "sourceFile": "packages/coding-agent/src/sdk/protocol/operation-registry.ts",
1013
+ "sourceKind": "registry",
1014
+ "decision": "include",
1015
+ "sdkId": "turn.image.discard",
1016
+ "adapterMappings": {
1017
+ "telegram": "prohibited",
1018
+ "discord": "prohibited",
1019
+ "slack": "prohibited",
1020
+ "mcp": "prohibited",
1021
+ "acp": "prohibited",
1022
+ "daemonCli": "machine_only"
1023
+ },
1024
+ "testIds": [
1025
+ "packages/coding-agent/test/sdk-operation-inventory.test.ts"
1026
+ ]
1027
+ },
956
1028
  {
957
1029
  "sourceId": "registry:G01",
958
1030
  "sourceFile": "packages/coding-agent/src/sdk/protocol/operation-registry.ts",
@@ -2642,6 +2714,17 @@
2642
2714
  "testIds": "not_applicable"
2643
2715
  }
2644
2716
  },
2717
+ {
2718
+ "sourceId": "agent_session:refreshEffectiveActiveWorkflowSkillState",
2719
+ "sourceFile": "packages/coding-agent/src/session/agent-session.ts",
2720
+ "sourceKind": "agent_session",
2721
+ "decision": "exclude",
2722
+ "rationale": "internal durable workflow identity refresh before session safety checks, not an independent public SDK operation",
2723
+ "exclusionMetadata": {
2724
+ "adapterMappings": "not_applicable",
2725
+ "testIds": "not_applicable"
2726
+ }
2727
+ },
2645
2728
  {
2646
2729
  "sourceId": "agent_session:replaceOwnedMcpManager",
2647
2730
  "sourceFile": "packages/coding-agent/src/session/agent-session.ts",
@@ -2891,6 +2974,17 @@
2891
2974
  "testIds": "not_applicable"
2892
2975
  }
2893
2976
  },
2977
+ {
2978
+ "sourceId": "agent_session:notifySessionIdentityChanged",
2979
+ "sourceFile": "packages/coding-agent/src/session/agent-session.ts",
2980
+ "sourceKind": "agent_session",
2981
+ "decision": "exclude",
2982
+ "rationale": "internal session-identity listener fan-out for in-process session surfaces; not a user-facing SDK control seam",
2983
+ "exclusionMetadata": {
2984
+ "adapterMappings": "not_applicable",
2985
+ "testIds": "not_applicable"
2986
+ }
2987
+ },
2894
2988
  {
2895
2989
  "sourceId": "agent_session:emitNotice",
2896
2990
  "sourceFile": "packages/coding-agent/src/session/agent-session.ts",
@@ -2924,6 +3018,17 @@
2924
3018
  "testIds": "not_applicable"
2925
3019
  }
2926
3020
  },
3021
+ {
3022
+ "sourceId": "agent_session:subscribeSessionIdentityChanges",
3023
+ "sourceFile": "packages/coding-agent/src/session/agent-session.ts",
3024
+ "sourceKind": "agent_session",
3025
+ "decision": "exclude",
3026
+ "rationale": "internal session-identity subscription used by in-process adapters to follow session replacement; not a user-facing SDK control seam",
3027
+ "exclusionMetadata": {
3028
+ "adapterMappings": "not_applicable",
3029
+ "testIds": "not_applicable"
3030
+ }
3031
+ },
2927
3032
  {
2928
3033
  "sourceId": "agent_session:dispose",
2929
3034
  "sourceFile": "packages/coding-agent/src/session/agent-session.ts",
@@ -3111,6 +3216,17 @@
3111
3216
  "testIds": "not_applicable"
3112
3217
  }
3113
3218
  },
3219
+ {
3220
+ "sourceId": "agent_session:waitForAgentEndHandlingForTests",
3221
+ "sourceFile": "packages/coding-agent/src/session/agent-session.ts",
3222
+ "sourceKind": "agent_session",
3223
+ "decision": "exclude",
3224
+ "rationale": "test-only SDK terminal-event handler completion barrier, not a user-facing SDK control seam",
3225
+ "exclusionMetadata": {
3226
+ "adapterMappings": "not_applicable",
3227
+ "testIds": "not_applicable"
3228
+ }
3229
+ },
3114
3230
  {
3115
3231
  "sourceId": "agent_session:drainAsyncJobDeliveriesForAcp",
3116
3232
  "sourceFile": "packages/coding-agent/src/session/agent-session.ts",
@@ -3333,6 +3449,39 @@
3333
3449
  "testIds": "not_applicable"
3334
3450
  }
3335
3451
  },
3452
+ {
3453
+ "sourceId": "agent_session:hasCommittedMCPToolSelectionAuthority",
3454
+ "sourceFile": "packages/coding-agent/src/session/agent-session.ts",
3455
+ "sourceKind": "agent_session",
3456
+ "decision": "exclude",
3457
+ "rationale": "internal committed MCP-selection authority predicate used by catalog reconciliation; not a user-facing SDK control seam",
3458
+ "exclusionMetadata": {
3459
+ "adapterMappings": "not_applicable",
3460
+ "testIds": "not_applicable"
3461
+ }
3462
+ },
3463
+ {
3464
+ "sourceId": "agent_session:hasMCPToolSelectionAuthority",
3465
+ "sourceFile": "packages/coding-agent/src/session/agent-session.ts",
3466
+ "sourceKind": "agent_session",
3467
+ "decision": "exclude",
3468
+ "rationale": "internal MCP-selection authority predicate used by catalog and mode-transition reconciliation; not a user-facing SDK control seam",
3469
+ "exclusionMetadata": {
3470
+ "adapterMappings": "not_applicable",
3471
+ "testIds": "not_applicable"
3472
+ }
3473
+ },
3474
+ {
3475
+ "sourceId": "agent_session:getActiveMCPToolNames",
3476
+ "sourceFile": "packages/coding-agent/src/session/agent-session.ts",
3477
+ "sourceKind": "agent_session",
3478
+ "decision": "exclude",
3479
+ "rationale": "internal MCP bridge subset used by mode controllers to preserve live selections across tool swaps; not a user-facing SDK control seam",
3480
+ "exclusionMetadata": {
3481
+ "adapterMappings": "not_applicable",
3482
+ "testIds": "not_applicable"
3483
+ }
3484
+ },
3336
3485
  {
3337
3486
  "sourceId": "agent_session:getSelectedMCPToolNames",
3338
3487
  "sourceFile": "packages/coding-agent/src/session/agent-session.ts",
@@ -4502,6 +4651,17 @@
4502
4651
  "testIds": "not_applicable"
4503
4652
  }
4504
4653
  },
4654
+ {
4655
+ "sourceId": "agent_session:markProfileRoleOverrideManual",
4656
+ "sourceFile": "packages/coding-agent/src/session/agent-session.ts",
4657
+ "sourceKind": "agent_session",
4658
+ "decision": "exclude",
4659
+ "rationale": "internal profile role-layer ownership tracking after explicit user assignments; not a user-facing SDK control seam",
4660
+ "exclusionMetadata": {
4661
+ "adapterMappings": "not_applicable",
4662
+ "testIds": "not_applicable"
4663
+ }
4664
+ },
4505
4665
  {
4506
4666
  "sourceId": "agent_session:getActiveModelProfile",
4507
4667
  "sourceFile": "packages/coding-agent/src/session/agent-session.ts",
@@ -4513,12 +4673,23 @@
4513
4673
  "testIds": "not_applicable"
4514
4674
  }
4515
4675
  },
4676
+ {
4677
+ "sourceId": "agent_session:getActivatedModelProfile",
4678
+ "sourceFile": "packages/coding-agent/src/session/agent-session.ts",
4679
+ "sourceKind": "agent_session",
4680
+ "decision": "exclude",
4681
+ "rationale": "internal model-profile activation provenance used to gate role-only materialization, not a user-facing SDK control seam",
4682
+ "exclusionMetadata": {
4683
+ "adapterMappings": "not_applicable",
4684
+ "testIds": "not_applicable"
4685
+ }
4686
+ },
4516
4687
  {
4517
4688
  "sourceId": "agent_session:setUnavailableModelProfile",
4518
4689
  "sourceFile": "packages/coding-agent/src/session/agent-session.ts",
4519
4690
  "sourceKind": "agent_session",
4520
4691
  "decision": "exclude",
4521
- "rationale": "internal session-scoped unavailable profile tracking; mutated by the session lifecycle on model-load failure, not a public SDK control seam",
4692
+ "rationale": "internal session-scoped startup-profile recovery marker, not a user-facing SDK control seam",
4522
4693
  "exclusionMetadata": {
4523
4694
  "adapterMappings": "not_applicable",
4524
4695
  "testIds": "not_applicable"
@@ -4529,7 +4700,7 @@
4529
4700
  "sourceFile": "packages/coding-agent/src/session/agent-session.ts",
4530
4701
  "sourceKind": "agent_session",
4531
4702
  "decision": "exclude",
4532
- "rationale": "internal session-scoped unavailable profile query for UI status rendering; not a public SDK operation",
4703
+ "rationale": "internal session-scoped startup-profile recovery status for UI rendering, not a public SDK operation",
4533
4704
  "exclusionMetadata": {
4534
4705
  "adapterMappings": "not_applicable",
4535
4706
  "testIds": "not_applicable"
@@ -4568,6 +4739,39 @@
4568
4739
  "testIds": "not_applicable"
4569
4740
  }
4570
4741
  },
4742
+ {
4743
+ "sourceId": "agent_session:getConfigurationPaths",
4744
+ "sourceFile": "packages/coding-agent/src/session/agent-session.ts",
4745
+ "sourceKind": "agent_session",
4746
+ "decision": "exclude",
4747
+ "rationale": "internal config hot-reload path identity projection, not a user-facing SDK control seam",
4748
+ "exclusionMetadata": {
4749
+ "adapterMappings": "not_applicable",
4750
+ "testIds": "not_applicable"
4751
+ }
4752
+ },
4753
+ {
4754
+ "sourceId": "agent_session:validateConfiguration",
4755
+ "sourceFile": "packages/coding-agent/src/session/agent-session.ts",
4756
+ "sourceKind": "agent_session",
4757
+ "decision": "exclude",
4758
+ "rationale": "internal read-only config hot-reload preflight, not an independent SDK operation",
4759
+ "exclusionMetadata": {
4760
+ "adapterMappings": "not_applicable",
4761
+ "testIds": "not_applicable"
4762
+ }
4763
+ },
4764
+ {
4765
+ "sourceId": "agent_session:reloadConfiguration",
4766
+ "sourceFile": "packages/coding-agent/src/session/agent-session.ts",
4767
+ "sourceKind": "agent_session",
4768
+ "decision": "exclude",
4769
+ "rationale": "internal transactional config hot-reload publication, not a user-facing SDK control seam",
4770
+ "exclusionMetadata": {
4771
+ "adapterMappings": "not_applicable",
4772
+ "testIds": "not_applicable"
4773
+ }
4774
+ },
4571
4775
  {
4572
4776
  "sourceId": "agent_session:syncEagerDelegation",
4573
4777
  "sourceFile": "packages/coding-agent/src/session/agent-session.ts",
@@ -4590,6 +4794,28 @@
4590
4794
  "testIds": "not_applicable"
4591
4795
  }
4592
4796
  },
4797
+ {
4798
+ "sourceId": "agent_session:getProfileInstalledOverrideState",
4799
+ "sourceFile": "packages/coding-agent/src/session/agent-session.ts",
4800
+ "sourceKind": "agent_session",
4801
+ "decision": "exclude",
4802
+ "rationale": "internal model-profile activation rollback snapshot, not a user-facing SDK control seam",
4803
+ "exclusionMetadata": {
4804
+ "adapterMappings": "not_applicable",
4805
+ "testIds": "not_applicable"
4806
+ }
4807
+ },
4808
+ {
4809
+ "sourceId": "agent_session:restoreProfileInstalledOverrideState",
4810
+ "sourceFile": "packages/coding-agent/src/session/agent-session.ts",
4811
+ "sourceKind": "agent_session",
4812
+ "decision": "exclude",
4813
+ "rationale": "internal model-profile activation rollback restoration, not a user-facing SDK control seam",
4814
+ "exclusionMetadata": {
4815
+ "adapterMappings": "not_applicable",
4816
+ "testIds": "not_applicable"
4817
+ }
4818
+ },
4593
4819
  {
4594
4820
  "sourceId": "agent_session:clearProfileInstalledOverrides",
4595
4821
  "sourceFile": "packages/coding-agent/src/session/agent-session.ts",
@@ -4828,6 +5054,39 @@
4828
5054
  "testIds": "not_applicable"
4829
5055
  }
4830
5056
  },
5057
+ {
5058
+ "sourceId": "agent_session:prepareModelSelectionForProfileActivation",
5059
+ "sourceFile": "packages/coding-agent/src/session/agent-session.ts",
5060
+ "sourceKind": "agent_session",
5061
+ "decision": "exclude",
5062
+ "rationale": "internal staged model-selection preparation for profile activation, not a user-facing SDK control seam",
5063
+ "exclusionMetadata": {
5064
+ "adapterMappings": "not_applicable",
5065
+ "testIds": "not_applicable"
5066
+ }
5067
+ },
5068
+ {
5069
+ "sourceId": "agent_session:commitPreparedProfileModelSelection",
5070
+ "sourceFile": "packages/coding-agent/src/session/agent-session.ts",
5071
+ "sourceKind": "agent_session",
5072
+ "decision": "exclude",
5073
+ "rationale": "internal model-selection commit for profile activation, not a user-facing SDK control seam",
5074
+ "exclusionMetadata": {
5075
+ "adapterMappings": "not_applicable",
5076
+ "testIds": "not_applicable"
5077
+ }
5078
+ },
5079
+ {
5080
+ "sourceId": "agent_session:finishPreparedProfileModelSelection",
5081
+ "sourceFile": "packages/coding-agent/src/session/agent-session.ts",
5082
+ "sourceKind": "agent_session",
5083
+ "decision": "exclude",
5084
+ "rationale": "internal post-commit model-selection refresh for profile activation, not a user-facing SDK control seam",
5085
+ "exclusionMetadata": {
5086
+ "adapterMappings": "not_applicable",
5087
+ "testIds": "not_applicable"
5088
+ }
5089
+ },
4831
5090
  {
4832
5091
  "sourceId": "agent_session:restoreModelSelectionForRollback",
4833
5092
  "sourceFile": "packages/coding-agent/src/session/agent-session.ts",
@@ -125,6 +125,10 @@ const controls = [
125
125
  ["retry.now", "Immediately retry pending backoff."],
126
126
  ["bash.background", "Move active managed bash to the background."],
127
127
  ["model.profile.set", "Activate a model profile for the current session."],
128
+ ["turn.image.begin", "Begin a bounded host-owned image upload."],
129
+ ["turn.image.append", "Append a canonical base64 image chunk."],
130
+ ["turn.image.finish", "Verify and stage a complete image."],
131
+ ["turn.image.discard", "Discard an unfinished or staged image."],
128
132
  ] as const;
129
133
 
130
134
  const globals = [
@@ -235,6 +239,15 @@ const reverse = [
235
239
  ] as const;
236
240
 
237
241
  function controlDisposition(id: string): Record<Adapter, AdapterDisposition> {
242
+ if (["C54", "C55", "C56", "C57"].includes(id))
243
+ return dispositions({
244
+ telegram: "prohibited",
245
+ discord: "prohibited",
246
+ slack: "prohibited",
247
+ mcp: "prohibited",
248
+ acp: "prohibited",
249
+ daemonCli: "machine_only",
250
+ });
238
251
  if (["C25", "C26", "C27", "C28", "C29", "C30", "C31", "C32", "C34", "C48"].includes(id))
239
252
  return dispositions({
240
253
  telegram: "prohibited",
@@ -271,7 +284,13 @@ function controlErrors(id: string): string[] {
271
284
  // C01/C05 submit a prompt and therefore run the prompt preflight, which
272
285
  // refuses a session with no selected model before admission. The code is
273
286
  // appended: ACP machine-only mapping reads errorCodes[0].
274
- C01: ["client_ref_conflict", "reconciliation_capacity", "reconciliation_persist_failed", "model_not_selected"],
287
+ C01: [
288
+ "client_ref_conflict",
289
+ "reconciliation_capacity",
290
+ "reconciliation_persist_failed",
291
+ "model_not_selected",
292
+ "image_upload_unavailable",
293
+ ],
275
294
  C02: ["turn_not_active", "client_ref_conflict", "reconciliation_capacity", "reconciliation_persist_failed"],
276
295
  C09: ["client_ref_conflict", "reconciliation_capacity", "reconciliation_persist_failed"],
277
296
  C06: ["action_claimed"],
@@ -294,6 +313,10 @@ function controlErrors(id: string): string[] {
294
313
  C50: ["nothing_to_retry", "busy"],
295
314
  C51: ["retry_not_pending"],
296
315
  C52: ["not_foldable", "already_backgrounded", "no_active_bash"],
316
+ C54: ["invalid_input", "busy", "resource_gone", "operation_prohibited"],
317
+ C55: ["invalid_input", "busy", "resource_gone", "operation_prohibited"],
318
+ C56: ["invalid_input", "busy", "resource_gone", "operation_prohibited"],
319
+ C57: ["invalid_input", "resource_gone", "operation_prohibited"],
297
320
  };
298
321
  return errors[id] ?? ["invalid_request", "busy"];
299
322
  }
@@ -354,8 +377,15 @@ export const OPERATIONS: readonly Operation[] = [
354
377
  : id === "G10"
355
378
  ? ["invalid_input", "not_found", "idempotency_conflict", "lifecycle_pending", "terminal_uncertain"]
356
379
  : ["G03", "G04", "G05"].includes(id)
357
- ? ["invalid_request", "unknown_model_profile", "model_profile_registry_error"]
358
- : ["invalid_request"],
380
+ ? [
381
+ "invalid_request",
382
+ "unknown_model_profile",
383
+ "model_profile_registry_error",
384
+ "legacy_lifecycle_ambiguous",
385
+ ]
386
+ : ["G06", "G07", "G08"].includes(id)
387
+ ? ["invalid_request", "legacy_lifecycle_ambiguous"]
388
+ : ["invalid_request"],
359
389
  adapterDispositions:
360
390
  id === "G02"
361
391
  ? dispositions({
@@ -10,5 +10,6 @@ export {
10
10
  type DurableReconciliationRecord,
11
11
  type DurableSteerReconciliationRecord,
12
12
  type ReconciliationStore,
13
+ type ReconciliationStoreInstrumentationEvent,
13
14
  resolveReconciliationSessionFile,
14
15
  } from "./bus/reconciliation-store";
@@ -20,6 +20,7 @@ export const SESSION_LIST_SAVED_SESSION_OMISSION_DETAIL_CODES = [
20
20
  "managed_gc_journal_capacity_exceeded",
21
21
  "atomic_unavailable",
22
22
  "invalid_request",
23
+ "permission_denied",
23
24
  "durability_failed",
24
25
  "durability_not_provable",
25
26
  "capacity_exceeded",