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,943 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.openCodeOwnershipFileEnvName = exports.openCodeExternalHostEnvValue = exports.openCodeExternalHostEnvName = exports.defaultOpenCodeUrl = void 0;
37
+ exports.getOpenCodePort = getOpenCodePort;
38
+ exports.checkIsInstalled = checkIsInstalled;
39
+ exports.getToolCommand = getToolCommand;
40
+ exports.installTool = installTool;
41
+ exports.ensureInstalled = ensureInstalled;
42
+ exports.getOpenCodeChildEnv = getOpenCodeChildEnv;
43
+ exports.startExternallyParentedProcess = startExternallyParentedProcess;
44
+ exports.getDefaultOpenCodeOwnershipFilePath = getDefaultOpenCodeOwnershipFilePath;
45
+ exports.checkIsProcessIdentityCurrent = checkIsProcessIdentityCurrent;
46
+ exports.signalExternallyHostedProcess = signalExternallyHostedProcess;
47
+ exports.onOpenCodeServerExit = onOpenCodeServerExit;
48
+ exports.checkIsOpenCodeServerRunning = checkIsOpenCodeServerRunning;
49
+ exports.extractOpenCodeVersion = extractOpenCodeVersion;
50
+ exports.getOpenCodeServerHealth = getOpenCodeServerHealth;
51
+ exports.checkIsOpenCodeServerStale = checkIsOpenCodeServerStale;
52
+ exports.ensureOpenCodeServer = ensureOpenCodeServer;
53
+ exports.restartOpenCodeServer = restartOpenCodeServer;
54
+ exports.stopOpenCodeServer = stopOpenCodeServer;
55
+ const child_process_1 = require("child_process");
56
+ const fs = __importStar(require("fs"));
57
+ const os = __importStar(require("os"));
58
+ const path = __importStar(require("path"));
59
+ const utils_1 = require("./utils");
60
+ const openCodeCompactPlugin_1 = require("./utils/openCodeCompactPlugin");
61
+ /**
62
+ * The OpenCode server URL when `OPENCODE_URL` is unset — also every OTHER
63
+ * instance's default on this host, which is why a Jira instance refuses it.
64
+ */
65
+ exports.defaultOpenCodeUrl = 'http://localhost:4096';
66
+ const defaultOpenCodePort = new URL(exports.defaultOpenCodeUrl).port;
67
+ /** The port an OpenCode URL names; a URL without one means the default port (as `opencode serve` binds it). */
68
+ function getOpenCodePort(serverUrl) {
69
+ return serverUrl.port || defaultOpenCodePort;
70
+ }
71
+ const npmPrefix = (process.env.HOME || '/home/agent') + '/.npm-global';
72
+ /** Map of tool name → npm package name */
73
+ const toolPackages = {
74
+ claude: '@anthropic-ai/claude-code',
75
+ opencode: 'opencode-ai',
76
+ };
77
+ /**
78
+ * @description Get custom binary path for a tool if configured via env var.
79
+ * E.g. OPENCODE_BIN=/path/to/opencode for custom opencode binary.
80
+ */
81
+ function getCustomBinaryPath(toolName) {
82
+ const envVar = `${toolName.toUpperCase()}_BIN`;
83
+ const customPath = process.env[envVar];
84
+ if (customPath && fs.existsSync(customPath)) {
85
+ return customPath;
86
+ }
87
+ return null;
88
+ }
89
+ /**
90
+ * @description Check if a CLI tool is installed and available in PATH.
91
+ * Also checks for custom binary path via TOOL_BIN env var.
92
+ */
93
+ function checkIsInstalled(toolName) {
94
+ // Check custom binary path first
95
+ if (getCustomBinaryPath(toolName)) {
96
+ return true;
97
+ }
98
+ try {
99
+ (0, child_process_1.execSync)(`which ${toolName}`, { encoding: 'utf-8', timeout: 5000, stdio: 'pipe' });
100
+ return true;
101
+ }
102
+ catch {
103
+ return false;
104
+ }
105
+ }
106
+ /**
107
+ * @description Get the command/path to run a tool.
108
+ * Uses custom binary if TOOL_BIN env var is set.
109
+ */
110
+ function getToolCommand(toolName) {
111
+ const customPath = getCustomBinaryPath(toolName);
112
+ if (customPath) {
113
+ return customPath;
114
+ }
115
+ return toolName;
116
+ }
117
+ /**
118
+ * @description Install a CLI tool via npm global install.
119
+ * Installs to ~/.npm-global/bin/ which is persisted in docker volume.
120
+ */
121
+ async function installTool(toolName) {
122
+ const packageName = toolPackages[toolName];
123
+ if (!packageName) {
124
+ throw new Error(`Unknown tool: ${toolName}. Available: ${Object.keys(toolPackages).join(', ')}`);
125
+ }
126
+ console.log(`[Install] Installing ${toolName} (${packageName})...`);
127
+ return new Promise((resolve, reject) => {
128
+ (0, child_process_1.exec)(`NPM_CONFIG_PREFIX=${npmPrefix} npm install -g ${packageName}`, { timeout: 120000, encoding: 'utf-8' }, (error, stdout, stderr) => {
129
+ if (error) {
130
+ console.error(`[Install] Failed to install ${toolName}:`, stderr);
131
+ reject(new Error(`Failed to install ${toolName}: ${error.message}`));
132
+ return;
133
+ }
134
+ console.log(`[Install] ${toolName} installed successfully`);
135
+ if (stdout.trim())
136
+ console.log(stdout.trim());
137
+ resolve();
138
+ });
139
+ });
140
+ }
141
+ /**
142
+ * @description Ensure a tool is installed. Install if missing.
143
+ * Returns true if tool was already installed, false if it had to be installed.
144
+ */
145
+ async function ensureInstalled(toolName) {
146
+ if (checkIsInstalled(toolName)) {
147
+ return true;
148
+ }
149
+ await installTool(toolName);
150
+ return false;
151
+ }
152
+ // ═══════════════════════════════════════════
153
+ // OpenCode server process management
154
+ // ═══════════════════════════════════════════
155
+ let openCodeProcess = null;
156
+ let ownedOpenCodeProcess = null;
157
+ let openCodeServerLifecycleTail = Promise.resolve();
158
+ exports.openCodeExternalHostEnvName = 'TELEGRAMCODE_HOT_RELOAD';
159
+ exports.openCodeExternalHostEnvValue = '1';
160
+ exports.openCodeOwnershipFileEnvName = 'TELEGRAMCODE_OPENCODE_PROCESS_FILE';
161
+ function getOpenCodeChildEnv(baseEnv = process.env) {
162
+ const childEnv = { ...baseEnv };
163
+ delete childEnv[exports.openCodeExternalHostEnvName];
164
+ delete childEnv[exports.openCodeOwnershipFileEnvName];
165
+ return childEnv;
166
+ }
167
+ const externalProcessHostStartTimeoutMs = 5_000;
168
+ const externalProcessHostAbortTimeoutMs = 2_000;
169
+ const externalProcessHostScript = `
170
+ const { spawn } = require('node:child_process');
171
+ const command = process.argv[1];
172
+ const args = JSON.parse(process.argv[2]);
173
+ let isReleased = false;
174
+ let shouldAbort = false;
175
+ let isAborting = false;
176
+ const child = spawn(command, args, {
177
+ env: process.env,
178
+ detached: true,
179
+ windowsHide: true,
180
+ stdio: 'inherit',
181
+ });
182
+ const finishAbort = () => {
183
+ process.disconnect?.();
184
+ process.exitCode = 1;
185
+ };
186
+ const abortChild = () => {
187
+ shouldAbort = true;
188
+ if (isAborting || !child.pid) return;
189
+ isAborting = true;
190
+ child.once('exit', finishAbort);
191
+ try {
192
+ process.kill(process.platform === 'win32' ? child.pid : -child.pid, 'SIGKILL');
193
+ } catch {
194
+ try {
195
+ child.kill('SIGKILL');
196
+ } catch {
197
+ finishAbort();
198
+ }
199
+ }
200
+ };
201
+ process.on('message', (message) => {
202
+ if (message?.action === 'release' && !shouldAbort) {
203
+ isReleased = true;
204
+ child.unref();
205
+ process.disconnect?.();
206
+ return;
207
+ }
208
+ if (message?.action === 'abort') abortChild();
209
+ });
210
+ process.on('disconnect', () => {
211
+ if (!isReleased) abortChild();
212
+ });
213
+ child.once('error', (error) => {
214
+ process.send?.({ error: error.message });
215
+ process.disconnect?.();
216
+ process.exitCode = 1;
217
+ });
218
+ child.once('spawn', () => {
219
+ process.send?.({ pid: child.pid });
220
+ if (shouldAbort) abortChild();
221
+ });
222
+ `;
223
+ /** Callback invoked when the OpenCode server process exits unexpectedly (not via stopOpenCodeServer) */
224
+ let onServerExitCallback = null;
225
+ const intentionallyStoppedProcesses = new WeakSet();
226
+ const relinquishedProcesses = new WeakSet();
227
+ /**
228
+ * @description Start a process through a one-shot Node host. The host exits
229
+ * before this promise resolves, so the long-lived process is reparented outside
230
+ * the caller's process tree. Hot-mode workers use this because nodemon kills a
231
+ * snapshot of every descendant on reload, including ordinary detached children.
232
+ */
233
+ function startExternallyParentedProcess(command, args, env, options = {}) {
234
+ return new Promise((resolve, reject) => {
235
+ const host = (0, child_process_1.spawn)(process.execPath, ['-e', options.hostScript ?? externalProcessHostScript, command, JSON.stringify(args)], {
236
+ env,
237
+ stdio: ['ignore', 'inherit', 'inherit', 'ipc'],
238
+ });
239
+ let hostedProcess = null;
240
+ let hostError = null;
241
+ let pendingError = null;
242
+ let isSettled = false;
243
+ let abortTimeout = null;
244
+ const settleWithError = (error) => {
245
+ if (isSettled)
246
+ return;
247
+ isSettled = true;
248
+ clearTimeout(timeout);
249
+ if (abortTimeout)
250
+ clearTimeout(abortTimeout);
251
+ if (hostedProcess) {
252
+ signalExternallyHostedProcess(hostedProcess, 'SIGKILL');
253
+ }
254
+ reject(error);
255
+ };
256
+ const requestAbort = (error) => {
257
+ if (isSettled || pendingError)
258
+ return;
259
+ pendingError = error;
260
+ clearTimeout(timeout);
261
+ if (hostedProcess) {
262
+ signalExternallyHostedProcess(hostedProcess, 'SIGKILL');
263
+ }
264
+ if (host.connected)
265
+ host.send({ action: 'abort' });
266
+ abortTimeout = setTimeout(() => {
267
+ host.kill('SIGKILL');
268
+ settleWithError(error);
269
+ }, externalProcessHostAbortTimeoutMs);
270
+ };
271
+ const timeout = setTimeout(() => {
272
+ requestAbort(new Error('External process host did not exit after starting its child'));
273
+ }, options.timeoutMs ?? externalProcessHostStartTimeoutMs);
274
+ host.on('message', (message) => {
275
+ if (!message || typeof message !== 'object')
276
+ return;
277
+ if ('pid' in message && typeof message.pid === 'number') {
278
+ const processIdentity = (options.resolveProcessIdentity ?? getProcessIdentity)(message.pid);
279
+ if (processIdentity) {
280
+ hostedProcess = processIdentity;
281
+ if (!pendingError) {
282
+ try {
283
+ options.prepareProcessIdentity?.(processIdentity);
284
+ host.send({ action: 'release' }, (error) => {
285
+ if (error)
286
+ requestAbort(error);
287
+ });
288
+ }
289
+ catch (error) {
290
+ requestAbort(error instanceof Error ? error : new Error(error?.toString() ?? 'unknown error'));
291
+ }
292
+ }
293
+ }
294
+ else {
295
+ hostError = `could not identify child process ${message.pid}`;
296
+ requestAbort(new Error(`External process host failed: ${hostError}`));
297
+ }
298
+ }
299
+ if ('error' in message && typeof message.error === 'string') {
300
+ hostError = message.error;
301
+ requestAbort(new Error(`External process host failed: ${hostError}`));
302
+ }
303
+ });
304
+ host.once('error', settleWithError);
305
+ host.once('exit', (code, signal) => {
306
+ if (isSettled)
307
+ return;
308
+ clearTimeout(timeout);
309
+ if (abortTimeout)
310
+ clearTimeout(abortTimeout);
311
+ if (pendingError) {
312
+ settleWithError(pendingError);
313
+ return;
314
+ }
315
+ if (hostError) {
316
+ settleWithError(new Error(`External process host failed: ${hostError}`));
317
+ return;
318
+ }
319
+ if (code !== 0 || !hostedProcess || !checkIsProcessIdentityCurrent(hostedProcess)) {
320
+ settleWithError(new Error(`External process host exited before starting its child ` +
321
+ `(code=${code ?? 'null'}, signal=${signal ?? 'null'})`));
322
+ return;
323
+ }
324
+ isSettled = true;
325
+ resolve(hostedProcess);
326
+ });
327
+ });
328
+ }
329
+ function getProcessIdentity(pid) {
330
+ const startToken = getProcessStartToken(pid);
331
+ return startToken ? { pid, startToken } : null;
332
+ }
333
+ function getDefaultOpenCodeOwnershipFilePath(baseDirectory = process.cwd()) {
334
+ const dataDirectory = process.env.DATA_DIR || path.join(os.homedir(), '.telegramCode');
335
+ return path.join(path.resolve(baseDirectory, dataDirectory), '.opencode-server-process');
336
+ }
337
+ function saveOpenCodeServerProcessOwnership(processOwnership) {
338
+ const ownershipFilePath = process.env[exports.openCodeOwnershipFileEnvName];
339
+ if (!ownershipFilePath)
340
+ return;
341
+ const ownershipDirectory = path.dirname(ownershipFilePath);
342
+ const temporaryPath = `${ownershipFilePath}.tmp-${process.pid}`;
343
+ fs.mkdirSync(ownershipDirectory, { recursive: true, mode: 0o700 });
344
+ fs.writeFileSync(temporaryPath, `${processOwnership.pid}\n${processOwnership.startToken}\n` +
345
+ `${processOwnership.endpoint}\n${processOwnership.signalProcessGroup ? 'group' : 'process'}\n` +
346
+ `${processOwnership.state}\n`, { mode: 0o600 });
347
+ fs.renameSync(temporaryPath, ownershipFilePath);
348
+ }
349
+ const loopbackHostnames = new Set(['localhost', '127.0.0.1', '::1', '[::1]']);
350
+ function saveHealthyOpenCodeServerOwnership(endpoint, hostname, port) {
351
+ if (!process.env[exports.openCodeOwnershipFileEnvName] || !loopbackHostnames.has(hostname))
352
+ return;
353
+ const processOwnership = getOwnedOpenCodeProcessOwnership(endpoint);
354
+ if (processOwnership) {
355
+ const readyProcessOwnership = {
356
+ ...processOwnership,
357
+ state: 'ready',
358
+ };
359
+ ownedOpenCodeProcess = readyProcessOwnership;
360
+ saveOpenCodeServerProcessOwnership(readyProcessOwnership);
361
+ return;
362
+ }
363
+ const listenerPid = getPidListeningOnEndpoint(hostname, port);
364
+ const listenerIdentity = listenerPid ? getProcessIdentity(listenerPid) : null;
365
+ if (!listenerIdentity)
366
+ return;
367
+ ownedOpenCodeProcess = {
368
+ ...listenerIdentity,
369
+ endpoint,
370
+ signalProcessGroup: false,
371
+ state: 'ready',
372
+ };
373
+ saveOpenCodeServerProcessOwnership(ownedOpenCodeProcess);
374
+ }
375
+ function getPersistedOpenCodeProcessOwnership(expectedEndpoint) {
376
+ const ownershipFilePath = process.env[exports.openCodeOwnershipFileEnvName];
377
+ if (!ownershipFilePath || !fs.existsSync(ownershipFilePath))
378
+ return null;
379
+ try {
380
+ const [pidText, startToken, endpoint, signalScope, persistedState = 'ready'] = fs
381
+ .readFileSync(ownershipFilePath, 'utf8')
382
+ .trim()
383
+ .split('\n');
384
+ const pid = Number.parseInt(pidText, 10);
385
+ if (!Number.isInteger(pid) ||
386
+ pid <= 0 ||
387
+ !startToken ||
388
+ !endpoint ||
389
+ (signalScope !== 'group' && signalScope !== 'process') ||
390
+ (persistedState !== 'starting' && persistedState !== 'ready')) {
391
+ fs.rmSync(ownershipFilePath, { force: true });
392
+ return null;
393
+ }
394
+ if (expectedEndpoint && endpoint !== expectedEndpoint)
395
+ return null;
396
+ const processOwnership = {
397
+ pid,
398
+ startToken,
399
+ endpoint,
400
+ signalProcessGroup: signalScope === 'group',
401
+ state: persistedState,
402
+ };
403
+ if (checkIsProcessIdentityCurrent(processOwnership) &&
404
+ (!expectedEndpoint || checkIsOpenCodeProcessOwnershipCurrent(processOwnership))) {
405
+ return processOwnership;
406
+ }
407
+ fs.rmSync(ownershipFilePath, { force: true });
408
+ return null;
409
+ }
410
+ catch (error) {
411
+ console.warn(`[OpenCode] Failed to read process ownership file ${ownershipFilePath}:`, error instanceof Error ? error.message : error);
412
+ return null;
413
+ }
414
+ }
415
+ function clearPersistedOpenCodeProcessOwnership(processOwnership) {
416
+ const ownershipFilePath = process.env[exports.openCodeOwnershipFileEnvName];
417
+ if (!ownershipFilePath || !fs.existsSync(ownershipFilePath))
418
+ return;
419
+ try {
420
+ const persistedOwnership = getPersistedOpenCodeProcessOwnership();
421
+ if (persistedOwnership?.pid === processOwnership.pid &&
422
+ persistedOwnership.startToken === processOwnership.startToken &&
423
+ persistedOwnership.endpoint === processOwnership.endpoint) {
424
+ fs.rmSync(ownershipFilePath, { force: true });
425
+ }
426
+ }
427
+ catch (error) {
428
+ console.warn(`[OpenCode] Failed to clear process ownership file ${ownershipFilePath}:`, error instanceof Error ? error.message : error);
429
+ }
430
+ }
431
+ function getProcessStartToken(pid) {
432
+ try {
433
+ if (process.platform === 'linux') {
434
+ const stat = fs.readFileSync(`/proc/${pid}/stat`, 'utf8');
435
+ const commandEndIndex = stat.lastIndexOf(')');
436
+ if (commandEndIndex < 0)
437
+ return null;
438
+ // Fields after the command start at #3 (state); process start time is #22.
439
+ const processFields = stat.slice(commandEndIndex + 1).trim().split(/\s+/);
440
+ if (processFields[0] === 'Z')
441
+ return null;
442
+ return processFields[19] ?? null;
443
+ }
444
+ if (process.platform === 'win32') {
445
+ const output = (0, child_process_1.execFileSync)('powershell.exe', [
446
+ '-NoProfile',
447
+ '-NonInteractive',
448
+ '-Command',
449
+ `(Get-Process -Id ${pid} -ErrorAction Stop).StartTime.ToUniversalTime().Ticks`,
450
+ ], { encoding: 'utf8', timeout: 3000 });
451
+ return output.trim() || null;
452
+ }
453
+ const output = (0, child_process_1.execFileSync)('ps', ['-o', 'lstart=', '-o', 'command=', '-p', pid.toString()], {
454
+ encoding: 'utf8',
455
+ timeout: 3000,
456
+ });
457
+ return output.trim() || null;
458
+ }
459
+ catch {
460
+ return null;
461
+ }
462
+ }
463
+ function checkIsProcessIdentityCurrent(processIdentity) {
464
+ return getProcessStartToken(processIdentity.pid) === processIdentity.startToken;
465
+ }
466
+ function checkIsOpenCodeProcessOwnershipCurrent(processOwnership) {
467
+ if (!checkIsProcessIdentityCurrent(processOwnership))
468
+ return false;
469
+ if (processOwnership.state === 'starting' && processOwnership.signalProcessGroup) {
470
+ return true;
471
+ }
472
+ const serverUrl = new URL(processOwnership.endpoint);
473
+ const port = getOpenCodePort(serverUrl);
474
+ return getPidListeningOnEndpoint(serverUrl.hostname, port) === processOwnership.pid;
475
+ }
476
+ function signalExternallyHostedProcess(processIdentity, signal) {
477
+ return signalProcessIdentity(processIdentity, signal, true);
478
+ }
479
+ function signalProcessIdentity(processIdentity, signal, signalProcessGroup) {
480
+ if (!checkIsProcessIdentityCurrent(processIdentity))
481
+ return false;
482
+ try {
483
+ const targetPid = signalProcessGroup && process.platform !== 'win32'
484
+ ? -processIdentity.pid
485
+ : processIdentity.pid;
486
+ process.kill(targetPid, signal);
487
+ return true;
488
+ }
489
+ catch (error) {
490
+ if (checkIsProcessIdentityCurrent(processIdentity)) {
491
+ console.warn(`[OpenCode] Failed to signal process ${processIdentity.pid}:`, error instanceof Error ? error.message : error);
492
+ }
493
+ return false;
494
+ }
495
+ }
496
+ function getOwnedOpenCodeProcessOwnership(endpoint) {
497
+ if (ownedOpenCodeProcess) {
498
+ if (ownedOpenCodeProcess.endpoint !== endpoint) {
499
+ if (openCodeProcess?.pid === ownedOpenCodeProcess.pid) {
500
+ relinquishedProcesses.add(openCodeProcess);
501
+ openCodeProcess = null;
502
+ }
503
+ ownedOpenCodeProcess = null;
504
+ }
505
+ else if (checkIsOpenCodeProcessOwnershipCurrent(ownedOpenCodeProcess)) {
506
+ return ownedOpenCodeProcess;
507
+ }
508
+ else {
509
+ clearPersistedOpenCodeProcessOwnership(ownedOpenCodeProcess);
510
+ ownedOpenCodeProcess = null;
511
+ }
512
+ }
513
+ const persistedOwnership = getPersistedOpenCodeProcessOwnership(endpoint);
514
+ if (persistedOwnership) {
515
+ ownedOpenCodeProcess = persistedOwnership;
516
+ }
517
+ return persistedOwnership;
518
+ }
519
+ function checkHasOwnedOpenCodeProcess(endpoint) {
520
+ return getOwnedOpenCodeProcessOwnership(endpoint) !== null;
521
+ }
522
+ function clearOwnedOpenCodeProcessOwnership(processOwnership) {
523
+ if (openCodeProcess?.pid === processOwnership.pid) {
524
+ openCodeProcess = null;
525
+ }
526
+ if (ownedOpenCodeProcess?.pid === processOwnership.pid &&
527
+ ownedOpenCodeProcess.startToken === processOwnership.startToken &&
528
+ ownedOpenCodeProcess.endpoint === processOwnership.endpoint) {
529
+ ownedOpenCodeProcess = null;
530
+ }
531
+ clearPersistedOpenCodeProcessOwnership(processOwnership);
532
+ }
533
+ function runOpenCodeServerLifecycle(operation) {
534
+ const currentOperation = openCodeServerLifecycleTail.then(operation, operation);
535
+ openCodeServerLifecycleTail = currentOperation.catch(() => undefined);
536
+ return currentOperation;
537
+ }
538
+ /**
539
+ * @description Register a callback for unexpected server process exits.
540
+ * Called when the server crashes or is OOM-killed (e.g. exit code 137).
541
+ * NOT called when stopOpenCodeServer() is used.
542
+ */
543
+ function onOpenCodeServerExit(callback) {
544
+ onServerExitCallback = callback;
545
+ }
546
+ async function checkIsOpenCodeServerRunning() {
547
+ return (await getOpenCodeServerHealth()).healthy;
548
+ }
549
+ /**
550
+ * @description Extract a bare semver (`1.17.11`; drops a leading `v`) from a
551
+ * version string — used for BOTH `opencode --version` output AND the
552
+ * `/global/health` `version` field, so the two comparison sides are normalized
553
+ * through the SAME rule. Without this, a future `v1.17.11` from one source vs
554
+ * `1.17.11` from the other would read as a false mismatch and churn the server
555
+ * once per boot. Returns null if no semver is present.
556
+ */
557
+ function extractOpenCodeVersion(raw) {
558
+ if (!raw)
559
+ return null;
560
+ const match = raw.match(/\d+\.\d+\.\d+\S*/);
561
+ return match ? match[0] : null;
562
+ }
563
+ /**
564
+ * @description Probe /global/health for liveness AND the version the running
565
+ * server is actually executing. Detects a server still running an OLD binary
566
+ * after opencode was updated on disk: replacing the binary file does not change
567
+ * a live process (it keeps the old code in memory), and a newer opencode run
568
+ * can migrate the shared opencode.db underneath the old server — which then
569
+ * dies on every prompt (e.g. `no such column: replacement_seq`).
570
+ */
571
+ async function getOpenCodeServerHealth() {
572
+ const url = process.env.OPENCODE_URL || exports.defaultOpenCodeUrl;
573
+ try {
574
+ const response = await fetch(`${url}/global/health`, { signal: AbortSignal.timeout(2000) });
575
+ if (!response.ok)
576
+ return { healthy: false, version: null };
577
+ const body = (await response.json().catch(() => null));
578
+ return { healthy: true, version: extractOpenCodeVersion(body?.version) };
579
+ }
580
+ catch {
581
+ return { healthy: false, version: null };
582
+ }
583
+ }
584
+ /** Cache so a boot-time reattach burst doesn't spawn `opencode --version` per call. */
585
+ let installedOpenCodeVersionCache = null;
586
+ const installedVersionCacheTtlMs = 10_000;
587
+ /**
588
+ * @description Version of the opencode binary currently on disk
589
+ * (`opencode --version`). Short-TTL cached to coalesce bursts. Returns null if
590
+ * it can't be determined — an unknown version never forces a restart.
591
+ */
592
+ function getInstalledOpenCodeVersion() {
593
+ const now = Date.now();
594
+ if (installedOpenCodeVersionCache && now - installedOpenCodeVersionCache.at < installedVersionCacheTtlMs) {
595
+ return installedOpenCodeVersionCache.value;
596
+ }
597
+ let value = null;
598
+ try {
599
+ const out = (0, child_process_1.execFileSync)(getToolCommand('opencode'), ['--version'], {
600
+ encoding: 'utf8',
601
+ timeout: 5000,
602
+ env: { ...getOpenCodeChildEnv(), PATH: `${npmPrefix}/bin:${process.env.PATH}` },
603
+ });
604
+ value = extractOpenCodeVersion(out);
605
+ }
606
+ catch {
607
+ value = null;
608
+ }
609
+ installedOpenCodeVersionCache = { value, at: now };
610
+ return value;
611
+ }
612
+ /**
613
+ * @description Stale IFF BOTH versions are known AND differ. An unknown running
614
+ * or installed version is treated as "not stale" (adopt the server) so a
615
+ * transient probe failure never churns a working server.
616
+ */
617
+ function checkIsOpenCodeServerStale(runningVersion, installedVersion) {
618
+ return !!runningVersion && !!installedVersion && runningVersion !== installedVersion;
619
+ }
620
+ /** Find the PID LISTENING on one endpoint (lsof, with an ss fallback). */
621
+ function getPidListeningOnEndpoint(hostname, port) {
622
+ const normalizedHostname = hostname.replace(/^\[|\]$/g, '');
623
+ const listenerAddresses = normalizedHostname === 'localhost'
624
+ ? ['127.0.0.1', '::1']
625
+ : [normalizedHostname];
626
+ for (const listenerAddress of listenerAddresses) {
627
+ try {
628
+ const output = (0, child_process_1.execFileSync)('lsof', ['-nP', `-iTCP@${listenerAddress}:${port}`, '-sTCP:LISTEN', '-t'], { encoding: 'utf8', timeout: 3000 }).trim();
629
+ const pid = Number.parseInt(output.split('\n')[0], 10);
630
+ if (Number.isFinite(pid))
631
+ return pid;
632
+ }
633
+ catch {
634
+ // lsof missing / no match — try the next address, then ss
635
+ }
636
+ }
637
+ try {
638
+ const output = (0, child_process_1.execFileSync)('ss', ['-ltnpH', `sport = :${port}`], {
639
+ encoding: 'utf8',
640
+ timeout: 3000,
641
+ });
642
+ for (const line of output.split('\n')) {
643
+ const isExpectedAddress = listenerAddresses.some((listenerAddress) => line.includes(`${listenerAddress}:${port}`) ||
644
+ line.includes(`[${listenerAddress}]:${port}`));
645
+ if (!isExpectedAddress)
646
+ continue;
647
+ const match = line.match(/pid=(\d+)/);
648
+ if (match)
649
+ return Number.parseInt(match[1], 10);
650
+ }
651
+ }
652
+ catch {
653
+ // Caller refuses to replace a server it cannot identify safely.
654
+ }
655
+ return null;
656
+ }
657
+ /** Server stop: poll process identity every {@link staleServerKillPollMs};
658
+ * escalate to SIGKILL halfway and refuse replacement if it remains alive. */
659
+ const staleServerKillPollMs = 500;
660
+ const staleServerKillPollIterations = 16;
661
+ const staleServerSigkillAfterIterations = 8;
662
+ async function stopOpenCodeProcessOwnership(processOwnership, checkIsStillOwned) {
663
+ if (!checkIsStillOwned() ||
664
+ !signalProcessIdentity(processOwnership, 'SIGTERM', processOwnership.signalProcessGroup)) {
665
+ if (!checkIsProcessIdentityCurrent(processOwnership)) {
666
+ clearOwnedOpenCodeProcessOwnership(processOwnership);
667
+ return;
668
+ }
669
+ throw new Error(`OpenCode server process ${processOwnership.pid} could not be stopped`);
670
+ }
671
+ for (let i = 0; i < staleServerKillPollIterations; i++) {
672
+ await (0, utils_1.sleep)(staleServerKillPollMs);
673
+ if (!checkIsProcessIdentityCurrent(processOwnership)) {
674
+ clearOwnedOpenCodeProcessOwnership(processOwnership);
675
+ return;
676
+ }
677
+ if (i === staleServerSigkillAfterIterations && checkIsStillOwned()) {
678
+ signalProcessIdentity(processOwnership, 'SIGKILL', processOwnership.signalProcessGroup);
679
+ }
680
+ }
681
+ throw new Error(`OpenCode server process ${processOwnership.pid} did not exit after SIGTERM and SIGKILL`);
682
+ }
683
+ /**
684
+ * @description Stop an OpenCode server that may have been ADOPTED at boot (so the
685
+ * bot holds no child handle for it). Every signal is guarded by the process
686
+ * start token captured for that PID, so PID reuse cannot target another process.
687
+ * Waits for the exact process to exit, escalating SIGTERM → SIGKILL.
688
+ */
689
+ async function stopAdoptedOpenCodeServer(serverUrl) {
690
+ const endpoint = serverUrl.origin;
691
+ const port = getOpenCodePort(serverUrl);
692
+ const ownedProcessOwnership = getOwnedOpenCodeProcessOwnership(endpoint);
693
+ const listenerPid = ownedProcessOwnership
694
+ ? null
695
+ : getPidListeningOnEndpoint(serverUrl.hostname, port);
696
+ const listenerIdentity = listenerPid ? getProcessIdentity(listenerPid) : null;
697
+ const processOwnership = ownedProcessOwnership ?? (listenerIdentity
698
+ ? { ...listenerIdentity, endpoint, signalProcessGroup: false, state: 'ready' }
699
+ : null);
700
+ if (!processOwnership) {
701
+ if (await checkIsOpenCodeServerRunning()) {
702
+ throw new Error(`OpenCode server on port ${port} is healthy but its process could not be identified`);
703
+ }
704
+ return;
705
+ }
706
+ if (openCodeProcess?.pid === processOwnership.pid) {
707
+ intentionallyStoppedProcesses.add(openCodeProcess);
708
+ }
709
+ await stopOpenCodeProcessOwnership(processOwnership, () => checkIsOpenCodeProcessOwnershipCurrent(processOwnership));
710
+ }
711
+ /**
712
+ * @description Start opencode serve as a background process. A normal bot owns
713
+ * the child directly; a replaceable hot worker uses a one-shot host so every
714
+ * replacement generation is reparented outside nodemon's kill tree.
715
+ * Waits until server responds to health check (up to 15s).
716
+ *
717
+ * If a server is already up but running an OUTDATED binary (version reported by
718
+ * /global/health differs from the on-disk `opencode --version`), it is restarted
719
+ * onto the current binary instead of being adopted — otherwise a stale server
720
+ * lingers across bot restarts (boot would adopt it on a bare liveness check) and
721
+ * keeps failing prompts after an opencode update.
722
+ */
723
+ async function ensureOpenCodeServerUnlocked() {
724
+ const serverUrl = new URL(process.env.OPENCODE_URL || exports.defaultOpenCodeUrl);
725
+ const port = getOpenCodePort(serverUrl);
726
+ const endpoint = serverUrl.origin;
727
+ const health = await getOpenCodeServerHealth();
728
+ if (health.healthy) {
729
+ const installedVersion = getInstalledOpenCodeVersion();
730
+ if (checkIsOpenCodeServerStale(health.version, installedVersion)) {
731
+ console.log(`[OpenCode] Adopted server is stale (running v${health.version}, on-disk v${installedVersion}) — restarting onto current binary`);
732
+ await stopAdoptedOpenCodeServer(serverUrl);
733
+ // fall through to spawn a fresh server on the current binary
734
+ }
735
+ else {
736
+ saveHealthyOpenCodeServerOwnership(endpoint, serverUrl.hostname, port);
737
+ return; // healthy and current (or version unknown) → adopt as-is
738
+ }
739
+ }
740
+ else if (checkHasOwnedOpenCodeProcess(endpoint)) {
741
+ // A persisted identity lets a fresh hot worker recover the supervisor's
742
+ // initial server or a replacement started by an earlier worker generation.
743
+ await stopAdoptedOpenCodeServer(serverUrl);
744
+ }
745
+ const opencodeCmd = getToolCommand('opencode');
746
+ console.log(`[OpenCode] Starting server on port ${port}... (${opencodeCmd})`);
747
+ const serverArgs = ['serve', '--hostname', '127.0.0.1', '--port', port];
748
+ const serverEnv = {
749
+ ...getOpenCodeChildEnv(),
750
+ PATH: `${npmPrefix}/bin:${process.env.PATH}`,
751
+ // Enable OpenCode's background-subagents (experimental in 1.17.11): lets the
752
+ // bot detach a synchronous sub-agent that is blocking a session via
753
+ // `POST /experimental/session/:id/background` so a new message can be
754
+ // answered while the sub-agent keeps running (its result is auto-injected
755
+ // back when it finishes). Without this the whole session is locked for the
756
+ // entire sub-agent run and the topic looks hung.
757
+ OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS: 'true',
758
+ };
759
+ // The bot's compaction plugin, so an overflow compaction (which never gets the
760
+ // bot's per-invocation instruction) still names the loaded skills. Installed
761
+ // before the spawn so the new server's first folder instance already loads it.
762
+ (0, openCodeCompactPlugin_1.installOpenCodeCompactPlugin)();
763
+ let startupChild = null;
764
+ let startupHostedProcess = null;
765
+ let startupDirectProcessOwnership = null;
766
+ let startupError = null;
767
+ let hasServerBecomeReady = false;
768
+ const checkIsStartupProcessRunning = () => {
769
+ if (startupChild && (startupError !== null || startupChild.exitCode !== null)) {
770
+ return false;
771
+ }
772
+ const startupProcessOwnership = startupDirectProcessOwnership ?? startupHostedProcess;
773
+ return !startupProcessOwnership || checkIsProcessIdentityCurrent(startupProcessOwnership);
774
+ };
775
+ if (process.env[exports.openCodeExternalHostEnvName] === exports.openCodeExternalHostEnvValue) {
776
+ const hostedProcessIdentity = await startExternallyParentedProcess(opencodeCmd, serverArgs, serverEnv, {
777
+ prepareProcessIdentity: (processIdentity) => {
778
+ saveOpenCodeServerProcessOwnership({
779
+ ...processIdentity,
780
+ endpoint,
781
+ signalProcessGroup: true,
782
+ state: 'starting',
783
+ });
784
+ },
785
+ });
786
+ startupHostedProcess = {
787
+ ...hostedProcessIdentity,
788
+ endpoint,
789
+ signalProcessGroup: true,
790
+ state: 'starting',
791
+ };
792
+ ownedOpenCodeProcess = startupHostedProcess;
793
+ openCodeProcess = null;
794
+ console.log(`[OpenCode] Server process ${startupHostedProcess.pid} is hosted outside the hot worker tree`);
795
+ }
796
+ else {
797
+ const child = (0, child_process_1.spawn)(opencodeCmd, serverArgs, {
798
+ env: serverEnv,
799
+ detached: process.platform !== 'win32',
800
+ stdio: ['ignore', 'pipe', 'pipe'],
801
+ });
802
+ startupChild = child;
803
+ const directProcessIdentity = child.pid ? getProcessIdentity(child.pid) : null;
804
+ startupDirectProcessOwnership = directProcessIdentity
805
+ ? { ...directProcessIdentity, endpoint, signalProcessGroup: true, state: 'starting' }
806
+ : null;
807
+ openCodeProcess = child;
808
+ ownedOpenCodeProcess = startupDirectProcessOwnership;
809
+ child.stdout?.on('data', (data) => {
810
+ console.log(`[OpenCode Server] ${data.toString().trim()}`);
811
+ });
812
+ child.stderr?.on('data', (data) => {
813
+ console.error(`[OpenCode Server] ${data.toString().trim()}`);
814
+ });
815
+ child.once('error', (error) => {
816
+ startupError = error;
817
+ });
818
+ child.on('exit', (code, signal) => {
819
+ console.log(`[OpenCode Server] Process exited with code ${code}, signal ${signal}`);
820
+ if (openCodeProcess === child) {
821
+ openCodeProcess = null;
822
+ }
823
+ if (!intentionallyStoppedProcesses.has(child) &&
824
+ !relinquishedProcesses.has(child) &&
825
+ hasServerBecomeReady &&
826
+ onServerExitCallback) {
827
+ onServerExitCallback(code, signal);
828
+ }
829
+ if (startupDirectProcessOwnership) {
830
+ clearOwnedOpenCodeProcessOwnership(startupDirectProcessOwnership);
831
+ }
832
+ });
833
+ if (process.env[exports.openCodeOwnershipFileEnvName]) {
834
+ if (!startupDirectProcessOwnership) {
835
+ intentionallyStoppedProcesses.add(child);
836
+ child.kill('SIGKILL');
837
+ throw new Error('OpenCode server process identity could not be captured');
838
+ }
839
+ const directProcessOwnership = startupDirectProcessOwnership;
840
+ try {
841
+ saveOpenCodeServerProcessOwnership(directProcessOwnership);
842
+ }
843
+ catch (error) {
844
+ intentionallyStoppedProcesses.add(child);
845
+ await stopOpenCodeProcessOwnership(directProcessOwnership, () => checkIsProcessIdentityCurrent(directProcessOwnership));
846
+ throw error;
847
+ }
848
+ }
849
+ }
850
+ try {
851
+ // Wait for server to become ready
852
+ const healthUrl = `${process.env.OPENCODE_URL || exports.defaultOpenCodeUrl}/global/health`;
853
+ for (let i = 0; i < 15; i++) {
854
+ await (0, utils_1.sleep)(1000);
855
+ try {
856
+ const response = await fetch(healthUrl, { signal: AbortSignal.timeout(2000) });
857
+ if (response.ok) {
858
+ if (!checkIsStartupProcessRunning()) {
859
+ throw startupError ?? new Error('OpenCode server failed during readiness');
860
+ }
861
+ const startupProcessOwnership = startupDirectProcessOwnership ?? startupHostedProcess;
862
+ if (startupProcessOwnership) {
863
+ const readyProcessOwnership = {
864
+ ...startupProcessOwnership,
865
+ state: 'ready',
866
+ };
867
+ saveOpenCodeServerProcessOwnership(readyProcessOwnership);
868
+ if (!checkIsStartupProcessRunning()) {
869
+ throw startupError ?? new Error('OpenCode server failed during readiness');
870
+ }
871
+ ownedOpenCodeProcess = readyProcessOwnership;
872
+ }
873
+ hasServerBecomeReady = true;
874
+ console.log(`[OpenCode] Server ready`);
875
+ return;
876
+ }
877
+ }
878
+ catch {
879
+ // not ready yet
880
+ }
881
+ if (!checkIsStartupProcessRunning()) {
882
+ throw startupError ?? new Error('OpenCode server failed to start');
883
+ }
884
+ }
885
+ throw new Error('OpenCode server did not become ready within 15 seconds');
886
+ }
887
+ catch (error) {
888
+ const doesOwnFailedStartup = startupChild
889
+ ? openCodeProcess === startupChild
890
+ : ownedOpenCodeProcess === startupHostedProcess;
891
+ const failedStartupOwnership = startupDirectProcessOwnership ?? startupHostedProcess;
892
+ if (doesOwnFailedStartup && failedStartupOwnership) {
893
+ await stopOpenCodeProcessOwnership(failedStartupOwnership, () => checkIsProcessIdentityCurrent(failedStartupOwnership));
894
+ }
895
+ throw error;
896
+ }
897
+ }
898
+ function ensureOpenCodeServer() {
899
+ return runOpenCodeServerLifecycle(ensureOpenCodeServerUnlocked);
900
+ }
901
+ /**
902
+ * @description Force the current OpenCode server generation to stop and start
903
+ * again. Unlike {@link ensureOpenCodeServer}, this NEVER adopts a healthy
904
+ * process: provider OAuth performed by `opencode auth login` writes auth.json
905
+ * out-of-band, while a live server keeps the old credential in memory. The
906
+ * caller owns restoring active sessions after this controlled restart.
907
+ */
908
+ function restartOpenCodeServer() {
909
+ return runOpenCodeServerLifecycle(async () => {
910
+ const serverUrl = new URL(process.env.OPENCODE_URL || exports.defaultOpenCodeUrl);
911
+ await stopAdoptedOpenCodeServer(serverUrl);
912
+ await ensureOpenCodeServerUnlocked();
913
+ });
914
+ }
915
+ function stopOpenCodeServer() {
916
+ const child = openCodeProcess;
917
+ const endpoint = new URL(process.env.OPENCODE_URL || exports.defaultOpenCodeUrl).origin;
918
+ const inMemoryOwnership = ownedOpenCodeProcess;
919
+ const directlyOwnedProcess = child && inMemoryOwnership &&
920
+ inMemoryOwnership.pid === child.pid &&
921
+ inMemoryOwnership.endpoint === endpoint &&
922
+ checkIsProcessIdentityCurrent(inMemoryOwnership)
923
+ ? inMemoryOwnership
924
+ : null;
925
+ const processOwnership = directlyOwnedProcess ?? getOwnedOpenCodeProcessOwnership(endpoint);
926
+ if (child) {
927
+ intentionallyStoppedProcesses.add(child);
928
+ }
929
+ if (processOwnership) {
930
+ console.log(`[OpenCode] Stopping server process ${processOwnership.pid}...`);
931
+ if (directlyOwnedProcess ||
932
+ checkIsOpenCodeProcessOwnershipCurrent(processOwnership)) {
933
+ signalProcessIdentity(processOwnership, 'SIGTERM', processOwnership.signalProcessGroup);
934
+ }
935
+ if (!checkIsProcessIdentityCurrent(processOwnership)) {
936
+ clearOwnedOpenCodeProcessOwnership(processOwnership);
937
+ }
938
+ }
939
+ else if (child && !child.killed) {
940
+ child.kill('SIGTERM');
941
+ }
942
+ }
943
+ //# sourceMappingURL=installManager.js.map