@gajae-code/coding-agent 0.18.11 → 0.19.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 (462) hide show
  1. package/CHANGELOG.md +760 -0
  2. package/dist/types/async/job-manager.d.ts +7 -3
  3. package/dist/types/async/result-formatting.d.ts +2 -0
  4. package/dist/types/autoresearch/git.d.ts +1 -1
  5. package/dist/types/capability/fs.d.ts +2 -2
  6. package/dist/types/capability/rule.d.ts +7 -2
  7. package/dist/types/cli/accounts-cli.d.ts +2 -2
  8. package/dist/types/cli/append-system-prompt.d.ts +6 -0
  9. package/dist/types/cli/args.d.ts +7 -2
  10. package/dist/types/cli/customize-doctor-precedence.d.ts +16 -0
  11. package/dist/types/cli/customize-doctor.d.ts +4 -3
  12. package/dist/types/cli/doctor/install-repairs.d.ts +4 -1
  13. package/dist/types/cli/install-activation.d.ts +10 -4
  14. package/dist/types/cli/public-command-errors.d.ts +2 -0
  15. package/dist/types/cli/root-flags.d.ts +0 -12
  16. package/dist/types/cli/update-cli.d.ts +21 -3
  17. package/dist/types/cli-main.d.ts +0 -6
  18. package/dist/types/cli-ordinary.d.ts +2 -2
  19. package/dist/types/commands/accounts.d.ts +2 -1
  20. package/dist/types/commands/launch.d.ts +0 -6
  21. package/dist/types/commands/migrate.d.ts +1 -1
  22. package/dist/types/commands/sdk.d.ts +13 -0
  23. package/dist/types/commit/changelog/index.d.ts +1 -0
  24. package/dist/types/commit/map-reduce/index.d.ts +4 -4
  25. package/dist/types/config/autorouting-tier-map.d.ts +53 -1
  26. package/dist/types/config/config-hot-reload-trust.d.ts +12 -0
  27. package/dist/types/config/config-hot-reload.d.ts +44 -0
  28. package/dist/types/config/file-lock.d.ts +52 -3
  29. package/dist/types/config/model-discovery-manager.d.ts +2 -0
  30. package/dist/types/config/model-profile-activation.d.ts +79 -9
  31. package/dist/types/config/model-registry.d.ts +72 -8
  32. package/dist/types/config/model-resolver.d.ts +7 -4
  33. package/dist/types/config/models-config-schema.d.ts +10 -0
  34. package/dist/types/config/settings-schema.d.ts +57 -4
  35. package/dist/types/config/settings.d.ts +33 -1
  36. package/dist/types/coordinator-mcp/server.d.ts +4 -0
  37. package/dist/types/customization/import.d.ts +2 -0
  38. package/dist/types/customization/types.d.ts +1 -1
  39. package/dist/types/dap/config.d.ts +8 -4
  40. package/dist/types/dap/session.d.ts +11 -2
  41. package/dist/types/debug/system-info.d.ts +6 -1
  42. package/dist/types/discovery/helpers.d.ts +7 -2
  43. package/dist/types/discovery/mcp-compat.d.ts +3 -1
  44. package/dist/types/edit/index.d.ts +5 -0
  45. package/dist/types/edit/modes/patch.d.ts +14 -0
  46. package/dist/types/edit/modes/replace.d.ts +3 -0
  47. package/dist/types/eval/py/runtime.d.ts +9 -0
  48. package/dist/types/exec/bash-executor.d.ts +12 -0
  49. package/dist/types/export/ttsr.d.ts +19 -0
  50. package/dist/types/extensibility/extensions/types.d.ts +5 -1
  51. package/dist/types/extensibility/slash-commands.d.ts +1 -0
  52. package/dist/types/gjc-runtime/managed-owner-admission.d.ts +3 -0
  53. package/dist/types/gjc-runtime/ralplan-current-final.d.ts +54 -0
  54. package/dist/types/gjc-runtime/ralplan-runtime.d.ts +5 -0
  55. package/dist/types/gjc-runtime/session-state-lock.d.ts +2 -0
  56. package/dist/types/gjc-runtime/state-runtime.d.ts +0 -2
  57. package/dist/types/gjc-runtime/tmux-sessions.d.ts +24 -0
  58. package/dist/types/gjc-runtime/ultragoal-change-set.d.ts +6 -0
  59. package/dist/types/gjc-runtime/ultragoal-runtime.d.ts +1 -0
  60. package/dist/types/harness-control-plane/receipt-spool.d.ts +4 -0
  61. package/dist/types/hindsight/content.d.ts +5 -6
  62. package/dist/types/internal-urls/types.d.ts +2 -0
  63. package/dist/types/lsp/clients/swiftlint-client.d.ts +0 -4
  64. package/dist/types/main.d.ts +23 -18
  65. package/dist/types/migrate/action-planner.d.ts +10 -1
  66. package/dist/types/migrate/adapters/codex.d.ts +2 -1
  67. package/dist/types/migrate/adapters/index.d.ts +42 -1
  68. package/dist/types/migrate/executor.d.ts +3 -1
  69. package/dist/types/migrate/hook-module.d.ts +23 -0
  70. package/dist/types/migrate/report.d.ts +2 -1
  71. package/dist/types/migrate/types.d.ts +82 -3
  72. package/dist/types/modes/components/agent-dashboard.d.ts +1 -1
  73. package/dist/types/modes/components/model-selector.d.ts +43 -0
  74. package/dist/types/modes/components/settings-selector.d.ts +6 -0
  75. package/dist/types/modes/controllers/selector-controller.d.ts +2 -0
  76. package/dist/types/modes/prompt-suggestion-controller.d.ts +1 -1
  77. package/dist/types/modes/theme/theme.d.ts +1 -0
  78. package/dist/types/modes/utils/host-status.d.ts +15 -11
  79. package/dist/types/runtime-mcp/content-limits.d.ts +4 -0
  80. package/dist/types/runtime-mcp/manager.d.ts +7 -0
  81. package/dist/types/runtime-mcp/plugin-mcp-name-filter.d.ts +22 -0
  82. package/dist/types/runtime-mcp/project-host-values.d.ts +11 -5
  83. package/dist/types/runtime-mcp/tool-bridge.d.ts +4 -0
  84. package/dist/types/sdk/broker/broker-exit.d.ts +3 -3
  85. package/dist/types/sdk/broker/broker.d.ts +29 -2
  86. package/dist/types/sdk/broker/daemon-entry.d.ts +11 -1
  87. package/dist/types/sdk/broker/doctor-restart.d.ts +1 -1
  88. package/dist/types/sdk/broker/ensure.d.ts +141 -9
  89. package/dist/types/sdk/broker/hop.d.ts +45 -0
  90. package/dist/types/sdk/broker/lifecycle-ledger.d.ts +18 -10
  91. package/dist/types/sdk/broker/lifecycle.d.ts +22 -0
  92. package/dist/types/sdk/broker/lock-host-identity.d.ts +5 -0
  93. package/dist/types/sdk/broker/session-index.d.ts +6 -1
  94. package/dist/types/sdk/broker/transport.d.ts +2 -0
  95. package/dist/types/sdk/bus/chat-command-policy.d.ts +2 -1
  96. package/dist/types/sdk/bus/index.d.ts +44 -0
  97. package/dist/types/sdk/bus/reconciliation-store.d.ts +10 -0
  98. package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +9 -1
  99. package/dist/types/sdk/bus/telegram-daemon.d.ts +2 -0
  100. package/dist/types/sdk/bus/threaded-render.d.ts +2 -1
  101. package/dist/types/sdk/cli/session-cli.d.ts +0 -1
  102. package/dist/types/sdk/host/control/operations.d.ts +5 -1
  103. package/dist/types/sdk/host/events.d.ts +4 -0
  104. package/dist/types/sdk/host/host.d.ts +2 -1
  105. package/dist/types/sdk/host/prompt-image-upload.d.ts +43 -0
  106. package/dist/types/sdk/host/session-runtime.d.ts +40 -8
  107. package/dist/types/sdk/host/surface-policy.d.ts +2 -1
  108. package/dist/types/sdk/lifecycle/service.d.ts +12 -0
  109. package/dist/types/sdk/prompt-deadline-flush.d.ts +42 -4
  110. package/dist/types/sdk/prompt-deadline-manager.d.ts +2 -0
  111. package/dist/types/sdk/prompt-status.d.ts +11 -4
  112. package/dist/types/sdk/protocol/adapter-validation.d.ts +10 -4
  113. package/dist/types/sdk/reconciliation-extensions.d.ts +1 -1
  114. package/dist/types/sdk/session-list.d.ts +1 -1
  115. package/dist/types/session/agent-session.d.ts +107 -9
  116. package/dist/types/session/internal/managed-session-scope.d.ts +2 -2
  117. package/dist/types/session/internal/managed-session-storage.d.ts +1 -1
  118. package/dist/types/session/internal/native-publish-outcome.d.ts +1 -1
  119. package/dist/types/session/messages.d.ts +5 -1
  120. package/dist/types/session/session-manager.d.ts +29 -3
  121. package/dist/types/session/startup-auth-config.d.ts +24 -2
  122. package/dist/types/session/streaming-output.d.ts +11 -0
  123. package/dist/types/session/terminal-abort.d.ts +3 -1
  124. package/dist/types/session-import/service.d.ts +1 -1
  125. package/dist/types/skill-state/workflow-mutation-guard.d.ts +20 -4
  126. package/dist/types/slash-commands/helpers/mcp.d.ts +5 -0
  127. package/dist/types/slash-commands/helpers/provider-auth-status.d.ts +8 -0
  128. package/dist/types/ssh/ssh-executor.d.ts +8 -1
  129. package/dist/types/system-prompt.d.ts +3 -2
  130. package/dist/types/task/executor.d.ts +19 -2
  131. package/dist/types/task/role-body.d.ts +11 -0
  132. package/dist/types/tools/ast-edit-write-path.d.ts +10 -0
  133. package/dist/types/tools/atomic-file-write.d.ts +9 -7
  134. package/dist/types/tools/awaiting-input.d.ts +28 -0
  135. package/dist/types/tools/bash-allowed-prefixes.d.ts +17 -0
  136. package/dist/types/tools/bash-skill-urls.d.ts +4 -0
  137. package/dist/types/tools/bash.d.ts +7 -0
  138. package/dist/types/tools/descriptors.d.ts +15 -2
  139. package/dist/types/tools/fetch.d.ts +7 -1
  140. package/dist/types/tools/index.d.ts +2 -0
  141. package/dist/types/tools/irc.d.ts +5 -3
  142. package/dist/types/tools/python.d.ts +1 -1
  143. package/dist/types/tools/report-issue.d.ts +41 -0
  144. package/dist/types/tools/subagent.d.ts +23 -0
  145. package/dist/types/tools/tmux-self-injection-guard.d.ts +2 -0
  146. package/dist/types/tools/ultragoal-ask-guard.d.ts +1 -1
  147. package/dist/types/tools/write.d.ts +2 -0
  148. package/dist/types/utils/file-mentions.d.ts +5 -0
  149. package/dist/types/utils/image-limits.d.ts +7 -0
  150. package/dist/types/utils/image-loading.d.ts +0 -1
  151. package/dist/types/utils/open.d.ts +0 -1
  152. package/dist/types/utils/pasted-image-loading.d.ts +1 -5
  153. package/dist/types/utils/prompt-suggestion.d.ts +2 -2
  154. package/dist/types/utils/shell-snapshot.d.ts +2 -0
  155. package/dist/types/utils/title-generator.d.ts +13 -3
  156. package/dist/types/web/scrapers/types.d.ts +8 -1
  157. package/dist/types/web/search/providers/codex.d.ts +6 -7
  158. package/dist/types/web/search/providers/insane.d.ts +7 -1
  159. package/dist/types/web/search/providers/searxng.d.ts +5 -0
  160. package/package.json +10 -9
  161. package/scripts/acp-conformance-agent.ts +12 -2
  162. package/scripts/build-binary.ts +2 -1
  163. package/scripts/capture-subagent-compact-panel-showcase.ts +105 -0
  164. package/scripts/generate-docs-index.ts +8 -1
  165. package/scripts/generate-sdk-operation-inventory.ts +38 -4
  166. package/src/async/job-manager.ts +356 -56
  167. package/src/async/result-formatting.ts +40 -0
  168. package/src/autoresearch/git.ts +9 -2
  169. package/src/autoresearch/prompts/prompt-setup.md +1 -1
  170. package/src/capability/fs.ts +58 -22
  171. package/src/capability/index.ts +2 -2
  172. package/src/capability/rule.ts +11 -2
  173. package/src/cli/accounts-cli.ts +176 -8
  174. package/src/cli/append-system-prompt.ts +12 -0
  175. package/src/cli/args.ts +11 -7
  176. package/src/cli/auth-broker-cli.ts +21 -11
  177. package/src/cli/customize-doctor-precedence.ts +31 -0
  178. package/src/cli/customize-doctor.ts +49 -39
  179. package/src/cli/doctor/install-repairs.ts +35 -5
  180. package/src/cli/fast-help.ts +1 -3
  181. package/src/cli/install-activation.ts +47 -4
  182. package/src/cli/migrate-cli.ts +19 -6
  183. package/src/cli/public-command-errors.ts +6 -0
  184. package/src/cli/root-flags.ts +2 -4
  185. package/src/cli/stats-cli.ts +9 -5
  186. package/src/cli/update-cli.ts +471 -13
  187. package/src/cli-ordinary.ts +7 -2
  188. package/src/commands/accounts.ts +10 -5
  189. package/src/commands/harness.ts +25 -15
  190. package/src/commands/migrate.ts +3 -3
  191. package/src/commands/sdk.ts +277 -50
  192. package/src/commands/ultragoal.ts +16 -8
  193. package/src/commit/agentic/agent.ts +6 -6
  194. package/src/commit/analysis/conventional.ts +14 -5
  195. package/src/commit/changelog/index.ts +39 -1
  196. package/src/commit/map-reduce/index.ts +7 -7
  197. package/src/commit/message.ts +10 -3
  198. package/src/commit/pipeline.ts +12 -12
  199. package/src/config/autorouting-tier-map.ts +50 -1
  200. package/src/config/config-file.ts +106 -3
  201. package/src/config/config-hot-reload-trust.ts +148 -0
  202. package/src/config/config-hot-reload.ts +742 -0
  203. package/src/config/file-lock.ts +1615 -328
  204. package/src/config/keybindings.ts +154 -7
  205. package/src/config/model-bindings-applier.ts +85 -47
  206. package/src/config/model-discovery-manager.ts +10 -0
  207. package/src/config/model-profile-activation.ts +889 -148
  208. package/src/config/model-registry.ts +1706 -205
  209. package/src/config/model-resolver.ts +52 -22
  210. package/src/config/models-config-schema.ts +6 -0
  211. package/src/config/settings-schema.ts +73 -4
  212. package/src/config/settings.ts +460 -24
  213. package/src/coordinator-mcp/policy.ts +26 -1
  214. package/src/coordinator-mcp/server.ts +37 -2
  215. package/src/crash/sanitize.ts +7 -1
  216. package/src/customization/import.ts +279 -8
  217. package/src/customization/inventory.ts +24 -8
  218. package/src/customization/types.ts +1 -0
  219. package/src/dap/client.ts +3 -2
  220. package/src/dap/config.ts +31 -11
  221. package/src/dap/defaults.json +1 -1
  222. package/src/dap/session.ts +161 -36
  223. package/src/debug/crash-diagnostics.ts +89 -6
  224. package/src/debug/report-bundle.ts +90 -2
  225. package/src/debug/system-info.ts +8 -3
  226. package/src/defaults/gjc/extensions/grok-cli-vendor/src/shared/base-url.ts +21 -7
  227. package/src/discovery/agents-md.ts +1 -1
  228. package/src/discovery/builtin.ts +4 -3
  229. package/src/discovery/helpers.ts +25 -16
  230. package/src/discovery/mcp-compat.ts +120 -17
  231. package/src/edit/apply-patch/index.ts +12 -1
  232. package/src/edit/index.ts +204 -22
  233. package/src/edit/modes/patch.ts +214 -8
  234. package/src/edit/modes/replace.ts +136 -0
  235. package/src/eval/js/context-manager.ts +29 -3
  236. package/src/eval/js/worker-entry.ts +51 -18
  237. package/src/eval/py/executor.ts +14 -4
  238. package/src/eval/py/runner.py +144 -5
  239. package/src/eval/py/runtime.ts +44 -4
  240. package/src/exec/bash-executor.ts +81 -4
  241. package/src/exec/bash-shell-guardian.ts +4 -1
  242. package/src/exec/bash-shell-supervisor.ts +8 -4
  243. package/src/exec/isolated-shell.ts +5 -1
  244. package/src/exec/non-interactive-env.ts +0 -1
  245. package/src/export/html/index.ts +86 -6
  246. package/src/export/ttsr.ts +176 -1
  247. package/src/extensibility/custom-tools/wrapper.ts +3 -1
  248. package/src/extensibility/extensions/loader.ts +10 -1
  249. package/src/extensibility/extensions/ouroboros-ooo-bridge.ts +63 -1
  250. package/src/extensibility/extensions/types.ts +5 -1
  251. package/src/extensibility/hooks/loader.ts +10 -2
  252. package/src/extensibility/plugins/marketplace/fetcher.ts +2 -2
  253. package/src/extensibility/plugins/marketplace/manager.ts +36 -10
  254. package/src/extensibility/slash-commands.ts +5 -0
  255. package/src/gjc-runtime/gc-runtime.ts +37 -7
  256. package/src/gjc-runtime/launch-tmux.ts +30 -15
  257. package/src/gjc-runtime/launch-worktree.test.ts +148 -0
  258. package/src/gjc-runtime/launch-worktree.ts +101 -14
  259. package/src/gjc-runtime/managed-owner-admission.ts +46 -2
  260. package/src/gjc-runtime/ralplan-current-final.ts +294 -0
  261. package/src/gjc-runtime/ralplan-runtime.ts +95 -1
  262. package/src/gjc-runtime/session-resolution.ts +38 -6
  263. package/src/gjc-runtime/session-state-lock.ts +59 -14
  264. package/src/gjc-runtime/state-runtime.ts +23 -19
  265. package/src/gjc-runtime/state-writer.ts +109 -5
  266. package/src/gjc-runtime/tmux-sessions.ts +93 -13
  267. package/src/gjc-runtime/ultragoal-change-set.ts +90 -11
  268. package/src/gjc-runtime/ultragoal-guard.ts +9 -1
  269. package/src/gjc-runtime/ultragoal-runtime.ts +15 -5
  270. package/src/harness-control-plane/finalize.ts +11 -0
  271. package/src/harness-control-plane/receipt-spool.ts +105 -28
  272. package/src/harness-control-plane/storage.ts +124 -6
  273. package/src/hindsight/content.ts +116 -16
  274. package/src/hindsight/mental-models.ts +22 -10
  275. package/src/hindsight/state.ts +7 -4
  276. package/src/hooks/native-skill-hook.ts +17 -12
  277. package/src/internal-urls/artifact-protocol.ts +3 -1
  278. package/src/internal-urls/docs-index.generated.ts +23 -22
  279. package/src/internal-urls/local-protocol.ts +167 -8
  280. package/src/internal-urls/types.ts +2 -0
  281. package/src/lsp/client.ts +2 -1
  282. package/src/lsp/clients/biome-client.ts +2 -0
  283. package/src/lsp/clients/swiftlint-client.ts +2 -0
  284. package/src/lsp/index.ts +29 -0
  285. package/src/lsp/workspace-path.ts +23 -0
  286. package/src/main.ts +330 -92
  287. package/src/memories/index.ts +25 -2
  288. package/src/migrate/action-planner.ts +574 -2
  289. package/src/migrate/adapters/claude-code.ts +162 -5
  290. package/src/migrate/adapters/codex.ts +77 -7
  291. package/src/migrate/adapters/index.ts +258 -5
  292. package/src/migrate/adapters/opencode.ts +10 -1
  293. package/src/migrate/executor.ts +222 -7
  294. package/src/migrate/hook-module.ts +193 -0
  295. package/src/migrate/report.ts +63 -2
  296. package/src/migrate/types.ts +84 -4
  297. package/src/modes/DESIGN.md +51 -0
  298. package/src/modes/acp/acp-agent.ts +10 -1
  299. package/src/modes/acp/permission-mode.ts +18 -1
  300. package/src/modes/components/agent-dashboard.ts +20 -4
  301. package/src/modes/components/assistant-message.ts +55 -1
  302. package/src/modes/components/customization/customization-dashboard.ts +7 -0
  303. package/src/modes/components/customization/import-wizard.ts +29 -3
  304. package/src/modes/components/model-selector.ts +157 -103
  305. package/src/modes/components/settings-selector.ts +103 -37
  306. package/src/modes/components/welcome.ts +3 -1
  307. package/src/modes/controllers/command-controller.ts +300 -9
  308. package/src/modes/controllers/event-controller.ts +1 -1
  309. package/src/modes/controllers/extension-ui-controller.ts +31 -1
  310. package/src/modes/controllers/goal-mode-controller.ts +79 -10
  311. package/src/modes/controllers/input-controller.ts +2 -0
  312. package/src/modes/controllers/plan-mode-controller.ts +66 -11
  313. package/src/modes/controllers/runtime-mcp-command-controller.ts +7 -6
  314. package/src/modes/controllers/selector-controller.ts +76 -7
  315. package/src/modes/interactive-mode.ts +123 -4
  316. package/src/modes/prompt-suggestion-controller.ts +1 -1
  317. package/src/modes/runtime-init.ts +5 -1
  318. package/src/modes/theme/theme.ts +15 -0
  319. package/src/modes/utils/host-status.ts +21 -10
  320. package/src/prompts/agent-fragments/browser-aside.md +2 -2
  321. package/src/prompts/system/irc-incoming.md +3 -1
  322. package/src/prompts/tools/debug.md +1 -1
  323. package/src/prompts/tools/irc.md +1 -1
  324. package/src/prompts/tools/read.md +1 -1
  325. package/src/prompts/tools/report-issue.md +13 -0
  326. package/src/prompts/tools/task.md +1 -1
  327. package/src/runtime-credential-selector.ts +2 -2
  328. package/src/runtime-mcp/content-limits.ts +7 -0
  329. package/src/runtime-mcp/manager-pool.test.ts +5 -4
  330. package/src/runtime-mcp/manager.ts +40 -3
  331. package/src/runtime-mcp/oauth-flow.ts +32 -6
  332. package/src/runtime-mcp/plugin-mcp-name-filter.ts +62 -0
  333. package/src/runtime-mcp/project-host-values.ts +12 -8
  334. package/src/runtime-mcp/render.ts +16 -1
  335. package/src/runtime-mcp/tool-bridge.ts +194 -21
  336. package/src/runtime-mcp/transports/stdio.ts +2 -1
  337. package/src/sdk/broker/broker-exit.ts +10 -5
  338. package/src/sdk/broker/broker.ts +484 -85
  339. package/src/sdk/broker/daemon-entry.ts +338 -116
  340. package/src/sdk/broker/doctor-restart.ts +2 -1
  341. package/src/sdk/broker/ensure.ts +1214 -268
  342. package/src/sdk/broker/hop.ts +286 -0
  343. package/src/sdk/broker/lifecycle-ledger.ts +38 -11
  344. package/src/sdk/broker/lifecycle.ts +102 -6
  345. package/src/sdk/broker/lock-host-identity.ts +29 -0
  346. package/src/sdk/broker/session-index.ts +91 -16
  347. package/src/sdk/broker/transport.ts +17 -1
  348. package/src/sdk/bus/chat-command-policy.ts +16 -3
  349. package/src/sdk/bus/chat-daemon-control.ts +2 -2
  350. package/src/sdk/bus/index.ts +460 -35
  351. package/src/sdk/bus/reconciliation-store.ts +201 -8
  352. package/src/sdk/bus/session-control.ts +2 -0
  353. package/src/sdk/bus/slack-daemon.ts +105 -9
  354. package/src/sdk/bus/telegram-daemon-contract.ts +9 -1
  355. package/src/sdk/bus/telegram-daemon.ts +10 -2
  356. package/src/sdk/bus/threaded-render.ts +20 -1
  357. package/src/sdk/cli/session-cli.ts +23 -6
  358. package/src/sdk/host/control/dispatch.ts +13 -1
  359. package/src/sdk/host/control/operations.ts +10 -1
  360. package/src/sdk/host/events.ts +67 -4
  361. package/src/sdk/host/host.ts +8 -2
  362. package/src/sdk/host/prompt-image-upload.ts +438 -0
  363. package/src/sdk/host/sdk-surface-parity.test.ts +15 -0
  364. package/src/sdk/host/session-runtime.test.ts +1737 -129
  365. package/src/sdk/host/session-runtime.ts +684 -83
  366. package/src/sdk/host/surface-policy.ts +4 -0
  367. package/src/sdk/host/websocket-transport.lifecycle.test.ts +90 -2
  368. package/src/sdk/host/websocket-transport.ts +19 -7
  369. package/src/sdk/lifecycle/service.ts +15 -1
  370. package/src/sdk/prompt-deadline-flush.ts +78 -5
  371. package/src/sdk/prompt-deadline-manager.ts +68 -14
  372. package/src/sdk/prompt-status.ts +6 -4
  373. package/src/sdk/protocol/adapter-validation.ts +81 -12
  374. package/src/sdk/protocol/operation-inventory.generated.json +261 -2
  375. package/src/sdk/protocol/operation-registry.ts +33 -3
  376. package/src/sdk/reconciliation-extensions.ts +1 -0
  377. package/src/sdk/session-list.ts +1 -0
  378. package/src/sdk/session.ts +237 -97
  379. package/src/session/agent-session.ts +2726 -479
  380. package/src/session/history-storage.ts +182 -12
  381. package/src/session/internal/managed-session-scope.ts +173 -57
  382. package/src/session/internal/managed-session-storage.ts +85 -12
  383. package/src/session/internal/native-publish-outcome.ts +5 -1
  384. package/src/session/messages.ts +47 -6
  385. package/src/session/session-manager.ts +326 -19
  386. package/src/session/startup-auth-config.ts +116 -8
  387. package/src/session/streaming-output.ts +262 -4
  388. package/src/session/terminal-abort.ts +14 -2
  389. package/src/session-import/redact.ts +53 -2
  390. package/src/session-import/service.ts +1 -0
  391. package/src/skill-state/workflow-mutation-guard.ts +2145 -206
  392. package/src/slash-commands/builtin-registry.ts +21 -6
  393. package/src/slash-commands/helpers/credential-switch.ts +10 -5
  394. package/src/slash-commands/helpers/mcp.ts +11 -3
  395. package/src/slash-commands/helpers/provider-auth-status.ts +456 -0
  396. package/src/ssh/ssh-executor.ts +9 -2
  397. package/src/stt/recorder.ts +26 -9
  398. package/src/system-prompt.ts +61 -16
  399. package/src/task/executor.ts +115 -20
  400. package/src/task/index.ts +389 -175
  401. package/src/task/role-body.ts +84 -0
  402. package/src/task/token-log-mode.test.ts +162 -0
  403. package/src/task/token-log.ts +91 -2
  404. package/src/tools/archive-reader.ts +650 -37
  405. package/src/tools/ask.ts +1 -0
  406. package/src/tools/ast-edit-write-path.ts +64 -0
  407. package/src/tools/ast-edit.ts +18 -1
  408. package/src/tools/ast-grep.ts +7 -2
  409. package/src/tools/atomic-file-write.ts +46 -15
  410. package/src/tools/auto-generated-guard.ts +15 -3
  411. package/src/tools/awaiting-input.ts +114 -0
  412. package/src/tools/bash-allowed-prefixes.ts +214 -6
  413. package/src/tools/bash-interactive.ts +14 -2
  414. package/src/tools/bash-skill-urls.ts +58 -5
  415. package/src/tools/bash.ts +113 -26
  416. package/src/tools/browser/tab-worker.ts +39 -13
  417. package/src/tools/browser.ts +17 -7
  418. package/src/tools/cron.ts +10 -1
  419. package/src/tools/debug.ts +16 -8
  420. package/src/tools/descriptors.test.ts +44 -0
  421. package/src/tools/descriptors.ts +50 -6
  422. package/src/tools/eval.ts +15 -0
  423. package/src/tools/fetch.ts +93 -4
  424. package/src/tools/gh.ts +27 -12
  425. package/src/tools/image-gen.ts +20 -6
  426. package/src/tools/index.ts +2 -0
  427. package/src/tools/irc.ts +5 -3
  428. package/src/tools/monitor.ts +9 -1
  429. package/src/tools/output-meta.ts +74 -5
  430. package/src/tools/python.ts +1 -1
  431. package/src/tools/read.ts +26 -37
  432. package/src/tools/recipe/runner.ts +23 -12
  433. package/src/tools/render-utils.ts +2 -2
  434. package/src/tools/report-issue.ts +184 -0
  435. package/src/tools/search.ts +3 -2
  436. package/src/tools/ssh.ts +274 -8
  437. package/src/tools/subagent-render.ts +114 -12
  438. package/src/tools/subagent.ts +118 -5
  439. package/src/tools/tmux-self-injection-guard.ts +3301 -122
  440. package/src/tools/todo-write.ts +41 -3
  441. package/src/tools/tool-catalog.generated.ts +32 -4
  442. package/src/tools/ultragoal-ask-guard.ts +13 -1
  443. package/src/tools/write.ts +42 -3
  444. package/src/tui/tree-list.ts +15 -1
  445. package/src/utils/commit-message-generator.ts +12 -4
  446. package/src/utils/external-editor.ts +21 -7
  447. package/src/utils/file-mentions.ts +75 -7
  448. package/src/utils/git.ts +38 -7
  449. package/src/utils/image-limits.ts +8 -0
  450. package/src/utils/image-loading.ts +1 -1
  451. package/src/utils/open.ts +73 -4
  452. package/src/utils/pasted-image-loading.ts +9 -8
  453. package/src/utils/prompt-suggestion.ts +5 -4
  454. package/src/utils/shell-snapshot.ts +9 -1
  455. package/src/utils/title-generator.ts +72 -22
  456. package/src/web/scrapers/index.ts +3 -1
  457. package/src/web/scrapers/types.ts +8 -0
  458. package/src/web/scrapers/youtube.ts +3 -2
  459. package/src/web/search/index.ts +2 -1
  460. package/src/web/search/providers/codex.ts +29 -32
  461. package/src/web/search/providers/insane.ts +91 -28
  462. package/src/web/search/providers/searxng.ts +62 -10
