@gajae-code/coding-agent 0.10.2 → 0.11.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 (465) hide show
  1. package/CHANGELOG.md +50 -2
  2. package/dist/types/append-only-mode.d.ts +1 -1
  3. package/dist/types/cli/args.d.ts +4 -5
  4. package/dist/types/cli/daemon-cli.d.ts +12 -1
  5. package/dist/types/cli/notify-cli.d.ts +21 -1
  6. package/dist/types/cli.d.ts +3 -0
  7. package/dist/types/commands/daemon.d.ts +39 -0
  8. package/dist/types/commands/launch.d.ts +3 -0
  9. package/dist/types/commands/notify.d.ts +28 -1
  10. package/dist/types/commands/sdk.d.ts +33 -0
  11. package/dist/types/config/atomic-yaml-patch.d.ts +85 -0
  12. package/dist/types/config/model-profile-activation.d.ts +35 -15
  13. package/dist/types/config/model-profiles.d.ts +11 -5
  14. package/dist/types/config/model-registry.d.ts +3 -3
  15. package/dist/types/config/model-resolver.d.ts +39 -6
  16. package/dist/types/config/model-selector-value.d.ts +17 -0
  17. package/dist/types/config/models-config-schema.d.ts +10 -6
  18. package/dist/types/config/settings-schema.d.ts +133 -6
  19. package/dist/types/config/settings.d.ts +63 -35
  20. package/dist/types/coordinator-mcp/model-preset.d.ts +7 -6
  21. package/dist/types/coordinator-mcp/server.d.ts +6 -49
  22. package/dist/types/daemon/builtin.d.ts +6 -5
  23. package/dist/types/daemon/control-types.d.ts +1 -1
  24. package/dist/types/discovery/mcp-json.d.ts +12 -1
  25. package/dist/types/extensibility/custom-tools/types.d.ts +1 -1
  26. package/dist/types/extensibility/extensions/compact-handler.d.ts +4 -2
  27. package/dist/types/extensibility/extensions/get-commands-handler.d.ts +2 -2
  28. package/dist/types/extensibility/extensions/loader.d.ts +10 -1
  29. package/dist/types/extensibility/extensions/runner.d.ts +3 -3
  30. package/dist/types/extensibility/extensions/types.d.ts +141 -16
  31. package/dist/types/extensibility/hooks/types.d.ts +1 -1
  32. package/dist/types/gjc-runtime/launch-tmux.d.ts +3 -2
  33. package/dist/types/gjc-runtime/psmux-detect.d.ts +3 -0
  34. package/dist/types/gjc-runtime/session-state-sidecar.d.ts +3 -0
  35. package/dist/types/gjc-runtime/team-runtime.d.ts +3 -4
  36. package/dist/types/gjc-runtime/tmux-owner-isolation-cli.d.ts +13 -0
  37. package/dist/types/gjc-runtime/tmux-sessions.d.ts +4 -1
  38. package/dist/types/gjc-runtime/windows-powershell-command.d.ts +9 -0
  39. package/dist/types/harness-control-plane/operate.d.ts +5 -5
  40. package/dist/types/harness-control-plane/owner.d.ts +18 -4
  41. package/dist/types/harness-control-plane/receipts.d.ts +0 -1
  42. package/dist/types/harness-control-plane/sdk-transport.d.ts +43 -0
  43. package/dist/types/harness-control-plane/session-transport.d.ts +48 -0
  44. package/dist/types/harness-control-plane/types.d.ts +3 -4
  45. package/dist/types/lsp/index.d.ts +1 -1
  46. package/dist/types/main.d.ts +32 -38
  47. package/dist/types/modes/acp/acp-agent.d.ts +224 -53
  48. package/dist/types/modes/acp/acp-client-bridge.d.ts +1 -0
  49. package/dist/types/modes/acp/acp-mode.d.ts +6 -15
  50. package/dist/types/modes/acp/permission-mode.d.ts +4 -0
  51. package/dist/types/modes/acp/startup-options.d.ts +6 -0
  52. package/dist/types/modes/components/agent-dashboard.d.ts +3 -0
  53. package/dist/types/modes/components/model-selector.d.ts +1 -0
  54. package/dist/types/modes/components/notifications-settings-editor.d.ts +135 -0
  55. package/dist/types/modes/components/settings-selector.d.ts +6 -4
  56. package/dist/types/modes/components/welcome.d.ts +1 -1
  57. package/dist/types/modes/controllers/selector-controller.d.ts +35 -1
  58. package/dist/types/modes/index.d.ts +0 -4
  59. package/dist/types/modes/interactive-mode.d.ts +3 -0
  60. package/dist/types/modes/runtime-init.d.ts +2 -2
  61. package/dist/types/modes/shared/agent-wire/approval-gate.d.ts +6 -9
  62. package/dist/types/modes/shared/agent-wire/deep-interview-gate.d.ts +4 -6
  63. package/dist/types/modes/shared/agent-wire/event-contract.d.ts +6 -6
  64. package/dist/types/modes/shared/agent-wire/event-envelope.d.ts +4 -9
  65. package/dist/types/modes/shared/agent-wire/event-observation.d.ts +1 -1
  66. package/dist/types/modes/shared/agent-wire/workflow-gate-broker.d.ts +169 -30
  67. package/dist/types/modes/shared/agent-wire/workflow-gate-schema.d.ts +7 -7
  68. package/dist/types/modes/shared/agent-wire/workflow-gate-types.d.ts +105 -0
  69. package/dist/types/modes/types.d.ts +5 -0
  70. package/dist/types/runtime-mcp/client.d.ts +2 -0
  71. package/dist/types/runtime-mcp/config.d.ts +5 -1
  72. package/dist/types/runtime-mcp/manager.d.ts +8 -1
  73. package/dist/types/runtime-mcp/types.d.ts +4 -0
  74. package/dist/types/sdk/acp/adapter.d.ts +67 -0
  75. package/dist/types/sdk/acp/index.d.ts +2 -0
  76. package/dist/types/sdk/broker/broker.d.ts +53 -0
  77. package/dist/types/sdk/broker/discovery.d.ts +30 -0
  78. package/dist/types/sdk/broker/ensure.d.ts +33 -0
  79. package/dist/types/sdk/broker/identity.d.ts +3 -0
  80. package/dist/types/sdk/broker/index.d.ts +8 -0
  81. package/dist/types/sdk/broker/lifecycle-ledger.d.ts +95 -0
  82. package/dist/types/sdk/broker/lifecycle.d.ts +85 -0
  83. package/dist/types/sdk/broker/process-incarnation.d.ts +14 -0
  84. package/dist/types/sdk/broker/runtime.d.ts +33 -0
  85. package/dist/types/sdk/broker/session-index.d.ts +57 -0
  86. package/dist/types/sdk/broker/state-version.d.ts +8 -0
  87. package/dist/types/sdk/broker/transport.d.ts +9 -0
  88. package/dist/types/sdk/bus/chat-command-policy.d.ts +49 -0
  89. package/dist/types/sdk/bus/chat-daemon-cli.d.ts +21 -0
  90. package/dist/types/sdk/bus/chat-daemon-control.d.ts +111 -0
  91. package/dist/types/sdk/bus/chat-daemon-runtime.d.ts +77 -0
  92. package/dist/types/sdk/bus/chat-effect-journal.d.ts +84 -0
  93. package/dist/types/{notifications → sdk/bus}/config-commands.d.ts +7 -2
  94. package/dist/types/sdk/bus/config.d.ts +274 -0
  95. package/dist/types/sdk/bus/conversation-store.d.ts +72 -0
  96. package/dist/types/sdk/bus/discord-conversation.d.ts +58 -0
  97. package/dist/types/sdk/bus/discord-daemon.d.ts +45 -0
  98. package/dist/types/sdk/bus/discord-live-provider.d.ts +70 -0
  99. package/dist/types/sdk/bus/discord-provider.d.ts +85 -0
  100. package/dist/types/{notifications → sdk/bus}/html-format.d.ts +2 -2
  101. package/dist/types/{notifications → sdk/bus}/index.d.ts +113 -13
  102. package/dist/types/{notifications → sdk/bus}/lifecycle-control-runtime.d.ts +4 -2
  103. package/dist/types/{notifications → sdk/bus}/lifecycle-orchestrator.d.ts +18 -21
  104. package/dist/types/{notifications → sdk/bus}/managed-daemon.d.ts +1 -1
  105. package/dist/types/sdk/bus/native-runtime-compatibility.d.ts +13 -0
  106. package/dist/types/sdk/bus/notification-orchestration.d.ts +170 -0
  107. package/dist/types/{notifications → sdk/bus}/notification-service.d.ts +7 -1
  108. package/dist/types/sdk/bus/session-control.d.ts +83 -0
  109. package/dist/types/sdk/bus/slack-conversation.d.ts +56 -0
  110. package/dist/types/sdk/bus/slack-daemon.d.ts +60 -0
  111. package/dist/types/sdk/bus/slack-live-provider.d.ts +59 -0
  112. package/dist/types/sdk/bus/slack-provider.d.ts +55 -0
  113. package/dist/types/{notifications → sdk/bus}/telegram-cli.d.ts +4 -4
  114. package/dist/types/{notifications → sdk/bus}/telegram-daemon-cli.d.ts +14 -5
  115. package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +12 -0
  116. package/dist/types/{notifications → sdk/bus}/telegram-daemon-control.d.ts +2 -2
  117. package/dist/types/{notifications → sdk/bus}/telegram-daemon.d.ts +55 -17
  118. package/dist/types/{notifications → sdk/bus}/telegram-reference.d.ts +2 -2
  119. package/dist/types/sdk/bus/telegram-setup.d.ts +128 -0
  120. package/dist/types/{notifications → sdk/bus}/topic-registry.d.ts +11 -0
  121. package/dist/types/sdk/cli/index.d.ts +1 -0
  122. package/dist/types/sdk/cli/session-cli.d.ts +19 -0
  123. package/dist/types/sdk/client/client.d.ts +1 -0
  124. package/dist/types/sdk/client/discovery.d.ts +27 -0
  125. package/dist/types/sdk/client/index.d.ts +2 -0
  126. package/dist/types/sdk/host/control/dispatch.d.ts +34 -0
  127. package/dist/types/sdk/host/control/index.d.ts +2 -0
  128. package/dist/types/sdk/host/control/operations.d.ts +65 -0
  129. package/dist/types/sdk/host/events.d.ts +35 -0
  130. package/dist/types/sdk/host/host.d.ts +35 -0
  131. package/dist/types/sdk/host/index.d.ts +4 -0
  132. package/dist/types/sdk/host/query/cursor.d.ts +62 -0
  133. package/dist/types/sdk/host/query/handlers.d.ts +70 -0
  134. package/dist/types/sdk/host/query/index.d.ts +3 -0
  135. package/dist/types/sdk/host/query/revision-store.d.ts +60 -0
  136. package/dist/types/sdk/host/reverse-leases.d.ts +45 -0
  137. package/dist/types/sdk/host/types.d.ts +32 -0
  138. package/dist/types/sdk/index.d.ts +6 -0
  139. package/dist/types/sdk/lifecycle-session.d.ts +14 -0
  140. package/dist/types/sdk/mcp/index.d.ts +1 -0
  141. package/dist/types/sdk/mcp/server.d.ts +37 -0
  142. package/dist/types/sdk/models.d.ts +44 -0
  143. package/dist/types/sdk/protocol/adapter-validation.d.ts +14 -0
  144. package/dist/types/sdk/protocol/operation-registry.d.ts +24 -0
  145. package/dist/types/{sdk.d.ts → sdk/session.d.ts} +44 -38
  146. package/dist/types/sdk/startup-capability.d.ts +50 -0
  147. package/dist/types/session/agent-session.d.ts +114 -21
  148. package/dist/types/session/default-model-selection.d.ts +25 -0
  149. package/dist/types/session/fallback-chain-controller.d.ts +52 -0
  150. package/dist/types/session/session-manager.d.ts +58 -1
  151. package/dist/types/setup/credential-auto-import.d.ts +36 -6
  152. package/dist/types/tools/ask-answer-registry.d.ts +1 -1
  153. package/dist/types/tools/browser/benchmark/detector-report.d.ts +63 -0
  154. package/dist/types/tools/browser/benchmark/run-suite.d.ts +18 -0
  155. package/dist/types/tools/browser/launch.d.ts +22 -0
  156. package/dist/types/tools/browser/profile-discovery.d.ts +31 -0
  157. package/dist/types/tools/browser/profile-posture.d.ts +37 -0
  158. package/dist/types/tools/browser/profile-reuse.d.ts +39 -0
  159. package/dist/types/tools/browser/profile-warmup.d.ts +39 -0
  160. package/dist/types/tools/browser/registry.d.ts +19 -0
  161. package/dist/types/tools/browser/tab-protocol.d.ts +4 -0
  162. package/dist/types/tools/index.d.ts +8 -8
  163. package/package.json +34 -13
  164. package/scripts/build-sdk-package-smoke.ts +94 -0
  165. package/scripts/capture-notifications-settings-showcase.ts +435 -0
  166. package/scripts/compile-args.ts +4 -2
  167. package/scripts/g005-daemon-smoke.ts +4 -5
  168. package/scripts/g011-daemon-path-smoke.ts +5 -5
  169. package/scripts/generate-sdk-adapter-parity-manifest.ts +163 -0
  170. package/scripts/generate-sdk-operation-inventory.ts +867 -0
  171. package/scripts/generate-telegram-baseline-manifest.ts +128 -0
  172. package/scripts/manifest-schema.ts +124 -0
  173. package/scripts/run-test-manifest.ts +153 -0
  174. package/scripts/run-threat-model-check.ts +157 -0
  175. package/scripts/verify-gjc-sdk-canonicalization.ts +3467 -0
  176. package/scripts/verify-gjc-sdk-rename.ts +90 -0
  177. package/src/append-only-mode.ts +1 -1
  178. package/src/cli/args.ts +43 -12
  179. package/src/cli/auth-gateway-cli.ts +2 -2
  180. package/src/cli/config-cli.ts +2 -1
  181. package/src/cli/daemon-cli.ts +63 -14
  182. package/src/cli/list-models.ts +1 -1
  183. package/src/cli/notify-cli.ts +288 -286
  184. package/src/cli.ts +21 -2
  185. package/src/commands/daemon.ts +50 -6
  186. package/src/commands/harness.ts +93 -36
  187. package/src/commands/launch.ts +5 -2
  188. package/src/commands/mcp-serve.ts +19 -12
  189. package/src/commands/notify.ts +36 -3
  190. package/src/commands/sdk.ts +426 -0
  191. package/src/commit/agentic/agent.ts +1 -0
  192. package/src/config/atomic-yaml-patch.ts +423 -0
  193. package/src/config/model-profile-activation.ts +240 -89
  194. package/src/config/model-profiles.ts +18 -15
  195. package/src/config/model-registry.ts +51 -26
  196. package/src/config/model-resolver.ts +138 -51
  197. package/src/config/model-selector-value.ts +50 -0
  198. package/src/config/models-config-schema.ts +14 -21
  199. package/src/config/settings-schema.ts +128 -10
  200. package/src/config/settings.ts +1120 -158
  201. package/src/coordinator-mcp/model-preset.ts +74 -20
  202. package/src/coordinator-mcp/server.ts +1597 -3052
  203. package/src/daemon/builtin.ts +8 -5
  204. package/src/daemon/control-types.ts +1 -1
  205. package/src/defaults/gjc/skills/team/SKILL.md +4 -4
  206. package/src/discovery/mcp-json.ts +327 -20
  207. package/src/extensibility/custom-tools/types.ts +1 -1
  208. package/src/extensibility/extensions/compact-handler.ts +3 -3
  209. package/src/extensibility/extensions/get-commands-handler.ts +2 -2
  210. package/src/extensibility/extensions/loader.ts +69 -5
  211. package/src/extensibility/extensions/runner.ts +112 -4
  212. package/src/extensibility/extensions/types.ts +176 -17
  213. package/src/extensibility/hooks/types.ts +1 -1
  214. package/src/gjc-runtime/launch-tmux.ts +170 -86
  215. package/src/gjc-runtime/psmux-detect.ts +82 -4
  216. package/src/gjc-runtime/session-state-sidecar.ts +41 -31
  217. package/src/gjc-runtime/team-runtime.ts +54 -35
  218. package/src/gjc-runtime/tmux-owner-isolation-cli.ts +53 -17
  219. package/src/gjc-runtime/tmux-owner-isolation.ts +1 -1
  220. package/src/gjc-runtime/tmux-sessions.ts +19 -13
  221. package/src/gjc-runtime/ultragoal-guard.ts +53 -6
  222. package/src/gjc-runtime/ultragoal-runtime.ts +155 -3
  223. package/src/gjc-runtime/windows-powershell-command.ts +58 -0
  224. package/src/harness-control-plane/operate.ts +9 -9
  225. package/src/harness-control-plane/owner.ts +283 -39
  226. package/src/harness-control-plane/receipts.ts +0 -1
  227. package/src/harness-control-plane/sdk-transport.ts +395 -0
  228. package/src/harness-control-plane/session-transport.ts +94 -0
  229. package/src/harness-control-plane/types.ts +1 -1
  230. package/src/internal-urls/docs-index.generated.ts +34 -35
  231. package/src/lsp/client.ts +42 -6
  232. package/src/lsp/index.ts +2 -2
  233. package/src/main.ts +299 -204
  234. package/src/modes/DESIGN.md +258 -0
  235. package/src/modes/acp/acp-agent.ts +1228 -2612
  236. package/src/modes/acp/acp-client-bridge.ts +2 -20
  237. package/src/modes/acp/acp-event-mapper.ts +18 -2
  238. package/src/modes/acp/acp-mode.ts +8 -36
  239. package/src/modes/acp/permission-mode.ts +25 -0
  240. package/src/modes/acp/startup-options.ts +6 -0
  241. package/src/modes/components/agent-dashboard.ts +37 -17
  242. package/src/modes/components/model-selector.ts +93 -35
  243. package/src/modes/components/notifications-settings-editor.ts +1379 -0
  244. package/src/modes/components/settings-selector.ts +60 -11
  245. package/src/modes/components/welcome.ts +4 -4
  246. package/src/modes/controllers/command-controller.ts +1 -2
  247. package/src/modes/controllers/event-controller.ts +11 -16
  248. package/src/modes/controllers/extension-ui-controller.ts +348 -4
  249. package/src/modes/controllers/selector-controller.ts +674 -36
  250. package/src/modes/index.ts +0 -22
  251. package/src/modes/interactive-mode.ts +59 -20
  252. package/src/modes/runtime-init.ts +298 -6
  253. package/src/modes/shared/agent-wire/approval-gate.ts +9 -11
  254. package/src/modes/shared/agent-wire/deep-interview-gate.ts +10 -11
  255. package/src/modes/shared/agent-wire/event-contract.ts +7 -8
  256. package/src/modes/shared/agent-wire/event-envelope.ts +9 -17
  257. package/src/modes/shared/agent-wire/event-observation.ts +16 -7
  258. package/src/modes/shared/agent-wire/workflow-gate-broker.ts +1254 -87
  259. package/src/modes/shared/agent-wire/workflow-gate-schema.ts +15 -15
  260. package/src/modes/shared/agent-wire/workflow-gate-types.ts +113 -0
  261. package/src/modes/types.ts +5 -0
  262. package/src/runtime-mcp/client.ts +94 -19
  263. package/src/runtime-mcp/config.ts +27 -15
  264. package/src/runtime-mcp/manager.ts +343 -105
  265. package/src/runtime-mcp/oauth-flow.ts +42 -12
  266. package/src/runtime-mcp/transports/http.ts +49 -19
  267. package/src/runtime-mcp/transports/stdio.ts +47 -28
  268. package/src/runtime-mcp/types.ts +10 -0
  269. package/src/sdk/acp/adapter.ts +418 -0
  270. package/src/sdk/acp/index.ts +2 -0
  271. package/src/sdk/broker/broker.ts +642 -0
  272. package/src/sdk/broker/discovery.ts +94 -0
  273. package/src/sdk/broker/ensure.ts +249 -0
  274. package/src/sdk/broker/identity.ts +42 -0
  275. package/src/sdk/broker/index.ts +8 -0
  276. package/src/sdk/broker/internal-source-marker-2178.txt +1 -0
  277. package/src/sdk/broker/internal-source.bunfig.toml +1 -0
  278. package/src/sdk/broker/lifecycle-ledger.ts +286 -0
  279. package/src/sdk/broker/lifecycle.ts +2157 -0
  280. package/src/sdk/broker/process-incarnation.ts +159 -0
  281. package/src/sdk/broker/runtime.ts +164 -0
  282. package/src/sdk/broker/session-index.ts +318 -0
  283. package/src/sdk/broker/state-version.ts +23 -0
  284. package/src/sdk/broker/transport.ts +125 -0
  285. package/src/sdk/bus/chat-command-policy.ts +107 -0
  286. package/src/sdk/bus/chat-daemon-cli.ts +214 -0
  287. package/src/sdk/bus/chat-daemon-control.ts +713 -0
  288. package/src/sdk/bus/chat-daemon-runtime.ts +526 -0
  289. package/src/sdk/bus/chat-effect-journal.ts +353 -0
  290. package/src/{notifications → sdk/bus}/config-commands.ts +39 -10
  291. package/src/sdk/bus/config.ts +433 -0
  292. package/src/sdk/bus/conversation-store.ts +391 -0
  293. package/src/sdk/bus/discord-conversation.ts +85 -0
  294. package/src/sdk/bus/discord-daemon.ts +2275 -0
  295. package/src/sdk/bus/discord-live-provider.ts +521 -0
  296. package/src/sdk/bus/discord-provider.ts +56 -0
  297. package/src/{notifications → sdk/bus}/html-format.ts +2 -2
  298. package/src/sdk/bus/index.ts +3943 -0
  299. package/src/{notifications → sdk/bus}/lifecycle-commands.ts +2 -0
  300. package/src/{notifications → sdk/bus}/lifecycle-control-runtime.ts +225 -196
  301. package/src/{notifications → sdk/bus}/lifecycle-orchestrator.ts +161 -74
  302. package/src/{notifications → sdk/bus}/managed-daemon.ts +2 -2
  303. package/src/sdk/bus/native-runtime-compatibility.ts +42 -0
  304. package/src/sdk/bus/natives-augment.d.ts +38 -0
  305. package/src/sdk/bus/notification-orchestration.ts +535 -0
  306. package/src/{notifications → sdk/bus}/notification-service.ts +106 -12
  307. package/src/sdk/bus/session-control.ts +333 -0
  308. package/src/sdk/bus/slack-conversation.ts +74 -0
  309. package/src/sdk/bus/slack-daemon.ts +2144 -0
  310. package/src/sdk/bus/slack-live-provider.ts +380 -0
  311. package/src/sdk/bus/slack-provider.ts +76 -0
  312. package/src/{notifications → sdk/bus}/telegram-cli.ts +8 -8
  313. package/src/sdk/bus/telegram-daemon-cli.ts +330 -0
  314. package/src/sdk/bus/telegram-daemon-contract.ts +14 -0
  315. package/src/{notifications → sdk/bus}/telegram-daemon-control.ts +4 -4
  316. package/src/{notifications → sdk/bus}/telegram-daemon.ts +502 -54
  317. package/src/{notifications → sdk/bus}/telegram-reference.ts +2 -2
  318. package/src/sdk/bus/telegram-setup.ts +663 -0
  319. package/src/{notifications → sdk/bus}/topic-registry.ts +32 -0
  320. package/src/sdk/cli/index.ts +1 -0
  321. package/src/sdk/cli/session-cli.ts +275 -0
  322. package/src/sdk/client/client.ts +1 -0
  323. package/src/sdk/client/discovery.ts +108 -0
  324. package/src/sdk/client/index.ts +2 -0
  325. package/src/sdk/host/control/dispatch.ts +367 -0
  326. package/src/sdk/host/control/index.ts +10 -0
  327. package/src/sdk/host/control/operations.ts +63 -0
  328. package/src/sdk/host/events.ts +91 -0
  329. package/src/sdk/host/host.ts +296 -0
  330. package/src/sdk/host/index.ts +4 -0
  331. package/src/sdk/host/query/cursor.ts +189 -0
  332. package/src/sdk/host/query/handlers.ts +533 -0
  333. package/src/sdk/host/query/index.ts +3 -0
  334. package/src/sdk/host/query/revision-store.ts +1126 -0
  335. package/src/sdk/host/reverse-leases.ts +325 -0
  336. package/src/sdk/host/types.ts +29 -0
  337. package/src/sdk/index.ts +13 -0
  338. package/src/sdk/lifecycle-session.ts +39 -0
  339. package/src/sdk/mcp/index.ts +1 -0
  340. package/src/sdk/mcp/server.ts +332 -0
  341. package/src/sdk/models.ts +168 -0
  342. package/src/sdk/protocol/adapter-validation.ts +48 -0
  343. package/src/sdk/protocol/operation-inventory.generated.json +5654 -0
  344. package/src/sdk/protocol/operation-registry.ts +312 -0
  345. package/src/{sdk.ts → sdk/session.ts} +339 -212
  346. package/src/sdk/startup-capability.ts +189 -0
  347. package/src/session/agent-session.ts +2453 -894
  348. package/src/session/default-model-selection.ts +93 -0
  349. package/src/session/fallback-chain-controller.ts +136 -0
  350. package/src/session/session-manager.ts +438 -11
  351. package/src/session/session-storage.ts +8 -1
  352. package/src/setup/credential-auto-import.ts +290 -35
  353. package/src/setup/hermes/templates/operator-instructions.v1.md +3 -5
  354. package/src/slash-commands/builtin-registry.ts +2 -1
  355. package/src/task/executor.ts +62 -13
  356. package/src/tools/ask-answer-registry.ts +1 -1
  357. package/src/tools/ask.ts +13 -8
  358. package/src/tools/browser/STEALTH-THIRD-PARTY-NOTICES.md +26 -0
  359. package/src/tools/browser/benchmark/detector-report.ts +157 -0
  360. package/src/tools/browser/benchmark/run-suite.ts +39 -0
  361. package/src/tools/browser/launch.ts +124 -19
  362. package/src/tools/browser/profile-discovery.ts +63 -0
  363. package/src/tools/browser/profile-posture.ts +59 -0
  364. package/src/tools/browser/profile-reuse.ts +102 -0
  365. package/src/tools/browser/profile-warmup.ts +109 -0
  366. package/src/tools/browser/registry.ts +87 -11
  367. package/src/tools/browser/tab-protocol.ts +1 -0
  368. package/src/tools/browser/tab-supervisor.ts +1 -0
  369. package/src/tools/browser/tab-worker.ts +1 -1
  370. package/src/tools/browser.ts +6 -0
  371. package/src/tools/index.ts +8 -8
  372. package/src/tools/puppeteer/14_stealth_permissions.txt +57 -0
  373. package/src/tools/puppeteer/15_stealth_webrtc.txt +60 -0
  374. package/src/tools/telegram-send.ts +2 -2
  375. package/vendor/insane-search/MANIFEST.json +2 -1
  376. package/vendor/insane-search/engine/bias_check.py +4 -1
  377. package/vendor/insane-search/engine/phase0.py +26 -1
  378. package/dist/types/harness-control-plane/rpc-adapter.d.ts +0 -69
  379. package/dist/types/modes/bridge/auth.d.ts +0 -12
  380. package/dist/types/modes/bridge/bridge-client-bridge.d.ts +0 -9
  381. package/dist/types/modes/bridge/bridge-mode.d.ts +0 -47
  382. package/dist/types/modes/bridge/bridge-ui-context.d.ts +0 -88
  383. package/dist/types/modes/bridge/event-stream.d.ts +0 -8
  384. package/dist/types/modes/rpc/host-tools.d.ts +0 -1
  385. package/dist/types/modes/rpc/host-uris.d.ts +0 -1
  386. package/dist/types/modes/rpc/rpc-client.d.ts +0 -299
  387. package/dist/types/modes/rpc/rpc-mode.d.ts +0 -86
  388. package/dist/types/modes/rpc/rpc-socket-security.d.ts +0 -10
  389. package/dist/types/modes/rpc/rpc-types.d.ts +0 -810
  390. package/dist/types/modes/shared/agent-wire/command-contract.d.ts +0 -18
  391. package/dist/types/modes/shared/agent-wire/command-dispatch.d.ts +0 -37
  392. package/dist/types/modes/shared/agent-wire/command-validation.d.ts +0 -2
  393. package/dist/types/modes/shared/agent-wire/handshake.d.ts +0 -56
  394. package/dist/types/modes/shared/agent-wire/host-tool-bridge.d.ts +0 -16
  395. package/dist/types/modes/shared/agent-wire/host-uri-bridge.d.ts +0 -17
  396. package/dist/types/modes/shared/agent-wire/protocol.d.ts +0 -25
  397. package/dist/types/modes/shared/agent-wire/responses.d.ts +0 -4
  398. package/dist/types/modes/shared/agent-wire/scopes.d.ts +0 -18
  399. package/dist/types/modes/shared/agent-wire/session-registry.d.ts +0 -25
  400. package/dist/types/modes/shared/agent-wire/ui-request-broker.d.ts +0 -42
  401. package/dist/types/modes/shared/agent-wire/ui-result.d.ts +0 -27
  402. package/dist/types/modes/shared/agent-wire/unattended-action-policy.d.ts +0 -29
  403. package/dist/types/modes/shared/agent-wire/unattended-audit.d.ts +0 -68
  404. package/dist/types/modes/shared/agent-wire/unattended-run-controller.d.ts +0 -166
  405. package/dist/types/modes/shared/agent-wire/unattended-session.d.ts +0 -127
  406. package/dist/types/notifications/config.d.ts +0 -132
  407. package/src/harness-control-plane/rpc-adapter.ts +0 -290
  408. package/src/modes/bridge/auth.ts +0 -41
  409. package/src/modes/bridge/bridge-client-bridge.ts +0 -47
  410. package/src/modes/bridge/bridge-mode.ts +0 -675
  411. package/src/modes/bridge/bridge-ui-context.ts +0 -200
  412. package/src/modes/bridge/event-stream.ts +0 -70
  413. package/src/modes/rpc/host-tools.ts +0 -1
  414. package/src/modes/rpc/host-uris.ts +0 -1
  415. package/src/modes/rpc/rpc-client.ts +0 -1166
  416. package/src/modes/rpc/rpc-mode.ts +0 -1029
  417. package/src/modes/rpc/rpc-socket-security.ts +0 -115
  418. package/src/modes/rpc/rpc-types.ts +0 -637
  419. package/src/modes/shared/agent-wire/command-contract.ts +0 -18
  420. package/src/modes/shared/agent-wire/command-dispatch.ts +0 -498
  421. package/src/modes/shared/agent-wire/command-validation.ts +0 -181
  422. package/src/modes/shared/agent-wire/handshake.ts +0 -157
  423. package/src/modes/shared/agent-wire/host-tool-bridge.ts +0 -197
  424. package/src/modes/shared/agent-wire/host-uri-bridge.ts +0 -236
  425. package/src/modes/shared/agent-wire/protocol.ts +0 -46
  426. package/src/modes/shared/agent-wire/responses.ts +0 -17
  427. package/src/modes/shared/agent-wire/scopes.ts +0 -94
  428. package/src/modes/shared/agent-wire/session-registry.ts +0 -109
  429. package/src/modes/shared/agent-wire/ui-request-broker.ts +0 -150
  430. package/src/modes/shared/agent-wire/ui-result.ts +0 -48
  431. package/src/modes/shared/agent-wire/unattended-action-policy.ts +0 -365
  432. package/src/modes/shared/agent-wire/unattended-audit.ts +0 -176
  433. package/src/modes/shared/agent-wire/unattended-run-controller.ts +0 -426
  434. package/src/modes/shared/agent-wire/unattended-session.ts +0 -528
  435. package/src/notifications/config.ts +0 -219
  436. package/src/notifications/index.ts +0 -1835
  437. package/src/notifications/telegram-daemon-cli.ts +0 -243
  438. package/src/tools/puppeteer/09_stealth_locale.txt +0 -46
  439. /package/dist/types/{notifications → sdk/bus}/attachment-registry.d.ts +0 -0
  440. /package/dist/types/{notifications → sdk/bus}/chat-adapters.d.ts +0 -0
  441. /package/dist/types/{notifications → sdk/bus}/daemon-paths.d.ts +0 -0
  442. /package/dist/types/{notifications → sdk/bus}/engine.d.ts +0 -0
  443. /package/dist/types/{notifications → sdk/bus}/helpers.d.ts +0 -0
  444. /package/dist/types/{notifications → sdk/bus}/lifecycle-commands.d.ts +0 -0
  445. /package/dist/types/{notifications → sdk/bus}/operator-runtime.d.ts +0 -0
  446. /package/dist/types/{notifications → sdk/bus}/rate-limit-pool.d.ts +0 -0
  447. /package/dist/types/{notifications → sdk/bus}/recent-activity.d.ts +0 -0
  448. /package/dist/types/{notifications → sdk/bus}/reply-sent-store.d.ts +0 -0
  449. /package/dist/types/{notifications → sdk/bus}/rich-draft.d.ts +0 -0
  450. /package/dist/types/{notifications → sdk/bus}/rich-render.d.ts +0 -0
  451. /package/dist/types/{notifications → sdk/bus}/threaded-inbound.d.ts +0 -0
  452. /package/dist/types/{notifications → sdk/bus}/threaded-render.d.ts +0 -0
  453. /package/src/{notifications → sdk/bus}/attachment-registry.ts +0 -0
  454. /package/src/{notifications → sdk/bus}/chat-adapters.ts +0 -0
  455. /package/src/{notifications → sdk/bus}/daemon-paths.ts +0 -0
  456. /package/src/{notifications → sdk/bus}/engine.ts +0 -0
  457. /package/src/{notifications → sdk/bus}/helpers.ts +0 -0
  458. /package/src/{notifications → sdk/bus}/operator-runtime.ts +0 -0
  459. /package/src/{notifications → sdk/bus}/rate-limit-pool.ts +0 -0
  460. /package/src/{notifications → sdk/bus}/recent-activity.ts +0 -0
  461. /package/src/{notifications → sdk/bus}/reply-sent-store.ts +0 -0
  462. /package/src/{notifications → sdk/bus}/rich-draft.ts +0 -0
  463. /package/src/{notifications → sdk/bus}/rich-render.ts +0 -0
  464. /package/src/{notifications → sdk/bus}/threaded-inbound.ts +0 -0
  465. /package/src/{notifications → sdk/bus}/threaded-render.ts +0 -0
