@gajae-code/coding-agent 0.13.2 → 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 (610) hide show
  1. package/CHANGELOG.md +215 -8
  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 +10 -1
  35. package/dist/types/config/models-config-schema.d.ts +2 -0
  36. package/dist/types/config/settings-schema.d.ts +73 -9
  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 +2 -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/dynamic-theme-text.d.ts +9 -0
  87. package/dist/types/modes/components/gajae-pet-widget.d.ts +6 -28
  88. package/dist/types/modes/components/irc-sidebar.d.ts +1 -0
  89. package/dist/types/modes/components/iterm-pet-transport.d.ts +122 -0
  90. package/dist/types/modes/components/oauth-selector.d.ts +10 -4
  91. package/dist/types/modes/components/pet-capability.d.ts +7 -21
  92. package/dist/types/modes/components/settings-selector.d.ts +5 -0
  93. package/dist/types/modes/components/status-line/gh.d.ts +6 -2
  94. package/dist/types/modes/controllers/extension-ui-controller.d.ts +1 -1
  95. package/dist/types/modes/controllers/selector-controller.d.ts +7 -8
  96. package/dist/types/modes/controllers/stt-controller.d.ts +1 -1
  97. package/dist/types/modes/interactive-mode.d.ts +1 -0
  98. package/dist/types/modes/theme/defaults/index.d.ts +118 -0
  99. package/dist/types/modes/types.d.ts +1 -0
  100. package/dist/types/modes/utils/injected-user-submission.d.ts +10 -0
  101. package/dist/types/runtime-mcp/config.d.ts +9 -0
  102. package/dist/types/runtime-mcp/manager.d.ts +26 -1
  103. package/dist/types/runtime-mcp/oauth-discovery.d.ts +4 -0
  104. package/dist/types/runtime-mcp/oauth-flow.d.ts +24 -1
  105. package/dist/types/runtime-mcp/pool-key.d.ts +2 -0
  106. package/dist/types/runtime-mcp/protocol.d.ts +278 -0
  107. package/dist/types/runtime-mcp/scope-config.d.ts +29 -0
  108. package/dist/types/runtime-mcp/tool-bridge.d.ts +15 -13
  109. package/dist/types/runtime-mcp/transports/http.d.ts +9 -0
  110. package/dist/types/runtime-mcp/types.d.ts +102 -10
  111. package/dist/types/sdk/acp/adapter.d.ts +26 -5
  112. package/dist/types/sdk/broker/broker.d.ts +3 -55
  113. package/dist/types/sdk/broker/lifecycle.d.ts +18 -12
  114. package/dist/types/sdk/broker/session-index.d.ts +14 -5
  115. package/dist/types/sdk/broker/startup-failure.d.ts +16 -1
  116. package/dist/types/sdk/bus/chat-daemon-control.d.ts +51 -1
  117. package/dist/types/sdk/bus/chat-daemon-runtime.d.ts +4 -41
  118. package/dist/types/sdk/bus/config.d.ts +11 -0
  119. package/dist/types/sdk/bus/conversation-store.d.ts +0 -1
  120. package/dist/types/sdk/bus/daemon-paths.d.ts +6 -0
  121. package/dist/types/sdk/bus/discord-conversation.d.ts +2 -0
  122. package/dist/types/sdk/bus/discord-daemon.d.ts +17 -12
  123. package/dist/types/sdk/bus/existing-thread-readiness.d.ts +4 -34
  124. package/dist/types/sdk/bus/inbound-reaction-ordering.d.ts +61 -0
  125. package/dist/types/sdk/bus/index.d.ts +85 -99
  126. package/dist/types/sdk/bus/kind-aware-reconciliation.d.ts +29 -7
  127. package/dist/types/sdk/bus/managed-daemon.d.ts +2 -32
  128. package/dist/types/sdk/bus/notification-service.d.ts +52 -0
  129. package/dist/types/sdk/bus/operator-runtime.d.ts +1 -1
  130. package/dist/types/sdk/bus/prompt-reconciliation.d.ts +16 -5
  131. package/dist/types/sdk/bus/reconciliation-store.d.ts +113 -5
  132. package/dist/types/sdk/bus/session-control.d.ts +25 -1
  133. package/dist/types/sdk/bus/slack-conversation.d.ts +4 -0
  134. package/dist/types/sdk/bus/slack-daemon.d.ts +9 -17
  135. package/dist/types/sdk/bus/slack-live-provider.d.ts +3 -1
  136. package/dist/types/sdk/bus/slack-provider.d.ts +4 -0
  137. package/dist/types/sdk/bus/slack-thread-binding.d.ts +6 -40
  138. package/dist/types/sdk/bus/telegram-adoption-intent.d.ts +30 -104
  139. package/dist/types/sdk/bus/telegram-daemon-cli.d.ts +10 -0
  140. package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +262 -19
  141. package/dist/types/sdk/bus/telegram-daemon-orphan-reap.d.ts +125 -0
  142. package/dist/types/sdk/bus/telegram-daemon-owner-registry.d.ts +22 -0
  143. package/dist/types/sdk/bus/telegram-daemon.d.ts +119 -310
  144. package/dist/types/sdk/bus/telegram-reference.d.ts +1 -47
  145. package/dist/types/sdk/bus/threaded-render.d.ts +1 -0
  146. package/dist/types/sdk/bus/topic-registry.d.ts +33 -17
  147. package/dist/types/sdk/cli/rows.d.ts +2 -11
  148. package/dist/types/sdk/cli/session-cli.d.ts +15 -25
  149. package/dist/types/sdk/client/client.d.ts +97 -1
  150. package/dist/types/sdk/host/control/dispatch.d.ts +0 -7
  151. package/dist/types/sdk/host/control/index.d.ts +1 -1
  152. package/dist/types/sdk/host/control/operations.d.ts +18 -5
  153. package/dist/types/sdk/host/control/runtime-gate.d.ts +19 -0
  154. package/dist/types/sdk/host/host.d.ts +15 -1
  155. package/dist/types/sdk/host/query/handlers.d.ts +5 -0
  156. package/dist/types/sdk/host/reverse-leases.d.ts +1 -1
  157. package/dist/types/sdk/host/session-runtime.d.ts +127 -7
  158. package/dist/types/sdk/host/types.d.ts +1 -1
  159. package/dist/types/sdk/host/websocket-transport.d.ts +1 -1
  160. package/dist/types/sdk/index.d.ts +2 -1
  161. package/dist/types/sdk/lifecycle/broker-client.d.ts +8 -0
  162. package/dist/types/sdk/lifecycle/client.d.ts +59 -0
  163. package/dist/types/sdk/lifecycle/index.d.ts +3 -0
  164. package/dist/types/sdk/lifecycle/service.d.ts +232 -0
  165. package/dist/types/sdk/mcp/server.d.ts +9 -6
  166. package/dist/types/sdk/prompt-deadline-lease.d.ts +43 -0
  167. package/dist/types/sdk/prompt-deadline-manager.d.ts +28 -0
  168. package/dist/types/sdk/prompt-status.d.ts +10 -3
  169. package/dist/types/sdk/protocol/operation-registry.d.ts +5 -0
  170. package/dist/types/sdk/receipt-state.d.ts +17 -0
  171. package/dist/types/sdk/reconciliation-extensions.d.ts +2 -0
  172. package/dist/types/sdk/router/index.d.ts +1 -0
  173. package/dist/types/sdk/router/session-router.d.ts +152 -0
  174. package/dist/types/sdk/session-list.d.ts +22 -0
  175. package/dist/types/sdk/session-reconnect.d.ts +43 -1
  176. package/dist/types/sdk/session.d.ts +34 -1
  177. package/dist/types/sdk/transport/serve-cli.d.ts +1 -4
  178. package/dist/types/session/account-inventory.d.ts +86 -0
  179. package/dist/types/session/agent-session.d.ts +145 -6
  180. package/dist/types/session/agent-storage.d.ts +10 -0
  181. package/dist/types/session/coordinator-tool-label.d.ts +28 -0
  182. package/dist/types/session/internal/managed-session-storage.d.ts +23 -4
  183. package/dist/types/session/messages.d.ts +1 -1
  184. package/dist/types/session/secure-token-file.d.ts +3 -0
  185. package/dist/types/session/session-manager.d.ts +47 -1
  186. package/dist/types/session/startup-auth-config.d.ts +44 -0
  187. package/dist/types/session/terminal-abort.d.ts +378 -0
  188. package/dist/types/session/yield-queue.d.ts +7 -0
  189. package/dist/types/session-import/claude.d.ts +26 -0
  190. package/dist/types/session-import/codex.d.ts +88 -0
  191. package/dist/types/session-import/command.d.ts +35 -0
  192. package/dist/types/session-import/detect.d.ts +22 -0
  193. package/dist/types/session-import/index.d.ts +7 -0
  194. package/dist/types/session-import/provider-codex.d.ts +22 -0
  195. package/dist/types/session-import/provider-service.d.ts +38 -0
  196. package/dist/types/session-import/redact.d.ts +23 -0
  197. package/dist/types/session-import/service.d.ts +47 -0
  198. package/dist/types/session-import/types.d.ts +120 -0
  199. package/dist/types/setup/paseo/check.d.ts +16 -0
  200. package/dist/types/setup/paseo/install-saga.d.ts +115 -0
  201. package/dist/types/setup/paseo/json-publisher.d.ts +76 -0
  202. package/dist/types/setup/paseo/orchestration-preferences.d.ts +24 -0
  203. package/dist/types/setup/paseo/paseo-ownership.d.ts +87 -0
  204. package/dist/types/setup/paseo/paseo-setup.d.ts +29 -0
  205. package/dist/types/setup/paseo/provider-config.d.ts +35 -0
  206. package/dist/types/setup/paseo/remove.d.ts +14 -0
  207. package/dist/types/setup/paseo/result-types.d.ts +59 -0
  208. package/dist/types/setup/paseo/setup-deps.d.ts +73 -0
  209. package/dist/types/setup/paseo/skills-bridge.d.ts +44 -0
  210. package/dist/types/skill-state/active-state.d.ts +5 -1
  211. package/dist/types/slash-commands/acp-builtins.d.ts +5 -1
  212. package/dist/types/slash-commands/builtin-registry.d.ts +2 -0
  213. package/dist/types/slash-commands/helpers/credential-switch.d.ts +12 -0
  214. package/dist/types/slash-commands/helpers/usage-report.d.ts +5 -6
  215. package/dist/types/slash-commands/types.d.ts +7 -1
  216. package/dist/types/task/executor.d.ts +10 -0
  217. package/dist/types/task/index.d.ts +3 -1
  218. package/dist/types/tools/ask-answer-registry.d.ts +6 -3
  219. package/dist/types/tools/bash-sleep-advisory.d.ts +14 -0
  220. package/dist/types/tools/bash.d.ts +2 -6
  221. package/dist/types/tools/browser/attach.d.ts +11 -0
  222. package/dist/types/tools/browser/launch.d.ts +20 -0
  223. package/dist/types/tools/browser/profile-discovery.d.ts +6 -0
  224. package/dist/types/tools/browser/render.d.ts +1 -0
  225. package/dist/types/tools/browser.d.ts +3 -1
  226. package/dist/types/tools/image-gen.d.ts +10 -2
  227. package/dist/types/tools/index.d.ts +8 -0
  228. package/dist/types/tools/monitor.d.ts +1 -1
  229. package/dist/types/tools/skill-discovery.d.ts +8 -1
  230. package/dist/types/tools/subagent.d.ts +2 -0
  231. package/dist/types/tools/ultragoal-ask-guard.d.ts +2 -2
  232. package/dist/types/utils/herdr-pane.d.ts +76 -0
  233. package/package.json +19 -9
  234. package/scripts/build-binary.ts +2 -1
  235. package/scripts/build-sdk-package-smoke.ts +2 -13
  236. package/scripts/capture-sticky-viewport-showcase.ts +0 -1
  237. package/scripts/compile-args.ts +2 -0
  238. package/scripts/generate-sdk-adapter-parity-manifest.ts +31 -16
  239. package/scripts/generate-sdk-operation-inventory.ts +28 -0
  240. package/scripts/generate-telegram-baseline-manifest.ts +1 -0
  241. package/scripts/generate-tool-catalog.ts +6 -4
  242. package/scripts/verify-gjc-sdk-canonicalization.ts +5 -39
  243. package/src/async/job-manager.ts +352 -17
  244. package/src/async/support.ts +25 -0
  245. package/src/autoresearch/dashboard.ts +28 -13
  246. package/src/capability/index.ts +3 -1
  247. package/src/capability/mcp.ts +6 -0
  248. package/src/capability/types.ts +6 -0
  249. package/src/cli/accounts-cli.ts +395 -0
  250. package/src/cli/args.ts +23 -0
  251. package/src/cli/auth-broker-cli.ts +136 -66
  252. package/src/cli/auth-gateway-cli.ts +94 -70
  253. package/src/cli/config-cli.ts +27 -2
  254. package/src/cli/crash-cli.ts +78 -0
  255. package/src/cli/customize-doctor.ts +1605 -0
  256. package/src/cli/daemon-cli.ts +12 -3
  257. package/src/cli/fast-help.ts +1 -0
  258. package/src/cli/mcp-cli.ts +128 -60
  259. package/src/cli/notify-cli.ts +8 -14
  260. package/src/cli/root-flags.ts +8 -0
  261. package/src/cli/setup-cli.ts +145 -0
  262. package/src/cli/skills-cli.ts +38 -2
  263. package/src/cli/update-cli.ts +167 -12
  264. package/src/cli.ts +4 -0
  265. package/src/commands/accounts.ts +71 -0
  266. package/src/commands/crash.ts +35 -0
  267. package/src/commands/customize.ts +84 -0
  268. package/src/commands/daemon.ts +2 -2
  269. package/src/commands/deep-interview.ts +2 -0
  270. package/src/commands/launch.ts +1 -0
  271. package/src/commands/mcp.ts +12 -7
  272. package/src/commands/ralplan.ts +2 -0
  273. package/src/commands/sdk.ts +65 -32
  274. package/src/commands/setup.ts +5 -0
  275. package/src/commands/skills.ts +14 -4
  276. package/src/commands/ultragoal.ts +10 -1
  277. package/src/commands/update.ts +26 -15
  278. package/src/config/atomic-yaml-patch-worker.ts +57 -0
  279. package/src/config/atomic-yaml-patch.ts +769 -29
  280. package/src/config/config-schema-version.ts +10 -0
  281. package/src/config/file-lock.ts +70 -1
  282. package/src/config/mcp-schema.json +52 -14
  283. package/src/config/model-profile-activation.ts +23 -2
  284. package/src/config/model-profiles.ts +88 -21
  285. package/src/config/model-registry.ts +147 -21
  286. package/src/config/models-config-schema.ts +1 -1
  287. package/src/config/settings-schema.ts +77 -7
  288. package/src/config/settings.ts +4038 -199
  289. package/src/config/skill-settings-defaults.ts +41 -3
  290. package/src/config/task-delegation.ts +87 -0
  291. package/src/config/update-channel.ts +23 -0
  292. package/src/coordinator-mcp/server.ts +377 -308
  293. package/src/crash/index-store.ts +723 -0
  294. package/src/crash/nudge.ts +89 -0
  295. package/src/crash/record-loader.ts +149 -0
  296. package/src/crash/report.ts +551 -0
  297. package/src/crash/sanitize.ts +129 -0
  298. package/src/cursor.ts +36 -10
  299. package/src/customization/import.ts +946 -0
  300. package/src/customization/index.ts +4 -0
  301. package/src/customization/inventory.ts +335 -0
  302. package/src/customization/mutations.ts +141 -0
  303. package/src/customization/types.ts +223 -0
  304. package/src/daemon/control-types.ts +8 -1
  305. package/src/daemon/operator-contract.ts +6 -6
  306. package/src/defaults/gjc/extensions/grok-cli-vendor/src/models/catalog.ts +31 -6
  307. package/src/defaults/gjc/skills/deep-interview/SKILL.md +11 -22
  308. package/src/defaults/gjc/skills/ralplan/SKILL.md +36 -23
  309. package/src/defaults/gjc/skills/ultragoal/SKILL.md +16 -0
  310. package/src/discovery/claude-hooks.ts +38 -0
  311. package/src/discovery/claude.ts +142 -209
  312. package/src/discovery/codex-hooks.ts +38 -0
  313. package/src/discovery/codex.ts +132 -198
  314. package/src/discovery/helpers.ts +8 -1
  315. package/src/discovery/index.ts +2 -0
  316. package/src/discovery/mcp-compat.ts +234 -0
  317. package/src/discovery/mcp-json.ts +6 -0
  318. package/src/edit/renderer.ts +40 -0
  319. package/src/edit/streaming.ts +4 -2
  320. package/src/exec/bash-executor.ts +24 -20
  321. package/src/export/html/index.ts +51 -2
  322. package/src/extensibility/extensions/loader.ts +9 -1
  323. package/src/extensibility/extensions/runner.ts +17 -4
  324. package/src/extensibility/extensions/types.ts +31 -6
  325. package/src/extensibility/gjc-plugins/constrained-hooks.ts +33 -0
  326. package/src/extensibility/gjc-plugins/installer.ts +9 -5
  327. package/src/extensibility/gjc-plugins/observability.ts +8 -2
  328. package/src/extensibility/gjc-plugins/registry.ts +13 -2
  329. package/src/extensibility/gjc-plugins/runtime-adapters.ts +3 -1
  330. package/src/extensibility/gjc-plugins/schema.ts +222 -39
  331. package/src/extensibility/hooks/loader.ts +154 -10
  332. package/src/extensibility/runtime-skill-discovery.ts +257 -60
  333. package/src/extensibility/skill-management.ts +368 -0
  334. package/src/extensibility/skills.ts +52 -16
  335. package/src/gjc-runtime/deep-interview-runtime.ts +45 -61
  336. package/src/gjc-runtime/launch-worktree.ts +56 -2
  337. package/src/gjc-runtime/linux-proc.ts +7 -1
  338. package/src/gjc-runtime/ralplan-runtime.ts +100 -164
  339. package/src/gjc-runtime/session-state-lock.ts +992 -0
  340. package/src/gjc-runtime/session-state-sidecar.ts +644 -142
  341. package/src/gjc-runtime/state-writer.ts +39 -14
  342. package/src/gjc-runtime/tmux-owner-isolation.ts +5 -4
  343. package/src/gjc-runtime/ultragoal-guard.ts +11 -4
  344. package/src/gjc-runtime/ultragoal-runtime.ts +44 -41
  345. package/src/gjc-runtime/workflow-settings.ts +596 -0
  346. package/src/goals/tools/goal-tool.ts +6 -1
  347. package/src/hooks/events.ts +291 -0
  348. package/src/hooks/native-skill-hook.ts +4 -0
  349. package/src/hooks/normalize.ts +369 -0
  350. package/src/hooks/skill-state.ts +165 -46
  351. package/src/internal-urls/docs-index.generated.ts +41 -32
  352. package/src/main.ts +36 -5
  353. package/src/migrate/mcp-mapper.ts +25 -2
  354. package/src/modes/acp/abort-scope.ts +29 -0
  355. package/src/modes/acp/acp-agent.ts +423 -98
  356. package/src/modes/components/assistant-message.ts +6 -1
  357. package/src/modes/components/chrome.ts +4 -3
  358. package/src/modes/components/customization/customization-dashboard.ts +443 -0
  359. package/src/modes/components/customization/import-wizard.ts +372 -0
  360. package/src/modes/components/customization/index.ts +1 -0
  361. package/src/modes/components/dynamic-theme-text.ts +22 -0
  362. package/src/modes/components/gajae-pet-widget.ts +607 -193
  363. package/src/modes/components/irc-sidebar.ts +11 -0
  364. package/src/modes/components/iterm-pet-transport.ts +585 -0
  365. package/src/modes/components/model-selector.ts +1 -6
  366. package/src/modes/components/oauth-selector.ts +277 -86
  367. package/src/modes/components/pet-capability.ts +35 -31
  368. package/src/modes/components/settings-selector.ts +29 -5
  369. package/src/modes/components/status-line/gh.ts +45 -1
  370. package/src/modes/components/status-line/segments.ts +19 -4
  371. package/src/modes/components/tool-status-header.ts +13 -3
  372. package/src/modes/controllers/command-controller.ts +20 -8
  373. package/src/modes/controllers/extension-ui-controller.ts +56 -257
  374. package/src/modes/controllers/input-controller.ts +10 -0
  375. package/src/modes/controllers/runtime-mcp-command-controller.ts +16 -3
  376. package/src/modes/controllers/selector-controller.ts +238 -77
  377. package/src/modes/controllers/stt-controller.ts +3 -3
  378. package/src/modes/interactive-mode.ts +88 -16
  379. package/src/modes/print-mode.ts +35 -6
  380. package/src/modes/runtime-init.ts +21 -68
  381. package/src/modes/theme/defaults/index.ts +2 -0
  382. package/src/modes/theme/defaults/ouroboros.json +118 -0
  383. package/src/modes/types.ts +1 -0
  384. package/src/modes/utils/injected-user-submission.ts +25 -0
  385. package/src/modes/utils/terminal-bell.ts +15 -1
  386. package/src/prompts/agent-fragments/ralplan-persistence.md +1 -1
  387. package/src/prompts/agent-fragments/restricted-bash.md +1 -1
  388. package/src/prompts/agents/critic.md +1 -1
  389. package/src/prompts/system/rlm-research.md +1 -1
  390. package/src/prompts/system/system-prompt.md +0 -2
  391. package/src/prompts/tools/bash.md +7 -1
  392. package/src/prompts/tools/browser.md +1 -1
  393. package/src/prompts/tools/cron.md +6 -6
  394. package/src/prompts/tools/read.md +0 -2
  395. package/src/prompts/tools/skill-discovery.md +4 -2
  396. package/src/runtime-mcp/client.ts +427 -23
  397. package/src/runtime-mcp/config.ts +37 -5
  398. package/src/runtime-mcp/manager-pool.test.ts +56 -0
  399. package/src/runtime-mcp/manager.ts +52 -2
  400. package/src/runtime-mcp/oauth-discovery.ts +13 -0
  401. package/src/runtime-mcp/oauth-flow.ts +46 -1
  402. package/src/runtime-mcp/pool-key.ts +5 -1
  403. package/src/runtime-mcp/pool.test.ts +9 -0
  404. package/src/runtime-mcp/protocol.test.ts +353 -0
  405. package/src/runtime-mcp/protocol.ts +624 -0
  406. package/src/runtime-mcp/scope-config.ts +78 -0
  407. package/src/runtime-mcp/tool-bridge.ts +44 -10
  408. package/src/runtime-mcp/transports/http.ts +84 -13
  409. package/src/runtime-mcp/types.ts +123 -12
  410. package/src/sdk/acp/adapter.ts +328 -97
  411. package/src/sdk/broker/broker.ts +160 -741
  412. package/src/sdk/broker/ensure.ts +9 -1
  413. package/src/sdk/broker/lifecycle.ts +510 -116
  414. package/src/sdk/broker/operation-receipt-ledger.ts +11 -2
  415. package/src/sdk/broker/process-incarnation.ts +19 -0
  416. package/src/sdk/broker/session-index.ts +516 -117
  417. package/src/sdk/broker/startup-failure.ts +28 -5
  418. package/src/sdk/broker/transport.ts +1 -13
  419. package/src/sdk/bus/chat-daemon-cli.ts +4 -2
  420. package/src/sdk/bus/chat-daemon-control.ts +67 -6
  421. package/src/sdk/bus/chat-daemon-runtime.ts +183 -859
  422. package/src/sdk/bus/config.ts +13 -0
  423. package/src/sdk/bus/conversation-store.ts +59 -171
  424. package/src/sdk/bus/daemon-paths.ts +20 -0
  425. package/src/sdk/bus/discord-conversation.ts +2 -0
  426. package/src/sdk/bus/discord-daemon.ts +524 -126
  427. package/src/sdk/bus/discord-live-provider.ts +206 -79
  428. package/src/sdk/bus/existing-thread-readiness.ts +4 -97
  429. package/src/sdk/bus/inbound-reaction-ordering.ts +122 -0
  430. package/src/sdk/bus/index.ts +2480 -456
  431. package/src/sdk/bus/kind-aware-reconciliation.ts +204 -34
  432. package/src/sdk/bus/lifecycle-commands.ts +2 -2
  433. package/src/sdk/bus/managed-daemon.ts +2 -145
  434. package/src/sdk/bus/notification-service.ts +196 -0
  435. package/src/sdk/bus/operator-runtime.ts +1 -1
  436. package/src/sdk/bus/prompt-reconciliation.ts +24 -15
  437. package/src/sdk/bus/reconciliation-store.ts +553 -24
  438. package/src/sdk/bus/session-control.ts +49 -3
  439. package/src/sdk/bus/slack-conversation.ts +4 -0
  440. package/src/sdk/bus/slack-daemon.ts +733 -134
  441. package/src/sdk/bus/slack-live-provider.ts +65 -15
  442. package/src/sdk/bus/slack-provider.ts +4 -0
  443. package/src/sdk/bus/slack-thread-binding.ts +9 -104
  444. package/src/sdk/bus/telegram-adoption-intent.ts +299 -209
  445. package/src/sdk/bus/telegram-daemon-cli.ts +194 -7
  446. package/src/sdk/bus/telegram-daemon-contract.ts +265 -19
  447. package/src/sdk/bus/telegram-daemon-control.ts +3 -13
  448. package/src/sdk/bus/telegram-daemon-orphan-reap.ts +498 -0
  449. package/src/sdk/bus/telegram-daemon-owner-registry.ts +176 -0
  450. package/src/sdk/bus/telegram-daemon.ts +2552 -2280
  451. package/src/sdk/bus/telegram-reference.ts +1 -226
  452. package/src/sdk/bus/telegram-setup.ts +2 -2
  453. package/src/sdk/bus/threaded-render.ts +1 -0
  454. package/src/sdk/bus/topic-registry.ts +279 -146
  455. package/src/sdk/cli/rows.ts +2 -35
  456. package/src/sdk/cli/session-cli.ts +776 -700
  457. package/src/sdk/client/client.ts +892 -1
  458. package/src/sdk/host/control/dispatch.ts +93 -58
  459. package/src/sdk/host/control/index.ts +1 -1
  460. package/src/sdk/host/control/operations.ts +18 -10
  461. package/src/sdk/host/control/runtime-gate.ts +40 -0
  462. package/src/sdk/host/host.ts +63 -12
  463. package/src/sdk/host/query/handlers.ts +66 -7
  464. package/src/sdk/host/reverse-leases.ts +2 -2
  465. package/src/sdk/host/sdk-surface-parity.test.ts +1 -1
  466. package/src/sdk/host/session-runtime.test.ts +2787 -34
  467. package/src/sdk/host/session-runtime.ts +1489 -101
  468. package/src/sdk/host/surface-policy.ts +12 -8
  469. package/src/sdk/host/types.ts +1 -1
  470. package/src/sdk/host/websocket-transport.lifecycle.test.ts +31 -59
  471. package/src/sdk/host/websocket-transport.ts +85 -50
  472. package/src/sdk/index.ts +2 -1
  473. package/src/sdk/lifecycle/broker-client.ts +53 -0
  474. package/src/sdk/lifecycle/client.ts +234 -0
  475. package/src/sdk/lifecycle/index.ts +3 -0
  476. package/src/sdk/{bus/recent-activity.ts → lifecycle/recent-sessions.ts} +5 -2
  477. package/src/sdk/lifecycle/service.ts +720 -0
  478. package/src/sdk/mcp/server.ts +226 -188
  479. package/src/sdk/prompt-deadline-lease.ts +55 -0
  480. package/src/sdk/prompt-deadline-manager.ts +148 -0
  481. package/src/sdk/prompt-status.ts +11 -3
  482. package/src/sdk/protocol/operation-inventory.generated.json +272 -129
  483. package/src/sdk/protocol/operation-registry.ts +71 -8
  484. package/src/sdk/receipt-state.ts +43 -0
  485. package/src/sdk/reconciliation-extensions.ts +14 -0
  486. package/src/sdk/router/index.ts +1 -0
  487. package/src/sdk/router/session-router.ts +1658 -0
  488. package/src/sdk/session-list.ts +93 -0
  489. package/src/sdk/session-reconnect.ts +45 -1
  490. package/src/sdk/session.ts +716 -120
  491. package/src/sdk/transport/serve-cli.ts +18 -34
  492. package/src/session/account-inventory.ts +603 -0
  493. package/src/session/agent-session.ts +2873 -559
  494. package/src/session/agent-storage.ts +35 -0
  495. package/src/session/blob-store.ts +32 -1
  496. package/src/session/coordinator-tool-label.ts +40 -0
  497. package/src/session/internal/managed-session-scope.ts +4 -0
  498. package/src/session/internal/managed-session-storage.ts +199 -31
  499. package/src/session/messages.ts +1 -1
  500. package/src/session/secure-token-file.ts +80 -0
  501. package/src/session/session-manager.ts +757 -57
  502. package/src/session/session-storage.ts +25 -16
  503. package/src/session/startup-auth-config.ts +297 -0
  504. package/src/session/terminal-abort.ts +1253 -0
  505. package/src/session/yield-queue.ts +57 -15
  506. package/src/session-import/claude.ts +334 -0
  507. package/src/session-import/codex.ts +1033 -0
  508. package/src/session-import/command.ts +77 -0
  509. package/src/session-import/detect.ts +133 -0
  510. package/src/session-import/index.ts +7 -0
  511. package/src/session-import/provider-codex.ts +327 -0
  512. package/src/session-import/provider-service.ts +457 -0
  513. package/src/session-import/redact.ts +128 -0
  514. package/src/session-import/service.ts +1264 -0
  515. package/src/session-import/types.ts +148 -0
  516. package/src/setup/paseo/check.ts +213 -0
  517. package/src/setup/paseo/install-saga.ts +293 -0
  518. package/src/setup/paseo/json-publisher.ts +263 -0
  519. package/src/setup/paseo/orchestration-preferences.ts +86 -0
  520. package/src/setup/paseo/paseo-ownership.ts +224 -0
  521. package/src/setup/paseo/paseo-setup.ts +253 -0
  522. package/src/setup/paseo/provider-config.ts +139 -0
  523. package/src/setup/paseo/remove.ts +183 -0
  524. package/src/setup/paseo/result-types.ts +79 -0
  525. package/src/setup/paseo/setup-deps.ts +175 -0
  526. package/src/setup/paseo/skills-bridge.ts +260 -0
  527. package/src/skill-state/active-state.ts +21 -11
  528. package/src/slash-commands/acp-builtins.ts +9 -1
  529. package/src/slash-commands/builtin-registry.ts +117 -19
  530. package/src/slash-commands/helpers/credential-switch.ts +143 -0
  531. package/src/slash-commands/helpers/mcp.ts +9 -3
  532. package/src/slash-commands/helpers/usage-report.ts +61 -56
  533. package/src/slash-commands/types.ts +7 -2
  534. package/src/task/executor.ts +30 -11
  535. package/src/task/index.ts +66 -7
  536. package/src/task/render.ts +23 -9
  537. package/src/tools/ask-answer-registry.ts +23 -7
  538. package/src/tools/ask.ts +8 -4
  539. package/src/tools/bash-sleep-advisory.ts +115 -0
  540. package/src/tools/bash.ts +98 -18
  541. package/src/tools/browser/attach.ts +71 -3
  542. package/src/tools/browser/launch.ts +86 -13
  543. package/src/tools/browser/profile-discovery.ts +57 -7
  544. package/src/tools/browser/render.ts +8 -1
  545. package/src/tools/browser.ts +130 -21
  546. package/src/tools/computer.enforcement.test.ts +1 -1
  547. package/src/tools/computer.ts +3 -2
  548. package/src/tools/cron.ts +12 -1
  549. package/src/tools/image-gen.ts +349 -142
  550. package/src/tools/index.ts +8 -0
  551. package/src/tools/job.ts +33 -6
  552. package/src/tools/monitor.ts +41 -2
  553. package/src/tools/skill-discovery.ts +21 -29
  554. package/src/tools/subagent.ts +142 -24
  555. package/src/tools/todo-contract.ts +55 -3
  556. package/src/tools/todo-write.ts +4 -3
  557. package/src/tools/tool-catalog.generated.ts +6 -6
  558. package/src/tools/ultragoal-ask-guard.ts +10 -3
  559. package/src/utils/herdr-pane.ts +345 -0
  560. package/src/utils/title-generator.ts +2 -0
  561. package/src/web/scrapers/index.ts +6 -4
  562. package/dist/types/cli/malloc-env-guard.test.d.ts +0 -1
  563. package/dist/types/defaults/gjc-defaults.test.d.ts +0 -1
  564. package/dist/types/memory-backend/lazy-loading.test.d.ts +0 -1
  565. package/dist/types/runtime/boot-ordering.test.d.ts +0 -1
  566. package/dist/types/runtime/lazy-service.test.d.ts +0 -1
  567. package/dist/types/runtime/network-prewarm-service.test.d.ts +0 -1
  568. package/dist/types/runtime/workspace-tree-service.test.d.ts +0 -1
  569. package/dist/types/runtime-mcp/config.test.d.ts +0 -1
  570. package/dist/types/runtime-mcp/http.test.d.ts +0 -1
  571. package/dist/types/runtime-mcp/manager-pool.test.d.ts +0 -1
  572. package/dist/types/runtime-mcp/pool-key.test.d.ts +0 -1
  573. package/dist/types/runtime-mcp/pool.test.d.ts +0 -1
  574. package/dist/types/sdk/bus/lifecycle-control-runtime.d.ts +0 -117
  575. package/dist/types/sdk/bus/lifecycle-orchestrator.d.ts +0 -141
  576. package/dist/types/sdk/bus/telegram-cli.d.ts +0 -31
  577. package/dist/types/sdk/elevation/allowlist.d.ts +0 -20
  578. package/dist/types/sdk/elevation/audit.d.ts +0 -93
  579. package/dist/types/sdk/elevation/capability.d.ts +0 -3
  580. package/dist/types/sdk/elevation/digest.d.ts +0 -72
  581. package/dist/types/sdk/elevation/dispatch-receipt.d.ts +0 -85
  582. package/dist/types/sdk/elevation/grant-ledger.d.ts +0 -163
  583. package/dist/types/sdk/elevation/owner.d.ts +0 -48
  584. package/dist/types/sdk/host/import-graph.test.d.ts +0 -1
  585. package/dist/types/sdk/host/sdk-surface-parity.test.d.ts +0 -1
  586. package/dist/types/sdk/host/session-runtime.test.d.ts +0 -1
  587. package/dist/types/sdk/host/websocket-transport.lifecycle.test.d.ts +0 -1
  588. package/dist/types/session/auth-broker-config.d.ts +0 -13
  589. package/dist/types/session/heap-eviction-artifacts.test.d.ts +0 -1
  590. package/dist/types/skills/skills.test.d.ts +0 -1
  591. package/dist/types/slash-commands/notify-command.test.d.ts +0 -1
  592. package/dist/types/task/token-log.test.d.ts +0 -1
  593. package/dist/types/tools/computer.enforcement.test.d.ts +0 -1
  594. package/dist/types/tools/descriptors.test.d.ts +0 -1
  595. package/scripts/g005-daemon-smoke.ts +0 -180
  596. package/scripts/g011-daemon-path-smoke.ts +0 -153
  597. package/src/sdk/bus/lifecycle-control-runtime.ts +0 -1733
  598. package/src/sdk/bus/lifecycle-orchestrator.ts +0 -489
  599. package/src/sdk/bus/telegram-cli.ts +0 -212
  600. package/src/sdk/elevation/allowlist.ts +0 -54
  601. package/src/sdk/elevation/audit.ts +0 -208
  602. package/src/sdk/elevation/capability.ts +0 -41
  603. package/src/sdk/elevation/digest.ts +0 -129
  604. package/src/sdk/elevation/dispatch-receipt.ts +0 -184
  605. package/src/sdk/elevation/grant-ledger.ts +0 -1142
  606. package/src/sdk/elevation/owner.ts +0 -109
  607. package/src/session/auth-broker-config.ts +0 -109
  608. /package/dist/types/{ai-core-import-gate.test.d.ts → discovery/claude-hooks.d.ts} +0 -0
  609. /package/dist/types/{cli/fixture-report.test.d.ts → discovery/codex-hooks.d.ts} +0 -0
  610. /package/dist/types/sdk/{bus/recent-activity.d.ts → lifecycle/recent-sessions.d.ts} +0 -0
