openryoko 2026.10.9 → 2026.10.13

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 (669) hide show
  1. package/dist/bin/jimmy.js +51 -1
  2. package/dist/bin/jimmy.js.map +1 -1
  3. package/dist/package.json +2 -1
  4. package/dist/src/backup/archive.d.ts +65 -0
  5. package/dist/src/backup/archive.d.ts.map +1 -0
  6. package/dist/src/backup/archive.js +214 -0
  7. package/dist/src/backup/archive.js.map +1 -0
  8. package/dist/src/backup/catalog.d.ts +64 -0
  9. package/dist/src/backup/catalog.d.ts.map +1 -0
  10. package/dist/src/backup/catalog.js +252 -0
  11. package/dist/src/backup/catalog.js.map +1 -0
  12. package/dist/src/backup/database-restore.d.ts +63 -0
  13. package/dist/src/backup/database-restore.d.ts.map +1 -0
  14. package/dist/src/backup/database-restore.js +236 -0
  15. package/dist/src/backup/database-restore.js.map +1 -0
  16. package/dist/src/backup/database-source.d.ts +70 -0
  17. package/dist/src/backup/database-source.d.ts.map +1 -0
  18. package/dist/src/backup/database-source.js +70 -0
  19. package/dist/src/backup/database-source.js.map +1 -0
  20. package/dist/src/backup/format.d.ts +4 -0
  21. package/dist/src/backup/format.d.ts.map +1 -0
  22. package/dist/src/backup/format.js +15 -0
  23. package/dist/src/backup/format.js.map +1 -0
  24. package/dist/src/backup/gateway-liveness.d.ts +44 -0
  25. package/dist/src/backup/gateway-liveness.d.ts.map +1 -0
  26. package/dist/src/backup/gateway-liveness.js +120 -0
  27. package/dist/src/backup/gateway-liveness.js.map +1 -0
  28. package/dist/src/backup/inspect.d.ts +45 -0
  29. package/dist/src/backup/inspect.d.ts.map +1 -0
  30. package/dist/src/backup/inspect.js +291 -0
  31. package/dist/src/backup/inspect.js.map +1 -0
  32. package/dist/src/backup/layout.d.ts +11 -0
  33. package/dist/src/backup/layout.d.ts.map +1 -0
  34. package/dist/src/backup/layout.js +16 -0
  35. package/dist/src/backup/layout.js.map +1 -0
  36. package/dist/src/backup/limits.d.ts +54 -0
  37. package/dist/src/backup/limits.d.ts.map +1 -0
  38. package/dist/src/backup/limits.js +59 -0
  39. package/dist/src/backup/limits.js.map +1 -0
  40. package/dist/src/backup/manifest.d.ts +45 -0
  41. package/dist/src/backup/manifest.d.ts.map +1 -0
  42. package/dist/src/backup/manifest.js +77 -0
  43. package/dist/src/backup/manifest.js.map +1 -0
  44. package/dist/src/backup/restore.d.ts +73 -0
  45. package/dist/src/backup/restore.d.ts.map +1 -0
  46. package/dist/src/backup/restore.js +685 -0
  47. package/dist/src/backup/restore.js.map +1 -0
  48. package/dist/src/backup/run.d.ts +76 -0
  49. package/dist/src/backup/run.d.ts.map +1 -0
  50. package/dist/src/backup/run.js +181 -0
  51. package/dist/src/backup/run.js.map +1 -0
  52. package/dist/src/backup/scheduler.d.ts +51 -0
  53. package/dist/src/backup/scheduler.d.ts.map +1 -0
  54. package/dist/src/backup/scheduler.js +198 -0
  55. package/dist/src/backup/scheduler.js.map +1 -0
  56. package/dist/src/backup/settings.d.ts +44 -0
  57. package/dist/src/backup/settings.d.ts.map +1 -0
  58. package/dist/src/backup/settings.js +91 -0
  59. package/dist/src/backup/settings.js.map +1 -0
  60. package/dist/src/backup/space.d.ts +22 -0
  61. package/dist/src/backup/space.d.ts.map +1 -0
  62. package/dist/src/backup/space.js +47 -0
  63. package/dist/src/backup/space.js.map +1 -0
  64. package/dist/src/backup/state.d.ts +46 -0
  65. package/dist/src/backup/state.d.ts.map +1 -0
  66. package/dist/src/backup/state.js +137 -0
  67. package/dist/src/backup/state.js.map +1 -0
  68. package/dist/src/backup/tar.d.ts +64 -0
  69. package/dist/src/backup/tar.d.ts.map +1 -0
  70. package/dist/src/backup/tar.js +274 -0
  71. package/dist/src/backup/tar.js.map +1 -0
  72. package/dist/src/backup/targets.d.ts +85 -0
  73. package/dist/src/backup/targets.d.ts.map +1 -0
  74. package/dist/src/backup/targets.js +104 -0
  75. package/dist/src/backup/targets.js.map +1 -0
  76. package/dist/src/backup/walk.d.ts +42 -0
  77. package/dist/src/backup/walk.d.ts.map +1 -0
  78. package/dist/src/backup/walk.js +324 -0
  79. package/dist/src/backup/walk.js.map +1 -0
  80. package/dist/src/cli/backup.d.ts +45 -0
  81. package/dist/src/cli/backup.d.ts.map +1 -0
  82. package/dist/src/cli/backup.js +344 -0
  83. package/dist/src/cli/backup.js.map +1 -0
  84. package/dist/src/cli/bundled-skills.d.ts +7 -1
  85. package/dist/src/cli/bundled-skills.d.ts.map +1 -1
  86. package/dist/src/cli/bundled-skills.js +12 -2
  87. package/dist/src/cli/bundled-skills.js.map +1 -1
  88. package/dist/src/cli/config-failure.d.ts +18 -0
  89. package/dist/src/cli/config-failure.d.ts.map +1 -0
  90. package/dist/src/cli/config-failure.js +39 -0
  91. package/dist/src/cli/config-failure.js.map +1 -0
  92. package/dist/src/cli/gateway-audit.d.ts +3 -0
  93. package/dist/src/cli/gateway-audit.d.ts.map +1 -1
  94. package/dist/src/cli/gateway-audit.js +61 -14
  95. package/dist/src/cli/gateway-audit.js.map +1 -1
  96. package/dist/src/cli/gateway-url-backup.d.ts +21 -0
  97. package/dist/src/cli/gateway-url-backup.d.ts.map +1 -0
  98. package/dist/src/cli/gateway-url-backup.js +87 -0
  99. package/dist/src/cli/gateway-url-backup.js.map +1 -0
  100. package/dist/src/cli/home-copy.d.ts +37 -0
  101. package/dist/src/cli/home-copy.d.ts.map +1 -0
  102. package/dist/src/cli/home-copy.js +155 -0
  103. package/dist/src/cli/home-copy.js.map +1 -0
  104. package/dist/src/cli/interactive-config.d.ts +5 -0
  105. package/dist/src/cli/interactive-config.d.ts.map +1 -1
  106. package/dist/src/cli/interactive-config.js +16 -7
  107. package/dist/src/cli/interactive-config.js.map +1 -1
  108. package/dist/src/cli/migrate.d.ts +16 -0
  109. package/dist/src/cli/migrate.d.ts.map +1 -1
  110. package/dist/src/cli/migrate.js +358 -69
  111. package/dist/src/cli/migrate.js.map +1 -1
  112. package/dist/src/cli/migration-declarations.d.ts +24 -0
  113. package/dist/src/cli/migration-declarations.d.ts.map +1 -0
  114. package/dist/src/cli/migration-declarations.js +54 -0
  115. package/dist/src/cli/migration-declarations.js.map +1 -0
  116. package/dist/src/cli/start.d.ts.map +1 -1
  117. package/dist/src/cli/start.js +40 -1
  118. package/dist/src/cli/start.js.map +1 -1
  119. package/dist/src/connectors/chunked-send.d.ts +27 -0
  120. package/dist/src/connectors/chunked-send.d.ts.map +1 -0
  121. package/dist/src/connectors/chunked-send.js +40 -0
  122. package/dist/src/connectors/chunked-send.js.map +1 -0
  123. package/dist/src/connectors/cron/index.d.ts +10 -0
  124. package/dist/src/connectors/cron/index.d.ts.map +1 -1
  125. package/dist/src/connectors/cron/index.js +26 -3
  126. package/dist/src/connectors/cron/index.js.map +1 -1
  127. package/dist/src/connectors/discord/attachments.d.ts +25 -0
  128. package/dist/src/connectors/discord/attachments.d.ts.map +1 -0
  129. package/dist/src/connectors/discord/attachments.js +33 -0
  130. package/dist/src/connectors/discord/attachments.js.map +1 -0
  131. package/dist/src/connectors/discord/format.d.ts +17 -1
  132. package/dist/src/connectors/discord/format.d.ts.map +1 -1
  133. package/dist/src/connectors/discord/format.js +36 -6
  134. package/dist/src/connectors/discord/format.js.map +1 -1
  135. package/dist/src/connectors/discord/index.d.ts +12 -0
  136. package/dist/src/connectors/discord/index.d.ts.map +1 -1
  137. package/dist/src/connectors/discord/index.js +47 -40
  138. package/dist/src/connectors/discord/index.js.map +1 -1
  139. package/dist/src/connectors/discord/remote.d.ts +45 -1
  140. package/dist/src/connectors/discord/remote.d.ts.map +1 -1
  141. package/dist/src/connectors/discord/remote.js +147 -22
  142. package/dist/src/connectors/discord/remote.js.map +1 -1
  143. package/dist/src/connectors/slack/attachments.d.ts +25 -0
  144. package/dist/src/connectors/slack/attachments.d.ts.map +1 -0
  145. package/dist/src/connectors/slack/attachments.js +32 -0
  146. package/dist/src/connectors/slack/attachments.js.map +1 -0
  147. package/dist/src/connectors/slack/auth-test-cache.d.ts +22 -0
  148. package/dist/src/connectors/slack/auth-test-cache.d.ts.map +1 -0
  149. package/dist/src/connectors/slack/auth-test-cache.js +34 -0
  150. package/dist/src/connectors/slack/auth-test-cache.js.map +1 -0
  151. package/dist/src/connectors/slack/format.d.ts +6 -1
  152. package/dist/src/connectors/slack/format.d.ts.map +1 -1
  153. package/dist/src/connectors/slack/format.js +65 -13
  154. package/dist/src/connectors/slack/format.js.map +1 -1
  155. package/dist/src/connectors/slack/index.d.ts +4 -0
  156. package/dist/src/connectors/slack/index.d.ts.map +1 -1
  157. package/dist/src/connectors/slack/index.js +64 -52
  158. package/dist/src/connectors/slack/index.js.map +1 -1
  159. package/dist/src/connectors/slack/provider-auth-blocks.d.ts +62 -0
  160. package/dist/src/connectors/slack/provider-auth-blocks.d.ts.map +1 -0
  161. package/dist/src/connectors/slack/provider-auth-blocks.js +204 -0
  162. package/dist/src/connectors/slack/provider-auth-blocks.js.map +1 -0
  163. package/dist/src/connectors/slack/provider-auth.d.ts +126 -0
  164. package/dist/src/connectors/slack/provider-auth.d.ts.map +1 -0
  165. package/dist/src/connectors/slack/provider-auth.js +357 -0
  166. package/dist/src/connectors/slack/provider-auth.js.map +1 -0
  167. package/dist/src/connectors/telegram/index.d.ts +5 -0
  168. package/dist/src/connectors/telegram/index.d.ts.map +1 -1
  169. package/dist/src/connectors/telegram/index.js +14 -22
  170. package/dist/src/connectors/telegram/index.js.map +1 -1
  171. package/dist/src/connectors/whatsapp/index.d.ts +3 -0
  172. package/dist/src/connectors/whatsapp/index.d.ts.map +1 -1
  173. package/dist/src/connectors/whatsapp/index.js +33 -14
  174. package/dist/src/connectors/whatsapp/index.js.map +1 -1
  175. package/dist/src/cron/alert-throttle.d.ts +28 -0
  176. package/dist/src/cron/alert-throttle.d.ts.map +1 -0
  177. package/dist/src/cron/alert-throttle.js +106 -0
  178. package/dist/src/cron/alert-throttle.js.map +1 -0
  179. package/dist/src/cron/jobs.d.ts +8 -0
  180. package/dist/src/cron/jobs.d.ts.map +1 -1
  181. package/dist/src/cron/jobs.js +27 -1
  182. package/dist/src/cron/jobs.js.map +1 -1
  183. package/dist/src/cron/run-outcome.d.ts +28 -0
  184. package/dist/src/cron/run-outcome.d.ts.map +1 -0
  185. package/dist/src/cron/run-outcome.js +66 -0
  186. package/dist/src/cron/run-outcome.js.map +1 -0
  187. package/dist/src/cron/runner.d.ts.map +1 -1
  188. package/dist/src/cron/runner.js +68 -5
  189. package/dist/src/cron/runner.js.map +1 -1
  190. package/dist/src/cron/scheduler.d.ts +8 -1
  191. package/dist/src/cron/scheduler.d.ts.map +1 -1
  192. package/dist/src/cron/scheduler.js +11 -4
  193. package/dist/src/cron/scheduler.js.map +1 -1
  194. package/dist/src/cron/waiting-fires.d.ts +18 -0
  195. package/dist/src/cron/waiting-fires.d.ts.map +1 -0
  196. package/dist/src/cron/waiting-fires.js +49 -0
  197. package/dist/src/cron/waiting-fires.js.map +1 -0
  198. package/dist/src/engines/claude-interactive.d.ts +15 -2
  199. package/dist/src/engines/claude-interactive.d.ts.map +1 -1
  200. package/dist/src/engines/claude-interactive.js +32 -11
  201. package/dist/src/engines/claude-interactive.js.map +1 -1
  202. package/dist/src/engines/claude.d.ts.map +1 -1
  203. package/dist/src/engines/claude.js +37 -5
  204. package/dist/src/engines/claude.js.map +1 -1
  205. package/dist/src/engines/codex.d.ts.map +1 -1
  206. package/dist/src/engines/codex.js +1 -0
  207. package/dist/src/engines/codex.js.map +1 -1
  208. package/dist/src/engines/gemini.d.ts.map +1 -1
  209. package/dist/src/engines/gemini.js +1 -0
  210. package/dist/src/engines/gemini.js.map +1 -1
  211. package/dist/src/gateway/api.d.ts.map +1 -1
  212. package/dist/src/gateway/api.js +182 -150
  213. package/dist/src/gateway/api.js.map +1 -1
  214. package/dist/src/gateway/config-redaction.d.ts +32 -0
  215. package/dist/src/gateway/config-redaction.d.ts.map +1 -0
  216. package/dist/src/gateway/config-redaction.js +139 -0
  217. package/dist/src/gateway/config-redaction.js.map +1 -0
  218. package/dist/src/gateway/config-revision.d.ts +46 -0
  219. package/dist/src/gateway/config-revision.d.ts.map +1 -0
  220. package/dist/src/gateway/config-revision.js +63 -0
  221. package/dist/src/gateway/config-revision.js.map +1 -0
  222. package/dist/src/gateway/connector-config.d.ts +21 -0
  223. package/dist/src/gateway/connector-config.d.ts.map +1 -0
  224. package/dist/src/gateway/connector-config.js +24 -0
  225. package/dist/src/gateway/connector-config.js.map +1 -0
  226. package/dist/src/gateway/daemon-entry.js +5 -0
  227. package/dist/src/gateway/daemon-entry.js.map +1 -1
  228. package/dist/src/gateway/engine-health-monitor.d.ts +67 -0
  229. package/dist/src/gateway/engine-health-monitor.d.ts.map +1 -0
  230. package/dist/src/gateway/engine-health-monitor.js +221 -0
  231. package/dist/src/gateway/engine-health-monitor.js.map +1 -0
  232. package/dist/src/gateway/files.d.ts +7 -1
  233. package/dist/src/gateway/files.d.ts.map +1 -1
  234. package/dist/src/gateway/files.js +110 -217
  235. package/dist/src/gateway/files.js.map +1 -1
  236. package/dist/src/gateway/portal-config.d.ts +17 -3
  237. package/dist/src/gateway/portal-config.d.ts.map +1 -1
  238. package/dist/src/gateway/portal-config.js +52 -3
  239. package/dist/src/gateway/portal-config.js.map +1 -1
  240. package/dist/src/gateway/request-origin.d.ts +9 -0
  241. package/dist/src/gateway/request-origin.d.ts.map +1 -1
  242. package/dist/src/gateway/request-origin.js +10 -0
  243. package/dist/src/gateway/request-origin.js.map +1 -1
  244. package/dist/src/gateway/server.d.ts.map +1 -1
  245. package/dist/src/gateway/server.js +76 -59
  246. package/dist/src/gateway/server.js.map +1 -1
  247. package/dist/src/gateway/slack-connect-rollback.d.ts +23 -0
  248. package/dist/src/gateway/slack-connect-rollback.d.ts.map +1 -0
  249. package/dist/src/gateway/slack-connect-rollback.js +53 -0
  250. package/dist/src/gateway/slack-connect-rollback.js.map +1 -0
  251. package/dist/src/gateway/status-reconciler.d.ts +25 -7
  252. package/dist/src/gateway/status-reconciler.d.ts.map +1 -1
  253. package/dist/src/gateway/status-reconciler.js +86 -43
  254. package/dist/src/gateway/status-reconciler.js.map +1 -1
  255. package/dist/src/gateway/watcher.d.ts.map +1 -1
  256. package/dist/src/gateway/watcher.js +44 -3
  257. package/dist/src/gateway/watcher.js.map +1 -1
  258. package/dist/src/mcp/gateway-server.js +21 -3
  259. package/dist/src/mcp/gateway-server.js.map +1 -1
  260. package/dist/src/mcp/resolver.d.ts.map +1 -1
  261. package/dist/src/mcp/resolver.js +51 -1
  262. package/dist/src/mcp/resolver.js.map +1 -1
  263. package/dist/src/models/service.d.ts.map +1 -1
  264. package/dist/src/models/service.js +14 -8
  265. package/dist/src/models/service.js.map +1 -1
  266. package/dist/src/provider-auth/discovery.d.ts +16 -0
  267. package/dist/src/provider-auth/discovery.d.ts.map +1 -0
  268. package/dist/src/provider-auth/discovery.js +66 -0
  269. package/dist/src/provider-auth/discovery.js.map +1 -0
  270. package/dist/src/provider-auth/failure-notices.d.ts +29 -0
  271. package/dist/src/provider-auth/failure-notices.d.ts.map +1 -0
  272. package/dist/src/provider-auth/failure-notices.js +48 -0
  273. package/dist/src/provider-auth/failure-notices.js.map +1 -0
  274. package/dist/src/provider-auth/failure-signal.d.ts +22 -0
  275. package/dist/src/provider-auth/failure-signal.d.ts.map +1 -0
  276. package/dist/src/provider-auth/failure-signal.js +79 -0
  277. package/dist/src/provider-auth/failure-signal.js.map +1 -0
  278. package/dist/src/provider-auth/index.d.ts +26 -0
  279. package/dist/src/provider-auth/index.d.ts.map +1 -0
  280. package/dist/src/provider-auth/index.js +51 -0
  281. package/dist/src/provider-auth/index.js.map +1 -0
  282. package/dist/src/provider-auth/input.d.ts +44 -0
  283. package/dist/src/provider-auth/input.d.ts.map +1 -0
  284. package/dist/src/provider-auth/input.js +86 -0
  285. package/dist/src/provider-auth/input.js.map +1 -0
  286. package/dist/src/provider-auth/providers.d.ts +26 -0
  287. package/dist/src/provider-auth/providers.d.ts.map +1 -0
  288. package/dist/src/provider-auth/providers.js +86 -0
  289. package/dist/src/provider-auth/providers.js.map +1 -0
  290. package/dist/src/provider-auth/runtime.d.ts +21 -0
  291. package/dist/src/provider-auth/runtime.d.ts.map +1 -0
  292. package/dist/src/provider-auth/runtime.js +104 -0
  293. package/dist/src/provider-auth/runtime.js.map +1 -0
  294. package/dist/src/provider-auth/service.d.ts +70 -0
  295. package/dist/src/provider-auth/service.d.ts.map +1 -0
  296. package/dist/src/provider-auth/service.js +349 -0
  297. package/dist/src/provider-auth/service.js.map +1 -0
  298. package/dist/src/provider-auth/terminal.d.ts +21 -0
  299. package/dist/src/provider-auth/terminal.d.ts.map +1 -0
  300. package/dist/src/provider-auth/terminal.js +46 -0
  301. package/dist/src/provider-auth/terminal.js.map +1 -0
  302. package/dist/src/provider-auth/types.d.ts +123 -0
  303. package/dist/src/provider-auth/types.d.ts.map +1 -0
  304. package/dist/src/provider-auth/types.js +10 -0
  305. package/dist/src/provider-auth/types.js.map +1 -0
  306. package/dist/src/sessions/accounting.d.ts +3 -0
  307. package/dist/src/sessions/accounting.d.ts.map +1 -1
  308. package/dist/src/sessions/accounting.js +5 -0
  309. package/dist/src/sessions/accounting.js.map +1 -1
  310. package/dist/src/sessions/backup-integrity.d.ts +45 -0
  311. package/dist/src/sessions/backup-integrity.d.ts.map +1 -0
  312. package/dist/src/sessions/backup-integrity.js +122 -0
  313. package/dist/src/sessions/backup-integrity.js.map +1 -0
  314. package/dist/src/sessions/backup.d.ts +40 -2
  315. package/dist/src/sessions/backup.d.ts.map +1 -1
  316. package/dist/src/sessions/backup.js +88 -12
  317. package/dist/src/sessions/backup.js.map +1 -1
  318. package/dist/src/sessions/callbacks.d.ts +9 -0
  319. package/dist/src/sessions/callbacks.d.ts.map +1 -1
  320. package/dist/src/sessions/callbacks.js +55 -10
  321. package/dist/src/sessions/callbacks.js.map +1 -1
  322. package/dist/src/sessions/completion-batching.d.ts +82 -0
  323. package/dist/src/sessions/completion-batching.d.ts.map +1 -0
  324. package/dist/src/sessions/completion-batching.js +126 -0
  325. package/dist/src/sessions/completion-batching.js.map +1 -0
  326. package/dist/src/sessions/connector-command-guard.d.ts +66 -0
  327. package/dist/src/sessions/connector-command-guard.d.ts.map +1 -0
  328. package/dist/src/sessions/connector-command-guard.js +145 -0
  329. package/dist/src/sessions/connector-command-guard.js.map +1 -0
  330. package/dist/src/sessions/context.js +2 -2
  331. package/dist/src/sessions/engine-fallback.d.ts +43 -1
  332. package/dist/src/sessions/engine-fallback.d.ts.map +1 -1
  333. package/dist/src/sessions/engine-fallback.js +266 -15
  334. package/dist/src/sessions/engine-fallback.js.map +1 -1
  335. package/dist/src/sessions/engine-health-gate.d.ts +83 -0
  336. package/dist/src/sessions/engine-health-gate.d.ts.map +1 -0
  337. package/dist/src/sessions/engine-health-gate.js +186 -0
  338. package/dist/src/sessions/engine-health-gate.js.map +1 -0
  339. package/dist/src/sessions/engine-login.d.ts +58 -0
  340. package/dist/src/sessions/engine-login.d.ts.map +1 -0
  341. package/dist/src/sessions/engine-login.js +107 -0
  342. package/dist/src/sessions/engine-login.js.map +1 -0
  343. package/dist/src/sessions/fork.d.ts.map +1 -1
  344. package/dist/src/sessions/fork.js +2 -1
  345. package/dist/src/sessions/fork.js.map +1 -1
  346. package/dist/src/sessions/goal-execution.d.ts.map +1 -1
  347. package/dist/src/sessions/goal-execution.js +8 -1
  348. package/dist/src/sessions/goal-execution.js.map +1 -1
  349. package/dist/src/sessions/limit-failure-notice.d.ts +41 -0
  350. package/dist/src/sessions/limit-failure-notice.d.ts.map +1 -0
  351. package/dist/src/sessions/limit-failure-notice.js +87 -0
  352. package/dist/src/sessions/limit-failure-notice.js.map +1 -0
  353. package/dist/src/sessions/lost-turn.d.ts +39 -0
  354. package/dist/src/sessions/lost-turn.d.ts.map +1 -0
  355. package/dist/src/sessions/lost-turn.js +32 -0
  356. package/dist/src/sessions/lost-turn.js.map +1 -0
  357. package/dist/src/sessions/manager.d.ts.map +1 -1
  358. package/dist/src/sessions/manager.js +104 -47
  359. package/dist/src/sessions/manager.js.map +1 -1
  360. package/dist/src/sessions/new-session-engine.d.ts +42 -0
  361. package/dist/src/sessions/new-session-engine.d.ts.map +1 -0
  362. package/dist/src/sessions/new-session-engine.js +100 -0
  363. package/dist/src/sessions/new-session-engine.js.map +1 -0
  364. package/dist/src/sessions/origin-delivery.d.ts +50 -4
  365. package/dist/src/sessions/origin-delivery.d.ts.map +1 -1
  366. package/dist/src/sessions/origin-delivery.js +108 -9
  367. package/dist/src/sessions/origin-delivery.js.map +1 -1
  368. package/dist/src/sessions/queue.d.ts +14 -0
  369. package/dist/src/sessions/queue.d.ts.map +1 -1
  370. package/dist/src/sessions/queue.js +38 -2
  371. package/dist/src/sessions/queue.js.map +1 -1
  372. package/dist/src/sessions/registry.d.ts +4 -2
  373. package/dist/src/sessions/registry.d.ts.map +1 -1
  374. package/dist/src/sessions/registry.js +21 -4
  375. package/dist/src/sessions/registry.js.map +1 -1
  376. package/dist/src/sessions/reply-disposition.d.ts +8 -0
  377. package/dist/src/sessions/reply-disposition.d.ts.map +1 -1
  378. package/dist/src/sessions/reply-disposition.js +8 -0
  379. package/dist/src/sessions/reply-disposition.js.map +1 -1
  380. package/dist/src/sessions/restart-resume.d.ts +234 -0
  381. package/dist/src/sessions/restart-resume.d.ts.map +1 -0
  382. package/dist/src/sessions/restart-resume.js +596 -0
  383. package/dist/src/sessions/restart-resume.js.map +1 -0
  384. package/dist/src/sessions/speaker-prefix.d.ts.map +1 -1
  385. package/dist/src/sessions/speaker-prefix.js +3 -1
  386. package/dist/src/sessions/speaker-prefix.js.map +1 -1
  387. package/dist/src/sessions/turn-delivery.d.ts +26 -0
  388. package/dist/src/sessions/turn-delivery.d.ts.map +1 -0
  389. package/dist/src/sessions/turn-delivery.js +34 -0
  390. package/dist/src/sessions/turn-delivery.js.map +1 -0
  391. package/dist/src/sessions/unrequested-stop.d.ts +26 -0
  392. package/dist/src/sessions/unrequested-stop.d.ts.map +1 -0
  393. package/dist/src/sessions/unrequested-stop.js +19 -0
  394. package/dist/src/sessions/unrequested-stop.js.map +1 -0
  395. package/dist/src/sessions/usage-limit-wait.d.ts +14 -0
  396. package/dist/src/sessions/usage-limit-wait.d.ts.map +1 -0
  397. package/dist/src/sessions/usage-limit-wait.js +9 -0
  398. package/dist/src/sessions/usage-limit-wait.js.map +1 -0
  399. package/dist/src/shared/attachment-download.d.ts +41 -0
  400. package/dist/src/shared/attachment-download.d.ts.map +1 -0
  401. package/dist/src/shared/attachment-download.js +110 -0
  402. package/dist/src/shared/attachment-download.js.map +1 -0
  403. package/dist/src/shared/attachment-notice.d.ts +24 -0
  404. package/dist/src/shared/attachment-notice.d.ts.map +1 -0
  405. package/dist/src/shared/attachment-notice.js +37 -0
  406. package/dist/src/shared/attachment-notice.js.map +1 -0
  407. package/dist/src/shared/attachments.d.ts +65 -0
  408. package/dist/src/shared/attachments.d.ts.map +1 -0
  409. package/dist/src/shared/attachments.js +153 -0
  410. package/dist/src/shared/attachments.js.map +1 -0
  411. package/dist/src/shared/childEnv.d.ts +15 -0
  412. package/dist/src/shared/childEnv.d.ts.map +1 -1
  413. package/dist/src/shared/childEnv.js +15 -0
  414. package/dist/src/shared/childEnv.js.map +1 -1
  415. package/dist/src/shared/claude-limit-reset.d.ts +54 -0
  416. package/dist/src/shared/claude-limit-reset.d.ts.map +1 -0
  417. package/dist/src/shared/claude-limit-reset.js +99 -0
  418. package/dist/src/shared/claude-limit-reset.js.map +1 -0
  419. package/dist/src/shared/config-error.d.ts +21 -0
  420. package/dist/src/shared/config-error.d.ts.map +1 -0
  421. package/dist/src/shared/config-error.js +37 -0
  422. package/dist/src/shared/config-error.js.map +1 -0
  423. package/dist/src/shared/config-file.d.ts +57 -0
  424. package/dist/src/shared/config-file.d.ts.map +1 -0
  425. package/dist/src/shared/config-file.js +217 -0
  426. package/dist/src/shared/config-file.js.map +1 -0
  427. package/dist/src/shared/config-yaml-edit.d.ts +20 -0
  428. package/dist/src/shared/config-yaml-edit.d.ts.map +1 -0
  429. package/dist/src/shared/config-yaml-edit.js +468 -0
  430. package/dist/src/shared/config-yaml-edit.js.map +1 -0
  431. package/dist/src/shared/config.d.ts.map +1 -1
  432. package/dist/src/shared/config.js +12 -4
  433. package/dist/src/shared/config.js.map +1 -1
  434. package/dist/src/shared/engine-fallback.d.ts +22 -0
  435. package/dist/src/shared/engine-fallback.d.ts.map +1 -1
  436. package/dist/src/shared/engine-fallback.js +55 -4
  437. package/dist/src/shared/engine-fallback.js.map +1 -1
  438. package/dist/src/shared/engine-health.d.ts +16 -0
  439. package/dist/src/shared/engine-health.d.ts.map +1 -1
  440. package/dist/src/shared/engine-health.js +42 -0
  441. package/dist/src/shared/engine-health.js.map +1 -1
  442. package/dist/src/shared/list-alignment.d.ts +23 -0
  443. package/dist/src/shared/list-alignment.d.ts.map +1 -0
  444. package/dist/src/shared/list-alignment.js +61 -0
  445. package/dist/src/shared/list-alignment.js.map +1 -0
  446. package/dist/src/shared/logger.d.ts.map +1 -1
  447. package/dist/src/shared/logger.js +104 -33
  448. package/dist/src/shared/logger.js.map +1 -1
  449. package/dist/src/shared/map-limited.d.ts +11 -0
  450. package/dist/src/shared/map-limited.d.ts.map +1 -0
  451. package/dist/src/shared/map-limited.js +30 -0
  452. package/dist/src/shared/map-limited.js.map +1 -0
  453. package/dist/src/shared/oneShotCli.d.ts.map +1 -1
  454. package/dist/src/shared/oneShotCli.js +4 -2
  455. package/dist/src/shared/oneShotCli.js.map +1 -1
  456. package/dist/src/shared/partial-delivery.d.ts +24 -0
  457. package/dist/src/shared/partial-delivery.d.ts.map +1 -0
  458. package/dist/src/shared/partial-delivery.js +46 -0
  459. package/dist/src/shared/partial-delivery.js.map +1 -0
  460. package/dist/src/shared/process-safety-net.d.ts +44 -0
  461. package/dist/src/shared/process-safety-net.d.ts.map +1 -0
  462. package/dist/src/shared/process-safety-net.js +88 -0
  463. package/dist/src/shared/process-safety-net.js.map +1 -0
  464. package/dist/src/shared/rateLimit.d.ts +45 -2
  465. package/dist/src/shared/rateLimit.d.ts.map +1 -1
  466. package/dist/src/shared/rateLimit.js +64 -2
  467. package/dist/src/shared/rateLimit.js.map +1 -1
  468. package/dist/src/shared/redact.d.ts.map +1 -1
  469. package/dist/src/shared/redact.js +11 -1
  470. package/dist/src/shared/redact.js.map +1 -1
  471. package/dist/src/shared/safe-file-name.d.ts +9 -0
  472. package/dist/src/shared/safe-file-name.d.ts.map +1 -0
  473. package/dist/src/shared/safe-file-name.js +16 -0
  474. package/dist/src/shared/safe-file-name.js.map +1 -0
  475. package/dist/src/shared/terminal-safe-text.d.ts +2 -0
  476. package/dist/src/shared/terminal-safe-text.d.ts.map +1 -0
  477. package/dist/src/shared/terminal-safe-text.js +21 -0
  478. package/dist/src/shared/terminal-safe-text.js.map +1 -0
  479. package/dist/src/shared/types.d.ts +69 -4
  480. package/dist/src/shared/types.d.ts.map +1 -1
  481. package/dist/src/skills-sync/apply.d.ts +21 -0
  482. package/dist/src/skills-sync/apply.d.ts.map +1 -0
  483. package/dist/src/skills-sync/apply.js +209 -0
  484. package/dist/src/skills-sync/apply.js.map +1 -0
  485. package/dist/src/skills-sync/backup-run.d.ts +47 -0
  486. package/dist/src/skills-sync/backup-run.d.ts.map +1 -0
  487. package/dist/src/skills-sync/backup-run.js +150 -0
  488. package/dist/src/skills-sync/backup-run.js.map +1 -0
  489. package/dist/src/skills-sync/bounded-read.d.ts +32 -0
  490. package/dist/src/skills-sync/bounded-read.d.ts.map +1 -0
  491. package/dist/src/skills-sync/bounded-read.js +104 -0
  492. package/dist/src/skills-sync/bounded-read.js.map +1 -0
  493. package/dist/src/skills-sync/bundled.d.ts +28 -0
  494. package/dist/src/skills-sync/bundled.d.ts.map +1 -0
  495. package/dist/src/skills-sync/bundled.js +84 -0
  496. package/dist/src/skills-sync/bundled.js.map +1 -0
  497. package/dist/src/skills-sync/fingerprint.d.ts +32 -0
  498. package/dist/src/skills-sync/fingerprint.d.ts.map +1 -0
  499. package/dist/src/skills-sync/fingerprint.js +58 -0
  500. package/dist/src/skills-sync/fingerprint.js.map +1 -0
  501. package/dist/src/skills-sync/history.d.ts +44 -0
  502. package/dist/src/skills-sync/history.d.ts.map +1 -0
  503. package/dist/src/skills-sync/history.js +115 -0
  504. package/dist/src/skills-sync/history.js.map +1 -0
  505. package/dist/src/skills-sync/home-skill.d.ts +28 -0
  506. package/dist/src/skills-sync/home-skill.d.ts.map +1 -0
  507. package/dist/src/skills-sync/home-skill.js +67 -0
  508. package/dist/src/skills-sync/home-skill.js.map +1 -0
  509. package/dist/src/skills-sync/instance.d.ts +26 -0
  510. package/dist/src/skills-sync/instance.d.ts.map +1 -0
  511. package/dist/src/skills-sync/instance.js +128 -0
  512. package/dist/src/skills-sync/instance.js.map +1 -0
  513. package/dist/src/skills-sync/names.d.ts +25 -0
  514. package/dist/src/skills-sync/names.d.ts.map +1 -0
  515. package/dist/src/skills-sync/names.js +56 -0
  516. package/dist/src/skills-sync/names.js.map +1 -0
  517. package/dist/src/skills-sync/plan.d.ts +58 -0
  518. package/dist/src/skills-sync/plan.d.ts.map +1 -0
  519. package/dist/src/skills-sync/plan.js +132 -0
  520. package/dist/src/skills-sync/plan.js.map +1 -0
  521. package/dist/src/skills-sync/receipt.d.ts +61 -0
  522. package/dist/src/skills-sync/receipt.d.ts.map +1 -0
  523. package/dist/src/skills-sync/receipt.js +149 -0
  524. package/dist/src/skills-sync/receipt.js.map +1 -0
  525. package/dist/src/skills-sync/staging.d.ts +21 -0
  526. package/dist/src/skills-sync/staging.d.ts.map +1 -0
  527. package/dist/src/skills-sync/staging.js +81 -0
  528. package/dist/src/skills-sync/staging.js.map +1 -0
  529. package/dist/src/skills-sync/sync.d.ts +37 -0
  530. package/dist/src/skills-sync/sync.d.ts.map +1 -0
  531. package/dist/src/skills-sync/sync.js +201 -0
  532. package/dist/src/skills-sync/sync.js.map +1 -0
  533. package/dist/src/skills-sync/types.d.ts +66 -0
  534. package/dist/src/skills-sync/types.d.ts.map +1 -0
  535. package/dist/src/skills-sync/types.js +2 -0
  536. package/dist/src/skills-sync/types.js.map +1 -0
  537. package/dist/src/stt/config.d.ts +5 -0
  538. package/dist/src/stt/config.d.ts.map +1 -0
  539. package/dist/src/stt/config.js +18 -0
  540. package/dist/src/stt/config.js.map +1 -0
  541. package/dist/src/updates/maintenance.d.ts.map +1 -1
  542. package/dist/src/updates/maintenance.js +24 -4
  543. package/dist/src/updates/maintenance.js.map +1 -1
  544. package/dist/src/workflows/repository-mutex.d.ts +1 -1
  545. package/dist/web/404.html +1 -1
  546. package/dist/web/__next.__PAGE__.txt +11 -11
  547. package/dist/web/__next._full.txt +12 -12
  548. package/dist/web/__next._tree.txt +2 -2
  549. package/dist/web/_next/static/chunks/{0g5c5ppr8zmup.js → 20v6mri7epga5.js} +1 -1
  550. package/dist/web/_next/static/chunks/2u0328ngpt-ek.js +1 -0
  551. package/dist/web/_next/static/chunks/3f9i3f9q6v6_j.css +1 -0
  552. package/dist/web/_next/static/chunks/{2iqxlc9wtxzm2.js → 3yy053rafgrzy.js} +1 -1
  553. package/dist/web/_not-found/__next._full.txt +10 -10
  554. package/dist/web/_not-found/__next._not-found.__PAGE__.txt +9 -9
  555. package/dist/web/_not-found/__next._tree.txt +2 -2
  556. package/dist/web/_not-found.html +1 -1
  557. package/dist/web/_not-found.txt +10 -10
  558. package/dist/web/chat/__next._full.txt +12 -12
  559. package/dist/web/chat/__next._tree.txt +2 -2
  560. package/dist/web/chat/__next.chat.__PAGE__.txt +11 -11
  561. package/dist/web/chat.html +1 -1
  562. package/dist/web/chat.txt +12 -12
  563. package/dist/web/cron/__next._full.txt +12 -12
  564. package/dist/web/cron/__next._tree.txt +2 -2
  565. package/dist/web/cron/__next.cron.__PAGE__.txt +11 -11
  566. package/dist/web/cron.html +1 -1
  567. package/dist/web/cron.txt +12 -12
  568. package/dist/web/index.html +1 -1
  569. package/dist/web/index.txt +12 -12
  570. package/dist/web/kanban/__next._full.txt +12 -12
  571. package/dist/web/kanban/__next._tree.txt +2 -2
  572. package/dist/web/kanban/__next.kanban.__PAGE__.txt +11 -11
  573. package/dist/web/kanban.html +1 -1
  574. package/dist/web/kanban.txt +12 -12
  575. package/dist/web/logs/__next._full.txt +12 -12
  576. package/dist/web/logs/__next._tree.txt +2 -2
  577. package/dist/web/logs/__next.logs.__PAGE__.txt +11 -11
  578. package/dist/web/logs.html +1 -1
  579. package/dist/web/logs.txt +12 -12
  580. package/dist/web/models/__next._full.txt +12 -12
  581. package/dist/web/models/__next._tree.txt +2 -2
  582. package/dist/web/models/__next.models.__PAGE__.txt +11 -11
  583. package/dist/web/models.html +1 -1
  584. package/dist/web/models.txt +12 -12
  585. package/dist/web/org/__next._full.txt +12 -12
  586. package/dist/web/org/__next._tree.txt +2 -2
  587. package/dist/web/org/__next.org.__PAGE__.txt +11 -11
  588. package/dist/web/org.html +1 -1
  589. package/dist/web/org.txt +12 -12
  590. package/dist/web/sessions/__next._full.txt +10 -10
  591. package/dist/web/sessions/__next._tree.txt +2 -2
  592. package/dist/web/sessions/__next.sessions.__PAGE__.txt +9 -9
  593. package/dist/web/sessions.html +1 -1
  594. package/dist/web/sessions.txt +10 -10
  595. package/dist/web/settings/__next._full.txt +12 -12
  596. package/dist/web/settings/__next._tree.txt +2 -2
  597. package/dist/web/settings/__next.settings.__PAGE__.txt +11 -11
  598. package/dist/web/settings.html +1 -1
  599. package/dist/web/settings.txt +12 -12
  600. package/dist/web/skills/__next._full.txt +12 -12
  601. package/dist/web/skills/__next._tree.txt +2 -2
  602. package/dist/web/skills/__next.skills.__PAGE__.txt +11 -11
  603. package/dist/web/skills.html +1 -1
  604. package/dist/web/skills.txt +12 -12
  605. package/package.json +2 -1
  606. package/template/bundled-skill-history.json +377 -0
  607. package/template/config.default.yaml +48 -3
  608. package/template/docs/architecture.md +41 -3
  609. package/template/docs/backup.md +142 -0
  610. package/template/docs/connectors.md +192 -16
  611. package/template/docs/cron.md +30 -11
  612. package/template/docs/memory.md +1 -1
  613. package/template/docs/overview.md +6 -2
  614. package/template/docs/self-modification.md +11 -10
  615. package/template/docs/skills.md +77 -4
  616. package/template/migrations/0.3.0/MIGRATION.md +6 -0
  617. package/template/migrations/0.7.3/MIGRATION.md +6 -0
  618. package/template/migrations/0.7.5/MIGRATION.md +1 -1
  619. package/template/migrations/0.9.0/MIGRATION.md +6 -0
  620. package/template/migrations/2026.10.13/MIGRATION.md +76 -0
  621. package/template/migrations/2026.10.13/files/docs/architecture.md +112 -0
  622. package/template/migrations/2026.10.13/files/docs/automations.md +110 -0
  623. package/template/migrations/2026.10.13/files/docs/backup.md +142 -0
  624. package/template/migrations/2026.10.13/files/docs/connectors.md +370 -0
  625. package/template/migrations/2026.10.13/files/docs/cron-commands.md +52 -0
  626. package/template/migrations/2026.10.13/files/docs/cron.md +178 -0
  627. package/template/migrations/2026.10.13/files/docs/mcp.md +108 -0
  628. package/template/migrations/2026.10.13/files/docs/memory.md +47 -0
  629. package/template/migrations/2026.10.13/files/docs/org.md +111 -0
  630. package/template/migrations/2026.10.13/files/docs/overview.md +44 -0
  631. package/template/migrations/2026.10.13/files/docs/self-modification.md +71 -0
  632. package/template/migrations/2026.10.13/files/docs/skills.md +140 -0
  633. package/template/migrations/2026.10.13/files/skills/cron-manager/SKILL.md +107 -0
  634. package/template/migrations/2026.10.13/files/skills/management/SKILL.md +227 -0
  635. package/template/migrations/2026.10.13/files/skills/migrate/SKILL.md +194 -0
  636. package/template/migrations/2026.10.13/files/skills/onboarding/SKILL.md +153 -0
  637. package/template/migrations/2026.10.13/files/skills/openryoko-config/SKILL.md +35 -0
  638. package/template/migrations/2026.10.13/files/skills/openryoko-config/references/engine-fallback.md +98 -0
  639. package/template/migrations/2026.10.13/files/skills/openryoko-config/references/jev.md +89 -0
  640. package/template/migrations/2026.10.13/files/skills/openryoko-config/references/maintenance.md +49 -0
  641. package/template/migrations/2026.10.13/files/skills/openryoko-config/references/platform.md +100 -0
  642. package/template/migrations/2026.10.13/files/skills/self-heal/SKILL.md +187 -0
  643. package/template/migrations/2026.10.9/MIGRATION.md +6 -0
  644. package/template/migrations/2026.10.9/files/docs/memory.md +1 -1
  645. package/template/migrations/2026.10.9/files/skills/migrate/SKILL.md +39 -5
  646. package/template/migrations/2026.5.7/MIGRATION.md +6 -0
  647. package/template/migrations/2026.8.28/MIGRATION.md +6 -0
  648. package/template/migrations/2026.9.11/MIGRATION.md +6 -0
  649. package/template/skills/cron-manager/SKILL.md +10 -0
  650. package/template/skills/management/SKILL.md +5 -4
  651. package/template/skills/migrate/SKILL.md +39 -5
  652. package/template/skills/onboarding/SKILL.md +2 -2
  653. package/template/skills/openryoko-config/SKILL.md +1 -1
  654. package/template/skills/openryoko-config/references/engine-fallback.md +16 -5
  655. package/template/skills/openryoko-config/references/platform.md +23 -4
  656. package/template/skills/self-heal/SKILL.md +117 -44
  657. package/dist/src/engines/mock.d.ts +0 -16
  658. package/dist/src/engines/mock.d.ts.map +0 -1
  659. package/dist/src/engines/mock.js +0 -47
  660. package/dist/src/engines/mock.js.map +0 -1
  661. package/dist/src/shared/test-support/posix-mode.d.ts +0 -17
  662. package/dist/src/shared/test-support/posix-mode.d.ts.map +0 -1
  663. package/dist/src/shared/test-support/posix-mode.js +0 -23
  664. package/dist/src/shared/test-support/posix-mode.js.map +0 -1
  665. package/dist/web/_next/static/chunks/0ic18n-m7ixyw.css +0 -1
  666. package/dist/web/_next/static/chunks/1_jm0szyu2the.js +0 -1
  667. /package/dist/web/_next/static/{peH9RGESLkxB7fw3Cq1GO → ov0mWzyHx0B5oEnTHE_pa}/_buildManifest.js +0 -0
  668. /package/dist/web/_next/static/{peH9RGESLkxB7fw3Cq1GO → ov0mWzyHx0B5oEnTHE_pa}/_clientMiddlewareManifest.js +0 -0
  669. /package/dist/web/_next/static/{peH9RGESLkxB7fw3Cq1GO → ov0mWzyHx0B5oEnTHE_pa}/_ssgManifest.js +0 -0
