@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
@@ -251,6 +251,14 @@ export interface NotificationRecoveryReport {
251
251
  endpointsRetainedPlaceholders?: string[];
252
252
  /** Cleanup entries retained with unverified or mismatching identity. */
253
253
  endpointsRetainedUnknown?: string[];
254
+ /** Stale quarantine/staging debris removed from the endpoint and daemon dirs. */
255
+ debrisRemoved?: string[];
256
+ /** Debris candidates retained by policy (young, live writer). */
257
+ debrisKept?: number;
258
+ /** Debris removals attempted without conclusive success (identity/unlink). */
259
+ debrisFailures?: number;
260
+ /** At least one debris directory listing failed; the sweep was not exhaustive. */
261
+ debrisScanFailed?: boolean;
254
262
  daemon: {
255
263
  action: DaemonRecoveryAction;
256
264
  detail: string;
@@ -317,6 +325,50 @@ export declare function acquireDaemonTransitionLock(input: {
317
325
  retryDelayMs?: number;
318
326
  randomToken?: () => string;
319
327
  }): Promise<DaemonTransitionLock | undefined>;
328
+ /**
329
+ * Minimum age before age-based debris removal. Quarantine artifacts are inert
330
+ * the moment they are detached, but the age bound keeps the sweep clear of any
331
+ * recovery pass still holding a `detachedPath` reference in its report.
332
+ */
333
+ export declare const NOTIFICATION_DEBRIS_MIN_AGE_MS: number;
334
+ export interface NotificationDebrisSweepReport {
335
+ /** Basenames removed from the swept directory. */
336
+ removed: string[];
337
+ /** Debris candidates retained (young, live writer, or identity/unlink refusal). */
338
+ kept: number;
339
+ /**
340
+ * Candidates whose removal was ATTEMPTED and did not conclusively succeed
341
+ * (identity mismatch, unreadable candidate, unlink error). Distinct from
342
+ * `kept`-by-policy so a caller can see that a sweep was not fully effective.
343
+ */
344
+ failures: number;
345
+ /** The directory listing itself failed; nothing could be inspected. */
346
+ scanFailed?: boolean;
347
+ }
348
+ /**
349
+ * Remove inert filesystem debris from a notification/state directory:
350
+ * quarantine targets of already-detached markers and endpoints, exact-unlink
351
+ * exchange placeholders, and leaked atomic-write staging files.
352
+ *
353
+ * Removal requires positive staleness proof — a dead recorded writer pid for
354
+ * staging files, or an mtime older than {@link NOTIFICATION_DEBRIS_MIN_AGE_MS}
355
+ * for everything else. Canonical files can never match the debris patterns, and
356
+ * a young staging file with a live writer is kept.
357
+ *
358
+ * Age, terminal-scrub proof, and the delete identity all come from ONE
359
+ * no-follow snapshot of the candidate. Judging age from a separate `stat` would
360
+ * prove one pathname stale and then bind the delete to whatever occupied that
361
+ * pathname afterwards, so a live successor could be removed on a predecessor's
362
+ * staleness. A candidate replaced after the snapshot fails the identity match
363
+ * and is retained; a symlinked, non-regular, or unreadable candidate is refused
364
+ * outright. Every inconclusive attempt is counted in `failures` rather than
365
+ * silently folded into `kept`.
366
+ */
367
+ export declare function sweepNotificationDebris(input: {
368
+ dir: string;
369
+ deps?: NotificationServiceDeps;
370
+ minAgeMs?: number;
371
+ }): Promise<NotificationDebrisSweepReport>;
320
372
  /**
321
373
  * Ownership-protected cleanup. Removes only DEAD-owner artifacts:
322
374
  * per-session endpoint files with positive proof of death (a stale tombstone or
@@ -1,6 +1,6 @@
1
1
  export interface NotificationOperatorTimerDeps {
2
2
  now?: () => number;
3
- setTimeoutImpl?: typeof setTimeout;
3
+ setTimeoutImpl?: (callback: () => void, ms?: number) => Timer | NodeJS.Timeout;
4
4
  clearTimeoutImpl?: typeof clearTimeout;
5
5
  setIntervalImpl?: typeof setInterval;
6
6
  clearIntervalImpl?: typeof clearInterval;
@@ -1,5 +1,6 @@
1
1
  /**
2
- * Bounded authoritative reconciliation state for Q26 `turn.prompt_status`.
2
+ * Bounded prompt reconciliation state for canonical Q26 `turn.result` with
3
+ * `kind: "prompt"`, plus the legacy `turn.prompt_status` alias.
3
4
  *
4
5
  * Separate from the lifecycle delivery buffers (promptSubmissions /
5
6
  * promptTerminalTombstones), which exist to deliver frames and intentionally
@@ -9,8 +10,8 @@
9
10
  *
10
11
  * Semantics (public contract, mirrored in sdk/prompt-status.ts):
11
12
  * - Active records are NEVER converted to terminal by age or capacity.
12
- * - Terminal records are retained for TERMINAL_TTL_MS and bounded to
13
- * TERMINAL_CAPACITY, evicted oldest-terminal-first by terminalAt; only then
13
+ * - Terminal records are bounded to TERMINAL_CAPACITY and evicted
14
+ * oldest-terminal-first by terminalAt; only then
14
15
  * does a lookup honestly report `unknown`.
15
16
  * - Process-local durability floor is the live session process: restart means `unknown`.
16
17
  * Session-scoped durable retention (kind-aware store) is provided by reconciliation-store.ts (#3032).
@@ -21,10 +22,10 @@
21
22
  * record that has none, but never changes status, terminalAt, or retention.
22
23
  */
23
24
  import { PROMPT_FAILURE_CODE_MAX, sanitizePromptFailure } from "../prompt-failure";
25
+ import type { ReceiptState } from "../receipt-state";
24
26
  export { PROMPT_FAILURE_CODE_MAX, sanitizePromptFailure };
25
27
  export declare const PROMPT_RECONCILIATION_ACTIVE_CAPACITY = 128;
26
28
  export declare const PROMPT_RECONCILIATION_TERMINAL_CAPACITY = 256;
27
- export declare const PROMPT_RECONCILIATION_TERMINAL_TTL_MS: number;
28
29
  export type PromptReconciliationStatus = "accepted" | "in_flight" | "terminal_ok" | "failed";
29
30
  export interface PromptCorrelation {
30
31
  commandId: string;
@@ -40,15 +41,18 @@ export interface PromptReconciliationRecord extends PromptCorrelation {
40
41
  acceptedAt: number;
41
42
  startedAt?: number;
42
43
  terminalAt?: number;
44
+ receiptState?: Exclude<ReceiptState, "absent">;
43
45
  }
44
46
  export type TurnPromptReconciliation = {
45
47
  status: "accepted";
48
+ receiptState: "absent";
46
49
  commandId: string;
47
50
  turnId: string;
48
51
  clientRef?: string;
49
52
  acceptedAt: number;
50
53
  } | {
51
54
  status: "in_flight";
55
+ receiptState: "absent";
52
56
  commandId: string;
53
57
  turnId: string;
54
58
  clientRef?: string;
@@ -56,6 +60,7 @@ export type TurnPromptReconciliation = {
56
60
  startedAt: number;
57
61
  } | {
58
62
  status: "terminal_ok";
63
+ receiptState: Exclude<ReceiptState, "absent">;
59
64
  commandId: string;
60
65
  turnId: string;
61
66
  clientRef?: string;
@@ -69,6 +74,7 @@ export type TurnPromptReconciliation = {
69
74
  };
70
75
  } | {
71
76
  status: "failed";
77
+ receiptState: Exclude<ReceiptState, "absent">;
72
78
  commandId: string;
73
79
  turnId: string;
74
80
  clientRef?: string;
@@ -81,6 +87,7 @@ export type TurnPromptReconciliation = {
81
87
  };
82
88
  } | {
83
89
  status: "unknown";
90
+ receiptState: "unknown";
84
91
  };
85
92
  export interface PromptReconciliation {
86
93
  /** Fail-closed admission BEFORE any execution; holds an identity-bound reservation. */
@@ -91,10 +98,14 @@ export interface PromptReconciliation {
91
98
  noteAccepted(correlation: PromptCorrelation, clientRef?: string): void;
92
99
  /** Lifecycle transition; terminal outcomes settle exactly once. */
93
100
  noteTransition(correlation: PromptCorrelation | undefined, frame: {
94
- type: "agent_start" | "agent_end";
101
+ type: "agent_start";
102
+ } | {
103
+ type: "agent_end";
104
+ finalText?: string;
95
105
  } | {
96
106
  type: "agent_failed";
97
107
  error: unknown;
108
+ finalText?: string;
98
109
  }): void;
99
110
  lookup(selector: {
100
111
  commandId?: string;
@@ -1,11 +1,14 @@
1
1
  import type { PromptReconciliationStatus, SdkPromptTerminalOutcome } from "../prompt-status";
2
+ import type { ReceiptState } from "../receipt-state";
2
3
  import { type TurnResultContent } from "../turn-result";
3
4
  import type { PromptCorrelation } from "./prompt-reconciliation";
4
- export declare const RECONCILIATION_STORE_VERSION = 1;
5
+ export declare const RECONCILIATION_STORE_VERSION = 2;
6
+ export declare const RECONCILIATION_STORE_VERSION_V1 = 1;
5
7
  export declare const RECONCILIATION_SESSION_ID_PATTERN: RegExp;
6
8
  export declare const RECONCILIATION_DIR_NAME = ".sdk-reconciliation";
7
- export type ReconciliationKind = "prompt" | "skill";
8
- export interface DurableReconciliationRecord extends PromptCorrelation {
9
+ export declare function resolveReconciliationSessionFile(sessionFile: string | undefined | null, stateRoot: string, sessionId: string): string;
10
+ export type ReconciliationKind = "prompt" | "skill" | "terminal";
11
+ export interface DurableExecutionReconciliationRecord extends PromptCorrelation {
9
12
  kind: ReconciliationKind;
10
13
  clientRef?: string;
11
14
  status: PromptReconciliationStatus;
@@ -17,15 +20,98 @@ export interface DurableReconciliationRecord extends PromptCorrelation {
17
20
  startedAt?: number;
18
21
  terminalAt?: number;
19
22
  outcome?: SdkPromptTerminalOutcome;
23
+ receiptState?: Exclude<ReceiptState, "absent">;
20
24
  pendingOutcome?: SdkPromptTerminalOutcome;
25
+ pendingReceiptState?: Extract<ReceiptState, "present" | "missing">;
21
26
  /** Skill-only safe token; never skill args bodies. */
22
27
  skillName?: string;
23
28
  content?: TurnResultContent;
24
29
  }
30
+ /**
31
+ * Durable terminal scope record (approved abort-SDK plan, v2 document).
32
+ * Bounded origin/fence and owned-settlement fields only; no prompt text and no
33
+ * suppressed/deferred receipts for left-running turn work.
34
+ */
35
+ export interface DurableTerminalScopeRecord {
36
+ selection: "turn" | "owned";
37
+ /** SHA-256 of the bounded idempotency key; the raw key is never persisted. */
38
+ idempotencyKeyHash?: string;
39
+ /** SHA-256 of the canonicalized normalized input; raw input is never persisted. */
40
+ idempotencyInputHash?: string;
41
+ turnDisposition: "pending" | "stopped" | "uncertain" | "no_effect" | "no_effect_reserved" | "no_effect_marker_failure";
42
+ /** Whether the correlated agent_end event was published (AC 19). */
43
+ terminalPublished?: boolean;
44
+ ownedWorkDisposition: "not_requested" | "left_running" | "stopped" | "uncertain";
45
+ automaticDeliveryDisposition: "enabled" | "none";
46
+ resumeOnOwnedCompletion: boolean;
47
+ turnContinuationFence: {
48
+ state: "retained" | "released";
49
+ abortedAttemptEpoch: number;
50
+ blockedContinuationIds: string[];
51
+ predecessorTombstones: string[];
52
+ ownedCompletionPolicy: "enabled" | "disabled";
53
+ };
54
+ ownedDeliverySettlements?: Array<{
55
+ keyHash: string;
56
+ entryIdHash: string;
57
+ status: "settled" | "absent" | "uncertain";
58
+ observedAt: number;
59
+ }>;
60
+ responseState: "pending" | "sent" | "delivered" | "failed";
61
+ responsePayloadHash: string;
62
+ /** Hash of the replay-shaped public result a same-key retry delivers, when
63
+ * it differs from the original response (the replay appends metadata). */
64
+ replayPayloadHash?: string;
65
+ acceptedAt: number;
66
+ terminalAt?: number;
67
+ }
68
+ /** Compact evicted-key tombstone with enough disposition metadata to
69
+ * reconstruct the original terminal replay result (review thread P2). */
70
+ export interface EvictedTerminalKeyEntry {
71
+ keyHash: string;
72
+ inputHash: string;
73
+ turnDisposition?: "stopped" | "uncertain" | "no_effect" | "no_effect_reserved" | "no_effect_marker_failure";
74
+ ownedWorkDisposition?: "not_requested" | "left_running" | "stopped" | "uncertain";
75
+ responseState?: "pending" | "sent" | "delivered" | "failed";
76
+ responsePayloadHash?: string;
77
+ replayPayloadHash?: string;
78
+ terminalPublished?: boolean;
79
+ }
80
+ export interface DurableSteerReconciliationRecord {
81
+ kind: "steer";
82
+ clientRef: string;
83
+ textDigest: string;
84
+ createdAt: number;
85
+ status: "dispatching" | "accepted" | "rejected" | "uncertain";
86
+ settledAt?: number;
87
+ error?: {
88
+ code: string;
89
+ message: string;
90
+ };
91
+ commandId: string;
92
+ turnId: string;
93
+ acceptedAt: number;
94
+ startedAt?: never;
95
+ terminalAt?: never;
96
+ outcome?: never;
97
+ receiptState?: never;
98
+ pendingOutcome?: never;
99
+ pendingReceiptState?: never;
100
+ skillName?: never;
101
+ }
102
+ export type DurableReconciliationRecord = DurableExecutionReconciliationRecord | DurableSteerReconciliationRecord;
25
103
  export interface ReconciliationStoreDocument {
26
104
  version: typeof RECONCILIATION_STORE_VERSION;
27
105
  sessionId: string;
28
106
  records: DurableReconciliationRecord[];
107
+ terminalScopes?: DurableTerminalScopeRecord[];
108
+ /**
109
+ * Compact key tombstones for completed terminal rows evicted by the
110
+ * retention cap: the key hash is retained durably so a same-key retry
111
+ * after dispatch-cache expiry/restart still replays instead of aborting an
112
+ * unrelated later prompt (review thread P2).
113
+ */
114
+ evictedTerminalKeys?: EvictedTerminalKeyEntry[];
29
115
  }
30
116
  export interface ReconciliationStoreFs {
31
117
  mkdir(directory: string, options: {
@@ -49,9 +135,15 @@ export declare function isSafeReconciliationSessionId(sessionId: string): boolea
49
135
  export declare function reconciliationStorePath(sessionFile: string, sessionId: string): string;
50
136
  /**
51
137
  * Settle non-terminal durable records after process death.
52
- * Prompt records preserve a durable pending outcome; skills retain the existing
53
- * reconciliation-incomplete result.
138
+ * Any record with a durable pending outcome preserves that exact terminal claim;
139
+ * outcome-less skills retain the existing reconciliation-incomplete result.
140
+ */
141
+ /**
142
+ * Settle incomplete terminal scopes (turnDisposition "pending") to safe
143
+ * uncertainty after process death. A terminal scope that never finalized its
144
+ * semantic CAS replays as uncertainty, never as success.
54
145
  */
146
+ export declare function settleTerminalScopeRestart(scopes: DurableTerminalScopeRecord[], now: number): DurableTerminalScopeRecord[];
55
147
  export declare function settleProcessRestart(records: DurableReconciliationRecord[], now: number): DurableReconciliationRecord[];
56
148
  export interface ReconciliationStore {
57
149
  readonly path: string | null;
@@ -61,6 +153,22 @@ export interface ReconciliationStore {
61
153
  load(): Promise<DurableReconciliationRecord[]>;
62
154
  /** Snapshot currently held in memory after last load/transact. */
63
155
  snapshot(): DurableReconciliationRecord[];
156
+ /** Terminal-scope mutations through the same serialized full-document owner. */
157
+ transactTerminalScopes(mutator: (scopes: DurableTerminalScopeRecord[]) => DurableTerminalScopeRecord[]): Promise<void>;
158
+ transactTerminalState(mutator: (state: {
159
+ scopes: DurableTerminalScopeRecord[];
160
+ keys: EvictedTerminalKeyEntry[];
161
+ }) => {
162
+ scopes: DurableTerminalScopeRecord[];
163
+ keys: EvictedTerminalKeyEntry[];
164
+ }): Promise<void>;
165
+ /** Wait until every previously admitted reconciliation transaction settles. */
166
+ drain?(): Promise<void>;
167
+ transactTerminalKeys(mutator: (keys: EvictedTerminalKeyEntry[]) => EvictedTerminalKeyEntry[]): Promise<void>;
168
+ snapshotTerminalKeys(): EvictedTerminalKeyEntry[];
169
+ loadTerminalScopes(): Promise<DurableTerminalScopeRecord[]>;
170
+ /** Snapshot of terminal scopes currently held in memory. */
171
+ snapshotTerminalScopes(): DurableTerminalScopeRecord[];
64
172
  delete(): Promise<void>;
65
173
  }
66
174
  export declare function createReconciliationStore(options: {
@@ -14,7 +14,17 @@ export interface BoundNotificationSession<Context extends NotificationSessionCon
14
14
  unbind(): void;
15
15
  }
16
16
  export type NotificationEndpointStartResult = "started" | "already" | "disabled" | "failed";
17
- export type TelegramDaemonPreflightResult = "ready" | "blocked_identity" | "failed";
17
+ /**
18
+ * Outcome of the Telegram daemon preflight.
19
+ *
20
+ * `pending` means ownership acquisition is in flight and was deliberately NOT
21
+ * awaited: chat daemons are optional notification adapters, never session
22
+ * authority, so reconciliation on an awaited session-lifecycle path must never
23
+ * block on one. A pending preflight neither stops the runtime nor marks it
24
+ * blocked — the runtime starts, adapters stay withheld while the owner state is
25
+ * not ready, and the ensure's settle callback re-reconciles.
26
+ */
27
+ export type TelegramDaemonPreflightResult = "ready" | "pending" | "blocked_identity" | "failed";
18
28
  /**
19
29
  * The endpoint implementation is deliberately injected. The controller owns
20
30
  * policy and session-local state while the extension continues to own its
@@ -24,6 +34,20 @@ export interface NotificationSessionRuntime<Context extends NotificationSessionC
24
34
  isRunning(binding: BoundNotificationSession<Context>): boolean;
25
35
  start(binding: BoundNotificationSession<Context>): Promise<NotificationEndpointStartResult>;
26
36
  stop(binding: BoundNotificationSession<Context>): Promise<boolean>;
37
+ /**
38
+ * Provider-neutral ownership re-proof, called for ANY effective chat
39
+ * provider before the Telegram-specific preflight.
40
+ *
41
+ * A credential, destination, or actor-authorization change invalidates the
42
+ * ownership proof that authorized this runtime's adapters. The runtime must
43
+ * withhold its LOCAL adapters until the new identity is proved. It does NOT
44
+ * revoke an already-attached external chat daemon's SessionRouter
45
+ * attachment, so such a daemon can still observe host events and reach the
46
+ * host's inbound/control paths during the window; closing that requires an
47
+ * authenticated chat-attachment authority boundary at the Router layer.
48
+ * Implementations must not await the daemon ensure itself.
49
+ */
50
+ reproveOwnership?(binding: BoundNotificationSession<Context>): Promise<void>;
27
51
  /**
28
52
  * Proves the complete Telegram owner identity before a generic endpoint can
29
53
  * emit a frame. `blocked_identity` is fail-closed and starts nothing.
@@ -9,6 +9,7 @@ export interface SlackInboundDispatchReceipt {
9
9
  actionId?: string;
10
10
  /** The endpoint generation and SDK effect captured before Socket Mode ACK. */
11
11
  endpointGeneration: number;
12
+ attachmentAuthorityId?: string;
12
13
  /** Identifier of the protected journal payload; mappings never retain message bodies. */
13
14
  effectId: string;
14
15
  idempotencyKey: string;
@@ -22,7 +23,10 @@ export interface SlackConversation extends ConversationRecord {
22
23
  rootTs?: string;
23
24
  sessionId?: string;
24
25
  endpointGeneration?: number;
26
+ attachmentAuthorityId?: string;
25
27
  clientMsgId?: string;
28
+ /** Exact pending Router-removal cleanup; cleared only after the mapping close CAS commits. */
29
+ cleanupEffectId?: string;
26
30
  /** Exclusive, expiring authority for provider reconciliation/publication of the root intent. */
27
31
  rootPublicationOwner?: string;
28
32
  rootPublicationLeaseExpiresAt?: number;
@@ -1,4 +1,4 @@
1
- import { type SdkSessionEndpoint } from "../client/discovery";
1
+ import { type SessionAttachment } from "../router";
2
2
  import { ConversationStore } from "./conversation-store";
3
3
  import { type SlackConversation } from "./slack-conversation";
4
4
  export type { SlackThreadBindingErrorCode } from "./slack-thread-binding";
@@ -7,16 +7,10 @@ export declare class SlackEndpointBindingError extends Error {
7
7
  constructor(message?: string);
8
8
  }
9
9
  import type { SlackProvider, SlackSocketEnvelope } from "./slack-provider";
10
- export interface SlackEndpoint extends SdkSessionEndpoint {
11
- generation: number;
12
- }
13
- export interface SlackSdkClient {
14
- send(frame: Record<string, unknown>): void;
15
- }
16
- /** Proven right to bind one session at one endpoint generation. */
17
10
  export interface SlackBindingAuthority {
18
11
  sessionId: string;
19
12
  endpointGeneration: number;
13
+ attachmentAuthorityId?: string;
20
14
  }
21
15
  export interface SlackNotificationDaemonOptions {
22
16
  agentDir: string;
@@ -33,15 +27,10 @@ export interface SlackNotificationDaemonOptions {
33
27
  /** Stable identity for the process attempting durable provider publication. */
34
28
  publicationOwnerId?: string;
35
29
  publicationLeaseMs?: number;
36
- resolveEndpoint?: (sessionId: string) => Promise<SlackEndpoint | null>;
37
- /**
38
- * Exact discovery/attachment authority for adopting an existing root. The
39
- * runtime supplies index, endpoint, and attachment proof; without it only the
40
- * resolvable endpoint generation can be proven.
41
- */
30
+ resolveAttachment: (sessionId: string) => Promise<SessionAttachment | null>;
31
+ /** Exact Router proof for adopting an existing root. */
42
32
  resolveBindingAuthority?: (sessionId: string) => Promise<SlackBindingAuthority | undefined>;
43
- createClient: (endpoint: SlackEndpoint) => SlackSdkClient;
44
- onCommand?: (sessionId: string, content: string, endpoint: SlackEndpoint, idempotencyKey: string) => Promise<boolean>;
33
+ onCommand?: (sessionId: string, content: string, attachment: SessionAttachment, idempotencyKey: string) => Promise<boolean>;
45
34
  }
46
35
  /**
47
36
  * Slack Socket Mode notification daemon. Accepted inbound SDK effects are
@@ -54,6 +43,7 @@ export declare class SlackNotificationDaemon {
54
43
  private readonly options;
55
44
  readonly store: ConversationStore<SlackConversation>;
56
45
  constructor(options: SlackNotificationDaemonOptions);
46
+ restartBlocked(): boolean;
57
47
  start(): Promise<void>;
58
48
  stop(): Promise<void>;
59
49
  /** Accepted inbound effects are durably claimed before their Socket Mode ACK. */
@@ -78,7 +68,9 @@ export declare class SlackNotificationDaemon {
78
68
  /** Posts a safe command outcome to the active mapped root thread. */
79
69
  postCommandResult(sessionId: string, content: string): Promise<boolean>;
80
70
  resolveAction(sessionId: string, actionId: string): Promise<void>;
81
- close(sessionId: string, marker?: string): Promise<boolean>;
71
+ close(sessionId: string, marker?: string, endpointGeneration?: number): Promise<boolean>;
72
+ recoverCleanup(sessionId: string, endpointGeneration: number): Promise<void>;
73
+ retireAttachment(sessionId: string, endpointGeneration: number): Promise<void>;
82
74
  resume(sessionId: string, body: string, endpointGeneration?: number, publicationId?: string): Promise<SlackConversation>;
83
75
  findSession(sessionId: string, includeInactive: boolean): Promise<{
84
76
  key: string;
@@ -28,7 +28,7 @@ export interface SlackLiveProviderOptions {
28
28
  fetch?: (input: string, init?: RequestInit) => Promise<Response>;
29
29
  webSocket?: (url: string) => SlackWebSocket;
30
30
  now?: () => number;
31
- sleep?: (milliseconds: number) => Promise<void>;
31
+ sleep?: (milliseconds: number, signal?: AbortSignal) => Promise<void>;
32
32
  reconnectDelayMs?: number;
33
33
  maxRateLimitRetries?: number;
34
34
  maxRetryAfterMs?: number;
@@ -57,11 +57,13 @@ export declare class SlackLiveProvider implements SlackProviderClient, SlackDiag
57
57
  text: string;
58
58
  threadTs?: string;
59
59
  clientMsgId: string;
60
+ signal?: AbortSignal;
60
61
  }): Promise<SlackPostedMessage>;
61
62
  findMessageByClientMsgId(input: {
62
63
  channel: string;
63
64
  clientMsgId: string;
64
65
  threadTs?: string;
66
+ signal?: AbortSignal;
65
67
  }): Promise<SlackMessageSearchResult | null>;
66
68
  /**
67
69
  * Confirm that `ts` addresses a real message in `channel`. Slack answers
@@ -44,11 +44,13 @@ export interface SlackProviderClient {
44
44
  text: string;
45
45
  threadTs?: string;
46
46
  clientMsgId: string;
47
+ signal?: AbortSignal;
47
48
  }): Promise<SlackPostedMessage>;
48
49
  findMessageByClientMsgId?(input: {
49
50
  channel: string;
50
51
  clientMsgId: string;
51
52
  threadTs?: string;
53
+ signal?: AbortSignal;
52
54
  }): Promise<SlackMessageSearchResult | null>;
53
55
  /**
54
56
  * Prove that an operator-supplied timestamp addresses a real message in the
@@ -77,11 +79,13 @@ export declare class SlackProvider {
77
79
  text: string;
78
80
  threadTs?: string;
79
81
  clientMsgId: string;
82
+ signal?: AbortSignal;
80
83
  }): Promise<SlackPostedMessage>;
81
84
  findMessageByClientMsgId(input: {
82
85
  channel: string;
83
86
  clientMsgId: string;
84
87
  threadTs?: string;
88
+ signal?: AbortSignal;
85
89
  }): Promise<SlackMessageSearchResult | null>;
86
90
  /** Fail-closed root verification: a client without this capability can never confirm a root. */
87
91
  findMessageByTimestamp(input: {
@@ -7,17 +7,15 @@
7
7
  * 2. *Daemon*: only the running owner may mutate mappings, and only while it is
8
8
  * still the exact owner (`ownerId`/`pid`/`incarnation`/daemon generation)
9
9
  * captured before the request was published.
10
- * 3. *Session*: the SDK session must be attachable right now — indexed, live,
11
- * non-terminal, with a readable, non-stale endpoint whose pid matches the
12
- * indexed host and whose generation has not rolled.
10
+ * 3. *Session*: the running daemon supplies a redacted Router authority proving
11
+ * the exact session and endpoint generation; this module never resolves an
12
+ * endpoint or retains its credentials.
13
13
  *
14
14
  * Provider verification happens before any lock is taken, and the mapping commit
15
- * re-proves session authority inside the store lock, so an authority that
16
- * changes mid-flight leaves no mapping behind.
15
+ * re-proves daemon and session authority inside the store lock, so an authority
16
+ * that changes mid-flight leaves no mapping behind.
17
17
  */
18
18
  import type { Settings } from "../../config/settings";
19
- import type { SessionIndex } from "../broker/session-index";
20
- import { type SdkSessionEndpoint, type SdkSessionEndpointScope } from "../client/discovery";
21
19
  import { type EnsureChatDaemonResult } from "./chat-daemon-control";
22
20
  import { ConversationStore } from "./conversation-store";
23
21
  import { type SlackConversation } from "./slack-conversation";
@@ -30,39 +28,6 @@ export declare class SlackThreadBindingError extends Error {
30
28
  export declare function isBoundedSlackRootTs(value: string): boolean;
31
29
  /** Reject a non-addressable root before any authority read or persistence. */
32
30
  export declare function assertBoundedSlackRootTs(rootTs: string): void;
33
- export interface SlackSessionBindingAuthority {
34
- sessionId: string;
35
- endpointGeneration: number;
36
- pid: number;
37
- repo: string;
38
- /**
39
- * The exact endpoint this authority was proven against. Callers must use it
40
- * rather than re-reading discovery: a second read can observe a different
41
- * process whose endpoint generation happens to repeat, and the numeric
42
- * generation alone cannot tell the two apart.
43
- */
44
- endpoint: SdkSessionEndpoint;
45
- scope: SdkSessionEndpointScope;
46
- endpointMtimeMs: number;
47
- }
48
- export interface SessionBindingAuthorityInput {
49
- sessionIndex: SessionIndex;
50
- sessionId: string;
51
- readEndpoint?: (repo: string, sessionId: string, scope?: SdkSessionEndpointScope) => Promise<SdkSessionEndpoint | null>;
52
- statEndpoint?: (endpointPath: string) => Promise<{
53
- mtimeMs: number;
54
- } | undefined>;
55
- }
56
- /**
57
- * Resolve exact discovery/attachment authority for one session.
58
- *
59
- * `IndexedSession.live` alone is only pid liveness, which a terminated or
60
- * unregistered session can still satisfy through pid reuse or a stale record.
61
- * Adoption additionally requires an intact index replay, a non-terminal record,
62
- * and a discovery endpoint that is present, well-formed, not marked stale, and
63
- * owned by the same host pid the index recorded.
64
- */
65
- export declare function resolveSessionBindingAuthority(input: SessionBindingAuthorityInput): Promise<SlackSessionBindingAuthority | undefined>;
66
31
  export interface SlackThreadClaimInput {
67
32
  store: ConversationStore<SlackConversation>;
68
33
  /** The session root-claim key shared with stock root publication. */
@@ -72,6 +37,7 @@ export interface SlackThreadClaimInput {
72
37
  sessionId: string;
73
38
  rootTs: string;
74
39
  endpointGeneration: number;
40
+ attachmentAuthorityId?: string;
75
41
  /**
76
42
  * Re-proves session authority inside the store lock, immediately before
77
43
  * commit. It may be invoked more than once for one claim: authority here is