@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
@@ -27,8 +27,10 @@ import { type WorkflowGateEmitter, type WorkflowGateTerminalProof } from "../../
27
27
  import type { AgentSessionEvent } from "../../session/agent-session";
28
28
  import { type SessionWorkLease, type SessionWorkLeaseHandle } from "../../session/session-work-lease";
29
29
  import type { AskAnswerSource, AskAnswerSourceResult, AskRemoteControl } from "../../tools";
30
+ import type { AwaitingInputKind } from "../../tools/awaiting-input";
30
31
  import { type SessionHostRuntimePublication } from "../broker/lifecycle";
31
32
  import { type SessionSdkHost } from "../host";
33
+ import { PromptImageUploadStore } from "../host/prompt-image-upload";
32
34
  import { CursorRegistry, RevisionStore } from "../host/query";
33
35
  import type { SdkFrame } from "../host/types";
34
36
  import { type SdkPromptTerminalOutcome } from "../prompt-status";
@@ -266,6 +268,13 @@ export declare class PresentationArbiter {
266
268
  interface SessionRuntime {
267
269
  server: NotificationServer;
268
270
  host: SessionSdkHost;
271
+ imageUploads: PromptImageUploadStore | undefined;
272
+ releaseAcceptedImage: (correlation: {
273
+ commandId: string;
274
+ turnId: string;
275
+ }) => void;
276
+ releaseAcceptedImagesForRun: (owner: AgentTerminalOwnerContext) => void;
277
+ releaseAcceptedImages: () => void;
269
278
  getJoinedPromptCorrelations: (owner: AgentTerminalOwnerContext) => Array<{
270
279
  commandId: string;
271
280
  turnId: string;
@@ -490,6 +499,16 @@ interface SessionRuntime {
490
499
  args?: unknown;
491
500
  pendingPhase?: "completed" | "failed" | "cancelled";
492
501
  }>;
502
+ /**
503
+ * Running tool calls that reported an awaiting-input signal, keyed by tool call
504
+ * id. An entry stays undelivered while notifications are inactive or policy is
505
+ * provisional, and is dropped when the call ends; one notification per call.
506
+ */
507
+ awaitingInput: Map<string, {
508
+ toolName: string;
509
+ kind: AwaitingInputKind;
510
+ delivered: boolean;
511
+ }>;
493
512
  /** Cancels the postmortem cleanup that emits `session_closed` on process teardown. */
494
513
  cancelPostmortemCleanup: () => void;
495
514
  /** Disposes side-turn resources when their owning logical session becomes unavailable. */
@@ -612,6 +631,29 @@ export declare function shouldAwaitNotificationStartup(event: {
612
631
  };
613
632
  }): boolean;
614
633
  export declare function boundedCorrelatedAgentEndFrame(frame: Record<string, unknown>): Record<string, unknown>;
634
+ /** Connection-scoped identity of a queued prompt submission an abort may address. */
635
+ export interface TerminalAbortSubmissionScope {
636
+ connectionId?: string;
637
+ terminal: boolean;
638
+ }
639
+ /**
640
+ * Whether a terminal abort addresses this prompt submission.
641
+ *
642
+ * An ordinary abort is scoped to the requesting connection's own prompt: `connectionId`
643
+ * identifies the connection that submitted it, and a submission that already reached a
644
+ * terminal state is never addressed. Broker-authorized operator authority
645
+ * (`TerminalAbortInput.operator`, granted only through the broker control route) is the
646
+ * documented exception — "operator authority changes only connection ownership, never
647
+ * those settlement proofs" — so it addresses the session's submission even when another
648
+ * connection submitted it. Without that override every operator abort issued over a
649
+ * second connection (the SDK client case, where each request is its own connection)
650
+ * reported no_active_turn while the turn was still running.
651
+ */
652
+ export declare function terminalAbortAddressesSubmission(input: {
653
+ connectionId: string | undefined;
654
+ operatorAuthorized: boolean;
655
+ submission: TerminalAbortSubmissionScope;
656
+ }): boolean;
615
657
  export declare function createNotificationsExtension(api: ExtensionAPI, options?: {
616
658
  settings?: Settings;
617
659
  ensureTelegramDaemon?: (input: {
@@ -649,6 +691,8 @@ export declare function createNotificationsExtension(api: ExtensionAPI, options?
649
691
  * preflight outside the durable admission path (review thread P2).
650
692
  */
651
693
  terminalAbortSeams?: {
694
+ /** Definitive event-driven observation; never mutates the owning run. */
695
+ waitForRunSettlement?: (handle: string) => Promise<RunSettlementProof>;
652
696
  getTerminalRunOwnerForEvent?: (event: object) => AgentTerminalOwnerContext | undefined;
653
697
  getRunOwnerDomain?: (handle: string) => RunCancellationDomain | undefined;
654
698
  getTerminalTurnEpoch: () => number | undefined;
@@ -182,9 +182,19 @@ export interface ReconciliationStore {
182
182
  snapshotTerminalScopes(): DurableTerminalScopeRecord[];
183
183
  delete(): Promise<void>;
184
184
  }
185
+ export interface ReconciliationStoreInstrumentationEvent {
186
+ at: number;
187
+ phase: "enqueued" | "started" | "completed" | "failed";
188
+ operation?: string;
189
+ substep?: string;
190
+ error?: string;
191
+ /** Detailed information about lock acquisition, promise identity, db state, etc. */
192
+ detail?: string;
193
+ }
185
194
  export declare function createReconciliationStore(options: {
186
195
  sessionFile: string | null | undefined;
187
196
  sessionId: string;
188
197
  fs?: ReconciliationStoreFs;
189
198
  now?: () => number;
199
+ onInstrumentationForTests?: (event: ReconciliationStoreInstrumentationEvent) => void;
190
200
  }): ReconciliationStore;
@@ -296,8 +296,16 @@ export declare const SDK_LIFECYCLE_ROUTER_PROTOCOL_VERSION = 1;
296
296
  * Generation 202 joins queued-removal terminal publication before ordinary
297
297
  * abort acknowledgement, replacing owners that still acknowledge cancellation
298
298
  * before its terminal record is durable.
299
+ * Generation 203 replaces owners that still treat a project `.gjc` file as an
300
+ * explicit deadline-autosave opt-in for a primary checkout.
301
+ * Generation 205 replaces owners whose process descendant walk can adopt
302
+ * children of a recycled PID. Generation 206 verifies macOS descendant
303
+ * identities and parentage before retaining PTY termination authority, and
304
+ * reaps adopted Linux PTY descendants when GJC is a child reaper.
305
+ * Generation 209 installs connection-owned private SDK image staging with
306
+ * execution-owned reservations, replacing hosts without that lifecycle contract.
299
307
  */
300
- export declare const DAEMON_GENERATION = 202;
308
+ export declare const DAEMON_GENERATION = 209;
301
309
  /**
302
310
  * Serving-compatibility boundary for daemon lifecycle requests. Epoch 7
303
311
  * requires durable publication receipts and acknowledged attachment dispatch,
@@ -135,6 +135,8 @@ export declare const ASK_SELECTED_ACK_CAPABILITY = "ask_selected_ack_v1";
135
135
  export declare const ASK_CONTROLS_CAPABILITY = "ask_controls_v1";
136
136
  /** Capability for the closed tool phase set: started, completed, failed, and cancelled. */
137
137
  export declare const TOOL_ACTIVITY_CAPABILITY = "tool_activity_v2";
138
+ /** Receive content-free notifications when a running command needs host-side authentication. */
139
+ export declare const AWAITING_INPUT_CAPABILITY = "awaiting_input_v1";
138
140
  /** Receive-only compatibility capability for pre-v2 hosts. */
139
141
  export declare const LEGACY_TOOL_ACTIVITY_CAPABILITY = "tool_activity_v1";
140
142
  /** Public `sdk/bus/telegram-daemon` path for the canonical `sdk/host` capability token. */
@@ -2,7 +2,7 @@
2
2
  * Pure rendering of threaded-session frames into Telegram send specs.
3
3
  *
4
4
  * The daemon receives the additive `ServerMessage` frames (identity_header,
5
- * context_update, turn_stream, image_attachment, config_update) over the session
5
+ * context_update, turn_stream, image_attachment, config_update, awaiting_input) over the session
6
6
  * WS and must turn each into a Bot API call scoped to the session's forum topic
7
7
  * (`message_thread_id`), throttled through the shared rate-limit pool. This
8
8
  * module is the pure frame→send mapping (including the priority lane and live-
@@ -71,6 +71,7 @@ interface ThreadedFrame {
71
71
  turnRef?: unknown;
72
72
  toolCallId?: unknown;
73
73
  toolName?: unknown;
74
+ kind?: unknown;
74
75
  argsSummary?: unknown;
75
76
  resultSummary?: unknown;
76
77
  isError?: unknown;
@@ -45,7 +45,6 @@ export interface RetainedTranscriptTailReader {
45
45
  export declare const SDK_JSON_INPUT_FILE_MAX_BYTES: number;
46
46
  /** Translate only SDK-owned codes and explicitly allowlisted reconciliation fields. */
47
47
  export declare function sdkPublicFailure(code: string, details?: unknown, proof?: PublicEffectProof): PublicCommandFailure;
48
- /** Lifecycle terminality/retryability is not, by itself, proof of an effect outcome. */
49
48
  export declare function lifecyclePublicFailure(outcome: Extract<SessionLifecycleResult, {
50
49
  ok: false;
51
50
  }>): PublicCommandFailure;
@@ -19,7 +19,11 @@ export type ControlInput = Record<string, unknown>;
19
19
  * AgentSession and its controllers without exposing those concrete types here.
20
20
  */
21
21
  export interface ControlSurface {
22
- prompt(text: string, images?: ControlValue, clientRef?: string): Promise<ControlValue> | ControlValue;
22
+ prompt(text: string, images?: ControlValue, clientRef?: string, stagedImages?: ControlValue): Promise<ControlValue> | ControlValue;
23
+ imageBegin?(input: ControlValue): Promise<ControlValue> | ControlValue;
24
+ imageAppend?(input: ControlValue): Promise<ControlValue> | ControlValue;
25
+ imageFinish?(input: ControlValue): Promise<ControlValue> | ControlValue;
26
+ imageDiscard?(input: ControlValue): Promise<ControlValue> | ControlValue;
23
27
  steer(text: string, clientRef?: string, expectedSdkRunToken?: string): Promise<ControlValue> | ControlValue;
24
28
  followUp(text: string): Promise<ControlValue> | ControlValue;
25
29
  abort(): Promise<ControlValue> | ControlValue;
@@ -20,6 +20,8 @@ export interface EventReplay {
20
20
  events: EventFrame[];
21
21
  gap?: EventReplayGap;
22
22
  }
23
+ /** Notification policy refresh records the live redaction bit for one session ring. */
24
+ export declare function setSessionOutboundRedact(sessionId: string, enabled: boolean): void;
23
25
  export declare class SessionEventStream {
24
26
  #private;
25
27
  constructor(options?: {
@@ -30,6 +32,8 @@ export declare class SessionEventStream {
30
32
  });
31
33
  get generation(): number;
32
34
  get sequence(): number;
35
+ /** Follow the session redaction bit. Replay then drops kinds emit sites already suppress. */
36
+ setOutboundRedact(enabled: boolean): void;
33
37
  restart(): number;
34
38
  emit(frame: SdkFrame): EventFrame;
35
39
  /** Replays retained current-generation events and reports any required resynchronization. */
@@ -81,6 +81,7 @@ export interface SessionSdkHostOptions extends HostEndpointAdapters {
81
81
  * must see the same capability-gated event kinds on both legs, or live and
82
82
  * replay delivery diverge for the same subscriber. */
83
83
  export declare const TOOL_ACTIVITY_CAPABILITY = "tool_activity_v2";
84
+ export declare const AWAITING_INPUT_CAPABILITY = "awaiting_input_v1";
84
85
  /** Capability for non-replayable streamed turn content. */
85
86
  export declare const TURN_STREAM_CAPABILITY = "turn_stream";
86
87
  /** Capability used by notification adapters that observe a host without owning its work. */
@@ -91,7 +92,7 @@ export declare const SESSION_HOST_OBSERVER_CAPABILITY = "session_host_observer_v
91
92
  * of every frame its positioned envelope already reached.
92
93
  */
93
94
  export declare const POSITIONED_NOTIFICATION_EFFECTS_CAPABILITY = "positioned_notification_effects_v1";
94
- export declare const CAP_GATED_FRAME_KINDS: ReadonlySet<string>;
95
+ export declare const CAP_GATED_FRAME_KINDS: ReadonlyMap<string, string>;
95
96
  /** Keep live delivery and replay on one capability gate. */
96
97
  export declare function canDeliverSdkEvent(kind: string, capabilities: ReadonlySet<string> | undefined): boolean;
97
98
  /** SDK hosting is independent of notification configuration. Only root sessions host an endpoint. */
@@ -0,0 +1,43 @@
1
+ import type { RunSettlementProof } from "@gajae-code/agent-core";
2
+ import type { ImageContent } from "@gajae-code/ai/core";
3
+ /** One definitive event-driven wait; teardown and elapsed time are not settlement proof. */
4
+ export declare function retirePromptImageReservation(handle: string, waitForRunSettlement: (handle: string) => Promise<RunSettlementProof>, isCurrent: () => boolean, release: () => void): void;
5
+ export interface PromptImageProcessBudgetSnapshot {
6
+ /** Retained upload and accepted source bytes, including accepted base64 copies. */
7
+ readonly sourceBytes: number;
8
+ readonly transientBytes: number;
9
+ readonly concurrentFinishes: number;
10
+ }
11
+ /** Internal process diagnostics only; not an SDK operation or a release capability. */
12
+ export declare function getPromptImageProcessBudgetSnapshot(): PromptImageProcessBudgetSnapshot;
13
+ /** Session-scoped, connection-owned image leases; no client-supplied path or identity is trusted. */
14
+ export declare class PromptImageUploadStore {
15
+ #private;
16
+ /** The host supplies live socket membership; standalone callers must choose an explicit policy. */
17
+ constructor(isConnectionOpen: (connectionId: string) => boolean);
18
+ begin(connectionId: string | undefined, value: unknown): {
19
+ id: string;
20
+ nextSequence: 0;
21
+ };
22
+ append(connectionId: string | undefined, value: unknown): {
23
+ id: string;
24
+ nextSequence: number;
25
+ receivedBytes: number;
26
+ };
27
+ finish(connectionId: string | undefined, value: unknown): Promise<{
28
+ id: string;
29
+ byteLength: number;
30
+ sha256: string;
31
+ mimeType: string;
32
+ }>;
33
+ discard(connectionId: string | undefined, value: unknown): {
34
+ discarded: true;
35
+ };
36
+ /** Synchronous reserve–validate–copy–consume transaction, called before prompt admission. */
37
+ redeem(connectionId: string | undefined, value: unknown): {
38
+ images: ImageContent[];
39
+ release: () => void;
40
+ };
41
+ disconnect(connectionId: string): void;
42
+ close(): void;
43
+ }
@@ -1,3 +1,4 @@
1
+ import { type RunSettlementProof } from "@gajae-code/agent-core";
1
2
  import type { ProviderDiagnostic } from "@gajae-code/ai/core";
2
3
  import { type Settings } from "../../config/settings";
3
4
  import type { ExtensionAPI, ExtensionContext } from "../../extensibility/extensions";
@@ -74,9 +75,12 @@ export interface SessionSdkTransport {
74
75
  stop(): Promise<void>;
75
76
  broadcastFrame?(frame: SdkFrame): void;
76
77
  onConnectionClose?(handler: (connectionId: string) => void): undefined | (() => void);
78
+ /** Authoritative live socket membership, not a cache of previously observed frames. */
79
+ isConnectionOpen?(connectionId: string): boolean;
77
80
  onNegotiatedCapabilities?(handler: (connectionId: string, capabilities: readonly string[]) => void): undefined | (() => void);
78
81
  }
79
82
  export interface SessionSdkRuntimeOptions extends Omit<SessionSdkHostOptions, "sessionId" | "stateRoot" | "token" | "sendFrame" | "onFrame"> {
83
+ onDisconnected?: (connectionId: string) => void;
80
84
  transport: SessionSdkTransport;
81
85
  /** Session settings; enables `config.patch` application on this runtime. */
82
86
  settings?: Settings;
@@ -154,9 +158,13 @@ export interface SdkOnlyReconciliationStore {
154
158
  }): Promise<void>;
155
159
  }
156
160
  export interface SdkOnlyTerminalAbortSeams {
161
+ /** Definitive event-driven observation: never abort, seal or quarantine a run to reclaim images. */
162
+ waitForRunSettlement?: (handle: string) => Promise<RunSettlementProof>;
157
163
  getReconciliationStore?: () => SdkOnlyReconciliationStore | undefined;
158
164
  getTerminalTurnEpoch: () => number | undefined;
159
165
  getActivePromptHandle: () => string | undefined;
166
+ onDeadlineRecoveryCheckpointForTests?: (checkpoint: SdkOnlyDeadlineRecoveryCheckpoint) => void;
167
+ onPersistenceInstrumentationForTests?: (event: PersistenceInstrumentationEvent) => void;
160
168
  /** Re-read the active prompt's owning SDK connection for the owner-mismatch
161
169
  * recheck; falls back to the runtime-tracked owner when absent (review
162
170
  * thread P1). */
@@ -196,14 +204,23 @@ export interface SdkOnlyTerminalAbortSeams {
196
204
  /** Test override for the maximum durable terminal reservation rows. */
197
205
  maxDurableTerminalReservationsForTests?: number;
198
206
  }
199
- /**
200
- * The transport-neutral SDK session runtime.
201
- *
202
- * Concrete transports (including the optional notification/native transport) are
203
- * injected by the caller. This module owns host construction, control/query
204
- * dispatch, replay/event publication, and reverse-provider lifecycle without
205
- * importing any notification adapter or native notification class.
206
- */
207
+ export interface SdkOnlyDeadlineRecoveryCheckpoint {
208
+ at: number;
209
+ stage: "terminalization-start" | "terminalization-result" | "publication-start" | "publication-result" | "note-transition-start" | "note-transition-awaiting-finalization" | "note-transition-finalization-ready" | "note-transition-before-persist" | "note-transition-persisted" | "note-transition-persist-failed" | "deadline-recovery-retired";
210
+ correlation: InvocationCorrelation;
211
+ result?: "settled" | "uncertain" | "published" | "not-published" | "rejected";
212
+ reason?: string;
213
+ recordStatus?: string;
214
+ recordRevision?: number;
215
+ recordTerminalAt?: number;
216
+ pendingFinalization?: boolean;
217
+ eventCaptured?: boolean;
218
+ eventPrepared?: boolean;
219
+ terminalCommitted?: boolean;
220
+ leaseCurrent?: boolean;
221
+ pendingToolCount?: number;
222
+ errorCode?: string;
223
+ }
207
224
  export declare class SessionSdkSessionRuntime {
208
225
  #private;
209
226
  readonly host: SessionSdkHost;
@@ -354,10 +371,23 @@ export interface InvocationReconciliation {
354
371
  }): Promise<void>;
355
372
  markUncertain(kind: InvocationKind, correlation: InvocationCorrelation, isCurrent?: () => boolean, deadlineMaxAt?: number): Promise<void>;
356
373
  }
374
+ export interface PersistenceInstrumentationEvent {
375
+ at: number;
376
+ phase: "enqueued" | "started" | "completed" | "failed";
377
+ operation?: string;
378
+ substep?: string;
379
+ error?: string;
380
+ /** Detailed information about lock acquisition, promise identity, db state, etc. */
381
+ detail?: string;
382
+ /** Time spent waiting (ms) before the operation started. */
383
+ waitMs?: number;
384
+ }
357
385
  export declare function createInvocationReconciliation(options?: {
358
386
  stateRoot?: string;
359
387
  sessionId?: string;
360
388
  store?: SdkOnlyReconciliationStore;
389
+ onDeadlineRecoveryCheckpointForTests?: (checkpoint: SdkOnlyDeadlineRecoveryCheckpoint) => void;
390
+ onPersistenceInstrumentationForTests?: (event: PersistenceInstrumentationEvent) => void;
361
391
  }): InvocationReconciliation;
362
392
  export interface SdkSurfaceFactoryOptions {
363
393
  ctx: ExtensionContext;
@@ -365,6 +395,8 @@ export interface SdkSurfaceFactoryOptions {
365
395
  api: ExtensionAPI;
366
396
  /** Startup surface that owns host-level permission and lifecycle authority. */
367
397
  primaryControlSurface?: "cli" | "sdk";
398
+ /** Private staging controls are advertised only with authoritative transport liveness. */
399
+ imageUploadsAvailable?: boolean;
368
400
  policy?: SdkSurfacePolicy;
369
401
  getInstalledDefinitions?: (capability: string) => unknown | undefined;
370
402
  getLiveState?: () => {
@@ -7,6 +7,7 @@ export interface SdkSurfacePolicy {
7
7
  export interface SdkSurfacePolicyOptions {
8
8
  bindings: Iterable<string>;
9
9
  workflowGateAvailable: boolean;
10
+ imageUploadsAvailable?: boolean;
10
11
  isBindingInstalled?: (binding: string) => boolean;
11
12
  }
12
13
  /** Shared operation advertisement policy for every SDK transport. */
@@ -20,4 +21,4 @@ export interface SdkCapabilities {
20
21
  }
21
22
  export declare function createSdkCapabilities(policy: SdkSurfacePolicy, hostTools?: boolean, primaryControlSurface?: SdkCapabilities["primaryControlSurface"]): SdkCapabilities;
22
23
  /** Derive the shared policy from an extension context without importing adapters. */
23
- export declare function createSdkSurfacePolicyForContext(ctx: ExtensionContext, workflowGateAvailable?: boolean): SdkSurfacePolicy;
24
+ export declare function createSdkSurfacePolicyForContext(ctx: ExtensionContext, workflowGateAvailable?: boolean, imageUploadsAvailable?: boolean): SdkSurfacePolicy;
@@ -57,6 +57,10 @@ export type SessionCreateTarget = SessionLifecycleCoordinatorTarget & {
57
57
  readonly body?: string;
58
58
  readonly modelPreset?: string;
59
59
  readonly mcpServers?: readonly Record<string, unknown>[];
60
+ /** Per-session environment for the hosted session; `GJC_*` names are reserved (#6735). */
61
+ readonly env?: Readonly<Record<string, string>>;
62
+ /** Inherited broker environment names removed from the hosted session (#6735). */
63
+ readonly unsetEnv?: readonly string[];
60
64
  readonly worktree?: SessionLifecycleWorktreeTarget;
61
65
  readonly readiness?: "immediate" | "deferred";
62
66
  readonly readinessTimeoutMs?: number;
@@ -70,6 +74,10 @@ export type SessionForkTarget = SessionLifecycleCoordinatorTarget & {
70
74
  readonly body?: string;
71
75
  readonly modelPreset?: string;
72
76
  readonly mcpServers?: readonly Record<string, unknown>[];
77
+ /** Per-session environment for the hosted session; `GJC_*` names are reserved (#6735). */
78
+ readonly env?: Readonly<Record<string, string>>;
79
+ /** Inherited broker environment names removed from the hosted session (#6735). */
80
+ readonly unsetEnv?: readonly string[];
73
81
  readonly worktree?: SessionLifecycleWorktreeTarget;
74
82
  readonly readinessTimeoutMs?: number;
75
83
  };
@@ -82,6 +90,10 @@ export type SessionResumeTarget = SessionLifecycleCoordinatorTarget & {
82
90
  readonly body?: string;
83
91
  readonly modelPreset?: string;
84
92
  readonly mcpServers?: readonly Record<string, unknown>[];
93
+ /** Per-session environment for the hosted session; `GJC_*` names are reserved (#6735). */
94
+ readonly env?: Readonly<Record<string, string>>;
95
+ /** Inherited broker environment names removed from the hosted session (#6735). */
96
+ readonly unsetEnv?: readonly string[];
85
97
  readonly worktree?: SessionLifecycleWorktreeTarget;
86
98
  readonly readinessTimeoutMs?: number;
87
99
  };
@@ -44,7 +44,8 @@
44
44
  * WHERE it runs. `sdk.flushWorktreeOnDeadline` still defaults to on, but the
45
45
  * implicit default applies only in a LINKED worktree (`gitDir !== commonDir`) —
46
46
  * what agent/paseo sessions run in, and the #5583 field report. In the user's
47
- * primary checkout an autosave needs an explicit opt-in.
47
+ * primary checkout an autosave needs an explicit opt-in from the user/global
48
+ * config or a runtime override. A project `.gjc` file is not that opt-in.
48
49
  */
49
50
  export interface PromptDeadlineFlushResult {
50
51
  /** Branch the WIP commit landed on, or `undefined` on a detached HEAD. */
@@ -58,9 +59,10 @@ export interface PromptDeadlineFlushOptions {
58
59
  /** Active session's agent directory, used to keep volatile broker state out of the WIP commit. */
59
60
  readonly agentDir?: string;
60
61
  /**
61
- * Whether the caller resolved `sdk.flushWorktreeOnDeadline` to `true` from a
62
- * value the user actually wrote, rather than from the schema default. Only an
63
- * explicit opt-in may autosave outside a linked worktree.
62
+ * Whether the caller resolved `sdk.flushWorktreeOnDeadline` to `true` from the
63
+ * user/global config or a runtime override, rather than from the schema
64
+ * default or a project `.gjc` file. Only that opt-in may autosave outside a
65
+ * linked worktree.
64
66
  */
65
67
  readonly explicitOptIn?: boolean;
66
68
  /**
@@ -71,6 +73,41 @@ export interface PromptDeadlineFlushOptions {
71
73
  readonly isCurrent?: () => boolean;
72
74
  readonly signal?: AbortSignal;
73
75
  }
76
+ declare const DEADLINE_FLUSH_SETTING = "sdk.flushWorktreeOnDeadline";
77
+ /**
78
+ * The settings view both deadline hosts already hold. `get` is the merged value
79
+ * (global, then project, then runtime override, otherwise the schema default).
80
+ * `getGlobal` and `getOverride` are the layers a project file cannot write.
81
+ */
82
+ export interface DeadlineFlushSettings {
83
+ get(path: typeof DEADLINE_FLUSH_SETTING): unknown;
84
+ getAgentDir?(): string | undefined;
85
+ getGlobal?(path: typeof DEADLINE_FLUSH_SETTING): unknown;
86
+ getOverride?(path: typeof DEADLINE_FLUSH_SETTING): unknown;
87
+ }
88
+ /**
89
+ * True only when the user wrote `sdk.flushWorktreeOnDeadline: true` in a runtime
90
+ * override or the global config. The schema default and a project `.gjc` file
91
+ * do not count: `Settings.has()` sees the merged view, so a repo-shipped `true`
92
+ * would otherwise open the primary-checkout gate.
93
+ */
94
+ export declare function explicitDeadlineFlushOptIn(settings: DeadlineFlushSettings | undefined): boolean;
95
+ /**
96
+ * Whether this deadline must not autosave.
97
+ *
98
+ * A runtime override wins, then the user/global value. A project file cannot
99
+ * cancel either one. A project `false` still opts out when the user has not
100
+ * written the key.
101
+ */
102
+ export declare function deadlineFlushSuppressed(settings: DeadlineFlushSettings | undefined): boolean;
103
+ /**
104
+ * Deadline-host entry for the worktree autosave. Both the session runtime and
105
+ * the notification bus call this so the opt-in decision cannot drift.
106
+ */
107
+ export declare function autosaveWorktreeOnPromptDeadline(cwd: string, settings: DeadlineFlushSettings | undefined, options?: {
108
+ readonly isCurrent?: () => boolean;
109
+ readonly signal?: AbortSignal;
110
+ }): Promise<PromptDeadlineFlushResult | undefined>;
74
111
  /**
75
112
  * Commit any uncommitted work in the worktree owning `cwd`.
76
113
  *
@@ -83,3 +120,4 @@ export interface PromptDeadlineFlushOptions {
83
120
  * bound, so a caller that passes nothing still cannot hang here.
84
121
  */
85
122
  export declare function flushWorktreeOnPromptDeadline(cwd: string, options?: AbortSignal | PromptDeadlineFlushOptions): Promise<PromptDeadlineFlushResult | undefined>;
123
+ export {};
@@ -70,6 +70,8 @@ export declare class PromptDeadlineManager {
70
70
  */
71
71
  deadlineFlushTimeoutMs?: number;
72
72
  });
73
+ /** Notify about termination check results to adjust retry strategy. */
74
+ notifyTerminationResult(correlation: InvocationCorrelation, _result: PromptDeadlineTerminalization, reason: string): void;
73
75
  onAccepted(correlation: InvocationCorrelation): void;
74
76
  /** A new exact agent_start retires an uncertainty-only fence, never captured terminal intent. */
75
77
  onRunStarted(correlation: InvocationCorrelation): void;
@@ -37,12 +37,19 @@ export interface TurnPromptImageInput {
37
37
  data: string;
38
38
  mimeType?: string;
39
39
  }
40
- /** Public input contract for ordered `turn.prompt`. */
41
- export interface TurnPromptInput {
40
+ /** Public input contract for ordered `turn.prompt`; direct and staged images cannot be mixed. */
41
+ export type TurnPromptInput = {
42
42
  text: string;
43
- images?: TurnPromptImageInput[];
44
43
  clientRef?: string;
45
- }
44
+ } & ({
45
+ images?: TurnPromptImageInput[];
46
+ stagedImages?: never;
47
+ } | {
48
+ images?: never;
49
+ stagedImages: Array<{
50
+ id: string;
51
+ }>;
52
+ });
46
53
  /**
47
54
  * Terminal outcome is preserved exactly; active records never age into terminal. An
48
55
  * ordinary prompt active at process restart is finalized from its durable pending
@@ -3,14 +3,20 @@ type SecretInputError = {
3
3
  code: "secret_field_forbidden";
4
4
  message: string;
5
5
  };
6
- /** Rejects secret-bearing config patches from model-facing adapter inputs. */
7
- export declare function validateAdapterSecretFields(operation: string, input: Input): SecretInputError | undefined;
6
+ type UltrafastRestrictionError = {
7
+ code: "ultrafast_tier_forbidden";
8
+ message: string;
9
+ };
10
+ /** Rejects secret-bearing and ultrafast-tier config patches from model-facing adapter inputs. */
11
+ export declare function validateAdapterSecretFields(operation: string, input: Input): SecretInputError | UltrafastRestrictionError | undefined;
8
12
  export type AdapterValidationError = {
9
13
  code: "invalid_reload_component" | "invalid_input";
10
14
  message: string;
11
15
  };
12
16
  /** Rejects instruction-bearing controls before correlation or provider work. */
13
17
  export declare function validateRequiredPromptText(operation: string, input: Input): AdapterValidationError | undefined;
14
- /** Validates controls that adapters must reject before forwarding them to a host. */
15
- export declare function validateAdapterControl(operation: string, input: Input): AdapterValidationError | undefined;
18
+ /** Validates controls before forwarding them; adapters reject ultrafast unless explicitly trusted. */
19
+ export declare function validateAdapterControl(operation: string, input: Input, options?: {
20
+ allowUltrafastTier?: boolean;
21
+ }): AdapterValidationError | undefined;
16
22
  export {};
@@ -1,2 +1,2 @@
1
1
  export { createKindAwareReconciliation, type KindAwareReconciliation, type ReconciliationKind, type SteerReconciliationResult, } from "./bus/kind-aware-reconciliation";
2
- export { createReconciliationStore, type DurableExecutionReconciliationRecord, type DurableReconciliationRecord, type DurableSteerReconciliationRecord, type ReconciliationStore, resolveReconciliationSessionFile, } from "./bus/reconciliation-store";
2
+ export { createReconciliationStore, type DurableExecutionReconciliationRecord, type DurableReconciliationRecord, type DurableSteerReconciliationRecord, type ReconciliationStore, type ReconciliationStoreInstrumentationEvent, resolveReconciliationSessionFile, } from "./bus/reconciliation-store";
@@ -1,6 +1,6 @@
1
1
  export type SessionListPageRecord = Record<string, unknown>;
2
2
  export type SessionListSavedSessionOmissionReason = "scope_unavailable" | "candidate_scan_failed" | "candidate_not_found" | "candidate_ambiguous" | "candidate_invalid" | "identity_incomplete";
3
- export declare const SESSION_LIST_SAVED_SESSION_OMISSION_DETAIL_CODES: readonly ["cwd_missing", "cwd_not_directory", "identity_unavailable", "network_unsupported", "sessions_root_unavailable", "binding_conflict", "binding_invalid", "migration_busy", "managed_gc_journal_capacity_exceeded", "atomic_unavailable", "invalid_request", "durability_failed", "durability_not_provable", "capacity_exceeded", "scan_failed", "unsafe_root", "invalid_candidate", "invalid_header", "unreadable_candidate", "source_changed", "cwd_not_found", "cwd_not_utf8", "cwd_network_unsupported", "cwd_identity_unavailable", "cwd_io_error"];
3
+ export declare const SESSION_LIST_SAVED_SESSION_OMISSION_DETAIL_CODES: readonly ["cwd_missing", "cwd_not_directory", "identity_unavailable", "network_unsupported", "sessions_root_unavailable", "binding_conflict", "binding_invalid", "migration_busy", "managed_gc_journal_capacity_exceeded", "atomic_unavailable", "invalid_request", "permission_denied", "durability_failed", "durability_not_provable", "capacity_exceeded", "scan_failed", "unsafe_root", "invalid_candidate", "invalid_header", "unreadable_candidate", "source_changed", "cwd_not_found", "cwd_not_utf8", "cwd_network_unsupported", "cwd_identity_unavailable", "cwd_io_error"];
4
4
  export type SessionListSavedSessionOmissionDetailCode = (typeof SESSION_LIST_SAVED_SESSION_OMISSION_DETAIL_CODES)[number];
5
5
  /** Path-free diagnostic for a requested managed transcript that could not be selected safely. */
6
6
  export interface SessionListSavedSessionOmission {