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,284 @@
1
+ "use strict";
2
+ /**
3
+ * @description Rolling window of recently-RELAYED Claude pane lines — the
4
+ * long-horizon companion to the per-poll line-set diff (`getNewPaneContent`
5
+ * in `adapters/claudeCliAdapter.ts`).
6
+ *
7
+ * WHY it exists (live incident 2026-06-10, plan
8
+ * `agent/tasks/actual/2026-06-10-claude-stale-rescrape-dedup.md`): the
9
+ * per-poll diff only knows the immediately-previous pane capture. When the
10
+ * Claude TUI re-renders hours-old scrollback (full repaint, scroll-through,
11
+ * resize), the redrawn lines are absent from that previous capture, so the
12
+ * diff classifies them as "new" and re-relays them — chunked and overlapping
13
+ * as the pane scrolls (a topic was flooded with ~12 chunks of a stale ~1400
14
+ * line diff). This window remembers what was actually RELAYED to the topic,
15
+ * so a re-render of already-sent content is suppressed regardless of WHAT
16
+ * triggered the redraw.
17
+ *
18
+ * Locked tradeoff — the SAME direction as the per-poll set diff (see
19
+ * `getNewPaneContent`'s JSDoc): err toward DROPPING a re-render duplicate. A
20
+ * re-send flood is the user-visible bug; a rare suppressed legit repeat (e.g.
21
+ * re-running an identical long command within the window horizon) is a
22
+ * low-cost loss. Like `lastContent`, the window does not self-heal a
23
+ * wrongly-suppressed line within its horizon. Two guards bound the damage:
24
+ * only SUBSTANTIAL lines (≥ {@link relayDedupMinLineLength} after
25
+ * normalization) are ever recorded or suppressed — short lines ("yes",
26
+ * "done", list bullets) repeat legitimately all the time and always pass —
27
+ * and the FIFO bound means old lines eventually evict as new content is
28
+ * relayed.
29
+ */
30
+ Object.defineProperty(exports, "__esModule", { value: true });
31
+ exports.relayBlockSignatureMax = exports.relayWindowMaxLines = exports.relayDedupMinLineLength = void 0;
32
+ exports.normalizeForComparison = normalizeForComparison;
33
+ exports.normalizeForRelayDedup = normalizeForRelayDedup;
34
+ exports.buildRelayBlockSignature = buildRelayBlockSignature;
35
+ exports.createRecentRelayWindow = createRecentRelayWindow;
36
+ exports.seedRelayWindowFromPane = seedRelayWindowFromPane;
37
+ exports.getRelayDedupedChunk = getRelayDedupedChunk;
38
+ const claudeScrapeShapes_1 = require("./claudeScrapeShapes");
39
+ const progressLine_1 = require("../progressLine");
40
+ /**
41
+ * @description Minimum NORMALIZED line length for the window to record or
42
+ * suppress a line. Shorter lines repeat legitimately too often (confirmations,
43
+ * bullets, numbers) to ever be treated as re-render duplicates.
44
+ */
45
+ exports.relayDedupMinLineLength = 16;
46
+ /**
47
+ * @description Whether a NORMALIZED line is the short `NN +` diff-gutter shape
48
+ * that bypasses the length gate (record + suppress on re-appearance).
49
+ *
50
+ * WHY a targeted bypass (live leak 2026-06-24, topic my-health): a short `NN +`
51
+ * gutter scrolled off, was RE-SCRAPED on a later poll, re-emitted as fresh
52
+ * output, and prepended onto the next real message. Being under the 16-char gate
53
+ * it bypassed the dedup entirely. The gutter shape — a leading line number, then
54
+ * a literal `+` change marker — is never legitimate short prose ("done", "yes",
55
+ * "+1 done", "3 lines changed" all fail it), so suppressing its RE-render is
56
+ * safe. Strictly `+` (additions); `-` deletion gutters and everything else stay
57
+ * outside this bypass and keep the normal length gate. Reuses the single
58
+ * source-of-truth shape {@link DIFF_CHANGE_GUTTER_RE} (called on the same
59
+ * coarse-normalized form `record`/`checkHasLine` key on, so gate and key agree).
60
+ */
61
+ function checkIsDiffChangeGutter(normalizedLine) {
62
+ return claudeScrapeShapes_1.DIFF_CHANGE_GUTTER_RE.test(normalizedLine);
63
+ }
64
+ /**
65
+ * @description Window capacity in lines. Sized to cover the incident-scale
66
+ * re-render (a ~1400-line stale diff) with headroom, while keeping the memory
67
+ * bound trivial and letting truly old content evict.
68
+ */
69
+ exports.relayWindowMaxLines = 1500;
70
+ /**
71
+ * @description Capacity of the block-signature FIFO behind
72
+ * {@link RecentRelayWindow.checkBlockAlreadyRelayed}. A block is one emitted
73
+ * chunk (a table, a prose paragraph) recorded as a SINGLE joined signature, so
74
+ * far fewer entries than the per-line window need bounding. Sized to remember a
75
+ * good run of recent emitted blocks (covers a looped table re-printed many times
76
+ * within a turn) while keeping the memory bound trivial.
77
+ */
78
+ exports.relayBlockSignatureMax = 200;
79
+ /**
80
+ * @description Leading-glyph strip for line-identity comparison: the ANIMATED
81
+ * spinner/tick set (shared {@link spinnerGlyphClass}, so it never drifts from
82
+ * `PROGRESS_LINE_RE`) PLUS the bullet/tool STATE glyphs `⏺ ⏳ ✓` (`⏺` U+23FA is
83
+ * the real assistant-output bullet in Claude v2.1.177). The animated glyphs
84
+ * (`✻ ✽ ✶ ✢ · *`) rotate every frame, so without stripping them a stable line
85
+ * re-animated to another frame (`✻X` vs `✽X`) looks NEW to the diff and re-emits;
86
+ * the state glyphs let a tool header match regardless of its `⏳`/`✓` state.
87
+ */
88
+ const LEADING_COMPARISON_GLYPH_RE = new RegExp(`^[${progressLine_1.spinnerGlyphClass}⏺⏳✓]\\s*`);
89
+ /**
90
+ * @description Normalise a pane line for line-identity comparison: trim, then
91
+ * drop a single leading spinner/state glyph ({@link LEADING_COMPARISON_GLYPH_RE}).
92
+ *
93
+ * Single source of truth for BOTH dedup layers — the per-poll set diff
94
+ * (`getNewPaneContent`) and this relay window — which MUST share one
95
+ * normalization domain: the window stores the same normalized forms the pane
96
+ * diff compares, otherwise a redraw would slip past one layer or the other.
97
+ * Comparison-ONLY: this shapes equality/dedup keys, never the text emitted.
98
+ */
99
+ function normalizeForComparison(line) {
100
+ return line.trim().replace(LEADING_COMPARISON_GLYPH_RE, '');
101
+ }
102
+ /**
103
+ * @description COARSER normalization for the LONG-HORIZON relay-window dedup
104
+ * (record + suppress). Builds on {@link normalizeForComparison} and ADDITIONALLY
105
+ * strips markdown emphasis/code markers (`*`, `_`, `` ` ``, `~`) and collapses
106
+ * whitespace runs.
107
+ *
108
+ * WHY a second, coarser form (live re-emit 2026-06-15): a line that scrolled off
109
+ * and was re-rendered comes back with the SAME text but different emphasis spans
110
+ * — `the Claude *liveness loop* …` one capture, `the Claude *liveness* *loop* …`
111
+ * the next — or shifted padding/wrapping. The per-poll diff's plain
112
+ * normalization left those as DIFFERENT strings, so the window failed to
113
+ * recognise the re-render and re-emitted it. Stripping the volatile markup makes
114
+ * the re-render match.
115
+ *
116
+ * It is a strict COARSENING of {@link normalizeForComparison} (only further
117
+ * transforms its output), so the window still recognises every line the per-poll
118
+ * diff emitted (it can only match MORE, never fewer) — the "no redraw slips past
119
+ * one layer" guarantee holds, WITHOUT touching the per-poll core diff (and group
120
+ * mode), where over-suppression would risk dropping genuinely-new content.
121
+ */
122
+ function normalizeForRelayDedup(line) {
123
+ return normalizeForComparison(line)
124
+ .replace(/[*_`~]/g, '')
125
+ .replace(/\s+/g, ' ')
126
+ .trim();
127
+ }
128
+ /**
129
+ * @description Build a single normalized signature for a WHOLE block (a table,
130
+ * a paragraph) so a fully-duplicate block can be recognised even when its
131
+ * individual lines are too short to clear the per-line {@link
132
+ * relayDedupMinLineLength} gate — table border rows (`├──┤`) and tiny cells
133
+ * (`│ ✅ │`) are exactly that case. Drops blank lines, normalizes each surviving
134
+ * line in the SAME coarse domain {@link normalizeForRelayDedup} uses, and joins
135
+ * with `\n`. Returns `''` for a block with no substantial content (so a
136
+ * whitespace-only block is never treated as a relayed block).
137
+ */
138
+ function buildRelayBlockSignature(blockText) {
139
+ const normalizedLines = blockText
140
+ .split('\n')
141
+ .map(normalizeForRelayDedup)
142
+ .filter(line => line.length > 0);
143
+ return normalizedLines.join('\n');
144
+ }
145
+ /**
146
+ * @description Create an empty relay window holding up to `maxLines`
147
+ * normalized lines; the oldest line is evicted first once full.
148
+ */
149
+ function createRecentRelayWindow(maxLines = exports.relayWindowMaxLines) {
150
+ /** Insertion-ordered normalized lines — defines eviction order. */
151
+ const lineFifo = [];
152
+ /** Same lines as `lineFifo`, for O(1) membership checks. */
153
+ const lineSet = new Set();
154
+ /** Insertion-ordered joined block signatures — defines block eviction order. */
155
+ const blockSignatureFifo = [];
156
+ /** Same signatures as `blockSignatureFifo`, for O(1) membership checks. */
157
+ const blockSignatureSet = new Set();
158
+ return {
159
+ record(chunkText) {
160
+ for (const line of chunkText.split('\n')) {
161
+ const normalized = normalizeForRelayDedup(line);
162
+ // A short `NN +` diff gutter is recorded too (it re-renders and leaks);
163
+ // every other short line stays out of the window (legit repeats).
164
+ if (normalized.length < exports.relayDedupMinLineLength && !checkIsDiffChangeGutter(normalized))
165
+ continue;
166
+ // A line repeated within one chunk must occupy ONE slot, or the FIFO
167
+ // and the Set would desync on eviction.
168
+ if (lineSet.has(normalized))
169
+ continue;
170
+ lineFifo.push(normalized);
171
+ lineSet.add(normalized);
172
+ if (lineFifo.length > maxLines) {
173
+ const evictedLine = lineFifo.shift();
174
+ if (evictedLine !== undefined)
175
+ lineSet.delete(evictedLine);
176
+ }
177
+ }
178
+ // Also record the chunk's whole-block signature so a fully-duplicate
179
+ // block (a re-printed table whose individual lines are too short for the
180
+ // per-line gate) is recognised by `checkBlockAlreadyRelayed`.
181
+ const blockSignature = buildRelayBlockSignature(chunkText);
182
+ if (blockSignature && !blockSignatureSet.has(blockSignature)) {
183
+ blockSignatureFifo.push(blockSignature);
184
+ blockSignatureSet.add(blockSignature);
185
+ if (blockSignatureFifo.length > exports.relayBlockSignatureMax) {
186
+ const evictedSignature = blockSignatureFifo.shift();
187
+ if (evictedSignature !== undefined)
188
+ blockSignatureSet.delete(evictedSignature);
189
+ }
190
+ }
191
+ },
192
+ checkHasLine(line) {
193
+ const normalized = normalizeForRelayDedup(line);
194
+ // Same bypass as `record`: a short `NN +` diff gutter is eligible for
195
+ // suppression (only on RE-appearance — it had to be recorded first); any
196
+ // other short line is never suppressed.
197
+ if (normalized.length < exports.relayDedupMinLineLength && !checkIsDiffChangeGutter(normalized))
198
+ return false;
199
+ return lineSet.has(normalized);
200
+ },
201
+ checkBlockAlreadyRelayed(blockText) {
202
+ const blockSignature = buildRelayBlockSignature(blockText);
203
+ if (!blockSignature)
204
+ return false;
205
+ return blockSignatureSet.has(blockSignature);
206
+ },
207
+ reset() {
208
+ lineFifo.length = 0;
209
+ lineSet.clear();
210
+ blockSignatureFifo.length = 0;
211
+ blockSignatureSet.clear();
212
+ },
213
+ };
214
+ }
215
+ /**
216
+ * @description Seed a FRESH relay window from a full pane snapshot so a re-render
217
+ * of content ALREADY ON the pane is recognised as already-relayed on the very
218
+ * first poll — never re-emitted.
219
+ *
220
+ * WHY (live incident 2026-06-24): on adopt/re-attach the bot already
221
+ * seeds the pane-diff baseline (`lastContent`), which suppresses re-appearing
222
+ * PROSE. But a SETTLED table already on the pane is deduped ONLY at the BLOCK
223
+ * level ({@link RecentRelayWindow.checkBlockAlreadyRelayed} in
224
+ * `emitStabilizedTable`) — its border rows and tiny cells fall under the per-line
225
+ * gate. Adopt did NOT seed this window, so the first post-adopt poll saw the
226
+ * table's block signature as unknown and RE-EMITTED the whole table once per
227
+ * restart (~1100 chars). Recording the pane (per-line + whole-pane block) AND the
228
+ * settled table's OWN block signature here makes that first re-render hit
229
+ * `checkBlockAlreadyRelayed === true` and be suppressed.
230
+ *
231
+ * `getTableBlock` is injected (the adapter passes its `getLastSharpTableBlock`)
232
+ * to keep this module free of an adapter import — the adapter already imports
233
+ * from here, so the reverse would be a cycle. Pure (no I/O); the `record` calls
234
+ * are byte-identical to the ones the live emit path makes, so the window's
235
+ * domains agree.
236
+ */
237
+ function seedRelayWindowFromPane(window, paneText, getTableBlock) {
238
+ if (!paneText)
239
+ return;
240
+ // Records the pane's substantial lines (per-line dedup) AND a whole-pane block
241
+ // signature so a long-horizon re-render of the same pane is recognised.
242
+ window.record(paneText);
243
+ // Record the settled table's OWN block signature in the SAME domain
244
+ // `emitStabilizedTable` records/checks, so the first post-adopt table re-emit
245
+ // is suppressed.
246
+ const seedTable = getTableBlock(paneText);
247
+ if (seedTable)
248
+ window.record(seedTable);
249
+ }
250
+ /**
251
+ * @description Filter a pane-diff chunk against the window: drop every line
252
+ * whose normalized form was already relayed (substantial lines only — short
253
+ * lines always pass). Returns `''` when nothing survives, so the caller can
254
+ * skip the poll's emit entirely (no empty messages).
255
+ *
256
+ * Blank-line shaping mirrors `getNewPaneContent`'s pending-blank exactly: a
257
+ * single blank that sat BETWEEN two surviving lines is preserved as a
258
+ * paragraph separator; leading/trailing blanks and blanks adjacent to dropped
259
+ * lines never leak out. An already-shaped chunk passes through an empty
260
+ * window byte-identical — fresh output is never altered.
261
+ */
262
+ function getRelayDedupedChunk(relayWindow, chunkText) {
263
+ if (!chunkText)
264
+ return '';
265
+ const keptParts = [];
266
+ let pendingBlank = false;
267
+ for (const line of chunkText.split('\n')) {
268
+ const normalized = normalizeForComparison(line);
269
+ if (!normalized) {
270
+ pendingBlank = true;
271
+ continue;
272
+ }
273
+ if (relayWindow.checkHasLine(line)) {
274
+ pendingBlank = false;
275
+ continue;
276
+ }
277
+ if (pendingBlank && keptParts.length > 0)
278
+ keptParts.push('');
279
+ keptParts.push(line);
280
+ pendingBlank = false;
281
+ }
282
+ return keptParts.join('\n').trim();
283
+ }
284
+ //# sourceMappingURL=recentRelayWindow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recentRelayWindow.js","sourceRoot":"","sources":["../../src/utils/recentRelayWindow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /** Recorded instead of a pasted provider API key while `/connect` is pending. */
2
+ export declare const redactedConnectKeyPreview = "[redacted: provider API key]";
3
+ /** Recorded instead of a `/connect …` invocation — its arguments may carry the key inline. */
4
+ export declare const redactedConnectCommandPreview = "/connect <redacted>";
5
+ /**
6
+ * @description Is `rawText` a `/connect` command invocation (any argument
7
+ * shape, `@botmention` tolerated)? Shared by the command wrapper (a re-issued
8
+ * `/connect` keeps the pending state without a "cancelled" notice) and the
9
+ * recv-trace redaction below.
10
+ */
11
+ export declare function checkIsConnectCommandText(rawText: string): boolean;
12
+ /**
13
+ * @description Decide what the output-trace `recv` preview may show for an
14
+ * incoming text message. Security: a provider API key must never land in the
15
+ * on-disk trace log. Mirrors the text handler's own routing: while the thread
16
+ * is in the pending `/connect` state, the next non-command text IS the pasted
17
+ * key → the preview is fully redacted (a command text cancels the flow instead,
18
+ * so it is not a secret). Independently of the pending state, an inline
19
+ * `/connect <key>` carries the key in its arguments → only a fixed command
20
+ * marker is recorded. Everything else records unchanged.
21
+ */
22
+ export declare function getRecvTracePreview(messageText: string, isThreadPendingProviderConnect: boolean): string;
23
+ //# sourceMappingURL=recvPreviewRedaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recvPreviewRedaction.d.ts","sourceRoot":"","sources":["../../src/utils/recvPreviewRedaction.ts"],"names":[],"mappings":"AAEA,iFAAiF;AACjF,eAAO,MAAM,yBAAyB,iCAAiC,CAAC;AAExE,8FAA8F;AAC9F,eAAO,MAAM,6BAA6B,wBAAwB,CAAC;AAEnE;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGlE;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,8BAA8B,EAAE,OAAO,GACtC,MAAM,CAMR"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.redactedConnectCommandPreview = exports.redactedConnectKeyPreview = void 0;
4
+ exports.checkIsConnectCommandText = checkIsConnectCommandText;
5
+ exports.getRecvTracePreview = getRecvTracePreview;
6
+ const utils_1 = require("../utils");
7
+ /** Recorded instead of a pasted provider API key while `/connect` is pending. */
8
+ exports.redactedConnectKeyPreview = '[redacted: provider API key]';
9
+ /** Recorded instead of a `/connect …` invocation — its arguments may carry the key inline. */
10
+ exports.redactedConnectCommandPreview = '/connect <redacted>';
11
+ /**
12
+ * @description Is `rawText` a `/connect` command invocation (any argument
13
+ * shape, `@botmention` tolerated)? Shared by the command wrapper (a re-issued
14
+ * `/connect` keeps the pending state without a "cancelled" notice) and the
15
+ * recv-trace redaction below.
16
+ */
17
+ function checkIsConnectCommandText(rawText) {
18
+ const [commandName = ''] = (0, utils_1.stripCommandBotMention)(rawText.trim()).split(/\s+/, 1);
19
+ return commandName === '/connect';
20
+ }
21
+ /**
22
+ * @description Decide what the output-trace `recv` preview may show for an
23
+ * incoming text message. Security: a provider API key must never land in the
24
+ * on-disk trace log. Mirrors the text handler's own routing: while the thread
25
+ * is in the pending `/connect` state, the next non-command text IS the pasted
26
+ * key → the preview is fully redacted (a command text cancels the flow instead,
27
+ * so it is not a secret). Independently of the pending state, an inline
28
+ * `/connect <key>` carries the key in its arguments → only a fixed command
29
+ * marker is recorded. Everything else records unchanged.
30
+ */
31
+ function getRecvTracePreview(messageText, isThreadPendingProviderConnect) {
32
+ if (checkIsConnectCommandText(messageText))
33
+ return exports.redactedConnectCommandPreview;
34
+ if (isThreadPendingProviderConnect && !messageText.trim().startsWith('/')) {
35
+ return exports.redactedConnectKeyPreview;
36
+ }
37
+ return messageText;
38
+ }
39
+ //# sourceMappingURL=recvPreviewRedaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recvPreviewRedaction.js","sourceRoot":"","sources":["../../src/utils/recvPreviewRedaction.ts"],"names":[],"mappings":";;;AAcA,8DAGC;AAYD,kDASC;AAtCD,oCAAkD;AAElD,iFAAiF;AACpE,QAAA,yBAAyB,GAAG,8BAA8B,CAAC;AAExE,8FAA8F;AACjF,QAAA,6BAA6B,GAAG,qBAAqB,CAAC;AAEnE;;;;;GAKG;AACH,SAAgB,yBAAyB,CAAC,OAAe;IACvD,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,IAAA,8BAAsB,EAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAClF,OAAO,WAAW,KAAK,UAAU,CAAC;AACpC,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,mBAAmB,CACjC,WAAmB,EACnB,8BAAuC;IAEvC,IAAI,yBAAyB,CAAC,WAAW,CAAC;QAAE,OAAO,qCAA6B,CAAC;IACjF,IAAI,8BAA8B,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1E,OAAO,iCAAyB,CAAC;IACnC,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC"}
@@ -0,0 +1,148 @@
1
+ /**
2
+ * @description The `/reminders` decisions that live OUTSIDE the pure wizard
3
+ * module because they depend on the bot's own surroundings rather than on the
4
+ * wizard's step machine: which hub screen to draw (a function of the scheduler's
5
+ * per-thread reminder cap), whether a step-4 text wait has expired or is already
6
+ * claimed by another inbound message, whether the captured text is short enough
7
+ * to keep, whether the wait survives a given wizard transition at all, and
8
+ * whether a tapped wizard button belongs to the wizard that is live right now.
9
+ *
10
+ * They are here rather than in `bot.ts` for the usual reason: `bot.ts` cannot be
11
+ * imported by a test (its module-scope `parseEnv()` exits the process), and each
12
+ * of these is a rule whose failure is silent — a hub that offers «add» at the cap
13
+ * is a dead end, an unexpired text wait swallows an ordinary message that should
14
+ * have reached the agent, an unclaimed one creates two reminders from one wizard,
15
+ * and a mis-routed stale tap feeds picks into the wrong wizard.
16
+ */
17
+ import { type ReminderWizardTransition } from './reminderWizard';
18
+ /**
19
+ * How long step 4 keeps waiting for the reminder text. The wait INTERCEPTS every
20
+ * plain message in the topic, so it must expire: an abandoned wizard would
21
+ * otherwise swallow, hours later, a message the operator meant for the agent.
22
+ * 15 minutes is long enough to finish typing and short enough that nobody has
23
+ * forgotten what they were doing.
24
+ */
25
+ export declare const reminderTextWaitMs: number;
26
+ /**
27
+ * @name ReminderHubBody
28
+ * @description Which line the hub prints under its title.
29
+ * - `empty` — nothing scheduled yet.
30
+ * - `active` — the count.
31
+ * - `atLimit` — the count PLUS "delete one to add another", because the «add»
32
+ * button is gone and the operator needs to know why.
33
+ */
34
+ export type ReminderHubBody = 'empty' | 'active' | 'atLimit';
35
+ /** The hub screen's two decisions: what the body says, and whether «add» is drawn. */
36
+ export interface ReminderHubPlan {
37
+ body: ReminderHubBody;
38
+ isAddOffered: boolean;
39
+ }
40
+ /**
41
+ * @description Decide the hub screen. At (or past) the per-thread REMINDER cap
42
+ * the «add» button is NOT offered: the create would be rejected by the store, so
43
+ * a button that can only fail is worse than no button — provided the screen says
44
+ * why, which is what the `atLimit` body is for.
45
+ *
46
+ * The comparison must be the one `createScheduleForThread` makes, or the hub walks
47
+ * the operator through all four steps and only then hits a rejection. That store
48
+ * counts a reminder against the REMINDER cap alone, so the topic's agent-prompt
49
+ * jobs are irrelevant here — a topic full of `/schedule` jobs still has room for
50
+ * reminders.
51
+ *
52
+ * A non-positive cap is treated as "at the limit" rather than special-cased: it
53
+ * is the same user-visible truth (nothing more can be created).
54
+ */
55
+ export declare function getReminderHubPlan(input: {
56
+ reminderCount: number;
57
+ maxReminders: number;
58
+ }): ReminderHubPlan;
59
+ /**
60
+ * @name ReminderTextCaptureRoute
61
+ * @description What an inbound message in the topic means for a reminder wizard.
62
+ * - `notArmed` — no wizard is waiting for text; handle the message normally.
63
+ * - `capture` — this message IS the reminder text.
64
+ * - `claimed` — a wizard is waiting, but another message got there first: handle
65
+ * this one normally, because the wait it would have filled is
66
+ * already being consumed.
67
+ * - `expired` — a wizard was waiting but the window closed: retire it AND let
68
+ * the message fall through to normal handling (swallowing it
69
+ * would lose a prompt the operator meant for the agent).
70
+ */
71
+ export type ReminderTextCaptureRoute = 'notArmed' | 'capture' | 'claimed' | 'expired';
72
+ /**
73
+ * @description Route an inbound message against the step-4 wait. `armedAtMs` is
74
+ * `null` whenever no wizard is on the text step (never armed, already finished,
75
+ * cancelled). Takes the instant as an argument so the window is testable without
76
+ * a clock.
77
+ *
78
+ * `isClaimed` is what makes the wait single-use. Telegraf handles updates
79
+ * CONCURRENTLY and only the voice path is serialized per thread, so two messages
80
+ * arriving together would both route `capture` and create two reminders from one
81
+ * wizard; the caller claims the wait synchronously before its first `await`, and
82
+ * the loser lands here as `claimed`.
83
+ *
84
+ * `claimed` is checked BEFORE the window: a claim means the winner is already
85
+ * turning that wizard's message into the created card, so reporting `expired`
86
+ * underneath it would retire the wizard and relabel the very message being
87
+ * finished.
88
+ */
89
+ export declare function getReminderTextCaptureRoute(input: {
90
+ armedAtMs: number | null;
91
+ isClaimed: boolean;
92
+ nowMs: number;
93
+ }): ReminderTextCaptureRoute;
94
+ /**
95
+ * @name ReminderTextAcceptance
96
+ * @description Whether a captured reminder text can be kept.
97
+ * - `accept` — within {@link reminderTextMaxLength}; create the reminder.
98
+ * - `tooLong` — over it: nothing is saved, step 4 re-renders with the reason and
99
+ * the wait stays armed for a shorter retry.
100
+ */
101
+ export type ReminderTextAcceptance = 'accept' | 'tooLong';
102
+ /**
103
+ * @description Bound the captured reminder text — the ONE gate both text sources
104
+ * (a typed message and a transcribed voice note) pass, since a transcript carries
105
+ * no length bound of its own.
106
+ *
107
+ * An over-long text is REJECTED, never truncated. Truncating would silently ship a
108
+ * reminder whose words are not the operator's, while accepting it breaks three
109
+ * screens at once: the "created" edit fails, so they still see step 4 and believe
110
+ * nothing happened; the card cannot be opened, which is the only place a delete
111
+ * button lives; and at fire time the announcement send fails while the run is
112
+ * still recorded as delivered.
113
+ */
114
+ export declare function getReminderTextAcceptance(text: string): ReminderTextAcceptance;
115
+ /**
116
+ * @description Whether a wizard transition leaves the step-4 text wait ARMED.
117
+ * Only the two outcomes that end ON the text step do; every other outcome moves
118
+ * the wizard off step 4 and must disarm it.
119
+ *
120
+ * Load-bearing for «‹ Back» out of the text step: the screen then asks for a TIME
121
+ * again, so a wait left armed would capture the operator's next ordinary message
122
+ * and create the reminder from the very picks they went back to change — and that
123
+ * message never reaches the agent it was meant for.
124
+ */
125
+ export declare function checkIsReminderTextWaitKept(transitionKind: ReminderWizardTransition['kind']): boolean;
126
+ /**
127
+ * @name ReminderWizardTapRoute
128
+ * @description Where a tapped wizard button is routed.
129
+ * - `foreign` — it belongs to no live wizard (a different wizard's id, or none
130
+ * is live at all): answer "out of date" and strip THAT message's
131
+ * keyboard, since the screen it came from is dead.
132
+ * - `apply` — it belongs to the live wizard: hand it to
133
+ * `applyReminderWizardCallback`, which owns the remaining guard
134
+ * (an action that does not belong to the step now on screen).
135
+ */
136
+ export type ReminderWizardTapRoute = 'foreign' | 'apply';
137
+ /**
138
+ * @description Split "this tap is from a dead screen" from "this tap is for the
139
+ * live wizard". The distinction is load-bearing for the recovery action, not just
140
+ * the message: stripping the keyboard is right for a dead screen and WRONG for
141
+ * the live wizard (a tap on a stale VIEW of the live wizard would otherwise leave
142
+ * the operator staring at a keyboard-less, unfinishable wizard).
143
+ */
144
+ export declare function getReminderWizardTapRoute(input: {
145
+ liveWizardId: string | null;
146
+ callbackData: string;
147
+ }): ReminderWizardTapRoute;
148
+ //# sourceMappingURL=reminderFlow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reminderFlow.d.ts","sourceRoot":"","sources":["../../src/utils/reminderFlow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAGL,KAAK,wBAAwB,EAC9B,MAAM,kBAAkB,CAAC;AAE1B;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,QAAiB,CAAC;AAEjD;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE7D,sFAAsF;AACtF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,eAAe,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,eAAe,CAIlB;AAED;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,wBAAwB,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAEtF;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,wBAAwB,CAI3B;AAED;;;;;;GAMG;AACH,MAAM,MAAM,sBAAsB,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE1D;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,sBAAsB,CAE9E;AAED;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CACzC,cAAc,EAAE,wBAAwB,CAAC,MAAM,CAAC,GAC/C,OAAO,CAET;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,sBAAsB,GAAG,SAAS,GAAG,OAAO,CAAC;AAEzD;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,sBAAsB,CAKzB"}
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ /**
3
+ * @description The `/reminders` decisions that live OUTSIDE the pure wizard
4
+ * module because they depend on the bot's own surroundings rather than on the
5
+ * wizard's step machine: which hub screen to draw (a function of the scheduler's
6
+ * per-thread reminder cap), whether a step-4 text wait has expired or is already
7
+ * claimed by another inbound message, whether the captured text is short enough
8
+ * to keep, whether the wait survives a given wizard transition at all, and
9
+ * whether a tapped wizard button belongs to the wizard that is live right now.
10
+ *
11
+ * They are here rather than in `bot.ts` for the usual reason: `bot.ts` cannot be
12
+ * imported by a test (its module-scope `parseEnv()` exits the process), and each
13
+ * of these is a rule whose failure is silent — a hub that offers «add» at the cap
14
+ * is a dead end, an unexpired text wait swallows an ordinary message that should
15
+ * have reached the agent, an unclaimed one creates two reminders from one wizard,
16
+ * and a mis-routed stale tap feeds picks into the wrong wizard.
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.reminderTextWaitMs = void 0;
20
+ exports.getReminderHubPlan = getReminderHubPlan;
21
+ exports.getReminderTextCaptureRoute = getReminderTextCaptureRoute;
22
+ exports.getReminderTextAcceptance = getReminderTextAcceptance;
23
+ exports.checkIsReminderTextWaitKept = checkIsReminderTextWaitKept;
24
+ exports.getReminderWizardTapRoute = getReminderWizardTapRoute;
25
+ const reminderWizard_1 = require("./reminderWizard");
26
+ /**
27
+ * How long step 4 keeps waiting for the reminder text. The wait INTERCEPTS every
28
+ * plain message in the topic, so it must expire: an abandoned wizard would
29
+ * otherwise swallow, hours later, a message the operator meant for the agent.
30
+ * 15 minutes is long enough to finish typing and short enough that nobody has
31
+ * forgotten what they were doing.
32
+ */
33
+ exports.reminderTextWaitMs = 15 * 60 * 1000;
34
+ /**
35
+ * @description Decide the hub screen. At (or past) the per-thread REMINDER cap
36
+ * the «add» button is NOT offered: the create would be rejected by the store, so
37
+ * a button that can only fail is worse than no button — provided the screen says
38
+ * why, which is what the `atLimit` body is for.
39
+ *
40
+ * The comparison must be the one `createScheduleForThread` makes, or the hub walks
41
+ * the operator through all four steps and only then hits a rejection. That store
42
+ * counts a reminder against the REMINDER cap alone, so the topic's agent-prompt
43
+ * jobs are irrelevant here — a topic full of `/schedule` jobs still has room for
44
+ * reminders.
45
+ *
46
+ * A non-positive cap is treated as "at the limit" rather than special-cased: it
47
+ * is the same user-visible truth (nothing more can be created).
48
+ */
49
+ function getReminderHubPlan(input) {
50
+ const isAtLimit = input.reminderCount >= input.maxReminders;
51
+ if (isAtLimit)
52
+ return { body: 'atLimit', isAddOffered: false };
53
+ return { body: input.reminderCount === 0 ? 'empty' : 'active', isAddOffered: true };
54
+ }
55
+ /**
56
+ * @description Route an inbound message against the step-4 wait. `armedAtMs` is
57
+ * `null` whenever no wizard is on the text step (never armed, already finished,
58
+ * cancelled). Takes the instant as an argument so the window is testable without
59
+ * a clock.
60
+ *
61
+ * `isClaimed` is what makes the wait single-use. Telegraf handles updates
62
+ * CONCURRENTLY and only the voice path is serialized per thread, so two messages
63
+ * arriving together would both route `capture` and create two reminders from one
64
+ * wizard; the caller claims the wait synchronously before its first `await`, and
65
+ * the loser lands here as `claimed`.
66
+ *
67
+ * `claimed` is checked BEFORE the window: a claim means the winner is already
68
+ * turning that wizard's message into the created card, so reporting `expired`
69
+ * underneath it would retire the wizard and relabel the very message being
70
+ * finished.
71
+ */
72
+ function getReminderTextCaptureRoute(input) {
73
+ if (input.armedAtMs === null)
74
+ return 'notArmed';
75
+ if (input.isClaimed)
76
+ return 'claimed';
77
+ return input.nowMs - input.armedAtMs >= exports.reminderTextWaitMs ? 'expired' : 'capture';
78
+ }
79
+ /**
80
+ * @description Bound the captured reminder text — the ONE gate both text sources
81
+ * (a typed message and a transcribed voice note) pass, since a transcript carries
82
+ * no length bound of its own.
83
+ *
84
+ * An over-long text is REJECTED, never truncated. Truncating would silently ship a
85
+ * reminder whose words are not the operator's, while accepting it breaks three
86
+ * screens at once: the "created" edit fails, so they still see step 4 and believe
87
+ * nothing happened; the card cannot be opened, which is the only place a delete
88
+ * button lives; and at fire time the announcement send fails while the run is
89
+ * still recorded as delivered.
90
+ */
91
+ function getReminderTextAcceptance(text) {
92
+ return text.length > reminderWizard_1.reminderTextMaxLength ? 'tooLong' : 'accept';
93
+ }
94
+ /**
95
+ * @description Whether a wizard transition leaves the step-4 text wait ARMED.
96
+ * Only the two outcomes that end ON the text step do; every other outcome moves
97
+ * the wizard off step 4 and must disarm it.
98
+ *
99
+ * Load-bearing for «‹ Back» out of the text step: the screen then asks for a TIME
100
+ * again, so a wait left armed would capture the operator's next ordinary message
101
+ * and create the reminder from the very picks they went back to change — and that
102
+ * message never reaches the agent it was meant for.
103
+ */
104
+ function checkIsReminderTextWaitKept(transitionKind) {
105
+ return transitionKind === 'awaitText' || transitionKind === 'createNow';
106
+ }
107
+ /**
108
+ * @description Split "this tap is from a dead screen" from "this tap is for the
109
+ * live wizard". The distinction is load-bearing for the recovery action, not just
110
+ * the message: stripping the keyboard is right for a dead screen and WRONG for
111
+ * the live wizard (a tap on a stale VIEW of the live wizard would otherwise leave
112
+ * the operator staring at a keyboard-less, unfinishable wizard).
113
+ */
114
+ function getReminderWizardTapRoute(input) {
115
+ if (input.liveWizardId === null)
116
+ return 'foreign';
117
+ const parsed = (0, reminderWizard_1.parseReminderWizardCallback)(input.callbackData);
118
+ if (parsed === null || parsed.wizardId !== input.liveWizardId)
119
+ return 'foreign';
120
+ return 'apply';
121
+ }
122
+ //# sourceMappingURL=reminderFlow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reminderFlow.js","sourceRoot":"","sources":["../../src/utils/reminderFlow.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAgDH,gDAOC;AAiCD,kEAQC;AAuBD,8DAEC;AAYD,kEAIC;AAqBD,8DAQC;AApKD,qDAI0B;AAE1B;;;;;;GAMG;AACU,QAAA,kBAAkB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAkBjD;;;;;;;;;;;;;;GAcG;AACH,SAAgB,kBAAkB,CAAC,KAGlC;IACC,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,YAAY,CAAC;IAC5D,IAAI,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;IAC/D,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,aAAa,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AACtF,CAAC;AAgBD;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,2BAA2B,CAAC,KAI3C;IACC,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI;QAAE,OAAO,UAAU,CAAC;IAChD,IAAI,KAAK,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IACtC,OAAO,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,SAAS,IAAI,0BAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AACrF,CAAC;AAWD;;;;;;;;;;;GAWG;AACH,SAAgB,yBAAyB,CAAC,IAAY;IACpD,OAAO,IAAI,CAAC,MAAM,GAAG,sCAAqB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;AACpE,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,2BAA2B,CACzC,cAAgD;IAEhD,OAAO,cAAc,KAAK,WAAW,IAAI,cAAc,KAAK,WAAW,CAAC;AAC1E,CAAC;AAcD;;;;;;GAMG;AACH,SAAgB,yBAAyB,CAAC,KAGzC;IACC,IAAI,KAAK,CAAC,YAAY,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAClD,MAAM,MAAM,GAAG,IAAA,4CAA2B,EAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC/D,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC,YAAY;QAAE,OAAO,SAAS,CAAC;IAChF,OAAO,OAAO,CAAC;AACjB,CAAC"}