@gajae-code/coding-agent 0.10.1 → 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 (474) hide show
  1. package/CHANGELOG.md +70 -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/gajae-pet-widget.d.ts +1 -0
  54. package/dist/types/modes/components/model-selector.d.ts +1 -0
  55. package/dist/types/modes/components/notifications-settings-editor.d.ts +135 -0
  56. package/dist/types/modes/components/pet-capability.d.ts +37 -0
  57. package/dist/types/modes/components/pet-selector.d.ts +1 -1
  58. package/dist/types/modes/components/settings-selector.d.ts +15 -4
  59. package/dist/types/modes/components/welcome.d.ts +1 -1
  60. package/dist/types/modes/controllers/selector-controller.d.ts +35 -1
  61. package/dist/types/modes/index.d.ts +0 -4
  62. package/dist/types/modes/interactive-mode.d.ts +5 -1
  63. package/dist/types/modes/runtime-init.d.ts +2 -2
  64. package/dist/types/modes/shared/agent-wire/approval-gate.d.ts +6 -9
  65. package/dist/types/modes/shared/agent-wire/deep-interview-gate.d.ts +4 -6
  66. package/dist/types/modes/shared/agent-wire/event-contract.d.ts +6 -6
  67. package/dist/types/modes/shared/agent-wire/event-envelope.d.ts +4 -9
  68. package/dist/types/modes/shared/agent-wire/event-observation.d.ts +1 -1
  69. package/dist/types/modes/shared/agent-wire/workflow-gate-broker.d.ts +169 -30
  70. package/dist/types/modes/shared/agent-wire/workflow-gate-schema.d.ts +7 -7
  71. package/dist/types/modes/shared/agent-wire/workflow-gate-types.d.ts +105 -0
  72. package/dist/types/modes/types.d.ts +16 -1
  73. package/dist/types/runtime-mcp/client.d.ts +2 -0
  74. package/dist/types/runtime-mcp/config.d.ts +5 -1
  75. package/dist/types/runtime-mcp/manager.d.ts +8 -1
  76. package/dist/types/runtime-mcp/types.d.ts +4 -0
  77. package/dist/types/sdk/acp/adapter.d.ts +67 -0
  78. package/dist/types/sdk/acp/index.d.ts +2 -0
  79. package/dist/types/sdk/broker/broker.d.ts +53 -0
  80. package/dist/types/sdk/broker/discovery.d.ts +30 -0
  81. package/dist/types/sdk/broker/ensure.d.ts +33 -0
  82. package/dist/types/sdk/broker/identity.d.ts +3 -0
  83. package/dist/types/sdk/broker/index.d.ts +8 -0
  84. package/dist/types/sdk/broker/lifecycle-ledger.d.ts +95 -0
  85. package/dist/types/sdk/broker/lifecycle.d.ts +85 -0
  86. package/dist/types/sdk/broker/process-incarnation.d.ts +14 -0
  87. package/dist/types/sdk/broker/runtime.d.ts +33 -0
  88. package/dist/types/sdk/broker/session-index.d.ts +57 -0
  89. package/dist/types/sdk/broker/state-version.d.ts +8 -0
  90. package/dist/types/sdk/broker/transport.d.ts +9 -0
  91. package/dist/types/sdk/bus/chat-command-policy.d.ts +49 -0
  92. package/dist/types/sdk/bus/chat-daemon-cli.d.ts +21 -0
  93. package/dist/types/sdk/bus/chat-daemon-control.d.ts +111 -0
  94. package/dist/types/sdk/bus/chat-daemon-runtime.d.ts +77 -0
  95. package/dist/types/sdk/bus/chat-effect-journal.d.ts +84 -0
  96. package/dist/types/{notifications → sdk/bus}/config-commands.d.ts +7 -2
  97. package/dist/types/sdk/bus/config.d.ts +274 -0
  98. package/dist/types/sdk/bus/conversation-store.d.ts +72 -0
  99. package/dist/types/sdk/bus/discord-conversation.d.ts +58 -0
  100. package/dist/types/sdk/bus/discord-daemon.d.ts +45 -0
  101. package/dist/types/sdk/bus/discord-live-provider.d.ts +70 -0
  102. package/dist/types/sdk/bus/discord-provider.d.ts +85 -0
  103. package/dist/types/{notifications → sdk/bus}/html-format.d.ts +2 -2
  104. package/dist/types/{notifications → sdk/bus}/index.d.ts +113 -13
  105. package/dist/types/{notifications → sdk/bus}/lifecycle-control-runtime.d.ts +4 -2
  106. package/dist/types/{notifications → sdk/bus}/lifecycle-orchestrator.d.ts +18 -21
  107. package/dist/types/{notifications → sdk/bus}/managed-daemon.d.ts +1 -1
  108. package/dist/types/sdk/bus/native-runtime-compatibility.d.ts +13 -0
  109. package/dist/types/sdk/bus/notification-orchestration.d.ts +170 -0
  110. package/dist/types/{notifications → sdk/bus}/notification-service.d.ts +7 -1
  111. package/dist/types/sdk/bus/session-control.d.ts +83 -0
  112. package/dist/types/sdk/bus/slack-conversation.d.ts +56 -0
  113. package/dist/types/sdk/bus/slack-daemon.d.ts +60 -0
  114. package/dist/types/sdk/bus/slack-live-provider.d.ts +59 -0
  115. package/dist/types/sdk/bus/slack-provider.d.ts +55 -0
  116. package/dist/types/{notifications → sdk/bus}/telegram-cli.d.ts +4 -4
  117. package/dist/types/{notifications → sdk/bus}/telegram-daemon-cli.d.ts +14 -5
  118. package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +12 -0
  119. package/dist/types/{notifications → sdk/bus}/telegram-daemon-control.d.ts +2 -2
  120. package/dist/types/{notifications → sdk/bus}/telegram-daemon.d.ts +55 -17
  121. package/dist/types/{notifications → sdk/bus}/telegram-reference.d.ts +2 -2
  122. package/dist/types/sdk/bus/telegram-setup.d.ts +128 -0
  123. package/dist/types/{notifications → sdk/bus}/topic-registry.d.ts +11 -0
  124. package/dist/types/sdk/cli/index.d.ts +1 -0
  125. package/dist/types/sdk/cli/session-cli.d.ts +19 -0
  126. package/dist/types/sdk/client/client.d.ts +1 -0
  127. package/dist/types/sdk/client/discovery.d.ts +27 -0
  128. package/dist/types/sdk/client/index.d.ts +2 -0
  129. package/dist/types/sdk/host/control/dispatch.d.ts +34 -0
  130. package/dist/types/sdk/host/control/index.d.ts +2 -0
  131. package/dist/types/sdk/host/control/operations.d.ts +65 -0
  132. package/dist/types/sdk/host/events.d.ts +35 -0
  133. package/dist/types/sdk/host/host.d.ts +35 -0
  134. package/dist/types/sdk/host/index.d.ts +4 -0
  135. package/dist/types/sdk/host/query/cursor.d.ts +62 -0
  136. package/dist/types/sdk/host/query/handlers.d.ts +70 -0
  137. package/dist/types/sdk/host/query/index.d.ts +3 -0
  138. package/dist/types/sdk/host/query/revision-store.d.ts +60 -0
  139. package/dist/types/sdk/host/reverse-leases.d.ts +45 -0
  140. package/dist/types/sdk/host/types.d.ts +32 -0
  141. package/dist/types/sdk/index.d.ts +6 -0
  142. package/dist/types/sdk/lifecycle-session.d.ts +14 -0
  143. package/dist/types/sdk/mcp/index.d.ts +1 -0
  144. package/dist/types/sdk/mcp/server.d.ts +37 -0
  145. package/dist/types/sdk/models.d.ts +44 -0
  146. package/dist/types/sdk/protocol/adapter-validation.d.ts +14 -0
  147. package/dist/types/sdk/protocol/operation-registry.d.ts +24 -0
  148. package/dist/types/{sdk.d.ts → sdk/session.d.ts} +44 -38
  149. package/dist/types/sdk/startup-capability.d.ts +50 -0
  150. package/dist/types/session/agent-session.d.ts +114 -21
  151. package/dist/types/session/default-model-selection.d.ts +25 -0
  152. package/dist/types/session/fallback-chain-controller.d.ts +52 -0
  153. package/dist/types/session/session-manager.d.ts +58 -1
  154. package/dist/types/setup/credential-auto-import.d.ts +36 -6
  155. package/dist/types/tools/ask-answer-registry.d.ts +1 -1
  156. package/dist/types/tools/browser/benchmark/detector-report.d.ts +63 -0
  157. package/dist/types/tools/browser/benchmark/run-suite.d.ts +18 -0
  158. package/dist/types/tools/browser/launch.d.ts +22 -0
  159. package/dist/types/tools/browser/profile-discovery.d.ts +31 -0
  160. package/dist/types/tools/browser/profile-posture.d.ts +37 -0
  161. package/dist/types/tools/browser/profile-reuse.d.ts +39 -0
  162. package/dist/types/tools/browser/profile-warmup.d.ts +39 -0
  163. package/dist/types/tools/browser/registry.d.ts +19 -0
  164. package/dist/types/tools/browser/tab-protocol.d.ts +4 -0
  165. package/dist/types/tools/index.d.ts +8 -8
  166. package/package.json +34 -13
  167. package/scripts/build-sdk-package-smoke.ts +94 -0
  168. package/scripts/capture-notifications-settings-showcase.ts +435 -0
  169. package/scripts/compile-args.ts +4 -2
  170. package/scripts/g005-daemon-smoke.ts +4 -5
  171. package/scripts/g011-daemon-path-smoke.ts +5 -5
  172. package/scripts/generate-sdk-adapter-parity-manifest.ts +163 -0
  173. package/scripts/generate-sdk-operation-inventory.ts +867 -0
  174. package/scripts/generate-telegram-baseline-manifest.ts +128 -0
  175. package/scripts/manifest-schema.ts +124 -0
  176. package/scripts/run-test-manifest.ts +153 -0
  177. package/scripts/run-threat-model-check.ts +157 -0
  178. package/scripts/verify-gjc-sdk-canonicalization.ts +3467 -0
  179. package/scripts/verify-gjc-sdk-rename.ts +90 -0
  180. package/src/append-only-mode.ts +1 -1
  181. package/src/cli/args.ts +43 -12
  182. package/src/cli/auth-gateway-cli.ts +2 -2
  183. package/src/cli/config-cli.ts +2 -1
  184. package/src/cli/daemon-cli.ts +63 -14
  185. package/src/cli/list-models.ts +1 -1
  186. package/src/cli/notify-cli.ts +288 -286
  187. package/src/cli.ts +21 -2
  188. package/src/commands/daemon.ts +50 -6
  189. package/src/commands/harness.ts +93 -36
  190. package/src/commands/launch.ts +5 -2
  191. package/src/commands/mcp-serve.ts +19 -12
  192. package/src/commands/notify.ts +36 -3
  193. package/src/commands/sdk.ts +426 -0
  194. package/src/commit/agentic/agent.ts +1 -0
  195. package/src/config/atomic-yaml-patch.ts +423 -0
  196. package/src/config/model-profile-activation.ts +240 -89
  197. package/src/config/model-profiles.ts +37 -34
  198. package/src/config/model-registry.ts +51 -26
  199. package/src/config/model-resolver.ts +138 -51
  200. package/src/config/model-selector-value.ts +50 -0
  201. package/src/config/models-config-schema.ts +14 -21
  202. package/src/config/settings-schema.ts +128 -10
  203. package/src/config/settings.ts +1120 -158
  204. package/src/coordinator-mcp/model-preset.ts +74 -20
  205. package/src/coordinator-mcp/server.ts +1597 -3052
  206. package/src/daemon/builtin.ts +8 -5
  207. package/src/daemon/control-types.ts +1 -1
  208. package/src/defaults/gjc/skills/team/SKILL.md +4 -4
  209. package/src/discovery/mcp-json.ts +327 -20
  210. package/src/extensibility/custom-tools/types.ts +1 -1
  211. package/src/extensibility/extensions/compact-handler.ts +3 -3
  212. package/src/extensibility/extensions/get-commands-handler.ts +2 -2
  213. package/src/extensibility/extensions/loader.ts +69 -5
  214. package/src/extensibility/extensions/runner.ts +112 -4
  215. package/src/extensibility/extensions/types.ts +176 -17
  216. package/src/extensibility/hooks/types.ts +1 -1
  217. package/src/extensibility/slash-commands.ts +3 -3
  218. package/src/gjc-runtime/launch-tmux.ts +170 -86
  219. package/src/gjc-runtime/psmux-detect.ts +82 -4
  220. package/src/gjc-runtime/session-state-sidecar.ts +41 -31
  221. package/src/gjc-runtime/team-runtime.ts +54 -35
  222. package/src/gjc-runtime/tmux-owner-isolation-cli.ts +53 -17
  223. package/src/gjc-runtime/tmux-owner-isolation.ts +5 -2
  224. package/src/gjc-runtime/tmux-sessions.ts +19 -13
  225. package/src/gjc-runtime/ultragoal-guard.ts +53 -6
  226. package/src/gjc-runtime/ultragoal-runtime.ts +155 -3
  227. package/src/gjc-runtime/windows-powershell-command.ts +58 -0
  228. package/src/harness-control-plane/operate.ts +9 -9
  229. package/src/harness-control-plane/owner.ts +283 -39
  230. package/src/harness-control-plane/receipts.ts +0 -1
  231. package/src/harness-control-plane/sdk-transport.ts +395 -0
  232. package/src/harness-control-plane/session-transport.ts +94 -0
  233. package/src/harness-control-plane/types.ts +1 -1
  234. package/src/internal-urls/docs-index.generated.ts +36 -37
  235. package/src/lsp/client.ts +42 -6
  236. package/src/lsp/index.ts +2 -2
  237. package/src/main.ts +299 -204
  238. package/src/modes/DESIGN.md +258 -0
  239. package/src/modes/acp/acp-agent.ts +1228 -2612
  240. package/src/modes/acp/acp-client-bridge.ts +2 -20
  241. package/src/modes/acp/acp-event-mapper.ts +18 -2
  242. package/src/modes/acp/acp-mode.ts +8 -36
  243. package/src/modes/acp/permission-mode.ts +25 -0
  244. package/src/modes/acp/startup-options.ts +6 -0
  245. package/src/modes/components/agent-dashboard.ts +37 -17
  246. package/src/modes/components/custom-editor.ts +1 -0
  247. package/src/modes/components/gajae-pet-widget.ts +169 -20
  248. package/src/modes/components/model-selector.ts +93 -35
  249. package/src/modes/components/notifications-settings-editor.ts +1379 -0
  250. package/src/modes/components/pet-capability.ts +115 -0
  251. package/src/modes/components/pet-selector.ts +4 -6
  252. package/src/modes/components/settings-selector.ts +86 -11
  253. package/src/modes/components/welcome.ts +4 -4
  254. package/src/modes/controllers/command-controller.ts +1 -2
  255. package/src/modes/controllers/event-controller.ts +11 -16
  256. package/src/modes/controllers/extension-ui-controller.ts +357 -12
  257. package/src/modes/controllers/input-controller.ts +43 -13
  258. package/src/modes/controllers/selector-controller.ts +671 -44
  259. package/src/modes/index.ts +0 -22
  260. package/src/modes/interactive-mode.ts +108 -24
  261. package/src/modes/runtime-init.ts +298 -6
  262. package/src/modes/shared/agent-wire/approval-gate.ts +9 -11
  263. package/src/modes/shared/agent-wire/deep-interview-gate.ts +10 -11
  264. package/src/modes/shared/agent-wire/event-contract.ts +7 -8
  265. package/src/modes/shared/agent-wire/event-envelope.ts +9 -17
  266. package/src/modes/shared/agent-wire/event-observation.ts +16 -7
  267. package/src/modes/shared/agent-wire/workflow-gate-broker.ts +1254 -87
  268. package/src/modes/shared/agent-wire/workflow-gate-schema.ts +15 -15
  269. package/src/modes/shared/agent-wire/workflow-gate-types.ts +113 -0
  270. package/src/modes/types.ts +16 -1
  271. package/src/runtime-mcp/client.ts +94 -19
  272. package/src/runtime-mcp/config.ts +27 -15
  273. package/src/runtime-mcp/manager.ts +343 -105
  274. package/src/runtime-mcp/oauth-flow.ts +42 -12
  275. package/src/runtime-mcp/transports/http.ts +49 -19
  276. package/src/runtime-mcp/transports/stdio.ts +47 -28
  277. package/src/runtime-mcp/types.ts +10 -0
  278. package/src/sdk/acp/adapter.ts +418 -0
  279. package/src/sdk/acp/index.ts +2 -0
  280. package/src/sdk/broker/broker.ts +642 -0
  281. package/src/sdk/broker/discovery.ts +94 -0
  282. package/src/sdk/broker/ensure.ts +249 -0
  283. package/src/sdk/broker/identity.ts +42 -0
  284. package/src/sdk/broker/index.ts +8 -0
  285. package/src/sdk/broker/internal-source-marker-2178.txt +1 -0
  286. package/src/sdk/broker/internal-source.bunfig.toml +1 -0
  287. package/src/sdk/broker/lifecycle-ledger.ts +286 -0
  288. package/src/sdk/broker/lifecycle.ts +2157 -0
  289. package/src/sdk/broker/process-incarnation.ts +159 -0
  290. package/src/sdk/broker/runtime.ts +164 -0
  291. package/src/sdk/broker/session-index.ts +318 -0
  292. package/src/sdk/broker/state-version.ts +23 -0
  293. package/src/sdk/broker/transport.ts +125 -0
  294. package/src/sdk/bus/chat-command-policy.ts +107 -0
  295. package/src/sdk/bus/chat-daemon-cli.ts +214 -0
  296. package/src/sdk/bus/chat-daemon-control.ts +713 -0
  297. package/src/sdk/bus/chat-daemon-runtime.ts +526 -0
  298. package/src/sdk/bus/chat-effect-journal.ts +353 -0
  299. package/src/{notifications → sdk/bus}/config-commands.ts +39 -10
  300. package/src/sdk/bus/config.ts +433 -0
  301. package/src/sdk/bus/conversation-store.ts +391 -0
  302. package/src/sdk/bus/discord-conversation.ts +85 -0
  303. package/src/sdk/bus/discord-daemon.ts +2275 -0
  304. package/src/sdk/bus/discord-live-provider.ts +521 -0
  305. package/src/sdk/bus/discord-provider.ts +56 -0
  306. package/src/{notifications → sdk/bus}/html-format.ts +2 -2
  307. package/src/sdk/bus/index.ts +3943 -0
  308. package/src/{notifications → sdk/bus}/lifecycle-commands.ts +2 -0
  309. package/src/{notifications → sdk/bus}/lifecycle-control-runtime.ts +225 -196
  310. package/src/{notifications → sdk/bus}/lifecycle-orchestrator.ts +161 -74
  311. package/src/{notifications → sdk/bus}/managed-daemon.ts +2 -2
  312. package/src/sdk/bus/native-runtime-compatibility.ts +42 -0
  313. package/src/sdk/bus/natives-augment.d.ts +38 -0
  314. package/src/sdk/bus/notification-orchestration.ts +535 -0
  315. package/src/{notifications → sdk/bus}/notification-service.ts +106 -12
  316. package/src/sdk/bus/session-control.ts +333 -0
  317. package/src/sdk/bus/slack-conversation.ts +74 -0
  318. package/src/sdk/bus/slack-daemon.ts +2144 -0
  319. package/src/sdk/bus/slack-live-provider.ts +380 -0
  320. package/src/sdk/bus/slack-provider.ts +76 -0
  321. package/src/{notifications → sdk/bus}/telegram-cli.ts +8 -8
  322. package/src/sdk/bus/telegram-daemon-cli.ts +330 -0
  323. package/src/sdk/bus/telegram-daemon-contract.ts +14 -0
  324. package/src/{notifications → sdk/bus}/telegram-daemon-control.ts +4 -4
  325. package/src/{notifications → sdk/bus}/telegram-daemon.ts +502 -54
  326. package/src/{notifications → sdk/bus}/telegram-reference.ts +2 -2
  327. package/src/sdk/bus/telegram-setup.ts +663 -0
  328. package/src/{notifications → sdk/bus}/topic-registry.ts +32 -0
  329. package/src/sdk/cli/index.ts +1 -0
  330. package/src/sdk/cli/session-cli.ts +275 -0
  331. package/src/sdk/client/client.ts +1 -0
  332. package/src/sdk/client/discovery.ts +108 -0
  333. package/src/sdk/client/index.ts +2 -0
  334. package/src/sdk/host/control/dispatch.ts +367 -0
  335. package/src/sdk/host/control/index.ts +10 -0
  336. package/src/sdk/host/control/operations.ts +63 -0
  337. package/src/sdk/host/events.ts +91 -0
  338. package/src/sdk/host/host.ts +296 -0
  339. package/src/sdk/host/index.ts +4 -0
  340. package/src/sdk/host/query/cursor.ts +189 -0
  341. package/src/sdk/host/query/handlers.ts +533 -0
  342. package/src/sdk/host/query/index.ts +3 -0
  343. package/src/sdk/host/query/revision-store.ts +1126 -0
  344. package/src/sdk/host/reverse-leases.ts +325 -0
  345. package/src/sdk/host/types.ts +29 -0
  346. package/src/sdk/index.ts +13 -0
  347. package/src/sdk/lifecycle-session.ts +39 -0
  348. package/src/sdk/mcp/index.ts +1 -0
  349. package/src/sdk/mcp/server.ts +332 -0
  350. package/src/sdk/models.ts +168 -0
  351. package/src/sdk/protocol/adapter-validation.ts +48 -0
  352. package/src/sdk/protocol/operation-inventory.generated.json +5654 -0
  353. package/src/sdk/protocol/operation-registry.ts +312 -0
  354. package/src/{sdk.ts → sdk/session.ts} +339 -212
  355. package/src/sdk/startup-capability.ts +189 -0
  356. package/src/session/agent-session.ts +2470 -866
  357. package/src/session/default-model-selection.ts +93 -0
  358. package/src/session/fallback-chain-controller.ts +136 -0
  359. package/src/session/session-manager.ts +447 -13
  360. package/src/session/session-storage.ts +8 -1
  361. package/src/setup/credential-auto-import.ts +290 -35
  362. package/src/setup/hermes/templates/operator-instructions.v1.md +3 -5
  363. package/src/slash-commands/builtin-registry.ts +33 -30
  364. package/src/task/executor.ts +62 -13
  365. package/src/tools/ask-answer-registry.ts +1 -1
  366. package/src/tools/ask.ts +13 -8
  367. package/src/tools/browser/STEALTH-THIRD-PARTY-NOTICES.md +26 -0
  368. package/src/tools/browser/benchmark/detector-report.ts +157 -0
  369. package/src/tools/browser/benchmark/run-suite.ts +39 -0
  370. package/src/tools/browser/launch.ts +124 -19
  371. package/src/tools/browser/profile-discovery.ts +63 -0
  372. package/src/tools/browser/profile-posture.ts +59 -0
  373. package/src/tools/browser/profile-reuse.ts +102 -0
  374. package/src/tools/browser/profile-warmup.ts +109 -0
  375. package/src/tools/browser/registry.ts +87 -11
  376. package/src/tools/browser/tab-protocol.ts +1 -0
  377. package/src/tools/browser/tab-supervisor.ts +1 -0
  378. package/src/tools/browser/tab-worker.ts +1 -1
  379. package/src/tools/browser.ts +6 -0
  380. package/src/tools/index.ts +8 -8
  381. package/src/tools/puppeteer/14_stealth_permissions.txt +57 -0
  382. package/src/tools/puppeteer/15_stealth_webrtc.txt +60 -0
  383. package/src/tools/telegram-send.ts +2 -2
  384. package/vendor/insane-search/MANIFEST.json +2 -1
  385. package/vendor/insane-search/engine/bias_check.py +4 -1
  386. package/vendor/insane-search/engine/phase0.py +26 -1
  387. package/dist/types/harness-control-plane/rpc-adapter.d.ts +0 -69
  388. package/dist/types/modes/bridge/auth.d.ts +0 -12
  389. package/dist/types/modes/bridge/bridge-client-bridge.d.ts +0 -9
  390. package/dist/types/modes/bridge/bridge-mode.d.ts +0 -47
  391. package/dist/types/modes/bridge/bridge-ui-context.d.ts +0 -88
  392. package/dist/types/modes/bridge/event-stream.d.ts +0 -8
  393. package/dist/types/modes/rpc/host-tools.d.ts +0 -1
  394. package/dist/types/modes/rpc/host-uris.d.ts +0 -1
  395. package/dist/types/modes/rpc/rpc-client.d.ts +0 -299
  396. package/dist/types/modes/rpc/rpc-mode.d.ts +0 -86
  397. package/dist/types/modes/rpc/rpc-socket-security.d.ts +0 -10
  398. package/dist/types/modes/rpc/rpc-types.d.ts +0 -810
  399. package/dist/types/modes/shared/agent-wire/command-contract.d.ts +0 -18
  400. package/dist/types/modes/shared/agent-wire/command-dispatch.d.ts +0 -37
  401. package/dist/types/modes/shared/agent-wire/command-validation.d.ts +0 -2
  402. package/dist/types/modes/shared/agent-wire/handshake.d.ts +0 -56
  403. package/dist/types/modes/shared/agent-wire/host-tool-bridge.d.ts +0 -16
  404. package/dist/types/modes/shared/agent-wire/host-uri-bridge.d.ts +0 -17
  405. package/dist/types/modes/shared/agent-wire/protocol.d.ts +0 -25
  406. package/dist/types/modes/shared/agent-wire/responses.d.ts +0 -4
  407. package/dist/types/modes/shared/agent-wire/scopes.d.ts +0 -18
  408. package/dist/types/modes/shared/agent-wire/session-registry.d.ts +0 -25
  409. package/dist/types/modes/shared/agent-wire/ui-request-broker.d.ts +0 -42
  410. package/dist/types/modes/shared/agent-wire/ui-result.d.ts +0 -27
  411. package/dist/types/modes/shared/agent-wire/unattended-action-policy.d.ts +0 -29
  412. package/dist/types/modes/shared/agent-wire/unattended-audit.d.ts +0 -68
  413. package/dist/types/modes/shared/agent-wire/unattended-run-controller.d.ts +0 -166
  414. package/dist/types/modes/shared/agent-wire/unattended-session.d.ts +0 -127
  415. package/dist/types/notifications/config.d.ts +0 -132
  416. package/src/harness-control-plane/rpc-adapter.ts +0 -290
  417. package/src/modes/bridge/auth.ts +0 -41
  418. package/src/modes/bridge/bridge-client-bridge.ts +0 -47
  419. package/src/modes/bridge/bridge-mode.ts +0 -675
  420. package/src/modes/bridge/bridge-ui-context.ts +0 -200
  421. package/src/modes/bridge/event-stream.ts +0 -70
  422. package/src/modes/rpc/host-tools.ts +0 -1
  423. package/src/modes/rpc/host-uris.ts +0 -1
  424. package/src/modes/rpc/rpc-client.ts +0 -1166
  425. package/src/modes/rpc/rpc-mode.ts +0 -1029
  426. package/src/modes/rpc/rpc-socket-security.ts +0 -115
  427. package/src/modes/rpc/rpc-types.ts +0 -637
  428. package/src/modes/shared/agent-wire/command-contract.ts +0 -18
  429. package/src/modes/shared/agent-wire/command-dispatch.ts +0 -498
  430. package/src/modes/shared/agent-wire/command-validation.ts +0 -181
  431. package/src/modes/shared/agent-wire/handshake.ts +0 -157
  432. package/src/modes/shared/agent-wire/host-tool-bridge.ts +0 -197
  433. package/src/modes/shared/agent-wire/host-uri-bridge.ts +0 -236
  434. package/src/modes/shared/agent-wire/protocol.ts +0 -46
  435. package/src/modes/shared/agent-wire/responses.ts +0 -17
  436. package/src/modes/shared/agent-wire/scopes.ts +0 -94
  437. package/src/modes/shared/agent-wire/session-registry.ts +0 -109
  438. package/src/modes/shared/agent-wire/ui-request-broker.ts +0 -150
  439. package/src/modes/shared/agent-wire/ui-result.ts +0 -48
  440. package/src/modes/shared/agent-wire/unattended-action-policy.ts +0 -365
  441. package/src/modes/shared/agent-wire/unattended-audit.ts +0 -176
  442. package/src/modes/shared/agent-wire/unattended-run-controller.ts +0 -426
  443. package/src/modes/shared/agent-wire/unattended-session.ts +0 -528
  444. package/src/notifications/config.ts +0 -219
  445. package/src/notifications/index.ts +0 -1835
  446. package/src/notifications/telegram-daemon-cli.ts +0 -243
  447. package/src/tools/puppeteer/09_stealth_locale.txt +0 -46
  448. /package/dist/types/{notifications → sdk/bus}/attachment-registry.d.ts +0 -0
  449. /package/dist/types/{notifications → sdk/bus}/chat-adapters.d.ts +0 -0
  450. /package/dist/types/{notifications → sdk/bus}/daemon-paths.d.ts +0 -0
  451. /package/dist/types/{notifications → sdk/bus}/engine.d.ts +0 -0
  452. /package/dist/types/{notifications → sdk/bus}/helpers.d.ts +0 -0
  453. /package/dist/types/{notifications → sdk/bus}/lifecycle-commands.d.ts +0 -0
  454. /package/dist/types/{notifications → sdk/bus}/operator-runtime.d.ts +0 -0
  455. /package/dist/types/{notifications → sdk/bus}/rate-limit-pool.d.ts +0 -0
  456. /package/dist/types/{notifications → sdk/bus}/recent-activity.d.ts +0 -0
  457. /package/dist/types/{notifications → sdk/bus}/reply-sent-store.d.ts +0 -0
  458. /package/dist/types/{notifications → sdk/bus}/rich-draft.d.ts +0 -0
  459. /package/dist/types/{notifications → sdk/bus}/rich-render.d.ts +0 -0
  460. /package/dist/types/{notifications → sdk/bus}/threaded-inbound.d.ts +0 -0
  461. /package/dist/types/{notifications → sdk/bus}/threaded-render.d.ts +0 -0
  462. /package/src/{notifications → sdk/bus}/attachment-registry.ts +0 -0
  463. /package/src/{notifications → sdk/bus}/chat-adapters.ts +0 -0
  464. /package/src/{notifications → sdk/bus}/daemon-paths.ts +0 -0
  465. /package/src/{notifications → sdk/bus}/engine.ts +0 -0
  466. /package/src/{notifications → sdk/bus}/helpers.ts +0 -0
  467. /package/src/{notifications → sdk/bus}/operator-runtime.ts +0 -0
  468. /package/src/{notifications → sdk/bus}/rate-limit-pool.ts +0 -0
  469. /package/src/{notifications → sdk/bus}/recent-activity.ts +0 -0
  470. /package/src/{notifications → sdk/bus}/reply-sent-store.ts +0 -0
  471. /package/src/{notifications → sdk/bus}/rich-draft.ts +0 -0
  472. /package/src/{notifications → sdk/bus}/rich-render.ts +0 -0
  473. /package/src/{notifications → sdk/bus}/threaded-inbound.ts +0 -0
  474. /package/src/{notifications → sdk/bus}/threaded-render.ts +0 -0
