charness 3.2.0 → 3.3.1

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 (313) hide show
  1. package/.env.example +3 -6
  2. package/DEVELOPMENT.md +15 -0
  3. package/README.md +111 -38
  4. package/SETUP.md +121 -16
  5. package/dist/adapters/adapterEventRouting.d.ts +2 -1
  6. package/dist/adapters/adapterEventRouting.d.ts.map +1 -1
  7. package/dist/adapters/adapterEventRouting.js +3 -0
  8. package/dist/adapters/adapterEventRouting.js.map +1 -1
  9. package/dist/adapters/adapterNames.d.ts +13 -0
  10. package/dist/adapters/adapterNames.d.ts.map +1 -1
  11. package/dist/adapters/adapterNames.js +16 -0
  12. package/dist/adapters/adapterNames.js.map +1 -1
  13. package/dist/adapters/backendUnavailableError.d.ts +11 -0
  14. package/dist/adapters/backendUnavailableError.d.ts.map +1 -0
  15. package/dist/adapters/backendUnavailableError.js +19 -0
  16. package/dist/adapters/backendUnavailableError.js.map +1 -0
  17. package/dist/adapters/claudeCliAdapter.d.ts +29 -6
  18. package/dist/adapters/claudeCliAdapter.d.ts.map +1 -1
  19. package/dist/adapters/claudeCliAdapter.js +70 -16
  20. package/dist/adapters/claudeCliAdapter.js.map +1 -1
  21. package/dist/adapters/claudeJsonStreamAdapter.d.ts +36 -3
  22. package/dist/adapters/claudeJsonStreamAdapter.d.ts.map +1 -1
  23. package/dist/adapters/claudeJsonStreamAdapter.js +93 -30
  24. package/dist/adapters/claudeJsonStreamAdapter.js.map +1 -1
  25. package/dist/adapters/createAdapter.d.ts +3 -14
  26. package/dist/adapters/createAdapter.d.ts.map +1 -1
  27. package/dist/adapters/createAdapter.js +9 -19
  28. package/dist/adapters/createAdapter.js.map +1 -1
  29. package/dist/adapters/openCodeAdapter.d.ts +140 -12
  30. package/dist/adapters/openCodeAdapter.d.ts.map +1 -1
  31. package/dist/adapters/openCodeAdapter.js +385 -119
  32. package/dist/adapters/openCodeAdapter.js.map +1 -1
  33. package/dist/apiErrorRetry.d.ts +70 -6
  34. package/dist/apiErrorRetry.d.ts.map +1 -1
  35. package/dist/apiErrorRetry.js +312 -34
  36. package/dist/apiErrorRetry.js.map +1 -1
  37. package/dist/apiRetryKick.d.ts +26 -1
  38. package/dist/apiRetryKick.d.ts.map +1 -1
  39. package/dist/apiRetryKick.js +41 -2
  40. package/dist/apiRetryKick.js.map +1 -1
  41. package/dist/bot.d.ts +2 -1
  42. package/dist/bot.d.ts.map +1 -1
  43. package/dist/bot.js +736 -184
  44. package/dist/bot.js.map +1 -1
  45. package/dist/cli/claudeProfiles.d.ts +1 -1
  46. package/dist/cli/claudeProfiles.js +1 -1
  47. package/dist/cli/hot.d.ts +7 -1
  48. package/dist/cli/hot.d.ts.map +1 -1
  49. package/dist/cli/hot.js +29 -3
  50. package/dist/cli/hot.js.map +1 -1
  51. package/dist/configDirFile.d.ts +73 -0
  52. package/dist/configDirFile.d.ts.map +1 -0
  53. package/dist/configDirFile.js +216 -0
  54. package/dist/configDirFile.js.map +1 -0
  55. package/dist/connectors/telegram/commands/autoContinueLimits.d.ts +2 -2
  56. package/dist/connectors/telegram/commands/autoContinueLimits.d.ts.map +1 -1
  57. package/dist/connectors/telegram/commands/autoContinueLimits.js +4 -4
  58. package/dist/connectors/telegram/commands/autoContinueLimits.js.map +1 -1
  59. package/dist/connectors/telegram/commands/backendSwitch.d.ts +25 -0
  60. package/dist/connectors/telegram/commands/backendSwitch.d.ts.map +1 -0
  61. package/dist/connectors/telegram/commands/backendSwitch.js +104 -0
  62. package/dist/connectors/telegram/commands/backendSwitch.js.map +1 -0
  63. package/dist/connectors/telegram/commands/callbackMessage.d.ts +12 -0
  64. package/dist/connectors/telegram/commands/callbackMessage.d.ts.map +1 -1
  65. package/dist/connectors/telegram/commands/callbackMessage.js +24 -0
  66. package/dist/connectors/telegram/commands/callbackMessage.js.map +1 -1
  67. package/dist/connectors/telegram/commands/callbackToast.d.ts +36 -0
  68. package/dist/connectors/telegram/commands/callbackToast.d.ts.map +1 -0
  69. package/dist/connectors/telegram/commands/callbackToast.js +83 -0
  70. package/dist/connectors/telegram/commands/callbackToast.js.map +1 -0
  71. package/dist/connectors/telegram/commands/claudeAccounts.d.ts +18 -0
  72. package/dist/connectors/telegram/commands/claudeAccounts.d.ts.map +1 -1
  73. package/dist/connectors/telegram/commands/claudeAccounts.js +220 -66
  74. package/dist/connectors/telegram/commands/claudeAccounts.js.map +1 -1
  75. package/dist/connectors/telegram/commands/displayModes.d.ts.map +1 -1
  76. package/dist/connectors/telegram/commands/displayModes.js +4 -2
  77. package/dist/connectors/telegram/commands/displayModes.js.map +1 -1
  78. package/dist/connectors/telegram/commands/fallbackChain.d.ts +5 -8
  79. package/dist/connectors/telegram/commands/fallbackChain.d.ts.map +1 -1
  80. package/dist/connectors/telegram/commands/fallbackChain.js +183 -193
  81. package/dist/connectors/telegram/commands/fallbackChain.js.map +1 -1
  82. package/dist/connectors/telegram/commands/limitsBoard.d.ts +40 -0
  83. package/dist/connectors/telegram/commands/limitsBoard.d.ts.map +1 -0
  84. package/dist/connectors/telegram/commands/limitsBoard.js +281 -0
  85. package/dist/connectors/telegram/commands/limitsBoard.js.map +1 -0
  86. package/dist/connectors/telegram/commands/modelPage.d.ts +130 -0
  87. package/dist/connectors/telegram/commands/modelPage.d.ts.map +1 -0
  88. package/dist/connectors/telegram/commands/modelPage.js +120 -0
  89. package/dist/connectors/telegram/commands/modelPage.js.map +1 -0
  90. package/dist/connectors/telegram/commands/modelProviders.d.ts +9 -1
  91. package/dist/connectors/telegram/commands/modelProviders.d.ts.map +1 -1
  92. package/dist/connectors/telegram/commands/modelProviders.js +203 -111
  93. package/dist/connectors/telegram/commands/modelProviders.js.map +1 -1
  94. package/dist/connectors/telegram/commands/stt.d.ts +32 -0
  95. package/dist/connectors/telegram/commands/stt.d.ts.map +1 -0
  96. package/dist/connectors/telegram/commands/stt.js +460 -0
  97. package/dist/connectors/telegram/commands/stt.js.map +1 -0
  98. package/dist/effortLevels.d.ts +57 -7
  99. package/dist/effortLevels.d.ts.map +1 -1
  100. package/dist/effortLevels.js +65 -9
  101. package/dist/effortLevels.js.map +1 -1
  102. package/dist/i18n/de.d.ts.map +1 -1
  103. package/dist/i18n/de.js +160 -17
  104. package/dist/i18n/de.js.map +1 -1
  105. package/dist/i18n/en.d.ts.map +1 -1
  106. package/dist/i18n/en.js +160 -17
  107. package/dist/i18n/en.js.map +1 -1
  108. package/dist/i18n/es.d.ts.map +1 -1
  109. package/dist/i18n/es.js +160 -17
  110. package/dist/i18n/es.js.map +1 -1
  111. package/dist/i18n/fr.d.ts.map +1 -1
  112. package/dist/i18n/fr.js +160 -17
  113. package/dist/i18n/fr.js.map +1 -1
  114. package/dist/i18n/hi.d.ts.map +1 -1
  115. package/dist/i18n/hi.js +160 -17
  116. package/dist/i18n/hi.js.map +1 -1
  117. package/dist/i18n/ja.d.ts.map +1 -1
  118. package/dist/i18n/ja.js +160 -17
  119. package/dist/i18n/ja.js.map +1 -1
  120. package/dist/i18n/ka.d.ts.map +1 -1
  121. package/dist/i18n/ka.js +160 -17
  122. package/dist/i18n/ka.js.map +1 -1
  123. package/dist/i18n/pt.d.ts.map +1 -1
  124. package/dist/i18n/pt.js +160 -17
  125. package/dist/i18n/pt.js.map +1 -1
  126. package/dist/i18n/ru.d.ts.map +1 -1
  127. package/dist/i18n/ru.js +160 -17
  128. package/dist/i18n/ru.js.map +1 -1
  129. package/dist/i18n/uk.d.ts.map +1 -1
  130. package/dist/i18n/uk.js +160 -17
  131. package/dist/i18n/uk.js.map +1 -1
  132. package/dist/i18n/uz.d.ts.map +1 -1
  133. package/dist/i18n/uz.js +160 -17
  134. package/dist/i18n/uz.js.map +1 -1
  135. package/dist/i18n/zh.d.ts.map +1 -1
  136. package/dist/i18n/zh.js +160 -17
  137. package/dist/i18n/zh.js.map +1 -1
  138. package/dist/installManager.d.ts +20 -4
  139. package/dist/installManager.d.ts.map +1 -1
  140. package/dist/installManager.js +82 -14
  141. package/dist/installManager.js.map +1 -1
  142. package/dist/instanceSettings.d.ts +52 -0
  143. package/dist/instanceSettings.d.ts.map +1 -0
  144. package/dist/instanceSettings.js +136 -0
  145. package/dist/instanceSettings.js.map +1 -0
  146. package/dist/pinnedStatus.d.ts +7 -1
  147. package/dist/pinnedStatus.d.ts.map +1 -1
  148. package/dist/pinnedStatus.js +1 -1
  149. package/dist/pinnedStatus.js.map +1 -1
  150. package/dist/requests/requestLedger.d.ts +8 -0
  151. package/dist/requests/requestLedger.d.ts.map +1 -1
  152. package/dist/requests/requestLedger.js +19 -1
  153. package/dist/requests/requestLedger.js.map +1 -1
  154. package/dist/scheduler/mcpSurface.js +4 -4
  155. package/dist/scheduler/mcpSurface.js.map +1 -1
  156. package/dist/shutdown.d.ts +14 -0
  157. package/dist/shutdown.d.ts.map +1 -1
  158. package/dist/shutdown.js +16 -0
  159. package/dist/shutdown.js.map +1 -1
  160. package/dist/state.d.ts +54 -2
  161. package/dist/state.d.ts.map +1 -1
  162. package/dist/state.js +62 -1
  163. package/dist/state.js.map +1 -1
  164. package/dist/stt/sttAutoInstall.d.ts +39 -0
  165. package/dist/stt/sttAutoInstall.d.ts.map +1 -0
  166. package/dist/stt/sttAutoInstall.js +158 -0
  167. package/dist/stt/sttAutoInstall.js.map +1 -0
  168. package/dist/stt/sttChildEnv.d.ts +11 -0
  169. package/dist/stt/sttChildEnv.d.ts.map +1 -0
  170. package/dist/stt/sttChildEnv.js +30 -0
  171. package/dist/stt/sttChildEnv.js.map +1 -0
  172. package/dist/stt/sttConfigEdit.d.ts +71 -0
  173. package/dist/stt/sttConfigEdit.d.ts.map +1 -0
  174. package/dist/stt/sttConfigEdit.js +144 -0
  175. package/dist/stt/sttConfigEdit.js.map +1 -0
  176. package/dist/stt/sttInstall.d.ts +147 -0
  177. package/dist/stt/sttInstall.d.ts.map +1 -0
  178. package/dist/stt/sttInstall.js +491 -0
  179. package/dist/stt/sttInstall.js.map +1 -0
  180. package/dist/stt/sttInstallEntry.d.ts +2 -0
  181. package/dist/stt/sttInstallEntry.d.ts.map +1 -0
  182. package/dist/stt/sttInstallEntry.js +31 -0
  183. package/dist/stt/sttInstallEntry.js.map +1 -0
  184. package/dist/stt/sttInstallReporter.d.ts +45 -0
  185. package/dist/stt/sttInstallReporter.d.ts.map +1 -0
  186. package/dist/stt/sttInstallReporter.js +57 -0
  187. package/dist/stt/sttInstallReporter.js.map +1 -0
  188. package/dist/stt/sttRuntime.d.ts +35 -0
  189. package/dist/stt/sttRuntime.d.ts.map +1 -0
  190. package/dist/stt/sttRuntime.js +73 -0
  191. package/dist/stt/sttRuntime.js.map +1 -0
  192. package/dist/stt/sttScreenPlan.d.ts +193 -0
  193. package/dist/stt/sttScreenPlan.d.ts.map +1 -0
  194. package/dist/stt/sttScreenPlan.js +541 -0
  195. package/dist/stt/sttScreenPlan.js.map +1 -0
  196. package/dist/stt/sttSettings.d.ts +201 -0
  197. package/dist/stt/sttSettings.d.ts.map +1 -0
  198. package/dist/stt/sttSettings.js +387 -0
  199. package/dist/stt/sttSettings.js.map +1 -0
  200. package/dist/stt/sttSidecarOwner.d.ts +115 -0
  201. package/dist/stt/sttSidecarOwner.d.ts.map +1 -0
  202. package/dist/stt/sttSidecarOwner.js +475 -0
  203. package/dist/stt/sttSidecarOwner.js.map +1 -0
  204. package/dist/stt/transcribeChain.d.ts +36 -0
  205. package/dist/stt/transcribeChain.d.ts.map +1 -0
  206. package/dist/stt/transcribeChain.js +42 -0
  207. package/dist/stt/transcribeChain.js.map +1 -0
  208. package/dist/types.d.ts +77 -4
  209. package/dist/types.d.ts.map +1 -1
  210. package/dist/utils/adapterSwitchSessionIds.d.ts +32 -0
  211. package/dist/utils/adapterSwitchSessionIds.d.ts.map +1 -0
  212. package/dist/utils/adapterSwitchSessionIds.js +44 -0
  213. package/dist/utils/adapterSwitchSessionIds.js.map +1 -0
  214. package/dist/utils/backendSwitchPlan.d.ts +63 -0
  215. package/dist/utils/backendSwitchPlan.d.ts.map +1 -0
  216. package/dist/utils/backendSwitchPlan.js +73 -0
  217. package/dist/utils/backendSwitchPlan.js.map +1 -0
  218. package/dist/utils/claudeAccountPickerPlan.d.ts +12 -1
  219. package/dist/utils/claudeAccountPickerPlan.d.ts.map +1 -1
  220. package/dist/utils/claudeAccountPickerPlan.js +20 -1
  221. package/dist/utils/claudeAccountPickerPlan.js.map +1 -1
  222. package/dist/utils/claudeTranscriptContent.d.ts +24 -0
  223. package/dist/utils/claudeTranscriptContent.d.ts.map +1 -0
  224. package/dist/utils/claudeTranscriptContent.js +107 -0
  225. package/dist/utils/claudeTranscriptContent.js.map +1 -0
  226. package/dist/utils/claudeUsage.d.ts +47 -8
  227. package/dist/utils/claudeUsage.d.ts.map +1 -1
  228. package/dist/utils/claudeUsage.js +76 -14
  229. package/dist/utils/claudeUsage.js.map +1 -1
  230. package/dist/utils/claudeUsageRefresher.d.ts +8 -1
  231. package/dist/utils/claudeUsageRefresher.d.ts.map +1 -1
  232. package/dist/utils/claudeUsageRefresher.js +9 -4
  233. package/dist/utils/claudeUsageRefresher.js.map +1 -1
  234. package/dist/utils/effortPickerPlan.d.ts +54 -0
  235. package/dist/utils/effortPickerPlan.d.ts.map +1 -0
  236. package/dist/utils/effortPickerPlan.js +56 -0
  237. package/dist/utils/effortPickerPlan.js.map +1 -0
  238. package/dist/utils/ensureSessionPlan.d.ts +20 -4
  239. package/dist/utils/ensureSessionPlan.d.ts.map +1 -1
  240. package/dist/utils/ensureSessionPlan.js +17 -4
  241. package/dist/utils/ensureSessionPlan.js.map +1 -1
  242. package/dist/utils/fallbackBridge.d.ts +6 -2
  243. package/dist/utils/fallbackBridge.d.ts.map +1 -1
  244. package/dist/utils/fallbackBridge.js +10 -3
  245. package/dist/utils/fallbackBridge.js.map +1 -1
  246. package/dist/utils/fallbackChain.d.ts +36 -0
  247. package/dist/utils/fallbackChain.d.ts.map +1 -1
  248. package/dist/utils/fallbackChain.js +65 -1
  249. package/dist/utils/fallbackChain.js.map +1 -1
  250. package/dist/utils/fallbackSwitchNotice.d.ts +41 -0
  251. package/dist/utils/fallbackSwitchNotice.d.ts.map +1 -0
  252. package/dist/utils/fallbackSwitchNotice.js +75 -0
  253. package/dist/utils/fallbackSwitchNotice.js.map +1 -0
  254. package/dist/utils/fileSendService.d.ts +33 -10
  255. package/dist/utils/fileSendService.d.ts.map +1 -1
  256. package/dist/utils/fileSendService.js +78 -27
  257. package/dist/utils/fileSendService.js.map +1 -1
  258. package/dist/utils/jsonStreamHost.d.ts +39 -0
  259. package/dist/utils/jsonStreamHost.d.ts.map +1 -1
  260. package/dist/utils/jsonStreamHost.js +60 -1
  261. package/dist/utils/jsonStreamHost.js.map +1 -1
  262. package/dist/utils/limitEpisodeRecovery.d.ts +16 -2
  263. package/dist/utils/limitEpisodeRecovery.d.ts.map +1 -1
  264. package/dist/utils/limitEpisodeRecovery.js +44 -3
  265. package/dist/utils/limitEpisodeRecovery.js.map +1 -1
  266. package/dist/utils/limitSettings.d.ts +25 -0
  267. package/dist/utils/limitSettings.d.ts.map +1 -0
  268. package/dist/utils/limitSettings.js +31 -0
  269. package/dist/utils/limitSettings.js.map +1 -0
  270. package/dist/utils/limitsBoardPlan.d.ts +52 -0
  271. package/dist/utils/limitsBoardPlan.d.ts.map +1 -0
  272. package/dist/utils/limitsBoardPlan.js +93 -0
  273. package/dist/utils/limitsBoardPlan.js.map +1 -0
  274. package/dist/utils/openCodeUsage.d.ts +93 -0
  275. package/dist/utils/openCodeUsage.d.ts.map +1 -0
  276. package/dist/utils/openCodeUsage.js +248 -0
  277. package/dist/utils/openCodeUsage.js.map +1 -0
  278. package/dist/utils/operatorSwitchPlan.d.ts +61 -0
  279. package/dist/utils/operatorSwitchPlan.d.ts.map +1 -0
  280. package/dist/utils/operatorSwitchPlan.js +32 -0
  281. package/dist/utils/operatorSwitchPlan.js.map +1 -0
  282. package/dist/utils/promptDelivery.d.ts +40 -0
  283. package/dist/utils/promptDelivery.d.ts.map +1 -1
  284. package/dist/utils/promptDelivery.js +31 -0
  285. package/dist/utils/promptDelivery.js.map +1 -1
  286. package/dist/utils/recvPreviewRedaction.d.ts +14 -4
  287. package/dist/utils/recvPreviewRedaction.d.ts.map +1 -1
  288. package/dist/utils/recvPreviewRedaction.js +19 -7
  289. package/dist/utils/recvPreviewRedaction.js.map +1 -1
  290. package/dist/utils/startupReadiness.d.ts +3 -3
  291. package/dist/utils/startupReadiness.d.ts.map +1 -1
  292. package/dist/utils/startupReadiness.js +2 -2
  293. package/dist/utils/startupReadiness.js.map +1 -1
  294. package/dist/utils/threadStatusReport.d.ts +3 -1
  295. package/dist/utils/threadStatusReport.d.ts.map +1 -1
  296. package/dist/utils/threadStatusReport.js +4 -3
  297. package/dist/utils/threadStatusReport.js.map +1 -1
  298. package/dist/utils/timezone.d.ts +23 -0
  299. package/dist/utils/timezone.d.ts.map +1 -1
  300. package/dist/utils/timezone.js +38 -0
  301. package/dist/utils/timezone.js.map +1 -1
  302. package/dist/utils/transcribeAudio.d.ts +25 -12
  303. package/dist/utils/transcribeAudio.d.ts.map +1 -1
  304. package/dist/utils/transcribeAudio.js +39 -21
  305. package/dist/utils/transcribeAudio.js.map +1 -1
  306. package/dist/utils/usageRefreshBudget.d.ts +9 -0
  307. package/dist/utils/usageRefreshBudget.d.ts.map +1 -0
  308. package/dist/utils/usageRefreshBudget.js +27 -0
  309. package/dist/utils/usageRefreshBudget.js.map +1 -0
  310. package/examples/.env.example +7 -3
  311. package/examples/docker-compose.yml +9 -7
  312. package/package.json +5 -4
  313. package/stt/gigaam_sidecar.py +800 -0
