@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
@@ -1,14 +1,12 @@
1
1
  import type { AskSelectedAckOutcome } from "../../../tools";
2
- import type { RpcWorkflowGate, RpcWorkflowGateContext, RpcWorkflowGateKind, RpcWorkflowGateOption, RpcWorkflowGateResolution, RpcWorkflowGateResponse, RpcWorkflowGateValidationError, RpcWorkflowStage } from "../../rpc/rpc-types";
2
+ import type { WorkflowGate, WorkflowGateContext, WorkflowGateDiagnostic, WorkflowGateKind, WorkflowGateOption, WorkflowGateQueryRecord, WorkflowGateResolution, WorkflowGateResponse, WorkflowGateValidationError, WorkflowStage } from "./workflow-gate-types";
3
3
  export type PersistedSemanticDisposition = "commit" | "resolve_without_commit";
4
4
  export type PersistedResolutionOrigin = {
5
5
  kind: "generic";
6
- channel: "rpc" | "bridge" | "other";
6
+ channel: "sdk" | "other";
7
7
  } | {
8
8
  kind: "telegram_notification";
9
9
  interactionActionId: string;
10
- } | {
11
- kind: "legacy_unknown";
12
10
  };
13
11
  export type PersistedAckPolicy = {
14
12
  kind: "none";
@@ -27,51 +25,153 @@ export interface GateResolutionOptions {
27
25
  ackPolicy?: PersistedAckPolicy;
28
26
  beforeAdvance?: () => Promise<void>;
29
27
  }
28
+ export type WorkflowGateTerminalProof = "retired" | "already_terminal" | "not_published";
29
+ export interface WorkflowGateTerminalController {
30
+ completeGateInteractions(gateId: string): WorkflowGateTerminalProof | Promise<WorkflowGateTerminalProof>;
31
+ cancelGateInteractions(gateId: string, reason: string): void | Promise<void>;
32
+ }
33
+ export interface NotificationGateResolutionOptions {
34
+ interactionActionId: string;
35
+ replyReceiptId: string;
36
+ answerJson: string;
37
+ idempotencyKey?: string;
38
+ requestSelectedAck(input: {
39
+ replyReceiptId: string;
40
+ actionId: string;
41
+ commitKey: string;
42
+ daemonDeadlineAt: number;
43
+ hostTimeoutMs: number;
44
+ }): Promise<AskSelectedAckOutcome>;
45
+ resolveClaim(): void;
46
+ closeClaimInvalid(reason: string): void;
47
+ }
48
+ export interface AskSelectedAckRecoveryParticipant {
49
+ requestRecoveredAskSelectedAck(input: {
50
+ sessionId: string;
51
+ actionId: string;
52
+ commitKey: string;
53
+ deadlineAt: number;
54
+ hostTimeoutMs: number;
55
+ }): Promise<AskSelectedAckOutcome>;
56
+ }
57
+ /** SDK-native surface for emitting a workflow gate and awaiting its answer. */
58
+ export interface WorkflowGateEmitter {
59
+ isUnattended(): boolean;
60
+ emitGate(input: OpenGateInput): Promise<unknown>;
61
+ onGateEmitted?(listener: (gate: WorkflowGate) => void): () => void;
62
+ resolveGate?(response: WorkflowGateResponse): Promise<WorkflowGateResolution>;
63
+ resolveGateFromNotification?(response: WorkflowGateResponse, options: NotificationGateResolutionOptions): Promise<WorkflowGateResolution>;
64
+ registerGateTerminalController?(controller: WorkflowGateTerminalController): () => void;
65
+ /** Records the exact terminalization proof established by direct control preparation. */
66
+ prepareTerminalization?(gateId: string, proof: WorkflowGateTerminalProof): boolean;
67
+ /** Discards a prepared proof when the gate remains pending after a rejected direct response. */
68
+ clearPreparedTerminalization?(gateId: string): void;
69
+ listPendingGates?(): WorkflowGate[];
70
+ listGateDiagnostics?(): WorkflowGateDiagnostic[];
71
+ listWorkflowGateQueryRecords?(): WorkflowGateQueryRecord[];
72
+ quarantineGate?(gateId: string): void;
73
+ setAckRecoveryParticipant?(participant: AskSelectedAckRecoveryParticipant | null): void;
74
+ /** Explicit host hook for same-process accepted-but-unadvanced recovery. */
75
+ recoverAcceptedGates?(): Promise<string[]>;
76
+ /** Permanently revoke all in-process continuation authority and reject their waiters. */
77
+ fence?(): void;
78
+ /** Temporarily make this emitter unavailable while a session transition is reversible. */
79
+ suspend?(): void;
80
+ resume?(): void;
81
+ }
82
+ /**
83
+ * SDK-native workflow-gate emitter backed by a durable broker/store pair.
84
+ *
85
+ * Answers are resolved by the broker, so validation and idempotency have one
86
+ * authority. Listeners replay durable pending gates when attached, allowing an
87
+ * SDK host that starts after a gate was opened to discover it.
88
+ */
89
+ export declare class BrokerWorkflowGateEmitter implements WorkflowGateEmitter {
90
+ #private;
91
+ constructor(runId: string, store: GateStore, emitterHooks?: Pick<BrokerHooks, "advance">);
92
+ isUnattended(): boolean;
93
+ emitGate(input: OpenGateInput): Promise<unknown>;
94
+ onGateEmitted(listener: (gate: WorkflowGate) => void): () => void;
95
+ resolveGate(response: WorkflowGateResponse): Promise<WorkflowGateResolution>;
96
+ prepareTerminalization(gateId: string, proof: WorkflowGateTerminalProof): boolean;
97
+ clearPreparedTerminalization(gateId: string): void;
98
+ listPendingGates(): WorkflowGate[];
99
+ listGateDiagnostics(): WorkflowGateDiagnostic[];
100
+ listWorkflowGateQueryRecords(): WorkflowGateQueryRecord[];
101
+ suspend(): void;
102
+ resume(): void;
103
+ fence(): void;
104
+ quarantineGate(gateId: string): void;
105
+ registerGateTerminalController(controller: WorkflowGateTerminalController): () => void;
106
+ setAckRecoveryParticipant(participant: AskSelectedAckRecoveryParticipant | null): void;
107
+ recoverAcceptedGates(): Promise<string[]>;
108
+ resolveGateFromNotification(response: WorkflowGateResponse, options: NotificationGateResolutionOptions): Promise<WorkflowGateResolution>;
109
+ }
30
110
  export interface PersistedGate {
31
- gate: RpcWorkflowGate;
32
- status: "pending" | "accepted";
111
+ gate: WorkflowGate;
112
+ status: "pending" | "accepted" | "quarantined";
113
+ ownerInstanceId?: string;
33
114
  idempotencyKey?: string;
34
115
  responseHash?: string;
35
- /** Raw accepted answer, retained so a crashed advance can be replayed. */
116
+ /** Raw accepted answer, retained so a same-process advance can be replayed. */
36
117
  answer?: unknown;
37
- resolution?: RpcWorkflowGateResolution;
118
+ resolution?: WorkflowGateResolution;
38
119
  advanced: boolean;
120
+ /** Exact presentation terminalization completed before workflow advancement. */
121
+ terminalized?: boolean;
122
+ /** Exact presentation terminalization proof recorded before workflow advancement. */
123
+ terminalProof?: WorkflowGateTerminalProof;
39
124
  semanticDisposition?: PersistedSemanticDisposition;
40
125
  resolutionOrigin?: PersistedResolutionOrigin;
41
126
  ackPolicy?: PersistedAckPolicy;
127
+ lifecycle?: WorkflowGateDiagnostic["lifecycle"];
42
128
  }
43
129
  export interface GateStore {
44
- nextSeq(stage: RpcWorkflowStage): number;
130
+ nextSeq(stage: WorkflowStage): number;
45
131
  put(record: PersistedGate): void;
46
132
  get(gateId: string): PersistedGate | undefined;
47
- /** All persisted gate records (used for crash recovery). */
133
+ /** Atomically quarantines records owned by a prior runtime before exposure. */
134
+ beginRuntimeInstance(instanceId: string): void;
135
+ /** All persisted gate records (used for same-process recovery and Q12). */
48
136
  list(): PersistedGate[];
49
137
  }
50
138
  export declare class MemoryGateStore implements GateStore {
51
139
  private counters;
52
140
  private gates;
53
- nextSeq(stage: RpcWorkflowStage): number;
141
+ private runtimeInstanceId;
142
+ nextSeq(stage: WorkflowStage): number;
54
143
  put(record: PersistedGate): void;
55
144
  get(gateId: string): PersistedGate | undefined;
145
+ beginRuntimeInstance(instanceId: string): void;
56
146
  list(): PersistedGate[];
57
147
  }
148
+ /** A write may have reached `rename` but not the directory fsync durability barrier. */
149
+ export declare class GateStoreWriteError extends Error {
150
+ readonly certainty: "not_committed" | "uncertain";
151
+ constructor(certainty: "not_committed" | "uncertain", cause: unknown);
152
+ }
58
153
  /** Crash-durable JSON-file backed store. Writes the full state on every mutation. */
59
154
  export declare class FileGateStore implements GateStore {
60
155
  private readonly filePath;
156
+ private readonly sync;
61
157
  private state;
62
- constructor(filePath: string);
158
+ private certaintyUnknown;
159
+ constructor(filePath: string, sync?: (fd: number) => void);
63
160
  private load;
64
- private flush;
65
- nextSeq(stage: RpcWorkflowStage): number;
161
+ private flushState;
162
+ private commit;
163
+ private reconcileCertainty;
164
+ nextSeq(stage: WorkflowStage): number;
66
165
  put(record: PersistedGate): void;
67
166
  get(gateId: string): PersistedGate | undefined;
167
+ beginRuntimeInstance(instanceId: string): void;
68
168
  list(): PersistedGate[];
69
169
  }
70
170
  export type GateAuditEvent = {
71
171
  event: "gate_emitted";
72
172
  gate_id: string;
73
- stage: RpcWorkflowStage;
74
- kind: RpcWorkflowGateKind;
173
+ stage: WorkflowStage;
174
+ kind: WorkflowGateKind;
75
175
  } | {
76
176
  event: "gate_response_accepted";
77
177
  gate_id: string;
@@ -98,49 +198,88 @@ export type GateAuditEvent = {
98
198
  };
99
199
  export interface BrokerHooks {
100
200
  /** Called once when a pending gate has been persisted and should be emitted. */
101
- emit?(gate: RpcWorkflowGate): void;
201
+ emit?(gate: WorkflowGate): void;
102
202
  /**
103
203
  * Invoked to advance the workflow after an accepted resolution is durably
104
204
  * committed. MUST be idempotent keyed by `gate.gate_id`: `recover()` replays
105
205
  * it for any gate left `accepted` but not `advanced` by a crash.
106
206
  */
107
- advance?(gate: RpcWorkflowGate, answer: unknown): void | Promise<void>;
108
- /** Runs after durable acceptance and before advance, including crash recovery. */
207
+ advance?(gate: WorkflowGate, answer: unknown): void | Promise<void>;
208
+ /** Runs after durable acceptance and before presentation terminalization, including crash recovery. */
109
209
  finalizeAccepted?(record: PersistedGate): Promise<void>;
210
+ /**
211
+ * Terminalizes the exact presentation before `advance` can run and returns
212
+ * proof for the durable record. `not_published` explicitly proves that no
213
+ * presentation existed. On failure it MUST revoke authority or throw.
214
+ */
215
+ terminalizeAccepted?(record: PersistedGate): WorkflowGateTerminalProof | Promise<WorkflowGateTerminalProof>;
216
+ /** Runs only after a successful advance has been durably marked advanced. */
217
+ completeAccepted?(record: PersistedGate): void | Promise<void>;
110
218
  /** Append-only audit sink. */
111
219
  audit?(event: GateAuditEvent): void;
112
220
  }
221
+ /** Live in-process continuation authority for one emitted gate. */
222
+ export interface GateContinuation {
223
+ activate(gate: WorkflowGate): void;
224
+ isLive(gateId: string): boolean;
225
+ release?(gateId: string): void;
226
+ /** Explicitly declares that this direct continuation owns no presentation. */
227
+ terminalProof?: "not_published";
228
+ }
113
229
  export interface OpenGateInput {
114
- stage: RpcWorkflowStage;
115
- kind: RpcWorkflowGateKind;
116
- schema: RpcWorkflowGate["schema"];
117
- options?: RpcWorkflowGateOption[];
118
- context?: RpcWorkflowGateContext;
230
+ stage: WorkflowStage;
231
+ kind: WorkflowGateKind;
232
+ schema: WorkflowGate["schema"];
233
+ options?: WorkflowGateOption[];
234
+ context?: WorkflowGateContext;
235
+ /** Optional diagnostic gate replaced by this newly persisted gate. */
236
+ supersedesGateId?: string;
119
237
  }
120
238
  export declare class WorkflowGateBrokerError extends Error {
121
239
  readonly code: "unknown_gate" | "already_resolved" | "idempotency_conflict" | "invalid_workflow_stage";
122
240
  constructor(code: "unknown_gate" | "already_resolved" | "idempotency_conflict" | "invalid_workflow_stage", message: string);
123
241
  }
124
242
  export declare class WorkflowGateBroker {
243
+ #private;
125
244
  private readonly runId;
126
245
  private readonly store;
127
246
  private readonly hooks;
247
+ private readonly instanceId;
128
248
  private readonly recovering;
129
249
  private readonly gateLocks;
250
+ private readonly continuations;
130
251
  private withGateLock;
131
- constructor(runId: string, store: GateStore, hooks?: BrokerHooks);
252
+ constructor(runId: string, store: GateStore, hooks?: BrokerHooks, instanceId?: `${string}-${string}-${string}-${string}-${string}`);
132
253
  classifyDisposition(gateId: string, answer: unknown): PersistedSemanticDisposition;
133
- validationError(gateId: string, keyword: string, message: string): RpcWorkflowGateValidationError;
254
+ validationError(gateId: string, keyword: string, message: string): WorkflowGateValidationError;
134
255
  updateAckPolicy(gateId: string, ackPolicy: PersistedAckPolicy): void;
135
256
  private runShort;
257
+ private hasLiveContinuation;
258
+ hasRecoverableAcceptedGate(): boolean;
259
+ prepareTerminalization(gateId: string, proof: WorkflowGateTerminalProof): boolean;
260
+ clearPreparedTerminalization(gateId: string): void;
261
+ /**
262
+ * Fences a gate after an uncertain control outcome by deliberately releasing
263
+ * this runtime's continuation authority. The durable diagnostic is retained
264
+ * for recovery; it is never republished as a pending gate.
265
+ */
266
+ quarantineGate(gateId: string): void;
267
+ /** Revoke every live continuation, including accepted-but-unadvanced recovery authority. */
268
+ fenceContinuations(): void;
269
+ /** Fence a cancelled/lost continuation before it can be exposed or advanced. */
270
+ loseContinuation(gateId: string): void;
271
+ listPendingGates(): WorkflowGate[];
272
+ listGateDiagnostics(): WorkflowGateDiagnostic[];
273
+ listWorkflowGateQueryRecords(): WorkflowGateQueryRecord[];
136
274
  /** Open and emit a gate. The pending record is persisted BEFORE emission. */
137
- openGate(input: OpenGateInput): RpcWorkflowGate;
275
+ openGate(input: OpenGateInput, continuation?: GateContinuation): WorkflowGate;
138
276
  /**
139
277
  * Resolve a gate with an answer. Validates against the advertised schema.
140
- * On success the resolution is persisted BEFORE `advance` is invoked exactly
141
- * once. Invalid answers leave the gate pending (per #315 acceptance).
278
+ * Accepted answers are persisted first, then their presentation is terminalized,
279
+ * then the workflow advances and commits `advanced:true` exactly once. Invalid
280
+ * answers leave the gate pending (per #315 acceptance).
142
281
  */
143
- resolve(response: RpcWorkflowGateResponse, options?: GateResolutionOptions): Promise<RpcWorkflowGateResolution>;
282
+ resolve(response: WorkflowGateResponse, options?: GateResolutionOptions): Promise<WorkflowGateResolution>;
144
283
  private resolveUnlocked;
145
284
  /**
146
285
  * Recover any gate left `accepted` but not `advanced` by a crash between the
@@ -1,4 +1,4 @@
1
- import type { RpcJsonSchema, RpcWorkflowGateValidationError } from "../../rpc/rpc-types";
1
+ import type { JsonSchema, WorkflowGateValidationError } from "./workflow-gate-types";
2
2
  export declare const GATE_SCHEMA_LIMITS: {
3
3
  readonly maxSchemaBytes: number;
4
4
  readonly maxDepth: 16;
@@ -13,10 +13,10 @@ export declare class WorkflowGateSchemaError extends Error {
13
13
  }
14
14
  /** Canonical (stable-key-ordered) JSON serialization used for hashing. */
15
15
  export declare function canonicalJson(value: unknown): string;
16
- export declare function schemaHash(schema: RpcJsonSchema): string;
16
+ export declare function schemaHash(schema: JsonSchema): string;
17
17
  declare function answerHashOf(answer: unknown): string;
18
18
  /** Validate the schema *shape*. Throws WorkflowGateSchemaError on any problem. */
19
- export declare function assertSupportedGateSchema(schema: RpcJsonSchema): void;
19
+ export declare function assertSupportedGateSchema(schema: JsonSchema): void;
20
20
  type SchemaError = {
21
21
  path: string;
22
22
  keyword: string;
@@ -25,15 +25,15 @@ type SchemaError = {
25
25
  };
26
26
  /** A compiled, cached validator for one schema. */
27
27
  export interface CompiledGateSchema {
28
- readonly schema: RpcJsonSchema;
28
+ readonly schema: JsonSchema;
29
29
  readonly hash: string;
30
30
  validate(answer: unknown): SchemaError[];
31
31
  }
32
32
  /** Compile (and cache) a validator for a schema. Asserts shape on first compile. */
33
- export declare function compileGateSchema(schema: RpcJsonSchema): CompiledGateSchema;
33
+ export declare function compileGateSchema(schema: JsonSchema): CompiledGateSchema;
34
34
  /**
35
35
  * Validate an answer against a compiled gate schema. Returns `null` on success
36
- * or a typed {@link RpcWorkflowGateValidationError} on mismatch.
36
+ * or a typed {@link WorkflowGateValidationError} on mismatch.
37
37
  */
38
- export declare function validateGateAnswer(compiled: CompiledGateSchema, gateId: string, answer: unknown): RpcWorkflowGateValidationError | null;
38
+ export declare function validateGateAnswer(compiled: CompiledGateSchema, gateId: string, answer: unknown): WorkflowGateValidationError | null;
39
39
  export { answerHashOf };
@@ -0,0 +1,105 @@
1
+ /** Transport-neutral workflow gate contract used by SDK workflow coordination. */
2
+ /** Lifecycle stages that emit machine-addressable SDK workflow gates. */
3
+ export type WorkflowStage = "deep-interview" | "ralplan" | "ultragoal";
4
+ /** Reserved stage names that are explicitly not part of the v1 contract. */
5
+ export declare const RESERVED_WORKFLOW_STAGES: readonly string[];
6
+ export type WorkflowGateKind = "question" | "approval" | "execution";
7
+ /** The documented JSON Schema 2020-12 subset supported by the gate validator. */
8
+ export interface JsonSchema {
9
+ type?: "string" | "number" | "integer" | "boolean" | "object" | "array" | "null";
10
+ enum?: unknown[];
11
+ const?: unknown;
12
+ properties?: Record<string, JsonSchema>;
13
+ required?: string[];
14
+ additionalProperties?: boolean | JsonSchema;
15
+ items?: JsonSchema;
16
+ minLength?: number;
17
+ maxLength?: number;
18
+ pattern?: string;
19
+ minItems?: number;
20
+ maxItems?: number;
21
+ uniqueItems?: boolean;
22
+ minimum?: number;
23
+ maximum?: number;
24
+ title?: string;
25
+ description?: string;
26
+ oneOf?: JsonSchema[];
27
+ anyOf?: JsonSchema[];
28
+ }
29
+ export interface WorkflowGateOption {
30
+ value: unknown;
31
+ label: string;
32
+ description?: string;
33
+ }
34
+ export interface WorkflowGateContext {
35
+ title?: string;
36
+ plan?: string;
37
+ source?: string;
38
+ prompt?: string;
39
+ summary?: string;
40
+ stage_state?: Record<string, unknown>;
41
+ artifact_refs?: Array<{
42
+ kind: string;
43
+ path?: string;
44
+ sha256?: string;
45
+ }>;
46
+ language?: string;
47
+ }
48
+ /** Outbound event: a machine-addressable workflow gate awaiting an answer. */
49
+ export interface WorkflowGate {
50
+ type: "workflow_gate";
51
+ gate_id: string;
52
+ stage: WorkflowStage;
53
+ kind: WorkflowGateKind;
54
+ schema: JsonSchema;
55
+ schema_hash: string;
56
+ options?: WorkflowGateOption[];
57
+ context: WorkflowGateContext;
58
+ created_at: string;
59
+ required: true;
60
+ }
61
+ /** Non-actionable durable-gate state retained for restart diagnostics. */
62
+ export interface WorkflowGateLifecycle {
63
+ state: "quarantined";
64
+ reason: "orphaned_after_process_restart" | "accepted_unadvanced_after_process_restart" | "continuation_owner_lost" | "opened_without_continuation" | "finalization_failed" | "advance_failed";
65
+ quarantinedAt: string;
66
+ supersededByGateId?: string;
67
+ }
68
+ /** A quarantined gate is diagnostic-only and must never be presented or answered. */
69
+ export interface WorkflowGateDiagnostic extends WorkflowGate {
70
+ id: string;
71
+ tag: "quarantined";
72
+ lifecycle: WorkflowGateLifecycle;
73
+ }
74
+ /** Stable Q12 row preserving the root WorkflowGate shape. */
75
+ export type WorkflowGateQueryRecord = (WorkflowGate & {
76
+ id: string;
77
+ tag: "pending";
78
+ lifecycle?: undefined;
79
+ }) | WorkflowGateDiagnostic;
80
+ /** Inbound: the agent's answer to a workflow gate. */
81
+ export interface WorkflowGateResponse {
82
+ gate_id: string;
83
+ answer: unknown;
84
+ idempotency_key?: string;
85
+ }
86
+ /** Outcome of resolving a gate, surfaced back to the answering client. */
87
+ export interface WorkflowGateResolution {
88
+ gate_id: string;
89
+ status: "accepted" | "rejected";
90
+ answer_hash: string;
91
+ resolved_at: string;
92
+ error?: WorkflowGateValidationError;
93
+ }
94
+ /** Typed error shape for schema validation failures. */
95
+ export interface WorkflowGateValidationError {
96
+ code: "invalid_workflow_gate_answer";
97
+ gate_id: string;
98
+ schema_hash: string;
99
+ errors: Array<{
100
+ path: string;
101
+ keyword: string;
102
+ message: string;
103
+ expected?: unknown;
104
+ }>;
105
+ }
@@ -9,6 +9,7 @@ import type { CompactOptions } from "../extensibility/extensions/types";
9
9
  import type { Skill } from "../extensibility/skills";
10
10
  import type { PlanApprovalDetails } from "../plan-mode/approved-plan";
11
11
  import type { MCPManager } from "../runtime-mcp";
12
+ import type { NotificationSessionReconcileResult, NotificationSessionStatus } from "../sdk/bus/session-control";
12
13
  import type { AgentSession, AgentSessionEvent } from "../session/agent-session";
13
14
  import type { HistoryStorage } from "../session/history-storage";
14
15
  import type { SessionContext, SessionManager } from "../session/session-manager";
@@ -80,6 +81,10 @@ export interface InteractiveModeContext {
80
81
  historyStorage?: HistoryStorage;
81
82
  mcpManager?: MCPManager;
82
83
  lspServers?: LspStartupServerInfo[];
84
+ /** Shared controller query; absent in ACP/lightweight test contexts. */
85
+ getCurrentSessionNotificationStatus?(): NotificationSessionStatus | undefined;
86
+ /** Toggle only the current session; absent in ACP/lightweight test contexts. */
87
+ setCurrentSessionNotificationsEnabled?(enabled: boolean): Promise<NotificationSessionReconcileResult | undefined>;
83
88
  readonly ircLedger: IrcObservationLedger;
84
89
  isInitialized: boolean;
85
90
  isBackgrounded: boolean;
@@ -5,6 +5,8 @@ import type { MCPGetPromptResult, MCPPrompt, MCPRequestOptions, MCPResource, MCP
5
5
  */
6
6
  export declare function connectToServer(name: string, config: MCPServerConfig, options?: {
7
7
  signal?: AbortSignal;
8
+ /** Whether to advertise the roots/list capability (default: true). */
9
+ advertiseRoots?: boolean;
8
10
  onNotification?: (method: string, params: unknown) => void;
9
11
  onRequest?: (method: string, params: unknown) => Promise<unknown>;
10
12
  }): Promise<MCPServerConnection>;
@@ -13,8 +13,10 @@ export interface LoadMCPConfigsOptions {
13
13
  filterExa?: boolean;
14
14
  /** Whether to filter out browser MCP servers when builtin browser tool is enabled (default: false) */
15
15
  filterBrowser?: boolean;
16
- /** Only include servers eligible for startup connection, i.e. autoload !== false (default: false) */
16
+ /** Only include startup-eligible servers; exact-config sessions always enforce autoload !== false. */
17
17
  autoloadOnly?: boolean;
18
+ /** Load only this explicit MCP config file. */
19
+ configPath?: string;
18
20
  }
19
21
  /** Result of loading MCP configs */
20
22
  export interface LoadMCPConfigsResult {
@@ -24,6 +26,8 @@ export interface LoadMCPConfigsResult {
24
26
  exaApiKeys: string[];
25
27
  /** Source metadata for each server */
26
28
  sources: Record<string, SourceMeta>;
29
+ /** Whether the explicit configuration was unavailable or contained invalid entries. */
30
+ configurationWarning: boolean;
27
31
  }
28
32
  /**
29
33
  * Load all MCP server configs from standard locations.
@@ -42,6 +42,12 @@ export interface MCPDiscoverOptions {
42
42
  autoloadOnly?: boolean;
43
43
  /** Called when starting to connect to servers */
44
44
  onConnecting?: (serverNames: string[]) => void;
45
+ /** Load only this explicit MCP config file. */
46
+ configPath?: string;
47
+ }
48
+ export interface MCPManagerOptions {
49
+ /** Restrict this instance to tools from an explicit MCP config. */
50
+ toolsOnly?: boolean;
45
51
  }
46
52
  /**
47
53
  * MCP Server Manager.
@@ -58,7 +64,8 @@ export declare class MCPManager {
58
64
  static setInstance(value: MCPManager | undefined): void;
59
65
  /** Reset the process-global instance. Test-only. */
60
66
  static resetForTests(): void;
61
- constructor(cwd: string, toolCache?: MCPToolCache | null);
67
+ constructor(cwd: string, toolCache?: MCPToolCache | null, options?: MCPManagerOptions);
68
+ isToolsOnly(): boolean;
62
69
  /**
63
70
  * Set a callback to receive all server notifications.
64
71
  */
@@ -187,6 +187,10 @@ export interface MCPToolCallResult {
187
187
  content: MCPContent[];
188
188
  isError?: boolean;
189
189
  }
190
+ /** Expected configured-server transport or protocol failure. */
191
+ export declare class MCPExpectedFailure extends Error {
192
+ constructor(cause?: unknown);
193
+ }
190
194
  export interface MCPRequestOptions {
191
195
  /** Abort signal (e.g. Escape-to-interrupt) */
192
196
  signal?: AbortSignal;
@@ -0,0 +1,67 @@
1
+ import { SdkClient, SdkClientError, type SdkFrame } from "../client";
2
+ type JsonObject = Record<string, unknown>;
3
+ /** The small agent-side ACP surface used for reverse requests. */
4
+ export interface AcpReverseConnection {
5
+ request?(method: string, params: JsonObject): Promise<unknown>;
6
+ [key: string]: unknown;
7
+ }
8
+ export interface AcpProviderRegistration {
9
+ capability: string;
10
+ definitions: unknown;
11
+ }
12
+ export interface AcpSdkAdapterOptions {
13
+ url: string;
14
+ token: string;
15
+ client?: SdkClient;
16
+ connection?: AcpReverseConnection;
17
+ providers?: AcpProviderRegistration[];
18
+ /** Lease IDs persisted by the ACP host across a WebSocket reconnect. */
19
+ expectedLeaseIds?: Record<string, string>;
20
+ heartbeatMs?: number;
21
+ reverseCancelTtlMs?: number;
22
+ }
23
+ export declare class AcpSdkAdapterError extends Error {
24
+ readonly code: string;
25
+ constructor(code: string, message?: string);
26
+ }
27
+ export type AcpReconnectFailedHandler = (error: SdkClientError) => void;
28
+ export type AcpFrameHandler = (frame: SdkFrame) => void;
29
+ /**
30
+ * Pure ACP-to-SDK adapter. It deliberately owns neither an AgentSession nor an
31
+ * ACP bridge: all session work is performed through authenticated v3 frames.
32
+ */
33
+ export declare class AcpSdkAdapter {
34
+ #private;
35
+ constructor(options: AcpSdkAdapterOptions);
36
+ static connect(options: AcpSdkAdapterOptions): Promise<AcpSdkAdapter>;
37
+ get leaseIds(): ReadonlyMap<string, string>;
38
+ get connectionId(): string | undefined;
39
+ onReconnectFailed(handler: AcpReconnectFailedHandler): () => void;
40
+ onFrame(handler: AcpFrameHandler): () => void;
41
+ start(): Promise<void>;
42
+ close(): Promise<void>;
43
+ prompt(params: JsonObject | string): Promise<unknown>;
44
+ cancel(): Promise<unknown>;
45
+ setModel(params: JsonObject | string): Promise<unknown>;
46
+ control(operation: string, input?: JsonObject): Promise<unknown>;
47
+ query(query: string, input?: JsonObject, cursor?: string): Promise<unknown>;
48
+ global(operation: string, input?: JsonObject, idempotencyKey?: string): Promise<unknown>;
49
+ sdkControl(params: {
50
+ operation: string;
51
+ input?: JsonObject;
52
+ }): Promise<unknown>;
53
+ sdkQuery(params: {
54
+ query: string;
55
+ input?: JsonObject;
56
+ cursor?: string;
57
+ }): Promise<unknown>;
58
+ sdkGlobal(params: {
59
+ operation: string;
60
+ input?: JsonObject;
61
+ idempotencyKey?: string;
62
+ }): Promise<unknown>;
63
+ /** Dispatches the ACP extension method names without exposing endpoint credentials. */
64
+ handle(method: string, params?: JsonObject): Promise<unknown>;
65
+ registerProvider(provider: AcpProviderRegistration): Promise<void>;
66
+ }
67
+ export {};
@@ -0,0 +1,2 @@
1
+ export type { AcpProviderRegistration, AcpReverseConnection, AcpSdkAdapterOptions } from "./adapter";
2
+ export { AcpSdkAdapter, AcpSdkAdapterError } from "./adapter";
@@ -0,0 +1,53 @@
1
+ import { type BrokerDiscovery, redactBrokerDiscovery } from "./discovery";
2
+ import { type LifecycleDurableEffectsReceipt, LifecycleLedger, type LifecycleStartupFailureReceipt } from "./lifecycle-ledger";
3
+ import { SessionIndex } from "./session-index";
4
+ export interface BrokerSettings {
5
+ agentDir: string;
6
+ packageGeneration?: string;
7
+ port?: number;
8
+ heartbeatTtlMs?: number;
9
+ }
10
+ export type BrokerErrorCode = "idempotency_conflict" | "terminal_uncertain" | "broker_restarting" | "unavailable" | "endpoint_stale" | "resource_gone" | "invalid_input" | "spawn_failed" | "readiness_timeout" | "close_refused" | "not_found" | "live_session" | "cleanup_pending" | (string & {});
11
+ export type BrokerCleanupEvidence = {
12
+ phase: "artifacts" | "transcript" | "metadata";
13
+ artifactsIdentity?: {
14
+ dev: string;
15
+ ino: string;
16
+ };
17
+ transcriptIdentity?: {
18
+ dev: string;
19
+ ino: string;
20
+ };
21
+ };
22
+ export type BrokerResponse = {
23
+ ok: true;
24
+ result?: unknown;
25
+ indexSeq?: number;
26
+ } | {
27
+ ok: false;
28
+ error: {
29
+ code: BrokerErrorCode;
30
+ message: string;
31
+ endpoint?: "unavailable";
32
+ cleanup?: BrokerCleanupEvidence;
33
+ };
34
+ indexSeq?: number;
35
+ durableEffects?: LifecycleDurableEffectsReceipt;
36
+ startupFailure?: LifecycleStartupFailureReceipt;
37
+ };
38
+ export declare class Broker {
39
+ #private;
40
+ readonly settings: Required<BrokerSettings>;
41
+ readonly index: SessionIndex;
42
+ readonly ledger: LifecycleLedger;
43
+ discovery: BrokerDiscovery | null;
44
+ constructor(settings: BrokerSettings);
45
+ start(): Promise<BrokerDiscovery>;
46
+ get ownsDiscovery(): boolean;
47
+ status(): ReturnType<typeof redactBrokerDiscovery> | null;
48
+ heartbeat(): Promise<void>;
49
+ stop(): Promise<void>;
50
+ handleRequest(operation: string, input: Record<string, unknown>, idempotencyKey?: string): Promise<BrokerResponse>;
51
+ }
52
+ /** Test-only hook for simulating a process crash after terminal persistence verification. */
53
+ export declare function setTerminalPersistenceHookForTest(broker: Broker, hook: (() => void) | undefined): void;