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,143 @@
1
+ "use strict";
2
+ /**
3
+ * @description Pure logic for the OpenCode interactive-question UX (plan
4
+ * `2026-06-09-question-ux.md`, scopes S1 + S2). Kept side-effect-free so the
5
+ * tricky parts — rendering option descriptions and the sequential
6
+ * multi-question answer collection — are exhaustively unit-testable without a
7
+ * live Telegram round-trip (the answer path real topics depend on; a bug here
8
+ * silently breaks question answering and can't be force-triggered on demand).
9
+ *
10
+ * The bot (`bot.ts`) owns all I/O: it calls {@link buildQuestionBodyLines} to
11
+ * render a question's text body, and drives the answer state machine via
12
+ * {@link recordAnswerAndAdvance}, then performs the resulting Telegram send /
13
+ * agent reply.
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.buildQuestionBodyLines = buildQuestionBodyLines;
17
+ exports.buildQuestionBodyLinesPlain = buildQuestionBodyLinesPlain;
18
+ exports.getQuestionReplyRoute = getQuestionReplyRoute;
19
+ exports.recordAnswerAndAdvance = recordAnswerAndAdvance;
20
+ exports.migratePendingQuestionState = migratePendingQuestionState;
21
+ /**
22
+ * @description Build the message-BODY text lines for ONE question: the header,
23
+ * the question text (only when it differs from the header), then the numbered
24
+ * option labels each followed by its description (S1 — descriptions were
25
+ * previously discarded even though OpenCode delivers them).
26
+ *
27
+ * The numbering is 1-based and lines up with the inline option buttons
28
+ * (`qa_<qIdx>_<optIdx>`), so a user can answer by tapping a button OR by typing
29
+ * the digit. Descriptions go ONLY in the body (indented under the label), never
30
+ * on the button — buttons stay label-only under Telegram's 40-char cap.
31
+ *
32
+ * `escape` is injected (Markdown or HTML escaper) so this stays pure and
33
+ * backend-agnostic; the bot passes its own `escapeMarkdown`.
34
+ */
35
+ function buildQuestionBodyLines(question, escape) {
36
+ const header = question.header || question.question || 'Question';
37
+ const lines = [`❓ *${escape(header)}*`];
38
+ if (question.question && question.question !== header) {
39
+ lines.push(escape(question.question));
40
+ }
41
+ question.options.forEach((option, optIdx) => {
42
+ lines.push(`${optIdx + 1}. ${escape(option.label)}`);
43
+ if (option.description) {
44
+ // Indented under the label so it reads as that option's sub-line.
45
+ lines.push(` ${escape(option.description)}`);
46
+ }
47
+ });
48
+ return lines;
49
+ }
50
+ /**
51
+ * @description Build the same body as {@link buildQuestionBodyLines} but with NO
52
+ * escaping and no bold markers — the plain-text fallback used when Telegram
53
+ * rejects the Markdown render of a question.
54
+ */
55
+ function buildQuestionBodyLinesPlain(question) {
56
+ const header = question.header || question.question || 'Question';
57
+ const lines = [`❓ ${header}`];
58
+ if (question.question && question.question !== header) {
59
+ lines.push(question.question);
60
+ }
61
+ question.options.forEach((option, optIdx) => {
62
+ lines.push(`${optIdx + 1}. ${option.label}`);
63
+ if (option.description)
64
+ lines.push(` ${option.description}`);
65
+ });
66
+ return lines;
67
+ }
68
+ /**
69
+ * @description Decide how to route a user's reply for a thread that has an
70
+ * OpenCode question on screen. Pure so the digit-in-range precedence is
71
+ * unit-testable without a live session.
72
+ *
73
+ * Only a bare 1-based digit in range of `currentQuestion.options` answers; any
74
+ * other text (out-of-range digit, prose, empty) cancels. A digit answer carries
75
+ * the chosen option label(s) so the caller never re-parses the digit (single
76
+ * source of truth for the digit→label mapping).
77
+ */
78
+ function getQuestionReplyRoute(text, currentQuestion) {
79
+ const trimmed = text.trim();
80
+ if (currentQuestion && /^\d+$/.test(trimmed)) {
81
+ const optionIndex = parseInt(trimmed, 10) - 1;
82
+ const picked = currentQuestion.options[optionIndex];
83
+ if (picked)
84
+ return { kind: 'answer', labels: [picked.label] };
85
+ }
86
+ return { kind: 'cancel' };
87
+ }
88
+ /**
89
+ * @description Record the user's answer for the CURRENTLY shown question and
90
+ * decide what happens next (S2 — sequential multi-question + local answer
91
+ * collection). Pure: returns the mutated-copy state plus the action; the bot
92
+ * performs the side effect (post the next question OR reply to the agent).
93
+ *
94
+ * The bug this fixes: the old handler closed the whole request on the first
95
+ * answer, sending EMPTY answers for every other question. Here we only submit
96
+ * once NO slot is left `null`.
97
+ *
98
+ * `answerForCurrent` is the chosen option label(s) or the typed text, wrapped
99
+ * as a one-element array per OpenCode's `string[][]` matrix shape.
100
+ */
101
+ function recordAnswerAndAdvance(state, answerForCurrent) {
102
+ const answers = state.answers.slice();
103
+ answers[state.currentIndex] = answerForCurrent;
104
+ const nextUnansweredIndex = answers.findIndex(slot => slot === null);
105
+ if (nextUnansweredIndex === -1) {
106
+ // All answered → build the matrix. A null slot can only appear here
107
+ // defensively (e.g. a migrated/corrupt state); coerce it to [''] so the
108
+ // reply shape stays valid string[][] and never carries `null`.
109
+ const matrix = answers.map(slot => slot ?? ['']);
110
+ return {
111
+ nextState: { ...state, answers },
112
+ action: { kind: 'submit', matrix },
113
+ };
114
+ }
115
+ return {
116
+ nextState: { ...state, answers, currentIndex: nextUnansweredIndex },
117
+ action: { kind: 'showQuestion', index: nextUnansweredIndex },
118
+ };
119
+ }
120
+ /**
121
+ * @description Restore-compat guard for {@link PendingQuestionState} (S2). The
122
+ * persisted shape grew `answers` + `currentIndex`; an OLD `state.json` entry
123
+ * written before this change has only `{ data, messageId }`. Returning it raw
124
+ * would leave `answers`/`currentIndex` undefined and crash the answer handlers
125
+ * at boot. This normalises any restored entry to the new shape:
126
+ * - missing/mismatched-length `answers` → rebuilt as `[null…]` sized to the
127
+ * question count (the user must re-answer — the in-progress local answers
128
+ * were never sent to the agent anyway);
129
+ * - missing/out-of-range `currentIndex` → `0`.
130
+ */
131
+ function migratePendingQuestionState(raw) {
132
+ const questionCount = raw.data.questions.length;
133
+ const hasValidAnswers = Array.isArray(raw.answers) && raw.answers.length === questionCount;
134
+ const answers = hasValidAnswers
135
+ ? raw.answers
136
+ : new Array(questionCount).fill(null);
137
+ const hasValidIndex = typeof raw.currentIndex === 'number' &&
138
+ raw.currentIndex >= 0 &&
139
+ raw.currentIndex < questionCount;
140
+ const currentIndex = hasValidIndex ? raw.currentIndex : 0;
141
+ return { ...raw, answers, currentIndex };
142
+ }
143
+ //# sourceMappingURL=openCodeQuestionFlow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openCodeQuestionFlow.js","sourceRoot":"","sources":["../src/openCodeQuestionFlow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Decide whether an incoming OpenCode SSE event belongs to a thread's bound
3
+ * session — directly, or because the event's session is a SUBAGENT child of
4
+ * it.
5
+ *
6
+ * OpenCode runs subagents (e.g. `@explore` / Task) in CHILD sessions whose
7
+ * `parentID` points at the originating session. Their events (deltas,
8
+ * `session.idle`, …) carry the CHILD sessionID, not the parent's. The bot
9
+ * binds the parent session to a topic, so a child event must be matched by
10
+ * walking up the lineage chain to the bound session — otherwise subagent
11
+ * output is dropped and the topic hangs on the ⏳ loader forever.
12
+ *
13
+ * The visited-set guards against cyclic lineage so a corrupt chain can never
14
+ * spin.
15
+ */
16
+ export declare function checkIsEventForSession(eventSessionId: string, ownedSessionId: string, childToParent: ReadonlyMap<string, string>): boolean;
17
+ /** Prefix shared by every OpenCode session id (`ses_…`). Used to reject
18
+ * non-session ids (e.g. a `msg_…` id) before recording a lineage link. */
19
+ export declare const openCodeSessionIdPrefix = "ses_";
20
+ /** A bound (active) thread session, reduced to the two fields routing needs. */
21
+ export interface BoundSessionRef {
22
+ /** Serialised `SessionKey` (`"<chatId>:<threadId>"`). */
23
+ keyStr: string;
24
+ /** Server-assigned OpenCode session id (`ses_…`) this thread owns. */
25
+ sessionId: string;
26
+ }
27
+ /**
28
+ * @description Resolve the SINGLE bound thread that owns an incoming SSE event,
29
+ * so an event is delivered to at most one topic (single-owner delivery).
30
+ *
31
+ * Even on the single global stream (every instance's events multiplexed on
32
+ * one `/global/event`), the same event reaches the dispatcher once and may match
33
+ * more than one bound thread: a false lineage link OR a duplicated session id
34
+ * (two threads
35
+ * accidentally bound to the same server session) would make the event match —
36
+ * and emit to — more than one topic (bug B20: the same answer appeared in two
37
+ * threads). The single-owner rule picks exactly one.
38
+ *
39
+ * Ownership priority:
40
+ * 1. A thread whose own `sessionId` directly equals `eventSessionId` is the
41
+ * canonical owner. Direct ownership always beats lineage descent — a
42
+ * session that IS bound to a thread can never be a routing *descendant* of
43
+ * another thread, so a real (parent) session is never stolen by a topic
44
+ * that merely has it in its lineage chain.
45
+ * 2. Otherwise the event is a subagent (child-session) event: the bound
46
+ * thread whose `sessionId` is the nearest ancestor up the lineage chain
47
+ * owns it.
48
+ *
49
+ * Determinism on collision: if two threads claim the same `sessionId` (the
50
+ * corruption case the prevention layer guards against), the first in iteration
51
+ * order wins — exactly one owner, never two.
52
+ *
53
+ * @returns the owning thread's `keyStr`, or `null` if no bound thread owns it.
54
+ */
55
+ export declare function getEventOwnerKey(eventSessionId: string, boundSessions: readonly BoundSessionRef[], childToParent: ReadonlyMap<string, string>): string | null;
56
+ /**
57
+ * @description Decide whether a "drop" diagnostic for `(eventType,
58
+ * eventSessionId)` should be logged now, throttled to once per `throttleMs`.
59
+ * An orphaned session streams hundreds of deltas; logging each (× each bound
60
+ * thread) floods the diag log (B19). Mutates `lastLoggedAtByKey` to record the
61
+ * log time, evicting the oldest entry past `maxEntries` so the map stays
62
+ * bounded. Pure-ish (single mutation of the passed map) so the throttle is
63
+ * unit-testable without any I/O.
64
+ *
65
+ * @returns `true` if this drop is the first in its window (caller should log).
66
+ */
67
+ export declare function checkShouldLogDrop(lastLoggedAtByKey: Map<string, number>, eventType: string, eventSessionId: string, now: number, throttleMs: number, maxEntries: number): boolean;
68
+ /**
69
+ * @description Number of lineage hops from `eventSessionId` up to
70
+ * `ancestorSessionId`, or `null` if the ancestor is not on the chain. A
71
+ * visited-set guards against a corrupt cyclic chain. Returns `null` (not 0) for
72
+ * an equal id — a *direct* match is handled separately in `getEventOwnerKey` so
73
+ * it always wins over descent. Exported (besides the routing internals) for the
74
+ * adapter's busy tracking, which must verify a STRICT descendant before
75
+ * recording a busy child — a dir-fallback-routed foreign sibling must never
76
+ * count.
77
+ */
78
+ export declare function getLineageDepthToAncestor(eventSessionId: string, ancestorSessionId: string, childToParent: ReadonlyMap<string, string>): number | null;
79
+ /**
80
+ * Record a child→parent session link learned from an event that exposes both
81
+ * ids, keeping the map bounded (oldest insertion evicted past `maxEntries`).
82
+ *
83
+ * Originally fed only by `session.updated`, but a child's lineage must be known
84
+ * BEFORE that beat or its earliest events drop "no owner" — so the adapter now
85
+ * records from ANY event whose properties expose `parentID` (S2 lineage
86
+ * durability), not just `session.updated`.
87
+ *
88
+ * Returns `true` only when a genuinely new or changed link was stored, so the
89
+ * caller can emit a diagnostic line for exactly the links worth knowing about.
90
+ * Ignores root sessions (no `parentID`) and any non-`ses_` id.
91
+ */
92
+ export declare function updateSessionLineage(childToParent: Map<string, string>, childSessionId: string | undefined, parentSessionId: string | undefined, maxEntries: number): boolean;
93
+ /**
94
+ * @description Mark every lineage hop walked to route `eventSessionId` to one of
95
+ * its bound ancestors as MOST-recently-used, so an actively-routing child is
96
+ * never the eviction victim.
97
+ *
98
+ * Why this exists: the lineage map is bounded by `maxEntries` and evicts the
99
+ * OLDEST INSERTION first (a Map preserves insertion order). A long-lived
100
+ * subagent that keeps streaming but never re-emits its `parentID` would, after
101
+ * `maxEntries` newer links land, be evicted mid-turn and its remaining events
102
+ * would drop "no owner" (the ~9 min gap proven live for a child).
103
+ * Re-inserting a USED link (delete + set — a plain `set` on an existing key does
104
+ * NOT reorder a JS Map) moves it to the tail, so the entries doing real routing
105
+ * work are evicted LAST. The cap is untouched; only the victim choice changes
106
+ * from "oldest inserted" to "oldest unused".
107
+ *
108
+ * Walks the same chain as {@link getLineageDepthToAncestor} (visited-set guards
109
+ * a corrupt cycle) and touches each link UP TO `ancestorSessionId` inclusive.
110
+ */
111
+ export declare function touchLineageOnUse(childToParent: Map<string, string>, eventSessionId: string, ancestorSessionId: string): void;
112
+ /**
113
+ * @description Resolve an event's owner by DIRECTORY when id/lineage resolution
114
+ * has already failed — the SSE-routing fallback. On the single `/global/event`
115
+ * stream every session event is tagged with its owning folder, so an event
116
+ * provably belongs to one of the threads bound to THAT folder, even when the
117
+ * per-session lineage map briefly disagrees (the child's `parentID` link was
118
+ * evicted or not yet recorded). Pure: the caller passes the directory's ACTIVE
119
+ * bound sessions, so it is unit-testable without a live server.
120
+ *
121
+ * Decision rule (never guess a topic — a wrong topic is worse than a logged
122
+ * drop):
123
+ * - exactly ONE active session in the directory → it owns the event;
124
+ * - more than one → disambiguate ONLY via in-memory lineage: route to the one
125
+ * active session that is a lineage ancestor of `eventSessionId`. If zero or
126
+ * several active sessions are ancestors → ambiguous → `null`;
127
+ * - zero active sessions → `null`.
128
+ *
129
+ * @returns the owning thread's `keyStr`, or `null` when it cannot be resolved
130
+ * unambiguously (the caller then loud-drops).
131
+ */
132
+ export declare function resolveOwnerByDirectoryFallback(eventSessionId: string, directoryActiveSessions: readonly BoundSessionRef[], childToParent: ReadonlyMap<string, string>): string | null;
133
+ //# sourceMappingURL=openCodeSessionRouting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openCodeSessionRouting.d.ts","sourceRoot":"","sources":["../src/openCodeSessionRouting.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CACpC,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,OAAO,CAiBT;AAED;0EAC0E;AAC1E,eAAO,MAAM,uBAAuB,SAAS,CAAC;AAE9C,gFAAgF;AAChF,MAAM,WAAW,eAAe;IAC9B,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,gBAAgB,CAC9B,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,SAAS,eAAe,EAAE,EACzC,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,MAAM,GAAG,IAAI,CAoBf;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EACtC,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAWT;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CACvC,cAAc,EAAE,MAAM,EACtB,iBAAiB,EAAE,MAAM,EACzB,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,MAAM,GAAG,IAAI,CAmBf;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAClC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAClC,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,eAAe,EAAE,MAAM,GAAG,SAAS,EACnC,UAAU,EAAE,MAAM,GACjB,OAAO,CAoBT;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAC/B,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAClC,cAAc,EAAE,MAAM,EACtB,iBAAiB,EAAE,MAAM,GACxB,IAAI,CAiBN;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,+BAA+B,CAC7C,cAAc,EAAE,MAAM,EACtB,uBAAuB,EAAE,SAAS,eAAe,EAAE,EACnD,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,MAAM,GAAG,IAAI,CAef"}
@@ -0,0 +1,253 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.openCodeSessionIdPrefix = void 0;
4
+ exports.checkIsEventForSession = checkIsEventForSession;
5
+ exports.getEventOwnerKey = getEventOwnerKey;
6
+ exports.checkShouldLogDrop = checkShouldLogDrop;
7
+ exports.getLineageDepthToAncestor = getLineageDepthToAncestor;
8
+ exports.updateSessionLineage = updateSessionLineage;
9
+ exports.touchLineageOnUse = touchLineageOnUse;
10
+ exports.resolveOwnerByDirectoryFallback = resolveOwnerByDirectoryFallback;
11
+ /**
12
+ * Decide whether an incoming OpenCode SSE event belongs to a thread's bound
13
+ * session — directly, or because the event's session is a SUBAGENT child of
14
+ * it.
15
+ *
16
+ * OpenCode runs subagents (e.g. `@explore` / Task) in CHILD sessions whose
17
+ * `parentID` points at the originating session. Their events (deltas,
18
+ * `session.idle`, …) carry the CHILD sessionID, not the parent's. The bot
19
+ * binds the parent session to a topic, so a child event must be matched by
20
+ * walking up the lineage chain to the bound session — otherwise subagent
21
+ * output is dropped and the topic hangs on the ⏳ loader forever.
22
+ *
23
+ * The visited-set guards against cyclic lineage so a corrupt chain can never
24
+ * spin.
25
+ */
26
+ function checkIsEventForSession(eventSessionId, ownedSessionId, childToParent) {
27
+ if (eventSessionId === ownedSessionId)
28
+ return true;
29
+ const visitedSessionIds = new Set();
30
+ let currentSessionId = eventSessionId;
31
+ while (!visitedSessionIds.has(currentSessionId)) {
32
+ visitedSessionIds.add(currentSessionId);
33
+ const parentSessionId = childToParent.get(currentSessionId);
34
+ if (parentSessionId === undefined)
35
+ return false;
36
+ if (parentSessionId === ownedSessionId)
37
+ return true;
38
+ currentSessionId = parentSessionId;
39
+ }
40
+ return false;
41
+ }
42
+ /** Prefix shared by every OpenCode session id (`ses_…`). Used to reject
43
+ * non-session ids (e.g. a `msg_…` id) before recording a lineage link. */
44
+ exports.openCodeSessionIdPrefix = 'ses_';
45
+ /**
46
+ * @description Resolve the SINGLE bound thread that owns an incoming SSE event,
47
+ * so an event is delivered to at most one topic (single-owner delivery).
48
+ *
49
+ * Even on the single global stream (every instance's events multiplexed on
50
+ * one `/global/event`), the same event reaches the dispatcher once and may match
51
+ * more than one bound thread: a false lineage link OR a duplicated session id
52
+ * (two threads
53
+ * accidentally bound to the same server session) would make the event match —
54
+ * and emit to — more than one topic (bug B20: the same answer appeared in two
55
+ * threads). The single-owner rule picks exactly one.
56
+ *
57
+ * Ownership priority:
58
+ * 1. A thread whose own `sessionId` directly equals `eventSessionId` is the
59
+ * canonical owner. Direct ownership always beats lineage descent — a
60
+ * session that IS bound to a thread can never be a routing *descendant* of
61
+ * another thread, so a real (parent) session is never stolen by a topic
62
+ * that merely has it in its lineage chain.
63
+ * 2. Otherwise the event is a subagent (child-session) event: the bound
64
+ * thread whose `sessionId` is the nearest ancestor up the lineage chain
65
+ * owns it.
66
+ *
67
+ * Determinism on collision: if two threads claim the same `sessionId` (the
68
+ * corruption case the prevention layer guards against), the first in iteration
69
+ * order wins — exactly one owner, never two.
70
+ *
71
+ * @returns the owning thread's `keyStr`, or `null` if no bound thread owns it.
72
+ */
73
+ function getEventOwnerKey(eventSessionId, boundSessions, childToParent) {
74
+ // 1. Direct id match is canonical — a bound session is never a mere descendant.
75
+ for (const bound of boundSessions) {
76
+ if (bound.sessionId === eventSessionId)
77
+ return bound.keyStr;
78
+ }
79
+ // 2. Subagent event: find the bound thread reachable up the lineage chain.
80
+ // Walk once, recording the depth at which each bound session is reached,
81
+ // and pick the nearest (smallest depth) so a child routes to its closest
82
+ // bound ancestor rather than a higher one.
83
+ let nearestOwnerKey = null;
84
+ let nearestDepth = Number.POSITIVE_INFINITY;
85
+ for (const bound of boundSessions) {
86
+ const depth = getLineageDepthToAncestor(eventSessionId, bound.sessionId, childToParent);
87
+ if (depth !== null && depth < nearestDepth) {
88
+ nearestDepth = depth;
89
+ nearestOwnerKey = bound.keyStr;
90
+ }
91
+ }
92
+ return nearestOwnerKey;
93
+ }
94
+ /**
95
+ * @description Decide whether a "drop" diagnostic for `(eventType,
96
+ * eventSessionId)` should be logged now, throttled to once per `throttleMs`.
97
+ * An orphaned session streams hundreds of deltas; logging each (× each bound
98
+ * thread) floods the diag log (B19). Mutates `lastLoggedAtByKey` to record the
99
+ * log time, evicting the oldest entry past `maxEntries` so the map stays
100
+ * bounded. Pure-ish (single mutation of the passed map) so the throttle is
101
+ * unit-testable without any I/O.
102
+ *
103
+ * @returns `true` if this drop is the first in its window (caller should log).
104
+ */
105
+ function checkShouldLogDrop(lastLoggedAtByKey, eventType, eventSessionId, now, throttleMs, maxEntries) {
106
+ const throttleKey = `${eventType}|${eventSessionId}`;
107
+ const lastLoggedAt = lastLoggedAtByKey.get(throttleKey);
108
+ if (lastLoggedAt !== undefined && now - lastLoggedAt < throttleMs)
109
+ return false;
110
+ lastLoggedAtByKey.set(throttleKey, now);
111
+ if (lastLoggedAtByKey.size > maxEntries) {
112
+ const oldestKey = lastLoggedAtByKey.keys().next().value;
113
+ if (oldestKey !== undefined)
114
+ lastLoggedAtByKey.delete(oldestKey);
115
+ }
116
+ return true;
117
+ }
118
+ /**
119
+ * @description Number of lineage hops from `eventSessionId` up to
120
+ * `ancestorSessionId`, or `null` if the ancestor is not on the chain. A
121
+ * visited-set guards against a corrupt cyclic chain. Returns `null` (not 0) for
122
+ * an equal id — a *direct* match is handled separately in `getEventOwnerKey` so
123
+ * it always wins over descent. Exported (besides the routing internals) for the
124
+ * adapter's busy tracking, which must verify a STRICT descendant before
125
+ * recording a busy child — a dir-fallback-routed foreign sibling must never
126
+ * count.
127
+ */
128
+ function getLineageDepthToAncestor(eventSessionId, ancestorSessionId, childToParent) {
129
+ if (eventSessionId === ancestorSessionId)
130
+ return null;
131
+ const visitedSessionIds = new Set();
132
+ let currentSessionId = eventSessionId;
133
+ let depth = 0;
134
+ while (!visitedSessionIds.has(currentSessionId)) {
135
+ visitedSessionIds.add(currentSessionId);
136
+ const parentSessionId = childToParent.get(currentSessionId);
137
+ if (parentSessionId === undefined)
138
+ return null;
139
+ depth += 1;
140
+ if (parentSessionId === ancestorSessionId)
141
+ return depth;
142
+ currentSessionId = parentSessionId;
143
+ }
144
+ return null;
145
+ }
146
+ /**
147
+ * Record a child→parent session link learned from an event that exposes both
148
+ * ids, keeping the map bounded (oldest insertion evicted past `maxEntries`).
149
+ *
150
+ * Originally fed only by `session.updated`, but a child's lineage must be known
151
+ * BEFORE that beat or its earliest events drop "no owner" — so the adapter now
152
+ * records from ANY event whose properties expose `parentID` (S2 lineage
153
+ * durability), not just `session.updated`.
154
+ *
155
+ * Returns `true` only when a genuinely new or changed link was stored, so the
156
+ * caller can emit a diagnostic line for exactly the links worth knowing about.
157
+ * Ignores root sessions (no `parentID`) and any non-`ses_` id.
158
+ */
159
+ function updateSessionLineage(childToParent, childSessionId, parentSessionId, maxEntries) {
160
+ if (typeof childSessionId !== 'string' ||
161
+ typeof parentSessionId !== 'string' ||
162
+ !childSessionId.startsWith(exports.openCodeSessionIdPrefix) ||
163
+ !parentSessionId.startsWith(exports.openCodeSessionIdPrefix)) {
164
+ return false;
165
+ }
166
+ // A session can never be its own parent — a self-link would make the lineage
167
+ // walk treat the session as its own ancestor and corrupt single-owner routing.
168
+ if (childSessionId === parentSessionId)
169
+ return false;
170
+ if (childToParent.get(childSessionId) === parentSessionId)
171
+ return false;
172
+ childToParent.set(childSessionId, parentSessionId);
173
+ if (childToParent.size > maxEntries) {
174
+ const oldestSessionId = childToParent.keys().next().value;
175
+ if (oldestSessionId !== undefined)
176
+ childToParent.delete(oldestSessionId);
177
+ }
178
+ return true;
179
+ }
180
+ /**
181
+ * @description Mark every lineage hop walked to route `eventSessionId` to one of
182
+ * its bound ancestors as MOST-recently-used, so an actively-routing child is
183
+ * never the eviction victim.
184
+ *
185
+ * Why this exists: the lineage map is bounded by `maxEntries` and evicts the
186
+ * OLDEST INSERTION first (a Map preserves insertion order). A long-lived
187
+ * subagent that keeps streaming but never re-emits its `parentID` would, after
188
+ * `maxEntries` newer links land, be evicted mid-turn and its remaining events
189
+ * would drop "no owner" (the ~9 min gap proven live for a child).
190
+ * Re-inserting a USED link (delete + set — a plain `set` on an existing key does
191
+ * NOT reorder a JS Map) moves it to the tail, so the entries doing real routing
192
+ * work are evicted LAST. The cap is untouched; only the victim choice changes
193
+ * from "oldest inserted" to "oldest unused".
194
+ *
195
+ * Walks the same chain as {@link getLineageDepthToAncestor} (visited-set guards
196
+ * a corrupt cycle) and touches each link UP TO `ancestorSessionId` inclusive.
197
+ */
198
+ function touchLineageOnUse(childToParent, eventSessionId, ancestorSessionId) {
199
+ const visitedSessionIds = new Set();
200
+ let currentSessionId = eventSessionId;
201
+ while (!visitedSessionIds.has(currentSessionId)) {
202
+ visitedSessionIds.add(currentSessionId);
203
+ const parentSessionId = childToParent.get(currentSessionId);
204
+ if (parentSessionId === undefined)
205
+ return;
206
+ // Re-insert to move this link to the tail (most-recently-used).
207
+ childToParent.delete(currentSessionId);
208
+ childToParent.set(currentSessionId, parentSessionId);
209
+ if (parentSessionId === ancestorSessionId)
210
+ return;
211
+ currentSessionId = parentSessionId;
212
+ }
213
+ }
214
+ /**
215
+ * @description Resolve an event's owner by DIRECTORY when id/lineage resolution
216
+ * has already failed — the SSE-routing fallback. On the single `/global/event`
217
+ * stream every session event is tagged with its owning folder, so an event
218
+ * provably belongs to one of the threads bound to THAT folder, even when the
219
+ * per-session lineage map briefly disagrees (the child's `parentID` link was
220
+ * evicted or not yet recorded). Pure: the caller passes the directory's ACTIVE
221
+ * bound sessions, so it is unit-testable without a live server.
222
+ *
223
+ * Decision rule (never guess a topic — a wrong topic is worse than a logged
224
+ * drop):
225
+ * - exactly ONE active session in the directory → it owns the event;
226
+ * - more than one → disambiguate ONLY via in-memory lineage: route to the one
227
+ * active session that is a lineage ancestor of `eventSessionId`. If zero or
228
+ * several active sessions are ancestors → ambiguous → `null`;
229
+ * - zero active sessions → `null`.
230
+ *
231
+ * @returns the owning thread's `keyStr`, or `null` when it cannot be resolved
232
+ * unambiguously (the caller then loud-drops).
233
+ */
234
+ function resolveOwnerByDirectoryFallback(eventSessionId, directoryActiveSessions, childToParent) {
235
+ if (directoryActiveSessions.length === 0)
236
+ return null;
237
+ if (directoryActiveSessions.length === 1)
238
+ return directoryActiveSessions[0].keyStr;
239
+ // >1 active in the same folder (two topics on one project): only route when
240
+ // exactly one of them is a genuine lineage ancestor of the event's session.
241
+ let ancestorOwnerKey = null;
242
+ for (const bound of directoryActiveSessions) {
243
+ if (bound.sessionId === eventSessionId)
244
+ return bound.keyStr;
245
+ if (getLineageDepthToAncestor(eventSessionId, bound.sessionId, childToParent) !== null) {
246
+ if (ancestorOwnerKey !== null)
247
+ return null; // two ancestors → ambiguous
248
+ ancestorOwnerKey = bound.keyStr;
249
+ }
250
+ }
251
+ return ancestorOwnerKey;
252
+ }
253
+ //# sourceMappingURL=openCodeSessionRouting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openCodeSessionRouting.js","sourceRoot":"","sources":["../src/openCodeSessionRouting.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Pure helpers for naming bot-created OpenCode sessions.
3
+ *
4
+ * Primary mechanism (R1, verified live 2026-06-04): a session created WITHOUT
5
+ * an explicit `title` lets opencode auto-name it from the first prompt's LLM
6
+ * turn — nicer than any raw snippet, and it ignores the glued thread-context
7
+ * preamble. A session created WITH a title is treated as user-set and never
8
+ * auto-renamed, so the bot only passes a title for the explicit `/opencode
9
+ * <args>` case.
10
+ *
11
+ * Fallback mechanism: if auto-title never lands (the title stays the bare
12
+ * `New session - <ts>` placeholder — e.g. the server failed to generate one),
13
+ * the adapter renames the session itself via `PATCH /session/:id {title}` on
14
+ * the first MEANINGFUL prompt, using {@link buildSessionTitleSnippet}. The
15
+ * snippet always derives from the RAW user text (the caller strips the
16
+ * preamble first), so it can never carry the service header.
17
+ */
18
+ /**
19
+ * Minimum length (chars, after trim) for a prompt to count as "meaningful"
20
+ * enough to name a session after. Short acknowledgements ("да", "go", "ok")
21
+ * sit below it and leave the name to be decided by a later, substantial
22
+ * prompt. 10 is the locked value from the plan's IDEAL.
23
+ */
24
+ export declare const meaningfulPromptMinLength = 10;
25
+ /** Max length (chars) of a fallback snippet title; longer text is truncated. */
26
+ export declare const sessionTitleSnippetMaxLength = 60;
27
+ /**
28
+ * @description Whether a forwarded prompt is substantial enough to name a
29
+ * session after. A slash command (`/clear`, `/model …`) is a control token,
30
+ * never a name source; anything shorter than {@link meaningfulPromptMinLength}
31
+ * is a throwaway acknowledgement. The argument MUST be the RAW user text —
32
+ * strip the thread-context preamble before calling (see
33
+ * {@link buildSessionTitleSnippet} for the same requirement).
34
+ */
35
+ export declare function checkIsMeaningfulPrompt(rawText: string): boolean;
36
+ /**
37
+ * @description Build a fallback session-title snippet from the first
38
+ * meaningful prompt. Collapses all internal whitespace (incl. newlines) to
39
+ * single spaces, trims, and truncates to {@link sessionTitleSnippetMaxLength}
40
+ * with an ellipsis. The thread-context preamble is stripped first so the title
41
+ * reflects what the USER said, never the bot's glue.
42
+ */
43
+ export declare function buildSessionTitleSnippet(rawText: string): string;
44
+ /**
45
+ * @description Whether `title` is one of opencode's "no real name yet"
46
+ * placeholders, so the fallback rename is allowed to overwrite it. A real
47
+ * auto-generated or user-set title returns `false` and is left untouched.
48
+ */
49
+ export declare function checkIsPlaceholderTitle(title: string | undefined): boolean;
50
+ //# sourceMappingURL=openCodeSessionTitle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openCodeSessionTitle.d.ts","sourceRoot":"","sources":["../src/openCodeSessionTitle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAE5C,gFAAgF;AAChF,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAe/C;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAIhE;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMhE;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAG1E"}