@@ -3,9 +3,16 @@ import * as fs from "node:fs/promises";
3
3
  import path from "node:path";
4
4
  import { logger, resolveEquivalentPath } from "@gajae-code/utils";
5
5
  import { nativeProcessBindings } from "@gajae-code/utils/native-process";
6
- import { type FileLockOptions, isFileLockAcquireTimeout, withFileLock } from "../../config/file-lock";
6
+ import {
7
+ describeRetainedLockTransition,
8
+ FILE_LOCK_ORPHAN_TRANSITION_ADOPTION_AGE_MS,
9
+ type FileLockOptions,
10
+ isFileLockAcquireTimeout,
11
+ withFileLock,
12
+ } from "../../config/file-lock";
7
13
  import { repo } from "../../utils/git";
8
14
  import { endpointIncarnation } from "./endpoint-authority";
15
+ import { brokerLockHostIdentity } from "./lock-host-identity";
9
16
  import { processIncarnation } from "./process-incarnation";
10
17
  import {
11
18
  assertSupportedSessionIndexEventVersion,
@@ -574,6 +581,7 @@ function projectIdentity(
574
581
  ambiguous: boolean,
575
582
  now: number,
576
583
  probedIncarnations?: ReadonlyMap<string, string | undefined>,
584
+ skipOsProcessProbes = false,
577
585
  ): IndexedSession {
578
586
  const { latest, heartbeat } = state;
579
587
  const terminal = isTerminalEvent(latest);
@@ -582,7 +590,7 @@ function projectIdentity(
582
590
  latest.hostUnregisteredReason === "process_exited" || latest.hostUnregisteredReason === "detached_idle"
583
591
  ? latest.hostUnregisteredReason
584
592
  : undefined;
585
- const pidAlive = alive(latest.pid);
593
+ const pidAlive = !skipOsProcessProbes && alive(latest.pid);
586
594
  // Liveness evidence is host-written: a checkpointed heartbeat, or the
587
595
  // `host_registered` event the host appended itself. Counting registration
588
596
  // closes the up-to-one-interval window where a just-registered session
@@ -602,7 +610,7 @@ function projectIdentity(
602
610
  // costing a powershell.exe spawn per stale registration on Windows.
603
611
  const probeKey = `${latest.sessionId}\u0000${latest.endpointGeneration}\u0000${latest.pid}`;
604
612
  const currentIncarnation =
605
- recordedIncarnation === undefined || !pidAlive
613
+ skipOsProcessProbes || recordedIncarnation === undefined || !pidAlive
606
614
  ? undefined
607
615
  : probedIncarnations !== undefined
608
616
  ? probedIncarnations.get(probeKey)
@@ -654,7 +662,9 @@ function reduceEvents(
654
662
  agentDir: string,
655
663
  probedIncarnations?: ReadonlyMap<string, string | undefined>,
656
664
  sessionIds?: ReadonlySet<string>,
665
+ options: { readonly skipOsProcessProbes?: boolean } = {},
657
666
  ): SessionIndexProjection {
667
+ const skipOsProcessProbes = options.skipOsProcessProbes === true;
658
668
  // Resolved once: the fence-row check runs per root, and only this side of the
659
669
  // comparison is ours to normalize.
660
670
  const agentDirIdentity = resolveEquivalentPath(agentDir);
@@ -741,7 +751,8 @@ function reduceEvents(
741
751
  const fencing = fencingRoots.get(sessionId);
742
752
  const unresolved = unresolvedRoots.get(sessionId);
743
753
  const ambiguous = (fencing?.size ?? 0) > 1;
744
- for (const state of states) identities.push(projectIdentity(state, ambiguous, now, probedIncarnations));
754
+ for (const state of states)
755
+ identities.push(projectIdentity(state, ambiguous, now, probedIncarnations, skipOsProcessProbes));
745
756
  const defaultAuthority = preferredIdentity(states);
746
757
  if (defaultAuthority === undefined || defaultAuthority.latest.type === "session_deleted") continue;
747
758
  let authority = defaultAuthority;
@@ -754,14 +765,42 @@ function reduceEvents(
754
765
  const survivingAuthority = onlyRoot ? preferredIdentity(onlyRoot) : undefined;
755
766
  if (survivingAuthority !== undefined) authority = survivingAuthority;
756
767
  }
757
- sessions.push(projectIdentity(authority, ambiguous, now, probedIncarnations));
768
+ sessions.push(projectIdentity(authority, ambiguous, now, probedIncarnations, skipOsProcessProbes));
758
769
  }
759
770
  return { identities, sessions };
760
771
  }
761
772
 
762
773
  // Global launch bursts may queue behind legitimate long index transactions. Keep
763
774
  // this bounded at one minute while the shared lock's exact dead-owner recovery runs.
764
- const SESSION_INDEX_LOCK_OPTIONS = { retries: 600, retryDelayMs: 100 } as const;
775
+ const SESSION_INDEX_LOCK_OPTIONS = {
776
+ retries: 600,
777
+ retryDelayMs: 100,
778
+ orphanTransitionAgeMs: FILE_LOCK_ORPHAN_TRANSITION_ADOPTION_AGE_MS,
779
+ } as const;
780
+ // Leave one retry interval beyond the transition's safe-adoption age so a fresh
781
+ // ownerless transition can be reclaimed during ordinary startup.
782
+ const SESSION_INDEX_STARTUP_LOCK_WAIT_MS =
783
+ FILE_LOCK_ORPHAN_TRANSITION_ADOPTION_AGE_MS + SESSION_INDEX_LOCK_OPTIONS.retryDelayMs * 2;
784
+
785
+ /** Bound ordinary bootstrap waits; authorized doctor successors may use the full prepared window. */
786
+ export function sessionIndexStartupLockOptions(
787
+ deadline: number,
788
+ signal?: AbortSignal,
789
+ policy: "ordinary" | "authorized-successor" = "ordinary",
790
+ ): FileLockOptions {
791
+ const boundedDeadline =
792
+ policy === "authorized-successor"
793
+ ? deadline
794
+ : Math.min(deadline, performance.now() + SESSION_INDEX_STARTUP_LOCK_WAIT_MS);
795
+ return {
796
+ ...SESSION_INDEX_LOCK_OPTIONS,
797
+ retries: Math.min(
798
+ SESSION_INDEX_LOCK_OPTIONS.retries,
799
+ Math.max(1, Math.ceil((boundedDeadline - performance.now()) / SESSION_INDEX_LOCK_OPTIONS.retryDelayMs)),
800
+ ),
801
+ ...(signal === undefined ? {} : { signal }),
802
+ };
803
+ }
765
804
 
766
805
  /**
767
806
  * Observation window for one locked index transaction (#4544). This never times
@@ -811,7 +850,7 @@ const SESSION_INDEX_REPLAY_FRESHNESS_MS = 2_000;
811
850
  */
812
851
  const SESSION_HEARTBEAT_CHECKPOINT_ATTEMPTS = 4;
813
852
  /** One elapsed budget for queueing, probing and every reacquisition in a pass. */
814
- const SESSION_HEARTBEAT_CHECKPOINT_BUDGET_MS = 15_000;
853
+ export const SESSION_HEARTBEAT_CHECKPOINT_BUDGET_MS = 15_000;
815
854
  const STALE_OBSERVATION: unique symbol = Symbol("stale-heartbeat-observation");
816
855
  /** Maximum distinct live identity probes admitted by one public status query. */
817
856
  const SESSION_GENERATION_PROBE_LIMIT = 32;
@@ -822,13 +861,26 @@ const SESSION_GENERATION_PROBE_LIMIT = 32;
822
861
  * is named in a slow-operation warning when it holds the lock beyond the
823
862
  * observation window and (b) the lock budget cannot silently drift per call
824
863
  * site.
864
+ *
865
+ * Every acquisition also carries this installation's host identity.
866
+ * `staleLockSnapshot` treats a host-qualified owner as foreign when the acquirer
867
+ * omits `ownerHostId`, so a same-host process that died holding the lock is never
868
+ * reclaimed and broker startup burns its whole retry budget. Identity is applied
869
+ * under the options a caller passed for budget and cancellation, so startup,
870
+ * heartbeat, and ordinary index transactions share one reclaim rule: a proven-dead
871
+ * same-host owner can be recovered, and a live or cross-host owner cannot.
825
872
  */
826
- function withSessionIndexLock<T>(
873
+ async function sessionIndexLockOptions(agentDir: string, options: FileLockOptions): Promise<FileLockOptions> {
874
+ return { ...options, ...(await brokerLockHostIdentity(agentDir)) };
875
+ }
876
+
877
+ async function withSessionIndexLock<T>(
827
878
  operation: string,
828
879
  agentDir: string,
829
880
  callback: () => Promise<T>,
830
881
  options: FileLockOptions = SESSION_INDEX_LOCK_OPTIONS,
831
882
  ): Promise<T> {
883
+ const lockOptions = await sessionIndexLockOptions(agentDir, options);
832
884
  return withFileLock(
833
885
  logFor(agentDir),
834
886
  async () => {
@@ -848,7 +900,7 @@ function withSessionIndexLock<T>(
848
900
  clearTimeout(note);
849
901
  }
850
902
  },
851
- options,
903
+ lockOptions,
852
904
  );
853
905
  }
854
906
  function isValidSnapshot(snapshot: unknown): snapshot is { indexSeq: number; events: SessionIndexEvent[] } {
@@ -1183,7 +1235,7 @@ export class SessionIndex {
1183
1235
  });
1184
1236
  return promise;
1185
1237
  }
1186
- async open(): Promise<this> {
1238
+ async open(options: FileLockOptions = SESSION_INDEX_LOCK_OPTIONS): Promise<this> {
1187
1239
  const indexPath = path.resolve(logFor(this.#agentDir));
1188
1240
  let group = SessionIndex.#openGroups.get(indexPath);
1189
1241
  if (!group || group.closed) {
@@ -1193,7 +1245,7 @@ export class SessionIndex {
1193
1245
  }
1194
1246
  await group.promise;
1195
1247
  await SessionIndex.#enqueue(indexPath, () =>
1196
- withSessionIndexLock("replay", this.#agentDir, () => this.#replayUnderLock()),
1248
+ withSessionIndexLock("replay", this.#agentDir, () => this.#replayUnderLock(), options),
1197
1249
  );
1198
1250
  return this;
1199
1251
  }
@@ -2408,7 +2460,17 @@ export class SessionIndex {
2408
2460
  // so startup readiness never overtakes lock release.
2409
2461
  return await checkpoint();
2410
2462
  } catch (error) {
2411
- if (signal.aborted && error === signal.reason) return 0;
2463
+ if (signal.aborted && error === signal.reason) {
2464
+ // The budget abort can beat the lock layer's own exhaustion. Asking
2465
+ // directly keeps a retained removal transition from being reported as
2466
+ // an idle cycle: the blocked-renewal caller needs the reason and path.
2467
+ const blocked = await describeRetainedLockTransition(
2468
+ path.resolve(logFor(this.#agentDir)),
2469
+ await sessionIndexLockOptions(this.#agentDir, SESSION_INDEX_LOCK_OPTIONS),
2470
+ );
2471
+ if (blocked) throw blocked;
2472
+ return 0;
2473
+ }
2412
2474
  if (
2413
2475
  performance.now() >= deadline &&
2414
2476
  isFileLockAcquireTimeout(error) &&
@@ -2455,14 +2517,25 @@ export class SessionIndex {
2455
2517
  // revalidation that never probes the OS under the lock: the next pass
2456
2518
  // re-probes from scratch.
2457
2519
  const probed = new Map<string, string | undefined>();
2458
- for (const row of reduceEvents(this.#events, now, this.#agentDir).sessions) {
2520
+ // This projection is only used to select structurally eligible rows; its
2521
+ // `live` field is not consumed here. Skip OS probes during projection so
2522
+ // the deadline-aware loop below performs only the required observations.
2523
+ const candidates = reduceEvents(this.#events, now, this.#agentDir, undefined, undefined, {
2524
+ skipOsProcessProbes: true,
2525
+ }).sessions;
2526
+ if (signal.aborted || performance.now() >= deadline) return 0;
2527
+ for (const row of candidates) {
2528
+ if (signal.aborted || performance.now() >= deadline) return 0;
2459
2529
  if (!isSessionAuthorityEligible(row) || row.terminal || row.terminalUncertain) continue;
2460
2530
  if (row.lastHeartbeatAt !== undefined && now - row.lastHeartbeatAt < SESSION_HEARTBEAT_INTERVAL_MS)
2461
2531
  continue;
2462
- if (!alive(row.pid)) continue;
2463
2532
  const recordedIncarnation = row.hostIncarnation ?? row.processIncarnation;
2464
2533
  if (recordedIncarnation === undefined) continue;
2465
- probed.set(`${row.sessionId}\u0000${row.endpointGeneration}\u0000${row.pid}`, processIncarnation(row.pid));
2534
+ if (!alive(row.pid)) continue;
2535
+ if (signal.aborted || performance.now() >= deadline) return 0;
2536
+ const currentIncarnation = processIncarnation(row.pid);
2537
+ if (signal.aborted || performance.now() >= deadline) return 0;
2538
+ probed.set(`${row.sessionId}\u0000${row.endpointGeneration}\u0000${row.pid}`, currentIncarnation);
2466
2539
  }
2467
2540
  const probedAt = performance.now();
2468
2541
  if (signal.aborted || probedAt >= deadline) return 0;
@@ -2492,7 +2565,9 @@ export class SessionIndex {
2492
2565
  if (performance.now() - probedAt > SESSION_INDEX_REPLAY_FRESHNESS_MS) return STALE_OBSERVATION;
2493
2566
  if (this.#corruptSuffix) return 0;
2494
2567
  const events: SessionIndexEvent[] = [];
2495
- const rows = reduceEvents(this.#events, now, this.#agentDir, probed).sessions;
2568
+ const rows = reduceEvents(this.#events, now, this.#agentDir, probed, undefined, {
2569
+ skipOsProcessProbes: true,
2570
+ }).sessions;
2496
2571
  for (const row of rows) {
2497
2572
  if (!isSessionAuthorityEligible(row) || row.terminal || row.terminalUncertain) continue;
2498
2573
  if (row.lastHeartbeatAt !== undefined && now - row.lastHeartbeatAt < SESSION_HEARTBEAT_INTERVAL_MS)
@@ -66,6 +66,7 @@ export class BrokerTransport {
66
66
  readonly #requestedPort: number;
67
67
  #server: Bun.Server<undefined> | null = null;
68
68
  #port = 0;
69
+ readonly #clients = new Set<ServerWebSocket<unknown>>();
69
70
  readonly #shutdownBackpressured = new WeakSet<ServerWebSocket<unknown>>();
70
71
  #shutdownRequested = false;
71
72
  constructor(broker: Broker, token: string, port = 0) {
@@ -77,6 +78,10 @@ export class BrokerTransport {
77
78
  if (!this.#server) throw new Error("Broker transport is not running");
78
79
  return this.#port;
79
80
  }
81
+ /** Sockets a client holds open right now; the broker outlives every one of them. */
82
+ get clientCount(): number {
83
+ return this.#clients.size;
84
+ }
80
85
  async start(): Promise<number> {
81
86
  if (this.#server) return this.#port;
82
87
  this.#server = Bun.serve({
@@ -95,8 +100,13 @@ export class BrokerTransport {
95
100
  websocket: {
96
101
  maxPayloadLength: MAX_BROKER_JSON_FRAME_BYTES * 2,
97
102
  open: socket => {
103
+ this.#clients.add(socket);
98
104
  send(socket, { type: "broker_hello", protocolVersion: PROTOCOL_VERSION });
99
105
  },
106
+ close: socket => {
107
+ this.#clients.delete(socket);
108
+ this.#shutdownBackpressured.delete(socket);
109
+ },
100
110
  message: (socket, message) => void this.#handleMessage(socket, message),
101
111
  drain: socket => {
102
112
  if (this.#shutdownBackpressured.delete(socket)) this.#scheduleStopAfterShutdownResponse();
@@ -147,7 +157,13 @@ export class BrokerTransport {
147
157
  sendError(socket, frame.id, "invalid_input", "idempotencyKey must be a string");
148
158
  return;
149
159
  }
150
- if (!this.#broker.ownsDiscovery) {
160
+ // After initial publication, the owner retains the authenticated endpoint
161
+ // so it can stop this exact broker even after discovery is lost. Before
162
+ // publication readiness, shutdown remains unavailable.
163
+ if (
164
+ !this.#broker.ownsDiscovery &&
165
+ !(frame.operation === "broker.shutdown" && this.#broker.hasPublishedDiscovery)
166
+ ) {
151
167
  sendError(socket, frame.id, "unavailable", "broker publication is unavailable");
152
168
  return;
153
169
  }
@@ -1,11 +1,15 @@
1
- import { validateAdapterSecretFields } from "../protocol/adapter-validation";
1
+ import {
2
+ type AdapterValidationError,
3
+ validateAdapterControl,
4
+ validateAdapterSecretFields,
5
+ } from "../protocol/adapter-validation";
2
6
  import { type Adapter, OPERATIONS, type Operation, type OperationKind } from "../protocol/operation-registry";
3
7
 
4
8
  export type ChatTransport = Extract<Adapter, "telegram" | "discord" | "slack">;
5
9
  export type ChatOperationDisposition = "allowed" | "unsupported_on_chat";
6
10
 
7
11
  export interface ChatCommandError {
8
- code: "unsupported_on_chat" | "secret_input_forbidden";
12
+ code: "unsupported_on_chat" | "secret_input_forbidden" | "ultrafast_tier_forbidden" | AdapterValidationError["code"];
9
13
  message: string;
10
14
  }
11
15
 
@@ -57,12 +61,21 @@ export function authorizeChatOperation(transport: ChatTransport, request: ChatOp
57
61
  candidate => candidate.kind === request.kind && candidate.sdkId === request.operation,
58
62
  );
59
63
  if (!operation) return unsupported();
60
- if (validateAdapterSecretFields(operation.sdkId, (request.input ?? {}) as Record<string, unknown>)) {
64
+ const secretValidation = validateAdapterSecretFields(
65
+ operation.sdkId,
66
+ (request.input ?? {}) as Record<string, unknown>,
67
+ );
68
+ if (secretValidation?.code === "secret_field_forbidden") {
61
69
  return {
62
70
  ok: false,
63
71
  error: { code: "secret_input_forbidden", message: "Secret configuration input is forbidden on chat." },
64
72
  };
65
73
  }
74
+ if (secretValidation) return { ok: false, error: secretValidation };
75
+ if (operation.kind === "control") {
76
+ const invalid = validateAdapterControl(operation.sdkId, (request.input ?? {}) as Record<string, unknown>);
77
+ if (invalid) return { ok: false, error: invalid };
78
+ }
66
79
  return CHAT_OPERATION_POLICY[transport][operation.id] === "allowed" ? { ok: true } : unsupported();
67
80
  }
68
81
 
@@ -141,8 +141,8 @@ export type ChatDaemonAction = "stop" | "reload";
141
141
  * crashes, recovery, and attachment retirement cannot replay ambiguous work.
142
142
  */
143
143
  export const CHAT_DAEMON_GENERATIONS: Readonly<Record<ChatDaemonKind, number>> = {
144
- discord: 84,
145
- slack: 91,
144
+ discord: 85,
145
+ slack: 93,
146
146
  };
147
147
 
148
148
  export function chatDaemonGeneration(kind: ChatDaemonKind): number {