@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
@@ -6,9 +6,9 @@ import { HEARTBEAT_TTL_MS } from "./daemon-paths";
6
6
  import { type DaemonTransitionLock, type NotificationEndpointFile, type NotificationEndpointFileIdentity, type NotificationExactUnlinkResult } from "./notification-service";
7
7
  import { type DaemonProcessReference } from "./telegram-daemon-control";
8
8
  import { type TelegramSetupPreflight } from "./telegram-setup";
9
- export { DAEMON_GENERATION, NOTIFICATION_PROTOCOL_VERSION, SERVING_EPOCH } from "./telegram-daemon-contract";
10
- import { type ControlServerLike, type LifecycleControlServerFactory } from "./lifecycle-control-runtime";
11
- import type { OrchestratorDeps } from "./lifecycle-orchestrator";
9
+ export { DAEMON_GENERATION, NOTIFICATION_EVENT_SCHEMA_VERSION, NOTIFICATION_PROTOCOL_VERSION, SDK_LIFECYCLE_ROUTER_PROTOCOL_VERSION, SERVING_EPOCH, TELEGRAM_TRANSPORT_GENERATION, } from "./telegram-daemon-contract";
10
+ import { type AgentDirSessionLifecycleService } from "../lifecycle/client";
11
+ import { type NotificationSubscription, type SessionRouterProviderDeps } from "../router/session-router";
12
12
  import { NotificationOperatorRuntime } from "./operator-runtime";
13
13
  import { type AliasTable, type CallbackRoute } from "./telegram-reference";
14
14
  import { type TopicEndpointBinding, type TopicRegistryCasAuthority, type TopicRegistryState } from "./topic-registry";
