@gajae-code/coding-agent 0.13.3 → 0.14.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 (599) hide show
  1. package/CHANGELOG.md +184 -2
  2. package/README.md +2 -0
  3. package/bin/gajaessi.js +4 -0
  4. package/dist/types/async/job-manager.d.ts +55 -2
  5. package/dist/types/async/support.d.ts +14 -0
  6. package/dist/types/capability/mcp.d.ts +6 -0
  7. package/dist/types/capability/types.d.ts +6 -0
  8. package/dist/types/cli/accounts-cli.d.ts +19 -0
  9. package/dist/types/cli/args.d.ts +3 -0
  10. package/dist/types/cli/config-cli.d.ts +6 -0
  11. package/dist/types/cli/crash-cli.d.ts +10 -0
  12. package/dist/types/cli/customize-doctor.d.ts +145 -0
  13. package/dist/types/cli/daemon-cli.d.ts +3 -1
  14. package/dist/types/cli/mcp-cli.d.ts +11 -0
  15. package/dist/types/cli/notify-cli.d.ts +1 -1
  16. package/dist/types/cli/root-flags.d.ts +12 -0
  17. package/dist/types/cli/setup-cli.d.ts +3 -1
  18. package/dist/types/cli/skills-cli.d.ts +2 -1
  19. package/dist/types/cli/update-cli.d.ts +19 -1
  20. package/dist/types/cli.d.ts +6 -0
  21. package/dist/types/commands/accounts.d.ts +40 -0
  22. package/dist/types/commands/crash.d.ts +24 -0
  23. package/dist/types/commands/customize.d.ts +22 -0
  24. package/dist/types/commands/daemon.d.ts +1 -1
  25. package/dist/types/commands/launch.d.ts +6 -0
  26. package/dist/types/commands/setup.d.ts +6 -0
  27. package/dist/types/commands/skills.d.ts +6 -1
  28. package/dist/types/commands/update.d.ts +7 -0
  29. package/dist/types/config/atomic-yaml-patch-worker.d.ts +25 -0
  30. package/dist/types/config/atomic-yaml-patch.d.ts +62 -2
  31. package/dist/types/config/config-schema-version.d.ts +10 -0
  32. package/dist/types/config/file-lock.d.ts +18 -0
  33. package/dist/types/config/model-profile-activation.d.ts +3 -1
  34. package/dist/types/config/model-registry.d.ts +9 -1
  35. package/dist/types/config/models-config-schema.d.ts +2 -0
  36. package/dist/types/config/settings-schema.d.ts +70 -6
  37. package/dist/types/config/settings.d.ts +63 -0
  38. package/dist/types/config/skill-settings-defaults.d.ts +26 -0
  39. package/dist/types/config/task-delegation.d.ts +39 -0
  40. package/dist/types/config/update-channel.d.ts +10 -0
  41. package/dist/types/coordinator-mcp/server.d.ts +5 -1
  42. package/dist/types/crash/index-store.d.ts +87 -0
  43. package/dist/types/crash/nudge.d.ts +50 -0
  44. package/dist/types/crash/record-loader.d.ts +17 -0
  45. package/dist/types/crash/report.d.ts +134 -0
  46. package/dist/types/crash/sanitize.d.ts +25 -0
  47. package/dist/types/cursor.d.ts +13 -2
  48. package/dist/types/customization/import.d.ts +37 -0
  49. package/dist/types/customization/index.d.ts +4 -0
  50. package/dist/types/customization/inventory.d.ts +25 -0
  51. package/dist/types/customization/mutations.d.ts +32 -0
  52. package/dist/types/customization/types.d.ts +115 -0
  53. package/dist/types/daemon/control-types.d.ts +8 -1
  54. package/dist/types/daemon/operator-contract.d.ts +4 -4
  55. package/dist/types/discovery/claude.d.ts +39 -1
  56. package/dist/types/discovery/codex.d.ts +39 -1
  57. package/dist/types/discovery/index.d.ts +2 -0
  58. package/dist/types/discovery/mcp-compat.d.ts +30 -0
  59. package/dist/types/edit/renderer.d.ts +23 -0
  60. package/dist/types/extensibility/extensions/runner.d.ts +3 -0
  61. package/dist/types/extensibility/extensions/types.d.ts +21 -4
  62. package/dist/types/extensibility/gjc-plugins/observability.d.ts +6 -1
  63. package/dist/types/extensibility/gjc-plugins/registry.d.ts +8 -1
  64. package/dist/types/extensibility/hooks/loader.d.ts +19 -5
  65. package/dist/types/extensibility/runtime-skill-discovery.d.ts +22 -1
  66. package/dist/types/extensibility/skill-management.d.ts +107 -0
  67. package/dist/types/gjc-runtime/deep-interview-runtime.d.ts +3 -1
  68. package/dist/types/gjc-runtime/launch-worktree.d.ts +8 -0
  69. package/dist/types/gjc-runtime/linux-proc.d.ts +3 -0
  70. package/dist/types/gjc-runtime/ralplan-runtime.d.ts +10 -6
  71. package/dist/types/gjc-runtime/session-state-lock.d.ts +104 -0
  72. package/dist/types/gjc-runtime/session-state-sidecar.d.ts +120 -2
  73. package/dist/types/gjc-runtime/state-writer.d.ts +10 -1
  74. package/dist/types/gjc-runtime/ultragoal-guard.d.ts +4 -2
  75. package/dist/types/gjc-runtime/ultragoal-runtime.d.ts +8 -6
  76. package/dist/types/gjc-runtime/workflow-settings.d.ts +109 -0
  77. package/dist/types/hooks/events.d.ts +60 -0
  78. package/dist/types/hooks/normalize.d.ts +83 -0
  79. package/dist/types/hooks/skill-state.d.ts +9 -2
  80. package/dist/types/main.d.ts +1 -1
  81. package/dist/types/modes/acp/abort-scope.d.ts +13 -0
  82. package/dist/types/modes/acp/acp-agent.d.ts +7 -4
  83. package/dist/types/modes/components/customization/customization-dashboard.d.ts +44 -0
  84. package/dist/types/modes/components/customization/import-wizard.d.ts +21 -0
  85. package/dist/types/modes/components/customization/index.d.ts +1 -0
  86. package/dist/types/modes/components/gajae-pet-widget.d.ts +8 -30
  87. package/dist/types/modes/components/irc-sidebar.d.ts +1 -0
  88. package/dist/types/modes/components/iterm-pet-transport.d.ts +122 -0
  89. package/dist/types/modes/components/oauth-selector.d.ts +10 -4
  90. package/dist/types/modes/components/pet-capability.d.ts +11 -25
  91. package/dist/types/modes/components/status-line/gh.d.ts +6 -2
  92. package/dist/types/modes/controllers/extension-ui-controller.d.ts +1 -1
  93. package/dist/types/modes/controllers/selector-controller.d.ts +7 -8
  94. package/dist/types/modes/controllers/stt-controller.d.ts +1 -1
  95. package/dist/types/modes/interactive-mode.d.ts +1 -0
  96. package/dist/types/modes/types.d.ts +1 -0
  97. package/dist/types/modes/utils/injected-user-submission.d.ts +10 -0
  98. package/dist/types/runtime-mcp/config.d.ts +9 -0
  99. package/dist/types/runtime-mcp/manager.d.ts +26 -1
  100. package/dist/types/runtime-mcp/oauth-discovery.d.ts +4 -0
  101. package/dist/types/runtime-mcp/oauth-flow.d.ts +24 -1
  102. package/dist/types/runtime-mcp/pool-key.d.ts +2 -0
  103. package/dist/types/runtime-mcp/protocol.d.ts +278 -0
  104. package/dist/types/runtime-mcp/scope-config.d.ts +29 -0
  105. package/dist/types/runtime-mcp/tool-bridge.d.ts +15 -13
  106. package/dist/types/runtime-mcp/transports/http.d.ts +9 -0
  107. package/dist/types/runtime-mcp/types.d.ts +102 -10
  108. package/dist/types/sdk/acp/adapter.d.ts +26 -5
  109. package/dist/types/sdk/broker/broker.d.ts +3 -55
  110. package/dist/types/sdk/broker/lifecycle.d.ts +18 -12
  111. package/dist/types/sdk/broker/session-index.d.ts +14 -5
  112. package/dist/types/sdk/broker/startup-failure.d.ts +16 -1
  113. package/dist/types/sdk/bus/chat-daemon-control.d.ts +51 -1
  114. package/dist/types/sdk/bus/chat-daemon-runtime.d.ts +4 -41
  115. package/dist/types/sdk/bus/config.d.ts +11 -0
  116. package/dist/types/sdk/bus/conversation-store.d.ts +0 -1
  117. package/dist/types/sdk/bus/daemon-paths.d.ts +6 -0
  118. package/dist/types/sdk/bus/discord-conversation.d.ts +2 -0
  119. package/dist/types/sdk/bus/discord-daemon.d.ts +17 -12
  120. package/dist/types/sdk/bus/existing-thread-readiness.d.ts +4 -34
  121. package/dist/types/sdk/bus/inbound-reaction-ordering.d.ts +61 -0
  122. package/dist/types/sdk/bus/index.d.ts +85 -99
  123. package/dist/types/sdk/bus/kind-aware-reconciliation.d.ts +29 -7
  124. package/dist/types/sdk/bus/managed-daemon.d.ts +2 -32
  125. package/dist/types/sdk/bus/notification-service.d.ts +52 -0
  126. package/dist/types/sdk/bus/operator-runtime.d.ts +1 -1
  127. package/dist/types/sdk/bus/prompt-reconciliation.d.ts +16 -5
  128. package/dist/types/sdk/bus/reconciliation-store.d.ts +113 -5
  129. package/dist/types/sdk/bus/session-control.d.ts +25 -1
  130. package/dist/types/sdk/bus/slack-conversation.d.ts +4 -0
  131. package/dist/types/sdk/bus/slack-daemon.d.ts +9 -17
  132. package/dist/types/sdk/bus/slack-live-provider.d.ts +3 -1
  133. package/dist/types/sdk/bus/slack-provider.d.ts +4 -0
  134. package/dist/types/sdk/bus/slack-thread-binding.d.ts +6 -40
  135. package/dist/types/sdk/bus/telegram-adoption-intent.d.ts +30 -104
  136. package/dist/types/sdk/bus/telegram-daemon-cli.d.ts +10 -0
  137. package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +262 -19
  138. package/dist/types/sdk/bus/telegram-daemon-orphan-reap.d.ts +125 -0
  139. package/dist/types/sdk/bus/telegram-daemon-owner-registry.d.ts +22 -0
  140. package/dist/types/sdk/bus/telegram-daemon.d.ts +119 -310
  141. package/dist/types/sdk/bus/telegram-reference.d.ts +1 -47
  142. package/dist/types/sdk/bus/threaded-render.d.ts +1 -0
  143. package/dist/types/sdk/bus/topic-registry.d.ts +33 -17
  144. package/dist/types/sdk/cli/rows.d.ts +2 -11
  145. package/dist/types/sdk/cli/session-cli.d.ts +15 -25
  146. package/dist/types/sdk/client/client.d.ts +97 -1
  147. package/dist/types/sdk/host/control/dispatch.d.ts +0 -7
  148. package/dist/types/sdk/host/control/index.d.ts +1 -1
  149. package/dist/types/sdk/host/control/operations.d.ts +18 -5
  150. package/dist/types/sdk/host/control/runtime-gate.d.ts +19 -0
  151. package/dist/types/sdk/host/host.d.ts +15 -1
  152. package/dist/types/sdk/host/query/handlers.d.ts +5 -0
  153. package/dist/types/sdk/host/reverse-leases.d.ts +1 -1
  154. package/dist/types/sdk/host/session-runtime.d.ts +127 -7
  155. package/dist/types/sdk/host/types.d.ts +1 -1
  156. package/dist/types/sdk/host/websocket-transport.d.ts +1 -1
  157. package/dist/types/sdk/index.d.ts +2 -1
  158. package/dist/types/sdk/lifecycle/broker-client.d.ts +8 -0
  159. package/dist/types/sdk/lifecycle/client.d.ts +59 -0
  160. package/dist/types/sdk/lifecycle/index.d.ts +3 -0
  161. package/dist/types/sdk/lifecycle/service.d.ts +232 -0
  162. package/dist/types/sdk/mcp/server.d.ts +9 -6
  163. package/dist/types/sdk/prompt-deadline-lease.d.ts +43 -0
  164. package/dist/types/sdk/prompt-deadline-manager.d.ts +28 -0
  165. package/dist/types/sdk/prompt-status.d.ts +10 -3
  166. package/dist/types/sdk/protocol/operation-registry.d.ts +5 -0
  167. package/dist/types/sdk/receipt-state.d.ts +17 -0
  168. package/dist/types/sdk/reconciliation-extensions.d.ts +2 -0
  169. package/dist/types/sdk/router/index.d.ts +1 -0
  170. package/dist/types/sdk/router/session-router.d.ts +152 -0
  171. package/dist/types/sdk/session-list.d.ts +22 -0
  172. package/dist/types/sdk/session-reconnect.d.ts +43 -1
  173. package/dist/types/sdk/session.d.ts +34 -1
  174. package/dist/types/sdk/transport/serve-cli.d.ts +1 -4
  175. package/dist/types/session/account-inventory.d.ts +86 -0
  176. package/dist/types/session/agent-session.d.ts +145 -6
  177. package/dist/types/session/agent-storage.d.ts +10 -0
  178. package/dist/types/session/coordinator-tool-label.d.ts +28 -0
  179. package/dist/types/session/internal/managed-session-storage.d.ts +23 -4
  180. package/dist/types/session/messages.d.ts +1 -1
  181. package/dist/types/session/secure-token-file.d.ts +3 -0
  182. package/dist/types/session/session-manager.d.ts +40 -1
  183. package/dist/types/session/startup-auth-config.d.ts +44 -0
  184. package/dist/types/session/terminal-abort.d.ts +378 -0
  185. package/dist/types/session/yield-queue.d.ts +7 -0
  186. package/dist/types/session-import/claude.d.ts +26 -0
  187. package/dist/types/session-import/codex.d.ts +88 -0
  188. package/dist/types/session-import/command.d.ts +35 -0
  189. package/dist/types/session-import/detect.d.ts +22 -0
  190. package/dist/types/session-import/index.d.ts +7 -0
  191. package/dist/types/session-import/provider-codex.d.ts +22 -0
  192. package/dist/types/session-import/provider-service.d.ts +38 -0
  193. package/dist/types/session-import/redact.d.ts +23 -0
  194. package/dist/types/session-import/service.d.ts +47 -0
  195. package/dist/types/session-import/types.d.ts +120 -0
  196. package/dist/types/setup/paseo/check.d.ts +16 -0
  197. package/dist/types/setup/paseo/install-saga.d.ts +115 -0
  198. package/dist/types/setup/paseo/json-publisher.d.ts +76 -0
  199. package/dist/types/setup/paseo/orchestration-preferences.d.ts +24 -0
  200. package/dist/types/setup/paseo/paseo-ownership.d.ts +87 -0
  201. package/dist/types/setup/paseo/paseo-setup.d.ts +29 -0
  202. package/dist/types/setup/paseo/provider-config.d.ts +35 -0
  203. package/dist/types/setup/paseo/remove.d.ts +14 -0
  204. package/dist/types/setup/paseo/result-types.d.ts +59 -0
  205. package/dist/types/setup/paseo/setup-deps.d.ts +73 -0
  206. package/dist/types/setup/paseo/skills-bridge.d.ts +44 -0
  207. package/dist/types/skill-state/active-state.d.ts +5 -1
  208. package/dist/types/slash-commands/acp-builtins.d.ts +5 -1
  209. package/dist/types/slash-commands/builtin-registry.d.ts +2 -0
  210. package/dist/types/slash-commands/helpers/credential-switch.d.ts +12 -0
  211. package/dist/types/slash-commands/helpers/usage-report.d.ts +5 -6
  212. package/dist/types/slash-commands/types.d.ts +7 -1
  213. package/dist/types/task/executor.d.ts +10 -0
  214. package/dist/types/task/index.d.ts +3 -1
  215. package/dist/types/tools/ask-answer-registry.d.ts +6 -3
  216. package/dist/types/tools/bash-sleep-advisory.d.ts +14 -0
  217. package/dist/types/tools/bash.d.ts +2 -6
  218. package/dist/types/tools/browser/attach.d.ts +11 -0
  219. package/dist/types/tools/browser/launch.d.ts +20 -0
  220. package/dist/types/tools/browser/profile-discovery.d.ts +6 -0
  221. package/dist/types/tools/browser/render.d.ts +1 -0
  222. package/dist/types/tools/browser.d.ts +3 -1
  223. package/dist/types/tools/image-gen.d.ts +9 -2
  224. package/dist/types/tools/index.d.ts +8 -0
  225. package/dist/types/tools/monitor.d.ts +1 -1
  226. package/dist/types/tools/skill-discovery.d.ts +8 -1
  227. package/dist/types/tools/subagent.d.ts +2 -0
  228. package/dist/types/tools/ultragoal-ask-guard.d.ts +2 -2
  229. package/dist/types/utils/herdr-pane.d.ts +76 -0
  230. package/package.json +19 -9
  231. package/scripts/build-binary.ts +2 -1
  232. package/scripts/build-sdk-package-smoke.ts +2 -13
  233. package/scripts/capture-sticky-viewport-showcase.ts +0 -1
  234. package/scripts/compile-args.ts +2 -0
  235. package/scripts/generate-sdk-adapter-parity-manifest.ts +31 -16
  236. package/scripts/generate-sdk-operation-inventory.ts +28 -0
  237. package/scripts/generate-telegram-baseline-manifest.ts +1 -0
  238. package/scripts/generate-tool-catalog.ts +6 -4
  239. package/scripts/verify-gjc-sdk-canonicalization.ts +5 -39
  240. package/src/async/job-manager.ts +352 -17
  241. package/src/async/support.ts +25 -0
  242. package/src/autoresearch/dashboard.ts +28 -13
  243. package/src/capability/index.ts +3 -1
  244. package/src/capability/mcp.ts +6 -0
  245. package/src/capability/types.ts +6 -0
  246. package/src/cli/accounts-cli.ts +395 -0
  247. package/src/cli/args.ts +23 -0
  248. package/src/cli/auth-broker-cli.ts +136 -66
  249. package/src/cli/auth-gateway-cli.ts +94 -70
  250. package/src/cli/config-cli.ts +27 -2
  251. package/src/cli/crash-cli.ts +78 -0
  252. package/src/cli/customize-doctor.ts +1605 -0
  253. package/src/cli/daemon-cli.ts +12 -3
  254. package/src/cli/fast-help.ts +1 -0
  255. package/src/cli/mcp-cli.ts +128 -60
  256. package/src/cli/notify-cli.ts +8 -14
  257. package/src/cli/root-flags.ts +8 -0
  258. package/src/cli/setup-cli.ts +145 -0
  259. package/src/cli/skills-cli.ts +38 -2
  260. package/src/cli/update-cli.ts +167 -12
  261. package/src/cli.ts +4 -0
  262. package/src/commands/accounts.ts +71 -0
  263. package/src/commands/crash.ts +35 -0
  264. package/src/commands/customize.ts +84 -0
  265. package/src/commands/daemon.ts +2 -2
  266. package/src/commands/deep-interview.ts +2 -0
  267. package/src/commands/launch.ts +1 -0
  268. package/src/commands/mcp.ts +12 -7
  269. package/src/commands/ralplan.ts +2 -0
  270. package/src/commands/sdk.ts +65 -32
  271. package/src/commands/setup.ts +5 -0
  272. package/src/commands/skills.ts +14 -4
  273. package/src/commands/ultragoal.ts +10 -1
  274. package/src/commands/update.ts +26 -15
  275. package/src/config/atomic-yaml-patch-worker.ts +57 -0
  276. package/src/config/atomic-yaml-patch.ts +769 -29
  277. package/src/config/config-schema-version.ts +10 -0
  278. package/src/config/file-lock.ts +70 -1
  279. package/src/config/mcp-schema.json +52 -14
  280. package/src/config/model-profile-activation.ts +20 -1
  281. package/src/config/model-profiles.ts +29 -19
  282. package/src/config/model-registry.ts +132 -21
  283. package/src/config/models-config-schema.ts +1 -1
  284. package/src/config/settings-schema.ts +76 -6
  285. package/src/config/settings.ts +4038 -199
  286. package/src/config/skill-settings-defaults.ts +41 -3
  287. package/src/config/task-delegation.ts +87 -0
  288. package/src/config/update-channel.ts +23 -0
  289. package/src/coordinator-mcp/server.ts +377 -308
  290. package/src/crash/index-store.ts +723 -0
  291. package/src/crash/nudge.ts +89 -0
  292. package/src/crash/record-loader.ts +149 -0
  293. package/src/crash/report.ts +551 -0
  294. package/src/crash/sanitize.ts +129 -0
  295. package/src/cursor.ts +36 -10
  296. package/src/customization/import.ts +946 -0
  297. package/src/customization/index.ts +4 -0
  298. package/src/customization/inventory.ts +335 -0
  299. package/src/customization/mutations.ts +141 -0
  300. package/src/customization/types.ts +223 -0
  301. package/src/daemon/control-types.ts +8 -1
  302. package/src/daemon/operator-contract.ts +6 -6
  303. package/src/defaults/gjc/skills/deep-interview/SKILL.md +11 -22
  304. package/src/defaults/gjc/skills/ralplan/SKILL.md +36 -23
  305. package/src/defaults/gjc/skills/ultragoal/SKILL.md +16 -0
  306. package/src/discovery/claude-hooks.ts +38 -0
  307. package/src/discovery/claude.ts +142 -209
  308. package/src/discovery/codex-hooks.ts +38 -0
  309. package/src/discovery/codex.ts +132 -198
  310. package/src/discovery/helpers.ts +8 -1
  311. package/src/discovery/index.ts +2 -0
  312. package/src/discovery/mcp-compat.ts +234 -0
  313. package/src/discovery/mcp-json.ts +6 -0
  314. package/src/edit/renderer.ts +40 -0
  315. package/src/edit/streaming.ts +4 -2
  316. package/src/exec/bash-executor.ts +24 -20
  317. package/src/export/html/index.ts +51 -2
  318. package/src/extensibility/extensions/loader.ts +9 -1
  319. package/src/extensibility/extensions/runner.ts +17 -4
  320. package/src/extensibility/extensions/types.ts +31 -6
  321. package/src/extensibility/gjc-plugins/constrained-hooks.ts +33 -0
  322. package/src/extensibility/gjc-plugins/installer.ts +9 -5
  323. package/src/extensibility/gjc-plugins/observability.ts +8 -2
  324. package/src/extensibility/gjc-plugins/registry.ts +13 -2
  325. package/src/extensibility/gjc-plugins/runtime-adapters.ts +3 -1
  326. package/src/extensibility/gjc-plugins/schema.ts +222 -39
  327. package/src/extensibility/hooks/loader.ts +154 -10
  328. package/src/extensibility/runtime-skill-discovery.ts +257 -60
  329. package/src/extensibility/skill-management.ts +368 -0
  330. package/src/extensibility/skills.ts +52 -16
  331. package/src/gjc-runtime/deep-interview-runtime.ts +45 -61
  332. package/src/gjc-runtime/launch-worktree.ts +56 -2
  333. package/src/gjc-runtime/linux-proc.ts +7 -1
  334. package/src/gjc-runtime/ralplan-runtime.ts +100 -164
  335. package/src/gjc-runtime/session-state-lock.ts +992 -0
  336. package/src/gjc-runtime/session-state-sidecar.ts +644 -142
  337. package/src/gjc-runtime/state-writer.ts +39 -14
  338. package/src/gjc-runtime/tmux-owner-isolation.ts +5 -4
  339. package/src/gjc-runtime/ultragoal-guard.ts +11 -4
  340. package/src/gjc-runtime/ultragoal-runtime.ts +44 -41
  341. package/src/gjc-runtime/workflow-settings.ts +596 -0
  342. package/src/goals/tools/goal-tool.ts +6 -1
  343. package/src/hooks/events.ts +291 -0
  344. package/src/hooks/native-skill-hook.ts +4 -0
  345. package/src/hooks/normalize.ts +369 -0
  346. package/src/hooks/skill-state.ts +165 -46
  347. package/src/internal-urls/docs-index.generated.ts +40 -32
  348. package/src/main.ts +32 -5
  349. package/src/migrate/mcp-mapper.ts +25 -2
  350. package/src/modes/acp/abort-scope.ts +29 -0
  351. package/src/modes/acp/acp-agent.ts +423 -98
  352. package/src/modes/components/assistant-message.ts +6 -1
  353. package/src/modes/components/customization/customization-dashboard.ts +443 -0
  354. package/src/modes/components/customization/import-wizard.ts +372 -0
  355. package/src/modes/components/customization/index.ts +1 -0
  356. package/src/modes/components/gajae-pet-widget.ts +539 -213
  357. package/src/modes/components/irc-sidebar.ts +11 -0
  358. package/src/modes/components/iterm-pet-transport.ts +585 -0
  359. package/src/modes/components/oauth-selector.ts +277 -86
  360. package/src/modes/components/pet-capability.ts +39 -40
  361. package/src/modes/components/settings-selector.ts +9 -0
  362. package/src/modes/components/status-line/gh.ts +45 -1
  363. package/src/modes/components/status-line/segments.ts +16 -1
  364. package/src/modes/components/tool-status-header.ts +13 -3
  365. package/src/modes/controllers/command-controller.ts +20 -8
  366. package/src/modes/controllers/extension-ui-controller.ts +56 -257
  367. package/src/modes/controllers/input-controller.ts +10 -0
  368. package/src/modes/controllers/runtime-mcp-command-controller.ts +16 -3
  369. package/src/modes/controllers/selector-controller.ts +177 -72
  370. package/src/modes/controllers/stt-controller.ts +3 -3
  371. package/src/modes/interactive-mode.ts +88 -16
  372. package/src/modes/print-mode.ts +35 -6
  373. package/src/modes/runtime-init.ts +21 -68
  374. package/src/modes/types.ts +1 -0
  375. package/src/modes/utils/injected-user-submission.ts +25 -0
  376. package/src/modes/utils/terminal-bell.ts +15 -1
  377. package/src/prompts/agent-fragments/ralplan-persistence.md +1 -1
  378. package/src/prompts/agent-fragments/restricted-bash.md +1 -1
  379. package/src/prompts/agents/critic.md +1 -1
  380. package/src/prompts/system/rlm-research.md +1 -1
  381. package/src/prompts/system/system-prompt.md +0 -2
  382. package/src/prompts/tools/bash.md +7 -1
  383. package/src/prompts/tools/browser.md +1 -1
  384. package/src/prompts/tools/cron.md +6 -6
  385. package/src/prompts/tools/read.md +0 -2
  386. package/src/prompts/tools/skill-discovery.md +4 -2
  387. package/src/runtime-mcp/client.ts +427 -23
  388. package/src/runtime-mcp/config.ts +37 -5
  389. package/src/runtime-mcp/manager-pool.test.ts +56 -0
  390. package/src/runtime-mcp/manager.ts +52 -2
  391. package/src/runtime-mcp/oauth-discovery.ts +13 -0
  392. package/src/runtime-mcp/oauth-flow.ts +46 -1
  393. package/src/runtime-mcp/pool-key.ts +5 -1
  394. package/src/runtime-mcp/pool.test.ts +9 -0
  395. package/src/runtime-mcp/protocol.test.ts +353 -0
  396. package/src/runtime-mcp/protocol.ts +624 -0
  397. package/src/runtime-mcp/scope-config.ts +78 -0
  398. package/src/runtime-mcp/tool-bridge.ts +44 -10
  399. package/src/runtime-mcp/transports/http.ts +84 -13
  400. package/src/runtime-mcp/types.ts +123 -12
  401. package/src/sdk/acp/adapter.ts +328 -97
  402. package/src/sdk/broker/broker.ts +160 -741
  403. package/src/sdk/broker/ensure.ts +9 -1
  404. package/src/sdk/broker/lifecycle.ts +510 -116
  405. package/src/sdk/broker/operation-receipt-ledger.ts +11 -2
  406. package/src/sdk/broker/process-incarnation.ts +19 -0
  407. package/src/sdk/broker/session-index.ts +516 -117
  408. package/src/sdk/broker/startup-failure.ts +28 -5
  409. package/src/sdk/broker/transport.ts +1 -13
  410. package/src/sdk/bus/chat-daemon-cli.ts +4 -2
  411. package/src/sdk/bus/chat-daemon-control.ts +67 -6
  412. package/src/sdk/bus/chat-daemon-runtime.ts +183 -859
  413. package/src/sdk/bus/config.ts +13 -0
  414. package/src/sdk/bus/conversation-store.ts +59 -171
  415. package/src/sdk/bus/daemon-paths.ts +20 -0
  416. package/src/sdk/bus/discord-conversation.ts +2 -0
  417. package/src/sdk/bus/discord-daemon.ts +524 -126
  418. package/src/sdk/bus/discord-live-provider.ts +206 -79
  419. package/src/sdk/bus/existing-thread-readiness.ts +4 -97
  420. package/src/sdk/bus/inbound-reaction-ordering.ts +122 -0
  421. package/src/sdk/bus/index.ts +2480 -456
  422. package/src/sdk/bus/kind-aware-reconciliation.ts +204 -34
  423. package/src/sdk/bus/lifecycle-commands.ts +2 -2
  424. package/src/sdk/bus/managed-daemon.ts +2 -145
  425. package/src/sdk/bus/notification-service.ts +196 -0
  426. package/src/sdk/bus/operator-runtime.ts +1 -1
  427. package/src/sdk/bus/prompt-reconciliation.ts +24 -15
  428. package/src/sdk/bus/reconciliation-store.ts +553 -24
  429. package/src/sdk/bus/session-control.ts +49 -3
  430. package/src/sdk/bus/slack-conversation.ts +4 -0
  431. package/src/sdk/bus/slack-daemon.ts +733 -134
  432. package/src/sdk/bus/slack-live-provider.ts +65 -15
  433. package/src/sdk/bus/slack-provider.ts +4 -0
  434. package/src/sdk/bus/slack-thread-binding.ts +9 -104
  435. package/src/sdk/bus/telegram-adoption-intent.ts +299 -209
  436. package/src/sdk/bus/telegram-daemon-cli.ts +194 -7
  437. package/src/sdk/bus/telegram-daemon-contract.ts +265 -19
  438. package/src/sdk/bus/telegram-daemon-control.ts +3 -13
  439. package/src/sdk/bus/telegram-daemon-orphan-reap.ts +498 -0
  440. package/src/sdk/bus/telegram-daemon-owner-registry.ts +176 -0
  441. package/src/sdk/bus/telegram-daemon.ts +2552 -2280
  442. package/src/sdk/bus/telegram-reference.ts +1 -226
  443. package/src/sdk/bus/telegram-setup.ts +2 -2
  444. package/src/sdk/bus/threaded-render.ts +1 -0
  445. package/src/sdk/bus/topic-registry.ts +279 -146
  446. package/src/sdk/cli/rows.ts +2 -35
  447. package/src/sdk/cli/session-cli.ts +776 -700
  448. package/src/sdk/client/client.ts +892 -1
  449. package/src/sdk/host/control/dispatch.ts +93 -58
  450. package/src/sdk/host/control/index.ts +1 -1
  451. package/src/sdk/host/control/operations.ts +18 -10
  452. package/src/sdk/host/control/runtime-gate.ts +40 -0
  453. package/src/sdk/host/host.ts +63 -12
  454. package/src/sdk/host/query/handlers.ts +66 -7
  455. package/src/sdk/host/reverse-leases.ts +2 -2
  456. package/src/sdk/host/sdk-surface-parity.test.ts +1 -1
  457. package/src/sdk/host/session-runtime.test.ts +2787 -34
  458. package/src/sdk/host/session-runtime.ts +1489 -101
  459. package/src/sdk/host/surface-policy.ts +12 -8
  460. package/src/sdk/host/types.ts +1 -1
  461. package/src/sdk/host/websocket-transport.lifecycle.test.ts +31 -59
  462. package/src/sdk/host/websocket-transport.ts +85 -50
  463. package/src/sdk/index.ts +2 -1
  464. package/src/sdk/lifecycle/broker-client.ts +53 -0
  465. package/src/sdk/lifecycle/client.ts +234 -0
  466. package/src/sdk/lifecycle/index.ts +3 -0
  467. package/src/sdk/{bus/recent-activity.ts → lifecycle/recent-sessions.ts} +5 -2
  468. package/src/sdk/lifecycle/service.ts +720 -0
  469. package/src/sdk/mcp/server.ts +226 -188
  470. package/src/sdk/prompt-deadline-lease.ts +55 -0
  471. package/src/sdk/prompt-deadline-manager.ts +148 -0
  472. package/src/sdk/prompt-status.ts +11 -3
  473. package/src/sdk/protocol/operation-inventory.generated.json +272 -129
  474. package/src/sdk/protocol/operation-registry.ts +71 -8
  475. package/src/sdk/receipt-state.ts +43 -0
  476. package/src/sdk/reconciliation-extensions.ts +14 -0
  477. package/src/sdk/router/index.ts +1 -0
  478. package/src/sdk/router/session-router.ts +1658 -0
  479. package/src/sdk/session-list.ts +93 -0
  480. package/src/sdk/session-reconnect.ts +45 -1
  481. package/src/sdk/session.ts +716 -120
  482. package/src/sdk/transport/serve-cli.ts +18 -34
  483. package/src/session/account-inventory.ts +603 -0
  484. package/src/session/agent-session.ts +2857 -582
  485. package/src/session/agent-storage.ts +35 -0
  486. package/src/session/blob-store.ts +32 -1
  487. package/src/session/coordinator-tool-label.ts +40 -0
  488. package/src/session/internal/managed-session-scope.ts +4 -0
  489. package/src/session/internal/managed-session-storage.ts +173 -12
  490. package/src/session/messages.ts +1 -1
  491. package/src/session/secure-token-file.ts +80 -0
  492. package/src/session/session-manager.ts +730 -58
  493. package/src/session/session-storage.ts +25 -16
  494. package/src/session/startup-auth-config.ts +297 -0
  495. package/src/session/terminal-abort.ts +1253 -0
  496. package/src/session/yield-queue.ts +57 -15
  497. package/src/session-import/claude.ts +334 -0
  498. package/src/session-import/codex.ts +1033 -0
  499. package/src/session-import/command.ts +77 -0
  500. package/src/session-import/detect.ts +133 -0
  501. package/src/session-import/index.ts +7 -0
  502. package/src/session-import/provider-codex.ts +327 -0
  503. package/src/session-import/provider-service.ts +457 -0
  504. package/src/session-import/redact.ts +128 -0
  505. package/src/session-import/service.ts +1264 -0
  506. package/src/session-import/types.ts +148 -0
  507. package/src/setup/paseo/check.ts +213 -0
  508. package/src/setup/paseo/install-saga.ts +293 -0
  509. package/src/setup/paseo/json-publisher.ts +263 -0
  510. package/src/setup/paseo/orchestration-preferences.ts +86 -0
  511. package/src/setup/paseo/paseo-ownership.ts +224 -0
  512. package/src/setup/paseo/paseo-setup.ts +253 -0
  513. package/src/setup/paseo/provider-config.ts +139 -0
  514. package/src/setup/paseo/remove.ts +183 -0
  515. package/src/setup/paseo/result-types.ts +79 -0
  516. package/src/setup/paseo/setup-deps.ts +175 -0
  517. package/src/setup/paseo/skills-bridge.ts +260 -0
  518. package/src/skill-state/active-state.ts +21 -11
  519. package/src/slash-commands/acp-builtins.ts +9 -1
  520. package/src/slash-commands/builtin-registry.ts +98 -16
  521. package/src/slash-commands/helpers/credential-switch.ts +143 -0
  522. package/src/slash-commands/helpers/mcp.ts +9 -3
  523. package/src/slash-commands/helpers/usage-report.ts +61 -56
  524. package/src/slash-commands/types.ts +7 -2
  525. package/src/task/executor.ts +30 -11
  526. package/src/task/index.ts +66 -7
  527. package/src/task/render.ts +23 -9
  528. package/src/tools/ask-answer-registry.ts +23 -7
  529. package/src/tools/ask.ts +8 -4
  530. package/src/tools/bash-sleep-advisory.ts +115 -0
  531. package/src/tools/bash.ts +98 -18
  532. package/src/tools/browser/attach.ts +71 -3
  533. package/src/tools/browser/launch.ts +86 -13
  534. package/src/tools/browser/profile-discovery.ts +57 -7
  535. package/src/tools/browser/render.ts +8 -1
  536. package/src/tools/browser.ts +130 -21
  537. package/src/tools/computer.enforcement.test.ts +1 -1
  538. package/src/tools/computer.ts +3 -2
  539. package/src/tools/cron.ts +12 -1
  540. package/src/tools/image-gen.ts +27 -16
  541. package/src/tools/index.ts +8 -0
  542. package/src/tools/job.ts +33 -6
  543. package/src/tools/monitor.ts +41 -2
  544. package/src/tools/skill-discovery.ts +21 -29
  545. package/src/tools/subagent.ts +142 -24
  546. package/src/tools/tool-catalog.generated.ts +6 -6
  547. package/src/tools/ultragoal-ask-guard.ts +10 -3
  548. package/src/utils/herdr-pane.ts +345 -0
  549. package/src/utils/title-generator.ts +2 -0
  550. package/src/web/scrapers/index.ts +6 -4
  551. package/dist/types/cli/malloc-env-guard.test.d.ts +0 -1
  552. package/dist/types/defaults/gjc-defaults.test.d.ts +0 -1
  553. package/dist/types/memory-backend/lazy-loading.test.d.ts +0 -1
  554. package/dist/types/runtime/boot-ordering.test.d.ts +0 -1
  555. package/dist/types/runtime/lazy-service.test.d.ts +0 -1
  556. package/dist/types/runtime/network-prewarm-service.test.d.ts +0 -1
  557. package/dist/types/runtime/workspace-tree-service.test.d.ts +0 -1
  558. package/dist/types/runtime-mcp/config.test.d.ts +0 -1
  559. package/dist/types/runtime-mcp/http.test.d.ts +0 -1
  560. package/dist/types/runtime-mcp/manager-pool.test.d.ts +0 -1
  561. package/dist/types/runtime-mcp/pool-key.test.d.ts +0 -1
  562. package/dist/types/runtime-mcp/pool.test.d.ts +0 -1
  563. package/dist/types/sdk/bus/lifecycle-control-runtime.d.ts +0 -117
  564. package/dist/types/sdk/bus/lifecycle-orchestrator.d.ts +0 -141
  565. package/dist/types/sdk/bus/telegram-cli.d.ts +0 -31
  566. package/dist/types/sdk/elevation/allowlist.d.ts +0 -20
  567. package/dist/types/sdk/elevation/audit.d.ts +0 -93
  568. package/dist/types/sdk/elevation/capability.d.ts +0 -3
  569. package/dist/types/sdk/elevation/digest.d.ts +0 -72
  570. package/dist/types/sdk/elevation/dispatch-receipt.d.ts +0 -85
  571. package/dist/types/sdk/elevation/grant-ledger.d.ts +0 -163
  572. package/dist/types/sdk/elevation/owner.d.ts +0 -48
  573. package/dist/types/sdk/host/import-graph.test.d.ts +0 -1
  574. package/dist/types/sdk/host/sdk-surface-parity.test.d.ts +0 -1
  575. package/dist/types/sdk/host/session-runtime.test.d.ts +0 -1
  576. package/dist/types/sdk/host/websocket-transport.lifecycle.test.d.ts +0 -1
  577. package/dist/types/session/auth-broker-config.d.ts +0 -13
  578. package/dist/types/session/heap-eviction-artifacts.test.d.ts +0 -1
  579. package/dist/types/skills/skills.test.d.ts +0 -1
  580. package/dist/types/slash-commands/notify-command.test.d.ts +0 -1
  581. package/dist/types/task/token-log.test.d.ts +0 -1
  582. package/dist/types/tools/computer.enforcement.test.d.ts +0 -1
  583. package/dist/types/tools/descriptors.test.d.ts +0 -1
  584. package/scripts/g005-daemon-smoke.ts +0 -180
  585. package/scripts/g011-daemon-path-smoke.ts +0 -153
  586. package/src/sdk/bus/lifecycle-control-runtime.ts +0 -1733
  587. package/src/sdk/bus/lifecycle-orchestrator.ts +0 -489
  588. package/src/sdk/bus/telegram-cli.ts +0 -212
  589. package/src/sdk/elevation/allowlist.ts +0 -54
  590. package/src/sdk/elevation/audit.ts +0 -208
  591. package/src/sdk/elevation/capability.ts +0 -41
  592. package/src/sdk/elevation/digest.ts +0 -129
  593. package/src/sdk/elevation/dispatch-receipt.ts +0 -184
  594. package/src/sdk/elevation/grant-ledger.ts +0 -1142
  595. package/src/sdk/elevation/owner.ts +0 -109
  596. package/src/session/auth-broker-config.ts +0 -109
  597. /package/dist/types/{ai-core-import-gate.test.d.ts → discovery/claude-hooks.d.ts} +0 -0
  598. /package/dist/types/{cli/fixture-report.test.d.ts → discovery/codex-hooks.d.ts} +0 -0
  599. /package/dist/types/sdk/{bus/recent-activity.d.ts → lifecycle/recent-sessions.d.ts} +0 -0
