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
@@ -0,0 +1,41 @@
1
+ /**
2
+ * @description The two notices the bot posts when a usage limit moves a topic onto another rung of the fallback
3
+ * chain (`utils/fallbackChain.ts`): «switched» (the topic already runs on the new rung) and «deferred» (the agent is
4
+ * still answering, so the move waits for the end of the answer). Both read as one short sentence: WHAT hit its
5
+ * limit, WHERE the topic continues, and — in «switched» — when the limit resets and the ONE command that moves
6
+ * the topic again (`/limits`, the board of every account and provider, whatever the backend: the owner's decision,
7
+ * spelled in the `fallback.switchedReset` / `fallback.switchedBack` texts).
8
+ *
9
+ * A Claude rung is named by its account alone (`«work»`), with the model added only when the switch changes it
10
+ * (`«work» (sonnet)`); a switch that stays on the SAME account (the limit covered the model it ran, not the one picked)
11
+ * says the model hit the limit: `Model claude-fable-5-1 hit its usage limit — this topic continues on «work» (sonnet)`;
12
+ * an OpenCode rung by its backend and model (`OpenCode openai/gpt-5`) and, as the side that hit the limit, by its model
13
+ * (`Model openai/gpt-5`) — a model name is never quoted. A Claude rung reached from
14
+ * another backend says `Claude «work»`, since there is no account on the left to compare against.
15
+ *
16
+ * Pure: the clock, the running model and the topic's state are decided by the caller, so every wording rule is
17
+ * unit-tested; the texts come from the active locale (`fallback.*`).
18
+ */
19
+ import { type FallbackChainEntry } from './fallbackChain';
20
+ /**
21
+ * @description The «switched» notice. `from` is the rung that hit the limit (`null` when the topic's position
22
+ * is unknown); `resetTime` is when it comes back, already as a clock in the topic's zone (`null` when unknown or
23
+ * past — the reset clause is dropped, the switch-back command stays); `runningModel` is what the topic's Claude
24
+ * session runs now (`null` when unknown), the reference for whether the switch changes the model.
25
+ */
26
+ export declare function buildFallbackSwitchedNotice(input: {
27
+ from: FallbackChainEntry | null;
28
+ to: FallbackChainEntry;
29
+ resetTime: string | null;
30
+ runningModel: string | null;
31
+ }): string;
32
+ /**
33
+ * @description The «deferred» notice: a Claude session that cannot be moved yet is moved to another account when
34
+ * its answer ends, so both sides are Claude accounts. The rung's model is not named — a deferred move does not pin it.
35
+ */
36
+ export declare function buildFallbackDeferredNotice(from: Extract<FallbackChainEntry, {
37
+ backend: 'claude';
38
+ }>, to: Extract<FallbackChainEntry, {
39
+ backend: 'claude';
40
+ }>): string;
41
+ //# sourceMappingURL=fallbackSwitchNotice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fallbackSwitchNotice.d.ts","sourceRoot":"","sources":["../../src/utils/fallbackSwitchNotice.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAAkD,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AA2B1G;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAChC,EAAE,EAAE,kBAAkB,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,GAAG,MAAM,CAWT;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,OAAO,CAAC,kBAAkB,EAAE;IAAE,OAAO,EAAE,QAAQ,CAAA;CAAE,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,kBAAkB,EAAE;IAAE,OAAO,EAAE,QAAQ,CAAA;CAAE,CAAC,GAAG,MAAM,CAEpK"}
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ /**
3
+ * @description The two notices the bot posts when a usage limit moves a topic onto another rung of the fallback
4
+ * chain (`utils/fallbackChain.ts`): «switched» (the topic already runs on the new rung) and «deferred» (the agent is
5
+ * still answering, so the move waits for the end of the answer). Both read as one short sentence: WHAT hit its
6
+ * limit, WHERE the topic continues, and — in «switched» — when the limit resets and the ONE command that moves
7
+ * the topic again (`/limits`, the board of every account and provider, whatever the backend: the owner's decision,
8
+ * spelled in the `fallback.switchedReset` / `fallback.switchedBack` texts).
9
+ *
10
+ * A Claude rung is named by its account alone (`«work»`), with the model added only when the switch changes it
11
+ * (`«work» (sonnet)`); a switch that stays on the SAME account (the limit covered the model it ran, not the one picked)
12
+ * says the model hit the limit: `Model claude-fable-5-1 hit its usage limit — this topic continues on «work» (sonnet)`;
13
+ * an OpenCode rung by its backend and model (`OpenCode openai/gpt-5`) and, as the side that hit the limit, by its model
14
+ * (`Model openai/gpt-5`) — a model name is never quoted. A Claude rung reached from
15
+ * another backend says `Claude «work»`, since there is no account on the left to compare against.
16
+ *
17
+ * Pure: the clock, the running model and the topic's state are decided by the caller, so every wording rule is
18
+ * unit-tested; the texts come from the active locale (`fallback.*`).
19
+ */
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.buildFallbackSwitchedNotice = buildFallbackSwitchedNotice;
22
+ exports.buildFallbackDeferredNotice = buildFallbackDeferredNotice;
23
+ const i18n_1 = require("../i18n");
24
+ const fallbackChain_1 = require("./fallbackChain");
25
+ /** A name as the notices show it: between guillemets, so a profile called `default` or `work` reads as a name. */
26
+ function quoteName(name) {
27
+ return `«${name}»`;
28
+ }
29
+ /**
30
+ * @description The rung the topic continues on, for the sentence. A Claude account is «name» (`Claude «name»` when the
31
+ * rung the topic left is not a Claude account, so there is no account to compare against) and names its model only
32
+ * when the switch pins one the session is not already running (`getFallbackModelToPin`); an OpenCode rung says its
33
+ * backend and `provider/model` — the model is part of the rung.
34
+ */
35
+ function formatSwitchTarget(from, to, runningModel) {
36
+ if (to.backend === 'opencode')
37
+ return `${(0, i18n_1.t)('fallback.backendOpenCode')} ${(0, fallbackChain_1.buildOpenCodeModelLabel)(to)}`;
38
+ const account = from?.backend === 'claude' ? quoteName(to.profile) : `${(0, i18n_1.t)('fallback.backendClaude')} ${quoteName(to.profile)}`;
39
+ const pinnedModel = (0, fallbackChain_1.getFallbackModelToPin)(to, runningModel);
40
+ return pinnedModel === null ? account : `${account} (${pinnedModel})`;
41
+ }
42
+ /** The tail of the «switched» notice: when the exhausted rung resets (when known) and where to switch. */
43
+ function buildSwitchTail(resetTime) {
44
+ return resetTime === null
45
+ ? (0, i18n_1.t)('fallback.switchedBack')
46
+ : (0, i18n_1.t)('fallback.switchedReset', { time: resetTime });
47
+ }
48
+ /**
49
+ * @description The «switched» notice. `from` is the rung that hit the limit (`null` when the topic's position
50
+ * is unknown); `resetTime` is when it comes back, already as a clock in the topic's zone (`null` when unknown or
51
+ * past — the reset clause is dropped, the switch-back command stays); `runningModel` is what the topic's Claude
52
+ * session runs now (`null` when unknown), the reference for whether the switch changes the model.
53
+ */
54
+ function buildFallbackSwitchedNotice(input) {
55
+ const { from, to, resetTime, runningModel } = input;
56
+ const target = formatSwitchTarget(from, to, runningModel);
57
+ const tail = buildSwitchTail(resetTime);
58
+ if (from === null)
59
+ return (0, i18n_1.t)('fallback.switchedUnknownSource', { to: target, tail });
60
+ // Another model of the SAME account (the limit covered the model it ran, not the one picked): the model hit it, not the account.
61
+ if (from.backend === 'claude' && to.backend === 'claude' && from.profile === to.profile && from.model !== null) {
62
+ return (0, i18n_1.t)('fallback.switchedModel', { from: from.model, to: target, tail });
63
+ }
64
+ if (from.backend === 'claude')
65
+ return (0, i18n_1.t)('fallback.switched', { from: quoteName(from.profile), to: target, tail });
66
+ return (0, i18n_1.t)('fallback.switchedModel', { from: (0, fallbackChain_1.buildOpenCodeModelLabel)(from), to: target, tail });
67
+ }
68
+ /**
69
+ * @description The «deferred» notice: a Claude session that cannot be moved yet is moved to another account when
70
+ * its answer ends, so both sides are Claude accounts. The rung's model is not named — a deferred move does not pin it.
71
+ */
72
+ function buildFallbackDeferredNotice(from, to) {
73
+ return (0, i18n_1.t)('fallback.switchedDeferred', { from: quoteName(from.profile), to: quoteName(to.profile) });
74
+ }
75
+ //# sourceMappingURL=fallbackSwitchNotice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fallbackSwitchNotice.js","sourceRoot":"","sources":["../../src/utils/fallbackSwitchNotice.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,10 @@
1
1
  /**
2
2
  * @description Reusable agent→Telegram file-send pipeline. The factory owns the
3
3
  * impure path resolution/snapshot work and executes the pure plan/request through
4
- * an injected typed gateway. Each canonical file is opened component-by-component
5
- * beneath a pinned root descriptor, identity-checked, and owned through delivery bookkeeping.
4
+ * an injected typed gateway. Each canonical file is opened by one of two strategies
5
+ * ({@link FileSendOpenStrategy}) — on Linux component-by-component beneath a pinned
6
+ * root descriptor, elsewhere by its verified canonical path — identity-checked, and
7
+ * owned through delivery bookkeeping.
6
8
  * Bot-specific stream creation and routing stay in the gateway; pacing/retry is
7
9
  * injected through `executeDelivery`. The service imports neither MCP nor Telegraf.
8
10
  */
