@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
@@ -1,10 +1,12 @@
1
1
  /**
2
2
  * MCP (Model Context Protocol) type definitions.
3
3
  *
4
- * Based on MCP specification 2025-03-26:
5
- * https://modelcontextprotocol.io/specification/2025-03-26/
4
+ * Legacy sessionful surface based on MCP specification 2025-03-26; the modern
5
+ * stateless generation (2026-07-28, "MCP v2") is modeled in ./protocol.ts.
6
+ * https://modelcontextprotocol.io/specification/2026-07-28/
6
7
  */
7
8
  import type { SourceMeta } from "../capability/types";
9
+ import type { MCPCacheHints, MCPProtocolObservation, MCPProtocolPreference } from "./protocol";
8
10
  export interface JsonRpcRequest {
9
11
  jsonrpc: "2.0";
10
12
  id: string | number;
@@ -47,15 +49,23 @@ export interface MCPServerConfigBase {
47
49
  enabled?: boolean;
48
50
  /**
49
51
  * Whether an explicit runtime MCP consumer should connect this server
50
- * automatically when that consumer starts (default: true). Normal standalone
51
- * `gjc`, `gjc --tmux`, and print-mode sessions do not consume `gjc mcp`
52
- * registrations today.
52
+ * automatically when that consumer starts (default: true). Ordinary
53
+ * standalone `gjc`, `gjc --tmux`, and print-mode sessions honor autoload for
54
+ * conventional registrations; `autoload: false` keeps a server configured
55
+ * for on-demand `/mcp` connection. `--no-mcp` opts a session out entirely.
53
56
  */
54
57
  autoload?: boolean;
55
58
  /** Connection timeout in milliseconds (default: 30000) */
56
59
  timeout?: number;
57
60
  /** Pool identity mode. W2 defaults to one physical connection per session. */
58
61
  sharing?: "per-session" | "shared";
62
+ /**
63
+ * Protocol preference for remote (http/sse) servers: `auto` (default) negotiates
64
+ * the modern 2026-07-28 stateless protocol first with a bounded, observable
65
+ * legacy fallback; `2026-07-28` is strict modern-only; `legacy` forces the
66
+ * bounded compatibility handshake. Ignored by stdio servers (always legacy-era).
67
+ */
68
+ protocol?: MCPProtocolPreference;
59
69
  /** Authentication configuration (optional) */
60
70
  auth?: MCPAuthConfig;
61
71
  /** OAuth configuration for servers requiring explicit client credentials */
@@ -113,6 +123,10 @@ export interface MCPClientCapabilities {
113
123
  listChanged?: boolean;
114
124
  };
115
125
  sampling?: Record<string, never>;
126
+ /** Form-mode elicitation support (modern MRTR `elicitation/create` input requests). */
127
+ elicitation?: {
128
+ form?: Record<string, never>;
129
+ };
116
130
  experimental?: Record<string, unknown>;
117
131
  }
118
132
  /** MCP server capabilities */
@@ -155,7 +169,7 @@ export interface MCPToolDefinition {
155
169
  };
156
170
  }
157
171
  /** tools/list response */
