@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
@@ -0,0 +1,128 @@
1
+ export declare const DEFAULT_TELEGRAM_SETUP_API_BASE = "https://api.telegram.org";
2
+ export declare const DEFAULT_TELEGRAM_SETUP_POLL_TIMEOUT_MS = 60000;
3
+ export declare const DEFAULT_TELEGRAM_SETUP_POLL_INTERVAL_MS = 1000;
4
+ export type TelegramThreadedModeState = "enabled" | "disabled" | "unknown";
5
+ export type TelegramThreadedModeLabel = "verified" | "unverified" | "unknown";
6
+ export type TelegramSetupPairingSource = "discovered" | "provided" | "reused";
7
+ export type TelegramSetupFailureStatus = "error" | "cancelled" | "requires_explicit_chat" | "ownership_lost" | "aborted";
8
+ export interface TelegramSetupTimers {
9
+ now(): number;
10
+ sleep(ms: number, signal?: AbortSignal): Promise<void>;
11
+ }
12
+ export interface TelegramSetupDeps {
13
+ fetchImpl: typeof fetch;
14
+ apiBase?: string;
15
+ timers?: TelegramSetupTimers;
16
+ }
17
+ /** Current daemon ownership facts collected by the caller before setup starts. */
18
+ export interface TelegramSetupPreflight {
19
+ storedChatId?: string;
20
+ daemon?: {
21
+ live: boolean;
22
+ tokenFingerprint?: string;
23
+ /** Required with a live daemon so reuse verifies the complete token/chat identity. */
24
+ chatId?: string;
25
+ };
26
+ }
27
+ export type TelegramSetupPollingPolicy = {
28
+ kind: "discover";
29
+ } | {
30
+ kind: "reuse_stored_chat";
31
+ chatId: string;
32
+ } | {
33
+ kind: "validate_explicit_chat";
34
+ chatId: string;
35
+ } | {
36
+ kind: "requires_explicit_chat";
37
+ } | {
38
+ kind: "cancel_foreign_or_unknown_owner";
39
+ identity: "foreign" | "unknown";
40
+ };
41
+ export type TelegramSetupEvent = {
42
+ kind: "token_validated";
43
+ message: string;
44
+ } | {
45
+ kind: "threaded_mode_guidance";
46
+ message: string;
47
+ } | {
48
+ kind: "rejected_chat";
49
+ message: string;
50
+ };
51
+ export interface TelegramSetupSuccess {
52
+ ok: true;
53
+ chatId: string;
54
+ tokenFingerprint: string;
55
+ threadedMode: TelegramThreadedModeState;
56
+ threadedLabel: TelegramThreadedModeLabel;
57
+ pairingSource: TelegramSetupPairingSource;
58
+ }
59
+ export interface TelegramSetupFailure {
60
+ ok: false;
61
+ status: TelegramSetupFailureStatus;
62
+ detail: string;
63
+ }
64
+ export type TelegramSetupResult = TelegramSetupSuccess | TelegramSetupFailure;
65
+ export interface TelegramBot {
66
+ id: number;
67
+ isBot?: boolean;
68
+ firstName?: string;
69
+ username?: string;
70
+ hasTopicsEnabled?: boolean;
71
+ allowsUsersToCreateTopics?: boolean;
72
+ }
73
+ export type TelegramTokenValidationResult = {
74
+ ok: true;
75
+ bot: TelegramBot;
76
+ threadedMode: TelegramThreadedModeState;
77
+ } | TelegramSetupFailure;
78
+ export type TelegramPrivateChatValidationResult = {
79
+ ok: true;
80
+ chatId: string;
81
+ } | TelegramSetupFailure;
82
+ export interface RunTelegramSetupInput {
83
+ token: string;
84
+ preflight: TelegramSetupPreflight;
85
+ /**
86
+ * Re-reads daemon ownership immediately before any `getUpdates` call. It is
87
+ * mandatory for discovery because an earlier preflight cannot own Telegram's
88
+ * single-poller slot.
89
+ */
90
+ revalidatePreflight?: (signal?: AbortSignal) => Promise<TelegramSetupPreflight>;
91
+ chatId?: string;
92
+ interactive: boolean;
93
+ threadedModePrompt?: (message: string) => Promise<string>;
94
+ pollTimeoutMs?: number;
95
+ pollIntervalMs?: number;
96
+ signal?: AbortSignal;
97
+ onEvent?: (event: TelegramSetupEvent) => void;
98
+ deps: TelegramSetupDeps;
99
+ }
100
+ export declare function withTelegramSetupLease<T>(token: string, operation: () => Promise<T>): Promise<T>;
101
+ /** Validate a token with getMe without exposing it in diagnostics or results. */
102
+ export declare function validateTelegramBotToken(input: {
103
+ token: string;
104
+ deps: TelegramSetupDeps;
105
+ signal?: AbortSignal;
106
+ }): Promise<TelegramTokenValidationResult>;
107
+ /** Validate that a supplied or stored chat is an actual Telegram private chat. */
108
+ export declare function validateTelegramPrivateChat(input: {
109
+ token: string;
110
+ chatId: string;
111
+ deps: TelegramSetupDeps;
112
+ signal?: AbortSignal;
113
+ }): Promise<TelegramPrivateChatValidationResult>;
114
+ /**
115
+ * Decide whether setup may call getUpdates. Any live daemon is a hard polling
116
+ * boundary: only a verified complete token/chat identity may reuse the stored
117
+ * chat; setup never polls while any live owner exists.
118
+ */
119
+ export declare function resolveTelegramSetupPollingPolicy(input: {
120
+ token: string;
121
+ preflight: TelegramSetupPreflight;
122
+ chatId?: string;
123
+ }): TelegramSetupPollingPolicy;
124
+ /**
125
+ * Validate a token, assess Threaded Mode, and obtain a private chat according
126
+ * to the daemon poller-contention policy. No settings are written here.
127
+ */
128
+ export declare function runTelegramSetup(input: RunTelegramSetupInput): Promise<TelegramSetupResult>;
@@ -30,6 +30,10 @@ export interface TopicRecord {
30
30
  userNameUpdateId?: number;
31
31
  /** Stable repo/branch identity used when topic names are user-owned or customized. */
32
32
  identityKey?: string;
33
+ /** Last SDK event generation durably consumed by the notification daemon. */
34
+ replayGeneration?: number;
35
+ /** Last SDK event sequence durably consumed within replayGeneration. */
36
+ replaySeq?: number;
33
37
  }