@@ -55,12 +57,30 @@ export interface SendFilesToThreadDeps<TTarget> {
55
57
  recordMessageIds: (target: TTarget, messageIds: number[]) => Promise<void>;
56
58
  executeDelivery?: <TResult>(target: TTarget, delivery: () => Promise<TResult>, signal?: AbortSignal) => Promise<TResult>;
57
59
  readFileSnapshot?: typeof readTelegramFileSnapshot;
60
+ /** How files are opened; the platform's own ({@link getFileSendOpenStrategy}) unless a test forces one. */
61
+ openStrategy?: FileSendOpenStrategy;
58
62
  }
59
- /** Canonical send root pinned to one open directory descriptor. */
60
- export interface PinnedFileSendRoot {
63
+ /**
64
+ * @name FileSendOpenStrategy
65
+ * @description How a validated file is opened without reaching outside the bound folder through a swapped path:
66
+ * - `descriptorWalk` (Linux) — every component opened beneath the pinned root directory descriptor through
67
+ * `/proc/self/fd/<fd>/<name>` with `O_NOFOLLOW`: a component swapped to a symlink after validation is refused;
68
+ * - `verifiedPath` (Windows, macOS: no `/proc`, and Node exposes no `openat`) — the canonical path opened read-only, the
69
+ * opened object's bigint `{dev, ino}` held to the one validated inside the root, then the path resolved again: still
70
+ * inside the root and still that object. A swapped junction or symlink yields another object or another place. What
71
+ * it gives up against the walk: a root folder replaced at the same path is used as the root — no reach beyond what
72
+ * the agent, running with the user's rights in that folder, has anyway.
73
+ */
74
+ export type FileSendOpenStrategy = 'descriptorWalk' | 'verifiedPath';
75
+ /** Canonical send root: pinned to one open directory descriptor, or (the portable strategy) its canonical path. */
76
+ export type PinnedFileSendRoot = {
77
+ strategy: 'descriptorWalk';
61
78
  rootPath: string;
62
79
  fd: number;
63
- }
80
+ } | {
81
+ strategy: 'verifiedPath';
82
+ rootPath: string;
83
+ };
64
84
  /** Bound descriptor-owning operations while Telegram's own queues are occupied. */