@@ -6,7 +6,7 @@ import type { CredentialDisabledEvent, ImageContent, Model, ProviderResponseMeta
6
6
  import type { KeyId } from "@gajae-code/tui";
7
7
  import { logger } from "@gajae-code/utils";
8
8
  import type { ModelRegistry } from "../../config/model-registry";
9
- import type { WorkflowGateEmitter } from "../../modes/shared/agent-wire/unattended-session";
9
+ import type { WorkflowGateEmitter } from "../../modes/shared/agent-wire/workflow-gate-broker";
10
10
  import { type Theme, theme } from "../../modes/theme/theme";
11
11
  import type { SessionManager } from "../../session/session-manager";
12
12
  import type {
@@ -182,10 +182,41 @@ export class ExtensionRunner {
182
182
  #waitForIdleFn: () => Promise<void> = async () => {};
183
183
  #abortFn: () => void = () => {};
184
184
  #hasPendingMessagesFn: () => boolean = () => false;
185
+ #getPendingMessageCountsFn: () => { steering: number; followUp: number; nextTurn: number } = () => ({
186
+ steering: 0,
187
+ followUp: 0,
188
+ nextTurn: 0,
189
+ });
185
190
  #getContextUsageFn: () => ContextUsage | undefined = () => undefined;
186
191
  #compactFn: (instructionsOrOptions?: string | CompactOptions) => Promise<void> = async () => {};
187
192
  #getSystemPromptFn: () => string[] = () => [];
188
193
  #getWorkflowGateFn: () => WorkflowGateEmitter | undefined = () => undefined;
194
+ #clearContextFn: () => Promise<boolean> = async () => false;
195
+ #getTranscriptFn: ExtensionContext["getTranscript"] = () => [];
196
+ #getTranscriptBodyFn: ExtensionContext["getTranscriptBody"] = () => undefined;
197
+ #getGoalStateFn: ExtensionContext["getGoalState"] = () => undefined;
198
+ #getTodoStateFn: ExtensionContext["getTodoState"] = () => undefined;
199
+ #getQueuedMessagesFn: ExtensionContext["getQueuedMessages"] = () => [];
200
+ #getActiveToolsFn: ExtensionContext["getActiveTools"] = () => [];
201
+ #getAllToolsFn: ExtensionContext["getAllTools"] = () => [];
202
+ #cycleModelFn: ExtensionContextActions["cycleModel"] = undefined;
203
+ #cycleThinkingLevelFn: ExtensionContextActions["cycleThinkingLevel"] = undefined;
204
+ #setQueueModeFn: ExtensionContextActions["setQueueMode"] = undefined;
205
+ #getSkillStateFn: ExtensionContextActions["getSkillState"] = undefined;
206
+ #getConfigItemsFn: ExtensionContextActions["getConfigItems"] = undefined;
207
+ #getBranchCandidatesFn: ExtensionContextActions["getBranchCandidates"] = undefined;
208
+ #getExtensionsFn: ExtensionContextActions["getExtensions"] = undefined;
209
+ #getArtifactFn: ExtensionContextActions["getArtifact"] = undefined;
210
+ #getArtifactRangeFn: ExtensionContextActions["getArtifactRange"] = undefined;
211
+
212
+ #getJobsFn: ExtensionContextActions["getJobs"] = undefined;
213
+ #sdkControlFn: ExtensionContextActions["sdkControl"] = undefined;
214
+ #setSdkPermissionProviderFn: ExtensionContextActions["setSdkPermissionProvider"] = undefined;
215
+
216
+ #invokeSkillFn: ExtensionContextActions["invokeSkill"] = undefined;
217
+ #setPlanModeFn: ExtensionContextActions["setPlanMode"] = undefined;
218
+ #operateGoalFn: ExtensionContextActions["operateGoal"] = undefined;
219
+
189
220
  #newSessionHandler: NewSessionHandler = async () => ({ cancelled: false });
190
221
  #branchHandler: BranchHandler = async () => ({ cancelled: false });
191
222
  #navigateTreeHandler: NavigateTreeHandler = async () => ({ cancelled: false });
@@ -249,6 +280,14 @@ export class ExtensionRunner {
249
280
  this.runtime.setModel = actions.setModel;
250
281
  this.runtime.getThinkingLevel = actions.getThinkingLevel;
251
282
  this.runtime.setThinkingLevel = actions.setThinkingLevel;
283
+ this.runtime.getThinkingVisibility = actions.getThinkingVisibility;
284
+ this.runtime.setThinkingVisibility = actions.setThinkingVisibility;
285
+ this.runtime.cycleThinkingLevel = actions.cycleThinkingLevel;
286
+ this.runtime.setThinkingLevelForControl = actions.setThinkingLevelForControl;
287
+ this.runtime.setThinkingVisibilityForControl = actions.setThinkingVisibilityForControl;
288
+ this.runtime.setModelTemporaryForControl = actions.setModelTemporaryForControl;
289
+ this.runtime.fetchUsageReportsForControl = actions.fetchUsageReportsForControl;
290
+ this.runtime.getThinkingScopeForControl = actions.getThinkingScopeForControl;
252
291
  this.runtime.getSessionName = actions.getSessionName;
253
292
  this.runtime.setSessionName = actions.setSessionName;
254
293
 
@@ -257,9 +296,36 @@ export class ExtensionRunner {
257
296
  this.#isIdleFn = contextActions.isIdle;
258
297
  this.#abortFn = contextActions.abort;
259
298
  this.#hasPendingMessagesFn = contextActions.hasPendingMessages;
299
+ this.#getPendingMessageCountsFn =
300
+ contextActions.getPendingMessageCounts ?? (() => ({ steering: 0, followUp: 0, nextTurn: 0 }));
260
301
  this.#shutdownHandler = contextActions.shutdown;
261
302
  this.#getSystemPromptFn = contextActions.getSystemPrompt;
262
303
  this.#getWorkflowGateFn = contextActions.getWorkflowGate ?? (() => undefined);
304
+ this.#clearContextFn = contextActions.clearContext ?? (async () => false);
305
+ this.#getTranscriptFn = contextActions.getTranscript ?? (() => []);
306
+ this.#getTranscriptBodyFn = contextActions.getTranscriptBody ?? (() => undefined);
307
+ this.#getGoalStateFn = contextActions.getGoalState ?? (() => undefined);
308
+ this.#getTodoStateFn = contextActions.getTodoState ?? (() => undefined);
309
+ this.#getQueuedMessagesFn = contextActions.getQueuedMessages ?? (() => []);
310
+ this.#getActiveToolsFn = contextActions.getActiveTools ?? (() => []);
311
+ this.#getAllToolsFn = contextActions.getAllTools ?? (() => []);
312
+ this.#cycleModelFn = contextActions.cycleModel;
313
+ this.#cycleThinkingLevelFn = contextActions.cycleThinkingLevel;
314
+ this.#setQueueModeFn = contextActions.setQueueMode;
315
+ this.#getSkillStateFn = contextActions.getSkillState;
316
+ this.#invokeSkillFn = contextActions.invokeSkill;
317
+ this.#setPlanModeFn = contextActions.setPlanMode;
318
+ this.#operateGoalFn = contextActions.operateGoal;
319
+
320
+ this.#getConfigItemsFn = contextActions.getConfigItems;
321
+ this.#getBranchCandidatesFn = contextActions.getBranchCandidates;
322
+ this.#getExtensionsFn = contextActions.getExtensions;
323
+ this.#getArtifactFn = contextActions.getArtifact;
324
+ this.#getArtifactRangeFn = contextActions.getArtifactRange;
325
+
326
+ this.#getJobsFn = contextActions.getJobs;
327
+ this.#sdkControlFn = contextActions.sdkControl;
328
+ this.#setSdkPermissionProviderFn = contextActions.setSdkPermissionProvider;
263
329
 
264
330
  // Command context actions (optional, only for interactive mode)
265
331
  if (commandContextActions) {
@@ -297,8 +363,8 @@ export class ExtensionRunner {
297
363
  * Forward a `credential_disabled` event from `AuthStorage` to extension handlers.
298
364
  *
299
365
  * If {@link initialize} has not yet run, the event is buffered and replayed once
300
- * initialize wires the runtime/UI context. This matters because mode controllers
301
- * (interactive, RPC, ACP, print, subagent) call `initialize()` AFTER `createAgentSession`
366
+ * initialize wires the runtime/UI context. This matters because session frontends
367
+ * (interactive, ACP, print, and subagent) call `initialize()` AFTER `createAgentSession`
302
368
  * returns, but `AuthStorage` can fire `credential_disabled` during startup model probes
303
369
  * inside `createAgentSession()`. Without deferral, extension handlers would observe
304
370
  * `hasUI=false`, an unset model, and no-op runtime actions on exactly the headline
@@ -483,10 +549,52 @@ export class ExtensionRunner {
483
549
  isIdle: () => this.#isIdleFn(),
484
550
  abort: () => this.#abortFn(),
485
551
  hasPendingMessages: () => this.#hasPendingMessagesFn(),
552
+ getPendingMessageCounts: () => this.#getPendingMessageCountsFn(),
553
+ getTranscript: () => this.#getTranscriptFn(),
554
+ getTranscriptBody: entryId => this.#getTranscriptBodyFn(entryId),
555
+ getGoalState: () => this.#getGoalStateFn(),
556
+ getTodoState: () => this.#getTodoStateFn(),
557
+ getQueuedMessages: () => this.#getQueuedMessagesFn(),
558
+ getActiveTools: () => this.#getActiveToolsFn(),
559
+ getAllTools: () => this.#getAllToolsFn(),
560
+ cycleModel: async () => await this.#cycleModelFn?.(),
561
+ cycleThinkingLevel: () => this.#cycleThinkingLevelFn?.(),
562
+ setQueueMode: (kind, mode) => this.#setQueueModeFn?.(kind, mode) ?? false,
563
+ invokeSkill: async (name, args) => await this.#invokeSkillFn?.(name, args),
564
+
565
+ setPlanMode: on => this.#setPlanModeFn?.(on),
566
+ operateGoal: async (op, objective) => await this.#operateGoalFn?.(op, objective),
567
+
568
+ getSkillState: () => this.#getSkillStateFn?.(),
569
+ getConfigItems: () => this.#getConfigItemsFn?.(),
570
+ getBranchCandidates: () => this.#getBranchCandidatesFn?.(),
571
+ getExtensions: () => this.#getExtensionsFn?.(),
572
+ getArtifact: id => this.#getArtifactFn?.(id),
573
+ getArtifactRange: (id, offset, length) => this.#getArtifactRangeFn?.(id, offset, length),
574
+
575
+ getJobs: () => this.#getJobsFn?.(),
576
+ sdkControl: (operation, input) => this.#sdkControlFn?.(operation, input),
577
+ setSdkPermissionProvider: provider => this.#setSdkPermissionProviderFn?.(provider),
578
+ sdkBindings: () => [
579
+ ...(this.#cycleModelFn ? ["cycleModel"] : []),
580
+ ...(this.#cycleThinkingLevelFn ? ["cycleThinkingLevel"] : []),
581
+ ...(this.#setQueueModeFn ? ["setQueueMode"] : []),
582
+ ...(this.#getSkillStateFn ? ["getSkillState"] : []),
583
+ ...(this.#getConfigItemsFn ? ["getConfigItems"] : []),
584
+ ...(this.#getBranchCandidatesFn ? ["getBranchCandidates"] : []),
585
+ ...(this.#getExtensionsFn ? ["getExtensions"] : []),
586
+ ...(this.#getArtifactRangeFn ? ["getArtifactRange"] : []),
587
+ ...(this.#getJobsFn ? ["getJobs"] : []),
588
+ ...(this.#sdkControlFn ? ["sdkControl"] : []),
589
+ ...(this.#invokeSkillFn ? ["invokeSkill"] : []),
590
+ ...(this.#setPlanModeFn ? ["setPlanMode"] : []),
591
+ ...(this.#operateGoalFn ? ["operateGoal"] : []),
592
+ ],
486
593
  shutdown: () => this.#shutdownHandler(),
487
594
  getSystemPrompt: () => [...this.#getSystemPromptFn()],
488
595
  hasQueuedMessages: () => this.#hasPendingMessagesFn(), // deprecated alias
489
596
  workflowGate: this.#getWorkflowGateFn(),
597
+ clearContext: () => this.#clearContextFn(),
490
598
  };
491
599
  }
492
600
 
@@ -734,7 +842,7 @@ export class ExtensionRunner {
734
842
  async emitInput(
735
843
  text: string,
736
844
  images: ImageContent[] | undefined,
737
- source: "interactive" | "rpc" | "extension",
845
+ source: "interactive" | "sdk" | "extension",
738
846
  ): Promise<InputEventResult> {
739
847
  const handlers = this.#handlersByEvent.get("input") ?? [];
740
848
  if (handlers.length === 0) return {};
@@ -7,6 +7,7 @@
7
7
  * - Register commands, keyboard shortcuts, and CLI flags
8
8
  * - Interact with the user via UI primitives
9
9
  */
10
+
10
11
  import type { AgentMessage, AgentToolResult, AgentToolUpdateCallback, ThinkingLevel } from "@gajae-code/agent-core";
11
12
  import type { CompactionResult } from "@gajae-code/agent-core/compaction";
12
13
  import type {
@@ -21,6 +22,7 @@ import type {
21
22
  Static,
22
23
  TextContent,
23
24
  TSchema,
25
+ UsageReport,
24
26
  } from "@gajae-code/ai";
25
27
  import type { OAuthCredentials, OAuthLoginCallbacks } from "@gajae-code/ai/utils/oauth/types";
26
28
  import type * as piCodingAgent from "@gajae-code/coding-agent";
@@ -32,8 +34,13 @@ import type { PythonResult } from "../../eval/py/executor";
32
34
  import type { BashResult } from "../../exec/bash-executor";
33
35
  import type { ExecOptions, ExecResult } from "../../exec/exec";
34
36
  import type { CustomEditor } from "../../modes/components/custom-editor";
35
- import type { WorkflowGateEmitter } from "../../modes/shared/agent-wire/unattended-session";
37
+ import type { WorkflowGateEmitter } from "../../modes/shared/agent-wire/workflow-gate-broker";
36
38
  import type { Theme } from "../../modes/theme/theme";
39
+ import type {
40
+ ClientBridgePermissionOption,
41
+ ClientBridgePermissionOutcome,
42
+ ClientBridgePermissionToolCall,
43
+ } from "../../session/client-bridge";
37
44
  import type { CustomMessage } from "../../session/messages";
38
45
  import type { ReadonlySessionManager, SessionManager } from "../../session/session-manager";
39
46
  import type {
@@ -114,7 +121,7 @@ export interface ExtensionUIDialogOptions {
114
121
  /**
115
122
  * For interactive TUI select dialogs, render the focused option across
116
123
  * multiple rows instead of truncating it. This is a select-only rendering
117
- * hint; non-TUI bridges (RPC, ACP) drop it and do not serialize it.
124
+ * hint; non-TUI clients (SDK, ACP) drop it and do not serialize it.
118
125
  */
119
126
  wrapFocused?: boolean;
120
127
  /**
@@ -128,7 +135,7 @@ export interface ExtensionUIDialogOptions {
128
135
  * inline: selecting it keeps the title and option list on screen and opens
129
136
  * a free-text input below the list. Submitting calls `onSubmit` with the
130
137
  * typed text and resolves the select with `optionLabel`; Escape returns to
131
- * option selection. Non-TUI bridges (RPC, ACP) drop it; callers must keep
138
+ * option selection. Non-TUI clients (SDK, ACP) drop it; callers must keep
132
139
  * a fallback path for selects that resolve `optionLabel` without invoking
133
140
  * `onSubmit`.
134
141
  */
@@ -164,7 +171,7 @@ export type ExtensionWidgetContent = string[] | ExtensionUiComponentFactory | un
164
171
 
165
172
  /**
166
173
  * UI context for extensions to request interactive UI.
167
- * Each mode (interactive, RPC, print) provides its own implementation.
174
+ * Interactive, SDK, and headless callers provide their own implementation.
168
175
  */
169
176
  // fallow-ignore-next-line code-duplication
170
177
  // Parallel to HookUIContext: extensions expose a strictly larger UI surface
@@ -272,6 +279,14 @@ export interface ExtensionUIContext {
272
279
  // Extension Context
273
280
  // ============================================================================
274
281
 
282
+ export interface ExtensionTranscriptEntry {
283
+ id: string;
284
+ role: string;
285
+ textSummary: string;
286
+ ts: string;
287
+ body?: string;
288
+ }
289
+
275
290
  export interface ContextUsage {
276
291
  /** Context tokens, or null if unknown (e.g. right after compaction, before next LLM response). */
277
292
  tokens: number | null;
@@ -309,7 +324,7 @@ export interface ExtensionContext {
309
324
  getContextUsage(): ContextUsage | undefined;
310
325
  /** Compact the session context (interactive mode shows UI). */
311
326
  compact(instructionsOrOptions?: string | CompactOptions): Promise<void>;
312
- /** Whether UI is available (false in print/RPC mode) */
327
+ /** Whether an interactive UI is available */
313
328
  hasUI: boolean;
314
329
  /** Current working directory */
315
330
  cwd: string;
@@ -327,17 +342,65 @@ export interface ExtensionContext {
327
342
  abort(): void;
328
343
  /** Whether there are queued messages waiting */
329
344
  hasPendingMessages(): boolean;
345
+ /** Typed pending-message counts per queue (steering, follow-up, next-turn). */
346
+ getPendingMessageCounts(): { steering: number; followUp: number; nextTurn: number };
347
+ /** Read-only session data exposed to extensions and the SDK host. */
348
+ getTranscript(): ExtensionTranscriptEntry[];
349
+ getTranscriptBody(entryId: string): string | undefined;
350
+ getGoalState(): unknown;
351
+ getTodoState(): unknown;
352
+ getQueuedMessages(): unknown[];
353
+ getActiveTools(): string[];
354
+ getAllTools(): string[];
355
+ /** Session control seams used by the SDK host. */
356
+ cycleModel(): Promise<{ model: Model; thinkingLevel: ThinkingLevel | undefined } | undefined>;
357
+ cycleThinkingLevel(): ThinkingLevel | undefined;
358
+ setQueueMode(kind: "steering" | "follow_up" | "interrupt", mode: unknown): boolean;
359
+ getSkillState(): unknown;
360
+ getConfigItems(): unknown;
361
+ getBranchCandidates(): unknown;
362
+ getExtensions(): unknown;
363
+ getArtifact(id: string): Uint8Array | string | undefined | Promise<Uint8Array | string | undefined>;
364
+ getArtifactRange?(
365
+ id: string,
366
+ offset: number,
367
+ length: number,
368
+ ):
369
+ | { bytes: Uint8Array; totalBytes: number }
370
+ | undefined
371
+ | Promise<{ bytes: Uint8Array; totalBytes: number } | undefined>;
372
+
373
+ getJobs(): unknown;
374
+ /** Typed skill and mode controls exposed to the SDK host. */
375
+ invokeSkill?(name: string, args?: string): Promise<unknown>;
376
+ setPlanMode?(on: boolean): unknown;
377
+ operateGoal?(op: "create" | "get" | "resume" | "pause" | "complete" | "drop", objective?: string): Promise<unknown>;
378
+
379
+ /** Typed nonvisual session controls exposed to the SDK host. */
380
+ sdkControl?(operation: string, input: Record<string, unknown>): unknown | Promise<unknown>;
381
+ /** Install a permission callback backed by a live SDK reverse provider lease. */
382
+ setSdkPermissionProvider?(
383
+ provider:
384
+ | ((
385
+ toolCall: ClientBridgePermissionToolCall,
386
+ options: ClientBridgePermissionOption[],
387
+ signal?: AbortSignal,
388
+ ) => Promise<ClientBridgePermissionOutcome>)
389
+ | undefined,
390
+ ): void;
391
+ /** Names of session SDK seams actually installed by the active runtime. */
392
+ sdkBindings?(): readonly string[];
393
+
330
394
  /** Gracefully shutdown and exit. */
331
395
  shutdown(): void;
332
396
  /** Get the current effective system prompt. */
333
397
  getSystemPrompt(): string[];
334
398
  /** @deprecated Use hasPendingMessages() instead */
335
399
  hasQueuedMessages(): boolean;
336
- /**
337
- * Unattended workflow-gate bridge. Present only when the session runs in
338
- * unattended/RPC mode; `undefined` in interactive/TUI mode (notify-only).
339
- */
400
+ /** SDK workflow-gate bridge, when a session has a remote gate responder. */
340
401
  workflowGate?: WorkflowGateEmitter;
402
+ /** Clear the active conversation while preserving the saved session identity. */
403
+ clearContext(): Promise<boolean>;
341
404
  }
342
405
 
343
406
  /**
@@ -611,12 +674,12 @@ export interface UserPythonEvent {
611
674
  // Input Events
612
675
  // ============================================================================
613
676
 
614
- /** Fired when the user submits input (interactive mode only). */
677
+ /** Fired when input enters through an interactive, SDK, or extension source. */
615
678
  export interface InputEvent {
616
679
  type: "input";
617
680
  text: string;
618
681
  images?: ImageContent[];
619
- source: "interactive" | "rpc" | "extension";
682
+ source: "interactive" | "sdk" | "extension";
620
683
  }
621
684
 
622
685
  // ============================================================================
@@ -1026,8 +1089,8 @@ export interface ExtensionAPI {
1026
1089
  /** Send a user message to the agent, or queue it when deliverAs is set. */
1027
1090
  sendUserMessage(
1028
1091
  content: string | (TextContent | ImageContent)[],
1029
- options?: { deliverAs?: "steer" | "followUp" },
1030
- ): void;
1092
+ options?: { deliverAs?: "steer" | "followUp"; onPreflightAccepted?: () => void },
1093
+ ): Promise<void>;
1031
1094
 
1032
1095
  /** Append a custom entry to the session for state persistence (not sent to LLM). */
1033
1096
  appendEntry<T = unknown>(customType: string, data?: T): void;
@@ -1054,7 +1117,31 @@ export interface ExtensionAPI {
1054
1117
  getThinkingLevel(): ThinkingLevel | undefined;
1055
1118
 
1056
1119
  /** Set thinking level for the current session. */
1057
- setThinkingLevel(level: ThinkingLevel): void;
1120
+ setThinkingLevel(level: ThinkingLevel, persist?: boolean): void;
1121
+
1122
+ /** Get whether thinking output is visible in the current session. */
1123
+ getThinkingVisibility(): "visible" | "hidden";
1124
+
1125
+ /** Set whether thinking output is visible for the current session. */
1126
+ setThinkingVisibility(visibility: "visible" | "hidden", persist?: boolean): void;
1127
+
1128
+ /** Cycle the current model's available thinking levels. */
1129
+ cycleThinkingLevel(): ThinkingLevel | undefined;
1130
+
1131
+ /** Set thinking level from a session or durable global control surface. */
1132
+ setThinkingLevelForControl(level: ThinkingLevel, persist: boolean): Promise<void>;
1133
+
1134
+ /** Set thinking visibility from a session or durable global control surface. */
1135
+ setThinkingVisibilityForControl(visibility: "visible" | "hidden", persist: boolean): Promise<void>;
1136
+
1137
+ /** Set the model for this session only. Returns false when it is unavailable. */
1138
+ setModelTemporaryForControl(model: Model, expectedSessionId?: string): Promise<boolean>;
1139
+
1140
+ /** Fetch provider usage through the session's canonical provider resolution. */
1141
+ fetchUsageReportsForControl(): Promise<UsageReport[] | null>;
1142
+
1143
+ /** Report whether the current effort follows global config or a session override. */
1144
+ getThinkingScopeForControl(): "session" | "global config";
1058
1145
 
1059
1146
  /** Get the current session name. */
1060
1147
  getSessionName(): string | undefined;
@@ -1209,8 +1296,8 @@ export type SendMessageHandler = <T = unknown>(
1209
1296
 
1210
1297
  export type SendUserMessageHandler = (
1211
1298
  content: string | (TextContent | ImageContent)[],
1212
- options?: { deliverAs?: "steer" | "followUp" },
1213
- ) => void;
1299
+ options?: { deliverAs?: "steer" | "followUp"; onPreflightAccepted?: () => void },
1300
+ ) => void | Promise<void>;
1214
1301
 
1215
1302
  export type AppendEntryHandler = <T = unknown>(customType: string, data?: T) => void;
1216
1303
 
@@ -1224,10 +1311,29 @@ export type SetActiveToolsHandler = (toolNames: string[]) => Promise<void>;
1224
1311
 
1225
1312
  export type SetModelHandler = (model: Model) => Promise<boolean>;
1226
1313
 
1314
+ export type CycleThinkingLevelHandler = () => ThinkingLevel | undefined;
1315
+
1316
+ export type SetThinkingLevelForControlHandler = (level: ThinkingLevel, persist: boolean) => Promise<void>;
1317
+
1318
+ export type SetThinkingVisibilityForControlHandler = (
1319
+ visibility: "visible" | "hidden",
1320
+ persist: boolean,
1321
+ ) => Promise<void>;
1322
+
1323
+ export type SetModelTemporaryForControlHandler = (model: Model, expectedSessionId?: string) => Promise<boolean>;
1324
+
1325
+ export type FetchUsageReportsForControlHandler = () => Promise<UsageReport[] | null>;
1326
+
1327
+ export type GetThinkingScopeForControlHandler = () => "session" | "global config";
1328
+
1227
1329
  export type GetThinkingLevelHandler = () => ThinkingLevel | undefined;
1228
1330
 
1229
1331
  export type SetThinkingLevelHandler = (level: ThinkingLevel, persist?: boolean) => void;
1230
1332
 
1333
+ export type GetThinkingVisibilityHandler = () => "visible" | "hidden";
1334
+
1335
+ export type SetThinkingVisibilityHandler = (visibility: "visible" | "hidden", persist?: boolean) => void;
1336
+
1231
1337
  /** Shared state created by loader, used during registration and runtime. */
1232
1338
  export interface ExtensionRuntimeState {
1233
1339
  flagValues: Map<string, boolean | string>;
@@ -1248,6 +1354,14 @@ export interface ExtensionActions {
1248
1354
  setModel: SetModelHandler;
1249
1355
  getThinkingLevel: GetThinkingLevelHandler;
1250
1356
  setThinkingLevel: SetThinkingLevelHandler;
1357
+ getThinkingVisibility: GetThinkingVisibilityHandler;
1358
+ setThinkingVisibility: SetThinkingVisibilityHandler;
1359
+ cycleThinkingLevel: CycleThinkingLevelHandler;
1360
+ setThinkingLevelForControl: SetThinkingLevelForControlHandler;
1361
+ setThinkingVisibilityForControl: SetThinkingVisibilityForControlHandler;
1362
+ setModelTemporaryForControl: SetModelTemporaryForControlHandler;
1363
+ fetchUsageReportsForControl: FetchUsageReportsForControlHandler;
1364
+ getThinkingScopeForControl: GetThinkingScopeForControlHandler;
1251
1365
  getSessionName: () => string | undefined;
1252
1366
  setSessionName: (name: string) => Promise<void>;
1253
1367
  }
@@ -1258,12 +1372,57 @@ export interface ExtensionContextActions {
1258
1372
  isIdle: () => boolean;
1259
1373
  abort: () => void;
1260
1374
  hasPendingMessages: () => boolean;
1375
+ /** Typed pending-message counts per queue; optional for embedders without a counted queue. */
1376
+ getPendingMessageCounts?: () => { steering: number; followUp: number; nextTurn: number };
1377
+ getTranscript?: () => ExtensionTranscriptEntry[];
1378
+ getTranscriptBody?: (entryId: string) => string | undefined;
1379
+ getGoalState?: () => unknown;
1380
+ getTodoState?: () => unknown;
1381
+ getQueuedMessages?: () => unknown[];
1382
+ getActiveTools?: () => string[];
1383
+ getAllTools?: () => string[];
1261
1384
  shutdown: () => void;
1262
1385
  getContextUsage: () => ContextUsage | undefined;
1263
1386
  compact: (instructionsOrOptions?: string | CompactOptions) => Promise<void>;
1264
1387
  getSystemPrompt: () => string[];
1265
- /** Unattended workflow-gate bridge (present only in unattended/RPC mode). */
1388
+ /** SDK workflow-gate bridge, when a session has a remote gate responder. */
1266
1389
  getWorkflowGate?: () => WorkflowGateEmitter | undefined;
1390
+ /** Clear the active conversation while preserving the saved session identity. */
1391
+ clearContext?: () => Promise<boolean>;
1392
+ /** Session control and query seams exposed to the per-session SDK host. */
1393
+ cycleModel?: () => Promise<{ model: Model; thinkingLevel: ThinkingLevel | undefined } | undefined>;
1394
+ cycleThinkingLevel?: () => ThinkingLevel | undefined;
1395
+ setQueueMode?: (kind: "steering" | "follow_up" | "interrupt", mode: unknown) => boolean;
1396
+ getSkillState?: () => unknown;
1397
+ getConfigItems?: () => unknown;
1398
+ getBranchCandidates?: () => unknown;
1399
+ getExtensions?: () => unknown;
1400
+ getArtifact?: (id: string) => Uint8Array | string | undefined | Promise<Uint8Array | string | undefined>;
1401
+ getArtifactRange?: (
1402
+ id: string,
1403
+ offset: number,
1404
+ length: number,
1405
+ ) =>
1406
+ | { bytes: Uint8Array; totalBytes: number }
1407
+ | undefined
1408
+ | Promise<{ bytes: Uint8Array; totalBytes: number } | undefined>;
1409
+ getJobs?: () => unknown;
1410
+ setSdkPermissionProvider?: (
1411
+ provider:
1412
+ | ((
1413
+ toolCall: ClientBridgePermissionToolCall,
1414
+ options: ClientBridgePermissionOption[],
1415
+ signal?: AbortSignal,
1416
+ ) => Promise<ClientBridgePermissionOutcome>)
1417
+ | undefined,
1418
+ ) => void;
1419
+ sdkControl?: (operation: string, input: Record<string, unknown>) => unknown | Promise<unknown>;
1420
+ invokeSkill?: (name: string, args?: string) => Promise<unknown>;
1421
+ setPlanMode?: (on: boolean) => unknown;
1422
+ operateGoal?: (
1423
+ op: "create" | "get" | "resume" | "pause" | "complete" | "drop",
1424
+ objective?: string,
1425
+ ) => Promise<unknown>;
1267
1426
  }
1268
1427
 
1269
1428
  /** Actions for ExtensionCommandContext (ctx.* in command handlers). */
@@ -45,7 +45,7 @@ export type { ExecOptions, ExecResult } from "../../exec/exec";
45
45
 
46
46
  /**
47
47
  * UI context for hooks to request interactive UI from the harness.
48
- * Each mode (interactive, RPC, print) provides its own implementation.
48
+ * Interactive and headless callers provide their own implementation.
49
49
  */
50
50
  // fallow-ignore-next-line code-duplication
51
51
  // Parallel to ExtensionUIContext: hooks expose a deliberately narrower UI