@@ -59,7 +59,7 @@ var __importStar = (this && this.__importStar) || (function () {
59
59
  };
60
60
  })();
61
61
  Object.defineProperty(exports, "__esModule", { value: true });
62
- exports.stderrTailMaxChars = exports.stdoutOversizeWarnBytes = exports.fifoWriteRetryDelayMs = exports.fifoWriteMaxRetries = exports.fifoOpenRetryDelayMs = exports.fifoOpenMaxTries = exports.pidFilePollIntervalMs = exports.pidFileWaitTimeoutMs = exports.wrapperCdFailExitCode = exports.jsonStreamTmuxPrefix = exports.jsonStreamRootDirName = void 0;
62
+ exports.claudeEffortFlag = exports.claudeModelFlag = exports.stderrTailMaxChars = exports.stdoutOversizeWarnBytes = exports.fifoWriteRetryDelayMs = exports.fifoWriteMaxRetries = exports.fifoOpenRetryDelayMs = exports.fifoOpenMaxTries = exports.pidKillWaitTimeoutMs = exports.pidExitPollIntervalMs = exports.pidExitWaitTimeoutMs = exports.pidFilePollIntervalMs = exports.pidFileWaitTimeoutMs = exports.wrapperCdFailExitCode = exports.jsonStreamTmuxPrefix = exports.jsonStreamRootDirName = void 0;
63
63
  exports.resolveJsonStreamRoot = resolveJsonStreamRoot;