65
85
  export declare const fileSendSnapshotConcurrency = 4;
66
86
  export type TelegramFileSnapshotResult = {
@@ -75,13 +95,16 @@ export type TelegramFileSnapshotResult = {
75
95
  kind: 'oversize';
76
96
  error: string;
77
97
  };
78
- /** Linux exposes descriptor-relative child lookup; other platforms fail closed. */
98
+ /** Linux exposes descriptor-relative child lookup; other platforms have none. */
79
99
  export declare function getFileDescriptorPathRoot(platform: NodeJS.Platform): string | null;
100
+ /** The descriptor walk where the platform has descriptor-relative lookup, the verified path elsewhere. */
101
+ export declare function getFileSendOpenStrategy(platform: NodeJS.Platform): FileSendOpenStrategy;
80
102
  /**
81
- * @description Open one already-canonical path beneath its pinned canonical root
82
- * without following swapped parent/final symlinks, validate the opened object's
83
- * bigint device/inode identity and size, then transfer ownership of the still-open
84
- * descriptor to the caller. Every failure closes the descriptor before returning.
103
+ * @description Open one already-canonical path beneath its canonical root by the root's strategy — the descriptor walk
104
+ * without following swapped parent/final symlinks, or the verified path — validate the opened object's bigint
105
+ * device/inode identity and size (and, for the verified path, that the path still resolves to it inside the root),
106
+ * then transfer ownership of the still-open descriptor to the caller. Every failure closes the descriptor before
107
+ * returning.
85
108
  */
86
109
  export declare function readTelegramFileSnapshot(absPath: string, expectedIdentity: FileIdentity, pinnedRoot: PinnedFileSendRoot): TelegramFileSnapshotResult;
87
110
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"fileSendService.d.ts","sourceRoot":"","sources":["../../src/utils/fileSendService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fileSendService.d.ts","sourceRoot":"","sources":["../../src/utils/fileSendService.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,10 @@
2
2
  /**
3
3
  * @description Reusable agent→Telegram file-send pipeline. The factory owns the
4
4
  * impure path resolution/snapshot work and executes the pure plan/request through
5
- * an injected typed gateway. Each canonical file is opened component-by-component
6
- * beneath a pinned root descriptor, identity-checked, and owned through delivery bookkeeping.
5
+ * an injected typed gateway. Each canonical file is opened by one of two strategies
6
+ * ({@link FileSendOpenStrategy}) — on Linux component-by-component beneath a pinned
7
+ * root descriptor, elsewhere by its verified canonical path — identity-checked, and
8
+ * owned through delivery bookkeeping.
7
9
  * Bot-specific stream creation and routing stay in the gateway; pacing/retry is
8
10
  * injected through `executeDelivery`. The service imports neither MCP nor Telegraf.
9
11
  */
@@ -43,6 +45,7 @@ var __importStar = (this && this.__importStar) || (function () {
43
45
  Object.defineProperty(exports, "__esModule", { value: true });
44
46
  exports.fileSendSnapshotConcurrency = exports.FileSendDeliveryUnknownError = void 0;
45
47
  exports.getFileDescriptorPathRoot = getFileDescriptorPathRoot;
48
+ exports.getFileSendOpenStrategy = getFileSendOpenStrategy;
46
49
  exports.readTelegramFileSnapshot = readTelegramFileSnapshot;
47
50
  exports.createSendFilesToThread = createSendFilesToThread;
48
51
  const fs = __importStar(require("fs"));
@@ -60,11 +63,16 @@ class FileSendDeliveryUnknownError extends Error {
60
63
  exports.FileSendDeliveryUnknownError = FileSendDeliveryUnknownError;
61
64
  /** Bound descriptor-owning operations while Telegram's own queues are occupied. */
62
65
  exports.fileSendSnapshotConcurrency = 4;
63
- /** Linux exposes descriptor-relative child lookup; other platforms fail closed. */
66
+ /** Linux exposes descriptor-relative child lookup; other platforms have none. */
64
67
  function getFileDescriptorPathRoot(platform) {
65
68
  return platform === 'linux' ? '/proc/self/fd' : null;
66
69
  }
70
+ /** The descriptor walk where the platform has descriptor-relative lookup, the verified path elsewhere. */
71
+ function getFileSendOpenStrategy(platform) {
72
+ return getFileDescriptorPathRoot(platform) === null ? 'verifiedPath' : 'descriptorWalk';
73
+ }
67
74
  const fileDescriptorPathRoot = getFileDescriptorPathRoot(process.platform);
75
+ const platformOpenStrategy = getFileSendOpenStrategy(process.platform);
68
76
  const directoryOpenFlags = fs.constants.O_RDONLY |
69
77
  fs.constants.O_DIRECTORY |
70
78
  fs.constants.O_NOFOLLOW |
@@ -72,16 +80,28 @@ const directoryOpenFlags = fs.constants.O_RDONLY |
72
80
  const fileOpenFlags = fs.constants.O_RDONLY |
73
81
  fs.constants.O_NOFOLLOW |
74
82
  fs.constants.O_NONBLOCK;
83
+ /**
84
+ * The portable strategy's flags: read-only, and non-blocking where the platform has it (a FIFO raced into place must
85
+ * not block the bot; Windows defines no `O_NONBLOCK` — and has no FIFOs a path can name).
86
+ */
87
+ const verifiedPathOpenFlags = fs.constants.O_RDONLY | (fs.constants.O_NONBLOCK ?? 0);
75
88
  /** Canonicalize and pin the operation root before resolving any send item. */
76
- function openPinnedFileSendRoot(workDir) {
77
- if (fileDescriptorPathRoot === null) {
78
- throw new Error(`secure file sending is unsupported on ${process.platform}`);
79
- }
89
+ function openPinnedFileSendRoot(workDir, strategy) {
80
90
  const rootPath = fs.realpathSync(workDir);
81
- return {
82
- rootPath,
83
- fd: fs.openSync(rootPath, directoryOpenFlags),
84
- };
91
+ if (strategy === 'verifiedPath')
92
+ return { strategy, rootPath };
93
+ return { strategy, rootPath, fd: fs.openSync(rootPath, directoryOpenFlags) };
94
+ }
95
+ /** `absPath` relative to `rootPath` when it lies strictly inside it, else `null`. */
96
+ function getPathWithinRoot(rootPath, absPath) {
97
+ const relativePath = path.relative(rootPath, absPath);
98
+ if (relativePath.length === 0 ||
99
+ relativePath === '..' ||
100
+ relativePath.startsWith(`..${path.sep}`) ||
101
+ path.isAbsolute(relativePath)) {
102
+ return null;
103
+ }
104
+ return relativePath;
85
105
  }
86
106
  /** Close one descriptor and return a readable failure instead of throwing. */
87
107
  function closeFileDescriptor(fileDescriptor) {
@@ -97,7 +117,7 @@ function closeFileDescriptor(fileDescriptor) {
97
117
  /** Address one child through its already-open parent directory descriptor. */
98
118
  function getDescriptorChildPath(parentDescriptor, childName) {
99
119
  if (fileDescriptorPathRoot === null) {
100
- throw new Error(`secure file sending is unsupported on ${process.platform}`);
120
+ throw new Error(`descriptor-relative lookup is unavailable on ${process.platform}`);
101
121
  }
102
122
  return path.posix.join(fileDescriptorPathRoot, parentDescriptor.toString(), childName);
103
123
  }
@@ -107,16 +127,10 @@ function getDescriptorChildPath(parentDescriptor, childName) {
107
127
  * next lookup, and O_NOFOLLOW rejects a component swapped to a symlink.
108
128
  */
109
129
  function openFileBeneathRoot(pinnedRoot, absPath) {
110
- const relativePath = path.relative(pinnedRoot.rootPath, absPath);
111
- if (relativePath.length === 0 ||
112
- relativePath === '..' ||
113
- relativePath.startsWith(`..${path.sep}`) ||
114
- path.isAbsolute(relativePath)) {
130
+ const relativePath = getPathWithinRoot(pinnedRoot.rootPath, absPath);
131
+ if (relativePath === null) {
115
132
  throw new Error(`file is outside its validated root: ${absPath}`);
116
133
  }
117
- if (fileDescriptorPathRoot === null) {
118
- throw new Error(`secure file sending is unsupported on ${process.platform}`);
119
- }
120
134
  const pathComponents = relativePath.split(path.sep);
121
135
  const fileName = pathComponents[pathComponents.length - 1];
122
136
  const directoryComponents = pathComponents.slice(0, -1);
@@ -155,23 +169,60 @@ function openFileBeneathRoot(pinnedRoot, absPath) {
155
169
  return fileDescriptor;
156
170
  }
157
171
  /**
158
- * @description Open one already-canonical path beneath its pinned canonical root
159
- * without following swapped parent/final symlinks, validate the opened object's
160
- * bigint device/inode identity and size, then transfer ownership of the still-open
161
- * descriptor to the caller. Every failure closes the descriptor before returning.
172
+ * @description The portable strategy's open: the canonical path, checked to lie inside the root, opened read-only.
173
+ * The identity check and {@link getVerifiedPathChangeError} that follow are what pin it to the validated object.
174
+ */
175
+ function openVerifiedPath(rootPath, absPath) {
176
+ if (getPathWithinRoot(rootPath, absPath) === null) {
177
+ throw new Error(`file is outside its validated root: ${absPath}`);
178
+ }
179
+ return fs.openSync(absPath, verifiedPathOpenFlags);
180
+ }
181
+ /**
182
+ * @description After the portable open: the path, resolved again, must still lie inside the root and still name the
183
+ * object that was opened — a parent swapped to an outside folder before the identity was captured passes the identity
184
+ * check (the captured identity is the outside file's), and fails here. `null` when it holds.
185
+ */
186
+ function getVerifiedPathChangeError(rootPath, absPath, openedIdentity) {
187
+ const changedError = `file changed after validation: ${absPath}`;
188
+ try {
189
+ const currentPath = fs.realpathSync(absPath);
190
+ if (getPathWithinRoot(rootPath, currentPath) === null)
191
+ return changedError;
192
+ const currentStat = fs.statSync(currentPath, { bigint: true });
193
+ return currentStat.dev === openedIdentity.dev && currentStat.ino === openedIdentity.ino ? null : changedError;
194
+ }
195
+ catch {
196
+ return changedError;
197
+ }
198
+ }
199
+ /**
200
+ * @description Open one already-canonical path beneath its canonical root by the root's strategy — the descriptor walk
201
+ * without following swapped parent/final symlinks, or the verified path — validate the opened object's bigint
202
+ * device/inode identity and size (and, for the verified path, that the path still resolves to it inside the root),
203
+ * then transfer ownership of the still-open descriptor to the caller. Every failure closes the descriptor before
204
+ * returning.
162
205
  */
163
206
  function readTelegramFileSnapshot(absPath, expectedIdentity, pinnedRoot) {
164
207
  let fileDescriptor = null;
165
208
  let result;
166
209
  try {
167
- fileDescriptor = openFileBeneathRoot(pinnedRoot, absPath);
210
+ fileDescriptor = pinnedRoot.strategy === 'descriptorWalk'
211
+ ? openFileBeneathRoot(pinnedRoot, absPath)
212
+ : openVerifiedPath(pinnedRoot.rootPath, absPath);
168
213
  const fileStat = fs.fstatSync(fileDescriptor, { bigint: true });
214
+ const pathChangeError = pinnedRoot.strategy === 'verifiedPath' && fileStat.isFile()
215
+ ? getVerifiedPathChangeError(pinnedRoot.rootPath, absPath, { dev: fileStat.dev, ino: fileStat.ino })
216
+ : null;
169
217
  if (!fileStat.isFile()) {
170
218
  result = { ok: false, kind: 'read', error: `not a regular file: ${absPath}` };
171
219
  }
172
220
  else if (fileStat.dev !== expectedIdentity.dev || fileStat.ino !== expectedIdentity.ino) {
173
221
  result = { ok: false, kind: 'read', error: `file changed after validation: ${absPath}` };
174
222
  }
223
+ else if (pathChangeError !== null) {
224
+ result = { ok: false, kind: 'read', error: pathChangeError };
225
+ }
175
226
  else if (fileStat.size > BigInt(fileSendPlan_1.telegramSendMaxBytes)) {
176
227
  result = {
177
228
  ok: false,
@@ -262,7 +313,7 @@ function createSendFilesToThread(deps) {
262
313
  const countError = (0, fileSendPlan_1.getFileSendCountError)(options.paths.length);
263
314
  if (countError !== null)
264
315
  return { ok: false, error: countError };
265
- const pinnedRoot = openPinnedFileSendRoot(workDir);
316
+ const pinnedRoot = openPinnedFileSendRoot(workDir, deps.openStrategy ?? platformOpenStrategy);
266
317
  ownedRoot.pinnedRoot = pinnedRoot;
267
318
  const items = [];
268
319
  const readFileSnapshot = deps.readFileSnapshot ?? readTelegramFileSnapshot;
@@ -366,7 +417,7 @@ function createSendFilesToThread(deps) {
366
417
  closeError = descriptorCloseError;
367
418
  }
368
419
  }
369
- if (ownedRoot.pinnedRoot !== null) {
420
+ if (ownedRoot.pinnedRoot?.strategy === 'descriptorWalk') {
370
421
  const descriptorCloseError = closeFileDescriptor(ownedRoot.pinnedRoot.fd);
371
422
  if (closeError === null && descriptorCloseError !== null) {
372
423
  closeError = descriptorCloseError;
@@ -1 +1 @@
1
- {"version":3,"file":"fileSendService.js","sourceRoot":"","sources":["../../src/utils/fileSendService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fileSendService.js","sourceRoot":"","sources":["../../src/utils/fileSendService.ts"],"names":[],"mappings":"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"}
@@ -39,6 +39,11 @@ export declare const wrapperCdFailExitCode = 96;
39
39
  /** How long a fresh spawn waits for the wrapper to write the `pid` file. */
40
40
  export declare const pidFileWaitTimeoutMs = 5000;
41
41
  export declare const pidFilePollIntervalMs = 100;
42
+ /** How long a stopped process is waited for: the CLI writes its transcript metadata back at exit, a moment after the signal. */
43
+ export declare const pidExitWaitTimeoutMs = 5000;
44
+ export declare const pidExitPollIntervalMs = 25;
45
+ /** 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. */
46
+ export declare const pidKillWaitTimeoutMs = 2000;
42
47
  /** FIFO write-open guard (P1 probe): `O_WRONLY|O_NONBLOCK` raises `ENXIO`
43
48
  * while nothing holds the read end — a BLOCKING open would hang forever.
44
49
  * Retried because claude opens its `0<>` end asynchronously during spawn;
@@ -106,6 +111,26 @@ export declare function buildWrapperScript(claudePath: string, args: readonly st
106
111
  * and the bot compares it with the profile its topic has now.
107
112
  */
108
113
  export declare function readWrapperScriptConfigDir(wrapperFile: string): string | null;
114
+ /** The claude flags a session's model and effort ride on — written by the spawn, read back from the wrapper at adopt. */
115
+ export declare const claudeModelFlag = "--model";
116
+ export declare const claudeEffortFlag = "--effort";
117
+ /**
118
+ * @description The value of `flag` on a wrapper script's command line, `null` when it has none. The bot's own
119
+ * quoting wraps every argument (`'--effort' 'xhigh'`), so a flag-looking text inside another argument never matches.
120
+ */
121
+ export declare function parseWrapperScriptFlag(script: string, flag: string): string | null;
122
+ /** @name WrapperScriptLaunchFlags @description The model and effort a wrapper starts claude with; `null` = not passed. */
123
+ export interface WrapperScriptLaunchFlags {
124
+ model: string | null;
125
+ effort: string | null;
126
+ }
127
+ /**
128
+ * @description The `--model` and `--effort` a persisted wrapper script starts claude with, both `null` for an
129
+ * unreadable script. Read at adopt: the surviving process keeps what it was spawned with, so a later re-spawn
130
+ * (effort, model, account) passes on what it does not change instead of dropping it, and `/status`, the banner and
131
+ * `/effort` name the level a session really runs.
132
+ */
133
+ export declare function readWrapperScriptLaunchFlags(wrapperFile: string): WrapperScriptLaunchFlags;
109
134
  /**
110
135
  * @description Open the stdin FIFO for writing WITHOUT ever blocking: a plain
111
136
  * `open(O_WRONLY)` on a FIFO with no reader hangs forever (the P1 probe's first
@@ -127,6 +152,20 @@ export declare function readPidFile(pidFile: string): number | null;
127
152
  export declare function readExitCodeFile(exitCodeFile: string): number | null;
128
153
  /** `kill(pid, 0)` liveness probe (no signal actually delivered). */
129
154
  export declare function checkIsPidAlive(pid: number): boolean;
155
+ /** Wait (bounded) until `pid` is gone. `true` when it is, `false` when it still runs at the deadline. */
156
+ export declare function waitForPidExit(pid: number, timeoutMs?: number): Promise<boolean>;
157
+ /** How a stop ended: the process `exited` within the wait, was `killed` (SIGKILL) after it, or is `stuck` — still there after the kill. */
158
+ export type PidStopOutcome = 'exited' | 'killed' | 'stuck';
159
+ /**
160
+ * @description Wait (bounded) for `pid` to be gone and, when it still runs at the deadline, SIGKILL it and wait (bounded) again:
161
+ * whoever stops a process and then starts its replacement on the same conversation must not leave the two side by side.
162
+ * `kill` is injectable for a test of the `stuck` branch.
163
+ */
164
+ export declare function waitForPidExitOrKill(pid: number, options?: {
165
+ exitTimeoutMs?: number;
166
+ killTimeoutMs?: number;
167
+ kill?: (pid: number) => void;
168
+ }): Promise<PidStopOutcome>;
130
169
  /** Wait (bounded) for the wrapper to write the `pid` file after tmux spawn.
131
170
  * Returns the pid, or `null` on timeout (spawn diagnostics read stderr). */
132
171
  export declare function waitForPidFile(pidFile: string, timeoutMs?: number): Promise<number | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"jsonStreamHost.d.ts","sourceRoot":"","sources":["../../src/utils/jsonStreamHost.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jsonStreamHost.d.ts","sourceRoot":"","sources":["../../src/utils/jsonStreamHost.ts"],"names":[],"mappings":"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"}