34
38
  /** Serialisable shape persisted to disk. */
35
39
  export interface TopicRegistryState {
@@ -68,6 +72,13 @@ export declare class TopicRegistry {
68
72
  needsIdentity(sessionId: string): boolean;
69
73
  /** Remember stable repo/branch identity independently of the displayed name. */
70
74
  markIdentityKey(sessionId: string, identityKey: string): boolean;
75
+ /** Last durably consumed SDK event cursor for reconnect replay. */
76
+ replayCursor(sessionId: string): {
77
+ generation: number;
78
+ seq: number;
79
+ } | undefined;
80
+ /** Advance the durable reconnect cursor without allowing stale responses to move it backwards. */
81
+ markReplayCursor(sessionId: string, generation: number, seq: number): boolean;
71
82
  /** Whether daemon identity reconciliation should apply `name`. */
72
83
  needsRename(sessionId: string, name: string): boolean;
73
84
  /** The user-owned name that must be preserved, when one exists. */
@@ -0,0 +1 @@
1
+ export * from "./session-cli";
@@ -0,0 +1,19 @@
1
+ export type SdkSessionCliAction = "list" | "control" | "query" | "global";
2
+ export interface SdkSessionCliArgs {
3
+ action?: string;
4
+ sessionId?: string;
5
+ operation?: string;
6
+ query?: string;
7
+ jsonInput?: string;
8
+ jsonInputFile?: string;
9
+ idempotencyKey?: string;
10
+ jsonInputStdin?: boolean;
11
+ confirm?: boolean;
12
+ cursor?: string;
13
+ showEndpointCredential?: boolean;
14
+ yes?: boolean;
15
+ repo?: string;
16
+ agentDir?: string;
17
+ }
18
+ /** Runs the pure-SDK `gjc daemon session` command family. */
19
+ export declare function runSdkSessionCli(args: SdkSessionCliArgs, writeOutput?: (value: unknown) => void, setExitCode?: (exitCode: 1 | 2) => void): Promise<void>;
@@ -0,0 +1 @@
1
+ export * from "@gajae-code/bridge-client";
@@ -0,0 +1,27 @@
1
+ import { type BrokerDiscovery } from "../broker/discovery";
2
+ export interface SdkSessionEndpoint {
3
+ sessionId: string;
4
+ url: string;
5
+ token: string;
6
+ path: string;
7
+ }
8
+ export interface SdkDiscoveryWarning {
9
+ code: "discovery_error";
10
+ path: string;
11
+ message: string;
12
+ }
13
+ export interface SdkSessionEndpointList {
14
+ endpoints: SdkSessionEndpoint[];
15
+ warnings: SdkDiscoveryWarning[];
16
+ }
17
+ export declare class SdkDiscoveryError extends Error {
18
+ readonly path: string;
19
+ readonly code = "discovery_error";
20
+ constructor(path: string, message: string);
21
+ }
22
+ /** Lists endpoint files and returns individual malformed or unreadable records as warnings. */
23
+ export declare function listSdkSessionEndpoints(repo: string): Promise<SdkSessionEndpointList>;
24
+ /** Resolves one per-session SDK endpoint discovery file. */
25
+ export declare function readSdkSessionEndpoint(repo: string, sessionId: string): Promise<SdkSessionEndpoint | null>;
26
+ /** Reads the agent-global broker discovery record. */
27
+ export declare function readSdkBrokerDiscovery(agentDir: string): Promise<BrokerDiscovery | null>;
@@ -0,0 +1,2 @@
1
+ export * from "./client";
2
+ export * from "./discovery";
@@ -0,0 +1,34 @@
1
+ import { type Operation } from "../../protocol/operation-registry";
2
+ import type { ControlSurface, ControlValue } from "./operations";
3
+ export interface ControlRequest {
4
+ id: string;
5
+ operation: string;
6
+ input: unknown;
7
+ expectedRevision?: string;
8
+ idempotencyKey?: string;
9
+ confirm?: boolean;
10
+ }
11
+ export type ControlErrorCode = string;
12
+ export interface ControlError {
13
+ code: ControlErrorCode;
14
+ message: string;
15
+ currentRevision?: string;
16
+ details?: ControlValue;
17
+ }
18
+ export interface ControlResponse {
19
+ id: string;
20
+ ok: boolean;
21
+ result?: ControlValue;
22
+ error?: ControlError;
23
+ }
24
+ /** An error whose code is intentionally safe to expose on the control protocol. */
25
+ export declare class TypedControlError extends Error {
26
+ readonly code: ControlErrorCode;
27
+ constructor(code: ControlErrorCode, message: string);
28
+ }
29
+ /** Busy is reserved for explicitly typed transient unavailability. */
30
+ export declare class BusyError extends TypedControlError {
31
+ constructor(message?: string);
32
+ }
33
+ /** Dispatches a registry-defined per-session control operation. */
34
+ export declare function dispatchControl(surface: ControlSurface, registryRow: Operation | undefined, request: ControlRequest): Promise<ControlResponse>;
@@ -0,0 +1,2 @@
1
+ export { BusyError, type ControlError, type ControlErrorCode, type ControlRequest, type ControlResponse, dispatchControl, TypedControlError, } from "./dispatch";
2
+ export type { ControlInput, ControlSurface, ControlValue } from "./operations";
@@ -0,0 +1,65 @@
1
+ export type ControlValue = unknown;
2
+ export type ControlInput = Record<string, unknown>;
3
+ /**
4
+ * Narrow host contract used by control dispatch. Implementations adapt an
5
+ * AgentSession and its controllers without exposing those concrete types here.
6
+ */
7
+ export interface ControlSurface {
8
+ prompt(text: string, images?: ControlValue): Promise<ControlValue> | ControlValue;
9
+ steer(text: string): Promise<ControlValue> | ControlValue;
10
+ followUp(text: string): Promise<ControlValue> | ControlValue;
11
+ abort(): Promise<ControlValue> | ControlValue;
12
+ abortAndPrompt(text: string): Promise<ControlValue> | ControlValue;
13
+ answerAsk(id: string, answer: ControlValue): Promise<ControlValue> | ControlValue;
14
+ answerGate(id: string, response: ControlValue, expectedSessionId?: string): Promise<ControlValue> | ControlValue;
15
+ approvePlan(id: string, choice: ControlValue, expectedSessionId?: string): Promise<ControlValue> | ControlValue;
16
+ invokeSkill(name: string, args: ControlValue): Promise<ControlValue> | ControlValue;
17
+ setPlanMode(on: boolean): Promise<ControlValue> | ControlValue;
18
+ operateGoal(op: string, objective?: string): Promise<ControlValue> | ControlValue;
19
+ replaceTodo(items: ControlValue): Promise<ControlValue> | ControlValue;
20
+ setModel(id: string, thinkingLevel?: ControlValue): Promise<ControlValue> | ControlValue;
21
+ cycleModel(): Promise<ControlValue> | ControlValue;
22
+ setThinking(level: ControlValue): Promise<ControlValue> | ControlValue;
23
+ cycleThinking(): Promise<ControlValue> | ControlValue;
24
+ setPermissionMode(mode: ControlValue): Promise<ControlValue> | ControlValue;
25
+ setQueueMode(kind: string, mode: ControlValue): Promise<ControlValue> | ControlValue;
26
+ runCompaction(): Promise<ControlValue> | ControlValue;
27
+ setAutoCompaction(on: boolean): Promise<ControlValue> | ControlValue;
28
+ setAutoRetry(on: boolean): Promise<ControlValue> | ControlValue;
29
+ abortRetry(): Promise<ControlValue> | ControlValue;
30
+ executeBash(cmd: string): Promise<ControlValue> | ControlValue;
31
+ abortBash(): Promise<ControlValue> | ControlValue;
32
+ newSession(): Promise<ControlValue> | ControlValue;
33
+ forkSession(): Promise<ControlValue> | ControlValue;
34
+ resumeSession(id: string): Promise<ControlValue> | ControlValue;
35
+ closeSession(): Promise<ControlValue> | ControlValue;
36
+ switchSession(id: string): Promise<ControlValue> | ControlValue;
37
+ branchSession(entryId: string): Promise<ControlValue> | ControlValue;
38
+ renameSession(name: string): Promise<ControlValue> | ControlValue;
39
+ handoffSession(target: ControlValue): Promise<ControlValue> | ControlValue;
40
+ exportHtml(): Promise<ControlValue> | ControlValue;
41
+ patchConfig(patch: ControlValue): Promise<ControlValue> | ControlValue;
42
+ reloadRuntime(components: ControlValue): Promise<ControlValue> | ControlValue;
43
+ login(provider: string): Promise<ControlValue> | ControlValue;
44
+ registerHostTools(defs: ControlValue): Promise<ControlValue> | ControlValue;
45
+ registerHostUri(defs: ControlValue): Promise<ControlValue> | ControlValue;
46
+ setServiceTier(tier: ControlValue): Promise<ControlValue> | ControlValue;
47
+ setActiveTools(names: ControlValue): Promise<ControlValue> | ControlValue;
48
+ removeQueueMessage(id: string): Promise<ControlValue> | ControlValue;
49
+ moveQueueMessage(id: string, position: {
50
+ before?: string;
51
+ after?: string;
52
+ }): Promise<ControlValue> | ControlValue;
53
+ updateQueueMessage(id: string, patch: ControlValue): Promise<ControlValue> | ControlValue;
54
+ setExtensionEnabled(id: string, on: boolean): Promise<ControlValue> | ControlValue;
55
+ clearContext(confirm: boolean): Promise<ControlValue> | ControlValue;
56
+ deleteSession(id: string, confirm: boolean): Promise<ControlValue> | ControlValue;
57
+ moveCwd(path: string): Promise<ControlValue> | ControlValue;
58
+ retryLast(): Promise<ControlValue> | ControlValue;
59
+ retryNow(): Promise<ControlValue> | ControlValue;
60
+ backgroundBash(): Promise<ControlValue> | ControlValue;
61
+ /** Returns the current revision for a registry revision resource. */
62
+ /** Installed per-session registry rows. Dispatch rejects other rows before invoking a surface method. */
63
+ installedOperations?: ReadonlySet<string>;
64
+ revisionProvider?(resource: string): Promise<string | undefined> | string | undefined;
65
+ }
@@ -0,0 +1,35 @@
1
+ import type { SdkFrame } from "./types";
2
+ export interface EventFrame extends SdkFrame {
3
+ type: "event";
4
+ generation: number;
5
+ seq: number;
6
+ }
7
+ export type EventReplayGap = {
8
+ kind: "generation_reset";
9
+ fromGeneration: number;
10
+ toGeneration: number;
11
+ resyncQueries: string[];
12
+ } | {
13
+ kind: "sequence_gap";
14
+ fromSeq: number;
15
+ toSeq: number;
16
+ resyncQueries: string[];
17
+ };
18
+ export interface EventReplay {
19
+ events: EventFrame[];
20
+ gap?: EventReplayGap;
21
+ }
22
+ export declare class SessionEventStream {
23
+ #private;
24
+ constructor(options?: {
25
+ generation?: number;
26
+ ringSize?: number;
27
+ resyncQueryIds?: string[];
28
+ });
29
+ get generation(): number;
30
+ get sequence(): number;
31
+ restart(): number;
32
+ emit(frame: SdkFrame): EventFrame;
33
+ /** Replays retained current-generation events and reports any required resynchronization. */
34
+ replay(lastSeq: number, generation?: number): EventReplay;
35
+ }
@@ -0,0 +1,35 @@
1
+ import { type EventFrame, SessionEventStream } from "./events";
2
+ import { ReverseLeaseRuntime } from "./reverse-leases";
3
+ import type { BrokerIndexWriter, HostEndpointAdapters, SdkFrame } from "./types";
4
+ export type SdkRequestObserver = (kind: "control" | "query", connectionId: string, frame: SdkFrame) => void;
5
+ export interface SessionSdkHostOptions extends HostEndpointAdapters {
6
+ control?: (connectionId: string, frame: SdkFrame) => unknown | Promise<unknown>;
7
+ query?: (connectionId: string, frame: SdkFrame) => unknown | Promise<unknown>;
8
+ /** Best-effort diagnostic observation of accepted control/query frames. */
9
+ onRequest?: SdkRequestObserver;
10
+ /** Runs only after a successful control response has been sent to the client. */
11
+ afterControlResponse?: (connectionId: string, request: SdkFrame, response: SdkFrame) => void | Promise<void>;
12
+ installProviderDefinitions?: (capability: string, definitions: unknown) => void;
13
+ onProviderDefinitionsRemoved?: (capability: string) => void;
14
+ onReverseCancel?: (requestId: string, reason: "provider_disconnected" | "lease_released") => void;
15
+ }
16
+ /** SDK hosting is independent of notification configuration. Only root sessions host an endpoint. */
17
+ export declare function shouldHostSdk(_settings: unknown, isTopLevel: boolean, env?: NodeJS.ProcessEnv): boolean;
18
+ /** Adapter-based session host; bus wiring owns NotificationServer creation and transport framing. */
19
+ export declare class SessionSdkHost {
20
+ #private;
21
+ readonly events: SessionEventStream;
22
+ readonly reverse: ReverseLeaseRuntime;
23
+ constructor(options: SessionSdkHostOptions);
24
+ get started(): boolean;
25
+ get generation(): number;
26
+ /** Current installed definitions for a live provider capability. */
27
+ getProviderDefinitions(capability: string): unknown | undefined;
28
+ /** Release reverse leases after the transport reports a WebSocket disconnect. */
29
+ handleDisconnect(connectionId: string): void;
30
+ /** Adds an event to the resumable event ring. Transport delivery is owned by bus wiring. */
31
+ emitEvent(frame: SdkFrame): EventFrame;
32
+ start(): Promise<"started" | "already">;
33
+ stop(): Promise<"stopped" | "already">;
34
+ registerWithBroker(writer: BrokerIndexWriter): Promise<void>;
35
+ }
@@ -0,0 +1,4 @@
1
+ export * from "./events";
2
+ export * from "./host";
3
+ export * from "./reverse-leases";
4
+ export * from "./types";
@@ -0,0 +1,62 @@
1
+ import { type RevisionStore } from "./revision-store.js";
2
+ export declare const CURSOR_TTL_MS: number;
3
+ export declare const MAX_CURSORS_PER_CONNECTION = 32;
4
+ export declare const MAX_CURSORS_PER_SESSION = 128;
5
+ export interface CursorEnvelope {
6
+ cursorVersion: 1;
7
+ protocolMajor: 3;
8
+ sessionId: string;
9
+ resource: string;
10
+ revision: string;
11
+ highWatermark?: unknown;
12
+ position: unknown;
13
+ direction: string;
14
+ pageShape: unknown;
15
+ }
16
+ export interface CursorSelector {
17
+ queryId: string;
18
+ entryId?: string;
19
+ field?: string;
20
+ fileId?: string;
21
+ hunkId?: string;
22
+ resourceKind?: string;
23
+ resourceId?: string;
24
+ itemId?: string;
25
+ }
26
+ export interface CursorPosition {
27
+ offset?: number;
28
+ byteOffset?: number;
29
+ selector?: CursorSelector;
30
+ }
31
+ export declare function cursorSelector(position: unknown): CursorSelector | undefined;
32
+ export declare function assertCursorSelector(cursor: CursorSelector | undefined, requested: Partial<CursorSelector>): CursorSelector;
33
+ export interface CursorQueryContext {
34
+ sessionId: string;
35
+ resource?: string;
36
+ resourceId?: string;
37
+ direction: string;
38
+ pageShape: unknown;
39
+ }
40
+ export declare class CursorError extends Error {
41
+ readonly code: "cursor_expired" | "invalid_cursor" | "invalid_input" | "resource_gone" | "snapshot_capacity_exceeded";
42
+ readonly restartQuery: boolean;
43
+ constructor(code: "cursor_expired" | "invalid_cursor" | "invalid_input" | "resource_gone" | "snapshot_capacity_exceeded", restartQuery?: boolean, message?: string);
44
+ }
45
+ export declare function canonicalCursorJson(envelope: CursorEnvelope): string;
46
+ export declare function cursorMac(envelope: CursorEnvelope, sessionToken: string | Uint8Array): string;
47
+ export declare function signCursor(envelope: CursorEnvelope, sessionToken: string | Uint8Array): string;
48
+ export declare function verifyCursor(cursor: string, sessionToken: string | Uint8Array): CursorEnvelope | undefined;
49
+ /** Tracks cursor budgets and binds snapshot pins to authenticated cursor strings. */
50
+ export declare class CursorRegistry {
51
+ #private;
52
+ private readonly sessionToken;
53
+ private readonly revisions;
54
+ private readonly now;
55
+ constructor(sessionToken: string | Uint8Array, revisions: RevisionStore, now?: () => number);
56
+ grant(connectionId: string, envelope: CursorEnvelope, resourceKind: string, resourceId: string): Promise<string>;
57
+ consume(cursor: string, connectionId: string, expected: CursorQueryContext): CursorEnvelope;
58
+ release(cursor: string): void;
59
+ close(): void;
60
+ sweep(): void;
61
+ get size(): number;
62
+ }
@@ -0,0 +1,70 @@
1
+ import { type CursorRegistry } from "./cursor.js";
2
+ import type { RevisionStore } from "./revision-store.js";
3
+ export declare const TARGET_PAGE_BYTES: number;
4
+ export declare const RESPONSE_CEILING_BYTES: number;
5
+ export interface SessionSurface {
6
+ getTranscriptEntries(): unknown[] | Promise<unknown[]>;
7
+ getContextSnapshot(): unknown | Promise<unknown>;
8
+ getGoalState(): unknown | Promise<unknown>;
9
+ getTodoState(): unknown | Promise<unknown>;
10
+ getDiff(): unknown | Promise<unknown>;
11
+ getUsage(): unknown | Promise<unknown>;
12
+ getModels(): unknown | Promise<unknown>;
13
+ getSkillState(): unknown | Promise<unknown>;
14
+ /** Q12 rows preserve workflow gate fields and include stable durable gate metadata. */
15
+ getGates(): unknown | Promise<unknown>;
16
+ getConfigItems(): unknown | Promise<unknown>;
17
+ getSessionMetadata(): unknown | Promise<unknown>;
18
+ getStats(): unknown | Promise<unknown>;
19
+ getBranchCandidates(): unknown | Promise<unknown>;
20
+ getLastAssistant(): unknown | Promise<unknown>;
21
+ getCapabilities(): unknown | Promise<unknown>;
22
+ getAuthProviders(): unknown | Promise<unknown>;
23
+ getTools(): unknown | Promise<unknown>;
24
+ getQueueMessages(): unknown | Promise<unknown>;
25
+ getExtensions(): unknown | Promise<unknown>;
26
+ getArtifactRange?(id: string, offset: number, length: number): {
27
+ bytes: Uint8Array;
28
+ totalBytes: number;
29
+ } | undefined | Promise<{
30
+ bytes: Uint8Array;
31
+ totalBytes: number;
32
+ } | undefined>;
33
+ getJobs(): unknown | Promise<unknown>;
34
+ /** Query rows backed by the session's installed binding map. */
35
+ installedQueries?: ReadonlySet<string>;
36
+ }
37
+ export interface QueryRequest {
38
+ id?: string;
39
+ query: string;
40
+ input?: Record<string, unknown>;
41
+ cursor?: string;
42
+ connectionId: string;
43
+ }
44
+ export interface QueryPage {
45
+ items: unknown[];
46
+ complete: boolean;
47
+ continuationCursor?: string;
48
+ revision: string;
49
+ preview?: boolean;
50
+ }
51
+ export interface QueryResponse {
52
+ id?: string;
53
+ ok: boolean;
54
+ page?: QueryPage;
55
+ result?: unknown;
56
+ error?: {
57
+ code: string;
58
+ message: string;
59
+ restartQuery?: boolean;
60
+ };
61
+ }
62
+ export declare class QueryHandlers {
63
+ #private;
64
+ private readonly surface;
65
+ private readonly sessionId;
66
+ private readonly revisions;
67
+ private readonly cursors;
68
+ constructor(surface: SessionSurface, sessionId: string, revisions: RevisionStore, cursors: CursorRegistry);
69
+ dispatch(request: QueryRequest): Promise<QueryResponse>;
70
+ }
@@ -0,0 +1,3 @@
1
+ export * from "./cursor.js";
2
+ export * from "./handlers.js";
3
+ export * from "./revision-store.js";
@@ -0,0 +1,60 @@
1
+ export declare const MAX_REVISIONS_PER_RESOURCE = 8;
2
+ export declare const MAX_PINNED_REVISIONS = 128;
3
+ export declare const MAX_MEMORY_BYTES: number;
4
+ export declare const SNAPSHOT_TTL_MS: number;
5
+ export declare class RevisionStoreError extends Error {
6
+ readonly code: "resource_gone" | "snapshot_capacity_exceeded";
7
+ constructor(code: "resource_gone" | "snapshot_capacity_exceeded", message?: string);
8
+ }
9
+ /** Per-session MVCC snapshots. Payloads hold canonical JSON UTF-8. */
10
+ export declare class RevisionStore {
11
+ #private;
12
+ readonly sessionId: string;
13
+ private readonly now;
14
+ constructor(sessionId: string, now?: () => number, options?: {
15
+ storageDir?: string;
16
+ onReadRange?: (start: number, end: number) => void;
17
+ });
18
+ createRevision(resourceKind: string, resourceId: string, payload: unknown): Promise<string>;
19
+ readRevision(resourceKind: string, resourceId: string, id: string): Promise<unknown>;
20
+ revisionByteLength(resourceKind: string, resourceId: string, id: string): Promise<number | undefined>;
21
+ readPage(resourceKind: string, resourceId: string, id: string, offset: number, targetBytes: number): Promise<{
22
+ items: unknown[];
23
+ complete: boolean;
24
+ } | undefined>;
25
+ /** Returns canonical root JSON in a UTF-8-safe bounded range without parsing it. */
26
+ readRootRange(resourceKind: string, resourceId: string, id: string, offset: number, length: number): Promise<{
27
+ body: string;
28
+ complete: boolean;
29
+ offset: number;
30
+ } | undefined>;
31
+ readStringRange(resourceKind: string, resourceId: string, id: string, field: string, offset: number, length: number): Promise<{
32
+ body: string;
33
+ complete: boolean;
34
+ offset: number;
35
+ } | undefined>;
36
+ readIndexedStringRange(resourceKind: string, resourceId: string, id: string, itemId: string, field: string, offset: number, length: number): Promise<{
37
+ body: string;
38
+ complete: boolean;
39
+ offset: number;
40
+ } | undefined>;
41
+ describeIndexedItem(resourceKind: string, resourceId: string, id: string, offset: number): Promise<{
42
+ itemId?: string;
43
+ fields: string[];
44
+ } | undefined>;
45
+ readTranscriptBodyRange(resourceId: string, id: string, entryId: string, offset: number, length: number): Promise<{
46
+ body: string;
47
+ complete: boolean;
48
+ offset: number;
49
+ } | undefined>;
50
+ pin(cursorId: string, resourceKind: string, resourceId: string, id: string): Promise<void>;
51
+ unpin(cursorId: string): void;
52
+ sweep(): void;
53
+ close(): Promise<void>;
54
+ get pinnedCount(): number;
55
+ get memoryBytes(): number;
56
+ /** Test-only accounting for the bounded serializer's staging buffer. */
57
+ get peakBufferedBytes(): number;
58
+ /** Test-only accounting for a spilled reader's raw chunk and decoded-text buffers. */
59
+ get peakReadBufferedBytes(): number;
60
+ }
@@ -0,0 +1,45 @@
1
+ import type { SdkFrame } from "./types";
2
+ export declare const REVERSE_HEARTBEAT_MS = 5000;
3
+ export declare const REVERSE_LEASE_TTL_MS = 15000;
4
+ export declare const REVERSE_RECLAIM_GRACE_MS = 15000;
5
+ export declare const MAX_REVERSE_OUTSTANDING = 64;
6
+ export declare const MAX_REVERSE_PAYLOAD_BYTES: number;
7
+ export declare class ReverseLeaseError extends Error {
8
+ readonly code: "lease_unavailable" | "lease_expired" | "provider_lease_conflict" | "provider_required" | "not_lease_owner" | "payload_too_large" | "too_many_outstanding" | "unknown_request" | "idempotency_conflict";
9
+ constructor(code: "lease_unavailable" | "lease_expired" | "provider_lease_conflict" | "provider_required" | "not_lease_owner" | "payload_too_large" | "too_many_outstanding" | "unknown_request" | "idempotency_conflict", message?: "idempotency_conflict" | "lease_expired" | "lease_unavailable" | "not_lease_owner" | "payload_too_large" | "provider_lease_conflict" | "provider_required" | "too_many_outstanding" | "unknown_request");
10
+ }
11
+ export interface ProviderLease {
12
+ leaseId: string;
13
+ connectionId: string;
14
+ capability: string;
15
+ definitions: unknown;
16
+ expiresAt: number;
17
+ graceUntil?: number;
18
+ active: boolean;
19
+ }
20
+ export interface ReverseLeaseOptions {
21
+ now?: () => number;
22
+ leaseTtlMs?: number;
23
+ sendFrame: (connectionId: string, frame: SdkFrame) => void | Promise<void>;
24
+ installDefinitions?: (capability: string, definitions: unknown) => void;
25
+ onCancel?: (requestId: string, reason: "provider_disconnected" | "lease_released") => void;
26
+ onDefinitionsRemoved?: (capability: string) => void;
27
+ }
28
+ /** Session-local directed reverse RPC lease registry. */
29
+ export declare class ReverseLeaseRuntime {
30
+ #private;
31
+ constructor(options: ReverseLeaseOptions);
32
+ registerProvider(connectionId: string, capability: string, definitions: unknown, expectedLeaseId?: string, idempotencyKey?: string): ProviderLease;
33
+ heartbeat(connectionId: string, leaseId: string): ProviderLease;
34
+ release(connectionId: string, leaseId: string, handoffTo?: string): ProviderLease;
35
+ disconnect(connectionId: string): void;
36
+ request(capability: string, method: string, payload: unknown): Promise<unknown>;
37
+ respond(connectionId: string, id: string, leaseId: string, result: unknown, error?: {
38
+ code: string;
39
+ message: string;
40
+ }): void;
41
+ getLease(capability: string): ProviderLease | undefined;
42
+ /** Installed definitions are observable only while their provider lease is live. */
43
+ getInstalledDefinitions(capability: string): unknown | undefined;
44
+ dispose(): void;
45
+ }