charness 0.0.0-stage → 3.0.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 (988) hide show
  1. package/.env.example +88 -0
  2. package/DEVELOPMENT.md +110 -0
  3. package/LICENSE +21 -0
  4. package/MIGRATION_1_TO_2.md +24 -0
  5. package/README.md +1024 -2
  6. package/dist/accessControl.d.ts +71 -0
  7. package/dist/accessControl.d.ts.map +1 -0
  8. package/dist/accessControl.js +108 -0
  9. package/dist/accessControl.js.map +1 -0
  10. package/dist/adapters/adapterEventRouting.d.ts +51 -0
  11. package/dist/adapters/adapterEventRouting.d.ts.map +1 -0
  12. package/dist/adapters/adapterEventRouting.js +74 -0
  13. package/dist/adapters/adapterEventRouting.js.map +1 -0
  14. package/dist/adapters/adapterNames.d.ts +19 -0
  15. package/dist/adapters/adapterNames.d.ts.map +1 -0
  16. package/dist/adapters/adapterNames.js +25 -0
  17. package/dist/adapters/adapterNames.js.map +1 -0
  18. package/dist/adapters/claudeCliAdapter.d.ts +1336 -0
  19. package/dist/adapters/claudeCliAdapter.d.ts.map +1 -0
  20. package/dist/adapters/claudeCliAdapter.js +4204 -0
  21. package/dist/adapters/claudeCliAdapter.js.map +1 -0
  22. package/dist/adapters/claudeJsonStreamAdapter.d.ts +548 -0
  23. package/dist/adapters/claudeJsonStreamAdapter.d.ts.map +1 -0
  24. package/dist/adapters/claudeJsonStreamAdapter.js +1810 -0
  25. package/dist/adapters/claudeJsonStreamAdapter.js.map +1 -0
  26. package/dist/adapters/claudePlatformFlags.d.ts +35 -0
  27. package/dist/adapters/claudePlatformFlags.d.ts.map +1 -0
  28. package/dist/adapters/claudePlatformFlags.js +46 -0
  29. package/dist/adapters/claudePlatformFlags.js.map +1 -0
  30. package/dist/adapters/createAdapter.d.ts +252 -0
  31. package/dist/adapters/createAdapter.d.ts.map +1 -0
  32. package/dist/adapters/createAdapter.js +475 -0
  33. package/dist/adapters/createAdapter.js.map +1 -0
  34. package/dist/adapters/openCodeAdapter.d.ts +1446 -0
  35. package/dist/adapters/openCodeAdapter.d.ts.map +1 -0
  36. package/dist/adapters/openCodeAdapter.js +4540 -0
  37. package/dist/adapters/openCodeAdapter.js.map +1 -0
  38. package/dist/adapters/sessionLaunchDefaults.d.ts +28 -0
  39. package/dist/adapters/sessionLaunchDefaults.d.ts.map +1 -0
  40. package/dist/adapters/sessionLaunchDefaults.js +15 -0
  41. package/dist/adapters/sessionLaunchDefaults.js.map +1 -0
  42. package/dist/adapters/terminalAdapter.d.ts +68 -0
  43. package/dist/adapters/terminalAdapter.d.ts.map +1 -0
  44. package/dist/adapters/terminalAdapter.js +371 -0
  45. package/dist/adapters/terminalAdapter.js.map +1 -0
  46. package/dist/agentLogin/agentLogin.d.ts +31 -0
  47. package/dist/agentLogin/agentLogin.d.ts.map +1 -0
  48. package/dist/agentLogin/agentLogin.js +493 -0
  49. package/dist/agentLogin/agentLogin.js.map +1 -0
  50. package/dist/agentTrigger.d.ts +28 -0
  51. package/dist/agentTrigger.d.ts.map +1 -0
  52. package/dist/agentTrigger.js +53 -0
  53. package/dist/agentTrigger.js.map +1 -0
  54. package/dist/apiErrorRetry.d.ts +209 -0
  55. package/dist/apiErrorRetry.d.ts.map +1 -0
  56. package/dist/apiErrorRetry.js +351 -0
  57. package/dist/apiErrorRetry.js.map +1 -0
  58. package/dist/apiRetryKick.d.ts +148 -0
  59. package/dist/apiRetryKick.d.ts.map +1 -0
  60. package/dist/apiRetryKick.js +158 -0
  61. package/dist/apiRetryKick.js.map +1 -0
  62. package/dist/bootClassifier.d.ts +46 -0
  63. package/dist/bootClassifier.d.ts.map +1 -0
  64. package/dist/bootClassifier.js +43 -0
  65. package/dist/bootClassifier.js.map +1 -0
  66. package/dist/bot.d.ts +207 -0
  67. package/dist/bot.d.ts.map +1 -0
  68. package/dist/bot.js +10611 -0
  69. package/dist/bot.js.map +1 -0
  70. package/dist/botFileStorage.d.ts +60 -0
  71. package/dist/botFileStorage.d.ts.map +1 -0
  72. package/dist/botFileStorage.js +205 -0
  73. package/dist/botFileStorage.js.map +1 -0
  74. package/dist/cli/applyDnsFix.d.ts +7 -0
  75. package/dist/cli/applyDnsFix.d.ts.map +1 -0
  76. package/dist/cli/applyDnsFix.js +46 -0
  77. package/dist/cli/applyDnsFix.js.map +1 -0
  78. package/dist/cli/bot.d.ts +27 -0
  79. package/dist/cli/bot.d.ts.map +1 -0
  80. package/dist/cli/bot.js +98 -0
  81. package/dist/cli/bot.js.map +1 -0
  82. package/dist/cli/botEntry.d.ts +3 -0
  83. package/dist/cli/botEntry.d.ts.map +1 -0
  84. package/dist/cli/botEntry.js +11 -0
  85. package/dist/cli/botEntry.js.map +1 -0
  86. package/dist/cli/connectorGuards.d.ts +31 -0
  87. package/dist/cli/connectorGuards.d.ts.map +1 -0
  88. package/dist/cli/connectorGuards.js +159 -0
  89. package/dist/cli/connectorGuards.js.map +1 -0
  90. package/dist/cli/envLoader.d.ts +34 -0
  91. package/dist/cli/envLoader.d.ts.map +1 -0
  92. package/dist/cli/envLoader.js +132 -0
  93. package/dist/cli/envLoader.js.map +1 -0
  94. package/dist/cli/hot.d.ts +82 -0
  95. package/dist/cli/hot.d.ts.map +1 -0
  96. package/dist/cli/hot.js +323 -0
  97. package/dist/cli/hot.js.map +1 -0
  98. package/dist/cli.d.ts +3 -0
  99. package/dist/cli.d.ts.map +1 -0
  100. package/dist/cli.js +130 -0
  101. package/dist/cli.js.map +1 -0
  102. package/dist/connectors/jira/adf.d.ts +72 -0
  103. package/dist/connectors/jira/adf.d.ts.map +1 -0
  104. package/dist/connectors/jira/adf.js +407 -0
  105. package/dist/connectors/jira/adf.js.map +1 -0
  106. package/dist/connectors/jira/agentBinaries.d.ts +14 -0
  107. package/dist/connectors/jira/agentBinaries.d.ts.map +1 -0
  108. package/dist/connectors/jira/agentBinaries.js +75 -0
  109. package/dist/connectors/jira/agentBinaries.js.map +1 -0
  110. package/dist/connectors/jira/answerSink.d.ts +52 -0
  111. package/dist/connectors/jira/answerSink.d.ts.map +1 -0
  112. package/dist/connectors/jira/answerSink.js +220 -0
  113. package/dist/connectors/jira/answerSink.js.map +1 -0
  114. package/dist/connectors/jira/attachmentDownload.d.ts +41 -0
  115. package/dist/connectors/jira/attachmentDownload.d.ts.map +1 -0
  116. package/dist/connectors/jira/attachmentDownload.js +92 -0
  117. package/dist/connectors/jira/attachmentDownload.js.map +1 -0
  118. package/dist/connectors/jira/attachmentTool.d.ts +43 -0
  119. package/dist/connectors/jira/attachmentTool.d.ts.map +1 -0
  120. package/dist/connectors/jira/attachmentTool.js +150 -0
  121. package/dist/connectors/jira/attachmentTool.js.map +1 -0
  122. package/dist/connectors/jira/client.d.ts +490 -0
  123. package/dist/connectors/jira/client.d.ts.map +1 -0
  124. package/dist/connectors/jira/client.js +453 -0
  125. package/dist/connectors/jira/client.js.map +1 -0
  126. package/dist/connectors/jira/config.d.ts +117 -0
  127. package/dist/connectors/jira/config.d.ts.map +1 -0
  128. package/dist/connectors/jira/config.js +350 -0
  129. package/dist/connectors/jira/config.js.map +1 -0
  130. package/dist/connectors/jira/configFile.d.ts +10 -0
  131. package/dist/connectors/jira/configFile.d.ts.map +1 -0
  132. package/dist/connectors/jira/configFile.js +50 -0
  133. package/dist/connectors/jira/configFile.js.map +1 -0
  134. package/dist/connectors/jira/connector.d.ts +68 -0
  135. package/dist/connectors/jira/connector.d.ts.map +1 -0
  136. package/dist/connectors/jira/connector.js +257 -0
  137. package/dist/connectors/jira/connector.js.map +1 -0
  138. package/dist/connectors/jira/contextLedger.d.ts +59 -0
  139. package/dist/connectors/jira/contextLedger.d.ts.map +1 -0
  140. package/dist/connectors/jira/contextLedger.js +194 -0
  141. package/dist/connectors/jira/contextLedger.js.map +1 -0
  142. package/dist/connectors/jira/contextPreamble.d.ts +18 -0
  143. package/dist/connectors/jira/contextPreamble.d.ts.map +1 -0
  144. package/dist/connectors/jira/contextPreamble.js +31 -0
  145. package/dist/connectors/jira/contextPreamble.js.map +1 -0
  146. package/dist/connectors/jira/inbound.d.ts +132 -0
  147. package/dist/connectors/jira/inbound.d.ts.map +1 -0
  148. package/dist/connectors/jira/inbound.js +316 -0
  149. package/dist/connectors/jira/inbound.js.map +1 -0
  150. package/dist/connectors/jira/issueBlocks.d.ts +51 -0
  151. package/dist/connectors/jira/issueBlocks.d.ts.map +1 -0
  152. package/dist/connectors/jira/issueBlocks.js +182 -0
  153. package/dist/connectors/jira/issueBlocks.js.map +1 -0
  154. package/dist/connectors/jira/issueContext.d.ts +25 -0
  155. package/dist/connectors/jira/issueContext.d.ts.map +1 -0
  156. package/dist/connectors/jira/issueContext.js +53 -0
  157. package/dist/connectors/jira/issueContext.js.map +1 -0
  158. package/dist/connectors/jira/issueDelta.d.ts +35 -0
  159. package/dist/connectors/jira/issueDelta.d.ts.map +1 -0
  160. package/dist/connectors/jira/issueDelta.js +50 -0
  161. package/dist/connectors/jira/issueDelta.js.map +1 -0
  162. package/dist/connectors/jira/mediaPlaceholders.d.ts +20 -0
  163. package/dist/connectors/jira/mediaPlaceholders.d.ts.map +1 -0
  164. package/dist/connectors/jira/mediaPlaceholders.js +92 -0
  165. package/dist/connectors/jira/mediaPlaceholders.js.map +1 -0
  166. package/dist/connectors/jira/outbound.d.ts +6 -0
  167. package/dist/connectors/jira/outbound.d.ts.map +1 -0
  168. package/dist/connectors/jira/outbound.js +38 -0
  169. package/dist/connectors/jira/outbound.js.map +1 -0
  170. package/dist/connectors/jira/prompt.d.ts +37 -0
  171. package/dist/connectors/jira/prompt.d.ts.map +1 -0
  172. package/dist/connectors/jira/prompt.js +99 -0
  173. package/dist/connectors/jira/prompt.js.map +1 -0
  174. package/dist/connectors/jira/promptSpill.d.ts +50 -0
  175. package/dist/connectors/jira/promptSpill.d.ts.map +1 -0
  176. package/dist/connectors/jira/promptSpill.js +157 -0
  177. package/dist/connectors/jira/promptSpill.js.map +1 -0
  178. package/dist/connectors/jira/promptText.d.ts +7 -0
  179. package/dist/connectors/jira/promptText.d.ts.map +1 -0
  180. package/dist/connectors/jira/promptText.js +26 -0
  181. package/dist/connectors/jira/promptText.js.map +1 -0
  182. package/dist/connectors/jira/sessionKeyCodec.d.ts +16 -0
  183. package/dist/connectors/jira/sessionKeyCodec.d.ts.map +1 -0
  184. package/dist/connectors/jira/sessionKeyCodec.js +101 -0
  185. package/dist/connectors/jira/sessionKeyCodec.js.map +1 -0
  186. package/dist/connectors/jira/trigger.d.ts +50 -0
  187. package/dist/connectors/jira/trigger.d.ts.map +1 -0
  188. package/dist/connectors/jira/trigger.js +93 -0
  189. package/dist/connectors/jira/trigger.js.map +1 -0
  190. package/dist/connectors/jira/triggerLog.d.ts +51 -0
  191. package/dist/connectors/jira/triggerLog.d.ts.map +1 -0
  192. package/dist/connectors/jira/triggerLog.js +78 -0
  193. package/dist/connectors/jira/triggerLog.js.map +1 -0
  194. package/dist/connectors/jira/unconfirmedPosts.d.ts +58 -0
  195. package/dist/connectors/jira/unconfirmedPosts.d.ts.map +1 -0
  196. package/dist/connectors/jira/unconfirmedPosts.js +105 -0
  197. package/dist/connectors/jira/unconfirmedPosts.js.map +1 -0
  198. package/dist/connectors/telegram/answerSink.d.ts +46 -0
  199. package/dist/connectors/telegram/answerSink.d.ts.map +1 -0
  200. package/dist/connectors/telegram/answerSink.js +71 -0
  201. package/dist/connectors/telegram/answerSink.js.map +1 -0
  202. package/dist/connectors/telegram/commands/autoContinueLimits.d.ts +31 -0
  203. package/dist/connectors/telegram/commands/autoContinueLimits.d.ts.map +1 -0
  204. package/dist/connectors/telegram/commands/autoContinueLimits.js +142 -0
  205. package/dist/connectors/telegram/commands/autoContinueLimits.js.map +1 -0
  206. package/dist/connectors/telegram/commands/botCore.d.ts +46 -0
  207. package/dist/connectors/telegram/commands/botCore.d.ts.map +1 -0
  208. package/dist/connectors/telegram/commands/botCore.js +3 -0
  209. package/dist/connectors/telegram/commands/botCore.js.map +1 -0
  210. package/dist/connectors/telegram/commands/callbackMessage.d.ts +12 -0
  211. package/dist/connectors/telegram/commands/callbackMessage.d.ts.map +1 -0
  212. package/dist/connectors/telegram/commands/callbackMessage.js +13 -0
  213. package/dist/connectors/telegram/commands/callbackMessage.js.map +1 -0
  214. package/dist/connectors/telegram/commands/compaction.d.ts +47 -0
  215. package/dist/connectors/telegram/commands/compaction.d.ts.map +1 -0
  216. package/dist/connectors/telegram/commands/compaction.js +868 -0
  217. package/dist/connectors/telegram/commands/compaction.js.map +1 -0
  218. package/dist/connectors/telegram/commands/displayModes.d.ts +13 -0
  219. package/dist/connectors/telegram/commands/displayModes.d.ts.map +1 -0
  220. package/dist/connectors/telegram/commands/displayModes.js +335 -0
  221. package/dist/connectors/telegram/commands/displayModes.js.map +1 -0
  222. package/dist/connectors/telegram/commands/modelProviders.d.ts +95 -0
  223. package/dist/connectors/telegram/commands/modelProviders.d.ts.map +1 -0
  224. package/dist/connectors/telegram/commands/modelProviders.js +841 -0
  225. package/dist/connectors/telegram/commands/modelProviders.js.map +1 -0
  226. package/dist/connectors/telegram/commands/reminders.d.ts +54 -0
  227. package/dist/connectors/telegram/commands/reminders.d.ts.map +1 -0
  228. package/dist/connectors/telegram/commands/reminders.js +624 -0
  229. package/dist/connectors/telegram/commands/reminders.js.map +1 -0
  230. package/dist/connectors/telegram/fileIntake.d.ts +166 -0
  231. package/dist/connectors/telegram/fileIntake.d.ts.map +1 -0
  232. package/dist/connectors/telegram/fileIntake.js +304 -0
  233. package/dist/connectors/telegram/fileIntake.js.map +1 -0
  234. package/dist/connectors/telegram/fileSendGateway.d.ts +57 -0
  235. package/dist/connectors/telegram/fileSendGateway.d.ts.map +1 -0
  236. package/dist/connectors/telegram/fileSendGateway.js +221 -0
  237. package/dist/connectors/telegram/fileSendGateway.js.map +1 -0
  238. package/dist/connectors/telegram/foreignKeyFallbacks.d.ts +52 -0
  239. package/dist/connectors/telegram/foreignKeyFallbacks.d.ts.map +1 -0
  240. package/dist/connectors/telegram/foreignKeyFallbacks.js +71 -0
  241. package/dist/connectors/telegram/foreignKeyFallbacks.js.map +1 -0
  242. package/dist/connectors/telegram/inbound.d.ts +131 -0
  243. package/dist/connectors/telegram/inbound.d.ts.map +1 -0
  244. package/dist/connectors/telegram/inbound.js +278 -0
  245. package/dist/connectors/telegram/inbound.js.map +1 -0
  246. package/dist/connectors/telegram/languagePicker.d.ts +32 -0
  247. package/dist/connectors/telegram/languagePicker.d.ts.map +1 -0
  248. package/dist/connectors/telegram/languagePicker.js +55 -0
  249. package/dist/connectors/telegram/languagePicker.js.map +1 -0
  250. package/dist/connectors/telegram/messageSplit.d.ts +62 -0
  251. package/dist/connectors/telegram/messageSplit.d.ts.map +1 -0
  252. package/dist/connectors/telegram/messageSplit.js +119 -0
  253. package/dist/connectors/telegram/messageSplit.js.map +1 -0
  254. package/dist/connectors/telegram/outbound.d.ts +62 -0
  255. package/dist/connectors/telegram/outbound.d.ts.map +1 -0
  256. package/dist/connectors/telegram/outbound.js +116 -0
  257. package/dist/connectors/telegram/outbound.js.map +1 -0
  258. package/dist/connectors/telegram/output/createOutputTransport.d.ts +34 -0
  259. package/dist/connectors/telegram/output/createOutputTransport.d.ts.map +1 -0
  260. package/dist/connectors/telegram/output/createOutputTransport.js +77 -0
  261. package/dist/connectors/telegram/output/createOutputTransport.js.map +1 -0
  262. package/dist/connectors/telegram/output/dmOutputTransport.d.ts +47 -0
  263. package/dist/connectors/telegram/output/dmOutputTransport.d.ts.map +1 -0
  264. package/dist/connectors/telegram/output/dmOutputTransport.js +412 -0
  265. package/dist/connectors/telegram/output/dmOutputTransport.js.map +1 -0
  266. package/dist/connectors/telegram/outputBacklogGlue.d.ts +38 -0
  267. package/dist/connectors/telegram/outputBacklogGlue.d.ts.map +1 -0
  268. package/dist/connectors/telegram/outputBacklogGlue.js +49 -0
  269. package/dist/connectors/telegram/outputBacklogGlue.js.map +1 -0
  270. package/dist/connectors/telegram/outputFlushPlan.d.ts +93 -0
  271. package/dist/connectors/telegram/outputFlushPlan.d.ts.map +1 -0
  272. package/dist/connectors/telegram/outputFlushPlan.js +120 -0
  273. package/dist/connectors/telegram/outputFlushPlan.js.map +1 -0
  274. package/dist/connectors/telegram/questionKeyboards.d.ts +30 -0
  275. package/dist/connectors/telegram/questionKeyboards.d.ts.map +1 -0
  276. package/dist/connectors/telegram/questionKeyboards.js +37 -0
  277. package/dist/connectors/telegram/questionKeyboards.js.map +1 -0
  278. package/dist/connectors/telegram/renderAgentHtml.d.ts +27 -0
  279. package/dist/connectors/telegram/renderAgentHtml.d.ts.map +1 -0
  280. package/dist/connectors/telegram/renderAgentHtml.js +97 -0
  281. package/dist/connectors/telegram/renderAgentHtml.js.map +1 -0
  282. package/dist/connectors/telegram/sessionKeyCodec.d.ts +28 -0
  283. package/dist/connectors/telegram/sessionKeyCodec.d.ts.map +1 -0
  284. package/dist/connectors/telegram/sessionKeyCodec.js +107 -0
  285. package/dist/connectors/telegram/sessionKeyCodec.js.map +1 -0
  286. package/dist/connectors/telegram/telegramCallGuard.d.ts +19 -0
  287. package/dist/connectors/telegram/telegramCallGuard.d.ts.map +1 -0
  288. package/dist/connectors/telegram/telegramCallGuard.js +35 -0
  289. package/dist/connectors/telegram/telegramCallGuard.js.map +1 -0
  290. package/dist/connectors/telegram/timezonePicker.d.ts +85 -0
  291. package/dist/connectors/telegram/timezonePicker.d.ts.map +1 -0
  292. package/dist/connectors/telegram/timezonePicker.js +142 -0
  293. package/dist/connectors/telegram/timezonePicker.js.map +1 -0
  294. package/dist/connectors/telegram/updateDispatcher.d.ts +85 -0
  295. package/dist/connectors/telegram/updateDispatcher.d.ts.map +1 -0
  296. package/dist/connectors/telegram/updateDispatcher.js +159 -0
  297. package/dist/connectors/telegram/updateDispatcher.js.map +1 -0
  298. package/dist/connectors/test/connector.d.ts +52 -0
  299. package/dist/connectors/test/connector.d.ts.map +1 -0
  300. package/dist/connectors/test/connector.js +143 -0
  301. package/dist/connectors/test/connector.js.map +1 -0
  302. package/dist/connectors/test/sessionKeyCodec.d.ts +25 -0
  303. package/dist/connectors/test/sessionKeyCodec.d.ts.map +1 -0
  304. package/dist/connectors/test/sessionKeyCodec.js +50 -0
  305. package/dist/connectors/test/sessionKeyCodec.js.map +1 -0
  306. package/dist/diagLog.d.ts +6 -0
  307. package/dist/diagLog.d.ts.map +1 -0
  308. package/dist/diagLog.js +58 -0
  309. package/dist/diagLog.js.map +1 -0
  310. package/dist/effortLevels.d.ts +68 -0
  311. package/dist/effortLevels.d.ts.map +1 -0
  312. package/dist/effortLevels.js +114 -0
  313. package/dist/effortLevels.js.map +1 -0
  314. package/dist/folderName.d.ts +42 -0
  315. package/dist/folderName.d.ts.map +1 -0
  316. package/dist/folderName.js +51 -0
  317. package/dist/folderName.js.map +1 -0
  318. package/dist/i18n/de.d.ts +2 -0
  319. package/dist/i18n/de.d.ts.map +1 -0
  320. package/dist/i18n/de.js +537 -0
  321. package/dist/i18n/de.js.map +1 -0
  322. package/dist/i18n/en.d.ts +7 -0
  323. package/dist/i18n/en.d.ts.map +1 -0
  324. package/dist/i18n/en.js +566 -0
  325. package/dist/i18n/en.js.map +1 -0
  326. package/dist/i18n/es.d.ts +2 -0
  327. package/dist/i18n/es.d.ts.map +1 -0
  328. package/dist/i18n/es.js +537 -0
  329. package/dist/i18n/es.js.map +1 -0
  330. package/dist/i18n/fr.d.ts +2 -0
  331. package/dist/i18n/fr.d.ts.map +1 -0
  332. package/dist/i18n/fr.js +537 -0
  333. package/dist/i18n/fr.js.map +1 -0
  334. package/dist/i18n/hi.d.ts +2 -0
  335. package/dist/i18n/hi.d.ts.map +1 -0
  336. package/dist/i18n/hi.js +537 -0
  337. package/dist/i18n/hi.js.map +1 -0
  338. package/dist/i18n/ja.d.ts +2 -0
  339. package/dist/i18n/ja.d.ts.map +1 -0
  340. package/dist/i18n/ja.js +537 -0
  341. package/dist/i18n/ja.js.map +1 -0
  342. package/dist/i18n/ka.d.ts +2 -0
  343. package/dist/i18n/ka.d.ts.map +1 -0
  344. package/dist/i18n/ka.js +537 -0
  345. package/dist/i18n/ka.js.map +1 -0
  346. package/dist/i18n/pt.d.ts +2 -0
  347. package/dist/i18n/pt.d.ts.map +1 -0
  348. package/dist/i18n/pt.js +537 -0
  349. package/dist/i18n/pt.js.map +1 -0
  350. package/dist/i18n/ru.d.ts +6 -0
  351. package/dist/i18n/ru.d.ts.map +1 -0
  352. package/dist/i18n/ru.js +540 -0
  353. package/dist/i18n/ru.js.map +1 -0
  354. package/dist/i18n/uk.d.ts +8 -0
  355. package/dist/i18n/uk.d.ts.map +1 -0
  356. package/dist/i18n/uk.js +542 -0
  357. package/dist/i18n/uk.js.map +1 -0
  358. package/dist/i18n/uz.d.ts +2 -0
  359. package/dist/i18n/uz.d.ts.map +1 -0
  360. package/dist/i18n/uz.js +537 -0
  361. package/dist/i18n/uz.js.map +1 -0
  362. package/dist/i18n/zh.d.ts +2 -0
  363. package/dist/i18n/zh.d.ts.map +1 -0
  364. package/dist/i18n/zh.js +537 -0
  365. package/dist/i18n/zh.js.map +1 -0
  366. package/dist/i18n.d.ts +115 -0
  367. package/dist/i18n.d.ts.map +1 -0
  368. package/dist/i18n.js +233 -0
  369. package/dist/i18n.js.map +1 -0
  370. package/dist/index.d.ts +3 -0
  371. package/dist/index.d.ts.map +1 -0
  372. package/dist/index.js +10 -0
  373. package/dist/index.js.map +1 -0
  374. package/dist/installManager.d.ts +99 -0
  375. package/dist/installManager.d.ts.map +1 -0
  376. package/dist/installManager.js +943 -0
  377. package/dist/installManager.js.map +1 -0
  378. package/dist/instanceLock.d.ts +161 -0
  379. package/dist/instanceLock.d.ts.map +1 -0
  380. package/dist/instanceLock.js +388 -0
  381. package/dist/instanceLock.js.map +1 -0
  382. package/dist/mcpConfig.d.ts +76 -0
  383. package/dist/mcpConfig.d.ts.map +1 -0
  384. package/dist/mcpConfig.js +270 -0
  385. package/dist/mcpConfig.js.map +1 -0
  386. package/dist/openCodeOpenQuestion.d.ts +44 -0
  387. package/dist/openCodeOpenQuestion.d.ts.map +1 -0
  388. package/dist/openCodeOpenQuestion.js +64 -0
  389. package/dist/openCodeOpenQuestion.js.map +1 -0
  390. package/dist/openCodeQuestionFlow.d.ts +105 -0
  391. package/dist/openCodeQuestionFlow.d.ts.map +1 -0
  392. package/dist/openCodeQuestionFlow.js +143 -0
  393. package/dist/openCodeQuestionFlow.js.map +1 -0
  394. package/dist/openCodeSessionRouting.d.ts +133 -0
  395. package/dist/openCodeSessionRouting.d.ts.map +1 -0
  396. package/dist/openCodeSessionRouting.js +253 -0
  397. package/dist/openCodeSessionRouting.js.map +1 -0
  398. package/dist/openCodeSessionTitle.d.ts +50 -0
  399. package/dist/openCodeSessionTitle.d.ts.map +1 -0
  400. package/dist/openCodeSessionTitle.js +84 -0
  401. package/dist/openCodeSessionTitle.js.map +1 -0
  402. package/dist/outputTrace.d.ts +108 -0
  403. package/dist/outputTrace.d.ts.map +1 -0
  404. package/dist/outputTrace.js +430 -0
  405. package/dist/outputTrace.js.map +1 -0
  406. package/dist/pendingQuestionRepost.d.ts +47 -0
  407. package/dist/pendingQuestionRepost.d.ts.map +1 -0
  408. package/dist/pendingQuestionRepost.js +29 -0
  409. package/dist/pendingQuestionRepost.js.map +1 -0
  410. package/dist/pinnedStatus.d.ts +52 -0
  411. package/dist/pinnedStatus.d.ts.map +1 -0
  412. package/dist/pinnedStatus.js +36 -0
  413. package/dist/pinnedStatus.js.map +1 -0
  414. package/dist/platform/answerSink.d.ts +93 -0
  415. package/dist/platform/answerSink.d.ts.map +1 -0
  416. package/dist/platform/answerSink.js +31 -0
  417. package/dist/platform/answerSink.js.map +1 -0
  418. package/dist/platform/capabilityFallback.d.ts +39 -0
  419. package/dist/platform/capabilityFallback.d.ts.map +1 -0
  420. package/dist/platform/capabilityFallback.js +55 -0
  421. package/dist/platform/capabilityFallback.js.map +1 -0
  422. package/dist/platform/commandRouter.d.ts +51 -0
  423. package/dist/platform/commandRouter.d.ts.map +1 -0
  424. package/dist/platform/commandRouter.js +53 -0
  425. package/dist/platform/commandRouter.js.map +1 -0
  426. package/dist/platform/connectorSet.d.ts +39 -0
  427. package/dist/platform/connectorSet.d.ts.map +1 -0
  428. package/dist/platform/connectorSet.js +55 -0
  429. package/dist/platform/connectorSet.js.map +1 -0
  430. package/dist/platform/inbound.d.ts +147 -0
  431. package/dist/platform/inbound.d.ts.map +1 -0
  432. package/dist/platform/inbound.js +18 -0
  433. package/dist/platform/inbound.js.map +1 -0
  434. package/dist/platform/outbound.d.ts +225 -0
  435. package/dist/platform/outbound.d.ts.map +1 -0
  436. package/dist/platform/outbound.js +30 -0
  437. package/dist/platform/outbound.js.map +1 -0
  438. package/dist/platform/unservedStateGuard.d.ts +27 -0
  439. package/dist/platform/unservedStateGuard.d.ts.map +1 -0
  440. package/dist/platform/unservedStateGuard.js +42 -0
  441. package/dist/platform/unservedStateGuard.js.map +1 -0
  442. package/dist/postToSession.d.ts +94 -0
  443. package/dist/postToSession.d.ts.map +1 -0
  444. package/dist/postToSession.js +56 -0
  445. package/dist/postToSession.js.map +1 -0
  446. package/dist/progressLine.d.ts +180 -0
  447. package/dist/progressLine.d.ts.map +1 -0
  448. package/dist/progressLine.js +293 -0
  449. package/dist/progressLine.js.map +1 -0
  450. package/dist/rateLimiter.d.ts +246 -0
  451. package/dist/rateLimiter.d.ts.map +1 -0
  452. package/dist/rateLimiter.js +555 -0
  453. package/dist/rateLimiter.js.map +1 -0
  454. package/dist/requests/answerRequest.d.ts +57 -0
  455. package/dist/requests/answerRequest.d.ts.map +1 -0
  456. package/dist/requests/answerRequest.js +96 -0
  457. package/dist/requests/answerRequest.js.map +1 -0
  458. package/dist/requests/answerTail.d.ts +83 -0
  459. package/dist/requests/answerTail.d.ts.map +1 -0
  460. package/dist/requests/answerTail.js +102 -0
  461. package/dist/requests/answerTail.js.map +1 -0
  462. package/dist/requests/limitWaitAnswer.d.ts +87 -0
  463. package/dist/requests/limitWaitAnswer.d.ts.map +1 -0
  464. package/dist/requests/limitWaitAnswer.js +83 -0
  465. package/dist/requests/limitWaitAnswer.js.map +1 -0
  466. package/dist/requests/requestGroup.d.ts +44 -0
  467. package/dist/requests/requestGroup.d.ts.map +1 -0
  468. package/dist/requests/requestGroup.js +63 -0
  469. package/dist/requests/requestGroup.js.map +1 -0
  470. package/dist/requests/requestHeader.d.ts +70 -0
  471. package/dist/requests/requestHeader.d.ts.map +1 -0
  472. package/dist/requests/requestHeader.js +83 -0
  473. package/dist/requests/requestHeader.js.map +1 -0
  474. package/dist/requests/requestLedger.d.ts +217 -0
  475. package/dist/requests/requestLedger.d.ts.map +1 -0
  476. package/dist/requests/requestLedger.js +468 -0
  477. package/dist/requests/requestLedger.js.map +1 -0
  478. package/dist/requests/sessionTurnProbe.d.ts +52 -0
  479. package/dist/requests/sessionTurnProbe.d.ts.map +1 -0
  480. package/dist/requests/sessionTurnProbe.js +29 -0
  481. package/dist/requests/sessionTurnProbe.js.map +1 -0
  482. package/dist/requests/types.d.ts +181 -0
  483. package/dist/requests/types.d.ts.map +1 -0
  484. package/dist/requests/types.js +9 -0
  485. package/dist/requests/types.js.map +1 -0
  486. package/dist/requests/wakeUpEngine.d.ts +160 -0
  487. package/dist/requests/wakeUpEngine.d.ts.map +1 -0
  488. package/dist/requests/wakeUpEngine.js +399 -0
  489. package/dist/requests/wakeUpEngine.js.map +1 -0
  490. package/dist/requests/wakeUpRules.d.ts +151 -0
  491. package/dist/requests/wakeUpRules.d.ts.map +1 -0
  492. package/dist/requests/wakeUpRules.js +167 -0
  493. package/dist/requests/wakeUpRules.js.map +1 -0
  494. package/dist/resumeContext.d.ts +87 -0
  495. package/dist/resumeContext.d.ts.map +1 -0
  496. package/dist/resumeContext.js +114 -0
  497. package/dist/resumeContext.js.map +1 -0
  498. package/dist/scheduler/checkRun.d.ts +95 -0
  499. package/dist/scheduler/checkRun.d.ts.map +1 -0
  500. package/dist/scheduler/checkRun.js +172 -0
  501. package/dist/scheduler/checkRun.js.map +1 -0
  502. package/dist/scheduler/delivery.d.ts +99 -0
  503. package/dist/scheduler/delivery.d.ts.map +1 -0
  504. package/dist/scheduler/delivery.js +212 -0
  505. package/dist/scheduler/delivery.js.map +1 -0
  506. package/dist/scheduler/deliveryKind.d.ts +29 -0
  507. package/dist/scheduler/deliveryKind.d.ts.map +1 -0
  508. package/dist/scheduler/deliveryKind.js +39 -0
  509. package/dist/scheduler/deliveryKind.js.map +1 -0
  510. package/dist/scheduler/directoryThreads.d.ts +19 -0
  511. package/dist/scheduler/directoryThreads.d.ts.map +1 -0
  512. package/dist/scheduler/directoryThreads.js +28 -0
  513. package/dist/scheduler/directoryThreads.js.map +1 -0
  514. package/dist/scheduler/engine.d.ts +77 -0
  515. package/dist/scheduler/engine.d.ts.map +1 -0
  516. package/dist/scheduler/engine.js +337 -0
  517. package/dist/scheduler/engine.js.map +1 -0
  518. package/dist/scheduler/injection.d.ts +102 -0
  519. package/dist/scheduler/injection.d.ts.map +1 -0
  520. package/dist/scheduler/injection.js +122 -0
  521. package/dist/scheduler/injection.js.map +1 -0
  522. package/dist/scheduler/mcpBoot.d.ts +65 -0
  523. package/dist/scheduler/mcpBoot.d.ts.map +1 -0
  524. package/dist/scheduler/mcpBoot.js +60 -0
  525. package/dist/scheduler/mcpBoot.js.map +1 -0
  526. package/dist/scheduler/mcpSurface.d.ts +355 -0
  527. package/dist/scheduler/mcpSurface.d.ts.map +1 -0
  528. package/dist/scheduler/mcpSurface.js +1257 -0
  529. package/dist/scheduler/mcpSurface.js.map +1 -0
  530. package/dist/scheduler/rebindResume.d.ts +27 -0
  531. package/dist/scheduler/rebindResume.d.ts.map +1 -0
  532. package/dist/scheduler/rebindResume.js +17 -0
  533. package/dist/scheduler/rebindResume.js.map +1 -0
  534. package/dist/scheduler/recurrence.d.ts +58 -0
  535. package/dist/scheduler/recurrence.d.ts.map +1 -0
  536. package/dist/scheduler/recurrence.js +210 -0
  537. package/dist/scheduler/recurrence.js.map +1 -0
  538. package/dist/scheduler/runLedger.d.ts +59 -0
  539. package/dist/scheduler/runLedger.d.ts.map +1 -0
  540. package/dist/scheduler/runLedger.js +54 -0
  541. package/dist/scheduler/runLedger.js.map +1 -0
  542. package/dist/scheduler/store.d.ts +97 -0
  543. package/dist/scheduler/store.d.ts.map +1 -0
  544. package/dist/scheduler/store.js +124 -0
  545. package/dist/scheduler/store.js.map +1 -0
  546. package/dist/scheduler/timezoneRecompute.d.ts +61 -0
  547. package/dist/scheduler/timezoneRecompute.d.ts.map +1 -0
  548. package/dist/scheduler/timezoneRecompute.js +46 -0
  549. package/dist/scheduler/timezoneRecompute.js.map +1 -0
  550. package/dist/scheduler/types.d.ts +139 -0
  551. package/dist/scheduler/types.d.ts.map +1 -0
  552. package/dist/scheduler/types.js +8 -0
  553. package/dist/scheduler/types.js.map +1 -0
  554. package/dist/sendErrorClassifier.d.ts +45 -0
  555. package/dist/sendErrorClassifier.d.ts.map +1 -0
  556. package/dist/sendErrorClassifier.js +65 -0
  557. package/dist/sendErrorClassifier.js.map +1 -0
  558. package/dist/sessionKey.d.ts +136 -0
  559. package/dist/sessionKey.d.ts.map +1 -0
  560. package/dist/sessionKey.js +153 -0
  561. package/dist/sessionKey.js.map +1 -0
  562. package/dist/sessionPick.d.ts +42 -0
  563. package/dist/sessionPick.d.ts.map +1 -0
  564. package/dist/sessionPick.js +39 -0
  565. package/dist/sessionPick.js.map +1 -0
  566. package/dist/shutdown.d.ts +126 -0
  567. package/dist/shutdown.d.ts.map +1 -0
  568. package/dist/shutdown.js +164 -0
  569. package/dist/shutdown.js.map +1 -0
  570. package/dist/startupPromptBuffer.d.ts +85 -0
  571. package/dist/startupPromptBuffer.d.ts.map +1 -0
  572. package/dist/startupPromptBuffer.js +123 -0
  573. package/dist/startupPromptBuffer.js.map +1 -0
  574. package/dist/state.d.ts +1245 -0
  575. package/dist/state.d.ts.map +1 -0
  576. package/dist/state.js +1830 -0
  577. package/dist/state.js.map +1 -0
  578. package/dist/threadContextPreamble.d.ts +89 -0
  579. package/dist/threadContextPreamble.d.ts.map +1 -0
  580. package/dist/threadContextPreamble.js +102 -0
  581. package/dist/threadContextPreamble.js.map +1 -0
  582. package/dist/threadRouting.d.ts +164 -0
  583. package/dist/threadRouting.d.ts.map +1 -0
  584. package/dist/threadRouting.js +182 -0
  585. package/dist/threadRouting.js.map +1 -0
  586. package/dist/types.d.ts +1015 -0
  587. package/dist/types.d.ts.map +1 -0
  588. package/dist/types.js +3 -0
  589. package/dist/types.js.map +1 -0
  590. package/dist/utils/abortableFifo.d.ts +10 -0
  591. package/dist/utils/abortableFifo.d.ts.map +1 -0
  592. package/dist/utils/abortableFifo.js +55 -0
  593. package/dist/utils/abortableFifo.js.map +1 -0
  594. package/dist/utils/adoptedToolList.d.ts +27 -0
  595. package/dist/utils/adoptedToolList.d.ts.map +1 -0
  596. package/dist/utils/adoptedToolList.js +22 -0
  597. package/dist/utils/adoptedToolList.js.map +1 -0
  598. package/dist/utils/agentEnvironment.d.ts +42 -0
  599. package/dist/utils/agentEnvironment.d.ts.map +1 -0
  600. package/dist/utils/agentEnvironment.js +122 -0
  601. package/dist/utils/agentEnvironment.js.map +1 -0
  602. package/dist/utils/ansiClean.d.ts +11 -0
  603. package/dist/utils/ansiClean.d.ts.map +1 -0
  604. package/dist/utils/ansiClean.js +139 -0
  605. package/dist/utils/ansiClean.js.map +1 -0
  606. package/dist/utils/autoContinueOnLimit.d.ts +49 -0
  607. package/dist/utils/autoContinueOnLimit.d.ts.map +1 -0
  608. package/dist/utils/autoContinueOnLimit.js +69 -0
  609. package/dist/utils/autoContinueOnLimit.js.map +1 -0
  610. package/dist/utils/canonicalPathContainment.d.ts +7 -0
  611. package/dist/utils/canonicalPathContainment.d.ts.map +1 -0
  612. package/dist/utils/canonicalPathContainment.js +48 -0
  613. package/dist/utils/canonicalPathContainment.js.map +1 -0
  614. package/dist/utils/claudeAuthLogin.d.ts +71 -0
  615. package/dist/utils/claudeAuthLogin.d.ts.map +1 -0
  616. package/dist/utils/claudeAuthLogin.js +93 -0
  617. package/dist/utils/claudeAuthLogin.js.map +1 -0
  618. package/dist/utils/claudeChunkClassifier.d.ts +97 -0
  619. package/dist/utils/claudeChunkClassifier.d.ts.map +1 -0
  620. package/dist/utils/claudeChunkClassifier.js +254 -0
  621. package/dist/utils/claudeChunkClassifier.js.map +1 -0
  622. package/dist/utils/claudeCodeVersion.d.ts +31 -0
  623. package/dist/utils/claudeCodeVersion.d.ts.map +1 -0
  624. package/dist/utils/claudeCodeVersion.js +62 -0
  625. package/dist/utils/claudeCodeVersion.js.map +1 -0
  626. package/dist/utils/claudeCompactHook.d.ts +64 -0
  627. package/dist/utils/claudeCompactHook.d.ts.map +1 -0
  628. package/dist/utils/claudeCompactHook.js +98 -0
  629. package/dist/utils/claudeCompactHook.js.map +1 -0
  630. package/dist/utils/claudeLivenessAction.d.ts +208 -0
  631. package/dist/utils/claudeLivenessAction.d.ts.map +1 -0
  632. package/dist/utils/claudeLivenessAction.js +135 -0
  633. package/dist/utils/claudeLivenessAction.js.map +1 -0
  634. package/dist/utils/claudeMcpHeal.d.ts +92 -0
  635. package/dist/utils/claudeMcpHeal.d.ts.map +1 -0
  636. package/dist/utils/claudeMcpHeal.js +91 -0
  637. package/dist/utils/claudeMcpHeal.js.map +1 -0
  638. package/dist/utils/claudeRelayRouting.d.ts +86 -0
  639. package/dist/utils/claudeRelayRouting.d.ts.map +1 -0
  640. package/dist/utils/claudeRelayRouting.js +159 -0
  641. package/dist/utils/claudeRelayRouting.js.map +1 -0
  642. package/dist/utils/claudeRuntimeInfo.d.ts +26 -0
  643. package/dist/utils/claudeRuntimeInfo.d.ts.map +1 -0
  644. package/dist/utils/claudeRuntimeInfo.js +151 -0
  645. package/dist/utils/claudeRuntimeInfo.js.map +1 -0
  646. package/dist/utils/claudeScrapeShapes.d.ts +256 -0
  647. package/dist/utils/claudeScrapeShapes.d.ts.map +1 -0
  648. package/dist/utils/claudeScrapeShapes.js +290 -0
  649. package/dist/utils/claudeScrapeShapes.js.map +1 -0
  650. package/dist/utils/claudeSessionTitle.d.ts +27 -0
  651. package/dist/utils/claudeSessionTitle.d.ts.map +1 -0
  652. package/dist/utils/claudeSessionTitle.js +90 -0
  653. package/dist/utils/claudeSessionTitle.js.map +1 -0
  654. package/dist/utils/claudeStreamJson.d.ts +202 -0
  655. package/dist/utils/claudeStreamJson.d.ts.map +1 -0
  656. package/dist/utils/claudeStreamJson.js +351 -0
  657. package/dist/utils/claudeStreamJson.js.map +1 -0
  658. package/dist/utils/claudeSubagentTail.d.ts +93 -0
  659. package/dist/utils/claudeSubagentTail.d.ts.map +1 -0
  660. package/dist/utils/claudeSubagentTail.js +136 -0
  661. package/dist/utils/claudeSubagentTail.js.map +1 -0
  662. package/dist/utils/clearThreadOutputQueues.d.ts +43 -0
  663. package/dist/utils/clearThreadOutputQueues.d.ts.map +1 -0
  664. package/dist/utils/clearThreadOutputQueues.js +39 -0
  665. package/dist/utils/clearThreadOutputQueues.js.map +1 -0
  666. package/dist/utils/compactCommandRoute.d.ts +45 -0
  667. package/dist/utils/compactCommandRoute.d.ts.map +1 -0
  668. package/dist/utils/compactCommandRoute.js +36 -0
  669. package/dist/utils/compactCommandRoute.js.map +1 -0
  670. package/dist/utils/compactOnIdle.d.ts +329 -0
  671. package/dist/utils/compactOnIdle.d.ts.map +1 -0
  672. package/dist/utils/compactOnIdle.js +379 -0
  673. package/dist/utils/compactOnIdle.js.map +1 -0
  674. package/dist/utils/consoleFileTap.d.ts +51 -0
  675. package/dist/utils/consoleFileTap.d.ts.map +1 -0
  676. package/dist/utils/consoleFileTap.js +86 -0
  677. package/dist/utils/consoleFileTap.js.map +1 -0
  678. package/dist/utils/displayVerbosity.d.ts +44 -0
  679. package/dist/utils/displayVerbosity.d.ts.map +1 -0
  680. package/dist/utils/displayVerbosity.js +75 -0
  681. package/dist/utils/displayVerbosity.js.map +1 -0
  682. package/dist/utils/download.d.ts +72 -0
  683. package/dist/utils/download.d.ts.map +1 -0
  684. package/dist/utils/download.js +216 -0
  685. package/dist/utils/download.js.map +1 -0
  686. package/dist/utils/draftFinalize.d.ts +110 -0
  687. package/dist/utils/draftFinalize.d.ts.map +1 -0
  688. package/dist/utils/draftFinalize.js +100 -0
  689. package/dist/utils/draftFinalize.js.map +1 -0
  690. package/dist/utils/draftId.d.ts +36 -0
  691. package/dist/utils/draftId.d.ts.map +1 -0
  692. package/dist/utils/draftId.js +46 -0
  693. package/dist/utils/draftId.js.map +1 -0
  694. package/dist/utils/draftPacer.d.ts +72 -0
  695. package/dist/utils/draftPacer.d.ts.map +1 -0
  696. package/dist/utils/draftPacer.js +53 -0
  697. package/dist/utils/draftPacer.js.map +1 -0
  698. package/dist/utils/effortStartupKeystroke.d.ts +20 -0
  699. package/dist/utils/effortStartupKeystroke.d.ts.map +1 -0
  700. package/dist/utils/effortStartupKeystroke.js +28 -0
  701. package/dist/utils/effortStartupKeystroke.js.map +1 -0
  702. package/dist/utils/ensureSessionPlan.d.ts +70 -0
  703. package/dist/utils/ensureSessionPlan.d.ts.map +1 -0
  704. package/dist/utils/ensureSessionPlan.js +54 -0
  705. package/dist/utils/ensureSessionPlan.js.map +1 -0
  706. package/dist/utils/fileSendPlan.d.ts +217 -0
  707. package/dist/utils/fileSendPlan.d.ts.map +1 -0
  708. package/dist/utils/fileSendPlan.js +291 -0
  709. package/dist/utils/fileSendPlan.js.map +1 -0
  710. package/dist/utils/fileSendService.d.ts +94 -0
  711. package/dist/utils/fileSendService.d.ts.map +1 -0
  712. package/dist/utils/fileSendService.js +387 -0
  713. package/dist/utils/fileSendService.js.map +1 -0
  714. package/dist/utils/groupFinalizePlan.d.ts +38 -0
  715. package/dist/utils/groupFinalizePlan.d.ts.map +1 -0
  716. package/dist/utils/groupFinalizePlan.js +35 -0
  717. package/dist/utils/groupFinalizePlan.js.map +1 -0
  718. package/dist/utils/identicalOutputGuard.d.ts +83 -0
  719. package/dist/utils/identicalOutputGuard.d.ts.map +1 -0
  720. package/dist/utils/identicalOutputGuard.js +99 -0
  721. package/dist/utils/identicalOutputGuard.js.map +1 -0
  722. package/dist/utils/isoTimestamp.d.ts +16 -0
  723. package/dist/utils/isoTimestamp.d.ts.map +1 -0
  724. package/dist/utils/isoTimestamp.js +34 -0
  725. package/dist/utils/isoTimestamp.js.map +1 -0
  726. package/dist/utils/jsonStreamBusyWatchdog.d.ts +130 -0
  727. package/dist/utils/jsonStreamBusyWatchdog.d.ts.map +1 -0
  728. package/dist/utils/jsonStreamBusyWatchdog.js +122 -0
  729. package/dist/utils/jsonStreamBusyWatchdog.js.map +1 -0
  730. package/dist/utils/jsonStreamHost.d.ts +227 -0
  731. package/dist/utils/jsonStreamHost.d.ts.map +1 -0
  732. package/dist/utils/jsonStreamHost.js +417 -0
  733. package/dist/utils/jsonStreamHost.js.map +1 -0
  734. package/dist/utils/keyedTransitionQueue.d.ts +18 -0
  735. package/dist/utils/keyedTransitionQueue.d.ts.map +1 -0
  736. package/dist/utils/keyedTransitionQueue.js +34 -0
  737. package/dist/utils/keyedTransitionQueue.js.map +1 -0
  738. package/dist/utils/limitEpisodeRecovery.d.ts +92 -0
  739. package/dist/utils/limitEpisodeRecovery.d.ts.map +1 -0
  740. package/dist/utils/limitEpisodeRecovery.js +133 -0
  741. package/dist/utils/limitEpisodeRecovery.js.map +1 -0
  742. package/dist/utils/limitHeldPromptQueue.d.ts +48 -0
  743. package/dist/utils/limitHeldPromptQueue.d.ts.map +1 -0
  744. package/dist/utils/limitHeldPromptQueue.js +59 -0
  745. package/dist/utils/limitHeldPromptQueue.js.map +1 -0
  746. package/dist/utils/limitHeldPrompts.d.ts +58 -0
  747. package/dist/utils/limitHeldPrompts.d.ts.map +1 -0
  748. package/dist/utils/limitHeldPrompts.js +65 -0
  749. package/dist/utils/limitHeldPrompts.js.map +1 -0
  750. package/dist/utils/linkPreviewSuppression.d.ts +18 -0
  751. package/dist/utils/linkPreviewSuppression.d.ts.map +1 -0
  752. package/dist/utils/linkPreviewSuppression.js +37 -0
  753. package/dist/utils/linkPreviewSuppression.js.map +1 -0
  754. package/dist/utils/localClock.d.ts +15 -0
  755. package/dist/utils/localClock.d.ts.map +1 -0
  756. package/dist/utils/localClock.js +29 -0
  757. package/dist/utils/localClock.js.map +1 -0
  758. package/dist/utils/markdownTableRender.d.ts +83 -0
  759. package/dist/utils/markdownTableRender.d.ts.map +1 -0
  760. package/dist/utils/markdownTableRender.js +298 -0
  761. package/dist/utils/markdownTableRender.js.map +1 -0
  762. package/dist/utils/mediaGroupCollector.d.ts +51 -0
  763. package/dist/utils/mediaGroupCollector.d.ts.map +1 -0
  764. package/dist/utils/mediaGroupCollector.js +90 -0
  765. package/dist/utils/mediaGroupCollector.js.map +1 -0
  766. package/dist/utils/messageSendService.d.ts +136 -0
  767. package/dist/utils/messageSendService.d.ts.map +1 -0
  768. package/dist/utils/messageSendService.js +165 -0
  769. package/dist/utils/messageSendService.js.map +1 -0
  770. package/dist/utils/minutesOverride.d.ts +7 -0
  771. package/dist/utils/minutesOverride.d.ts.map +1 -0
  772. package/dist/utils/minutesOverride.js +16 -0
  773. package/dist/utils/minutesOverride.js.map +1 -0
  774. package/dist/utils/modelPickerPlan.d.ts +119 -0
  775. package/dist/utils/modelPickerPlan.d.ts.map +1 -0
  776. package/dist/utils/modelPickerPlan.js +171 -0
  777. package/dist/utils/modelPickerPlan.js.map +1 -0
  778. package/dist/utils/modelSetReplyDecision.d.ts +67 -0
  779. package/dist/utils/modelSetReplyDecision.d.ts.map +1 -0
  780. package/dist/utils/modelSetReplyDecision.js +27 -0
  781. package/dist/utils/modelSetReplyDecision.js.map +1 -0
  782. package/dist/utils/openCodeAuthLogin.d.ts +181 -0
  783. package/dist/utils/openCodeAuthLogin.d.ts.map +1 -0
  784. package/dist/utils/openCodeAuthLogin.js +393 -0
  785. package/dist/utils/openCodeAuthLogin.js.map +1 -0
  786. package/dist/utils/openCodeCompactPlugin.d.ts +81 -0
  787. package/dist/utils/openCodeCompactPlugin.d.ts.map +1 -0
  788. package/dist/utils/openCodeCompactPlugin.js +146 -0
  789. package/dist/utils/openCodeCompactPlugin.js.map +1 -0
  790. package/dist/utils/openCodeTurnActivity.d.ts +67 -0
  791. package/dist/utils/openCodeTurnActivity.d.ts.map +1 -0
  792. package/dist/utils/openCodeTurnActivity.js +27 -0
  793. package/dist/utils/openCodeTurnActivity.js.map +1 -0
  794. package/dist/utils/outputDebounce.d.ts +24 -0
  795. package/dist/utils/outputDebounce.d.ts.map +1 -0
  796. package/dist/utils/outputDebounce.js +30 -0
  797. package/dist/utils/outputDebounce.js.map +1 -0
  798. package/dist/utils/outputFlushTiming.d.ts +54 -0
  799. package/dist/utils/outputFlushTiming.d.ts.map +1 -0
  800. package/dist/utils/outputFlushTiming.js +48 -0
  801. package/dist/utils/outputFlushTiming.js.map +1 -0
  802. package/dist/utils/paginateList.d.ts +25 -0
  803. package/dist/utils/paginateList.d.ts.map +1 -0
  804. package/dist/utils/paginateList.js +32 -0
  805. package/dist/utils/paginateList.js.map +1 -0
  806. package/dist/utils/paneDiff.d.ts +55 -0
  807. package/dist/utils/paneDiff.d.ts.map +1 -0
  808. package/dist/utils/paneDiff.js +88 -0
  809. package/dist/utils/paneDiff.js.map +1 -0
  810. package/dist/utils/paneResizeGuard.d.ts +69 -0
  811. package/dist/utils/paneResizeGuard.d.ts.map +1 -0
  812. package/dist/utils/paneResizeGuard.js +91 -0
  813. package/dist/utils/paneResizeGuard.js.map +1 -0
  814. package/dist/utils/persistAdapterSessionIds.d.ts +39 -0
  815. package/dist/utils/persistAdapterSessionIds.d.ts.map +1 -0
  816. package/dist/utils/persistAdapterSessionIds.js +28 -0
  817. package/dist/utils/persistAdapterSessionIds.js.map +1 -0
  818. package/dist/utils/pinnedBannerSkipDecision.d.ts +44 -0
  819. package/dist/utils/pinnedBannerSkipDecision.d.ts.map +1 -0
  820. package/dist/utils/pinnedBannerSkipDecision.js +20 -0
  821. package/dist/utils/pinnedBannerSkipDecision.js.map +1 -0
  822. package/dist/utils/pollBackoff.d.ts +45 -0
  823. package/dist/utils/pollBackoff.d.ts.map +1 -0
  824. package/dist/utils/pollBackoff.js +44 -0
  825. package/dist/utils/pollBackoff.js.map +1 -0
  826. package/dist/utils/promptDelivery.d.ts +46 -0
  827. package/dist/utils/promptDelivery.d.ts.map +1 -0
  828. package/dist/utils/promptDelivery.js +49 -0
  829. package/dist/utils/promptDelivery.js.map +1 -0
  830. package/dist/utils/providerDisconnectPlan.d.ts +82 -0
  831. package/dist/utils/providerDisconnectPlan.d.ts.map +1 -0
  832. package/dist/utils/providerDisconnectPlan.js +110 -0
  833. package/dist/utils/providerDisconnectPlan.js.map +1 -0
  834. package/dist/utils/rateLimitLog.d.ts +48 -0
  835. package/dist/utils/rateLimitLog.d.ts.map +1 -0
  836. package/dist/utils/rateLimitLog.js +43 -0
  837. package/dist/utils/rateLimitLog.js.map +1 -0
  838. package/dist/utils/recentRelayWindow.d.ts +165 -0
  839. package/dist/utils/recentRelayWindow.d.ts.map +1 -0
  840. package/dist/utils/recentRelayWindow.js +284 -0
  841. package/dist/utils/recentRelayWindow.js.map +1 -0
  842. package/dist/utils/recvPreviewRedaction.d.ts +23 -0
  843. package/dist/utils/recvPreviewRedaction.d.ts.map +1 -0
  844. package/dist/utils/recvPreviewRedaction.js +39 -0
  845. package/dist/utils/recvPreviewRedaction.js.map +1 -0
  846. package/dist/utils/reminderFlow.d.ts +148 -0
  847. package/dist/utils/reminderFlow.d.ts.map +1 -0
  848. package/dist/utils/reminderFlow.js +122 -0
  849. package/dist/utils/reminderFlow.js.map +1 -0
  850. package/dist/utils/reminderScheduleText.d.ts +87 -0
  851. package/dist/utils/reminderScheduleText.d.ts.map +1 -0
  852. package/dist/utils/reminderScheduleText.js +135 -0
  853. package/dist/utils/reminderScheduleText.js.map +1 -0
  854. package/dist/utils/reminderWizard.d.ts +710 -0
  855. package/dist/utils/reminderWizard.d.ts.map +1 -0
  856. package/dist/utils/reminderWizard.js +1164 -0
  857. package/dist/utils/reminderWizard.js.map +1 -0
  858. package/dist/utils/replyQuote.d.ts +111 -0
  859. package/dist/utils/replyQuote.d.ts.map +1 -0
  860. package/dist/utils/replyQuote.js +122 -0
  861. package/dist/utils/replyQuote.js.map +1 -0
  862. package/dist/utils/resolveBinary.d.ts +25 -0
  863. package/dist/utils/resolveBinary.d.ts.map +1 -0
  864. package/dist/utils/resolveBinary.js +99 -0
  865. package/dist/utils/resolveBinary.js.map +1 -0
  866. package/dist/utils/retryAfterHeader.d.ts +7 -0
  867. package/dist/utils/retryAfterHeader.d.ts.map +1 -0
  868. package/dist/utils/retryAfterHeader.js +17 -0
  869. package/dist/utils/retryAfterHeader.js.map +1 -0
  870. package/dist/utils/rotatingJsonlFile.d.ts +40 -0
  871. package/dist/utils/rotatingJsonlFile.d.ts.map +1 -0
  872. package/dist/utils/rotatingJsonlFile.js +106 -0
  873. package/dist/utils/rotatingJsonlFile.js.map +1 -0
  874. package/dist/utils/rotatingLogFile.d.ts +25 -0
  875. package/dist/utils/rotatingLogFile.d.ts.map +1 -0
  876. package/dist/utils/rotatingLogFile.js +74 -0
  877. package/dist/utils/rotatingLogFile.js.map +1 -0
  878. package/dist/utils/sendRateTracker.d.ts +59 -0
  879. package/dist/utils/sendRateTracker.d.ts.map +1 -0
  880. package/dist/utils/sendRateTracker.js +144 -0
  881. package/dist/utils/sendRateTracker.js.map +1 -0
  882. package/dist/utils/serialQueue.d.ts +5 -0
  883. package/dist/utils/serialQueue.d.ts.map +1 -0
  884. package/dist/utils/serialQueue.js +14 -0
  885. package/dist/utils/serialQueue.js.map +1 -0
  886. package/dist/utils/sseStreamLifecycle.d.ts +32 -0
  887. package/dist/utils/sseStreamLifecycle.d.ts.map +1 -0
  888. package/dist/utils/sseStreamLifecycle.js +41 -0
  889. package/dist/utils/sseStreamLifecycle.js.map +1 -0
  890. package/dist/utils/startupReadiness.d.ts +119 -0
  891. package/dist/utils/startupReadiness.d.ts.map +1 -0
  892. package/dist/utils/startupReadiness.js +148 -0
  893. package/dist/utils/startupReadiness.js.map +1 -0
  894. package/dist/utils/statusFlushDecision.d.ts +18 -0
  895. package/dist/utils/statusFlushDecision.d.ts.map +1 -0
  896. package/dist/utils/statusFlushDecision.js +53 -0
  897. package/dist/utils/statusFlushDecision.js.map +1 -0
  898. package/dist/utils/subagentRender.d.ts +52 -0
  899. package/dist/utils/subagentRender.d.ts.map +1 -0
  900. package/dist/utils/subagentRender.js +66 -0
  901. package/dist/utils/subagentRender.js.map +1 -0
  902. package/dist/utils/subagentStatusRender.d.ts +90 -0
  903. package/dist/utils/subagentStatusRender.d.ts.map +1 -0
  904. package/dist/utils/subagentStatusRender.js +124 -0
  905. package/dist/utils/subagentStatusRender.js.map +1 -0
  906. package/dist/utils/telegramError.d.ts +2 -0
  907. package/dist/utils/telegramError.d.ts.map +1 -0
  908. package/dist/utils/telegramError.js +16 -0
  909. package/dist/utils/telegramError.js.map +1 -0
  910. package/dist/utils/terminalEmitPlan.d.ts +74 -0
  911. package/dist/utils/terminalEmitPlan.d.ts.map +1 -0
  912. package/dist/utils/terminalEmitPlan.js +86 -0
  913. package/dist/utils/terminalEmitPlan.js.map +1 -0
  914. package/dist/utils/thinkingRender.d.ts +74 -0
  915. package/dist/utils/thinkingRender.d.ts.map +1 -0
  916. package/dist/utils/thinkingRender.js +85 -0
  917. package/dist/utils/thinkingRender.js.map +1 -0
  918. package/dist/utils/threadStatusReport.d.ts +55 -0
  919. package/dist/utils/threadStatusReport.d.ts.map +1 -0
  920. package/dist/utils/threadStatusReport.js +65 -0
  921. package/dist/utils/threadStatusReport.js.map +1 -0
  922. package/dist/utils/threadToggle.d.ts +29 -0
  923. package/dist/utils/threadToggle.d.ts.map +1 -0
  924. package/dist/utils/threadToggle.js +39 -0
  925. package/dist/utils/threadToggle.js.map +1 -0
  926. package/dist/utils/timezone.d.ts +125 -0
  927. package/dist/utils/timezone.d.ts.map +1 -0
  928. package/dist/utils/timezone.js +278 -0
  929. package/dist/utils/timezone.js.map +1 -0
  930. package/dist/utils/tmuxExec.d.ts +61 -0
  931. package/dist/utils/tmuxExec.d.ts.map +1 -0
  932. package/dist/utils/tmuxExec.js +109 -0
  933. package/dist/utils/tmuxExec.js.map +1 -0
  934. package/dist/utils/tmuxSessionName.d.ts +34 -0
  935. package/dist/utils/tmuxSessionName.d.ts.map +1 -0
  936. package/dist/utils/tmuxSessionName.js +51 -0
  937. package/dist/utils/tmuxSessionName.js.map +1 -0
  938. package/dist/utils/toolResultRender.d.ts +61 -0
  939. package/dist/utils/toolResultRender.d.ts.map +1 -0
  940. package/dist/utils/toolResultRender.js +62 -0
  941. package/dist/utils/toolResultRender.js.map +1 -0
  942. package/dist/utils/topicRequest.d.ts +61 -0
  943. package/dist/utils/topicRequest.d.ts.map +1 -0
  944. package/dist/utils/topicRequest.js +68 -0
  945. package/dist/utils/topicRequest.js.map +1 -0
  946. package/dist/utils/topicView.d.ts +55 -0
  947. package/dist/utils/topicView.d.ts.map +1 -0
  948. package/dist/utils/topicView.js +56 -0
  949. package/dist/utils/topicView.js.map +1 -0
  950. package/dist/utils/transcribeAudio.d.ts +89 -0
  951. package/dist/utils/transcribeAudio.d.ts.map +1 -0
  952. package/dist/utils/transcribeAudio.js +249 -0
  953. package/dist/utils/transcribeAudio.js.map +1 -0
  954. package/dist/utils/transientFrames.d.ts +52 -0
  955. package/dist/utils/transientFrames.d.ts.map +1 -0
  956. package/dist/utils/transientFrames.js +41 -0
  957. package/dist/utils/transientFrames.js.map +1 -0
  958. package/dist/utils/typingActive.d.ts +35 -0
  959. package/dist/utils/typingActive.d.ts.map +1 -0
  960. package/dist/utils/typingActive.js +22 -0
  961. package/dist/utils/typingActive.js.map +1 -0
  962. package/dist/utils/typingLoopBackstop.d.ts +64 -0
  963. package/dist/utils/typingLoopBackstop.d.ts.map +1 -0
  964. package/dist/utils/typingLoopBackstop.js +68 -0
  965. package/dist/utils/typingLoopBackstop.js.map +1 -0
  966. package/dist/utils/verbosityRender.d.ts +18 -0
  967. package/dist/utils/verbosityRender.d.ts.map +1 -0
  968. package/dist/utils/verbosityRender.js +17 -0
  969. package/dist/utils/verbosityRender.js.map +1 -0
  970. package/dist/utils/wedgeRecovery.d.ts +57 -0
  971. package/dist/utils/wedgeRecovery.d.ts.map +1 -0
  972. package/dist/utils/wedgeRecovery.js +24 -0
  973. package/dist/utils/wedgeRecovery.js.map +1 -0
  974. package/dist/utils.d.ts +30 -0
  975. package/dist/utils.d.ts.map +1 -0
  976. package/dist/utils.js +61 -0
  977. package/dist/utils.js.map +1 -0
  978. package/dist/validation.d.ts +113 -0
  979. package/dist/validation.d.ts.map +1 -0
  980. package/dist/validation.js +226 -0
  981. package/dist/validation.js.map +1 -0
  982. package/dist/voiceQueue.d.ts +7 -0
  983. package/dist/voiceQueue.d.ts.map +1 -0
  984. package/dist/voiceQueue.js +33 -0
  985. package/dist/voiceQueue.js.map +1 -0
  986. package/examples/.env.example +17 -0
  987. package/examples/docker-compose.yml +36 -0
  988. package/package.json +83 -4
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.answerBodyMaxLength = void 0;
4
+ exports.answerRequest = answerRequest;
5
+ const sessionKey_1 = require("../sessionKey");
6
+ const answerSink_1 = require("../platform/answerSink");
7
+ /**
8
+ * @description The `answer_request` contract (request/answer core S3), kept out
9
+ * of the MCP surface so the rules are testable without HTTP:
10
+ *
11
+ * unknown id, or an id outside the caller's scope → refused, nothing sent
12
+ * (the two read the same, so a session cannot probe other topics' ids)
13
+ * delivery through the request platform's answer sink fails → refused, the
14
+ * request is unchanged and the agent may retry
15
+ * delivered, request open: progress → counted, stays open
16
+ * question / final → closes the request
17
+ * delivered, request closed: nothing changes (a late answer from a turn that
18
+ * outlived its request is still delivered — content is never dropped); a
19
+ * superseded request's result names the request that replaced it and says
20
+ * its prompt follows — the agent answers only what that one adds, never the
21
+ * same work twice (Claude Code delivers a message written mid-turn only
22
+ * after the turn ends, so this is the normal order there)
23
+ */
24
+ /** The longest answer body accepted; the sinks split it to their surface's limits. */
25
+ exports.answerBodyMaxLength = 100_000;
26
+ /** The answer kinds that close an open request, and the close reason each records. */
27
+ const closingAnswerReasons = {
28
+ progress: null,
29
+ question: 'question',
30
+ final: 'final',
31
+ };
32
+ function buildUnknownRequestError(requestId) {
33
+ return `Unknown request id "${requestId}". Answer only the request ids given to you in this conversation; nothing was sent.`;
34
+ }
35
+ /** The agent-facing line for an answer to a request that was open when it was delivered. */
36
+ function buildOpenAnswerMessage(requestId, kind, wasClosedMeanwhile) {
37
+ if (wasClosedMeanwhile) {
38
+ return `Delivered. Request ${requestId} had just been closed (by a newer request or another answer), so nothing about it changed.`;
39
+ }
40
+ if (kind === 'progress') {
41
+ return `Delivered. Request ${requestId} stays open — send the full result with kind "final" (or "question" if you need the requester) at the end of your turn.`;
42
+ }
43
+ return `Delivered. Request ${requestId} is now closed (${kind}).`;
44
+ }
45
+ /** The agent-facing line for an answer delivered to a request that was already closed. */
46
+ function buildClosedAnswerMessage(requestId, closed) {
47
+ const replacedBy = closed.closeReason === 'superseded' && closed.supersededBy !== undefined
48
+ ? ` by request ${closed.supersededBy} from the same requester; its prompt follows — reply only to what it adds, or say briefly that the answer is above`
49
+ : '';
50
+ return `Delivered. Request ${requestId} was already closed (${closed.closeReason}${replacedBy}), so nothing about it changed.`;
51
+ }
52
+ /** @description Deliver one answer and apply the close rules. */
53
+ async function answerRequest(deps, args) {
54
+ await deps.ledger.whenLoaded();
55
+ const lookup = deps.ledger.getRequest(args.requestId);
56
+ if (!lookup || !args.checkIsConversationInScope(lookup.conversationKey)) {
57
+ return { ok: false, error: buildUnknownRequestError(args.requestId) };
58
+ }
59
+ const key = (0, sessionKey_1.tryKeyFromString)(lookup.conversationKey);
60
+ if (!key) {
61
+ return { ok: false, error: `Request ${args.requestId} belongs to a conversation this bot cannot address; nothing was sent.` };
62
+ }
63
+ const sinkLookup = (0, answerSink_1.getAnswerSink)(deps.answerSinks, key);
64
+ if (!sinkLookup.ok) {
65
+ return { ok: false, error: `Answers cannot be delivered to platform "${key.platform}" by this bot; nothing was sent.` };
66
+ }
67
+ const delivery = await sinkLookup.sink.deliverAnswer(key, {
68
+ requestId: args.requestId,
69
+ kind: args.kind,
70
+ body: args.body,
71
+ origin: lookup.request.origin,
72
+ isRequestOpen: lookup.isOpen,
73
+ });
74
+ if (!delivery.ok) {
75
+ return { ok: false, error: `The answer was NOT delivered: ${delivery.error}. Request ${args.requestId} is unchanged; you may retry.` };
76
+ }
77
+ const warning = delivery.warning ? ` Note: ${delivery.warning}` : '';
78
+ if (!lookup.isOpen) {
79
+ deps.onAnswerDelivered?.(key, args.requestId, args.kind);
80
+ return { ok: true, message: `${buildClosedAnswerMessage(args.requestId, lookup.request)}${warning}` };
81
+ }
82
+ const closeReason = closingAnswerReasons[args.kind];
83
+ const changed = closeReason
84
+ ? await deps.ledger.closeRequest(args.requestId, closeReason)
85
+ : await deps.ledger.updateOpenRequest(args.requestId, (current) => ({
86
+ progressAnswerCount: current.progressAnswerCount + 1,
87
+ // An answer proves the agent read the request: a later wake-up reminds, never re-posts it (R21),
88
+ // and a post retry still pending is moot (R28).
89
+ ...(current.prompt !== undefined && current.isPromptTakenIn !== true ? { isPromptTakenIn: true } : {}),
90
+ ...(current.nextPostRetryAt !== undefined ? { nextPostRetryAt: undefined } : {}),
91
+ }));
92
+ // After the close: whoever hears it sees the request as it now stands.
93
+ deps.onAnswerDelivered?.(key, args.requestId, args.kind);
94
+ return { ok: true, message: `${buildOpenAnswerMessage(args.requestId, args.kind, changed === null)}${warning}` };
95
+ }
96
+ //# sourceMappingURL=answerRequest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"answerRequest.js","sourceRoot":"","sources":["../../src/requests/answerRequest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ import type { OutboundHints } from '../platform/outbound';
2
+ import type { SessionTurnProbe } from './wakeUpRules';
3
+ /**
4
+ * @description The answer tail: what the agent writes into its own stream AFTER
5
+ * its final answer, as pure decisions (the wake-up engine holds the state and
6
+ * acts). In a view that hides the stream the requester sees only the answers, so
7
+ * work the agent goes on with after its final answer never reaches them, and the
8
+ * request is closed: nothing else would ever remind the agent.
9
+ *
10
+ * final answer → a fresh tail (any answer_request call ends the previous one)
11
+ * its own text after it → counted in messages (a pause starts a new one)
12
+ * a message later than 30 s after it,
13
+ * or 2 messages in all → the tail is worth a reminder
14
+ * that, and the turn ended → remind the agent once, in the same session
15
+ * that, and 30 min with no new text → remind it even if the turn still looks busy
16
+ *
17
+ * A short closing line right after the answer is no tail. The agent's reply to a
18
+ * reminder is a final answer again, so its own tail is followed too (a result a
19
+ * background job brings later still reaches the requester), up to
20
+ * {@link answerTailMaxReminders} reminders per answered request: never a loop.
21
+ */
22
+ /** After the answer, text later than this means the agent went on working. */
23
+ export declare const answerTailGraceMs = 30000;
24
+ /** Messages after the answer that make a tail worth a reminder, however soon they came. */
25
+ export declare const answerTailMessageCount = 2;
26
+ /**
27
+ * A pause in the agent's text longer than this starts a new message. The
28
+ * adapters emit a message in chunks a fraction of a second apart (stream
29
+ * batches, scrape polls), so one message never spans such a pause.
30
+ */
31
+ export declare const answerTailMessageGapMs = 5000;
32
+ /** With no new text for this long, a tail is reminded even if the session still reports a turn. */
33
+ export declare const answerTailSilenceMs: number;
34
+ /** Reminders one answered request may get; its later final answers start no tail. */
35
+ export declare const answerTailMaxReminders = 3;
36
+ /**
37
+ * @name AnswerTail
38
+ * @description The agent's own text after a final answer to `requestId`.
39
+ * `lastOutputAt` is undefined until it writes anything.
40
+ */
41
+ export interface AnswerTail {
42
+ requestId: string;
43
+ answeredAt: number;
44
+ messageCount: number;
45
+ lastOutputAt?: number;
46
+ /** Some text came later than {@link answerTailGraceMs} after the answer. */
47
+ hasLateOutput: boolean;
48
+ }
49
+ /**
50
+ * @description Whether an `output` event is the agent's own text, the kind a
51
+ * tail counts: not a sub-agent's chunk, a compaction summary, a native question
52
+ * (shown in every view) or a whole block the bot made (the resume context, a
53
+ * retry notice). The bot also leaves out spinner bursts and API-error lines.
54
+ */
55
+ export declare function checkIsAgentProseOutput(output: string, hints: OutboundHints | undefined): boolean;
56
+ /** @description The tail of a final answer just delivered. */
57
+ export declare function createAnswerTail(requestId: string, nowMs: number): AnswerTail;
58
+ /** @description The tail after one more chunk of the agent's text. */
59
+ export declare function addAnswerTailOutput(tail: AnswerTail, nowMs: number): AnswerTail;
60
+ /** @description Whether the agent wrote enough after its answer to be reminded of it. */
61
+ export declare function checkIsAnswerTailWorthReminder(tail: AnswerTail): boolean;
62
+ /**
63
+ * @name AnswerTailDecision
64
+ * @description `wait` — keep watching; `drop` — nothing can come of this tail
65
+ * any more; `remind` — tell the agent now.
66
+ */
67
+ export type AnswerTailDecision = 'wait' | 'drop' | 'remind';
68
+ /**
69
+ * @description What to do with a tail, given the session now. Nothing while a
70
+ * question, compaction, limit wait or session start holds the turn. A tail not
71
+ * worth a reminder is dropped once the session stopped: no more text can come
72
+ * without a new message, and a new message is a new request. One worth it is
73
+ * reminded once the turn ended (an idle session, or one that stopped), or after
74
+ * {@link answerTailSilenceMs} of quiet even if the session still reports a turn.
75
+ */
76
+ export declare function decideAnswerTail(tail: AnswerTail, probe: SessionTurnProbe, nowMs: number): AnswerTailDecision;
77
+ /**
78
+ * @description The reminder forwarded into the agent's session. Agent-facing,
79
+ * English on every surface. It names the answered request: `answer_request`
80
+ * still delivers an answer to a closed request.
81
+ */
82
+ export declare function buildAnswerTailReminder(requestId: string): string;
83
+ //# sourceMappingURL=answerTail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"answerTail.d.ts","sourceRoot":"","sources":["../../src/requests/answerTail.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD;;;;;;;;;;;;;;;;;;GAkBG;AAEH,8EAA8E;AAC9E,eAAO,MAAM,iBAAiB,QAAS,CAAC;AACxC,2FAA2F;AAC3F,eAAO,MAAM,sBAAsB,IAAI,CAAC;AACxC;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,OAAQ,CAAC;AAC5C,mGAAmG;AACnG,eAAO,MAAM,mBAAmB,QAAiB,CAAC;AAClD,qFAAqF;AACrF,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,SAAS,GAAG,OAAO,CAGjG;AAED,8DAA8D;AAC9D,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,CAE7E;AAED,sEAAsE;AACtE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,CAQ/E;AAED,yFAAyF;AACzF,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAExE;AAED;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE5D;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,GAAG,kBAAkB,CAK7G;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAOjE"}
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.answerTailMaxReminders = exports.answerTailSilenceMs = exports.answerTailMessageGapMs = exports.answerTailMessageCount = exports.answerTailGraceMs = void 0;
4
+ exports.checkIsAgentProseOutput = checkIsAgentProseOutput;
5
+ exports.createAnswerTail = createAnswerTail;
6
+ exports.addAnswerTailOutput = addAnswerTailOutput;
7
+ exports.checkIsAnswerTailWorthReminder = checkIsAnswerTailWorthReminder;
8
+ exports.decideAnswerTail = decideAnswerTail;
9
+ exports.buildAnswerTailReminder = buildAnswerTailReminder;
10
+ /**
11
+ * @description The answer tail: what the agent writes into its own stream AFTER
12
+ * its final answer, as pure decisions (the wake-up engine holds the state and
13
+ * acts). In a view that hides the stream the requester sees only the answers, so
14
+ * work the agent goes on with after its final answer never reaches them, and the
15
+ * request is closed: nothing else would ever remind the agent.
16
+ *
17
+ * final answer → a fresh tail (any answer_request call ends the previous one)
18
+ * its own text after it → counted in messages (a pause starts a new one)
19
+ * a message later than 30 s after it,
20
+ * or 2 messages in all → the tail is worth a reminder
21
+ * that, and the turn ended → remind the agent once, in the same session
22
+ * that, and 30 min with no new text → remind it even if the turn still looks busy
23
+ *
24
+ * A short closing line right after the answer is no tail. The agent's reply to a
25
+ * reminder is a final answer again, so its own tail is followed too (a result a
26
+ * background job brings later still reaches the requester), up to
27
+ * {@link answerTailMaxReminders} reminders per answered request: never a loop.
28
+ */
29
+ /** After the answer, text later than this means the agent went on working. */
30
+ exports.answerTailGraceMs = 30_000;
31
+ /** Messages after the answer that make a tail worth a reminder, however soon they came. */
32
+ exports.answerTailMessageCount = 2;
33
+ /**
34
+ * A pause in the agent's text longer than this starts a new message. The
35
+ * adapters emit a message in chunks a fraction of a second apart (stream
36
+ * batches, scrape polls), so one message never spans such a pause.
37
+ */
38
+ exports.answerTailMessageGapMs = 5_000;
39
+ /** With no new text for this long, a tail is reminded even if the session still reports a turn. */
40
+ exports.answerTailSilenceMs = 30 * 60 * 1000;
41
+ /** Reminders one answered request may get; its later final answers start no tail. */
42
+ exports.answerTailMaxReminders = 3;
43
+ /**
44
+ * @description Whether an `output` event is the agent's own text, the kind a
45
+ * tail counts: not a sub-agent's chunk, a compaction summary, a native question
46
+ * (shown in every view) or a whole block the bot made (the resume context, a
47
+ * retry notice). The bot also leaves out spinner bursts and API-error lines.
48
+ */
49
+ function checkIsAgentProseOutput(output, hints) {
50
+ if (!output.trim())
51
+ return false;
52
+ return !hints?.isSubagent && !hints?.isCompactionSummary && !hints?.isQuestion && !hints?.isComplete;
53
+ }
54
+ /** @description The tail of a final answer just delivered. */
55
+ function createAnswerTail(requestId, nowMs) {
56
+ return { requestId, answeredAt: nowMs, messageCount: 0, hasLateOutput: false };
57
+ }
58
+ /** @description The tail after one more chunk of the agent's text. */
59
+ function addAnswerTailOutput(tail, nowMs) {
60
+ const isNewMessage = tail.lastOutputAt === undefined || nowMs - tail.lastOutputAt > exports.answerTailMessageGapMs;
61
+ return {
62
+ ...tail,
63
+ messageCount: tail.messageCount + (isNewMessage ? 1 : 0),
64
+ lastOutputAt: nowMs,
65
+ hasLateOutput: tail.hasLateOutput || nowMs - tail.answeredAt > exports.answerTailGraceMs,
66
+ };
67
+ }
68
+ /** @description Whether the agent wrote enough after its answer to be reminded of it. */
69
+ function checkIsAnswerTailWorthReminder(tail) {
70
+ return tail.hasLateOutput || tail.messageCount >= exports.answerTailMessageCount;
71
+ }
72
+ /**
73
+ * @description What to do with a tail, given the session now. Nothing while a
74
+ * question, compaction, limit wait or session start holds the turn. A tail not
75
+ * worth a reminder is dropped once the session stopped: no more text can come
76
+ * without a new message, and a new message is a new request. One worth it is
77
+ * reminded once the turn ended (an idle session, or one that stopped), or after
78
+ * {@link answerTailSilenceMs} of quiet even if the session still reports a turn.
79
+ */
80
+ function decideAnswerTail(tail, probe, nowMs) {
81
+ if (probe.isTurnEndBlocked)
82
+ return 'wait';
83
+ if (!checkIsAnswerTailWorthReminder(tail))
84
+ return probe.isActive ? 'wait' : 'drop';
85
+ if (!probe.isBusy)
86
+ return 'remind';
87
+ return tail.lastOutputAt !== undefined && nowMs - tail.lastOutputAt >= exports.answerTailSilenceMs ? 'remind' : 'wait';
88
+ }
89
+ /**
90
+ * @description The reminder forwarded into the agent's session. Agent-facing,
91
+ * English on every surface. It names the answered request: `answer_request`
92
+ * still delivers an answer to a closed request.
93
+ */
94
+ function buildAnswerTailReminder(requestId) {
95
+ return [
96
+ `[Reminder · after your final answer to request ${requestId}]`,
97
+ 'You kept working after that answer and wrote more in your own output. The requester does not see it: only answer_request reaches them.',
98
+ `If any of it matters to them (a result, a change, a problem), send it with answer_request (requestId "${requestId}", kind "final"). ` +
99
+ 'If nothing new came of it, send nothing.',
100
+ ].join('\n');
101
+ }
102
+ //# sourceMappingURL=answerTail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"answerTail.js","sourceRoot":"","sources":["../../src/requests/answerTail.ts"],"names":[],"mappings":";;;AA0DA,0DAGC;AAGD,4CAEC;AAGD,kDAQC;AAGD,wEAEC;AAiBD,4CAKC;AAOD,0DAOC;AAnHD;;;;;;;;;;;;;;;;;;GAkBG;AAEH,8EAA8E;AACjE,QAAA,iBAAiB,GAAG,MAAM,CAAC;AACxC,2FAA2F;AAC9E,QAAA,sBAAsB,GAAG,CAAC,CAAC;AACxC;;;;GAIG;AACU,QAAA,sBAAsB,GAAG,KAAK,CAAC;AAC5C,mGAAmG;AACtF,QAAA,mBAAmB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAClD,qFAAqF;AACxE,QAAA,sBAAsB,GAAG,CAAC,CAAC;AAgBxC;;;;;GAKG;AACH,SAAgB,uBAAuB,CAAC,MAAc,EAAE,KAAgC;IACtF,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;QAAE,OAAO,KAAK,CAAC;IACjC,OAAO,CAAC,KAAK,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE,mBAAmB,IAAI,CAAC,KAAK,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC;AACvG,CAAC;AAED,8DAA8D;AAC9D,SAAgB,gBAAgB,CAAC,SAAiB,EAAE,KAAa;IAC/D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AACjF,CAAC;AAED,sEAAsE;AACtE,SAAgB,mBAAmB,CAAC,IAAgB,EAAE,KAAa;IACjE,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,KAAK,SAAS,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,GAAG,8BAAsB,CAAC;IAC3G,OAAO;QACL,GAAG,IAAI;QACP,YAAY,EAAE,IAAI,CAAC,YAAY,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,YAAY,EAAE,KAAK;QACnB,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,GAAG,yBAAiB;KACjF,CAAC;AACJ,CAAC;AAED,yFAAyF;AACzF,SAAgB,8BAA8B,CAAC,IAAgB;IAC7D,OAAO,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,YAAY,IAAI,8BAAsB,CAAC;AAC3E,CAAC;AASD;;;;;;;GAOG;AACH,SAAgB,gBAAgB,CAAC,IAAgB,EAAE,KAAuB,EAAE,KAAa;IACvF,IAAI,KAAK,CAAC,gBAAgB;QAAE,OAAO,MAAM,CAAC;IAC1C,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IACnF,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,QAAQ,CAAC;IACnC,OAAO,IAAI,CAAC,YAAY,KAAK,SAAS,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,IAAI,2BAAmB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;AACjH,CAAC;AAED;;;;GAIG;AACH,SAAgB,uBAAuB,CAAC,SAAiB;IACvD,OAAO;QACL,kDAAkD,SAAS,GAAG;QAC9D,wIAAwI;QACxI,yGAAyG,SAAS,oBAAoB;YACpI,0CAA0C;KAC7C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
@@ -0,0 +1,87 @@
1
+ import type { SessionKey } from '../sessionKey';
2
+ import { type AnswerSinks } from '../platform/answerSink';
3
+ import type { RequestLedger } from './requestLedger';
4
+ import type { RequestWakeUpEngine } from './wakeUpEngine';
5
+ /**
6
+ * @description The bot's own answer to an open request when a usage/session
7
+ * limit stops the agent (request/answer core S5): the requester learns the
8
+ * answer is delayed and until when, instead of hearing nothing for hours.
9
+ *
10
+ * It is a `progress` answer delivered straight through the platform's sink —
11
+ * deliberately NOT through `answer_request`: the agent did not send it, so it
12
+ * does not count as the agent's progress note and starts no 15-minute follow-up.
13
+ *
14
+ * Deduplicated per REQUEST and per wait: every request open during a limit wait
15
+ * hears about it once — the one open when the limit hit, and one opened later in
16
+ * the same wait (a scheduled run, a tracker event: they do not cancel the wait).
17
+ */
18
+ /**
19
+ * @name UsageLimitWait
20
+ * @description How the limit wait ends: after the provider's reset time, at the
21
+ * bot's next attempt (the reset time is unknown), or not by itself at all
22
+ * (`/auto_continue_limits` is off). `fireAt` is when the bot resumes.
23
+ */
24
+ export type UsageLimitWait = {
25
+ kind: 'afterReset';
26
+ resetAt: number;
27
+ fireAt: number;
28
+ } | {
29
+ kind: 'nextAttempt';
30
+ fireAt: number;
31
+ } | {
32
+ kind: 'autoResumeOff';
33
+ };
34
+ /**
35
+ * @description Identifies one limit wait across its repeated errors: an armed
36
+ * wait by its resume instant (every arming gets a new one), the auto-resume-off
37
+ * wait by its kind (it has no instant, and it ends only with the request).
38
+ */
39
+ export declare function getUsageLimitWaitIdentity(wait: UsageLimitWait): string;
40
+ /**
41
+ * @name ArmedLimitWait
42
+ * @description The topic's armed usage-limit resume, as the bot's retry manager
43
+ * holds it. `wait` is absent for a resume re-armed from `state.json` at boot
44
+ * (which keeps only the instant).
45
+ */
46
+ export interface ArmedLimitWait {
47
+ fireAt: number;
48
+ wait?: UsageLimitWait;
49
+ }
50
+ /**
51
+ * @name LimitEpisodeState
52
+ * @description The topic's usage-limit situation when a request is opened.
53
+ */
54
+ export interface LimitEpisodeState {
55
+ armedLimitWait: ArmedLimitWait | null;
56
+ /** A limit hit with auto-resume off, and the operator has not written since. */
57
+ isAutoResumeOffNoticed: boolean;
58
+ isAutoResumeOn: boolean;
59
+ }
60
+ /**
61
+ * @description The limit wait a request opened right now falls into, or `null`
62
+ * when the topic is not waiting out a limit. An operator message cancels the
63
+ * wait BEFORE its request is opened, so only a request that does not cancel it
64
+ * (a scheduled run, a tracker event) ever lands here.
65
+ */
66
+ export declare function getLimitWaitForNewRequest(episode: LimitEpisodeState): UsageLimitWait | null;
67
+ export interface LimitWaitAnswerDeps {
68
+ ledger: Pick<RequestLedger, 'listOpenRequestsOf' | 'updateOpenRequest'>;
69
+ engine: Pick<RequestWakeUpEngine, 'stopWakingForLimitWait'>;
70
+ answerSinks: AnswerSinks;
71
+ }
72
+ /**
73
+ * @name LimitWaitAnswerOutcome
74
+ * @description `notAnswered` (no open request, or the delivery failed) leaves the
75
+ * caller's plain limit notice to say it; after `answered` or `alreadyAnswered`
76
+ * the notice would say the same thing twice.
77
+ */
78
+ export type LimitWaitAnswerOutcome = 'answered' | 'alreadyAnswered' | 'notAnswered';
79
+ /**
80
+ * @description Tell every open request of the conversation (one per requester at
81
+ * most) about a limit wait, once per request and wait. With auto-resume off
82
+ * nothing will continue the work, so the requests also stop being woken
83
+ * (liftable: a later wait that ends with a resume lifts it). `answered` when at
84
+ * least one request was answered now; `alreadyAnswered` when every one had been.
85
+ */
86
+ export declare function answerOpenRequestForLimitWait(deps: LimitWaitAnswerDeps, key: SessionKey, wait: UsageLimitWait, body: string): Promise<LimitWaitAnswerOutcome>;
87
+ //# sourceMappingURL=limitWaitAnswer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limitWaitAnswer.d.ts","sourceRoot":"","sources":["../../src/requests/limitWaitAnswer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE1D;;;;;;;;;;;;GAYG;AAEH;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACvD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,CAAC;AAE9B;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAEtE;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,cAAc,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,gFAAgF;IAChF,sBAAsB,EAAE,OAAO,CAAC;IAChC,cAAc,EAAE,OAAO,CAAC;CACzB;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,iBAAiB,GAAG,cAAc,GAAG,IAAI,CAO3F;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,oBAAoB,GAAG,mBAAmB,CAAC,CAAC;IACxE,MAAM,EAAE,IAAI,CAAC,mBAAmB,EAAE,wBAAwB,CAAC,CAAC;IAC5D,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED;;;;;GAKG;AACH,MAAM,MAAM,sBAAsB,GAAG,UAAU,GAAG,iBAAiB,GAAG,aAAa,CAAC;AAEpF;;;;;;GAMG;AACH,wBAAsB,6BAA6B,CACjD,IAAI,EAAE,mBAAmB,EACzB,GAAG,EAAE,UAAU,EACf,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,sBAAsB,CAAC,CAOjC"}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getUsageLimitWaitIdentity = getUsageLimitWaitIdentity;
4
+ exports.getLimitWaitForNewRequest = getLimitWaitForNewRequest;
5
+ exports.answerOpenRequestForLimitWait = answerOpenRequestForLimitWait;
6
+ const answerSink_1 = require("../platform/answerSink");
7
+ /**
8
+ * @description Identifies one limit wait across its repeated errors: an armed
9
+ * wait by its resume instant (every arming gets a new one), the auto-resume-off
10
+ * wait by its kind (it has no instant, and it ends only with the request).
11
+ */
12
+ function getUsageLimitWaitIdentity(wait) {
13
+ return wait.kind === 'autoResumeOff' ? wait.kind : `resumeAt:${wait.fireAt}`;
14
+ }
15
+ /**
16
+ * @description The limit wait a request opened right now falls into, or `null`
17
+ * when the topic is not waiting out a limit. An operator message cancels the
18
+ * wait BEFORE its request is opened, so only a request that does not cancel it
19
+ * (a scheduled run, a tracker event) ever lands here.
20
+ */
21
+ function getLimitWaitForNewRequest(episode) {
22
+ if (episode.armedLimitWait) {
23
+ return episode.armedLimitWait.wait ?? { kind: 'nextAttempt', fireAt: episode.armedLimitWait.fireAt };
24
+ }
25
+ // Turning auto-resume back on ends the "I continue when you write" promise.
26
+ if (episode.isAutoResumeOffNoticed && !episode.isAutoResumeOn)
27
+ return { kind: 'autoResumeOff' };
28
+ return null;
29
+ }
30
+ /**
31
+ * @description Tell every open request of the conversation (one per requester at
32
+ * most) about a limit wait, once per request and wait. With auto-resume off
33
+ * nothing will continue the work, so the requests also stop being woken
34
+ * (liftable: a later wait that ends with a resume lifts it). `answered` when at
35
+ * least one request was answered now; `alreadyAnswered` when every one had been.
36
+ */
37
+ async function answerOpenRequestForLimitWait(deps, key, wait, body) {
38
+ const outcomes = [];
39
+ for (const request of deps.ledger.listOpenRequestsOf(key)) {
40
+ outcomes.push(await answerOneRequestForLimitWait(deps, key, request, wait, body));
41
+ }
42
+ if (outcomes.includes('answered'))
43
+ return 'answered';
44
+ return outcomes.includes('alreadyAnswered') ? 'alreadyAnswered' : 'notAnswered';
45
+ }
46
+ async function answerOneRequestForLimitWait(deps, key, request, wait, body) {
47
+ const identity = getUsageLimitWaitIdentity(wait);
48
+ // The common repeat (another frame of the same error) costs no state write.
49
+ if (request.limitWaitAnsweredFor === identity)
50
+ return 'alreadyAnswered';
51
+ // Claimed under the ledger lock: a repeated error and a request opened at the same moment must not answer twice.
52
+ let isClaimed = false;
53
+ const claimed = await deps.ledger.updateOpenRequest(request.id, (current) => {
54
+ isClaimed = current.limitWaitAnsweredFor !== identity;
55
+ return isClaimed ? { limitWaitAnsweredFor: identity } : {};
56
+ });
57
+ if (!claimed)
58
+ return 'notAnswered';
59
+ if (!isClaimed)
60
+ return 'alreadyAnswered';
61
+ if (wait.kind === 'autoResumeOff')
62
+ await deps.engine.stopWakingForLimitWait(key);
63
+ const lookup = (0, answerSink_1.getAnswerSink)(deps.answerSinks, key);
64
+ const result = lookup.ok
65
+ ? await lookup.sink.deliverAnswer(key, {
66
+ requestId: request.id,
67
+ kind: 'progress',
68
+ body,
69
+ origin: request.origin,
70
+ isRequestOpen: true,
71
+ })
72
+ : lookup;
73
+ if (!result.ok) {
74
+ console.warn(`[requests] limit answer for ${request.id} not delivered: ${result.error}`);
75
+ // Unclaimed, so the next error of this wait tries again.
76
+ await deps.ledger.updateOpenRequest(request.id, (current) => current.limitWaitAnsweredFor === identity ? { limitWaitAnsweredFor: undefined } : {});
77
+ return 'notAnswered';
78
+ }
79
+ if (result.warning)
80
+ console.warn(`[requests] limit answer for ${request.id} delivered partly: ${result.warning}`);
81
+ return 'answered';
82
+ }
83
+ //# sourceMappingURL=limitWaitAnswer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limitWaitAnswer.js","sourceRoot":"","sources":["../../src/requests/limitWaitAnswer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { type SessionKey } from '../sessionKey';
2
+ import type { RequestOrigin } from './types';
3
+ /**
4
+ * @description The MERGE rule of the request ledger, in one place: a new request
5
+ * supersedes an earlier open one ONLY when both have the same group key — the
6
+ * conversation (the surface and the topic / thread / issue the message belongs
7
+ * to, i.e. the `SessionKey`) AND the requester. Two people writing in a row in
8
+ * one topic therefore keep two open requests, each owed its own answer; two
9
+ * messages in a row from one person merge into the newer request.
10
+ *
11
+ * The requester is a connector-owned fact in the origin's attributes (a Telegram
12
+ * user id, a tracker account id, the scheduler's marker); an origin without one
13
+ * reads as the empty requester, so every such request in a conversation shares
14
+ * one group — the behaviour the ledger had before requesters existed.
15
+ */
16
+ /** The origin attribute that names who raised the request (the part of the group key the conversation does not carry). */
17
+ export declare const requestRequesterAttribute = "requester";
18
+ /**
19
+ * The requester of an origin that names none — and of every open request
20
+ * persisted before requesters existed. The ledger lets the conversation's next
21
+ * request supersede such a request whoever raised it (`requestLedger.ts`).
22
+ */
23
+ export declare const emptyRequester = "";
24
+ /**
25
+ * @name RequestGroupKey
26
+ * @description What an open request is filed under: its conversation and its requester.
27
+ */
28
+ export interface RequestGroupKey {
29
+ conversation: SessionKey;
30
+ requester: string;
31
+ }
32
+ /** @description The requester an origin names, or the empty requester when it names none. */
33
+ export declare function getRequestRequester(origin: RequestOrigin): string;
34
+ /** @description The group a request of `origin` in `conversation` belongs to. */
35
+ export declare function getRequestGroupKey(conversation: SessionKey, origin: RequestOrigin): RequestGroupKey;
36
+ /**
37
+ * @description The persisted form (`state.json` `openRequests` field name). An
38
+ * empty requester yields the bare conversation key, so entries written before
39
+ * requesters existed read back unchanged.
40
+ */
41
+ export declare function requestGroupKeyToString(group: RequestGroupKey): string;
42
+ /** @description Non-throwing decoder of {@link requestGroupKeyToString}; `null` for a field of an unknown platform. */
43
+ export declare function tryRequestGroupKeyFromString(serialized: string): RequestGroupKey | null;
44
+ //# sourceMappingURL=requestGroup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requestGroup.d.ts","sourceRoot":"","sources":["../../src/requests/requestGroup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiC,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C;;;;;;;;;;;;GAYG;AAEH,0HAA0H;AAC1H,eAAO,MAAM,yBAAyB,cAAc,CAAC;AAErD;;;;GAIG;AACH,eAAO,MAAM,cAAc,KAAK,CAAC;AASjC;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,UAAU,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,6FAA6F;AAC7F,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAEjE;AAED,iFAAiF;AACjF,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,GAAG,eAAe,CAEnG;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAGtE;AAED,uHAAuH;AACvH,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAOvF"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.emptyRequester = exports.requestRequesterAttribute = void 0;
4
+ exports.getRequestRequester = getRequestRequester;
5
+ exports.getRequestGroupKey = getRequestGroupKey;
6
+ exports.requestGroupKeyToString = requestGroupKeyToString;
7
+ exports.tryRequestGroupKeyFromString = tryRequestGroupKeyFromString;
8
+ const sessionKey_1 = require("../sessionKey");
9
+ /**
10
+ * @description The MERGE rule of the request ledger, in one place: a new request
11
+ * supersedes an earlier open one ONLY when both have the same group key — the
12
+ * conversation (the surface and the topic / thread / issue the message belongs
13
+ * to, i.e. the `SessionKey`) AND the requester. Two people writing in a row in
14
+ * one topic therefore keep two open requests, each owed its own answer; two
15
+ * messages in a row from one person merge into the newer request.
16
+ *
17
+ * The requester is a connector-owned fact in the origin's attributes (a Telegram
18
+ * user id, a tracker account id, the scheduler's marker); an origin without one
19
+ * reads as the empty requester, so every such request in a conversation shares
20
+ * one group — the behaviour the ledger had before requesters existed.
21
+ */
22
+ /** The origin attribute that names who raised the request (the part of the group key the conversation does not carry). */
23
+ exports.requestRequesterAttribute = 'requester';
24
+ /**
25
+ * The requester of an origin that names none — and of every open request
26
+ * persisted before requesters existed. The ledger lets the conversation's next
27
+ * request supersede such a request whoever raised it (`requestLedger.ts`).
28
+ */
29
+ exports.emptyRequester = '';
30
+ /**
31
+ * Separates the conversation key from the requester in the persisted group key:
32
+ * the ASCII unit separator, which no `SessionKey` codec produces (keys are
33
+ * printable); the requester is URI-encoded so it can never contain it either.
34
+ */
35
+ const requestGroupSeparator = '\u001f';
36
+ /** @description The requester an origin names, or the empty requester when it names none. */
37
+ function getRequestRequester(origin) {
38
+ return origin.attributes[exports.requestRequesterAttribute] ?? exports.emptyRequester;
39
+ }
40
+ /** @description The group a request of `origin` in `conversation` belongs to. */
41
+ function getRequestGroupKey(conversation, origin) {
42
+ return { conversation, requester: getRequestRequester(origin) };
43
+ }
44
+ /**
45
+ * @description The persisted form (`state.json` `openRequests` field name). An
46
+ * empty requester yields the bare conversation key, so entries written before
47
+ * requesters existed read back unchanged.
48
+ */
49
+ function requestGroupKeyToString(group) {
50
+ const conversationKey = (0, sessionKey_1.keyToString)(group.conversation);
51
+ return group.requester === exports.emptyRequester ? conversationKey : `${conversationKey}${requestGroupSeparator}${encodeURIComponent(group.requester)}`;
52
+ }
53
+ /** @description Non-throwing decoder of {@link requestGroupKeyToString}; `null` for a field of an unknown platform. */
54
+ function tryRequestGroupKeyFromString(serialized) {
55
+ const separatorIndex = serialized.indexOf(requestGroupSeparator);
56
+ const conversationKey = separatorIndex === -1 ? serialized : serialized.slice(0, separatorIndex);
57
+ const conversation = (0, sessionKey_1.tryKeyFromString)(conversationKey);
58
+ if (!conversation)
59
+ return null;
60
+ const requester = separatorIndex === -1 ? exports.emptyRequester : decodeURIComponent(serialized.slice(separatorIndex + 1));
61
+ return { conversation, requester };
62
+ }
63
+ //# sourceMappingURL=requestGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requestGroup.js","sourceRoot":"","sources":["../../src/requests/requestGroup.ts"],"names":[],"mappings":";;;AA4CA,kDAEC;AAGD,gDAEC;AAOD,0DAGC;AAGD,oEAOC;AAvED,8CAA+E;AAG/E;;;;;;;;;;;;GAYG;AAEH,0HAA0H;AAC7G,QAAA,yBAAyB,GAAG,WAAW,CAAC;AAErD;;;;GAIG;AACU,QAAA,cAAc,GAAG,EAAE,CAAC;AAEjC;;;;GAIG;AACH,MAAM,qBAAqB,GAAG,QAAQ,CAAC;AAWvC,6FAA6F;AAC7F,SAAgB,mBAAmB,CAAC,MAAqB;IACvD,OAAO,MAAM,CAAC,UAAU,CAAC,iCAAyB,CAAC,IAAI,sBAAc,CAAC;AACxE,CAAC;AAED,iFAAiF;AACjF,SAAgB,kBAAkB,CAAC,YAAwB,EAAE,MAAqB;IAChF,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;AAClE,CAAC;AAED;;;;GAIG;AACH,SAAgB,uBAAuB,CAAC,KAAsB;IAC5D,MAAM,eAAe,GAAG,IAAA,wBAAW,EAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACxD,OAAO,KAAK,CAAC,SAAS,KAAK,sBAAc,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,GAAG,qBAAqB,GAAG,kBAAkB,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;AACnJ,CAAC;AAED,uHAAuH;AACvH,SAAgB,4BAA4B,CAAC,UAAkB;IAC7D,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACjE,MAAM,eAAe,GAAG,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;IACjG,MAAM,YAAY,GAAG,IAAA,6BAAgB,EAAC,eAAe,CAAC,CAAC;IACvD,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAC/B,MAAM,SAAS,GAAG,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,sBAAc,CAAC,CAAC,CAAC,kBAAkB,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC;IACpH,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;AACrC,CAAC"}