@@ -29,7 +29,6 @@ export interface DaemonState {
29
29
  chatId: string;
30
30
  startedAt: number;
31
31
  heartbeatAt: number;
32
- roots: string[];
33
32
  /**
34
33
  * Present only for the Windows source-launch handoff. `pid` starts as this
35
34
  * short-lived launcher PID and may be rebound exactly once to the daemon PID.
@@ -82,8 +81,8 @@ export interface TelegramDaemonFs {
82
81
  lstat?(path: string, opts: {
83
82
  bigint: true;
84
83
  }): Promise<ExactFileStat>;
85
- readEndpointFile?(path: string): Promise<NotificationEndpointFile>;
86
- exactUnlink?(path: string, identity: NotificationEndpointFileIdentity, quarantineName?: string): Promise<NotificationExactUnlinkResult>;
84
+ readEndpointFile?(file: string): Promise<NotificationEndpointFile>;
85
+ exactUnlink?(file: string, identity: NotificationEndpointFileIdentity): Promise<NotificationExactUnlinkResult>;
87
86
  }
88
87
  export interface SpawnResult {
89
88
  pid?: number;
@@ -147,26 +146,7 @@ export declare function reloadReservationLockOptions(input: {
147
146
  };
148
147
  export declare const BTW_QUESTION_MAX_UNICODE_SCALARS = 4096;
149
148
  export declare const BTW_QUESTION_MAX_UTF8_BYTES = 16384;
150
- export declare function endpointAuthorityDigest(url: string, token: string, connectionIdentity?: string): string;
151
149
  export { type DaemonPaths, daemonPaths } from "./daemon-paths";
152
- export declare function deriveLifecycleAuditRedactionKey(botToken: string): Uint8Array;
153
- /**
154
- * Attach session-lifecycle control (create/close/resume) to the running daemon.
155
- *
156
- * Wires an already-started, authenticated control server to the lifecycle
157
- * orchestrator with real daemon-side effects (tmux launcher / force-close /
158
- * resume), a durable fsynced idempotency ledger + audit JSONL under the agent
159
- * notifications dir, and strict paired-chat gating. The control server itself
160
- * (NotificationControlServer) is owned/started by the daemon process; this
161
- * function only connects it to policy. Returns the orchestrator deps for tests.
162
- */
163
- export declare function startDaemonLifecycleControl(input: {
164
- controlServer: ControlServerLike;
165
- pairedChatId: string;
166
- agentDir: string;
167
- auditRedactionKey: Uint8Array;
168
- env?: NodeJS.ProcessEnv;
169
- }): OrchestratorDeps;
170
150
  export declare class TopicRegistryDurabilityUnavailableError extends Error {
171
151
  readonly code = "durability_unavailable";
172
152
  constructor(cause: unknown);
@@ -326,119 +306,8 @@ export declare function renewOwnerHeartbeatSidecar(input: {
326
306
  */
327
307
  attachedEndpoints?: number;
328
308
  }): Promise<OwnerHeartbeatSidecarRenewal>;
329
- export interface NotificationRootRegistration {
330
- root?: string;
331
- managed?: boolean;
332
- token?: string;
333
- }
334
- export declare function readNotificationRootRegistration(input: {
335
- settings: Settings;
336
- sessionId: string;
337
- fs?: TelegramDaemonFs;
338
- }): Promise<NotificationRootRegistration>;
339
- export interface RegisterNotificationRootResult {
340
- root: string;
341
- /** Per-registration ownership token fencing a stale same-session cleanup from deleting a live replacement registration. */
342
- token: string;
343
- }
344
- export declare function registerNotificationRoot(input: {
345
- settings: Settings;
346
- cwd: string;
347
- sessionId: string;
348
- fs?: TelegramDaemonFs;
349
- }): Promise<RegisterNotificationRootResult>;
350
- export interface UnregisterNotificationRootResult {
351
- root: string;
352
- remainingRoots: number;
353
- /** Opaque fingerprint of the exact registry written by this successful unregister. */
354
- registryFingerprint?: string;
355
- }
356
- /** Remove one session's Telegram scan root without disturbing other live session roots. */
357
- export declare function unregisterNotificationRoot(input: {
358
- settings: Settings;
359
- cwd: string;
360
- sessionId: string;
361
- fs?: TelegramDaemonFs;
362
- /** Ownership token minted by this runtime's own registration; a stale cleanup presenting an older token never deletes a replacement registration. */
363
- registrationToken?: string;
364
- }): Promise<UnregisterNotificationRootResult>;
365
- /** Run an action while the roots registry lock excludes any registration or unregister. */
366
- export declare function withNotificationRootRegistryFence(input: {
367
- settings: Settings;
368
- registryFingerprint: string;
369
- action: () => Promise<void>;
370
- fs?: TelegramDaemonFs;
371
- }): Promise<boolean>;
372
- /**
373
- * Leak artifact prefixes left when native exact-unlink cleanup is retained
374
- * (#2956). Nothing previously reaped these; they accumulate in the notifications
375
- * directory across ownership transitions.
376
- */
377
- export declare const NOTIFICATION_LEAK_ARTIFACT_PREFIXES: readonly [".gjc-delete-daemon-transition-", ".gjc-exact-unlink-placeholder-", ".gjc-delete-notification-endpoint-", ".gjc-delete-notification-staging-temp-"];
378
- /** Grace window before a leak artifact is reaped (covers in-flight unlinks). */
379
- export declare const NOTIFICATION_LEAK_ARTIFACT_GRACE_MS: number;
380
309
  /** True when a path is permanently gone (not a transient I/O blip). */
381
310
  export declare function isPermanentMissingPathError(error: unknown): boolean;
382
- /** A publication staging claim recovered from an abandoned temp's name. */
383
- export interface NotificationStagingTempClaim {
384
- /** Published sibling this temp was staged for. */
385
- destination: string;
386
- /** PID of the process that staged it. */
387
- pid: number;
388
- /** Wall-clock ms the publisher recorded when it staged the temp. */
389
- stagedAtMs: number;
390
- }
391
- /**
392
- * Recover the publication claim encoded in a staging temp's name, or
393
- * `undefined` when `name` is not a staging temp or its PID/timestamp fields are
394
- * not usable integers. An unparseable claim is never reaped.
395
- */
396
- export declare function parseNotificationStagingTemp(name: string): NotificationStagingTempClaim | undefined;
397
- export declare function isNotificationLeakArtifactName(name: string): boolean;
398
- /**
399
- * Drop permanently missing scan roots from the durable registry under the roots
400
- * lock. Session map entries that pointed only at those roots are removed too.
401
- */
402
- export declare function pruneMissingNotificationRoots(input: {
403
- settings: Settings;
404
- fs?: TelegramDaemonFs;
405
- /** When set, only these roots are considered; otherwise every registered root is probed. */
406
- candidates?: readonly string[];
407
- }): Promise<{
408
- pruned: string[];
409
- remaining: number;
410
- }>;
411
- /**
412
- * Reap retained exact-unlink / ownership-transition quarantine files older than
413
- * the grace window from the notifications directory, plus publication staging
414
- * temps whose publisher is provably dead.
415
- */
416
- export declare function reapStaleNotificationArtifacts(input: {
417
- settings: Settings;
418
- fs?: TelegramDaemonFs;
419
- now?: () => number;
420
- graceMs?: number;
421
- /** Liveness seam used to prove a staging temp's publisher is dead. */
422
- pidAlive?: (pid: number) => boolean;
423
- }): Promise<{
424
- removed: string[];
425
- skipped: number;
426
- }>;
427
- /**
428
- * Startup / ownership self-heal: prune dead roots and reap leak artifacts so
429
- * `gjc daemon reload` recovers a degraded install without manual surgery (#2956).
430
- */
431
- export declare function healTelegramDaemonNotificationState(input: {
432
- settings: Settings;
433
- fs?: TelegramDaemonFs;
434
- now?: () => number;
435
- graceMs?: number;
436
- /** Liveness seam used to prove a staging temp's publisher is dead. */
437
- pidAlive?: (pid: number) => boolean;
438
- }): Promise<{
439
- prunedRoots: string[];
440
- removedArtifacts: string[];
441
- }>;
442
311
  export declare function hasSafeDaemonStateShape(state: unknown): state is DaemonState;
443
312
  type ParentDaemonStateBase = Omit<DaemonState, "incarnation" | "acquisitionId" | "ownershipPhase" | "generation" | "launcherPid"> & {
444
313
  incarnation?: undefined;
@@ -504,7 +373,6 @@ export declare function isCurrentCompatibleOwner(input: {
504
373
  }): boolean;
505
374
  export declare function acquireDaemonOwnership(input: {
506
375
  settings: Settings;
507
- roots?: string[];
508
376
  tokenFingerprint: string;
509
377
  chatId: string;
510
378
  fs?: TelegramDaemonFs;
@@ -648,8 +516,6 @@ export declare function markDaemonOwnerStopped(input: {
648
516
  }): Promise<boolean>;
649
517
  /** Read the persisted daemon ownership state (or undefined when absent). */
650
518
  export declare function readDaemonState(settings: Pick<Settings, "getAgentDir">, fs?: TelegramDaemonFs): Promise<DaemonState | undefined>;
651
- /** Read the persisted notification roots list. */
652
- export declare function readDaemonRoots(settings: Pick<Settings, "getAgentDir">, fs?: TelegramDaemonFs): Promise<string[]>;
653
519
  /** Injectable readers for {@link resolveTelegramSetupPreflight}, defaulting to the real OS/state probes. */
654
520
  export interface ResolveTelegramSetupPreflightDeps {
655
521
  readDaemonState?: (settings: Settings) => Promise<DaemonState | undefined>;
@@ -668,7 +534,6 @@ export interface ResolveTelegramSetupPreflightDeps {
668
534
  export declare function resolveTelegramSetupPreflight(settings: Settings, deps?: ResolveTelegramSetupPreflightDeps): Promise<TelegramSetupPreflight>;
669
535
  export interface TelegramSpawnOwnerInput {
670
536
  settings: Settings;
671
- roots?: string[];
672
537
  tokenFingerprint: string;
673
538
  chatId: string;
674
539
  /** Ephemeral outbound-only validation destination for this owner launch. */
@@ -714,12 +579,7 @@ export declare function buildTelegramDaemonSpawnArgs(input: {
714
579
  args: string[];
715
580
  runtime: DaemonRuntimeInfo;
716
581
  };
717
- /**
718
- * Acquire ownership for the given Telegram identity and, if acquired, spawn a
719
- * fresh detached daemon process. Does NOT register notification roots; callers
720
- * that own a session (autostart) register roots separately, while reload reuses
721
- * already-persisted roots.
722
- */
582
+ /** Acquire ownership for the configured Telegram daemon and spawn a detached owner. */
723
583
  export declare function spawnTelegramDaemonOwner(input: TelegramSpawnOwnerInput, deps?: TelegramDaemonDeps): Promise<TelegramSpawnOwnerResult>;
724
584
  /**
725
585
  * Owner-bound reclamation of a confirmed-dead daemon owner, mirroring the
@@ -733,37 +593,23 @@ export type DeadOwnerRecoveryResult = {
733
593
  reason: "cleared";
734
594
  } | {
735
595
  recovered: false;
736
- reason: "not-confirmed-dead" | "unsafe-lock" | "transition-contended" | "owner-superseded" | "unsafe-endpoint" | "endpoint-changed" | "endpoint-directory-unreadable" | "lock-changed";
596
+ reason: "not-confirmed-dead" | "unsafe-lock" | "transition-contended" | "lock-changed";
737
597
  };
738
- /** Preflight cleanup for a confirmed-dead owner, with identity-bound removal. */
598
+ /** Preflight cleanup for a confirmed-dead owner. */
739
599
  export declare function reclaimDeadDaemonOwner(input: {
740
600
  settings: Settings;
741
- endpointDir?: string;
742
601
  fs?: TelegramDaemonFs;
743
602
  now?: () => number;
744
603
  pidAlive?: (pid: number) => boolean;
745
604
  pidIncarnation?: (pid: number) => string | undefined;
746
605
  }): Promise<DeadOwnerRecoveryResult>;
747
- /**
748
- * Ensure a configured daemon owns this session root, preserving ownership safety
749
- * while exposing whether a #2028 generation handoff was required.
750
- */
606
+ /** Ensure the configured Telegram owner is running. */
751
607
  export declare function ensureTelegramDaemonRunningDetailed(input: {
752
608
  settings: Settings;
753
- cwd: string;
754
- sessionId: string;
755
- registerRoot?: boolean;
756
- /** Receives each registration this ensure operation minted so the caller can fence its own later cleanup. */
757
- onRegistered?: (registration: RegisterNotificationRootResult) => void;
758
609
  }, deps?: TelegramDaemonDeps): Promise<EnsureTelegramDaemonDetailedResult>;
759
- /**
760
- * Legacy compatibility mapping for callers that only distinguish ownership from
761
- * attachment. New orchestration should use {@link ensureTelegramDaemonRunningDetailed}.
762
- */
610
+ /** Map owner startup to the public daemon result. */
763
611
  export declare function ensureTelegramDaemonRunning(input: {
764
612
  settings: Settings;
765
- cwd: string;
766
- sessionId: string;
767
613
  }, deps?: TelegramDaemonDeps): Promise<EnsureDaemonResult>;
768
614
  export interface BotApi {
769
615
  call(method: string, body: unknown, opts?: {
@@ -775,7 +621,7 @@ export interface TelegramTransportOptions {
775
621
  botToken: string;
776
622
  apiBase?: string;
777
623
  fetchImpl?: typeof fetch;
778
- setTimeoutImpl?: typeof setTimeout;
624
+ setTimeoutImpl?: (callback: () => void, ms?: number) => Timer | NodeJS.Timeout;
779
625
  }
780
626
  /** Telegram Bot API transport: HTTP JSON/multipart details stay out of daemon orchestration. */
781
627
  export declare class TelegramBotTransport implements BotApi {
@@ -826,12 +672,15 @@ export declare class TelegramUpdatePoller {
826
672
  pollOnceResult(signal?: AbortSignal): Promise<TelegramPollResult>;
827
673
  }
828
674
  /** Mutable dispatch state shared by session frames and inbound Telegram updates. */
675
+ export type InboundReactionAction = "none" | "queued" | "consumed" | "retract";
676
+ /** Exact daemon reaction correction for a session-side inbound acknowledgement. */
677
+ export declare function inboundReactionAction(state: unknown, hasTarget: boolean): InboundReactionAction;
829
678
  export declare class TelegramEventDispatchState {
830
679
  readonly busy: Set<string>;
831
680
  readonly inboundReactions: Map<number, {
832
681
  messageId: number;
833
682
  socketLease?: {
834
- session: SessionSocket;
683
+ session: AttachmentSession;
835
684
  token: number;
836
685
  logicalSessionId: string;
837
686
  };
@@ -863,9 +712,8 @@ export interface TelegramDaemonOptions {
863
712
  apiBase?: string;
864
713
  fetchImpl?: typeof fetch;
865
714
  fs?: TelegramDaemonFs;
866
- WebSocketImpl?: typeof WebSocket;
867
715
  now?: () => number;
868
- setTimeoutImpl?: typeof setTimeout;
716
+ setTimeoutImpl?: (callback: () => void, ms?: number) => Timer | NodeJS.Timeout;
869
717
  clearTimeoutImpl?: typeof clearTimeout;
870
718
  setIntervalImpl?: typeof setInterval;
871
719
  clearIntervalImpl?: typeof clearInterval;
@@ -875,30 +723,14 @@ export interface TelegramDaemonOptions {
875
723
  idleTimeoutMs?: number;
876
724
  /** TTL for durable topic-adoption intents (default 10 minutes). Observed, not a fixed contract. */
877
725
  adoptionIntentTtlMs?: number;
878
- scanIntervalMs?: number;
879
726
  pid?: number;
880
- /** Liveness probe for skipping dead-PID endpoint records in {@link TelegramNotificationDaemon.scanRoots}. */
881
- pidAlive?: (pid: number) => boolean;
882
727
  pidIncarnation?: (pid: number) => string | undefined;
883
728
  botApi?: BotApi;
884
729
  control?: DaemonControlHooks;
885
- /**
886
- * Factory for the session-lifecycle control server. Defaults to the real
887
- * native NotificationControlServer; tests inject a fake to verify the
888
- * owner-bound start/stop lifecycle without a socket. When `undefined` AND no
889
- * default applies (e.g. lifecycle control disabled), no control server starts.
890
- */
891
- createLifecycleControlServer?: LifecycleControlServerFactory | null;
892
- /**
893
- * Test seam for observing the exact production lifecycle dependency input.
894
- * Production defaults to {@link buildOrchestratorDeps}.
895
- */
896
- createLifecycleOrchestratorDeps?: (input: {
897
- pairedChatId: string;
898
- agentNotificationsDir: string;
899
- sessionsRoot: string;
900
- auditRedactionKey: Uint8Array;
901
- }) => OrchestratorDeps;
730
+ /** SDK-owned lifecycle service seam; production constructs it from agentDir. */
731
+ createLifecycleService?: (agentDir: string) => AgentDirSessionLifecycleService;
732
+ /** Narrow Router transport seams; provider callbacks are owned by Telegram. */
733
+ routerDeps?: SessionRouterProviderDeps;
902
734
  /** Rich text promotion (enabled by default; see rich-render.ts). */
903
735
  rich?: {
904
736
  enabled: boolean;
@@ -914,13 +746,20 @@ export interface TelegramDaemonOptions {
914
746
  /** Controls which Telegram sends play an audible notification. Defaults to all. */
915
747
  sound?: "all" | "important" | "none";
916
748
  /**
917
- * Per-session Telegram forum-topic naming. `nameTemplate` supports the
918
- * `{repo}`, `{branch}`, and `{title}` placeholders; unset preserves the
919
- * built-in `{repo}/{branch} - {title}` composition and its fallbacks.
749
+ * Telegram forum-topic naming. `nameTemplate` supports the `{repo}`,
750
+ * `{branch}`, and `{title}` placeholders; unset uses the GJC session title
751
+ * and falls back to a short session id while the title is unavailable.
920
752
  */
921
753
  topics?: {
922
754
  nameTemplate?: string;
923
755
  };
756
+ /**
757
+ * Require every connected session to explicitly advertise Telegram topic
758
+ * eligibility in its identity header. Production daemon owners MUST enable
759
+ * this; the default is permissive only for direct embedded legacy clients and
760
+ * tests, and is never a provenance input supplied by notification factories.
761
+ */
762
+ requireTelegramTopicEligibility?: boolean;
924
763
  /**
925
764
  * Optional compare-and-set store for installations that share topic state
926
765
  * across hosts. When configured, every publication is fenced by it.
@@ -928,44 +767,55 @@ export interface TelegramDaemonOptions {
928
767
  topicRegistryAuthority?: TopicRegistryCasAuthority;
929
768
  /** Stable host-local identity. Required whenever a shared authority is configured. */
930
769
  installationHostId?: string;
770
+ /**
771
+ * Orphan-owner reconciliation seam. Production wires the bounded orphan reap
772
+ * (marker-registry-authorized process-group termination of superseded daemon
773
+ * owners) so the daemon fences stale pollers before it becomes poll-capable
774
+ * and re-runs reconciliation periodically. Injectable for deterministic tests.
775
+ */
776
+ orphanReap?: () => Promise<void>;
777
+ /** Periodic reconciliation cadence; defaults to ORPHAN_REAP_INTERVAL_MS. */
778
+ orphanReapIntervalMs?: number;
931
779
  }
932
- interface SessionSocket {
933
- /** Immutable key of the transport endpoint that owns this socket. */
780
+ interface AttachmentSession {
781
+ /** Provider presentation metadata bound to one provider-local subscription. */
934
782
  sessionId: string;
935
- /** Current logical session carried by valid threaded frames on this transport. */
936
783
  logicalSessionId: string;
937
- /** Endpoint metadata proved this logical id belongs to this discovery record. */
784
+ /**
785
+ * True only when the connected host explicitly owns a Telegram forum topic;
786
+ * only such producer-admitted sessions may own forum topics.
787
+ */
788
+ telegramTopicsEnabled: boolean;
938
789
  logicalSessionIdTrusted: boolean;
939
- token: string;
940
- endpointKey: string;
941
- endpointDigest: string;
942
- hostGeneration: number;
943
- ws: WebSocket;
944
- /** Timestamp (via opts.now) at which this socket began connecting. */
945
- connectingSince: number;
790
+ readonly subscription: NotificationSubscription;
791
+ readonly transport: {
792
+ readyState: number;
793
+ send(data: string): Promise<void>;
794
+ close(): void;
795
+ };
796
+ /** Opaque local identity used only to fence presentation state. */
797
+ attachmentKey: string;
798
+ /** Immutable SDK lifecycle generation from Router; never changed by replay payloads. */
799
+ lifecycleGeneration: number;
800
+ /** Telegram event/replay generation used only for cursor and publication ids. */
801
+ replayGeneration: number;
946
802
  pending: Map<string, {
947
803
  sessionId: string;
948
804
  actionId: string;
949
805
  }>;
950
- /** True once the server advertised the `client_ping_pong` capability. */
951
806
  capable: boolean;
952
807
  ephemeralCapable: boolean;
953
- /** Tool activity contract advertised by the connected host. */
954
808
  toolActivityCapability?: "v1" | "v2";
955
- /** Timestamp (via opts.now) of the last received pong; seeds the TTL window. */
956
809
  lastPongAt: number;
957
- /** Nonce of the most recent in-flight ping, if any. */
958
810
  awaitingNonce: string | undefined;
959
- /** Per-session liveness interval handle (only set for capable sessions). */
960
- pingTimer: ReturnType<typeof setInterval> | undefined;
961
- /** Correlation id for the startup replay barrier. */
811
+ pingTimer: NodeJS.Timeout | undefined;
962
812
  replayId: string;
963
- /** Sequence cursor sent by the current startup replay request. */
964
- replaySinceSeq: number;
965
- /** Queues live frames until startup replay is applied. */
966
813
  replayPending: boolean;
967
- replayQueue: Record<string, unknown>[];
968
- /** Trusted recovery may not route until its durable endpoint lease is committed. */
814
+ replayQueue: Array<{
815
+ frame: Record<string, unknown>;
816
+ publicationId?: string;
817
+ }>;
818
+ activePublicationId?: string;
969
819
  recoveryLease?: {
970
820
  state: "pending" | "authorized" | "rejected";
971
821
  logicalSessionId: string;
@@ -996,9 +846,8 @@ export declare class TelegramNotificationDaemon {
996
846
  private readonly replayToolActivityEpochs;
997
847
  private toolShutdownBarrier;
998
848
  private toolActivityAmbiguous;
999
- readonly sessions: Map<string, SessionSocket>;
849
+ readonly sessions: Map<string, AttachmentSession>;
1000
850
  private readonly runtime;
1001
- private readonly sessionRouter;
1002
851
  private readonly pollConflictBackoff;
1003
852
  private readonly loopBackoff;
1004
853
  private running;
@@ -1010,11 +859,7 @@ export declare class TelegramNotificationDaemon {
1010
859
  private readonly topics;
1011
860
  /** Stable host-local identity; never persisted in shared topic authority. */
1012
861
  private installationHostId;
1013
- /** Serializes registry snapshots so an older atomic write cannot overwrite newer rename state. */
1014
- /** Legacy sockets have no durable token, so explicit teardown is their revocation fence. */
1015
- private readonly droppedSessions;
1016
862
  private topicsPersistQueue;
1017
- /** Serializes recovery compare/write/publish claims so competing endpoint migrations cannot durably diverge. */
1018
863
  private recoveryBindingClaimQueue;
1019
864
  /** Durable compensation fences retry under supervision until persistence succeeds. */
1020
865
  private readonly compensationFenceRetries;
@@ -1035,16 +880,12 @@ export declare class TelegramNotificationDaemon {
1035
880
  private readonly draftStream;
1036
881
  /** Identity-bearing sessions by repo/branch surface, used to avoid transient duplicate topics. */
1037
882
  private readonly topicOwnerByIdentity;
1038
- /** Ephemeral legacy topic owners retained across a same-socket config rekey. */
1039
- private readonly legacyTopicOwners;
1040
883
  /** Preserved initiator topics must not route through a rekeyed transport. */
1041
884
  private readonly preservedInitiatorTopics;
1042
885
  /** Non-identity frames held until identity creates the correct thread. */
1043
886
  private readonly pendingThreadedFrames;
1044
887
  /** Durable endpoint leases for sessions that already sent an authorized session_closed. */
1045
888
  private readonly closedEndpointKeys;
1046
- /** Exactly one authorized transport may route each recovered logical session. */
1047
- private readonly logicalSessionOwners;
1048
889
  private nextSocketLeaseToken;
1049
890
  /** True once the daemon has nudged the user to enable Threaded Mode. */
1050
891
  private threadedFallbackNoticeSent;
@@ -1060,22 +901,6 @@ export declare class TelegramNotificationDaemon {
1060
901
  private get busy();
1061
902
  /** Inbound update id → originating Telegram message, for delivery reactions. */
1062
903
  private get inboundReactions();
1063
- /**
1064
- * The owner-bound session-lifecycle control server (create/close/resume).
1065
- * Started in {@link run} after ownership is confirmed (so exactly one owner
1066
- * ever runs one), stopped in run()'s finally on any exit path.
1067
- */
1068
- private controlServer;
1069
- /** True while lifecycle control is active, so the loop keeps polling at idle. */
1070
- private lifecycleControlActive;
1071
- /** Control token (in-memory) the loopback client presents; never persisted/logged. */
1072
- private controlToken;
1073
- /** Loopback WS client to the daemon's own control endpoint (Option A real wire path). */
1074
- private controlClient;
1075
- /** Pending lifecycle responses awaiting a control-endpoint reply, by requestId. */
1076
- private readonly pendingLifecycle;
1077
- /** Monotonic counter for unique lifecycle request ids. */
1078
- private lifecycleSeq;
1079
904
  /** Attempt tombstones live for the daemon lifetime so a commit key can never send twice. */
1080
905
  private readonly selectedAckCache;
1081
906
  private cacheSelectedAck;
@@ -1087,42 +912,44 @@ export declare class TelegramNotificationDaemon {
1087
912
  * ~25s getUpdates timeout. Safe to call from a signal handler.
1088
913
  */
1089
914
  requestStop(_reason?: "reload" | "stop" | "signal"): void;
1090
- /**
1091
- * Start the owner-bound lifecycle control server and wire it to the
1092
- * orchestrator. Called from {@link run} ONLY after ownership is confirmed, so
1093
- * exactly one owner ever starts exactly one control server (no second poller
1094
- * / 409). A control-server failure degrades gracefully: the daemon keeps
1095
- * serving notifications without lifecycle control. Returns true when started.
1096
- */
1097
- private startLifecycleControl;
1098
- /** Stop the lifecycle control server (idempotent); called from run()'s finally. */
1099
- private stopLifecycleControl;
1100
- /**
1101
- * Connect the loopback control client and resolve responses by requestId.
1102
- * Resolves true once the socket is OPEN (bounded), false on error/timeout, so
1103
- * the caller only marks lifecycle control active when commands can be sent.
1104
- */
1105
- private connectControlClient;
1106
- /** Send a lifecycle frame over the loopback client and await the response. */
1107
- private submitLifecycleFrame;
1108
- private nextLifecycleRequestId;
1109
- /** Build an authenticated lifecycle frame from a parsed command + identity. */
1110
- private buildLifecycleFrame;
1111
- /**
1112
- * Handle a paired-chat /session_* command: validate (shared validator),
1113
- * route to the control endpoint, and reply with the outcome. Returns true
1114
- * when the message was a lifecycle command (so the caller stops processing).
1115
- */
915
+ /** Handle a paired-chat /session_* command through the SDK lifecycle service. */
1116
916
  private handleLifecycleCommand;
1117
917
  private refreshBotIdentity;
1118
- /** Map a lifecycle response/error to a user-facing message (G010 surfacing). */
1119
- private formatLifecycleResponse;
1120
918
  private callBotApi;
1121
919
  private validationTopicDestination;
1122
920
  private readonly callBotApiClassified;
1123
- private botApiWithOutcomeCollector;
1124
921
  constructor(opts: TelegramDaemonOptions);
1125
- private createSessionRouter;
922
+ /** @internal Test-only access to durable publication receipt transitions. */
923
+ publicationReceiptHarnessForTest(): {
924
+ claimPublication: (publicationId: string) => Promise<void>;
925
+ markPublicationAttempted: (publicationId: string) => Promise<void>;
926
+ markPublicationDelivered: (publicationId: string) => Promise<void>;
927
+ markPublicationRejected: (publicationId: string, definitiveProviderRejection?: boolean) => Promise<void>;
928
+ loadPresentationState: () => Promise<void>;
929
+ publicationShouldSuppress: (publicationId: string) => boolean;
930
+ publicationSettlement: (publicationId: string) => PromiseWithResolvers<void>;
931
+ settlePublication: (publicationId: string) => void;
932
+ drainPersistence: () => Promise<void>;
933
+ };
934
+ /** @internal Test-only access to attachment routing lifecycle transitions. */
935
+ attachmentRoutingHarnessForTest(): {
936
+ attach: (subscription: NotificationSubscription) => void;
937
+ remove: (subscription: NotificationSubscription, reason: "removed" | "replaced" | "replaced_same_generation") => Promise<void>;
938
+ ownsLogicalSession: (sessionId: string) => boolean;
939
+ cleanupReceipts: () => {
940
+ sessionId: string;
941
+ subscriptionId: string;
942
+ state: "pending" | "failed" | "completed";
943
+ reason?: string;
944
+ }[];
945
+ };
946
+ /** @internal Test-only access to the durable archive retry drain. */
947
+ archiveReconciliationHarnessForTest(): {
948
+ reconcilePendingTopicDeletes: () => Promise<void>;
949
+ archiveAuthorizedTopics: () => Promise<void>;
950
+ };
951
+ /** @internal Test-only access to explicit durable archive reconciliation. */
952
+ private archiveAuthorizedTopicsForTest;
1126
953
  loadAliases(): Promise<void>;
1127
954
  persistAliases(): Promise<void>;
1128
955
  loadSeenUpdateIds(): Promise<void>;
@@ -1131,29 +958,12 @@ export declare class TelegramNotificationDaemon {
1131
958
  private rememberSeenUpdateId;
1132
959
  private reserveSeenUpdateId;
1133
960
  private releaseSeenUpdateId;
1134
- scanRoots(): Promise<void>;
1135
- connectSession(sessionId: string, url: string, token: string): SessionSocket;
1136
- /**
1137
- * Start ack-based liveness for a session whose server advertised the
1138
- * `client_ping_pong` capability. Each interval drops the session when no pong
1139
- * has arrived within the TTL (the half-open case the socket never signals via
1140
- * `close`), otherwise sends a fresh application-level ping. The timer is bound
1141
- * to this exact session object.
1142
- */
1143
- private startLiveness;
1144
- /**
1145
- * Idempotent, identity-guarded session teardown. Clears the liveness timer,
1146
- * removes the map entry only when it still points at this exact session object
1147
- * (so a delayed old close cannot delete a replacement), and best-effort closes
1148
- * the socket. `scanRoots()` then reconnects the session.
1149
- */
961
+ /** Idempotent, identity-guarded attachment teardown. */
1150
962
  private enqueueToolTerminalization;
1151
- private scheduleVisibleToolTerminalization;
1152
963
  private beginToolActivityShutdown;
1153
- private dropSession;
1154
964
  private deleteMessageRoutes;
1155
965
  revokeCallbackAliases(socketLease: {
1156
- session: SessionSocket;
966
+ session: AttachmentSession;
1157
967
  token: number;
1158
968
  logicalSessionId: string;
1159
969
  }): void;
@@ -1165,7 +975,7 @@ export declare class TelegramNotificationDaemon {
1165
975
  * usable template applies so the caller uses the built-in composition. The
1166
976
  * template is honored only if it is non-blank AND every placeholder it
1167
977
  * references (`{repo}`, `{branch}`, `{title}`) has a value for this session,
1168
- * which preserves the default title/repo/branch fallbacks and prevents
978
+ * which preserves the default session-title fallback and prevents
1169
979
  * half-filled names with dangling separators. Unknown placeholders are left
1170
980
  * verbatim.
1171
981
  */
@@ -1195,7 +1005,6 @@ export declare class TelegramNotificationDaemon {
1195
1005
  private topicLeaseIsCurrent;
1196
1006
  /** Best-effort re-assertion for a durable user-owned topic name. */
1197
1007
  private reconcileUserTopicName;
1198
- private rememberPendingThreadedFrame;
1199
1008
  private flushPendingThreadedFrames;
1200
1009
  /**
1201
1010
  * Resolve (creating once via `createForumTopic`) the forum topic for a
@@ -1204,8 +1013,6 @@ export declare class TelegramNotificationDaemon {
1204
1013
  * one-time nudge) or drop fail-closed for a non-private chat.
1205
1014
  */
1206
1015
  private ensureTopic;
1207
- private topicPastOrphanGrace;
1208
- private observeOrphanedTopic;
1209
1016
  /** Best-effort delete of a session topic once its local notification endpoint shuts down. */
1210
1017
  /** Join all close, compensation, orphan, and restart callers for one session. */
1211
1018
  private archiveTopic;
@@ -1219,8 +1026,10 @@ export declare class TelegramNotificationDaemon {
1219
1026
  loadAdoptionIntents(): Promise<void>;
1220
1027
  private startAdoptionSweepTimer;
1221
1028
  private stopAdoptionSweepTimer;
1222
- /** Retry crash-interrupted topic archives only when the durable backoff permits it. */
1029
+ /** Retry crash-interrupted or ambiguous topic archives only when the durable backoff permits it. */
1223
1030
  private reconcilePendingTopicDeletes;
1031
+ private startArchiveRetryTimer;
1032
+ private stopArchiveRetryTimer;
1224
1033
  /** Download one Telegram file with the Bot API's 20 MiB ceiling and one end-to-end deadline. */
1225
1034
  private downloadTelegramFile;
1226
1035
  /**
@@ -1254,7 +1063,6 @@ export declare class TelegramNotificationDaemon {
1254
1063
  */
1255
1064
  private flushChain;
1256
1065
  private flushPool;
1257
- /** Drain the shared rate-limit pool and deliver each granted send to its topic. */
1258
1066
  private submitPool;
1259
1067
  private flushPoolInner;
1260
1068
  /**
@@ -1295,35 +1103,36 @@ export declare class TelegramNotificationDaemon {
1295
1103
  */
1296
1104
  private attachedEndpointCount;
1297
1105
  private renewOwnershipHeartbeat;
1106
+ private renewActiveTopicLeases;
1298
1107
  /**
1299
1108
  * Ownership must be renewed independently of Telegram's 25-second long poll:
1300
1109
  * the ownership TTL is shorter than a single poll request.
1301
1110
  */
1302
1111
  private startOwnershipHeartbeatTimer;
1303
1112
  private stopOwnershipHeartbeatTimer;
1113
+ private startTopicReconcileTimer;
1114
+ private stopTopicReconcileTimer;
1304
1115
  /**
1305
- * Run a root scan, guarding against overlapping scans from the timer + loop.
1306
- *
1307
- * A reconciliation pass is retried every scan interval, so a failed one must
1308
- * never tear the owner down. Both callers are fatal boundaries: the timer
1309
- * fires and forgets, and the run loop awaits without a handler. A rejection
1310
- * escaping either one (a shared topic authority whose lock or compare-and-set
1311
- * is momentarily unavailable is the observed case) reaches the process-level
1312
- * handler, which exits the daemon: every session topic is then left as an
1313
- * unarchived shell that answers nothing, and the sessions that were still
1314
- * live lose notifications too. Report the failure and let the next scan
1315
- * retry instead.
1116
+ * Periodic orphan-owner reconciliation. The daemon re-runs the bounded orphan
1117
+ * reap on a fixed cadence so a stale poller that survived the startup sweep
1118
+ * (or appeared after it) is eventually fenced. Failures are logged, never
1119
+ * fatal: reconciliation is convergence work, not a run precondition.
1316
1120
  */
1317
- private runScan;
1318
- private startScanTimer;
1319
- private stopScanTimer;
1121
+ private startOrphanReapTimer;
1122
+ private stopOrphanReapTimer;
1320
1123
  /** Send a single `typing` chat action into a busy session's topic (best-effort). */
1321
1124
  private sendTyping;
1322
1125
  /** Set a native reaction on an inbound thread message (best-effort). */
1323
1126
  private setReaction;
1127
+ /**
1128
+ * Retract a native reaction by sending the empty reaction list the Bot API
1129
+ * requires; an empty `emoji` string is not a valid reaction and is silently
1130
+ * rejected, leaving the stale queued marker visible.
1131
+ */
1132
+ private retractReaction;
1324
1133
  private startTypingTimer;
1325
1134
  private stopTypingTimer;
1326
- handleSessionMessage(session: SessionSocket, msg: any): Promise<void>;
1135
+ handleSessionMessage(session: AttachmentSession, msg: any, publicationId?: string): Promise<void>;
1327
1136
  private answerCallbackQueryBestEffort;
1328
1137
  private sendStaleGuidance;
1329
1138
  /**