@@ -1,16 +1,16 @@
1
1
  import { type FinalizeChecks, type FinalizeResult, type ValidationCommandSpec } from "./finalize";
2
2
  import { type PreserveResult } from "./preserve";
3
- import { type HarnessRpc } from "./rpc-adapter";
3
+ import { type HarnessSessionTransport } from "./session-transport";
4
4
  import { type HarnessLifecycle, type Observation, type RecoveryClassification, type RetryBudget, type Severity } from "./types";
5
5
  export interface OperateOptions {
6
6
  root: string;
7
7
  sessionId: string;
8
8
  workspace: string;
9
9
  branch: string;
10
- rpc: HarnessRpc;
11
- /** Factory used to (re)create the RPC subprocess on restart recovery. Defaults to reusing `rpc`. */
12
- rpcFactory?: () => HarnessRpc;
13
- /** Bounded observation provider (scripted in tests; real = git + rpc state). */
10
+ transport: HarnessSessionTransport;
11
+ /** Factory used to recreate an SDK transport on restart recovery. Defaults to reusing `transport`. */
12
+ transportFactory?: () => HarnessSessionTransport;
13
+ /** Bounded observation provider (scripted in tests; real = git + SDK session state). */
14
14
  observe: () => Promise<Observation>;
15
15
  /** Real dirty-worktree preservation; injectable for tests. Defaults to git stash/diff capture. */
16
16
  preserve?: (workspace: string) => PreserveResult;
@@ -3,20 +3,22 @@
3
3
  *
4
4
  * Responsibilities:
5
5
  * - hold the {@link SessionLease} (single writer),
6
- * - own the {@link HarnessRpc} subprocess (injected; real `GajaeCodeRpc` in prod, fake in tests),
6
+ * - own an injected SDK session transport,
7
7
  * - serve owner-routed primitives over the {@link ControlServer} endpoint,
8
8
  * - be the SOLE writer of the severity event stream,
9
9
  * - heartbeat the lease.
10
10
  *
11
11
  * Stateless `gjc harness` CLI calls reach the owner via {@link resolveOwner} + the endpoint.
12
12
  */
13
+ import { ControlServer, type EndpointHandler } from "./control-endpoint";
13
14
  import { type FinalizeChecks, type ValidationCommandSpec } from "./finalize";
14
- import { type HarnessRpc } from "./rpc-adapter";
15
- import { type SessionLease } from "./session-lease";
15
+ import { releaseLease, type SessionLease } from "./session-lease";
16
+ import { type HarnessSessionTransport } from "./session-transport";
17
+ import { appendEvent, writeSessionState } from "./storage";
16
18
  export interface OwnerOptions {
17
19
  root: string;
18
20
  sessionId: string;
19
- rpc: HarnessRpc;
21
+ transport: HarnessSessionTransport;
20
22
  ownerId?: string;
21
23
  ttlMs?: number;
22
24
  heartbeatMs?: number;
@@ -24,6 +26,18 @@ export interface OwnerOptions {
24
26
  clock?: () => number;
25
27
  finalizeChecks?: FinalizeChecks;
26
28
  validationCommands?: ValidationCommandSpec[];
29
+ /** Test seam for deterministic control-endpoint teardown failures. */
30
+ controlServerFactory?: (socketPath: string, handler: EndpointHandler) => ControlServer;
31
+ /** Test seam for deterministic lease-release teardown failures. */
32
+ leaseRelease?: typeof releaseLease;
33
+ /** Test seams for frame persistence failures. */
34
+ framePersistence?: {
35
+ appendEvent?: typeof appendEvent;
36
+ writeSessionState?: typeof writeSessionState;
37
+ };
38
+ /** Test seams; production retries verified shutdown without a finite limit. */
39
+ cleanupRetryMs?: number;
40
+ cleanupRetryLimit?: number;
27
41
  }
28
42
  export interface OwnerStartInfo {
29
43
  ownerId: string;
@@ -57,7 +57,6 @@ export interface VanishEvidence {
57
57
  }
58
58
  export interface PromptAcceptanceEvidence {
59
59
  promptSha256: string;
60
- rpcCommandId: string;
61
60
  preSubmitState: {
62
61
  isStreaming: boolean;
63
62
  steeringQueueDepth: number;
@@ -0,0 +1,43 @@
1
+ import { SdkClient } from "../sdk/client";
2
+ import type { HarnessSessionTransport } from "./session-transport";
3
+ export declare class HarnessSdkTransportError extends Error {
4
+ readonly code: "endpoint_unavailable" | "invalid_response";
5
+ readonly cause?: unknown;
6
+ constructor(code: "endpoint_unavailable" | "invalid_response", message: string, cause?: unknown);
7
+ }
8
+ export interface SpawnedHarnessSession {
9
+ stop(): Promise<void>;
10
+ }
11
+ export interface CreateSdkSessionTransportOptions {
12
+ repo: string;
13
+ sessionId: string;
14
+ /** Starts the normal GJC session before discovery. Test callers may provide a deterministic SDK host. */
15
+ spawn?: () => SpawnedHarnessSession | Promise<SpawnedHarnessSession>;
16
+ discoveryTimeoutMs?: number;
17
+ /** Test seam: inject SDK client/endpoint resolution to avoid a process-global module mock. */
18
+ connect?: typeof SdkClient.connect;
19
+ readEndpoint?: (repo: string, sessionId: string) => Promise<{
20
+ url: string;
21
+ token: string;
22
+ } | null>;
23
+ }
24
+ /**
25
+ * Connects an owner to the child session's public SDK endpoint. The SDK client owns
26
+ * hello-gated reconnects; this adapter only owns the bounded discovery wait and child
27
+ * lifecycle.
28
+ */
29
+ export declare function createSdkSessionTransport(options: CreateSdkSessionTransportOptions): Promise<HarnessSessionTransport>;
30
+ export interface ReapableHarnessChild {
31
+ kill(signal?: number | NodeJS.Signals): void;
32
+ readonly exited: Promise<number>;
33
+ readonly exitCode: number | null;
34
+ }
35
+ export declare function spawnNormalHarnessSession(repo: string, sessionId: string, options?: {
36
+ termGraceMs?: number;
37
+ killVerifyMs?: number;
38
+ }): SpawnedHarnessSession;
39
+ /** Test hook for exact-child stop serialization and retry semantics. */
40
+ export declare function ownedHarnessSessionForTest(child: ReapableHarnessChild, options?: {
41
+ termGraceMs?: number;
42
+ killVerifyMs?: number;
43
+ }): SpawnedHarnessSession;
@@ -0,0 +1,48 @@
1
+ export interface SessionStateSnapshot {
2
+ isStreaming: boolean;
3
+ steeringQueueDepth: number;
4
+ followupQueueDepth: number;
5
+ }
6
+ export interface HarnessSessionTransportCloseContext {
7
+ /**
8
+ * Immediate cycle-break acknowledgment for the exact direct close path.
9
+ *
10
+ * Invoke this method synchronously before an async close() reaches its first await
11
+ * (or before a non-async close() returns its promise); the returned promise may be
12
+ * awaited later. It does NOT signal that RuntimeOwner teardown has completed.
13
+ */
14
+ acknowledgeDirectOwnerStopReentry(): Promise<void>;
15
+ }
16
+ /** SDK-backed transport contract for a live harness session. */
17
+ export interface HarnessSessionTransport {
18
+ getState(): Promise<SessionStateSnapshot>;
19
+ sendPrompt(prompt: string): Promise<{
20
+ commandId: string;
21
+ ack: boolean;
22
+ }>;
23
+ eventCursor(): number;
24
+ waitForAgentStart(afterCursor: number, timeoutMs: number): Promise<{
25
+ cursor: number;
26
+ } | null>;
27
+ /**
28
+ * Await every transport-owned cleanup step. close() MUST NOT call public
29
+ * RuntimeOwner.stop(), which would circularly await this close and hang. A transport
30
+ * that needs that direct cycle break must synchronously invoke
31
+ * `context.acknowledgeDirectOwnerStopReentry()` before its first await.
32
+ */
33
+ close(context?: HarnessSessionTransportCloseContext): Promise<void>;
34
+ /** Return a synchronous disposer that fully severs this event subscription. */
35
+ onEventFrame?(listener: (frame: Record<string, unknown>) => void): () => void;
36
+ isLive?(): boolean;
37
+ lastFrameAt?(): string | null;
38
+ getLastAssistantText?(): Promise<string | null>;
39
+ }
40
+ export interface AcceptanceResult {
41
+ accepted: boolean;
42
+ reason: string;
43
+ commandId: string | null;
44
+ preSubmitCursor: number;
45
+ agentStartCursor: number | null;
46
+ preSubmitState: SessionStateSnapshot;
47
+ }
48
+ export declare function singleFlightAccept(transport: HarnessSessionTransport, prompt: string, timeoutMs: number): Promise<AcceptanceResult>;
@@ -81,10 +81,9 @@ export interface SessionHandle {
81
81
  ownerId: string | null;
82
82
  pid: number | null;
83
83
  };
84
- rpcHandle: {
85
- kind: "rpc-subprocess";
86
- pid: number | null;
87
- sessionDir: string;
84
+ sdkHandle: {
85
+ kind: "sdk-session-endpoint";
86
+ sessionId: string;
88
87
  };
89
88
  ownerHandle: {
90
89
  leasePath: string;
@@ -9,7 +9,7 @@ export type { LspServerStatus } from "./client";
9
9
  export type { LspToolDetails } from "./types";
10
10
  export interface LspStartupServerInfo {
11
11
  name: string;
12
- status: "connecting" | "ready" | "error";
12
+ status: "idle" | "connecting" | "ready" | "error";
13
13
  fileTypes: string[];
14
14
  error?: string;
15
15
  }
@@ -9,20 +9,20 @@ import type { Args } from "./cli/args";
9
9
  import { ModelRegistry } from "./config/model-registry";
10
10
  import { Settings } from "./config/settings";
11
11
  import type { ExtensionUIContext } from "./extensibility/extensions/types";
12
+ import type { AcpStartupOptions } from "./modes/acp/startup-options";
12
13
  import type { SessionSelectionResult } from "./modes/components/session-selector";
13
14
  import type { InteractiveMode } from "./modes/interactive-mode";
14
15
  import type { PrintModeOptions } from "./modes/print-mode";
15
16
  import { initTheme } from "./modes/theme/theme";
16
17
  import type { SubmittedUserInput } from "./modes/types";
17
18
  import type { MCPManager } from "./runtime-mcp";
18
- import { type CreateAgentSessionOptions, type CreateAgentSessionResult, createAgentSession, discoverAuthStorage } from "./sdk";
19
+ import { type CreateAgentSessionOptions, createAgentSession, discoverAuthStorage } from "./sdk";
19
20
  import type { AgentSession } from "./session/agent-session";
20
- import type { AuthStorage } from "./session/auth-storage";
21
21
  import { type ResumeSessionIdentity, type SessionInfo, SessionManager, type StrictSessionOpenResult } from "./session/session-manager";
22
22
  import { runStartupCredentialAutoImportIfNeeded } from "./setup/credential-auto-import";
23
23
  import type { LspStartupServerInfo } from "./tools";
24
24
  import type { EventBus } from "./utils/event-bus";
25
- export type StartupUpdateRoute = "interactive" | "print" | "text" | "json" | "rpc" | "rpc-ui" | "acp" | "bridge";
25
+ export type StartupUpdateRoute = "interactive" | "print" | "text" | "json" | "acp";
26
26
  export declare function classifyStartupUpdateRoute(parsed: Pick<Args, "print" | "mode">, autoPrint: boolean): StartupUpdateRoute;
27
27
  /** Coordinates the non-blocking update check around the interactive UI lifecycle. */
28
28
  export declare class StartupUpdateOrchestrator {
@@ -36,46 +36,44 @@ export interface StartupUpdateInteractiveMode {
36
36
  showNewVersionNotification: (version: string) => void;
37
37
  }
38
38
  export declare function initializeInteractiveModeWithStartupUpdate(mode: StartupUpdateInteractiveMode, startupUpdate: StartupUpdateOrchestrator): Promise<void>;
39
+ /**
40
+ * Translate only ACP startup settings with a canonical SDK control carrier.
41
+ * Every other local-session flag is rejected so the broker-backed ACP host
42
+ * never appears to accept options it cannot apply to its remote session.
43
+ */
44
+ export declare function resolveAcpStartupOptions(parsed: Pick<Args, "allowHome" | "apiKey" | "appendSystemPrompt" | "credential" | "continue" | "default" | "cwd" | "fileArgs" | "fork" | "hooks" | "messages" | "mpreset" | "mcpConfig" | "model" | "models" | "noLsp" | "noPty" | "noRules" | "noSession" | "noSkills" | "noTitle" | "noTools" | "pluginDirs" | "print" | "provider" | "providerSessionId" | "resume" | "sessionDir" | "skills" | "slow" | "smol" | "plan" | "systemPrompt" | "thinking" | "tmux" | "tools" | "extensions" | "unknownFlags">, sessionOptions: Pick<CreateAgentSessionOptions, "model" | "modelPattern" | "thinkingLevel">): AcpStartupOptions;
39
45
  declare function readPipedInput(): Promise<string | undefined>;
40
46
  export interface InteractiveModeNotify {
41
47
  kind: "warn" | "error" | "info";
42
48
  message: string;
43
49
  }
44
50
  export declare function submitInteractiveInput(mode: Pick<InteractiveMode, "markPendingSubmissionStarted" | "finishPendingSubmission" | "showError" | "checkShutdownRequested">, session: Pick<AgentSession, "prompt" | "promptCustomMessage">, input: SubmittedUserInput): Promise<void>;
45
- type CreateSessionForMain = (options: CreateAgentSessionOptions, context?: {
46
- skipPostCreateModelRefresh?: boolean;
47
- }) => Promise<CreateAgentSessionResult>;
48
- type AcpSessionFactory = (cwd: string) => Promise<AgentSession>;
49
- export interface AcpSessionFactoryOptions {
50
- baseOptions: CreateAgentSessionOptions;
51
- settings: Settings;
52
- sessionDir?: string;
53
- authStorage: AuthStorage;
54
- modelRegistry: ModelRegistry;
55
- parsedArgs: Pick<Args, "apiKey" | "default" | "model" | "mpreset" | "thinking">;
56
- rawArgs: string[];
57
- createSession: CreateSessionForMain;
58
- }
59
- export declare function applyStartupModelProfiles(args: {
51
+ type StartupModelProfileArgs = {
60
52
  session: AgentSession;
61
53
  settings: Settings;
62
54
  modelRegistry: ModelRegistry;
63
55
  parsedArgs: Pick<Args, "default" | "model" | "mpreset" | "thinking">;
64
56
  startupModel?: CreateAgentSessionOptions["model"];
65
57
  startupThinkingLevel?: CreateAgentSessionOptions["thinkingLevel"];
66
- }): Promise<void>;
67
- export declare function applyStartupModelProfilesOrExit(args: Parameters<typeof applyStartupModelProfiles>[0]): Promise<void>;
68
- /**
69
- * Build the per-`session/new` factory used by ACP mode.
70
- *
71
- * MCP servers in ACP sessions are owned exclusively by the ACP client, which
72
- * supplies them through `session/new.mcpServers` and re-applies them via
73
- * {@link AcpAgent#configureMcpServers}. We therefore force `enableMCP: false`
74
- * on every session created here so {@link createAgentSession} skips the on-disk
75
- * `.mcp.json` discovery path — otherwise host MCP tools land in the session's
76
- * tool registry and shadow the client-supplied servers (issue #1234).
77
- */
78
- export declare function createAcpSessionFactory(args: AcpSessionFactoryOptions): AcpSessionFactory;
58
+ };
59
+ export declare function applyStartupModelProfiles(args: StartupModelProfileArgs): Promise<void>;
60
+ export declare function applyStartupModelProfilesOrExit(args: StartupModelProfileArgs): Promise<void>;
61
+ export declare function isStartupModelProfileCredentialRecoveryEligible(options: {
62
+ isInteractive: boolean;
63
+ hasInteractiveTerminal: boolean;
64
+ initialMessage: string | undefined;
65
+ initialMessages: readonly string[];
66
+ resumeAction: "continue-tail" | "open-idle" | undefined;
67
+ }): boolean;
68
+ export declare function applyStartupModelProfilesForRoot(args: StartupModelProfileArgs & {
69
+ isInteractive: boolean;
70
+ hasInteractiveTerminal: boolean;
71
+ initialMessage: string | undefined;
72
+ initialMessages: readonly string[];
73
+ resumeAction: "continue-tail" | "open-idle" | undefined;
74
+ }): Promise<{
75
+ recoverableErrors: string[];
76
+ }>;
79
77
  interface InteractiveModeFactoryOptions {
80
78
  session: AgentSession;
81
79
  version: string;
@@ -105,15 +103,13 @@ export interface RlmPreset {
105
103
  applyOptions: (options: CreateAgentSessionOptions, settings: Settings) => void;
106
104
  onSessionCreated?: (session: AgentSession) => void | Promise<void>;
107
105
  }
108
- type RunRpcMode = (session: AgentSession, setToolUIContext?: CreateAgentSessionResult["setToolUIContext"], options?: {
109
- listen?: string;
110
- }) => Promise<void>;
111
- type RunBridgeMode = (session: AgentSession, setToolUIContext?: CreateAgentSessionResult["setToolUIContext"]) => Promise<void>;
112
106
  type RunPrintMode = (session: AgentSession, options: PrintModeOptions) => Promise<void>;
113
107
  export interface RunRootCommandDependencies {
114
108
  createAgentSession?: typeof createAgentSession;
115
109
  discoverAuthStorage?: typeof discoverAuthStorage;
116
- runAcpMode?: (createSession: AcpSessionFactory) => Promise<void>;
110
+ runAcpMode?: (options?: {
111
+ agentDir?: string;
112
+ }) => Promise<void>;
117
113
  settings?: Settings;
118
114
  rlmPreset?: RlmPreset;
119
115
  suppressProcessExit?: boolean;
@@ -124,8 +120,6 @@ export interface RunRootCommandDependencies {
124
120
  readPipedInput?: typeof readPipedInput;
125
121
  runStartupCredentialAutoImportIfNeeded?: typeof runStartupCredentialAutoImportIfNeeded;
126
122
  getChangelogForDisplay?: typeof getChangelogForDisplay;
127
- runRpcMode?: RunRpcMode;
128
- runBridgeMode?: RunBridgeMode;
129
123
  createInteractiveMode?: CreateInteractiveMode;
130
124
  runPrintMode?: RunPrintMode;
131
125
  isResumePickerTerminal?: ResumePickerTerminalCheck;
@@ -1,56 +1,239 @@
1
1
  import { type Agent, type AgentSideConnection, type AuthenticateRequest, type AuthenticateResponse, type ClientCapabilities, type CloseSessionRequest, type CloseSessionResponse, type DeleteSessionRequest, type DeleteSessionResponse, type ForkSessionRequest, type ForkSessionResponse, type InitializeRequest, type InitializeResponse, type ListSessionsRequest, type ListSessionsResponse, type LoadSessionRequest, type LoadSessionResponse, type NewSessionRequest, type NewSessionResponse, type PromptRequest, type PromptResponse, type ResumeSessionRequest, type ResumeSessionResponse, type SetSessionConfigOptionRequest, type SetSessionConfigOptionResponse, type SetSessionModeRequest, type SetSessionModeResponse } from "@agentclientprotocol/sdk";
2
- import type { ExtensionUIContext } from "../../extensibility/extensions";
3
- import type { AgentSession } from "../../session/agent-session";
2
+ import { type AcpProviderRegistration, AcpSdkAdapter } from "../../sdk/acp";
3
+ import type { AcpStartupOptions } from "./startup-options";
4
+ export declare const ACP_BOOTSTRAP_RACE_GUARD_MS = 50;
5
+ type JsonObject = Record<string, unknown>;
6
+ /** Applies ACP's offset cursor after narrowing the broker listing to the requested cwd. */
7
+ export declare function paginateAcpSessions(listed: unknown[], cwd: string | undefined, offset: number): ListSessionsResponse;
8
+ export type TranscriptReplayBlock = {
9
+ type: "text";
10
+ text: string;
11
+ } | {
12
+ type: "image";
13
+ data: string;
14
+ mimeType: string;
15
+ };
4
16
  /**
5
- * Delay between `session/new` (or `session/load` / `session/resume` /
6
- * `unstable_session/fork`) returning and the agent firing the first
7
- * notifications against the new session id. Mitigates Zed's
8
- * `Received session notification for unknown session` race — see
9
- * `#scheduleBootstrapUpdates`. Exported so the ACP test harness can
10
- * wait past this guard without hard-coding the literal.
17
+ * The production transcript query exposes durable `{ body, textSummary }`
18
+ * entries, not an ACP-shaped `content` array. Historical session JSONL has no
19
+ * recoverable image bytes, so replay exposes that boundary rather than
20
+ * pretending images were restored.
11
21
  */
12
- export declare const ACP_BOOTSTRAP_RACE_GUARD_MS = 50;
13
- type CreateAcpSession = (cwd: string) => Promise<AgentSession>;
22
+ export interface TranscriptReplayContent {
23
+ blocks: TranscriptReplayBlock[];
24
+ images: {
25
+ available: false;
26
+ reason: "historical_transcript_images_unavailable";
27
+ };
28
+ }
29
+ export declare function transcriptReplayContent(entry: unknown): TranscriptReplayContent;
30
+ /** Maps live canonical SDK config and model queries into the ACP 1.2.1 session state surface. */
31
+ export declare function acpSessionStateFromConfig(query: unknown, modelsQuery?: unknown): {
32
+ configOptions: ({
33
+ id: string;
34
+ name: string;
35
+ type: "select";
36
+ currentValue: string;
37
+ options: {
38
+ value: string;
39
+ name: string;
40
+ }[];
41
+ } | {
42
+ id: "model";
43
+ name: "Model";
44
+ type: "select";
45
+ currentValue: string;
46
+ options: {
47
+ value: string;
48
+ name: string;
49
+ }[] | ({
50
+ readonly value: "all";
51
+ readonly name: "All";
52
+ } | {
53
+ readonly value: "one-at-a-time";
54
+ readonly name: "One at a time";
55
+ } | {
56
+ readonly value: "all";
57
+ readonly name: "All";
58
+ } | {
59
+ readonly value: "one-at-a-time";
60
+ readonly name: "One at a time";
61
+ } | {
62
+ readonly value: "immediate";
63
+ readonly name: "Immediate";
64
+ } | {
65
+ readonly value: "wait";
66
+ readonly name: "Wait";
67
+ })[];
68
+ } | {
69
+ id: "thinking";
70
+ name: "Thinking";
71
+ type: "select";
72
+ currentValue: string;
73
+ options: {
74
+ value: string;
75
+ name: string;
76
+ }[] | ({
77
+ readonly value: "all";
78
+ readonly name: "All";
79
+ } | {
80
+ readonly value: "one-at-a-time";
81
+ readonly name: "One at a time";
82
+ } | {
83
+ readonly value: "all";
84
+ readonly name: "All";
85
+ } | {
86
+ readonly value: "one-at-a-time";
87
+ readonly name: "One at a time";
88
+ } | {
89
+ readonly value: "immediate";
90
+ readonly name: "Immediate";
91
+ } | {
92
+ readonly value: "wait";
93
+ readonly name: "Wait";
94
+ })[];
95
+ } | {
96
+ id: "steeringMode";
97
+ name: "Steering queue";
98
+ type: "select";
99
+ currentValue: string;
100
+ options: {
101
+ value: string;
102
+ name: string;
103
+ }[] | ({
104
+ readonly value: "all";
105
+ readonly name: "All";
106
+ } | {
107
+ readonly value: "one-at-a-time";
108
+ readonly name: "One at a time";
109
+ } | {
110
+ readonly value: "all";
111
+ readonly name: "All";
112
+ } | {
113
+ readonly value: "one-at-a-time";
114
+ readonly name: "One at a time";
115
+ } | {
116
+ readonly value: "immediate";
117
+ readonly name: "Immediate";
118
+ } | {
119
+ readonly value: "wait";
120
+ readonly name: "Wait";
121
+ })[];
122
+ } | {
123
+ id: "followUpMode";
124
+ name: "Follow-up queue";
125
+ type: "select";
126
+ currentValue: string;
127
+ options: {
128
+ value: string;
129
+ name: string;
130
+ }[] | ({
131
+ readonly value: "all";
132
+ readonly name: "All";
133
+ } | {
134
+ readonly value: "one-at-a-time";
135
+ readonly name: "One at a time";
136
+ } | {
137
+ readonly value: "all";
138
+ readonly name: "All";
139
+ } | {
140
+ readonly value: "one-at-a-time";
141
+ readonly name: "One at a time";
142
+ } | {
143
+ readonly value: "immediate";
144
+ readonly name: "Immediate";
145
+ } | {
146
+ readonly value: "wait";
147
+ readonly name: "Wait";
148
+ })[];
149
+ } | {
150
+ id: "interruptMode";
151
+ name: "Interrupt mode";
152
+ type: "select";
153
+ currentValue: string;
154
+ options: {
155
+ value: string;
156
+ name: string;
157
+ }[] | ({
158
+ readonly value: "all";
159
+ readonly name: "All";
160
+ } | {
161
+ readonly value: "one-at-a-time";
162
+ readonly name: "One at a time";
163
+ } | {
164
+ readonly value: "all";
165
+ readonly name: "All";
166
+ } | {
167
+ readonly value: "one-at-a-time";
168
+ readonly name: "One at a time";
169
+ } | {
170
+ readonly value: "immediate";
171
+ readonly name: "Immediate";
172
+ } | {
173
+ readonly value: "wait";
174
+ readonly name: "Wait";
175
+ })[];
176
+ })[];
177
+ modes: {
178
+ availableModes: {
179
+ id: string;
180
+ name: string;
181
+ }[];
182
+ currentModeId: string;
183
+ };
184
+ };
185
+ /** Convert every ACP prompt block the agent advertises without silently discarding context. */
186
+ export declare function acpPromptPayload(blocks: PromptRequest["prompt"]): {
187
+ text: string;
188
+ images: Array<{
189
+ data: string;
190
+ mimeType: string;
191
+ }>;
192
+ };
193
+ /** Registers a permission provider only when the ACP client requires prompts. */
194
+ export declare function acpProviderRegistrations(capabilities: ClientCapabilities | undefined, env?: NodeJS.ProcessEnv): AcpProviderRegistration[];
195
+ /** Maps ACP permission handling to the session's canonical SDK policy. */
196
+ export declare function applyAcpPermissionMode(adapter: Pick<AcpSdkAdapter, "control">, capabilities: ClientCapabilities | undefined, env?: NodeJS.ProcessEnv): Promise<void>;
197
+ /** Applies CLI-provided ACP startup settings through SDK controls before session exposure. */
198
+ export declare function applyAcpStartupOptions(adapter: Pick<AcpSdkAdapter, "setModel" | "control">, options: AcpStartupOptions | undefined): Promise<void>;
199
+ /** ACP form elicitation uses the client-facing reverse surface without owning a session runtime. */
200
+ export declare function createAcpExtensionUiContext(connection: AgentSideConnection, getSessionId: () => string, capabilities: ClientCapabilities | undefined): {
201
+ select: (message: string, options: string[], dialog?: {
202
+ signal?: AbortSignal;
203
+ timeout?: number;
204
+ onTimeout?: () => void;
205
+ }) => Promise<string | undefined>;
206
+ confirm: (message: string, detail?: string, dialog?: {
207
+ signal?: AbortSignal;
208
+ timeout?: number;
209
+ onTimeout?: () => void;
210
+ }) => Promise<boolean>;
211
+ input: (message: string, placeholder?: string, dialog?: {
212
+ signal?: AbortSignal;
213
+ timeout?: number;
214
+ onTimeout?: () => void;
215
+ }) => Promise<string | undefined>;
216
+ };
14
217
  /**
15
- * Build an {@link ExtensionUIContext} that translates skill/extension UI
16
- * requests into ACP elicitations against `connection` for the session
17
- * returned by `getSessionId()`. The id is read lazily at each elicitation
18
- * because `AgentSession.sessionId` is a getter over `sessionManager` state
19
- * that mutates when an extension command calls `ctx.newSession` /
20
- * `ctx.switchSession` — snapshotting it once at factory time would route
21
- * later elicitations to the pre-switch id. Live reads keep the bridge
22
- * symmetric with every other `sessionUpdate` call in this file
23
- * (`record.session.sessionId` is always evaluated at emit time).
24
- *
25
- * The non-elicitation surface (custom components, editor, theming,
26
- * terminal input) remains stubbed — ACP clients render those themselves
27
- * or not at all. Capability gating respects the client's `initialize`
28
- * advertisement.
218
+ * ACP is a pure SDK client. Session processes are created and resumed by the
219
+ * broker, while all per-session operations use that session's authenticated SDK
220
+ * endpoint. This class deliberately imports neither AgentSession nor any local
221
+ * runtime host component.
29
222
  */
30
- export declare function createAcpExtensionUiContext(connection: AgentSideConnection, getSessionId: () => string, clientCapabilities: ClientCapabilities | undefined): ExtensionUIContext;
31
223
  export declare class AcpAgent implements Agent {
32
224
  #private;
33
- constructor(connection: AgentSideConnection, createSession: CreateAcpSession, initialSession?: AgentSession);
34
- setCancelCleanupTimeoutForTesting(timeoutMs: number): void;
225
+ constructor(connection: AgentSideConnection, options?: {
226
+ agentDir?: string;
227
+ startupOptions?: AcpStartupOptions;
228
+ } | unknown);
35
229
  initialize(params: InitializeRequest): Promise<InitializeResponse>;
36
230
  authenticate(params: AuthenticateRequest): Promise<AuthenticateResponse>;
37
231
  newSession(params: NewSessionRequest): Promise<NewSessionResponse>;
38
232
  loadSession(params: LoadSessionRequest): Promise<LoadSessionResponse>;
39
- listSessions(params: ListSessionsRequest): Promise<ListSessionsResponse>;
40
233
  resumeSession(params: ResumeSessionRequest): Promise<ResumeSessionResponse>;
41
234
  unstable_forkSession(params: ForkSessionRequest): Promise<ForkSessionResponse>;
235
+ listSessions(params: ListSessionsRequest): Promise<ListSessionsResponse>;
42
236
  closeSession(params: CloseSessionRequest): Promise<CloseSessionResponse>;
43
- /**
44
- * Hard delete an ACP session. `DeleteSessionRequest` carries only `sessionId`;
45
- * the server owns authorization through the immutable canonical cwd scope and
46
- * the complete strict scoped inventory snapshot.
47
- *
48
- * - No scope / unknown / already-deleted id → lookup-free `{}`.
49
- * - Duplicate/conflict id → visible error; neither transcript nor artifacts change.
50
- * - Active session → reserve `deleting`, drain/cancel prompt, flush, strict
51
- * dispose/close, recheck identity/state, then verified artifact-first deletion.
52
- * - Concurrent delete callers join the terminal promise.
53
- */
54
237
  deleteSession(params: DeleteSessionRequest): Promise<DeleteSessionResponse>;
55
238
  setSessionMode(params: SetSessionModeRequest): Promise<SetSessionModeResponse>;
56
239
  setSessionConfigOption(params: SetSessionConfigOptionRequest): Promise<SetSessionConfigOptionResponse>;
@@ -58,21 +241,9 @@ export declare class AcpAgent implements Agent {
58
241
  cancel(params: {
59
242
  sessionId: string;
60
243
  }): Promise<void>;
61
- extMethod(method: string, params: {
62
- [key: string]: unknown;
63
- }): Promise<{
64
- [key: string]: unknown;
65
- }>;
66
- extNotification(_method: string, _params: {
67
- [key: string]: unknown;
68
- }): Promise<void>;
244
+ extMethod(method: string, params: JsonObject): Promise<JsonObject>;
245
+ extNotification(_method: string, _params: JsonObject): Promise<void>;
69
246
  get signal(): AbortSignal;
70
247
  get closed(): Promise<void>;
71
- /**
72
- * Connection-local shutdown promise. Resolves once all terminal work (dispose,
73
- * active deletes, abort cleanup) has settled. `acp-mode.ts` awaits this after
74
- * transport closure so `process.exit` never kills in-flight deletion/disposal.
75
- */
76
- get shutdownPromise(): Promise<void>;
77
248
  }
78
249
  export {};
@@ -6,4 +6,5 @@
6
6
  */
7
7
  import type { AgentSideConnection, ClientCapabilities } from "@agentclientprotocol/sdk";
8
8
  import type { ClientBridge } from "../../session/client-bridge";
9
+ export { type AcpPermissionMode, resolveAcpPermissionMode } from "./permission-mode";
9
10
  export declare function createAcpClientBridge(connection: AgentSideConnection, sessionId: string, clientCapabilities: ClientCapabilities | undefined): ClientBridge;
@@ -1,17 +1,8 @@
1
1
  import { AgentSideConnection, type Stream } from "@agentclientprotocol/sdk";
2
- import type { AgentSession } from "../../session/agent-session";
3
- import { AcpAgent } from "./acp-agent";
4
- export type AcpSessionFactory = (cwd: string) => Promise<AgentSession>;
5
- export interface AcpConnectionHandle {
6
- connection: AgentSideConnection;
7
- agent: AcpAgent;
2
+ import type { AcpStartupOptions } from "./startup-options";
3
+ export interface AcpModeOptions {
4
+ agentDir?: string;
5
+ startupOptions?: AcpStartupOptions;
8
6
  }
9
- export declare function createAcpConnection(transport: Stream, createSession: AcpSessionFactory, initialSession?: AgentSession): AgentSideConnection;
10
- /**
11
- * Create an ACP connection and return both the {@link AgentSideConnection} and the
12
- * underlying {@link AcpAgent}. Callers that need to await agent shutdown (terminal
13
- * delete/dispose work) after transport closure should use this instead of
14
- * {@link createAcpConnection}.
15
- */
16
- export declare function createAcpConnectionWithAgent(transport: Stream, createSession: AcpSessionFactory, initialSession?: AgentSession): AcpConnectionHandle;
17
- export declare function runAcpMode(createSession: AcpSessionFactory, initialSession?: AgentSession): Promise<never>;
7
+ export declare function createAcpConnection(transport: Stream, options?: AcpModeOptions): AgentSideConnection;
8
+ export declare function runAcpMode(options?: AcpModeOptions): Promise<never>;