64
64
  exports.resolveJsonStreamSessionDir = resolveJsonStreamSessionDir;
65
65
  exports.parseJsonStreamDirName = parseJsonStreamDirName;
@@ -68,11 +68,15 @@ exports.buildJsonStreamTmuxSessionName = buildJsonStreamTmuxSessionName;
68
68
  exports.parseJsonStreamTmuxSessionName = parseJsonStreamTmuxSessionName;
69
69
  exports.buildWrapperScript = buildWrapperScript;
70
70
  exports.readWrapperScriptConfigDir = readWrapperScriptConfigDir;
71
+ exports.parseWrapperScriptFlag = parseWrapperScriptFlag;
72
+ exports.readWrapperScriptLaunchFlags = readWrapperScriptLaunchFlags;
71
73
  exports.openFifoWriterNonBlocking = openFifoWriterNonBlocking;
72
74
  exports.writeFifoText = writeFifoText;
73
75
  exports.readPidFile = readPidFile;
74
76
  exports.readExitCodeFile = readExitCodeFile;
75
77
  exports.checkIsPidAlive = checkIsPidAlive;
78
+ exports.waitForPidExit = waitForPidExit;
79
+ exports.waitForPidExitOrKill = waitForPidExitOrKill;
76
80
  exports.waitForPidFile = waitForPidFile;