@@ -0,0 +1,596 @@
1
+ import { logger } from "../shared/logger.js";
2
+ import { usageLimitOutlastsWait } from "../shared/rateLimit.js";
3
+ import { postSessionNotification } from "./callbacks.js";
4
+ import { hasUndeliveredReply, silentOriginAnswer } from "./origin-delivery.js";
5
+ import { getMessagePage, getSession, initDb, listSessions, updateSession } from "./registry.js";
6
+ import { usageLimitWaitResetsAt } from "./usage-limit-wait.js";
7
+ /** transportMeta key holding a session's {@link RestartResumeState}. */
8
+ export const RESTART_RESUME_META_KEY = "restartResume";
9
+ /**
10
+ * A restart can strand any number of conversations at once. Waking them all in
11
+ * the same tick spawns that many engine processes together — exactly when a
12
+ * rate-limited engine starts refusing — so one boot wakes a capped number,
13
+ * spaced apart. (Both values are upstream's.)
14
+ */
15
+ export const MAX_RESTART_RESUMES = 10;
16
+ export const RESTART_RESUME_STAGGER_MS = 15_000;
17
+ /** An interruption older than this at boot is left for the operator. */
18
+ export const DEFAULT_RESUME_MAX_AGE_MINUTES = 120;
19
+ /** A session nudged less than this long ago is not nudged again — unless new
20
+ * work reached it since (see underLoopGuard). */
21
+ export const RESTART_NUDGE_COOLDOWN_MS = 30 * 60_000;
22
+ /** …and never more than this many times within the window. */
23
+ export const RESTART_NUDGE_WINDOW_LIMIT = 3;
24
+ export const RESTART_NUDGE_WINDOW_MS = 24 * 60 * 60_000;
25
+ /** A turn that was waiting for a usage limit is nudged this long after the
26
+ * reset it expected — the margin the wait itself left before retrying. */
27
+ export const RESTART_LIMIT_RESET_BUFFER_MS = 10_000;
28
+ /** Opening words of every nudge. Also how a nudge is recognised in the queue. */
29
+ export const RESTART_NUDGE_PREFIX = "[Gateway] Restart complete.";
30
+ function metaObject(meta) {
31
+ return meta && typeof meta === "object" && !Array.isArray(meta) ? { ...meta } : {};
32
+ }
33
+ const isInstant = (value) => typeof value === "string" && Number.isFinite(Date.parse(value));
34
+ export function readRestartResumeState(meta) {
35
+ const raw = metaObject(meta)[RESTART_RESUME_META_KEY];
36
+ const state = raw && typeof raw === "object" && !Array.isArray(raw) ? raw : {};
37
+ const marked = isInstant(state.interruptedAt);
38
+ const wait = state.limitWait && typeof state.limitWait === "object" && !Array.isArray(state.limitWait) ? state.limitWait : undefined;
39
+ return {
40
+ ...(marked ? { interruptedAt: state.interruptedAt } : {}),
41
+ ...(marked && state.replyRecorded === true ? { replyRecorded: true } : {}),
42
+ ...(marked && wait ? { limitWait: isInstant(wait.resetsAt) ? { resetsAt: wait.resetsAt } : {} } : {}),
43
+ nudgedAt: Array.isArray(state.nudgedAt) ? state.nudgedAt.filter(isInstant) : [],
44
+ };
45
+ }
46
+ function withRestartResumeState(meta, state) {
47
+ const next = metaObject(meta);
48
+ const stored = {
49
+ ...(state.interruptedAt ? { interruptedAt: state.interruptedAt } : {}),
50
+ ...(state.interruptedAt && state.replyRecorded ? { replyRecorded: true } : {}),
51
+ ...(state.interruptedAt && state.limitWait ? { limitWait: { ...state.limitWait } } : {}),
52
+ ...(state.nudgedAt.length > 0 ? { nudgedAt: state.nudgedAt } : {}),
53
+ };
54
+ if (Object.keys(stored).length > 0)
55
+ next[RESTART_RESUME_META_KEY] = stored;
56
+ else
57
+ delete next[RESTART_RESUME_META_KEY];
58
+ return Object.keys(next).length > 0 ? next : null;
59
+ }
60
+ /** The transport meta to persist for a session a restart is cutting off now.
61
+ * A new interruption starts clean: only the nudge history carries over. */
62
+ export function withRestartInterruptedMark(meta, at, mark = {}) {
63
+ return withRestartResumeState(meta, {
64
+ interruptedAt: at,
65
+ ...(mark.replyRecorded ? { replyRecorded: true } : {}),
66
+ ...(mark.limitWait ? { limitWait: mark.limitWait } : {}),
67
+ nudgedAt: readRestartResumeState(meta).nudgedAt,
68
+ }) ?? {};
69
+ }
70
+ /** Take the pending mark off a session, optionally putting a nudge on record. */
71
+ function clearRestartInterruptedMark(sessionId, nudgedAt) {
72
+ const session = getSession(sessionId);
73
+ if (!session)
74
+ return;
75
+ const state = readRestartResumeState(session.transportMeta);
76
+ if (!state.interruptedAt && !nudgedAt)
77
+ return;
78
+ const history = nudgedAt
79
+ ? [...state.nudgedAt, nudgedAt]
80
+ .filter((at) => Date.parse(nudgedAt) - Date.parse(at) < RESTART_NUDGE_WINDOW_MS)
81
+ .slice(-RESTART_NUDGE_WINDOW_LIMIT)
82
+ : state.nudgedAt;
83
+ updateSession(sessionId, { transportMeta: withRestartResumeState(session.transportMeta, { nudgedAt: history }) });
84
+ }
85
+ let shuttingDown = false;
86
+ /**
87
+ * First thing at shutdown, before anything is awaited. From here until the
88
+ * process is gone, an engine that stops was stopped by the shutdown — through
89
+ * kill(), or because a process supervisor signalled the whole control group
90
+ * and Claude's process got the SIGTERM before the gateway reached its own kill.
91
+ */
92
+ export function beginGatewayShutdown() {
93
+ shuttingDown = true;
94
+ }
95
+ export function isGatewayShuttingDown() {
96
+ return shuttingDown;
97
+ }
98
+ /**
99
+ * A turn the shutdown cut off without going through kill() (see above). It may
100
+ * be over before interruptRunningSessionsForShutdown() looks, and a session
101
+ * that is no longer "running" then is not marked there — so the turn's own
102
+ * runner marks it, and the next boot resumes it like any other.
103
+ */
104
+ export function markTurnCutOffByShutdown(sessionId, now = Date.now()) {
105
+ const session = getSession(sessionId);
106
+ if (!session || session.workflowProvenance || session.source === "cron")
107
+ return;
108
+ updateSession(sessionId, { transportMeta: withRestartInterruptedMark(session.transportMeta, new Date(now).toISOString()) });
109
+ }
110
+ const newestMessage = (sessionId) => getMessagePage(sessionId, { limit: 1 }).messages.at(-1);
111
+ /**
112
+ * True when a "running" session has already recorded the reply of its current
113
+ * turn. A connector turn records its reply, THEN delivers it, and only then
114
+ * leaves "running", so a restart can land in between. The work is done; what
115
+ * the mark cannot know yet is whether the delivery will come back before the
116
+ * process is gone (see the "answered" rule in skipReason).
117
+ *
118
+ * The newest transcript entry being the assistant's reply is the evidence,
119
+ * with one exception. A notification or web message is recorded when it is
120
+ * accepted, so when it waited behind a running turn, that turn's reply is the
121
+ * newer entry while the queued turn runs. A queue row that started running
122
+ * after the reply says so: the reply belongs to the turn before it.
123
+ *
124
+ * Nor is the record of an interrupted turn a reply (see below): a shutdown
125
+ * can land while the runner that wrote it is still winding down.
126
+ */
127
+ function replyAlreadyRecorded(session, newest = newestMessage(session.id)) {
128
+ if (newest?.role !== "assistant")
129
+ return false;
130
+ // Not a reply: the connector runner records the engine's "Interrupted: …"
131
+ // text for a turn it settles as interrupted, and never delivers it.
132
+ if (/^Interrupted/i.test(newest.content))
133
+ return false;
134
+ const running = initDb().prepare("SELECT started_at AS startedAt FROM queue_items WHERE session_key = ? AND status = 'running' AND session_id = ? ORDER BY started_at DESC LIMIT 1").get(session.sessionKey, session.id);
135
+ return !(running?.startedAt && Date.parse(running.startedAt) >= newest.timestamp);
136
+ }
137
+ /**
138
+ * Sessions whose turn lives only in this process: mid-turn ("running"), or
139
+ * parked on a usage limit ("waiting") — that wait is a loop in the runner, not
140
+ * something the next process picks up. Left unmarked, a waiting session said
141
+ * "waiting" for good after a restart, with nothing waiting any more.
142
+ */
143
+ function sessionsWithALiveTurn() {
144
+ return [...listSessions({ status: "running" }), ...listSessions({ status: "waiting" })];
145
+ }
146
+ /**
147
+ * What the mark records about the turn a restart is ending: that its reply was
148
+ * already written (see replyAlreadyRecorded), or that it was only waiting for
149
+ * a usage limit — and until when, read from the wait's own note. A wait that
150
+ * was marked once already has lost that note to the mark's lastError, so the
151
+ * reset is carried over from the mark (the dying wait's heartbeat can write
152
+ * "waiting" back over a shutdown's "interrupted").
153
+ */
154
+ function markDetails(session, newest = newestMessage(session.id)) {
155
+ if (replyAlreadyRecorded(session, newest))
156
+ return { replyRecorded: true };
157
+ if (session.status !== "waiting")
158
+ return {};
159
+ const resetsAt = usageLimitWaitResetsAt(session) ?? readRestartResumeState(session.transportMeta).limitWait?.resetsAt;
160
+ return { limitWait: resetsAt ? { resetsAt } : {} };
161
+ }
162
+ /**
163
+ * Graceful shutdown, right before the engines are killed: every session whose
164
+ * turn lives in this process becomes "interrupted" (its engine session id is
165
+ * kept, so it can be resumed) and gets the mark the next boot reads — which
166
+ * also says whether the turn had already recorded its reply, or was only
167
+ * waiting for a usage limit. Returns how many were interrupted.
168
+ *
169
+ * Workflow attempts are skipped: recoverStaleWorkflowAttemptSessions(), which
170
+ * the caller runs first, stamps their `gateway-restart` receipt — a plain
171
+ * interrupt here would read as an operator stop on the next boot.
172
+ */
173
+ export function interruptRunningSessionsForShutdown(now = Date.now()) {
174
+ shuttingDown = true;
175
+ const interruptedAt = new Date(now).toISOString();
176
+ let interrupted = 0;
177
+ for (const session of sessionsWithALiveTurn()) {
178
+ if (session.workflowProvenance?.kind === "phase")
179
+ continue;
180
+ updateSession(session.id, {
181
+ status: "interrupted",
182
+ lastActivity: interruptedAt,
183
+ lastError: session.status === "waiting"
184
+ ? "Interrupted: gateway shut down while session was waiting for a usage limit"
185
+ : "Interrupted: gateway shutting down gracefully",
186
+ // The killed turn's completion overwrites the status; the mark is what the next boot reads.
187
+ transportMeta: withRestartInterruptedMark(session.transportMeta, interruptedAt, markDetails(session)),
188
+ });
189
+ logger.info(`Marked session ${session.id} as interrupted for resume`);
190
+ interrupted++;
191
+ }
192
+ return interrupted;
193
+ }
194
+ /**
195
+ * Boot step, BEFORE recoverStaleSessions() and recoverStaleQueueItems() — both
196
+ * erase what this reads.
197
+ *
198
+ * - A session still "running" — or still "waiting" for a usage limit — was
199
+ * never shut down cleanly (crash, SIGKILL, a shutdown that ran out of time).
200
+ * Its last sign of life — the heartbeat or the newest transcript entry,
201
+ * whichever is later — is the best estimate of when it was cut off.
202
+ * - A nudge turn that was itself in flight is cancelled instead of going back
203
+ * to pending: replaying it is how a turn that restarts the gateway would
204
+ * loop. The session is interrupted again and falls under the cooldown.
205
+ */
206
+ export function prepareRestartResume(now = Date.now()) {
207
+ shuttingDown = false; // a process that is booting is not the one that was shutting down
208
+ const database = initDb();
209
+ return database.transaction(() => {
210
+ const cancelledNudges = database.prepare("UPDATE queue_items SET status = 'cancelled' WHERE status = 'running' AND substr(prompt, 1, ?) = ?").run(RESTART_NUDGE_PREFIX.length, RESTART_NUDGE_PREFIX).changes;
211
+ let marked = 0;
212
+ for (const session of sessionsWithALiveTurn()) {
213
+ // Workflow attempts have their own restart recovery; a cron run has no conversation to answer in.
214
+ if (session.workflowProvenance || session.source === "cron")
215
+ continue;
216
+ const newest = newestMessage(session.id);
217
+ const heartbeat = Date.parse(session.lastActivity);
218
+ const lastAlive = Math.max(Number.isFinite(heartbeat) ? heartbeat : 0, newest?.timestamp ?? 0);
219
+ const at = new Date(lastAlive > 0 ? Math.min(lastAlive, now) : now).toISOString();
220
+ updateSession(session.id, { transportMeta: withRestartInterruptedMark(session.transportMeta, at, markDetails(session, newest)) });
221
+ marked++;
222
+ }
223
+ return { marked, cancelledNudges };
224
+ }).immediate();
225
+ }
226
+ function listMarkedSessions() {
227
+ const rows = initDb().prepare("SELECT id FROM sessions WHERE transport_meta LIKE ?")
228
+ .all(`%"${RESTART_RESUME_META_KEY}"%`);
229
+ return rows
230
+ .map(({ id }) => getSession(id))
231
+ .filter((session) => !!session && !!readRestartResumeState(session.transportMeta).interruptedAt);
232
+ }
233
+ /** The user has said something in this session since `sinceMs`. */
234
+ function hasUserMessageAfter(sessionId, sinceMs) {
235
+ return !!initDb().prepare("SELECT 1 FROM messages WHERE session_id = ? AND role = 'user' AND timestamp > ? LIMIT 1").get(sessionId, sinceMs);
236
+ }
237
+ /**
238
+ * A user message recorded since `sinceMs` that an assistant reply does
239
+ * (`answered`) or does not follow. Recording a message is the first thing a
240
+ * turn does, so a message with nothing behind it was only received: a process
241
+ * that is shutting down still starts the next queued turn, records its
242
+ * message, and can exit before the session is even "running" again.
243
+ */
244
+ function hasUserMessageSince(sessionId, sinceMs, answered) {
245
+ return !!initDb().prepare(`
246
+ SELECT 1 FROM messages u
247
+ WHERE u.session_id = ? AND u.role = 'user' AND u.timestamp > ?
248
+ AND ${answered ? "" : "NOT "}EXISTS (
249
+ SELECT 1 FROM messages a
250
+ WHERE a.session_id = u.session_id AND a.role = 'assistant'
251
+ AND (a.timestamp > u.timestamp OR (a.timestamp = u.timestamp AND a.rowid > u.rowid))
252
+ )
253
+ LIMIT 1
254
+ `).get(sessionId, sinceMs);
255
+ }
256
+ /** New work reached the session after `sinceIso`: something the user said, or
257
+ * a turn queued for it (a web message, a child completion, a job wake-up).
258
+ * A restart nudge's own queue row is not new work. */
259
+ function hasNewInputSince(session, sinceIso) {
260
+ if (hasUserMessageAfter(session.id, Date.parse(sinceIso)))
261
+ return true;
262
+ return !!initDb().prepare("SELECT 1 FROM queue_items WHERE session_key = ? AND session_id = ? AND created_at > ? AND substr(prompt, 1, ?) <> ? LIMIT 1").get(session.sessionKey, session.id, sinceIso, RESTART_NUDGE_PREFIX.length, RESTART_NUDGE_PREFIX);
263
+ }
264
+ /**
265
+ * The restart-loop guard. The daily cap is absolute. The cooldown is not: it
266
+ * exists for the nudge turn itself being cut off again — the signature of a
267
+ * turn that restarts the gateway. When new work reached the session after its
268
+ * last nudge, the turn that was cut off is a different one, and withholding
269
+ * its nudge would strand that work (child completions whose queue row the
270
+ * dying process closed have no other way back).
271
+ */
272
+ function underLoopGuard(session, nudgedAt, now) {
273
+ const recent = nudgedAt.filter((at) => now - Date.parse(at) < RESTART_NUDGE_WINDOW_MS);
274
+ if (recent.length >= RESTART_NUDGE_WINDOW_LIMIT)
275
+ return true;
276
+ const last = recent.reduce((latest, at) => (!latest || Date.parse(at) > Date.parse(latest) ? at : latest), undefined);
277
+ if (!last || now - Date.parse(last) >= RESTART_NUDGE_COOLDOWN_MS)
278
+ return false;
279
+ return !hasNewInputSince(session, last);
280
+ }
281
+ /**
282
+ * For a turn that had recorded its reply when the restart cut it off: is that
283
+ * reply still not known to have arrived?
284
+ *
285
+ * The turn's completion writes a final status only after the delivery has
286
+ * returned, so the interruption's own status still standing means the process
287
+ * was gone first. And a delivery that did return may have returned a failure —
288
+ * during a shutdown, typically because the connector had already been stopped —
289
+ * which the completion catches, records, and settles as an ordinary "idle".
290
+ */
291
+ function replyDeliveryOpen(session) {
292
+ return session.status === "interrupted" || hasUndeliveredReply(session);
293
+ }
294
+ function isActive(session, isBusy) {
295
+ return session.status === "running" || session.status === "waiting" || isBusy?.(session) === true;
296
+ }
297
+ function skipReason(session, input) {
298
+ const state = readRestartResumeState(session.transportMeta);
299
+ const interruptedAt = Date.parse(state.interruptedAt ?? "");
300
+ if (session.workflowProvenance)
301
+ return "workflow"; // recoverStaleWorkflowAttemptSessions owns these
302
+ if (session.source === "cron")
303
+ return "cron"; // its connector lived for one run — nowhere to deliver
304
+ if (isActive(session, input.isBusy))
305
+ return "active"; // the queue replay, or a new message, is already driving it
306
+ // A mark can outlive its restart (the nudge could not be posted). Once the user has asked again
307
+ // and been answered, it is history. A later message that was merely recorded proves nothing.
308
+ if (hasUserMessageSince(session.id, interruptedAt, true))
309
+ return "moved-on";
310
+ // The turn had recorded its reply, and that reply went out. A later message nobody answered still needs a turn.
311
+ if (state.replyRecorded && !replyDeliveryOpen(session) && !hasUserMessageSince(session.id, interruptedAt, false))
312
+ return "answered";
313
+ // NaN unless the turn was waiting for a usage limit and its wait knew the reset.
314
+ const limitResetsAt = Date.parse(state.limitWait?.resetsAt ?? "");
315
+ // No turn is kept waiting for a reset that far off (a wait an older version started): nor is its nudge.
316
+ if (usageLimitOutlastsWait(limitResetsAt / 1000, input.now))
317
+ return "limit-too-far";
318
+ // A wait counts from the reset it was waiting for: until then nothing could have been done about it.
319
+ const since = Number.isFinite(limitResetsAt) ? Math.max(interruptedAt, limitResetsAt) : interruptedAt;
320
+ if (input.now - since > input.maxAgeMs)
321
+ return "too-old";
322
+ if (underLoopGuard(session, state.nudgedAt, input.now))
323
+ return "recently-nudged";
324
+ return null;
325
+ }
326
+ /**
327
+ * Boot step, AFTER the queue replay: decide who gets a nudge. Everyone who
328
+ * does not has the mark taken off here, so it cannot resurface on a later
329
+ * restart the session had nothing to do with. A candidate keeps its mark until
330
+ * its nudge is accepted — a restart inside the stagger window loses nothing.
331
+ */
332
+ export function selectRestartResumeCandidates(input) {
333
+ return initDb().transaction(() => {
334
+ const selection = { candidates: [], skipped: [] };
335
+ for (const session of listMarkedSessions()) {
336
+ const reason = skipReason(session, input);
337
+ if (!reason) {
338
+ selection.candidates.push(session);
339
+ continue;
340
+ }
341
+ clearRestartInterruptedMark(session.id);
342
+ selection.skipped.push({ sessionId: session.id, reason });
343
+ }
344
+ return selection;
345
+ }).immediate();
346
+ }
347
+ function activityMillis(session) {
348
+ const parsed = Date.parse(session.lastActivity);
349
+ return Number.isNaN(parsed) ? 0 : parsed;
350
+ }
351
+ /**
352
+ * The earliest a session's nudge may go out. A turn that was waiting for a
353
+ * usage limit is not woken while that limit is known to be on: the engine
354
+ * would only refuse it again, and every restart during the limit would wake it
355
+ * to fail. It is woken a moment after the reset it was waiting for — which is
356
+ * when it was going to carry on anyway.
357
+ */
358
+ function notBefore(session, now) {
359
+ const resetsAt = Date.parse(readRestartResumeState(session.transportMeta).limitWait?.resetsAt ?? "");
360
+ return Number.isFinite(resetsAt) ? Math.max(now, resetsAt + RESTART_LIMIT_RESET_BUFFER_MS) : now;
361
+ }
362
+ /** Order the interrupted sessions, most recent conversation first, and spread
363
+ * their wake-ups over the stagger window. */
364
+ export function planRestartResumes(input) {
365
+ const ordered = [...input.candidates].sort((a, b) => {
366
+ const activity = activityMillis(b) - activityMillis(a);
367
+ return activity !== 0 ? activity : a.id.localeCompare(b.id);
368
+ });
369
+ return {
370
+ resumes: ordered.slice(0, MAX_RESTART_RESUMES).map((session, index) => {
371
+ const start = notBefore(session, input.now);
372
+ return {
373
+ sessionId: session.id,
374
+ dueAt: start + index * RESTART_RESUME_STAGGER_MS,
375
+ ...(start > input.now ? { heldForLimit: true } : {}),
376
+ };
377
+ }),
378
+ deferred: ordered.slice(MAX_RESTART_RESUMES).map((session) => session.id),
379
+ };
380
+ }
381
+ const OWN_RESTART = "If you restarted or updated the gateway yourself (for example `ryoko update --restart`), that restart is this one and it is done. Do NOT trigger it again";
382
+ const transcriptOf = (session) => `GET /api/sessions/${session.id}?last=10`;
383
+ /**
384
+ * Close a "nothing is left to post" step with how to end the turn that way.
385
+ * The answer to a nudge is posted to the conversation the session came from,
386
+ * so "it had arrived" would be one more post in it. Where an answer that posts
387
+ * nothing exists, the session is handed it — on a line of its own, because it
388
+ * has to be reproduced exactly.
389
+ */
390
+ function withEndingWithoutAPost(step, session) {
391
+ const silent = silentOriginAnswer(session);
392
+ if (!silent)
393
+ return [`${step} Whatever you answer is shown in this conversation, so keep it to one short line saying that nothing was left to send.`];
394
+ return [
395
+ `${step} Your answer to this message is posted to the conversation, and a line saying that it had arrived would be one more post there. To post nothing, end your answer with the line below — exactly as written, on a line of its own, outside any code block. Nothing of an answer that ends with it is posted (what you write above it stays in this session), so use it in that case only:`,
396
+ silent,
397
+ ];
398
+ }
399
+ /**
400
+ * The turn was cut off mid-flight: its work has to be picked back up. So does
401
+ * the request of a turn that was parked waiting for a usage limit — the user
402
+ * was told it would carry on by itself, and the wait went with the process.
403
+ */
404
+ function cutOffMessage(session, interruptedAt, unseenUserMessage, limitWait) {
405
+ const transcript = transcriptOf(session);
406
+ const alreadyDelivered = "5. Only if you find that your answer to that request had already been delivered and nothing is left to do: do not post it a second time.";
407
+ return [
408
+ limitWait
409
+ ? `${RESTART_NUDGE_PREFIX} Your previous turn in this conversation was waiting for a usage limit to reset when the gateway restarted at ${interruptedAt}. The wait did not survive the restart, so the request it was for is still unanswered — not something the user did, and not a mistake in your work.`
410
+ : `${RESTART_NUDGE_PREFIX} Your previous turn in this conversation was cut off by a gateway restart at ${interruptedAt} — not by the user, and not by a mistake in your work.`,
411
+ "",
412
+ "Pick the request back up and finish it:",
413
+ "1. First re-check anything that was in flight (a command, a tool call, a delegated child, a detached job). Look at its actual state before you assume it finished or run it again.",
414
+ `2. ${OWN_RESTART} — confirm the result and report it.`,
415
+ unseenUserMessage
416
+ ? `3. The user wrote again while the gateway was restarting, and that message never reached you. Read this session's latest messages before acting — ${transcript} — and deal with it in the same answer.`
417
+ : `3. Read this session's latest messages before acting: ${transcript}. They show the request if you have no memory of the interrupted turn, and whether the user wrote again while the gateway was restarting — a user message with no reply after it is still waiting for an answer, whether or not it ever reached you.`,
418
+ "4. Then answer in the original conversation as usual; it is still waiting on you.",
419
+ // A message known to be waiting has to be answered: ending without a post is not on offer.
420
+ ...(unseenUserMessage ? [alreadyDelivered] : withEndingWithoutAPost(alreadyDelivered, session)),
421
+ ].join("\n");
422
+ }
423
+ /**
424
+ * The turn had finished and recorded its reply; the reply is not known to have
425
+ * arrived. This says what the note of a failed delivery says
426
+ * (recordFailedOriginDelivery): none of the reply arrived, or only the
427
+ * beginning — look first, send what is missing, repeat nothing. When that note
428
+ * is in the transcript, the two must not pull in different directions.
429
+ */
430
+ function openDeliveryMessage(session, interruptedAt, unseenUserMessage) {
431
+ const allThere = "4. If all of it is there, do not post it a second time.";
432
+ return [
433
+ `${RESTART_NUDGE_PREFIX} The gateway restarted at ${interruptedAt}, just as your last reply in this conversation was being delivered — not something the user did, and not a mistake in your work. That reply is saved in this session, but the conversation may have seen none of it, or only the beginning.`,
434
+ "",
435
+ unseenUserMessage
436
+ ? "Your turn had finished, so there is no work to redo. What is open is the delivery, and a newer message:"
437
+ : "Your turn had finished, so there is no work to redo. Only the delivery is open:",
438
+ `1. Check the conversation itself (the thread or channel) for how much of that reply arrived. The reply as you wrote it is in this session: ${transcriptOf(session)}`,
439
+ "2. Send what is missing: your answer to this message is posted to the conversation. Do not repost a part that is already there.",
440
+ "3. If you cannot read the conversation, send the whole reply again, unchanged.",
441
+ ...(unseenUserMessage
442
+ ? [
443
+ allThere,
444
+ "5. The user also wrote again while the gateway was restarting, and that message never reached you. It is in the same transcript, with no reply after it — answer it in the same answer.",
445
+ `6. ${OWN_RESTART}.`,
446
+ ]
447
+ : [...withEndingWithoutAPost(allThere, session), `5. ${OWN_RESTART}.`]),
448
+ ].join("\n");
449
+ }
450
+ /** The turn had finished and its reply went out. All the restart left open is
451
+ * a message that arrived afterwards and never reached the engine. */
452
+ function newerMessageOnlyMessage(session, interruptedAt) {
453
+ return [
454
+ `${RESTART_NUDGE_PREFIX} The gateway restarted at ${interruptedAt} — not something the user did, and not a mistake in your work. Your last reply in this conversation had already been delivered: no turn of yours was cut off, and there is no work to redo.`,
455
+ "",
456
+ "What is still open is a newer message. The user wrote again while the gateway was restarting, and that message never reached you:",
457
+ `1. Read this session's latest messages: ${transcriptOf(session)}. The user message with no reply after it is the one that is waiting.`,
458
+ "2. Answer it in the original conversation as usual. Do not send your earlier reply again.",
459
+ `3. ${OWN_RESTART}.`,
460
+ ].join("\n");
461
+ }
462
+ /**
463
+ * The wake-up itself. The session must know the break was the gateway's doing,
464
+ * re-check whatever was mid-flight instead of assuming it ran or running it
465
+ * again, and — if it caused the restart — not cause another. The interruption
466
+ * time makes the text unique per interruption: the notification route treats
467
+ * an identical persisted notification as a duplicate.
468
+ *
469
+ * It always sends the session to its transcript first. A message that waited
470
+ * in the queue is recorded when the dying process starts its turn, and may
471
+ * never reach the engine; when that turn got as far as "running", the boot
472
+ * stamps the session afresh and the unseen message cannot be told apart any
473
+ * more. The transcript shows it either way.
474
+ *
475
+ * A turn that had already recorded its reply gets a different message, because
476
+ * telling it that it was cut off mid-flight sends it after work that was never
477
+ * interrupted: there is nothing to pick back up — only a reply that may not
478
+ * have arrived, or, once that reply is known to have gone out, a newer message
479
+ * that nobody answered.
480
+ */
481
+ export function restartResumeMessage(session, interruptedAt, situation = {}) {
482
+ const unseenUserMessage = situation.unseenUserMessage === true;
483
+ if (situation.reply === "delivered")
484
+ return newerMessageOnlyMessage(session, interruptedAt);
485
+ if (situation.reply === "undelivered")
486
+ return openDeliveryMessage(session, interruptedAt, unseenUserMessage);
487
+ return cutOffMessage(session, interruptedAt, unseenUserMessage, situation.limitWait === true);
488
+ }
489
+ function busyProbe(deps) {
490
+ const queue = deps.queue;
491
+ return (session) => !!queue && (queue.isRunning(session.sessionKey) || queue.getPendingCount(session.sessionKey) > 0);
492
+ }
493
+ function nudgeSituation(session, interruptedAt) {
494
+ const state = readRestartResumeState(session.transportMeta);
495
+ return {
496
+ unseenUserMessage: hasUserMessageSince(session.id, Date.parse(interruptedAt), false),
497
+ ...(state.replyRecorded ? { reply: replyDeliveryOpen(session) ? "undelivered" : "delivered" } : {}),
498
+ ...(state.limitWait ? { limitWait: true } : {}),
499
+ };
500
+ }
501
+ /** Wake one session, unless something else got to it first. `shuttingDown`
502
+ * turns true once the boot step's nudges have been cancelled. */
503
+ async function sendRestartNudge(sessionId, plannedAt, deps, shuttingDown) {
504
+ const session = getSession(sessionId);
505
+ const interruptedAt = session ? readRestartResumeState(session.transportMeta).interruptedAt : undefined;
506
+ if (!session || !interruptedAt)
507
+ return; // deleted, or already handled
508
+ if (isActive(session, busyProbe(deps)) || Date.parse(session.lastActivity) > plannedAt) {
509
+ clearRestartInterruptedMark(sessionId);
510
+ logger.info(`[restart-resume] Session ${sessionId} is active again — no nudge needed`);
511
+ return;
512
+ }
513
+ try {
514
+ await (deps.post ?? postSessionNotification)(deps.port, sessionId, {
515
+ message: restartResumeMessage(session, interruptedAt, nudgeSituation(session, interruptedAt)),
516
+ dedupeKey: `restart-resume:${sessionId}:${interruptedAt}`,
517
+ });
518
+ }
519
+ catch (err) {
520
+ // The mark stays: the next boot retries while the interruption is still recent.
521
+ logger.warn(`[restart-resume] Failed to nudge session ${sessionId}: ${err instanceof Error ? err.message : String(err)}`);
522
+ return;
523
+ }
524
+ // Posted into a gateway that has since begun shutting down: the turn it
525
+ // started dies with the rest. Not on record, so the next boot may try again.
526
+ if (shuttingDown())
527
+ return;
528
+ clearRestartInterruptedMark(sessionId, new Date(deps.now?.() ?? Date.now()).toISOString());
529
+ logger.info(`Nudged interrupted session ${sessionId} (${session.connector ?? session.source}${session.employee ? `, ${session.employee}` : ""}) to continue after the restart`);
530
+ }
531
+ function scheduleTimer(run, delayMs) {
532
+ const timer = setTimeout(() => {
533
+ run().catch((err) => logger.warn(`[restart-resume] nudge failed: ${err instanceof Error ? err.message : String(err)}`));
534
+ }, delayMs);
535
+ timer.unref?.();
536
+ return () => clearTimeout(timer);
537
+ }
538
+ function maxAgeMs(config) {
539
+ const minutes = config.sessions?.resumeInterruptedMaxAgeMinutes;
540
+ return (typeof minutes === "number" && Number.isFinite(minutes) && minutes > 0 ? minutes : DEFAULT_RESUME_MAX_AGE_MINUTES) * 60_000;
541
+ }
542
+ function describeSkipped(skipped) {
543
+ const counts = new Map();
544
+ for (const { reason } of skipped)
545
+ counts.set(reason, (counts.get(reason) ?? 0) + 1);
546
+ return [...counts].map(([reason, count]) => `${count} ${reason}`).join(", ");
547
+ }
548
+ /**
549
+ * Boot step: tell every session this restart interrupted to carry on. Runs
550
+ * after the pending queue replay, so a session already back on the engine
551
+ * through its own queue row is skipped rather than resumed twice.
552
+ *
553
+ * The nudges go out over the stagger window, so the gateway can be shutting
554
+ * down again before the last one is due. A nudge accepted then starts a turn
555
+ * that is killed at once, yet stays on record as sent — the returned `cancel`
556
+ * stops the ones still waiting.
557
+ */
558
+ export function resumeRestartInterruptedSessions(deps) {
559
+ const now = deps.now?.() ?? Date.now();
560
+ if (deps.config.sessions?.resumeInterruptedOnBoot === false) {
561
+ const left = listMarkedSessions();
562
+ for (const session of left)
563
+ clearRestartInterruptedMark(session.id);
564
+ if (left.length > 0) {
565
+ logger.info(`Restart resume is off (sessions.resumeInterruptedOnBoot: false) — left ${left.length} interrupted session(s) for the operator`);
566
+ }
567
+ return { planned: 0, heldForLimit: 0, deferred: 0, skipped: left.length, disabled: true, cancel: () => { } };
568
+ }
569
+ const selection = selectRestartResumeCandidates({ now, maxAgeMs: maxAgeMs(deps.config), isBusy: busyProbe(deps) });
570
+ const plan = planRestartResumes({ candidates: selection.candidates, now });
571
+ for (const sessionId of plan.deferred)
572
+ clearRestartInterruptedMark(sessionId);
573
+ const schedule = deps.schedule ?? scheduleTimer;
574
+ let cancelled = false;
575
+ const unschedule = [];
576
+ for (const resume of plan.resumes) {
577
+ const nudge = () => (cancelled ? Promise.resolve() : sendRestartNudge(resume.sessionId, now, deps, () => cancelled));
578
+ const undo = schedule(nudge, Math.max(0, resume.dueAt - now));
579
+ if (undo)
580
+ unschedule.push(undo);
581
+ }
582
+ const cancel = () => {
583
+ cancelled = true;
584
+ for (const undo of unschedule.splice(0))
585
+ undo();
586
+ };
587
+ const heldForLimit = plan.resumes.filter((resume) => resume.heldForLimit).length;
588
+ if (plan.resumes.length + plan.deferred.length + selection.skipped.length > 0) {
589
+ logger.info(`Restart resume: nudging ${plan.resumes.length} interrupted session(s)` +
590
+ (heldForLimit > 0 ? ` (${heldForLimit} of them once the usage limit they were waiting for has reset)` : "") +
591
+ (plan.deferred.length > 0 ? `, ${plan.deferred.length} over the cap of ${MAX_RESTART_RESUMES} left alone` : "") +
592
+ (selection.skipped.length > 0 ? `, skipped ${describeSkipped(selection.skipped)}` : ""));
593
+ }
594
+ return { planned: plan.resumes.length, heldForLimit, deferred: plan.deferred.length, skipped: selection.skipped.length, cancel };
595
+ }
596
+ //# sourceMappingURL=restart-resume.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restart-resume.js","sourceRoot":"","sources":["../../../src/sessions/restart-resume.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"speaker-prefix.d.ts","sourceRoot":"","sources":["../../../src/sessions/speaker-prefix.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,oEAAoE;AACpE,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAOD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,iBAAiB,EACvB,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,UAAU,CAAA;CAAE,GACtE,MAAM,GAAG,IAAI,CA+Bf"}
1
+ {"version":3,"file":"speaker-prefix.d.ts","sourceRoot":"","sources":["../../../src/sessions/speaker-prefix.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,oEAAoE;AACpE,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAOD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,iBAAiB,EACvB,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,UAAU,CAAA;CAAE,GACtE,MAAM,GAAG,IAAI,CAiCf"}