@@ -1,18 +1,4 @@
1
- /**
2
- * Telegram **reference** client for the Gajae-Code SDK.
3
- *
4
- * This is an example/template, NOT an upstream-owned integration: it implements
5
- * the documented WS protocol (see `docs/sdk.md`) so you can copy it
6
- * to build Discord/Slack/etc. clients with zero upstream changes. The Bot API
7
- * transport shape is salvaged from the removed `telegram-remote` package.
8
- *
9
- * Flow: read the endpoint discovery file -> connect to the session WS -> render
10
- * `action_needed` to a Telegram chat (inline keyboard for options) -> map button
11
- * taps / text replies to `reply` frames -> reflect `action_resolved` /
12
- * `reply_rejected`.
13
- *
14
- * Dependency-free: uses global `fetch` and `WebSocket` (Bun/Node 22+).
15
- */
1
+ /** Telegram transport and presentation helpers shared by the managed provider adapter. */
16
2
  /** One inline-keyboard button. */
17
3
  export interface InlineButton {
18
4
  text: string;
@@ -132,36 +118,4 @@ export interface RouteInboundContext {
132
118
  }
133
119
  /** Route a Telegram update to a session/action without I/O. Fail closed under ambiguity. */
134
120
  export declare function routeInboundUpdate(update: unknown, ctx: RouteInboundContext): RouteDecision;
135
- /** Read `{url, token, pid?, stale?}` from an endpoint discovery file. */
136
- export declare function readEndpoint(path: string): {
137
- url: string;
138
- token: string;
139
- pid?: number;
140
- stale?: boolean;
141
- };
142
- /** A bounded, diagnostic-only notification mirrored to reference-client embedders. */
143
- export type TelegramReferenceDiagnostic = Readonly<{
144
- code: "action_unavailable";
145
- requiredCapabilities: readonly string[];
146
- }>;
147
- /** Options for {@link runTelegramReferenceClient}. */
148
- export interface TelegramReferenceOptions {
149
- botToken: string;
150
- chatId: string;
151
- endpointFile: string;
152
- apiBase?: string;
153
- fetchImpl?: typeof fetch;
154
- sound?: TelegramNotificationSound;
155
- /**
156
- * Additive mirror of bounded logger diagnostics. It never receives tokens,
157
- * identifiers, raw frames, Telegram content, or WebSocket replies.
158
- */
159
- onDiagnostic?: (diagnostic: TelegramReferenceDiagnostic) => void;
160
- }
161
- /**
162
- * Run the reference bridge until the WebSocket closes. Sends `action_needed` to
163
- * the chat and forwards taps/text as replies. This is a minimal example loop;
164
- * production clients add reconnection, multi-chat routing, and persistence.
165
- */
166
- export declare function runTelegramReferenceClient(opts: TelegramReferenceOptions): Promise<void>;
167
121
  export {};
@@ -56,6 +56,7 @@ interface ThreadedFrame {
56
56
  branch?: unknown;
57
57
  machine?: unknown;
58
58
  title?: unknown;
59
+ telegramTopicsEnabled?: unknown;
59
60
  lastMessage?: unknown;
60
61
  task?: unknown;
61
62
  goal?: unknown;
@@ -1,11 +1,12 @@
1
1
  /**
2
- * Per-session forum-topic registry for the threaded session surface.
2
+ * Forum-topic registry for eligible orchestration sessions on the threaded
3
+ * Telegram surface.
3
4
  *
4
- * Each GJC session owns one active Telegram forum topic. Remote archive closes
5
- * daemon-created topics without deleting their durable records; rotated
6
- * successors move inactive records into retained history before creating a new
7
- * active authority. The registry also tracks whether the one-time identity
8
- * header has already been pinned.
5
+ * Each eligible orchestration session owns one active Telegram forum topic.
6
+ * Remote archive closes daemon-created topics without deleting their durable
7
+ * records; rotated successors move inactive records into retained history before
8
+ * creating a new active authority. The registry also tracks whether the one-time
9
+ * identity header has already been pinned.
9
10
  *
10
11
  * State is a plain serialisable map persisted beside the daemon state files;
11
12
  * topic creation is injected so this module is pure and unit-testable without a
@@ -51,6 +52,10 @@ export interface TopicRecord {
51
52
  authorityState?: TopicLifecycleState;
52
53
  /** Telegram chat and endpoint authority last proven to use this topic. */
53
54
  chatId?: string;
55
+ /** Stable provider binding; never contains SDK endpoint or attachment identity. */
56
+ telegramBinding?: TelegramTopicBinding;
57
+ /** Why this record is archive-fenced; absence means no remote archive is authorized. */
58
+ archiveReason?: "session_closed" | "notification_subscription_removed" | "create_compensation";
54
59
  /** Canonical endpoint tuple (URL + token) that currently holds the lease. */
55
60
  endpointKey?: string;
56
61
  /** Authenticated endpoint authority digest, excluding transport presentation. */
@@ -78,6 +83,8 @@ export interface TopicCreateClaim {
78
83
  leaseOwner?: string;
79
84
  authorityEpoch: number;
80
85
  createdAt: number;
86
+ telegramBinding?: TelegramTopicBinding;
87
+ /** Legacy v2 input only; never emitted by serialize(). */
81
88
  binding?: TopicEndpointBinding;
82
89
  }
83
90
  export interface ArchiveJob {
@@ -103,8 +110,8 @@ export interface TopicRegistryState {
103
110
  topics: Record<string, TopicRecord>;
104
111
  /** Durable lifecycle epochs retained after an archive starts. */
105
112
  fences?: Record<string, number>;
106
- /** Closed transport endpoint leases; unchanged endpoint discovery remains fenced across restart. */
107
- closedEndpoints?: Record<string, TopicEndpointBinding>;
113
+ /** Closed durable Telegram bindings; values intentionally contain no SDK endpoint identity. */
114
+ closedEndpoints?: Record<string, TelegramTopicBinding>;
108
115
  /** Persistent host identity used to distinguish concurrent installations. */
109
116
  installationHostId?: string;
110
117
  /** Bounded durable archive work; no topic record is physically deleted. */
@@ -122,11 +129,20 @@ export interface TopicRegistryCasAuthority {
122
129
  read(): Promise<TopicRegistryState | undefined>;
123
130
  compareAndSet(expectedGeneration: number, next: TopicRegistryState): Promise<boolean>;
124
131
  }
132
+ /** Durable Telegram authority. This is the only binding shape writers persist. */
133
+ export interface TelegramTopicBinding {
134
+ chatId: string;
135
+ transport: "telegram";
136
+ }
137
+ export type TopicArchiveReason = NonNullable<TopicRecord["archiveReason"]>;
125
138
  /** Authenticated runtime binding for a durable topic lease. */
126
139
  export interface TopicEndpointBinding {
127
140
  chatId: string;
128
- endpointKey: string;
129
- endpointDigest: string;
141
+ transport?: "telegram";
142
+ logicalSessionId?: string;
143
+ /** Legacy input-only fields. They are never authority or persistence fields. */
144
+ endpointKey?: string;
145
+ endpointDigest?: string;
130
146
  endpointGeneration?: number;
131
147
  }
132
148
  /** Discriminated durable endpoint authority for identity-less replay admission. */
@@ -239,9 +255,9 @@ export declare class TopicRegistry {
239
255
  * incumbents, cross-chat records, malformed evidence, collisions, and delete
240
256
  * fences remain fail-closed.
241
257
  */
242
- bindEndpoint(sessionId: string, binding: TopicEndpointBinding, activeEndpointKeys?: ReadonlySet<string>, allowEndpointRotation?: boolean): "bound" | "unchanged" | "rejected";
258
+ bindEndpoint(sessionId: string, binding: TopicEndpointBinding, _activeEndpointKeys?: ReadonlySet<string>, _allowEndpointRotation?: boolean): "bound" | "unchanged" | "rejected";
243
259
  /** Undo a failed durable endpoint migration without disturbing concurrent metadata writers. */
244
- restoreEndpointBinding(sessionId: string, expected: TopicEndpointBinding, previous: Pick<TopicRecord, "chatId" | "endpointKey" | "endpointDigest" | "endpointGeneration" | "endpointIncarnation">): boolean;
260
+ restoreEndpointBinding(sessionId: string, expected: TopicEndpointBinding, previous: Pick<TopicRecord, "chatId">): boolean;
245
261
  /**
246
262
  * Return the existing active topic for `sessionId`, or create one via
247
263
  * `create` (called only on first use).
@@ -296,28 +312,28 @@ export declare class TopicRegistry {
296
312
  /** Restore the exact archive fence after a failed compensation publication. */
297
313
  restoreArchiveFence(snapshot: TopicArchiveAuthoritySnapshot): boolean;
298
314
  /** Fence new work before the remote archive starts, including an absent in-flight create. */
299
- beginArchive(sessionId: string, hostId?: string, now?: number): TopicRecord | undefined;
315
+ beginArchive(sessionId: string, hostId: string | undefined, now: number, reason: TopicArchiveReason): TopicRecord | undefined;
300
316
  /** Verify the durable archive initiator immediately before remote dispatch. */
301
317
  archiveAuthorityAllows(sessionId: string, hostId: string, pairedChatId: string, now: number): boolean;
302
318
  /** @deprecated Production dispatch must provide the current paired chat id. */
303
319
  archiveAuthorityAllows(sessionId: string, hostId: string, now: number): boolean;
304
320
  /** Retain an accepted create as deletion-fenced before remote compensation can begin. */
305
- fenceAcceptedCreate(sessionId: string, topicId: string, now?: () => number, name?: string, binding?: TopicEndpointBinding, topicOrigin?: TopicRecord["topicOrigin"], archiveChatId?: string): TopicRecord;
321
+ fenceAcceptedCreate(sessionId: string, topicId: string, now?: () => number, name?: string, binding?: TopicEndpointBinding, topicOrigin?: TopicRecord["topicOrigin"], archiveChatId?: string, reason?: TopicArchiveReason): TopicRecord;
306
322
  /** Fence an accepted create only when its exact creator lease still owns the record. */
307
- fenceAcceptedCreateForLease(sessionId: string, topicId: string, creationLeaseEpoch: number, hostId: string, now?: () => number, name?: string, binding?: TopicEndpointBinding, topicOrigin?: TopicRecord["topicOrigin"], archiveChatId?: string): TopicRecord | undefined;
323
+ fenceAcceptedCreateForLease(sessionId: string, topicId: string, creationLeaseEpoch: number, hostId: string, now?: () => number, name?: string, binding?: TopicEndpointBinding, topicOrigin?: TopicRecord["topicOrigin"], archiveChatId?: string, reason?: TopicArchiveReason): TopicRecord | undefined;
308
324
  /** Wait for a revoked create to settle before admitting a later lifecycle epoch. */
309
325
  awaitInflight(sessionId: string): Promise<void>;
310
326
  /**
311
327
  * Retain a topic record after a definite remote archive only while the exact
312
328
  * dispatched authority epoch is still current.
313
329
  */
314
- settleArchive(sessionId: string, topicId: string, dispatchedAuthorityEpoch: number): boolean;
330
+ settleArchive(sessionId: string, topicId: string, dispatchedAuthorityEpoch: number, reason: TopicArchiveReason): boolean;
315
331
  /** Durable archive jobs that are eligible for a retry at `now`. */
316
332
  archivePendingSessionIds(now?: number): string[];
317
333
  /** Durable/manual recovery candidates that exceeded the automatic archive retry budget. */
318
334
  archiveExhaustedSessionIds(): string[];
319
335
  /** Persist an indefinitely discoverable retry after an ambiguous archive result. */
320
- scheduleArchiveRetry(sessionId: string, now: number, diagnostic?: string): ArchiveJob | undefined;
336
+ scheduleArchiveRetry(sessionId: string, now: number, reason: TopicArchiveReason, diagnostic?: string): ArchiveJob | undefined;
321
337
  /** Serialise active records plus unpublished staged creates for atomic commit. */
322
338
  serialize(): TopicRegistryState;
323
339
  }
@@ -4,9 +4,8 @@
4
4
  * Every semantic verb renders its output through these rows so machine
5
5
  * consumers get one deterministic, versioned envelope per verb. Credentials
6
6
  * are never part of the row schema: broker `session.list` rows carry no
7
- * credentials, offline inspect rows are projected from endpoint discovery
8
- * records with secret-shaped fields stripped before they can reach a row, and
9
- * pass-through host payloads are redacted recursively before rendering.
7
+ * credentials, and pass-through host payloads are redacted recursively before
8
+ * rendering.
10
9
  */
11
10
  export declare const SESSION_ROWS_VERSION = 1;
12
11
  export type SdkSessionActivityState = "active" | "idle";
@@ -80,14 +79,6 @@ export declare function stripSecretFields(value: unknown): unknown;
80
79
  * index shapes.
81
80
  */
82
81
  export declare function toSessionRowV1(value: unknown): SdkSessionRowV1;
83
- /**
84
- * Offline inspect row projected from a local SDK endpoint discovery record.
85
- * The discovery record carries the endpoint credential (`url`/`token`); neither
86
- * is ever projected into the row. `path` is the endpoint file
87
- * `<stateRoot>/sdk/<sessionId>.json`, so the state root is recovered from the
88
- * path when the layout matches.
89
- */
90
- export declare function toOfflineSessionRowV1(value: unknown): SdkSessionRowV1;
91
82
  export declare function toCheckpointRecordV1(value: unknown): SdkCheckpointRecordV1 | undefined;
92
83
  export declare function toRetentionGapV1(value: unknown): SdkRetentionGapV1 | undefined;
93
84
  /** Projects a transcript entry or ring event into a tail item with dedupe keys. */
@@ -1,51 +1,41 @@
1
- import { type OperationKind } from "../protocol/operation-registry";
2
- export type SdkSessionCliAction = "list" | "inspect" | "send" | "status" | "tail" | "elevate" | "raw";
1
+ import { SessionRouter } from "../router";
2
+ export type SdkSessionCliAction = "list" | "inspect" | "send" | "status" | "tail" | "raw" | "control" | "query" | "global";
3
3
  export type SdkSessionCliRawKind = "control" | "query" | "global";
4
4
  export interface SdkSessionCliArgs {
5
5
  action?: string;
6
- /** Raw dispatch kind when action is "raw" (control | query | global). */
7
6
  rawAction?: string;
8
7
  sessionId?: string;
9
- /** Caller-chosen operation reference (ULID) for `send`; required target for `status`. */
10
8
  opRef?: string;
11
9
  operation?: string;
12
10
  query?: string;
13
- /** Convenience `send` body: forwarded as the `text` field of turn.prompt. */
14
11
  text?: string;
15
12
  jsonInput?: string;
16
13
  jsonInputFile?: string;
17
14
  jsonInputStdin?: boolean;
18
15
  idempotencyKey?: string;
19
- elevationRequestId?: string;
20
- operationKind?: OperationKind;
21
16
  confirm?: boolean;
22
- /** Raw query continuation cursor, or a saved checkpoint token to resume `tail` from (re-minted per connection). */
23
17
  cursor?: string;
24
- showEndpointCredential?: boolean;
25
- yes?: boolean;
26
- /** `send --wait`: poll turn.prompt_status until terminal or the wait window elapses. */
27
18
  wait?: boolean;
28
- /** Bounded wait for `send --wait`, `status`, and live `tail` follow. */
29
19
  timeoutMs?: number;
30
- /** `tail --strict`: fail closed on retention gaps (exit 1 retention_gap). */
31
20
  strict?: boolean;
32
- /** `tail --until-idle`: exit once the observed event stream reaches a terminal turn state. */
33
21
  untilIdle?: boolean;
34
- /** `tail --all-events`: include every event-ring kind instead of the tail subset. */
35
22
  allEvents?: boolean;
36
23
  repo?: string;
37
24
  agentDir?: string;
38
25
  }
39
- /**
40
- * Time-ordered operation reference (ULID): 48-bit millisecond timestamp plus
41
- * 80 bits of randomness, Crockford base32, lowercase. The ref is used as the
42
- * `turn.prompt` clientRef so `send`/`status` correlate without a broker round
43
- * trip, and matches the plan's durable op-ref ledger shape (C7).
44
- */
26
+ export interface RetainedTranscriptTailReader {
27
+ readonly size: number;
28
+ readRange(start: number, end: number): Promise<Uint8Array>;
29
+ }
30
+ /** Creates a lowercase ULID operation reference for prompt reconciliation. */
45
31
  export declare function createOperationRef(now?: number): string;
32
+ /** Exported for tests: each status poll must stay inside the caller's wait window. */
33
+ export declare function waitForTerminalStatus(router: SessionRouter, sessionId: string, clientRef: string, timeoutMs: number | undefined): Promise<{
34
+ terminal: boolean;
35
+ status: string;
36
+ detail: unknown;
37
+ }>;
38
+ export declare function scanRetainedTranscriptTail(reader: RetainedTranscriptTailReader): Promise<unknown[]>;
46
39
  export declare function runTail(repo: string, agentDir: string, sessionId: string, args: SdkSessionCliArgs): Promise<unknown>;
47
- /**
48
- * Runs the `gjc sdk session` command family: semantic verbs (list, inspect,
49
- * send, status, tail) plus the explicit raw control/query/global hatch.
50
- */
40
+ /** Runs the broker-bound `gjc sdk session` command family without exposing endpoint credentials. */
51
41
  export declare function runSdkSessionCli(args: SdkSessionCliArgs, writeOutput?: (value: unknown) => void, setExitCode?: (exitCode: 1 | 2) => void): Promise<void>;
@@ -1 +1,97 @@
1
- export * from "@gajae-code/bridge-client";
1
+ export type SdkErrorCode = "invalid_input" | "unknown_operation" | "not_found" | "unavailable" | "timeout" | "connection_closed" | "uncertain_after_send" | "endpoint_credential_forbidden" | (string & {});
2
+ export declare class SdkClientError extends Error {
3
+ readonly code: SdkErrorCode;
4
+ readonly details: unknown;
5
+ /**
6
+ * Reconnect-cycle diagnostics, separate from `details` because `details` is an
7
+ * established contract: callers read the terminating transport error straight off
8
+ * it (`session-cli.ts` matches `details.code` against `ENOENT`/`ECONNREFUSED`, and
9
+ * lifecycle callers cast it to a sent record). Wrapping that value would silently
10
+ * break every such reader, so the new attribution rides alongside it instead.
11
+ */
12
+ readonly reconnect?: SdkReconnectExhaustedDetails;
13
+ constructor(code: SdkErrorCode, message: string, details?: unknown, reconnect?: SdkReconnectExhaustedDetails);
14
+ }
15
+ export type SdkReconnectTerminationReason = "attempts_exhausted" | "deadline" | "cancelled";
16
+ /**
17
+ * Reconnect-cycle termination diagnostics. `attemptsConsumed` counts retry slots,
18
+ * not socket opens: the initial open is free, so the loop can open one more socket
19
+ * than `attemptBudget`. Both values are therefore directly comparable.
20
+ *
21
+ * `reason` is authoritative. `attemptsConsumed < attemptBudget` is corroborating
22
+ * evidence of truncation, not a classifier: a zero-attempt client that trips its
23
+ * deadline immediately reports `0 === 0` and is still deadline-terminated.
24
+ */
25
+ export interface SdkReconnectExhaustedDetails {
26
+ readonly attemptsConsumed: number;
27
+ readonly attemptBudget: number;
28
+ readonly elapsedMs: number;
29
+ readonly reason: SdkReconnectTerminationReason;
30
+ }
31
+ /**
32
+ * Deadline a one-shot request client waits for a reply. Long-lived session
33
+ * clients override it per request; see `SESSION_REQUEST_TIMEOUT_MS`.
34
+ */
35
+ export declare const DEFAULT_SDK_REQUEST_TIMEOUT_MS = 10000;
36
+ export interface SdkClientOptions {
37
+ timeoutMs?: number;
38
+ /** Absolute wall-clock deadline shared by connect, hello, retry, and request work. */
39
+ deadline?: number;
40
+ reconnectAttempts?: number;
41
+ reconnectBackoffMs?: number;
42
+ /**
43
+ * Per-attempt ceiling for the exponential reconnect backoff. A long reconnect
44
+ * budget must keep probing frequently instead of sleeping for tens of seconds
45
+ * on its last attempts. Defaults to 2s.
46
+ */
47
+ reconnectMaxBackoffMs?: number;
48
+ }
49
+ export interface SdkRequestOptions {
50
+ timeoutMs?: number;
51
+ idempotencyKey?: string;
52
+ confirm?: boolean;
53
+ }
54
+ export type SdkFrame = Record<string, unknown>;
55
+ /** Request identity retained after an uncertain send for lifecycle reconciliation. */
56
+ export interface SdkSentRecord {
57
+ readonly id: string;
58
+ readonly operation?: string;
59
+ readonly idempotencyKey?: string;
60
+ readonly fingerprint: string;
61
+ }
62
+ export type SdkFrameHandler = (frame: SdkFrame) => void;
63
+ export type SdkReconnectHandler = () => void;
64
+ export type SdkReconnectFailedHandler = (error: SdkClientError) => void;
65
+ /**
66
+ * Transport facts attached to a request timeout before an outcome is known.
67
+ * A timeout after send is surfaced as `uncertain_after_send` with an
68
+ * {@link SdkSentRecord} in its details.
69
+ */
70
+ export interface SdkRequestTimeoutDetails {
71
+ requestId: string;
72
+ requestSent: boolean;
73
+ }
74
+ /** A transport-only v3 SDK WebSocket client with no host or session authority. */
75
+ export declare class SdkClient {
76
+ #private;
77
+ connectionId?: string;
78
+ constructor(url: string, token: string, options?: SdkClientOptions);
79
+ static connect(url: string, token: string, options?: SdkClientOptions): Promise<SdkClient>;
80
+ connect(): Promise<void>;
81
+ /** Resolves once the current WebSocket has received its server hello frame. */
82
+ awaitHello(): Promise<void>;
83
+ onFrame(handler: SdkFrameHandler): () => void;
84
+ onReconnect(handler: SdkReconnectHandler): () => void;
85
+ onReconnectFailed(handler: SdkReconnectFailedHandler): () => void;
86
+ send(frame: SdkFrame): void;
87
+ request(frame: SdkFrame, timeout?: number | {
88
+ timeoutMs?: number;
89
+ idempotencyKey?: string;
90
+ }): Promise<SdkFrame>;
91
+ close(): Promise<void>;
92
+ control(operation: string, input?: Record<string, unknown>, options?: SdkRequestOptions): Promise<unknown>;
93
+ query(query: string, input?: Record<string, unknown>, cursor?: string, options?: SdkRequestOptions): Promise<unknown>;
94
+ global(operation: string, input?: Record<string, unknown>, options?: SdkRequestOptions): Promise<unknown>;
95
+ getSentRecord(id: string): SdkSentRecord | undefined;
96
+ lookupLifecycle(record: SdkSentRecord, timeoutMs?: number): Promise<unknown>;
97
+ }
@@ -7,8 +7,6 @@ export interface ControlRequest {
7
7
  expectedRevision?: string;
8
8
  idempotencyKey?: string;
9
9
  confirm?: boolean;
10
- /** Top-level elevation claim selector, preserved from the control frame. */
11
- elevationRequestId?: string;
12
10
  }
13
11
  export type ControlErrorCode = string;
14
12
  export interface ControlError {
@@ -32,11 +30,6 @@ export declare class TypedControlError extends Error {
32
30
  export declare class BusyError extends TypedControlError {
33
31
  constructor(message?: string);
34
32
  }
35
- /**
36
- * Build the typed control request from a wire frame. Every runtime transport
37
- * mapper uses this helper so the top-level elevation claim selector cannot
38
- * drift between callsites.
39
- */
40
33
  export declare function controlRequestFromFrame(frame: Record<string, unknown>): ControlRequest;
41
34
  /** Dispatches a registry-defined per-session control operation. */
42
35
  export declare function dispatchControl(surface: ControlSurface, registryRow: Operation | undefined, request: ControlRequest): Promise<ControlResponse>;
@@ -1,2 +1,2 @@
1
1
  export { BusyError, type ControlError, type ControlErrorCode, type ControlRequest, type ControlResponse, controlRequestFromFrame, dispatchControl, TypedControlError, } from "./dispatch";
2
- export type { ControlInput, ControlSurface, ControlValue } from "./operations";
2
+ export type { AbortScope, ControlInput, ControlSurface, ControlValue } from "./operations";
@@ -1,19 +1,32 @@
1
1
  export type ControlValue = unknown;
2
+ export type AbortMode = "turn" | "terminal";
3
+ export type AbortScope = "turn" | "owned";
4
+ /**
5
+ * Terminal-mode C04 `turn.abort` input. `scope` selects whether exact causal
6
+ * owned work (background Bash/task jobs, detached subagents) is also stopped
7
+ * (`"owned"`) or left running so its completion can resume the root worker
8
+ * (`"turn"`, the default).
9
+ */
10
+ export interface TerminalAbortInput {
11
+ mode: "terminal";
12
+ scope?: AbortScope;
13
+ }
2
14
  export type ControlInput = Record<string, unknown>;
3
15
  /**
4
16
  * Narrow host contract used by control dispatch. Implementations adapt an
5
17
  * AgentSession and its controllers without exposing those concrete types here.
6
18
  */
7
19
  export interface ControlSurface {
8
- authorizeElevationClaim?(sdkId: string, input: ControlInput, capability: string): boolean;
9
20
  prompt(text: string, images?: ControlValue, clientRef?: string): Promise<ControlValue> | ControlValue;
10
- steer(text: string): Promise<ControlValue> | ControlValue;
21
+ steer(text: string, clientRef?: string): Promise<ControlValue> | ControlValue;
11
22
  followUp(text: string): Promise<ControlValue> | ControlValue;
12
23
  abort(): Promise<ControlValue> | ControlValue;
24
+ /** Terminal abort: stop the current root turn (and optionally exact owned work). */
25
+ abortTerminal?(input: TerminalAbortInput, idempotencyKey?: string): Promise<ControlValue> | ControlValue;
13
26
  abortAndPrompt(text: string): Promise<ControlValue> | ControlValue;
14
27
  answerAsk(id: string, answer: ControlValue): Promise<ControlValue> | ControlValue;
15
- answerGate(id: string, response: ControlValue, expectedSessionId?: string, idempotencyKey?: string, elevationRequestId?: string): Promise<ControlValue> | ControlValue;
16
- approvePlan(id: string, choice: ControlValue, expectedSessionId?: string, elevationRequestId?: string): Promise<ControlValue> | ControlValue;
28
+ answerGate(id: string, response: ControlValue, expectedSessionId?: string, idempotencyKey?: string): Promise<ControlValue> | ControlValue;
29
+ approvePlan(id: string, choice: ControlValue, expectedSessionId?: string): Promise<ControlValue> | ControlValue;
17
30
  invokeSkill(name: string, args: ControlValue, clientRef?: string): Promise<ControlValue> | ControlValue;
18
31
  setPlanMode(on: boolean): Promise<ControlValue> | ControlValue;
19
32
  operateGoal(op: string, objective?: string): Promise<ControlValue> | ControlValue;
@@ -34,7 +47,7 @@ export interface ControlSurface {
34
47
  newSession(): Promise<ControlValue> | ControlValue;
35
48
  forkSession(): Promise<ControlValue> | ControlValue;
36
49
  resumeSession(id: string): Promise<ControlValue> | ControlValue;
37
- closeSession(): Promise<ControlValue> | ControlValue;
50
+ closeSession(capability?: string): Promise<ControlValue> | ControlValue;
38
51
  switchSession(id: string): Promise<ControlValue> | ControlValue;
39
52
  branchSession(entryId: string): Promise<ControlValue> | ControlValue;
40
53
  renameSession(name: string): Promise<ControlValue> | ControlValue;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Private field carried only on the Broker's endpoint close request.
3
+ *
4
+ * The value is the lifecycle effect marker bound to the serving process. It is
5
+ * never published in endpoint discovery or lifecycle service results; callers
6
+ * that do not hold the Broker's indexed lifecycle record cannot satisfy this
7
+ * gate.
8
+ */
9
+ export declare const BROKER_RUNTIME_CLOSE_CAPABILITY_FIELD = "__gjcBrokerCloseCapability";
10
+ export declare function brokerRuntimeCloseCapability(input: unknown): string | undefined;
11
+ /** Remove the private close capability before a request is exposed to diagnostics. */
12
+ export declare function redactBrokerRuntimeCloseCapability(frame: Record<string, unknown>): Record<string, unknown>;
13
+ /**
14
+ * Runtime-local authority check for the Broker-only graceful close executor.
15
+ *
16
+ * A lifecycle child receives GJC_LIFECYCLE_REQUEST_ID from the Broker launch
17
+ * environment. Generic SDK requests never receive that private marker.
18
+ */
19
+ export declare function hasBrokerRuntimeCloseCapability(input: unknown): boolean;
@@ -34,12 +34,21 @@ export type SessionActivationGate = (input: {
34
34
  export interface SessionSdkHostOptions extends HostEndpointAdapters {
35
35
  control?: (connectionId: string, frame: SdkFrame) => unknown | Promise<unknown>;
36
36
  query?: (connectionId: string, frame: SdkFrame) => unknown | Promise<unknown>;
37
+ /** Test/lifecycle seam invoked synchronously before fire-and-forget dispatch. */
38
+ onFrameAdmitted?: (connectionId: string, frame: SdkFrame) => void;
37
39
  /** Best-effort diagnostic observation of accepted control/query frames. */
38
40
  onRequest?: SdkRequestObserver;
39
41
  /** Runs before a control response is sent; identity transitions use sendTerminal. */
40
- beforeControlResponse?: (connectionId: string, request: SdkFrame, response: SdkFrame, sendTerminal: () => Promise<void>) => void | Promise<void>;
42
+ beforeControlResponse?: (connectionId: string, request: SdkFrame, response: SdkFrame, sendTerminal: () => Promise<unknown>) => void | Promise<void>;
41
43
  /** Runs only after a successful control response has been sent to the client. */
42
44
  afterControlResponse?: (connectionId: string, request: SdkFrame, response: SdkFrame) => void | Promise<void>;
45
+ /**
46
+ * Classifies the awaited control-response write exactly once: `written`
47
+ * (sent), `rejected` (the write threw), or `dropped` (the send adapter
48
+ * deliberately skipped delivery). `afterControlResponse` runs only
49
+ * on `written`. Used to persist monotonic response-state transitions.
50
+ */
51
+ onControlResponseDelivery?: (connectionId: string, request: SdkFrame, response: SdkFrame, outcome: "written" | "rejected" | "dropped") => void | Promise<void>;
43
52
  installProviderDefinitions?: (capability: string, definitions: unknown) => void;
44
53
  onProviderDefinitionsRemoved?: (capability: string) => void;
45
54
  onReverseCancel?: (requestId: string, reason: "provider_disconnected" | "lease_released") => void;
@@ -54,6 +63,11 @@ export interface SessionSdkHostOptions extends HostEndpointAdapters {
54
63
  */
55
64
  activationGate?: SessionActivationGate;
56
65
  }
66
+ /** Shared by the replay filter and transport live broadcasts: a connection
67
+ * must see the same capability-gated event kinds on both legs, or live and
68
+ * replay delivery diverge for the same subscriber. */
69
+ export declare const TOOL_ACTIVITY_CAPABILITY = "tool_activity_v2";
70
+ export declare const CAP_GATED_FRAME_KINDS: ReadonlySet<string>;
57
71
  /** SDK hosting is independent of notification configuration. Only root sessions host an endpoint. */
58
72
  export declare function shouldHostSdk(_settings: unknown, isTopLevel: boolean, env?: NodeJS.ProcessEnv): boolean;
59
73
  /** Adapter-based session host; bus wiring owns NotificationServer creation and transport framing. */
@@ -50,6 +50,11 @@ export interface SessionSurface {
50
50
  commandId?: string;
51
51
  turnId?: string;
52
52
  }): unknown | Promise<unknown>;
53
+ getSteerStatus?(selector: {
54
+ commandId?: string;
55
+ turnId?: string;
56
+ clientRef?: string;
57
+ }): unknown | Promise<unknown>;
53
58
  /** Q27 effective model-profile catalog from the live session registry. */
54
59
  getModelProfiles?(): unknown[] | Promise<unknown[]>;
55
60
  /**
@@ -25,7 +25,7 @@ export interface ProviderLease {
25
25
  export interface ReverseLeaseOptions {
26
26
  now?: () => number;
27
27
  leaseTtlMs?: number;
28
- sendFrame: (connectionId: string, frame: SdkFrame) => void | Promise<void>;
28
+ sendFrame: (connectionId: string, frame: SdkFrame) => unknown;
29
29
  installDefinitions?: (capability: string, definitions: unknown) => void;
30
30
  onCancel?: (requestId: string, reason: "provider_disconnected" | "lease_released") => void;
31
31
  onDefinitionsRemoved?: (capability: string) => void;