@@ -24,7 +24,6 @@ export interface ConversationStoreFs {
24
24
  mode: number;
25
25
  }): Promise<void>;
26
26
  rename(from: string, to: string): Promise<void>;
27
- link(from: string, to: string): Promise<void>;
28
27
  unlink(file: string): Promise<void>;
29
28
  open(file: string, flags: string): Promise<ConversationStoreFileHandle>;
30
29
  stat?(file: string): Promise<{
@@ -16,5 +16,11 @@ export interface DaemonPaths {
16
16
  diagnostic: string;
17
17
  aliases: string;
18
18
  seenUpdates: string;
19
+ ownerRegistry: string;
20
+ recoveryReceipt: string;
19
21
  }
22
+ export declare function agentDirDigest(agentDir: string): string;
23
+ export declare function telegramDaemonOwnerMarkerPath(agentDir: string, acquisitionId: string): string;
24
+ export declare const daemonOwnerMarkerPath: typeof telegramDaemonOwnerMarkerPath;
25
+ export declare const telegramDaemonProcessMarkerPath: typeof telegramDaemonOwnerMarkerPath;
20
26
  export declare function daemonPaths(agentDir: string): DaemonPaths;
@@ -8,6 +8,7 @@ export interface DiscordInboundDispatchReceipt {
8
8
  actionId?: string;
9
9
  actionNonce?: string;
10
10
  endpointGeneration: number;
11
+ attachmentAuthorityId?: string;
11
12
  effectId: string;
12
13
  idempotencyKey: string;
13
14
  }
@@ -25,6 +26,7 @@ export interface DiscordConversation extends ConversationRecord {
25
26
  createOwner?: string;
26
27
  createLeaseExpiresAt?: number;
27
28
  endpointGeneration?: number;
29
+ attachmentAuthorityId?: string;
28
30
  /** Immutable lineage for archive and resume provider effects. */
29
31
  effectIncarnationId?: string;
30
32
  /** Current archive operation authority. */
@@ -1,32 +1,27 @@
1
+ import { type SessionAttachment } from "../router";
1
2
  import { type DiscordConversation } from "./discord-conversation";
2
3
  import type { DiscordInboundEvent, DiscordProvider } from "./discord-provider";
3
- export declare class DiscordEndpointBindingError extends Error {
4
+ export declare class DiscordAttachmentBindingError extends Error {
4
5
  constructor(message?: string);
5
6
  }
6
- /** A captured live SDK transport. `isCurrent` must fail closed after replacement or removal. */
7
- export interface DiscordEndpointBinding {
8
- generation: number;
9
- isCurrent(): boolean;
10
- send(frame: Record<string, unknown>): void | Promise<void>;
11
- }
12
7
  export interface DiscordLeaseRecoveryScheduler {
13
8
  setTimeout(callback: () => void | Promise<void>, delayMs: number): unknown;
14
9
  clearTimeout(handle: unknown): void;
15
10
  }
16
11
  export interface DiscordNotificationDaemonOptions {
17
12
  agentDir: string;
18
- repo: string;
19
13
  guildId: string;
20
14
  parentChannelId: string;
21
15
  provider: DiscordProvider;
22
16
  now?: () => number;
23
17
  leaseRecoveryScheduler?: DiscordLeaseRecoveryScheduler;
24
- resolveEndpoint: (sessionId: string, expectedGeneration?: number) => Promise<DiscordEndpointBinding | null>;
25
- onCommand?: (sessionId: string, content: string, endpoint: DiscordEndpointBinding, idempotencyKey: string) => Promise<boolean>;
18
+ resolveAttachment: (sessionId: string, expectedGeneration?: number) => SessionAttachment | null | Promise<SessionAttachment | null>;
19
+ onCommand?: (sessionId: string, content: string, attachment: SessionAttachment, idempotencyKey: string) => Promise<boolean>;
26
20
  }
27
21
  export interface DiscordNotificationInput {
28
22
  sessionId: string;
29
23
  endpointGeneration: number;
24
+ attachmentAuthorityId?: string;
30
25
  content: string;
31
26
  threadName?: string;
32
27
  actionId?: string;
@@ -38,14 +33,24 @@ export declare class DiscordNotificationDaemon {
38
33
  #private;
39
34
  private readonly options;
40
35
  constructor(options: DiscordNotificationDaemonOptions);
36
+ restartBlocked(): boolean;
41
37
  start(): Promise<void>;
42
38
  stop(): Promise<void>;
39
+ /**
40
+ * Frame-driven publication work is tracked like inbound events so that stop()
41
+ * drains it while the Router still holds attachment authority. A session
42
+ * replayed during teardown otherwise reaches its post-provider binding
43
+ * revalidation only after Router.stop() has revoked the attachment, turning a
44
+ * legitimate create into a spurious teardown rejection.
45
+ */
43
46
  notify(input: DiscordNotificationInput): Promise<DiscordConversation>;
44
47
  /** Posts a safe command outcome to the active mapped conversation. */
45
48
  postCommandResult(sessionId: string, content: string): Promise<boolean>;
46
- close(sessionId: string): Promise<void>;
49
+ close(sessionId: string, endpointGeneration?: number): Promise<void>;
50
+ recoverCleanup(sessionId: string, endpointGeneration: number): Promise<void>;
51
+ retireAttachment(sessionId: string, endpointGeneration: number): Promise<void>;
47
52
  archive(sessionId: string): Promise<void>;
48
- resume(sessionId: string, endpointGeneration: number): Promise<DiscordConversation | undefined>;
53
+ resume(sessionId: string, endpointGeneration: number, attachmentAuthorityId?: string): Promise<DiscordConversation | undefined>;
49
54
  resolveAction(sessionId: string, actionId: string): Promise<void>;
50
55
  handleInbound(event: DiscordInboundEvent): Promise<void>;
51
56
  }
@@ -4,19 +4,14 @@
4
4
  * Stock startup publishes a session's readiness immediately, so the running
5
5
  * chat daemon surfaces the session and creates its own root before an operator
6
6
  * could ever name an existing one. A session that opts in is *prepared*
7
- * instead: its id, endpoint, and broker registration are discoverable authority
8
- * while readiness stays withheld, which leaves exactly one root claim for
9
- * `gjc notify bind-thread` to fill. Activation then publishes readiness once,
10
- * and the daemon adopts the bound root instead of replacing it.
7
+ * instead: readiness stays withheld while the provider applies its one root
8
+ * claim. The SessionRouter owns endpoint authority and activation; this module
9
+ * only proves that the provider mapping authorizes readiness publication.
11
10
  *
12
11
  * Nothing here mutates a mapping. The gate only reads the daemon-owned store to
13
- * prove a binding exists, and the activation client only asks the session's own
14
- * host to publish the readiness it withheld.
12
+ * prove a binding exists for the exact session and endpoint generation.
15
13
  */
16
- import type { SessionIndex } from "../broker/session-index";
17
- import type { SdkSessionEndpoint, SdkSessionEndpointScope } from "../client/discovery";
18
14
  import type { SessionActivationGate } from "../host";
19
- import { type ActivatedPreparedSession, type PreparedSessionActivationClient } from "../session-activation";
20
15
  import type { ConversationStore } from "./conversation-store";
21
16
  import type { SlackConversation } from "./slack-conversation";
22
17
  /** Explicit, session-scoped opt-in for withholding readiness until a root is bound. */
@@ -44,28 +39,3 @@ export interface SlackBindingActivationInput {
44
39
  * caller reports unavailable authority instead of an authorization.
45
40
  */
46
41
  export declare function createSlackBindingActivationGate(input: SlackBindingActivationInput): SessionActivationGate;
47
- export type { ActivatedPreparedSession, PreparedSessionActivationClient, SessionActivationErrorCode, } from "../session-activation";
48
- export { requestPreparedSessionActivation, SessionActivationError } from "../session-activation";
49
- export interface PreparedSessionActivationInput {
50
- sessionIndex: SessionIndex;
51
- sessionId: string;
52
- }
53
- export interface PreparedSessionActivationDeps {
54
- readEndpoint?: (repo: string, sessionId: string, scope?: SdkSessionEndpointScope) => Promise<SdkSessionEndpoint | null>;
55
- connect?: (endpoint: {
56
- url: string;
57
- token: string;
58
- }) => Promise<PreparedSessionActivationClient>;
59
- }
60
- /**
61
- * Ask a prepared session to publish the readiness it withheld.
62
- *
63
- * The same discovery authority the binding requires is resolved first, so an
64
- * unindexed, terminated, or endpoint-rolled session is refused before any
65
- * connection is opened. The request names the exact session and endpoint
66
- * generation, and the answer is accepted only when it proves both, so a
67
- * replacement session can never be activated in place of the requested one.
68
- * Activation is idempotent: an exact retry answers `already` without a second
69
- * readiness signal.
70
- */
71
- export declare function activatePreparedSession(input: PreparedSessionActivationInput, deps?: PreparedSessionActivationDeps): Promise<ActivatedPreparedSession>;
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Pure per-update inbound reaction transition ordering.
3
+ *
4
+ * Extracted from the Telegram daemon so the serialization and terminal-state
5
+ * contract is testable without daemon/attachment/topic-lease infrastructure.
6
+ * The production router dispatches notification frames without awaiting prior
7
+ * callbacks, so an `accepted` handler can still be in flight when the
8
+ * `consumed` handler runs. Chaining every transition for one update through a
9
+ * single promise keeps effects ordered, and skipping nonterminal transitions
10
+ * after a terminal one makes the terminal state monotonic: a late queued
11
+ * marker can never overwrite an already-sent consumed marker or retraction.
12
+ */
13
+ /** A single ordered Bot API reaction transition for one update id. */
14
+ export interface InboundReactionTransition {
15
+ /** Serialized in submission order per update id. */
16
+ readonly effect: () => Promise<void>;
17
+ /** Terminal transitions (consumed / retraction) close the update. */
18
+ readonly terminal: boolean;
19
+ }
20
+ /**
21
+ * Terminal tombstones are retained only for a bounded window of recent update
22
+ * ids. Telegram update ids are monotonically increasing per bot, so a stale
23
+ * `accepted` ack that could overwrite a terminal state always carries an id at
24
+ * or below the terminal one; ids far below the window are long-expired updates
25
+ * whose correction target no longer exists, so the daemon's own target lookup
26
+ * already ignores them.
27
+ */
28
+ export declare const INBOUND_REACTION_TOMBSTONE_WINDOW = 512;
29
+ export declare class InboundReactionSequencer {
30
+ #private;
31
+ /** True once a terminal transition completed for this update. */
32
+ isTerminal(updateId: number): boolean;
33
+ /**
34
+ * Enqueue one transition. The returned promise settles when the transition
35
+ * has run (or was skipped because a terminal state already closed it).
36
+ */
37
+ apply(updateId: number, transition: InboundReactionTransition): Promise<void>;
38
+ /** @internal Test-only: number of retained per-update chains. */
39
+ debugChainCount(): number;
40
+ /** @internal Test-only: number of retained terminal tombstones. */
41
+ debugTombstoneCount(): number;
42
+ }
43
+ /** Body for setting an emoji reaction on an inbound Telegram message. */
44
+ export declare function inboundReactionSetPayload(chatId: string, messageId: number, emoji: string): {
45
+ chat_id: string;
46
+ message_id: number;
47
+ reaction: Array<{
48
+ type: "emoji";
49
+ emoji: string;
50
+ }>;
51
+ };
52
+ /**
53
+ * Body for retracting a reaction. The Bot API clears a bot reaction with the
54
+ * empty reaction list; an empty `emoji` string is not a valid reaction and is
55
+ * silently rejected, leaving the stale queued marker visible.
56
+ */
57
+ export declare function inboundReactionRetractPayload(chatId: string, messageId: number): {
58
+ chat_id: string;
59
+ message_id: number;
60
+ reaction: [];
61
+ };
@@ -29,13 +29,30 @@ import type { AskAnswerSource, AskAnswerSourceResult, AskRemoteControl } from ".
29
29
  import { type SessionHostRuntimePublication } from "../broker/lifecycle";
30
30
  import { type SessionSdkHost } from "../host";
31
31
  import { CursorRegistry, RevisionStore } from "../host/query";
32
+ import type { SdkFrame } from "../host/types";
32
33
  import { type SdkPromptTerminalOutcome } from "../prompt-status";
33
34
  import { type SdkStartupFailure } from "../startup-capability";
34
35
  import { type NotificationConfig } from "./config";
35
36
  import { NotificationSessionController } from "./session-control";
36
- import { type EnsureDaemonResult, type RegisterNotificationRootResult } from "./telegram-daemon";
37
+ import { type EnsureDaemonResult } from "./telegram-daemon";
37
38
  export type { IdentityControlSuccessPathInput, IdentityControlTerminalPathInput, TerminalSendOutcome, } from "./control-drain-lease";
38
39
  export { isNativeControlDrainAvailable, runIdentityControlSuccessPath, runIdentityControlTerminalPath, } from "./control-drain-lease";
40
+ export type NotificationInboundAdmission = {
41
+ outcome: "accept";
42
+ } | {
43
+ outcome: "drop";
44
+ reason: "inbound_fenced" | "policy_suspended";
45
+ } | {
46
+ outcome: "defer";
47
+ reason: "policy_suspended";
48
+ };
49
+ /** Exact production admission decision for daemon-originated session inbound. */
50
+ export declare function notificationInboundAdmission(input: {
51
+ inboundFenced: boolean;
52
+ policySuspended: boolean;
53
+ notificationOrigin: boolean;
54
+ controlCommand: boolean;
55
+ }): NotificationInboundAdmission;
39
56
  type PromptTerminalDiagnostic = {
40
57
  reason?: unknown;
41
58
  loopStopReason?: string;
@@ -70,10 +87,6 @@ export type SessionCreateTarget = {
70
87
  /** Identifies the session a `session_close` targets. */
71
88
  export interface SessionCloseTarget {
72
89
  sessionId: string;
73
- /** Expected GJC-managed tmux session name (defense-in-depth match). */
74
- tmuxSession?: string;
75
- /** Expected `@gjc-session-state-file` tag (defense-in-depth match). */
76
- sessionStateFile?: string;
77
90
  }
78
91
  /** Identifies the session a `session_resume` targets. */
79
92
  export interface SessionResumeTarget {
@@ -81,107 +94,34 @@ export interface SessionResumeTarget {
81
94
  /** Optional repo/working-dir hint to disambiguate matches. */
82
95
  path?: string;
83
96
  }
84
- /** Create a new session. */
85
- export interface SessionCreateFrame {
86
- type: "session_create";
87
- requestId: string;
88
- /** Deterministic lifecycle marker preallocated by the daemon before spawn. */
89
- lifecycleRequestId: string;
90
- /** Session id the daemon preallocated and propagates to the child. */
91
- intendedSessionId: string;
92
- /** Telegram update id (idempotency key on the daemon side). */
93
- updateId: number;
94
- chatId: string;
95
- /** Control-endpoint token authorizing this frame. */
96
- token: string;
97
- target: SessionCreateTarget;
98
- /** Reserved for a future capability transport; any supplied value is rejected before lifecycle acceptance. */
99
- startupPromptRef?: string;
100
- /** Model profile preset to activate for the spawned session (--mpreset). */
101
- modelPreset?: string;
102
- }
103
- /** Close (hard-kill, history preserved) a session. */
104
- export interface SessionCloseFrame {
105
- type: "session_close";
106
- requestId: string;
107
- updateId: number;
108
- chatId: string;
109
- token: string;
110
- target: SessionCloseTarget;
111
- /** Required force-only close flag; false/omitted is rejected by daemon policy. */
112
- force?: boolean;
113
- }
114
- /** Resume a session (reattach if alive, else cold-restart from history). */
115
- export interface SessionResumeFrame {
116
- type: "session_resume";
117
- requestId: string;
118
- updateId: number;
119
- chatId: string;
120
- token: string;
121
- target: SessionResumeTarget;
122
- /** Reserved for a future capability transport; any supplied value is rejected before lifecycle acceptance. */
123
- startupPromptRef?: string;
124
- }
125
- /** Any client -> ingress lifecycle request frame. */
126
- export type SessionLifecycleRequest = SessionCreateFrame | SessionCloseFrame | SessionResumeFrame;
127
- /** Terminal status of a lifecycle request. */
128
97
  export type LifecycleStatus = "ok" | "error";
129
- /** A connected session's per-session endpoint, returned to the control client. */
130
- export interface LifecycleEndpoint {
131
- url: string;
132
- token: string;
133
- }
134
- /** The Telegram topic/thread a session is surfaced in. */
135
- export interface LifecycleTopic {
136
- chatId: string;
137
- threadId: string;
138
- }
139
- /** How a create request was correlated to its spawned session. */
140
- export type MatchedBy = "spawn_marker" | "session_ready";
141
- /** Response to a successful `session_create`. */
142
98
  export interface SessionCreateResponseFrame {
143
99
  type: "session_create_response";
144
100
  requestId: string;
145
101
  status: LifecycleStatus;
146
- lifecycleRequestId: string;
147
102
  sessionId: string;
148
- matchedBy: MatchedBy;
149
- endpoint: LifecycleEndpoint;
150
- topic: LifecycleTopic;
151
103
  target: SessionCreateTarget;
152
104
  }
153
- /** Response to a successful `session_close`. */
154
105
  export interface SessionCloseResponseFrame {
155
106
  type: "session_close_response";
156
107
  requestId: string;
157
108
  status: LifecycleStatus;
158
109
  sessionId: string;
159
- processGone: boolean;
160
- historyPreserved: boolean;
161
- endpointStale: boolean;
162
110
  }
163
- /** Whether a resume reattached to a live session or cold-restarted a dead one. */
164
111
  export type ResumeMode = "reattached" | "cold_restarted";
165
- /** Response to a successful `session_resume`. */
166
112
  export interface SessionResumeResponseFrame {
167
113
  type: "session_resume_response";
168
114
  requestId: string;
169
115
  status: LifecycleStatus;
170
116
  sessionId: string;
171
117
  mode: ResumeMode;
172
- endpoint: LifecycleEndpoint;
173
- topic: LifecycleTopic;
174
118
  }
175
- /** Machine-readable reason a lifecycle request failed. */
176
119
  export type LifecycleErrorReason = "unauthorized" | "rate_limited" | "duplicate_conflict" | "invalid_target" | "ambiguous_target" | "spawn_failed" | "discovery_timeout" | "readiness_timeout" | "close_refused" | "not_found" | "terminal_uncertain" | "unsupported_platform";
177
- /** A candidate returned with an `ambiguous_target` resume error. */
178
120
  export interface ResumeCandidate {
179
121
  sessionId: string;
180
122
  path?: string;
181
- /** Last-activity epoch-millis (session history file mtime), if known. */
182
123
  mtimeMs?: number;
183
124
  }
184
- /** A structured lifecycle error frame. */
185
125
  export interface SessionLifecycleErrorFrame {
186
126
  type: "session_lifecycle_error";
187
127
  requestId: string;
@@ -190,7 +130,6 @@ export interface SessionLifecycleErrorFrame {
190
130
  message: string;
191
131
  candidates?: ResumeCandidate[];
192
132
  }
193
- /** Any ingress -> client lifecycle response frame. */
194
133
  export type SessionLifecycleResponse = SessionCreateResponseFrame | SessionCloseResponseFrame | SessionResumeResponseFrame | SessionLifecycleErrorFrame;
195
134
  /**
196
135
  * Replayable per-session readiness signal (mirror of the Rust `session_ready`
@@ -327,6 +266,9 @@ export declare class PresentationArbiter {
327
266
  interface SessionRuntime {
328
267
  server: NotificationServer;
329
268
  host: SessionSdkHost;
269
+ /** Delivers one ring-positioned event envelope to every attached subscriber
270
+ * connection, applying the same capability gate as event replay. */
271
+ broadcastEventFrame: (event: SdkFrame) => void;
330
272
  /** Owns stateRoot-backed revisions and removes their spills on terminal shutdown. */
331
273
  revisions: RevisionStore;
332
274
  /** Releases all snapshot pins before the revision store is closed. */
@@ -336,6 +278,8 @@ interface SessionRuntime {
336
278
  /** Discovery scope is fixed before publication; a live default endpoint is never rotated in place. */
337
279
  endpointScope: "default" | "chat";
338
280
  idleSeq: number;
281
+ /** Stops delayed session-name observation when this runtime loses authority. */
282
+ stopSessionNameObserver: () => void;
339
283
  /** Interactive asks awaiting a remote answer, by action id. */
340
284
  pendingInteractive: Map<string, PendingInteractiveAsk>;
341
285
  /** Deregisters this session's ask answer source. */
@@ -348,6 +292,12 @@ interface SessionRuntime {
348
292
  notificationsActive: boolean;
349
293
  /** Provider ownership state is independent from the already-published core SDK runtime. */
350
294
  notificationOwnerState: "ready" | "retry" | "blocked";
295
+ /**
296
+ * Ownership-relevant configuration identity this runtime's owner state was
297
+ * proved under. A settled outcome may only be applied while it still matches,
298
+ * so a credential/destination/enablement change forces a re-proof.
299
+ */
300
+ notificationOwnerKey?: string;
351
301
  /** Rejects new SDK frames while a leased terminal response drains. */
352
302
  inboundFenced: boolean;
353
303
  /** Set as soon as terminal teardown is requested, before startup settles. */
@@ -381,12 +331,6 @@ interface SessionRuntime {
381
331
  /** This runtime's own host-liveness publication; only its teardown may retract it. */
382
332
  evidencePublication?: SessionHostRuntimePublication;
383
333
  brokerRegistrationReleased: boolean;
384
- /** Managed Telegram root registration released during terminal teardown. */
385
- notificationRootRegistration?: {
386
- settings: Settings;
387
- cwd: string;
388
- registrationToken: string;
389
- };
390
334
  verbosity: "lean" | "verbose";
391
335
  sessionTag: string;
392
336
  /** Whether the agent loop is currently running (drives the typing indicator). */
@@ -396,6 +340,11 @@ interface SessionRuntime {
396
340
  commandId: string;
397
341
  turnId: string;
398
342
  }>;
343
+ /** SDK run tokens bind an accepted queued follow-up to only its matching agent_start. */
344
+ pendingPromptCorrelationsBySdkRunToken: Map<string, {
345
+ commandId: string;
346
+ turnId: string;
347
+ }>;
399
348
  /** Identity bound to the agent lifecycle currently in flight. */
400
349
  activePromptCorrelation?: {
401
350
  commandId: string;
@@ -425,7 +374,7 @@ interface SessionRuntime {
425
374
  } | {
426
375
  type: "agent_failed";
427
376
  error: unknown;
428
- }) => void;
377
+ }) => void | Promise<void>;
429
378
  /** Settles and emits one sanitized correlated prompt failure. */
430
379
  emitPromptFailure: (correlation: {
431
380
  commandId: string;
@@ -473,17 +422,33 @@ interface SessionRuntime {
473
422
  turnClosed?: boolean;
474
423
  /** Finalized while provisional policy was held; flush exactly once on stable activation. */
475
424
  pendingFinal?: {
476
- text?: string;
477
- messageRef?: string;
425
+ window: number;
426
+ receipts: Array<{
427
+ text: string;
428
+ messageRef?: string;
429
+ origin: "user" | "autonomous" | "continuation";
430
+ }>;
478
431
  };
432
+ /** Monotonic user-request boundary for deferred lean delivery. */
433
+ settlementWindow: number;
434
+ /** Provenance of the currently executing assistant turn. */
435
+ currentTurnSettlementOrigin?: "user" | "autonomous" | "continuation";
436
+ /** Immutable settlement boundary captured when the current turn begins. */
437
+ currentTurnSettlementWindow?: number;
479
438
  /**
480
- * Lean-mode deferred final answer: latest assistant text observed at `turn_end`,
481
- * emitted once at `agent_end` so intermediate tool-turn narration does not flood
482
- * remote clients. Cleared after flush or when replaced by a newer turn.
439
+ * Lean-mode deferred receipts for the current user-request settlement window.
440
+ * Ordinary tool-loop turns retain latest-turn-wins behaviour. An autonomous
441
+ * continuation has no new user request, so it appends instead of erasing the
442
+ * prior receipt. The small fixed receipt bound prevents an unbounded idle wait
443
+ * from retaining the full transcript.
483
444
  */
484
445
  pendingSettled?: {
485
- text: string;
486
- messageRef?: string;
446
+ window: number;
447
+ receipts: Array<{
448
+ text: string;
449
+ messageRef?: string;
450
+ origin: "user" | "autonomous" | "continuation";
451
+ }>;
487
452
  };
488
453
  /** SDK control frames received during provisional ownership; replayed only after stable activation. */
489
454
  deferredInboundControls: Array<() => void>;
@@ -594,9 +559,13 @@ export declare class EphemeralTurnHost {
594
559
  evictTerminalEvents(): void;
595
560
  }
596
561
  /**
597
- * Ensures every configured chat-provider daemon is ready before the SDK
598
- * publishes session identity. A rejected ensure is startup-fatal: presenting
599
- * an identity for a transport that never became available is false success.
562
+ * Ensures every configured chat-provider daemon is ready.
563
+ *
564
+ * This runs strictly AFTER the SDK publishes session identity and its core
565
+ * endpoint, through the detached ownership coordinator: chat providers are
566
+ * optional notification adapters, never session authority. A rejected ensure
567
+ * therefore degrades notification delivery only — the coordinator records it
568
+ * as `failed`, adapters stay withheld, and a later reconcile re-attempts.
600
569
  */
601
570
  export declare function ensureConfiguredProviderDaemons(settings: Settings, cfg: NotificationConfig, ensureProviderDaemon?: (provider: "discord" | "slack", settings: Settings) => Promise<unknown>): Promise<void>;
602
571
  /**
@@ -614,9 +583,6 @@ export declare function createNotificationsExtension(api: ExtensionAPI, options?
614
583
  settings?: Settings;
615
584
  ensureTelegramDaemon?: (input: {
616
585
  settings: Settings;
617
- cwd: string;
618
- sessionId: string;
619
- onRegistered?: (registration: RegisterNotificationRootResult) => void;
620
586
  }) => Promise<EnsureDaemonResult>;
621
587
  ensureProviderDaemon?: (provider: "discord" | "slack", settings: Settings) => Promise<unknown>;
622
588
  /** Suppress auto-delivery for a GJC-spawned child under `sessionScope=primary`. */
@@ -635,4 +601,24 @@ export declare function createNotificationsExtension(api: ExtensionAPI, options?
635
601
  }) => void;
636
602
  readNotificationFile?: (path: string) => Promise<Buffer>;
637
603
  readNotificationDiffStat?: (cwd: string) => Promise<string | undefined>;
604
+ /**
605
+ * INTERNAL terminal-abort session seams, threaded directly from the owning
606
+ * session — deliberately NOT on the public ExtensionContext so third-party
607
+ * extensions cannot observe attempt epochs or cancel the session-global
608
+ * preflight outside the durable admission path (review thread P2).
609
+ */
610
+ terminalAbortSeams?: {
611
+ getTerminalTurnEpoch: () => number | undefined;
612
+ cancelPendingPreflightForTerminalAbort: () => void;
613
+ captureTerminalAbortSteeringSnapshot?: () => void;
614
+ discardTerminalAbortSteeringSnapshot?: (token: number) => void;
615
+ rebindTerminalAbortSteeringSnapshot?: (token: number) => void;
616
+ abortPromptAndWaitWithTerminal: (handle: string, options: {
617
+ graceMs: number;
618
+ terminal?: {
619
+ scope: "turn" | "owned";
620
+ expectedEpoch?: number;
621
+ };
622
+ }) => Promise<RunSettlementProof>;
623
+ };
638
624
  }): void;
@@ -1,8 +1,5 @@
1
- /**
2
- * Kind-aware invocation reconciliation (prompt | skill) with optional durable store.
3
- * Preserves Q26 admit/first-terminal/capacity/TTL semantics; indexes and caps are per-kind.
4
- */
5
1
  import type { PromptReconciliationStatus, SdkPromptTerminalOutcome, TurnPromptReconciliation } from "../prompt-status";
2
+ import type { ReceiptState } from "../receipt-state";
6
3
  import { type TurnResultContent, type TurnResultPage } from "../turn-result";
7
4
  import { type PromptCorrelation } from "./prompt-reconciliation";
8
5
  import type { ReconciliationKind, ReconciliationStore } from "./reconciliation-store";
@@ -11,6 +8,18 @@ export interface KindCorrelation extends PromptCorrelation {
11
8
  kind: ReconciliationKind;
12
9
  content?: TurnResultContent;
13
10
  }
11
+ export interface SteerReconciliationResult {
12
+ commandId: string;
13
+ turnId: string;
14
+ clientRef: string;
15
+ status: "accepted" | "rejected" | "uncertain";
16
+ acceptedAt: number;
17
+ terminalAt?: number;
18
+ error?: {
19
+ code: string;
20
+ message: string;
21
+ };
22
+ }
14
23
  export interface KindAwareReconciliation {
15
24
  admit(kind: ReconciliationKind, clientRef?: string): void;
16
25
  releaseAdmission(kind: ReconciliationKind, clientRef?: string): void;
@@ -25,12 +34,12 @@ export interface KindAwareReconciliation {
25
34
  error: unknown;
26
35
  content?: TurnResultContent;
27
36
  }): Promise<void>;
28
- claimPendingOutcome(correlation: PromptCorrelation, outcome: SdkPromptTerminalOutcome): Promise<SdkPromptTerminalOutcome>;
29
- finalizePromptOutcome(correlation: PromptCorrelation, outcome?: SdkPromptTerminalOutcome, recordError?: {
37
+ claimPendingOutcome(kind: ReconciliationKind, correlation: PromptCorrelation, outcome: SdkPromptTerminalOutcome, receiptState?: Extract<ReceiptState, "present" | "missing">): Promise<SdkPromptTerminalOutcome>;
38
+ finalizeOutcome(kind: ReconciliationKind, correlation: PromptCorrelation, outcome?: SdkPromptTerminalOutcome, recordError?: {
30
39
  code: string;
31
40
  message: string;
32
41
  }, content?: unknown): Promise<void>;
33
- peekPendingOutcome(correlation: PromptCorrelation): SdkPromptTerminalOutcome | undefined;
42
+ peekPendingOutcome(kind: ReconciliationKind, correlation: PromptCorrelation): SdkPromptTerminalOutcome | undefined;
34
43
  lookup(kind: ReconciliationKind, selector: {
35
44
  commandId?: string;
36
45
  turnId?: string;
@@ -41,6 +50,19 @@ export interface KindAwareReconciliation {
41
50
  turnId?: string;
42
51
  clientRef?: string;
43
52
  }): TurnResultPage;
53
+ reserveSteer(clientRef: string, text: string): Promise<{
54
+ replay: boolean;
55
+ result: SteerReconciliationResult;
56
+ }>;
57
+ settleSteer(clientRef: string, status: "accepted" | "rejected" | "uncertain", error?: unknown): Promise<SteerReconciliationResult>;
58
+ lookupSteer(selector: string | {
59
+ commandId?: string;
60
+ turnId?: string;
61
+ clientRef?: string;
62
+ }): SteerReconciliationResult | {
63
+ clientRef?: string;
64
+ status: "unknown";
65
+ };
44
66
  cleanup(): void;
45
67
  activeCount(kind: ReconciliationKind): number;
46
68
  /** Hydrate from durable store (call once at session host start). */
@@ -1,48 +1,18 @@
1
- import type { Settings } from "../../config/settings";
2
1
  import { RateLimitPool } from "./rate-limit-pool";
3
2
  import { type ThreadedSend } from "./threaded-render";
4
- export interface ManagedNotificationDaemonFs {
5
- readdir(path: string): Promise<string[]>;
6
- }
7
- export interface ManagedSessionSocket {
8
- sessionId: string;
9
- token: string;
10
- ws: WebSocket;
11
- pending: Map<string, {
12
- sessionId: string;
13
- actionId: string;
14
- }>;
15
- capable: boolean;
16
- lastPongAt: number;
17
- awaitingNonce: string | undefined;
18
- pingTimer: ReturnType<typeof setInterval> | undefined;
19
- }
3
+ /** Shared presentation engine for managed notification providers. */
20
4
  export interface ManagedNotificationDaemonOptions {
21
- settings: Settings;
22
- fs: ManagedNotificationDaemonFs;
23
- WebSocketImpl?: typeof WebSocket;
24
5
  now?: () => number;
25
- setIntervalImpl?: typeof setInterval;
26
- clearIntervalImpl?: typeof clearInterval;
27
6
  rateLimitPool?: RateLimitPool<{
28
7
  send: ThreadedSend;
29
8
  topicId?: string;
30
9
  }>;
31
10
  }
32
11
  export declare abstract class ManagedNotificationDaemon {
33
- protected readonly opts: ManagedNotificationDaemonOptions;
34
- readonly sessions: Map<string, ManagedSessionSocket>;
35
12
  readonly pool: RateLimitPool<{
36
13
  send: ThreadedSend;
37
14
  topicId?: string;
38
15
  }>;
39
- protected constructor(opts: ManagedNotificationDaemonOptions);
40
- scanRoots(): Promise<void>;
41
- connectSession(sessionId: string, url: string, token: string): ManagedSessionSocket;
42
- protected handleSessionMessage(session: ManagedSessionSocket, msg: Record<string, unknown>): Promise<boolean>;
16
+ protected constructor(opts?: ManagedNotificationDaemonOptions);
43
17
  protected renderFrame(frame: Record<string, unknown>): ThreadedSend | undefined;
44
- protected dropSession(session: ManagedSessionSocket): void;
45
- protected abstract readRoots(): Promise<string[]>;
46
- private sendHello;
47
- private startLiveness;
48
18
  }