77
81
  exports.readStderrTail = readStderrTail;
78
82
  exports.getFileSize = getFileSize;
@@ -103,6 +107,11 @@ exports.wrapperCdFailExitCode = 96;
103
107
  /** How long a fresh spawn waits for the wrapper to write the `pid` file. */
104
108
  exports.pidFileWaitTimeoutMs = 5000;
105
109
  exports.pidFilePollIntervalMs = 100;
110
+ /** How long a stopped process is waited for: the CLI writes its transcript metadata back at exit, a moment after the signal. */
111
+ exports.pidExitWaitTimeoutMs = 5000;
112
+ exports.pidExitPollIntervalMs = 25;
113
+ /** How long a process that was killed (SIGKILL) after it ignored its stop is waited for: a kill takes effect at once, so this only bounds a stuck pid. */
114
+ exports.pidKillWaitTimeoutMs = 2000;
106
115
  /** FIFO write-open guard (P1 probe): `O_WRONLY|O_NONBLOCK` raises `ENXIO`
107
116
  * while nothing holds the read end — a BLOCKING open would hang forever.
108
117
  * Retried because claude opens its `0<>` end asynchronously during spawn;
@@ -212,6 +221,31 @@ function readWrapperScriptConfigDir(wrapperFile) {
212
221
  return null;
213
222
  }
214
223
  }
224
+ /** The claude flags a session's model and effort ride on — written by the spawn, read back from the wrapper at adopt. */
225
+ exports.claudeModelFlag = '--model';
226
+ exports.claudeEffortFlag = '--effort';
227
+ /**
228
+ * @description The value of `flag` on a wrapper script's command line, `null` when it has none. The bot's own
229
+ * quoting wraps every argument (`'--effort' 'xhigh'`), so a flag-looking text inside another argument never matches.
230
+ */
231
+ function parseWrapperScriptFlag(script, flag) {
232
+ return script.match(new RegExp(`(?:^|\\s)'${flag}'\\s+'([^']*)'`))?.[1] ?? null;
233
+ }
234
+ /**
235
+ * @description The `--model` and `--effort` a persisted wrapper script starts claude with, both `null` for an
236
+ * unreadable script. Read at adopt: the surviving process keeps what it was spawned with, so a later re-spawn
237
+ * (effort, model, account) passes on what it does not change instead of dropping it, and `/status`, the banner and
238
+ * `/effort` name the level a session really runs.
239
+ */
240
+ function readWrapperScriptLaunchFlags(wrapperFile) {
241
+ try {
242
+ const script = fs.readFileSync(wrapperFile, 'utf8');
243
+ return { model: parseWrapperScriptFlag(script, exports.claudeModelFlag), effort: parseWrapperScriptFlag(script, exports.claudeEffortFlag) };
244
+ }
245
+ catch {
246
+ return { model: null, effort: null };
247
+ }
248
+ }
215
249
  /**
216
250
  * @description Open the stdin FIFO for writing WITHOUT ever blocking: a plain
217
251
  * `open(O_WRONLY)` on a FIFO with no reader hangs forever (the P1 probe's first
@@ -283,6 +317,31 @@ function checkIsPidAlive(pid) {
283
317
  return false;
284
318
  }
285
319
  }
320
+ /** Wait (bounded) until `pid` is gone. `true` when it is, `false` when it still runs at the deadline. */
321
+ async function waitForPidExit(pid, timeoutMs = exports.pidExitWaitTimeoutMs) {
322
+ const deadline = Date.now() + timeoutMs;
323
+ while (checkIsPidAlive(pid)) {
324
+ if (Date.now() >= deadline)
325
+ return false;
326
+ await (0, promises_1.setTimeout)(exports.pidExitPollIntervalMs);
327
+ }
328
+ return true;
329
+ }
330
+ /**
331
+ * @description Wait (bounded) for `pid` to be gone and, when it still runs at the deadline, SIGKILL it and wait (bounded) again:
332
+ * whoever stops a process and then starts its replacement on the same conversation must not leave the two side by side.
333
+ * `kill` is injectable for a test of the `stuck` branch.
334
+ */
335
+ async function waitForPidExitOrKill(pid, options = {}) {
336
+ const { exitTimeoutMs = exports.pidExitWaitTimeoutMs, killTimeoutMs = exports.pidKillWaitTimeoutMs, kill = (target) => process.kill(target, 'SIGKILL') } = options;
337
+ if (await waitForPidExit(pid, exitTimeoutMs))
338
+ return 'exited';
339
+ try {
340
+ kill(pid);
341
+ }
342
+ catch { /* gone meanwhile, or not ours to kill: the second wait says which */ }
343
+ return (await waitForPidExit(pid, killTimeoutMs)) ? 'killed' : 'stuck';
344
+ }
286
345
  /** Wait (bounded) for the wrapper to write the `pid` file after tmux spawn.
287
346
  * Returns the pid, or `null` on timeout (spawn diagnostics read stderr). */