158
- export interface MCPToolsListResult {
172
+ export interface MCPToolsListResult extends MCPCacheHints {
159
173
  tools: MCPToolDefinition[];
160
174
  nextCursor?: string;
161
175
  }
@@ -195,12 +209,66 @@ export interface MCPToolCallResult {
195
209
  export declare class MCPExpectedFailure extends Error {
196
210
  constructor(cause?: unknown);
197
211
  }
212
+ /** HTTP-level request failure carrying structured detail for era classification. */
213
+ export declare class MCPHttpRequestError extends Error {
214
+ /** HTTP status code. */
215
+ readonly status: number;
216
+ /** Parsed JSON body when the error payload was JSON; undefined otherwise. */
217
+ readonly body: unknown;
218
+ constructor(status: number, message: string, body?: unknown);
219
+ }
220
+ /** JSON-RPC error response failure carrying the protocol error code. */
221
+ export declare class MCPJsonRpcError extends Error {
222
+ readonly code: number;
223
+ readonly data?: unknown;
224
+ constructor(code: number, message: string, data?: unknown);
225
+ }
198
226
  export interface MCPRequestOptions {
199
227
  /** Abort signal (e.g. Escape-to-interrupt) */
200
228
  signal?: AbortSignal;
201
229
  /** Shared lease policy: never retry the original request after transport/auth failure. */
202
230
  noReplay?: boolean;
231
+ /**
232
+ * Handler for modern MRTR `input_required` results (elicitation, roots, sampling).
233
+ * When absent, an `input_required` result fails explicitly instead of hanging.
234
+ */
235
+ inputHandler?: MCPInputRequestHandler;
236
+ /** Extra mirrored headers for modern requests (`Mcp-Param-*` from x-mcp-header bindings). */
237
+ mcpParamHeaders?: Record<string, string>;
238
+ }
239
+ /** Context for one server input request gathered during a modern MRTR exchange. */
240
+ export interface MCPInputRequestContext {
241
+ /** Server being called. */
242
+ serverName: string;
243
+ /** Original client request method (`tools/call`, `prompts/get`, `resources/read`). */
244
+ originMethod: string;
245
+ /**
246
+ * Stable correlation id shared by the initial request and its exactly-once
247
+ * retry, fencing the accepted input to this exchange.
248
+ */
249
+ correlationId: string;
250
+ /** Request-scoped abort signal (cancellation/timeout of the original call). */
251
+ signal?: AbortSignal;
203
252
  }
253
+ /**
254
+ * Outcome of gathering one server input request. `result` values are placed in
255
+ * the retry's `inputResponses` under the request key. `failed` outcomes abort
256
+ * the MRTR exchange with an explicit error — except elicitation decline/cancel,
257
+ * which the handler expresses as an ElicitResult-shaped `result`.
258
+ */
259
+ export type MCPInputRequestHandlerResult = {
260
+ kind: "result";
261
+ result: unknown;
262
+ } | {
263
+ kind: "failed";
264
+ reason: "declined" | "cancelled" | "timeout" | "unavailable" | "error";
265
+ message?: string;
266
+ };
267
+ /** Handler for one server input request inside an `input_required` result. */
268
+ export type MCPInputRequestHandler = (key: string, request: {
269
+ method: string;
270
+ params?: Record<string, unknown>;
271
+ }, context: MCPInputRequestContext) => Promise<MCPInputRequestHandlerResult>;
204
272
  /** Transport interface - abstracts stdio/http */
205
273
  export interface MCPTransport {
206
274
  /** Send a request and wait for response */
@@ -246,6 +314,15 @@ export interface MCPServerConnection {
246
314
  instructions?: string;
247
315
  /** Cached prompts (populated on demand) */
248
316
  prompts?: MCPPrompt[];
317
+ /**
318
+ * Authoritative protocol observation for this connection (preference,
319
+ * negotiated era/version, downgrade decision, deprecation state). Secret-free.
320
+ */
321
+ protocol: MCPProtocolObservation;
322
+ /** Freshness deadline (ms epoch) for the cached tool catalog, from server ttlMs hints. */
323
+ toolsFreshUntil?: number;
324
+ /** Cache scope of the cached tool catalog; private entries never cross credential identities. */
325
+ toolsCacheScope?: "public" | "private";
249
326
  }
250
327
  /** MCP tool with server context */
251
328
  export interface MCPToolWithServer {
@@ -278,12 +355,12 @@ export interface MCPResourceTemplate {
278
355
  annotations?: MCPAnnotations;
279
356
  }
280
357
  /** Result of resources/list */
281
- export interface MCPResourcesListResult {
358
+ export interface MCPResourcesListResult extends MCPCacheHints {
282
359
  resources: MCPResource[];
283
360
  nextCursor?: string;
284
361
  }
285
362
  /** Result of resources/templates/list */
286
- export interface MCPResourceTemplatesListResult {
363
+ export interface MCPResourceTemplatesListResult extends MCPCacheHints {
287
364
  resourceTemplates: MCPResourceTemplate[];
288
365
  nextCursor?: string;
289
366
  }
@@ -295,7 +372,7 @@ export interface MCPResourceContentItem {
295
372
  blob?: string;
296
373
  }
297
374
  /** Result of resources/read */
298
- export interface MCPResourceReadResult {
375
+ export interface MCPResourceReadResult extends MCPCacheHints {
299
376
  contents: MCPResourceContentItem[];
300
377
  }
301
378
  /** Params for resources/read */
@@ -320,7 +397,7 @@ export interface MCPPrompt {
320
397
  arguments?: MCPPromptArgument[];
321
398
  }
322
399
  /** Result of prompts/list */
323
- export interface MCPPromptsListResult {
400
+ export interface MCPPromptsListResult extends MCPCacheHints {
324
401
  prompts: MCPPrompt[];
325
402
  nextCursor?: string;
326
403
  }
@@ -347,6 +424,21 @@ export interface MCPGetPromptResult {
347
424
  description?: string;
348
425
  messages: MCPPromptMessage[];
349
426
  }
427
+ /** Result of the optional modern `server/discover` request. */
428
+ export interface MCPDiscoverResult extends MCPCacheHints {
429
+ /** Protocol versions the server supports. */
430
+ supportedVersions: string[];
431
+ /** Capabilities the server supports. */
432
+ capabilities: MCPServerCapabilities;
433
+ /** Optional natural-language usage guidance. */
434
+ instructions?: string;
435
+ /** Result metadata; `io.modelcontextprotocol/serverInfo` carries the identity. */
436
+ _meta?: Record<string, unknown>;
437
+ }
438
+ /** Decoded `server/discover` payload with the extracted server identity. */
439
+ export interface MCPDiscoverResultLite extends MCPDiscoverResult {
440
+ serverInfo?: MCPImplementation;
441
+ }
350
442
  /** MCP server notification method names */
351
443
  export declare const MCPNotificationMethods: {
352
444
  readonly TOOLS_LIST_CHANGED: "notifications/tools/list_changed";
@@ -1,4 +1,6 @@
1
- import { SdkClient, SdkClientError, type SdkFrame } from "../client";
1
+ import { type SdkClient, SdkClientError } from "../client";
2
+ import type { AbortScope } from "../host/control/operations";
3
+ import { type SessionAttachment, type SessionRouter } from "../router";
2
4
  import { ACP_SESSION_RECONNECT } from "../session-reconnect";
3
5
  import type { SessionLifecycleMcpServer } from "./mcp";
4
6
  type JsonObject = Record<string, unknown>;
@@ -14,9 +16,11 @@ export interface AcpProviderRegistration {
14
16
  definitions: unknown;
15
17
  }
16
18
  export interface AcpSdkAdapterOptions {
17
- url: string;
18
- token: string;
19
+ /** Broker lifecycle transport only. Live session work requires `router` plus an opaque attachment. */
19
20
  client?: SdkClient;
21
+ router?: SessionRouter;
22
+ attachment?: SessionAttachment;
23
+ sessionId?: string;
20
24
  connection?: AcpReverseConnection;
21
25
  providers?: AcpProviderRegistration[];
22
26
  /** Lease IDs persisted by the ACP host across a WebSocket reconnect. */
@@ -34,7 +38,7 @@ export declare class AcpSdkAdapterError extends Error {
34
38
  */
35
39
  export declare function acpMcpLaunchFailure(error: unknown, mcpServers: SessionLifecycleMcpServer[]): unknown;
36
40
  export type AcpReconnectFailedHandler = (error: SdkClientError) => void;
37
- export type AcpFrameHandler = (frame: SdkFrame) => void;
41
+ export type AcpFrameHandler = (frame: Record<string, unknown>) => void;
38
42
  export { ACP_SESSION_RECONNECT };
39
43
  /**
40
44
  * Pure ACP-to-SDK adapter. It deliberately owns neither an AgentSession nor an
@@ -44,6 +48,10 @@ export declare class AcpSdkAdapter {
44
48
  #private;
45
49
  constructor(options: AcpSdkAdapterOptions);
46
50
  static connect(options: AcpSdkAdapterOptions): Promise<AcpSdkAdapter>;
51
+ acceptAttachment(attachment: SessionAttachment): void;
52
+ revokeAttachment(attachment: SessionAttachment): void;
53
+ attachmentReady(attachment: SessionAttachment): Promise<void>;
54
+ acceptFrame(frame: Record<string, unknown>): void;
47
55
  get leaseIds(): ReadonlyMap<string, string>;
48
56
  get connectionId(): string | undefined;
49
57
  onReconnectFailed(handler: AcpReconnectFailedHandler): () => void;
@@ -51,11 +59,24 @@ export declare class AcpSdkAdapter {
51
59
  start(): Promise<void>;
52
60
  close(): Promise<void>;
53
61
  prompt(params: JsonObject | string): Promise<unknown>;
54
- cancel(): Promise<unknown>;
62
+ /**
63
+ * Ends the active turn with a C04 terminal abort. The default `scope:"turn"`
64
+ * only stops the current turn, matching the SDK `turn.abort` default and
65
+ * other ACP clients' cancel behavior; `scope:"owned"` additionally stops
66
+ * exact causal owned work (background Bash/task jobs, detached subagents) so
67
+ * an external client can terminate everything a turn spawned. Paseo keeps
68
+ * owned cancels through its provider config env
69
+ * (`GJC_ACP_ABORT_SCOPE=owned`) without source changes. A fresh bounded
70
+ * idempotency key per call keeps terminal-abort replay deterministic across
71
+ * retries.
72
+ */
73
+ cancel(scope?: AbortScope): Promise<unknown>;
55
74
  setModel(params: JsonObject | string): Promise<unknown>;
56
75
  control(operation: string, input?: JsonObject): Promise<unknown>;
57
76
  query(query: string, input?: JsonObject, cursor?: string): Promise<unknown>;
58
77
  global(operation: string, input?: JsonObject, idempotencyKey?: string): Promise<unknown>;
78
+ /** Uses lifecycle endpoint credentials only inside the ACP session owner. */
79
+ lifecycle(operation: string, input?: JsonObject, idempotencyKey?: string): Promise<unknown>;
59
80
  sdkControl(params: {
60
81
  operation: string;
61
82
  input?: JsonObject;
@@ -1,12 +1,8 @@
1
1
  import type { NativeDirectoryTreeSnapshot } from "@gajae-code/natives";
2
2
  import type { ModelProfileErrorDetails } from "../../config/model-profile-contract";
3
- import { type ElevationOperation } from "../elevation/digest";
4
- import { type ElevationAnswerAuthority, type ElevationDispatchOutcome } from "../elevation/dispatch-receipt";
5
- import { ElevationLedger, type ElevationRequester } from "../elevation/grant-ledger";
6
3
  import { type DirectoryMigrationPolicy } from "../session-directory";
7
4
  import { type BrokerDiscovery, type BrokerPublicationObservation, type RedactedBrokerDiscovery } from "./discovery";
8
5
  import { type LifecycleDurableEffectsReceipt, LifecycleLedger, type LifecycleStartupFailureReceipt } from "./lifecycle-ledger";
9
- import { OperationReceiptLedger } from "./operation-receipt-ledger";
10
6
  import { SessionIndex } from "./session-index";
11
7
  export interface BrokerSettings {
12
8
  agentDir: string;
@@ -23,7 +19,7 @@ type ResolvedBrokerSettings = {
23
19
  heartbeatTtlMs: number;
24
20
  resolveDirectoryMigration: (_cwd: string) => Promise<DirectoryMigrationPolicy>;
25
21
  };
26
- export type BrokerErrorCode = "idempotency_conflict" | "terminal_uncertain" | "broker_restarting" | "unavailable" | "endpoint_stale" | "resource_gone" | "invalid_input" | "spawn_failed" | "startup_admission_timeout" | "startup_admission_refused" | "readiness_timeout" | "close_refused" | "not_found" | "live_session" | "cleanup_pending" | "ambiguous_session" | (string & {});
22
+ export type BrokerErrorCode = "idempotency_conflict" | "terminal_uncertain" | "broker_restarting" | "unavailable" | "endpoint_stale" | "resource_gone" | "invalid_input" | "spawn_failed" | "startup_admission_timeout" | "startup_admission_refused" | "readiness_timeout" | "close_refused" | "not_found" | "live_session" | "cleanup_pending" | (string & {});
27
23
  export type BrokerCleanupIdentity = {
28
24
  dev: string;
29
25
  ino: string;
@@ -200,8 +196,6 @@ export declare class Broker {
200
196
  readonly settings: ResolvedBrokerSettings;
201
197
  readonly index: SessionIndex;
202
198
  readonly ledger: LifecycleLedger;
203
- readonly elevation: ElevationLedger;
204
- readonly operationReceipts: OperationReceiptLedger;
205
199
  discovery: BrokerDiscovery | null;
206
200
  constructor(settings: BrokerSettings);
207
201
  runStartup<T>(queueWaitMs: number, timing: StartupAdmissionTiming, task: (admittedAt: number) => Promise<T>): Promise<StartupAdmissionResult<T>>;
@@ -210,14 +204,7 @@ export declare class Broker {
210
204
  get completion(): Promise<void>;
211
205
  status(): RedactedBrokerDiscovery | null;
212
206
  heartbeat(): Promise<void>;
213
- /**
214
- * Production coalesced heartbeat checkpoint seam (C2): delegates to the session
215
- * index writer, which appends at most one `host_heartbeat` per session per
216
- * {@link SESSION_HEARTBEAT_INTERVAL_MS} for hosts that are alive and, when recorded,
217
- * still carry the same OS process incarnation. Returns the number of checkpoints
218
- * written. Used by the periodic publication watch, by session reads so a fresh
219
- * registration is observed as live, and by tests.
220
- */
207
+ /** Re-observes provably live session hosts and checkpoints their liveness. */
221
208
  heartbeatSessions(now?: number): Promise<number>;
222
209
  /**
223
210
  * Revalidate retained publication ownership and begin one synchronous effect in
@@ -238,46 +225,7 @@ export declare class Broker {
238
225
  * spawns a child the broker has no authority over.
239
226
  */
240
227
  stop(): Promise<void>;
241
- handleRequest(operation: string, input: Record<string, unknown>, idempotencyKey?: string, elevationRequestId?: string): Promise<BrokerResponse>;
242
- /**
243
- * Elevation issuance (internal). Binds the exact endpoint identity
244
- * (endpointStateRoot/generation/incarnation) from the live index record;
245
- * the request digest is broker-computed from the full `{kind,sdkId,input}`
246
- * triple with the top-level `elevationRequestId` excluded.
247
- */
248
- elevationIssue(params: {
249
- sessionId: string;
250
- operation: ElevationOperation;
251
- input: Record<string, unknown>;
252
- requester: ElevationRequester;
253
- elevationRequestId?: string;
254
- expiresInMs?: number;
255
- }): Promise<BrokerResponse>;
256
- /**
257
- * Elevation answer (internal, operator-only). There is no public
258
- * `elevation.answer` operation: this entry point is reserved for the local
259
- * operator approval surface and the separately authorized gate-answer
260
- * source, and the ledger enforces the distinct-answer-source boundary.
261
- */
262
- elevationAnswer(params: {
263
- elevationRequestId: string;
264
- answer: "approve" | "deny";
265
- presentedDigest: string;
266
- answerer: ElevationAnswerAuthority;
267
- }): Promise<BrokerResponse>;
268
- /** Single-use grant claim (internal): consumes the grant before dispatch. */
269
- elevationClaim(params: {
270
- elevationRequestId: string;
271
- }): Promise<BrokerResponse>;
272
- /** Records the dispatch outcome for a claimed grant (internal). */
273
- elevationDispatch(params: {
274
- elevationRequestId: string;
275
- outcome: ElevationDispatchOutcome;
276
- }): Promise<BrokerResponse>;
277
- /** Truthful elevation status read (internal; reconciles expiry and crash state). */
278
- elevationResolve(elevationRequestId: string): Promise<BrokerResponse>;
279
- /** Truthful elevation listing (internal). */
280
- elevationList(): Promise<BrokerResponse>;
228
+ handleRequest(operation: string, input: Record<string, unknown>, idempotencyKey?: string): Promise<BrokerResponse>;
281
229
  }
282
230
  /** Test-only hook for simulating a process crash after terminal persistence verification. */
283
231
  export declare function setTerminalPersistenceHookForTest(broker: Broker, hook: (() => void) | undefined): void;
@@ -94,6 +94,7 @@ export declare function sdkSessionCommandOverrideForTest(): {
94
94
  file: string;
95
95
  args: string[];
96
96
  } | undefined;
97
+ type BrokerIndex = Pick<Broker, "index">;
97
98
  export declare function setProcessIncarnationForTest(broker: Broker, value: ((pid: number) => string | undefined) | undefined): void;
98
99
  /** The child writes this only after its endpoint and semantic ready event are both live. */
99
100
  export declare function writeSessionLifecycleReady(root: string, id: string, effectMarker: string): Promise<void>;
@@ -165,14 +166,21 @@ export declare function sessionHostWorkInFlight(): boolean;
165
166
  * How often a live broker re-checks its own session registrations against OS
166
167
  * process liveness.
167
168
  *
168
- * This sweep can never disturb healthy work: a registration is only dropped
169
- * when `process.kill(pid, 0)` proves the exact published pid is gone, and a
170
- * working host answers that probe for its entire life no matter how long a turn
171
- * runs. One minute keeps `gjc_sessions`/`session.get_endpoint` from advertising
172
- * a corpse for longer than a single poll while costing one index refresh per
173
- * minute on an otherwise idle broker.
169
+ * This sweep can never disturb healthy work: a registration is dropped only when
170
+ * `observeProcess` proves its exact published process identity exited. A live
171
+ * replacement at the same pid retires the stale registration without being
172
+ * signaled. One minute keeps `gjc_sessions`/`session.get_endpoint` from
173
+ * advertising a corpse for longer than a single poll while costing one index
174
+ * refresh per minute on an otherwise idle broker.
174
175
  */
175
176
  export declare const BROKER_DEAD_REGISTRATION_SWEEP_MS = 60000;
177
+ /**
178
+ * Registrations reaped per sweep. Every reap is its own locked index transaction,
179
+ * so an uncapped sweep over a long-lived index turns one broker into a continuous
180
+ * holder of the shared session-index lock and starves unrelated `gjc` launches out
181
+ * of their bounded retry budget. Surplus dead rows are reaped by later sweeps.
182
+ */
183
+ export declare const BROKER_DEAD_REGISTRATION_SWEEP_LIMIT = 64;
176
184
  /** One reaped registration, as recorded by {@link reapDeadSessionRegistrations}. */
177
185
  export interface ReapedSessionRegistration {
178
186
  sessionId: string;
@@ -188,13 +196,11 @@ export interface ReapedSessionRegistration {
188
196
  * missing heartbeat merely makes a session read as not-live — the host may
189
197
  * still be running ahead of the next heartbeat checkpoint pass, so it is never
190
198
  * grounds for a reap. EPERM and unreadable incarnations stay "uncertain", so an
191
- * alien or unreadable process is never mistaken for a dead one. Registrations
192
- * already terminal or marked `terminalUncertain` are left alone: their
193
- * disposition belongs to the terminal-uncertainty reconciliation path, and
194
- * silently dropping them would turn a fail-closed `session.close`/
195
- * `session.delete` refusal into `not_found`.
199
+ * alien or unreadable process is never mistaken for a dead one. Terminal and
200
+ * terminal-uncertain identities are retained. Identity-level rows let the sweep
201
+ * retire a dead losing root without disturbing the surviving authority.
196
202
  */
197
- export declare function reapDeadSessionRegistrations(broker: Pick<Broker, "index">): Promise<ReapedSessionRegistration[]>;
203
+ export declare function reapDeadSessionRegistrations(broker: BrokerIndex, limit?: number): Promise<ReapedSessionRegistration[]>;
198
204
  /**
199
205
  * Runs {@link reapDeadSessionRegistrations} on {@link BROKER_DEAD_REGISTRATION_SWEEP_MS}.
200
206
  * The timer is unref'd, so it never keeps an otherwise idle broker process alive.
@@ -68,11 +68,13 @@ export interface IndexedSession {
68
68
  activity?: SessionActivity;
69
69
  /** Wall-clock timestamp of the latest admitted heartbeat, when one exists. */
70
70
  lastHeartbeatAt?: number;
71
- /** True when the same sessionId maps to more than one stateRoot (cross-repo duplicate). */
71
+ /** True when more than one unresolved authority-fencing state-root identity claims this session id. */
72
72
  ambiguous: boolean;
73
- /** True when the identity's latest event is host_unregistered or session_closed (DR-1: stopped rows are retained). */
73
+ /** True when the identity's latest event is terminal (DR-1 retains stopped rows for inspection/offline tail). */
74
74
  terminal: boolean;
75
75
  }
76
+ /** A session can grant endpoint or lifecycle authority only when one authority-fencing state root claims its id. */
77
+ export declare function isSessionAuthorityEligible(session: Pick<IndexedSession, "ambiguous">): boolean;
76
78
  export interface SessionList {
77
79
  indexSeq: number;
78
80
  sessions: IndexedSession[];
@@ -119,6 +121,7 @@ export declare class SessionIndex {
119
121
  refresh(): Promise<void>;
120
122
  get indexSeq(): number;
121
123
  append(input: Omit<SessionIndexEvent, "version" | "indexSeq" | "checksum" | "ts"> & Partial<Pick<SessionIndexEvent, "ts">>): Promise<SessionIndexEvent>;
124
+ unregisterIfCurrent(expected: IndexedSession): Promise<boolean>;
122
125
  /** Hold the canonical index lock across an authority-sensitive operation. */
123
126
  withLocked<T>(callback: () => Promise<T>): Promise<T>;
124
127
  snapshot(): Promise<void>;
@@ -128,19 +131,25 @@ export declare class SessionIndex {
128
131
  */
129
132
  compact(): Promise<void>;
130
133
  listSessions(): SessionList;
134
+ /**
135
+ * Broker-internal current composite-identity rows. Unlike {@link listSessions},
136
+ * this retains losing roots so an exact dead registration can be retired without
137
+ * disturbing the surviving authority.
138
+ */
139
+ listSessionIdentities(probedIncarnations?: ReadonlyMap<string, string | undefined>): IndexedSession[];
131
140
  /**
132
141
  * Production coalesced heartbeat checkpoint pass (C2): appends one
133
142
  * `host_heartbeat` per session at most once per {@link SESSION_HEARTBEAT_INTERVAL_MS}.
134
143
  * The pass observes liveness the same way the projection does — the host process
135
144
  * must be alive and, for composite identities, still carry the recorded OS process
136
- * incarnation (a reused PID is never checkpointed). Stopped/terminal rows and rows
137
- * whose heartbeat is still fresh are skipped. After a broker restart, sessions whose
145
+ * incarnation (a reused PID is never checkpointed). Stopped, terminal, and ambiguous rows
146
+ * and rows whose heartbeat is still fresh are skipped. After a broker restart, sessions whose
138
147
  * host survived are re-observed as live on the first pass; sessions whose host died
139
148
  * while the broker was down keep their stale or missing heartbeat and read as
140
149
  * unknown/not-live (never fresh forever). Returns the number of checkpoints written.
141
150
  */
142
151
  checkpointLiveHeartbeats(now?: number): Promise<number>;
143
- hostUnregisteredAfter(registration: Pick<IndexedSession, "sessionId" | "endpointGeneration" | "pid" | "indexSeq" | "lifecycleRequestId">): {
152
+ hostUnregisteredAfter(registration: Pick<IndexedSession, "sessionId" | "locator" | "endpointGeneration" | "pid" | "indexSeq" | "lifecycleRequestId" | "hostIncarnation" | "processIncarnation">): {
144
153
  indexSeq: number;
145
154
  lifecycleRequestId?: string;
146
155
  } | undefined;
@@ -4,13 +4,28 @@ export interface BrokerStartupFailureMarker {
4
4
  exitCode: number | null;
5
5
  signal: string | null;
6
6
  writtenAt: number;
7
+ /**
8
+ * pid of the exact broker process that wrote this marker. `ensureBroker`
9
+ * only trusts a marker whose pid matches the exact spawned child it just
10
+ * reaped -- a marker left behind by a stale or foreign broker process (for
11
+ * example a losing racer from a concurrent spawn, or a marker predating the
12
+ * pre-spawn clear) must never be misattributed to a different spawn's
13
+ * failure.
14
+ */
15
+ pid: number;
7
16
  }
8
17
  export declare function brokerStartupFailurePath(agentDir: string): string;
9
- /** Best-effort durable marker write; never throws (diagnostics must not mask the exit itself). */
18
+ /**
19
+ * Best-effort durable marker write; never throws (diagnostics must not mask the
20
+ * exit itself). `pid` must be the writing broker process's own pid
21
+ * (`process.pid`) so a later reader can bind the marker to the exact spawned
22
+ * child it is attributing the failure to.
23
+ */
10
24
  export declare function writeBrokerStartupFailureMarker(agentDir: string, failure: {
11
25
  reason: string;
12
26
  exitCode: number | null;
13
27
  signal: string | null;
28
+ pid: number;
14
29
  }): Promise<void>;
15
30
  /** Reads a bounded startup-failure marker; `undefined` when absent or malformed. */
16
31
  export declare function readBrokerStartupFailureMarker(agentDir: string): Promise<BrokerStartupFailureMarker | undefined>;
@@ -45,7 +45,57 @@ export type ChatDaemonAction = "stop" | "reload";
45
45
  * generation 29 / slack generation 28 advance the replay cursor only after a frame is
46
46
  * published, so an owner at an earlier generation acknowledges an event before delivering
47
47
  * it and loses that event for good the first time a surface refuses it. Discord generation 30 /
48
- * slack generation 29 invalidate existing owners after SDK discovery validation changes.
48
+ * slack generation 29 move lifecycle and attachment authority into SDK core; generation 30 also
49
+ * isolates per-session Router attachment failures so one stale endpoint cannot block healthy sessions.
50
+ * Discord generation 31 bounds one REST operation across response parsing and multi-request flows.
51
+ * Slack generation 30 bounds shutdown, tracks outbound work, and fences late effect commits.
52
+ * Slack generation 31 fences late post admission and tracks close-marker shutdown work.
53
+ * Slack generation 32 bounds provider teardown and preserves close markers after Router revocation.
54
+ * Slack generation 33 bounds lifecycle predecessors under the shutdown deadline.
55
+ * Slack generation 34 CAS-fences cleanup mapping commits against successors.
56
+ * Slack generation 35 identity-fences detached startup cleanup from restarted daemon state.
57
+ * Slack generation 36 retains stop ownership for every detached lifecycle generation.
58
+ * Discord generation 32 / Slack generation 37 bind cleanup to the removed attachment generation.
59
+ * Discord generation 33 / Slack generation 38 identity-fence cleanup callbacks on exact attachments.
60
+ * Discord generation 34 / Slack generation 39 clear stale attachment identity before provider reassignment.
61
+ * Discord generation 35 / Slack generation 40 capture provider ownership before cleanup awaits.
62
+ * Discord generation 36 / Slack generation 41 drain prior cleanup before provider restart.
63
+ * Discord generation 37 / Slack generation 42 serialize successor attachment visibility after cleanup.
64
+ * Discord generation 38 / Slack generation 43 hold successor frames behind cleanup settlement.
65
+ * Discord generation 39 / Slack generation 44 recover durable cleanup before attachment publication.
66
+ * Slack generation 45 persists exact pending cleanup intent through recovery.
67
+ * Discord generation 40 bounds provider lifecycle joins before Router revocation.
68
+ * Discord generation 41 / Slack generation 46 revoke Router authority despite provider shutdown failure.
69
+ * Discord generation 42 / Slack generation 47 retain daemon objects across restart to preserve detached lifecycle fences.
70
+ * Discord generation 43 / Slack generation 48 fence Router attachment publication and Broker-adopted endpoint authority.
71
+ * Discord generation 44 / Slack generation 49 retain provider shutdown tails and rejected lifecycle errors so no successor transport starts before ownership settles.
72
+ * Discord generation 45 / Slack generation 50 clean predecessor presentation authority before exact Router replacement and reject post-stop Discord callbacks.
73
+ * Discord generation 46 / Slack generation 51 establish replay barriers before reconnect awaits, distinguish replacement from terminal cleanup, and await lifecycle-fenced Discord inbound work.
74
+ * Discord generation 47 / Slack generation 52 preserve presentation continuity across replacement while exact opaque authority fences stale work.
75
+ * Discord generation 48 / Slack generation 53 allow exact publication-time requests without reconciliation deadlock.
76
+ * Discord generation 49 / Slack generation 54 revalidate endpoint authority before exact publication-time requests.
77
+ * Discord generation 50 / Slack generation 55 terminalize predecessor routes only for a changed same-generation endpoint incarnation.
78
+ * Slack generation 56 clears predecessor inbound receipts before same-generation successor publication.
79
+ * Discord generation 51 / Slack generation 57 persist restart-stable Router endpoint-incarnation authority in provider mappings.
80
+ * Discord generation 52 / Slack generation 58 classify reconnect-time endpoint changes before provider retirement.
81
+ * Discord generation 53 / Slack generation 59 serialize successor attach behind predecessor provider retirement.
82
+ * Discord generation 54 / Slack generation 60 version-fence attaches already in flight when retirement begins.
83
+ * Discord generation 55 / Slack generation 61 fence durable inbound work by exact attachment identity.
84
+ * Discord generation 56 / Slack generation 62 fence durable provider-post and thread-effect recovery by attachment identity.
85
+ * Discord generation 57 removes missing-authority wildcard behavior from durable binding checks.
86
+ * Discord generation 58 preserves exact authority through unarchive replacement fallback.
87
+ * Discord generation 59 / Slack generation 63 derive attachment authority ids from one Router function so persisted provider bindings and live attachments cannot drift apart.
88
+ * Discord generation 62 / Slack generation 65 fence the Windows process-incarnation
89
+ * authority change (#4362): the native binding fallback no longer spawns powershell.exe.
90
+ * Discord generation 63 / Slack generation 66 retain the shared ownership fence
91
+ * unless a zero-signal process probe returns ESRCH. EPERM and unknown failures are
92
+ * indeterminate, so earlier owners must not reclaim, replace, or spawn through them.
93
+ * Discord generation 64 / Slack generation 67 contain synchronous provider-
94
+ * subscription admission and ready-hook failures without revoking shared Router
95
+ * attachment authority.
96
+ * Discord generation 65 / Slack generation 68 fence the off-reconcile-tail
97
+ * initial attachment replay introduced by #4542 so pre-upgrade daemon owners
98
+ * cannot retain the earlier SessionRouter attachment contract.
49
99
  */
50
100
  export declare const CHAT_DAEMON_GENERATIONS: Readonly<Record<ChatDaemonKind, number>>;
51
101
  export declare function chatDaemonGeneration(kind: ChatDaemonKind): number;
@@ -1,5 +1,4 @@
1
- import { SessionIndex } from "../broker/session-index";
2
- import { type SdkSessionEndpoint } from "../client/discovery";
1
+ import type { SessionRouterDeps } from "../router";
3
2
  import type { ChatDaemonCommandBindInput, ChatDaemonCommandOutcome } from "./chat-daemon-command-channel";
4
3
  import type { ChatDaemonKind } from "./chat-daemon-control";
5
4
  import type { DiscordProvider } from "./discord-provider";
@@ -26,22 +25,6 @@ export interface ChatDaemonRuntimeConfig {
26
25
  verbosity: "lean" | "verbose";
27
26
  };
28
27
  }
29
- export interface ChatDaemonSdkClient {
30
- onFrame(handler: (frame: Record<string, unknown>) => void): () => void;
31
- /**
32
- * Announces that a replacement socket is live. Optional because command-scoped
33
- * clients (the broker client, one-shot doubles) never outlive one socket, while
34
- * every long-lived attachment's client carries it.
35
- */
36
- onReconnect?(handler: () => void): () => void;
37
- /** Re-dials a retired socket; a no-op on a live one. */
38
- connect?(): Promise<void>;
39
- request(frame: Record<string, unknown>, options?: {
40
- timeoutMs?: number;
41
- }): Promise<Record<string, unknown>>;
42
- close(): Promise<void>;
43
- send(frame: Record<string, unknown>): void;
44
- }
45
28
  export type ChatDeliveryPhase = "pre_send" | "ambiguous";
46
29
  /** An authorized SDK command could not be conclusively delivered. */
47
30
  export declare class ChatDeliveryError extends Error {
@@ -51,19 +34,11 @@ export declare class ChatDeliveryError extends Error {
51
34
  export interface ChatDaemonRuntimeDeps {
52
35
  createDiscordProvider?: (config: NonNullable<ChatDaemonRuntimeConfig["notifications"]["discord"]>) => DiscordProvider;
53
36
  createSlackProvider?: (config: NonNullable<ChatDaemonRuntimeConfig["notifications"]["slack"]>) => SlackProviderClient;
54
- createClient?: (endpoint: SdkSessionEndpoint) => Promise<ChatDaemonSdkClient>;
55
- createIndex?: (agentDir: string) => SessionIndex;
56
- createBrokerClient?: (endpoint: {
57
- url: string;
58
- token: string;
59
- }) => Promise<ChatDaemonSdkClient>;
60
- onReconciled?: () => void;
61
- setInterval?: typeof setInterval;
62
- clearInterval?: typeof clearInterval;
37
+ routerDeps?: SessionRouterDeps;
63
38
  }
64
39
  /**
65
40
  * Worker-owned session discovery and event fanout. It connects only through the
66
- * public SDK transport and retains endpoint tokens solely in live client objects.
41
+ * public SDK transport and retains SDK credentials solely in live client objects.
67
42
  */
68
43
  export declare class ChatDaemonRuntime {
69
44
  #private;
@@ -77,18 +52,6 @@ export declare class ChatDaemonRuntime {
77
52
  start(): Promise<void>;
78
53
  transportHealthy(): boolean;
79
54
  stop(): Promise<void>;
80
- private reconcile;
81
- private attach;
82
- private resolveEndpoint;
83
- /**
84
- * Adopt an operator-supplied Slack root for one attached session. Returns a
85
- * machine-readable rejection instead of throwing so the daemon control plane
86
- * can answer without exposing internal failure detail.
87
- */
55
+ /** Adopt an operator-supplied Slack root through the provider's presentation store. */
88
56
  bindExistingRoot(request: ChatDaemonCommandBindInput): Promise<ChatDaemonCommandOutcome>;
89
- private schedule;
90
- private enqueueFrame;
91
- private handleFrame;
92
- private close;
93
- private resume;
94
57
  }
@@ -10,6 +10,17 @@ import { type LoadResult } from "../../config/config-file";
10
10
  * site marks it, never by inheriting a marked ancestor's environment.
11
11
  */
12
12
  export declare const SPAWN_PROVENANCE_ENV = "GJC_SPAWNED_BY_SESSION";
13
+ /**
14
+ * Telegram session eligibility: whether a session may own a forum topic and be
15
+ * admitted by the notification daemon.
16
+ *
17
+ * This follows the user's configuration, never how the session was launched.
18
+ * Gating it on coordinator/lifecycle provenance made every ordinary
19
+ * interactive session declare itself ineligible, and the daemon refuses an
20
+ * identity header that does so — so no notification was ever delivered even
21
+ * though the daemon looked healthy and attached.
22
+ */
23
+ export declare function isTelegramSessionEligible(cfg: NotificationConfig): boolean;
13
24
  export type TelegramActivationState = "inactive" | "blocked";
14
25
  export type TelegramActivationReason = "saved_inactive" | "identity_mismatch";
15
26
  /** Non-secret, identity-specific durable Telegram activation state. */