288
347
  async function waitForPidFile(pidFile, timeoutMs = exports.pidFileWaitTimeoutMs) {
@@ -1 +1 @@
1
- {"version":3,"file":"jsonStreamHost.js","sourceRoot":"","sources":["../../src/utils/jsonStreamHost.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jsonStreamHost.js","sourceRoot":"","sources":["../../src/utils/jsonStreamHost.ts"],"names":[],"mappings":"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"}
@@ -55,6 +55,13 @@ export declare const limitEpisodeMaxAgeMs: number;
55
55
  * leaving the sub-agent's out loses nothing and keeps a parked topic parked.
56
56
  */
57
57
  export declare function getLastTerminalErrorText(tailText: string): string | null;
58
+ /**
59
+ * @description When the parked error was written, read off the Claude transcript tail: the `timestamp` of the LAST
60
+ * API-error entry (`isApiErrorMessage`) whose text is the error's. `null` when there is no such entry or its timestamp
61
+ * does not parse — the caller falls back to the stdout log's mtime, which anything appended later (a background
62
+ * sub-agent, an ambient frame) moves.
63
+ */
64
+ export declare function getParkedErrorWrittenAtMs(transcriptTail: string, errorText: string): number | null;
58
65
  export type LimitEpisodeDecision =
59
66
  /** Arm the limit wait through the normal live-error path. */
60
67
  {
@@ -77,11 +84,18 @@ export type LimitEpisodeDecision =
77
84
  * - only the `usageLimit` class (a transient error is long past by restart time,
78
85
  * and an `auth` error needs a human, not a wait);
79
86
  * - only when the log is younger than {@link limitEpisodeMaxAgeMs}.
80
- * A `resetAt` already in the past needs no special case: the retry plan clamps a
81
- * negative delay to zero and the boot arming turns that into one prompt catch-up.
87
+ * The reset the error names is resolved against the moment it was WRITTEN —
88
+ * `errorWrittenAtMs` (the transcript's own timestamp, {@link getParkedErrorWrittenAtMs}),
89
+ * else the log's mtime — not against the boot: a clock-only reset (`resets 10:50pm`)
90
+ * resolves to its NEXT occurrence, so read at a boot after 22:50 it became TOMORROW
91
+ * 22:50 and a window that had already reset was announced as exhausted for another
92
+ * day. A `resetAt` that is in the past by now is a window that is over: the bot
93
+ * resumes at once without announcing a limit.
82
94
  */
83
95
  export declare function decideLimitEpisodeRecovery(input: {
84
96
  errorText: string | null;
97
+ /** When the error was written, from the transcript; absent → the log's mtime. */
98
+ errorWrittenAtMs?: number | null;
85
99
  /** Identity (size + mtime) of the session's `stdout.jsonl` right now. */
86
100
  log: LimitEpisodeMarker;
87
101
  /** Identity recorded when a previous boot armed from this log, if any. */
@@ -1 +1 @@
1
- {"version":3,"file":"limitEpisodeRecovery.d.ts","sourceRoot":"","sources":["../../src/utils/limitEpisodeRecovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEvE;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,QAAY,CAAC;AAElD;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,QAAsB,CAAC;AAExD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAexE;AAYD,MAAM,MAAM,oBAAoB;AAC9B,6DAA6D;AAC3D;IAAE,MAAM,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,kBAAkB,CAAA;CAAE;AAC5C,wDAAwD;GACtD;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,GAAG,eAAe,GAAG,OAAO,GAAG,cAAc,GAAG,gBAAgB,CAAA;CAAE,CAAC;AAgB1G;;;;;;;;;;;;;GAaG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE;IAChD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,yEAAyE;IACzE,GAAG,EAAE,kBAAkB,CAAC;IACxB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,OAAO,CAAC;CACxB,GAAG,oBAAoB,CAQvB"}
1
+ {"version":3,"file":"limitEpisodeRecovery.d.ts","sourceRoot":"","sources":["../../src/utils/limitEpisodeRecovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEvE;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,QAAY,CAAC;AAElD;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,QAAsB,CAAC;AAExD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAexE;AAiCD;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgBlG;AAED,MAAM,MAAM,oBAAoB;AAC9B,6DAA6D;AAC3D;IAAE,MAAM,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,kBAAkB,CAAA;CAAE;AAC5C,wDAAwD;GACtD;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,GAAG,eAAe,GAAG,OAAO,GAAG,cAAc,GAAG,gBAAgB,CAAA;CAAE,CAAC;AAgB1G;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE;IAChD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,iFAAiF;IACjF,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,yEAAyE;IACzE,GAAG,EAAE,kBAAkB,CAAC;IACxB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,OAAO,CAAC;CACxB,GAAG,oBAAoB,CAQvB"}
@@ -23,6 +23,7 @@
23
23
  Object.defineProperty(exports, "__esModule", { value: true });
24
24
  exports.limitEpisodeMaxAgeMs = exports.limitEpisodeTailMaxBytes = void 0;
25
25
  exports.getLastTerminalErrorText = getLastTerminalErrorText;
26
+ exports.getParkedErrorWrittenAtMs = getParkedErrorWrittenAtMs;
26
27
  exports.decideLimitEpisodeRecovery = decideLimitEpisodeRecovery;
27
28
  const apiErrorRetry_1 = require("../apiErrorRetry");
28
29
  const claudeStreamJson_1 = require("./claudeStreamJson");
@@ -88,6 +89,41 @@ function checkIsSessionActivity(action) {
88
89
  }
89
90
  return false;
90
91
  }
92
+ /** @description The text blocks of a transcript entry's message, joined. */
93
+ function getTranscriptEntryText(entry) {
94
+ const content = entry.message?.content;
95
+ if (typeof content === 'string')
96
+ return content;
97
+ if (!Array.isArray(content))
98
+ return '';
99
+ return content.map((block) => (block?.type === 'text' && typeof block.text === 'string' ? block.text : '')).join('');
100
+ }
101
+ /**
102
+ * @description When the parked error was written, read off the Claude transcript tail: the `timestamp` of the LAST
103
+ * API-error entry (`isApiErrorMessage`) whose text is the error's. `null` when there is no such entry or its timestamp
104
+ * does not parse — the caller falls back to the stdout log's mtime, which anything appended later (a background
105
+ * sub-agent, an ambient frame) moves.
106
+ */
107
+ function getParkedErrorWrittenAtMs(transcriptTail, errorText) {
108
+ let writtenAtMs = null;
109
+ const expectedText = errorText.trim();
110
+ for (const line of transcriptTail.split('\n')) {
111
+ if (!line.includes('"isApiErrorMessage"'))
112
+ continue;
113
+ let entry;
114
+ try {
115
+ entry = JSON.parse(line);
116
+ }
117
+ catch {
118
+ continue; // the tail's torn first line
119
+ }
120
+ if (entry.isApiErrorMessage !== true || getTranscriptEntryText(entry).trim() !== expectedText)
121
+ continue;
122
+ const parsedMs = typeof entry.timestamp === 'string' ? Date.parse(entry.timestamp) : Number.NaN;
123
+ writtenAtMs = Number.isNaN(parsedMs) ? null : parsedMs;
124
+ }
125
+ return writtenAtMs;
126
+ }
91
127
  /**
92
128
  * @description Whether this thread's trailing error is the one a previous boot
93
129
  * already acted on: the log is byte-for-byte the same file, at the same mtime, as
@@ -113,8 +149,13 @@ function checkIsSameHandledLog(handled, log) {
113
149
  * - only the `usageLimit` class (a transient error is long past by restart time,
114
150
  * and an `auth` error needs a human, not a wait);
115
151
  * - only when the log is younger than {@link limitEpisodeMaxAgeMs}.
116
- * A `resetAt` already in the past needs no special case: the retry plan clamps a
117
- * negative delay to zero and the boot arming turns that into one prompt catch-up.
152
+ * The reset the error names is resolved against the moment it was WRITTEN —
153
+ * `errorWrittenAtMs` (the transcript's own timestamp, {@link getParkedErrorWrittenAtMs}),
154
+ * else the log's mtime — not against the boot: a clock-only reset (`resets 10:50pm`)
155
+ * resolves to its NEXT occurrence, so read at a boot after 22:50 it became TOMORROW
156
+ * 22:50 and a window that had already reset was announced as exhausted for another
157
+ * day. A `resetAt` that is in the past by now is a window that is over: the bot
158
+ * resumes at once without announcing a limit.
118
159
  */
119
160
  function decideLimitEpisodeRecovery(input) {
120
161
  if (input.hasArmedRetry)
@@ -125,7 +166,7 @@ function decideLimitEpisodeRecovery(input) {
125
166
  return { action: 'skip', reason: 'noError' };
126
167
  if (input.now - input.log.mtimeMs > exports.limitEpisodeMaxAgeMs)
127
168
  return { action: 'skip', reason: 'stale' };
128
- const cls = (0, apiErrorRetry_1.classifyAgentApiError)(input.errorText, input.now);
169
+ const cls = (0, apiErrorRetry_1.classifyAgentApiError)(input.errorText, input.errorWrittenAtMs ?? input.log.mtimeMs);
129
170
  if (cls?.kind !== 'usageLimit')
130
171
  return { action: 'skip', reason: 'notUsageLimit' };
131
172
  return { action: 'arm', cls };
@@ -1 +1 @@
1
- {"version":3,"file":"limitEpisodeRecovery.js","sourceRoot":"","sources":["../../src/utils/limitEpisodeRecovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"limitEpisodeRecovery.js","sourceRoot":"","sources":["../../src/utils/limitEpisodeRecovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @description The two settings that decide what a usage limit does — «auto switch to a fallback model» and «wait for
3
+ * the reset and continue» — as the screens read them: the value in force, the topic's own choice and the General
4
+ * value. Shared by `/limits_autoswitch` (`fallbackChain.ts`), which edits them, and the `/limits` board
5
+ * (`limitsBoard.ts`), which shows them, so the two can never read a setting differently.
6
+ */
7
+ import type { SessionKey } from '../sessionKey';
8
+ import type { StateStore } from '../state';
9
+ /** The two settings: the ids the setting rows, the sub-menu and its callbacks are keyed by. */
10
+ export type LimitSettingId = 'switch' | 'wait';
11
+ export declare const limitSettingIds: readonly LimitSettingId[];
12
+ /** A setting's value as a screen reads it: what is in force, the topic's own choice (`undefined` = follows General) and the General value. */
13
+ export interface LimitSettingValue {
14
+ effective: boolean;
15
+ override: boolean | undefined;
16
+ generalValue: boolean;
17
+ }
18
+ /** The slice of the state store the settings are read from. */
19
+ export type LimitSettingsReader = Pick<StateStore, 'getClaudeAutoSwitchOnLimitGlobalDefault' | 'checkIsClaudeAutoSwitchOnLimitEnabled' | 'getClaudeAutoSwitchOnLimitOverride' | 'getAutoContinueOnLimitGlobalDefault' | 'checkIsAutoContinueOnLimitEnabled' | 'getAutoContinueOnLimitOverride'>;
20
+ /** A setting's value for the topic (General: the instance default, where there is no override). */
21
+ export declare function readLimitSetting(state: LimitSettingsReader, id: LimitSettingId, key: SessionKey, isGeneral: boolean): LimitSettingValue;
22
+ export declare function formatLimitSettingState(isEnabled: boolean): string;
23
+ /** Where a topic's setting value comes from: General, or the topic's own override. */
24
+ export declare function formatLimitSettingSource(setting: LimitSettingValue): string;
25
+ //# sourceMappingURL=limitSettings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limitSettings.d.ts","sourceRoot":"","sources":["../../src/utils/limitSettings.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,+FAA+F;AAC/F,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE/C,eAAO,MAAM,eAAe,EAAE,SAAS,cAAc,EAAuB,CAAC;AAE7E,8IAA8I;AAC9I,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,+DAA+D;AAC/D,MAAM,MAAM,mBAAmB,GAAG,IAAI,CACpC,UAAU,EACR,yCAAyC,GACzC,uCAAuC,GACvC,oCAAoC,GACpC,qCAAqC,GACrC,mCAAmC,GACnC,gCAAgC,CACnC,CAAC;AAEF,mGAAmG;AACnG,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,mBAAmB,EAAE,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,GAAG,iBAAiB,CAavI;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,OAAO,GAAG,MAAM,CAElE;AAED,sFAAsF;AACtF,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAE3E"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.limitSettingIds = void 0;
4
+ exports.readLimitSetting = readLimitSetting;
5
+ exports.formatLimitSettingState = formatLimitSettingState;
6
+ exports.formatLimitSettingSource = formatLimitSettingSource;
7
+ const i18n_1 = require("../i18n");
8
+ exports.limitSettingIds = ['switch', 'wait'];
9
+ /** A setting's value for the topic (General: the instance default, where there is no override). */
10
+ function readLimitSetting(state, id, key, isGeneral) {
11
+ if (id === 'switch') {
12
+ return {
13
+ effective: isGeneral ? state.getClaudeAutoSwitchOnLimitGlobalDefault() : state.checkIsClaudeAutoSwitchOnLimitEnabled(key),
14
+ override: isGeneral ? undefined : state.getClaudeAutoSwitchOnLimitOverride(key),
15
+ generalValue: state.getClaudeAutoSwitchOnLimitGlobalDefault(),
16
+ };
17
+ }
18
+ return {
19
+ effective: isGeneral ? state.getAutoContinueOnLimitGlobalDefault() : state.checkIsAutoContinueOnLimitEnabled(key),
20
+ override: isGeneral ? undefined : state.getAutoContinueOnLimitOverride(key),
21
+ generalValue: state.getAutoContinueOnLimitGlobalDefault(),
22
+ };
23
+ }
24
+ function formatLimitSettingState(isEnabled) {
25
+ return isEnabled ? (0, i18n_1.t)('autoContinueLimits.on') : (0, i18n_1.t)('autoContinueLimits.off');
26
+ }
27
+ /** Where a topic's setting value comes from: General, or the topic's own override. */
28
+ function formatLimitSettingSource(setting) {
29
+ return setting.override === undefined ? (0, i18n_1.t)('limits.sourceGeneral') : (0, i18n_1.t)('limits.sourceTopic');
30
+ }
31
+ //# sourceMappingURL=limitSettings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limitSettings.js","sourceRoot":"","sources":["../../src/utils/limitSettings.ts"],"names":[],"mappings":";;;AAkCA,4CAaC;AAED,0DAEC;AAGD,4DAEC;AAjDD,kCAA4B;AAMf,QAAA,eAAe,GAA8B,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAoB7E,mGAAmG;AACnG,SAAgB,gBAAgB,CAAC,KAA0B,EAAE,EAAkB,EAAE,GAAe,EAAE,SAAkB;IAClH,IAAI,EAAE,KAAK,QAAQ,EAAE,CAAC;QACpB,OAAO;YACL,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,uCAAuC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,qCAAqC,CAAC,GAAG,CAAC;YACzH,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,kCAAkC,CAAC,GAAG,CAAC;YAC/E,YAAY,EAAE,KAAK,CAAC,uCAAuC,EAAE;SAC9D,CAAC;IACJ,CAAC;IACD,OAAO;QACL,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,mCAAmC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,iCAAiC,CAAC,GAAG,CAAC;QACjH,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,8BAA8B,CAAC,GAAG,CAAC;QAC3E,YAAY,EAAE,KAAK,CAAC,mCAAmC,EAAE;KAC1D,CAAC;AACJ,CAAC;AAED,SAAgB,uBAAuB,CAAC,SAAkB;IACxD,OAAO,SAAS,CAAC,CAAC,CAAC,IAAA,QAAC,EAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,IAAA,QAAC,EAAC,wBAAwB,CAAC,CAAC;AAC9E,CAAC;AAED,sFAAsF;AACtF,SAAgB,wBAAwB,CAAC,OAA0B;IACjE,OAAO,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAA,QAAC,EAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,IAAA,QAAC,EAAC,oBAAoB,CAAC,CAAC;AAC9F,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * @description The `/limits` switch board in two pure pieces:
3
+ *
4
+ * - the ROWS — one per signed-in Claude account (in `/accounts` order), then one per connected OpenCode provider (in
5
+ * catalog order), each labelled `[✓ ]<program> · <account or provider>` and nothing else: the buttons carry no usage,
6
+ * no reset and no model (the figures do not fit a phone's button). The `✓` marks the active row only — where the
7
+ * topic runs now, in General the default Claude account. A signed-out account is not listed.
8
+ * - the USAGE BLOCK of the message above them — `Usage (% used)` and one line per signed-in Claude account that has
9
+ * a figure or a limit, then per connected OpenCode provider that reports usage (the ChatGPT subscription), each
10
+ * `<name> — <first usage line>` in exactly the wording `/accounts` prints under a row
11
+ * (`formatClaudeProfileUsageLines`, the one renderer both screens share).
12
+ *
13
+ * Pure: the clock, the zone, the localised program names and the state's figures come from the caller, so every rule
14
+ * is unit-tested. The screen is `connectors/telegram/commands/limitsBoard.ts`.
15
+ */
16
+ import { type FallbackChainEntry, type FallbackDetection } from './fallbackChain';
17
+ import { type OpenCodeProviderUsageRecord } from './openCodeUsage';
18
+ export interface LimitsBoardRow {
19
+ kind: 'claude' | 'opencode';
20
+ /** The Claude account's name, or the OpenCode provider's id — what a tap acts on. */
21
+ id: string;
22
+ label: string;
23
+ /** The topic runs on this account / provider (in General: this is the default Claude account). */
24
+ isActive: boolean;
25
+ }
26
+ export interface LimitsBoardInput {
27
+ detection: FallbackDetection;
28
+ /** Where the topic runs; in General the default Claude account (no model); `null` for no agent / an unknown OpenCode model. */
29
+ current: FallbackChainEntry | null;
30
+ /** The localised program names (`Claude` / `OpenCode`). */
31
+ words: {
32
+ claude: string;
33
+ openCode: string;
34
+ };
35
+ }
36
+ /** @description The board's rows: signed-in Claude accounts, then connected OpenCode providers. */
37
+ export declare function buildLimitsBoardRows(input: LimitsBoardInput): LimitsBoardRow[];
38
+ export interface LimitsUsageBlockInput {
39
+ detection: FallbackDetection;
40
+ /** What the poller recorded per OpenCode provider (`state.json` `openCodeProviderUsage`). */
41
+ openCodeProviderUsage: Readonly<Record<string, OpenCodeProviderUsageRecord>>;
42
+ nowMs: number;
43
+ /** The instance zone the reset instants are shown in. */
44
+ timezone: string;
45
+ }
46
+ /**
47
+ * @description The usage block of the `/limits` message: the heading and the entries — signed-in Claude accounts in
48
+ * `/accounts` order, then connected OpenCode providers with a recorded usage in catalog order. An account never polled
49
+ * and not limited, and a provider without usage, have no entry; with no entry at all there is no block (`''`, no heading).
50
+ */
51
+ export declare function formatLimitsUsageBlock(input: LimitsUsageBlockInput): string;
52
+ //# sourceMappingURL=limitsBoardPlan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limitsBoardPlan.d.ts","sourceRoot":"","sources":["../../src/utils/limitsBoardPlan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAqB,KAAK,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAMtF,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC5B,qFAAqF;IACrF,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,kGAAkG;IAClG,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,iBAAiB,CAAC;IAC7B,+HAA+H;IAC/H,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACnC,2DAA2D;IAC3D,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7C;AAOD,mGAAmG;AACnG,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,GAAG,cAAc,EAAE,CAqB9E;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,iBAAiB,CAAC;IAC7B,6FAA6F;IAC7F,qBAAqB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC,CAAC;IAC7E,KAAK,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAiBD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,CAc3E"}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ /**
3
+ * @description The `/limits` switch board in two pure pieces:
4
+ *
5
+ * - the ROWS — one per signed-in Claude account (in `/accounts` order), then one per connected OpenCode provider (in
6
+ * catalog order), each labelled `[✓ ]<program> · <account or provider>` and nothing else: the buttons carry no usage,
7
+ * no reset and no model (the figures do not fit a phone's button). The `✓` marks the active row only — where the
8
+ * topic runs now, in General the default Claude account. A signed-out account is not listed.
9
+ * - the USAGE BLOCK of the message above them — `Usage (% used)` and one line per signed-in Claude account that has
10
+ * a figure or a limit, then per connected OpenCode provider that reports usage (the ChatGPT subscription), each
11
+ * `<name> — <first usage line>` in exactly the wording `/accounts` prints under a row
12
+ * (`formatClaudeProfileUsageLines`, the one renderer both screens share).
13
+ *
14
+ * Pure: the clock, the zone, the localised program names and the state's figures come from the caller, so every rule
15
+ * is unit-tested. The screen is `connectors/telegram/commands/limitsBoard.ts`.
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.buildLimitsBoardRows = buildLimitsBoardRows;
19
+ exports.formatLimitsUsageBlock = formatLimitsUsageBlock;
20
+ const i18n_1 = require("../i18n");
21
+ const claudeProfileUsageLines_1 = require("./claudeProfileUsageLines");
22
+ const fallbackChain_1 = require("./fallbackChain");
23
+ const openCodeUsage_1 = require("./openCodeUsage");
24
+ const activeMark = '✓ ';
25
+ /** The ChatGPT subscription's name beside its provider id in the usage block: `openai (ChatGPT)`. */
26
+ const chatGptBrandName = 'ChatGPT';
27
+ function buildRow(row) {
28
+ const { program, ...rest } = row;
29
+ return { ...rest, label: `${row.isActive ? activeMark : ''}${program} · ${row.id}` };
30
+ }
31
+ /** @description The board's rows: signed-in Claude accounts, then connected OpenCode providers. */
32
+ function buildLimitsBoardRows(input) {
33
+ const rows = [];
34
+ const { current } = input;
35
+ for (const profile of input.detection.claudeProfiles) {
36
+ if (profile.loggedIn === false)
37
+ continue;
38
+ rows.push(buildRow({
39
+ kind: 'claude',
40
+ id: profile.name,
41
+ program: input.words.claude,
42
+ isActive: current?.backend === 'claude' && current.profile === profile.name,
43
+ }));
44
+ }
45
+ for (const providerId of (0, fallbackChain_1.listOpenCodeProviders)(input.detection.openCodeModels)) {
46
+ rows.push(buildRow({
47
+ kind: 'opencode',
48
+ id: providerId,
49
+ program: input.words.openCode,
50
+ isActive: (0, fallbackChain_1.getRunningModelOfProvider)(current, providerId) !== null,
51
+ }));
52
+ }
53
+ return rows;
54
+ }
55
+ /**
56
+ * One usage line group: `<name> — <first line>` and the lines that hang under it (the limit mark after the windows), the
57
+ * way `/accounts` words them. `null` when the source has nothing to show (never polled and not limited).
58
+ */
59
+ function formatUsageEntry(name, usageLines) {
60
+ const [first, ...rest] = usageLines;
61
+ if (first === undefined)
62
+ return null;
63
+ return [`${name} — ${first.trimStart()}`, ...rest].join('\n');
64
+ }
65
+ /** The provider's name in the usage block: the ChatGPT subscription carries its brand, any other provider its id. */
66
+ function formatUsageProviderName(providerId) {
67
+ return providerId === openCodeUsage_1.chatGptProviderId ? `${providerId} (${chatGptBrandName})` : providerId;
68
+ }
69
+ /**
70
+ * @description The usage block of the `/limits` message: the heading and the entries — signed-in Claude accounts in
71
+ * `/accounts` order, then connected OpenCode providers with a recorded usage in catalog order. An account never polled
72
+ * and not limited, and a provider without usage, have no entry; with no entry at all there is no block (`''`, no heading).
73
+ */
74
+ function formatLimitsUsageBlock(input) {
75
+ const entries = [];
76
+ for (const profile of input.detection.claudeProfiles) {
77
+ if (profile.loggedIn === false)
78
+ continue;
79
+ const entry = formatUsageEntry(profile.name, (0, claudeProfileUsageLines_1.formatClaudeProfileUsageLines)(profile, input.timezone, input.nowMs));
80
+ if (entry !== null)
81
+ entries.push(entry);
82
+ }
83
+ for (const providerId of (0, fallbackChain_1.listOpenCodeProviders)(input.detection.openCodeModels)) {
84
+ const usage = input.openCodeProviderUsage[providerId]?.usage;
85
+ if (usage === undefined)
86
+ continue;
87
+ const entry = formatUsageEntry(formatUsageProviderName(providerId), (0, claudeProfileUsageLines_1.formatClaudeProfileUsageLines)({ usage }, input.timezone, input.nowMs));
88
+ if (entry !== null)
89
+ entries.push(entry);
90
+ }
91
+ return entries.length === 0 ? '' : [(0, i18n_1.t)('limits.usageHeading'), ...entries].join('\n');
92
+ }
93
+ //# sourceMappingURL=limitsBoardPlan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limitsBoardPlan.js","sourceRoot":"","sources":["../../src/utils/limitsBoardPlan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * @description The USAGE of OpenCode providers signed in through a SUBSCRIPTION — what `/limits` and `/accounts` print
3
+ * beside an OpenCode provider the way they print a Claude account's windows. v1 knows one provider: `openai` signed in
4
+ * with a ChatGPT subscription (an `oauth` record in OpenCode's `auth.json`), read off
5
+ * `GET https://chatgpt.com/backend-api/wham/usage` — the endpoint the Codex CLI and ChatGPT's own settings page use. It
6
+ * has no published schema; the field names below (`rate_limit.primary_window` / `secondary_window`, each with
7
+ * `used_percent`, `limit_window_seconds`, `reset_after_seconds`, `reset_at`) come from third-party documentation of it
8
+ * (the codex-lb proxy's API reference), so the parser is tolerant and an unknown shape yields no windows — the row just
9
+ * has no usage. API-key providers and other subscriptions have no reader: they show their auth kind only.
10
+ *
11
+ * Like a Claude profile's usage (`claudeUsage.ts`): the stored token is used as is and NEVER refreshed here (OpenCode
12
+ * renews it; a bot-side refresh would race it) — a token past its expiry is not sent and marks the snapshot stale; the
13
+ * token is never logged. Snapshots reuse the Claude shape (`ClaudeUsageSnapshot`: the primary window is `session`, the
14
+ * secondary `weekly_all`), so `formatClaudeProfileUsageLines` renders them unchanged. Pure except
15
+ * {@link readOpenCodeCredentials} (one file read) and the injectable fetch.
16
+ */
17
+ import { type ClaudeUsageBucket, type ClaudeUsageFetchResult, type ClaudeUsageSnapshot, type UsageFetchLike } from './claudeUsage';
18
+ export declare const chatGptUsageEndpoint = "https://chatgpt.com/backend-api/wham/usage";
19
+ /** The OpenCode provider a ChatGPT subscription signs in to. */
20
+ export declare const chatGptProviderId = "openai";
21
+ /** How a provider is signed in: through a subscription (`oauth`), an API key (`api`), or any other record. */
22
+ export type OpenCodeAuthKind = 'subscription' | 'apiKey' | 'unknown';
23
+ /**
24
+ * What `state.json` keeps per OpenCode provider (`openCodeProviderUsage`): how it is signed in, and for a subscription
25
+ * with a reader the last usage snapshot. Written by the poller only; a provider it does not list is never touched.
26
+ */
27
+ export interface OpenCodeProviderUsageRecord {
28
+ authKind: OpenCodeAuthKind;
29
+ usage?: ClaudeUsageSnapshot;
30
+ }
31
+ /**
32
+ * One provider's record in `auth.json`: its kind, and for a subscription the access token, its expiry and the account
33
+ * id. The token stays inside this object — nothing here logs or returns it other than to the reader that needs it.
34
+ */
35
+ export interface OpenCodeProviderCredential {
36
+ kind: OpenCodeAuthKind;
37
+ accessToken: string | null;
38
+ /** Epoch ms; `null` when the record carries none. */
39
+ expiresAtMs: number | null;
40
+ accountId: string | null;
41
+ }
42
+ /**
43
+ * @description The providers of a parsed `auth.json` with their credential kind; a malformed entry is skipped, never
44
+ * thrown on. `null` when the document is not an object.
45
+ */
46
+ export declare function parseOpenCodeCredentials(authJson: unknown): Record<string, OpenCodeProviderCredential> | null;
47
+ /** @description {@link parseOpenCodeCredentials} of the file at `authFilePath`; `null` when it is missing or unreadable. */
48
+ export declare function readOpenCodeCredentials(authFilePath: string): Record<string, OpenCodeProviderCredential> | null;
49
+ /**
50
+ * @description The windows of a ChatGPT usage response as Claude-shaped buckets. A window is the 5-hour `session` when
51
+ * its length (`limit_window_seconds`) is a day or less, else the weekly one; a window that names no length is read by
52
+ * its place (primary = 5-hour, secondary = weekly). An account with one window only (a weekly-only plan) yields that
53
+ * bucket. A body of another shape yields none.
54
+ */
55
+ export declare function parseChatGptUsageResponse(body: unknown, nowMs: number): ClaudeUsageBucket[];
56
+ /**
57
+ * @description One GET of the ChatGPT usage endpoint with the subscription's token and account id (the id off the record,
58
+ * else off the token). Never throws; the token never appears in the result.
59
+ */
60
+ export declare function fetchChatGptUsage(credential: OpenCodeProviderCredential, options?: {
61
+ fetchImpl?: UsageFetchLike;
62
+ timeoutMs?: number;
63
+ nowMs?: number;
64
+ }): Promise<ClaudeUsageFetchResult>;
65
+ /** A provider's subscription usage reader: one poll with the stored credential. */
66
+ export type OpenCodeUsageReader = (credential: OpenCodeProviderCredential) => Promise<ClaudeUsageFetchResult>;
67
+ /** The subscription usage readers by provider id; a provider not here shows only its auth kind. */
68
+ export declare const openCodeUsageReaders: Readonly<Record<string, OpenCodeUsageReader>>;
69
+ export interface OpenCodeUsagePollerDeps {
70
+ /** `auth.json` as parsed; `null` when it is missing or unreadable (nothing is touched then). */
71
+ readCredentials: () => Record<string, OpenCodeProviderCredential> | null;
72
+ getRecord: (providerId: string) => OpenCodeProviderUsageRecord | undefined;
73
+ saveRecord: (providerId: string, record: OpenCodeProviderUsageRecord) => void;
74
+ /** The reader of a provider's subscription usage; absent ⇒ none exists. Injectable so a test never reaches a network. */
75
+ readers?: Readonly<Record<string, OpenCodeUsageReader>>;
76
+ now?: () => number;
77
+ log?: (line: string) => void;
78
+ }
79
+ export interface OpenCodeUsagePoller {
80
+ /** Poll every provider `auth.json` lists; with `maxAgeMs`, only the subscriptions whose snapshot is older (or stale). */
81
+ refreshAll: (options?: {
82
+ maxAgeMs?: number;
83
+ }) => Promise<void>;
84
+ }
85
+ /**
86
+ * @description The poller of OpenCode providers' usage. For each provider in `auth.json`: an API key or an unknown record
87
+ * is stored as its kind alone (no usage); a subscription with a reader is polled — an expired token is not sent and marks
88
+ * the snapshot stale, a failed poll keeps the last figures marked stale. A provider `auth.json` does not list (one
89
+ * enabled by an environment variable) is left as it is. A failure is logged once per change of its reason — a poll every
90
+ * ten minutes must not fill the log — and never reported to error tracking (nothing for us to fix).
91
+ */
92
+ export declare function createOpenCodeUsagePoller(deps: OpenCodeUsagePollerDeps): OpenCodeUsagePoller;
93
+ //# sourceMappingURL=openCodeUsage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openCodeUsage.d.ts","sourceRoot":"","sources":["../../src/utils/openCodeUsage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAIL,KAAK,iBAAiB,EAEtB,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;AAEvB,eAAO,MAAM,oBAAoB,+CAA+C,CAAC;AAEjF,gEAAgE;AAChE,eAAO,MAAM,iBAAiB,WAAW,CAAC;AAE1C,8GAA8G;AAC9G,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAAG,QAAQ,GAAG,SAAS,CAAC;AAErE;;;GAGG;AACH,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,KAAK,CAAC,EAAE,mBAAmB,CAAC;CAC7B;AAKD;;;GAGG;AACH,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,gBAAgB,CAAC;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,qDAAqD;IACrD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAYD;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,GAAG,IAAI,CAa7G;AAED,4HAA4H;AAC5H,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,GAAG,IAAI,CAM/G;AA4BD;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAa3F;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,0BAA0B,EACtC,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,cAAc,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/E,OAAO,CAAC,sBAAsB,CAAC,CAejC;AAED,mFAAmF;AACnF,MAAM,MAAM,mBAAmB,GAAG,CAAC,UAAU,EAAE,0BAA0B,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAE9G,mGAAmG;AACnG,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAE9E,CAAC;AAIF,MAAM,WAAW,uBAAuB;IACtC,gGAAgG;IAChG,eAAe,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,GAAG,IAAI,CAAC;IACzE,SAAS,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,2BAA2B,GAAG,SAAS,CAAC;IAC3E,UAAU,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,2BAA2B,KAAK,IAAI,CAAC;IAC9E,yHAAyH;IACzH,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC;IACxD,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,yHAAyH;IACzH,UAAU,EAAE,CAAC,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAChE;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,uBAAuB,GAAG,mBAAmB,CAsD5F"}