charness 3.3.2 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (277) hide show
  1. package/CHANGELOG.md +639 -0
  2. package/DEVELOPMENT.md +76 -0
  3. package/README.md +78 -7
  4. package/SETUP.md +65 -19
  5. package/dist/adapters/claudeCliAdapter.js +2 -2
  6. package/dist/adapters/claudeCliAdapter.js.map +1 -1
  7. package/dist/adapters/claudeConfigDir.d.ts +18 -0
  8. package/dist/adapters/claudeConfigDir.d.ts.map +1 -1
  9. package/dist/adapters/claudeJsonStreamAdapter.d.ts +8 -1
  10. package/dist/adapters/claudeJsonStreamAdapter.d.ts.map +1 -1
  11. package/dist/adapters/claudeJsonStreamAdapter.js +24 -6
  12. package/dist/adapters/claudeJsonStreamAdapter.js.map +1 -1
  13. package/dist/adapters/createAdapter.d.ts +2 -1
  14. package/dist/adapters/createAdapter.d.ts.map +1 -1
  15. package/dist/adapters/createAdapter.js +16 -0
  16. package/dist/adapters/createAdapter.js.map +1 -1
  17. package/dist/adapters/openCodeAdapter.d.ts +11 -0
  18. package/dist/adapters/openCodeAdapter.d.ts.map +1 -1
  19. package/dist/adapters/openCodeAdapter.js +24 -9
  20. package/dist/adapters/openCodeAdapter.js.map +1 -1
  21. package/dist/agentLogin/agentLogin.d.ts +19 -1
  22. package/dist/agentLogin/agentLogin.d.ts.map +1 -1
  23. package/dist/agentLogin/agentLogin.js +64 -18
  24. package/dist/agentLogin/agentLogin.js.map +1 -1
  25. package/dist/apiErrorRetry.d.ts +3 -1
  26. package/dist/apiErrorRetry.d.ts.map +1 -1
  27. package/dist/apiErrorRetry.js +11 -1
  28. package/dist/apiErrorRetry.js.map +1 -1
  29. package/dist/bot.d.ts +0 -3
  30. package/dist/bot.d.ts.map +1 -1
  31. package/dist/bot.js +487 -182
  32. package/dist/bot.js.map +1 -1
  33. package/dist/changelogEntries.d.ts +25 -0
  34. package/dist/changelogEntries.d.ts.map +1 -0
  35. package/dist/changelogEntries.js +66 -0
  36. package/dist/changelogEntries.js.map +1 -0
  37. package/dist/cli/bot.d.ts +6 -2
  38. package/dist/cli/bot.d.ts.map +1 -1
  39. package/dist/cli/bot.js +34 -2
  40. package/dist/cli/bot.js.map +1 -1
  41. package/dist/cli/claudeProfiles.d.ts +1 -1
  42. package/dist/cli/claudeProfiles.d.ts.map +1 -1
  43. package/dist/cli/claudeProfiles.js +11 -6
  44. package/dist/cli/claudeProfiles.js.map +1 -1
  45. package/dist/cli/hot.d.ts +7 -0
  46. package/dist/cli/hot.d.ts.map +1 -1
  47. package/dist/cli/hot.js +53 -3
  48. package/dist/cli/hot.js.map +1 -1
  49. package/dist/cli.d.ts +1 -1
  50. package/dist/cli.d.ts.map +1 -1
  51. package/dist/cli.js +8 -0
  52. package/dist/cli.js.map +1 -1
  53. package/dist/connectors/telegram/bindPicker.d.ts +64 -0
  54. package/dist/connectors/telegram/bindPicker.d.ts.map +1 -0
  55. package/dist/connectors/telegram/bindPicker.js +97 -0
  56. package/dist/connectors/telegram/bindPicker.js.map +1 -0
  57. package/dist/connectors/telegram/commands/claudeAccounts.d.ts +6 -2
  58. package/dist/connectors/telegram/commands/claudeAccounts.d.ts.map +1 -1
  59. package/dist/connectors/telegram/commands/claudeAccounts.js +127 -28
  60. package/dist/connectors/telegram/commands/claudeAccounts.js.map +1 -1
  61. package/dist/connectors/telegram/commands/fallbackChain.d.ts.map +1 -1
  62. package/dist/connectors/telegram/commands/fallbackChain.js +6 -2
  63. package/dist/connectors/telegram/commands/fallbackChain.js.map +1 -1
  64. package/dist/connectors/telegram/commands/selfUpdate.d.ts +16 -0
  65. package/dist/connectors/telegram/commands/selfUpdate.d.ts.map +1 -0
  66. package/dist/connectors/telegram/commands/selfUpdate.js +210 -0
  67. package/dist/connectors/telegram/commands/selfUpdate.js.map +1 -0
  68. package/dist/connectors/telegram/commands/stt.d.ts +1 -0
  69. package/dist/connectors/telegram/commands/stt.d.ts.map +1 -1
  70. package/dist/connectors/telegram/commands/stt.js +5 -0
  71. package/dist/connectors/telegram/commands/stt.js.map +1 -1
  72. package/dist/connectors/telegram/commands/topicCommand.d.ts +75 -0
  73. package/dist/connectors/telegram/commands/topicCommand.d.ts.map +1 -0
  74. package/dist/connectors/telegram/commands/topicCommand.js +391 -0
  75. package/dist/connectors/telegram/commands/topicCommand.js.map +1 -0
  76. package/dist/i18n/de.d.ts.map +1 -1
  77. package/dist/i18n/de.js +136 -3
  78. package/dist/i18n/de.js.map +1 -1
  79. package/dist/i18n/en.d.ts.map +1 -1
  80. package/dist/i18n/en.js +136 -3
  81. package/dist/i18n/en.js.map +1 -1
  82. package/dist/i18n/es.d.ts.map +1 -1
  83. package/dist/i18n/es.js +136 -3
  84. package/dist/i18n/es.js.map +1 -1
  85. package/dist/i18n/fr.d.ts.map +1 -1
  86. package/dist/i18n/fr.js +136 -3
  87. package/dist/i18n/fr.js.map +1 -1
  88. package/dist/i18n/hi.d.ts.map +1 -1
  89. package/dist/i18n/hi.js +136 -3
  90. package/dist/i18n/hi.js.map +1 -1
  91. package/dist/i18n/ja.d.ts.map +1 -1
  92. package/dist/i18n/ja.js +136 -3
  93. package/dist/i18n/ja.js.map +1 -1
  94. package/dist/i18n/ka.d.ts.map +1 -1
  95. package/dist/i18n/ka.js +136 -3
  96. package/dist/i18n/ka.js.map +1 -1
  97. package/dist/i18n/pt.d.ts.map +1 -1
  98. package/dist/i18n/pt.js +136 -3
  99. package/dist/i18n/pt.js.map +1 -1
  100. package/dist/i18n/ru.d.ts.map +1 -1
  101. package/dist/i18n/ru.js +136 -3
  102. package/dist/i18n/ru.js.map +1 -1
  103. package/dist/i18n/uk.d.ts.map +1 -1
  104. package/dist/i18n/uk.js +136 -3
  105. package/dist/i18n/uk.js.map +1 -1
  106. package/dist/i18n/uz.d.ts.map +1 -1
  107. package/dist/i18n/uz.js +136 -3
  108. package/dist/i18n/uz.js.map +1 -1
  109. package/dist/i18n/zh.d.ts.map +1 -1
  110. package/dist/i18n/zh.js +136 -3
  111. package/dist/i18n/zh.js.map +1 -1
  112. package/dist/instanceSettings.d.ts +12 -1
  113. package/dist/instanceSettings.d.ts.map +1 -1
  114. package/dist/instanceSettings.js +40 -4
  115. package/dist/instanceSettings.js.map +1 -1
  116. package/dist/scheduler/mcpSurface.d.ts.map +1 -1
  117. package/dist/scheduler/mcpSurface.js +4 -2
  118. package/dist/scheduler/mcpSurface.js.map +1 -1
  119. package/dist/selfUpdate/bootRollback.d.ts +22 -0
  120. package/dist/selfUpdate/bootRollback.d.ts.map +1 -0
  121. package/dist/selfUpdate/bootRollback.js +79 -0
  122. package/dist/selfUpdate/bootRollback.js.map +1 -0
  123. package/dist/selfUpdate/commandRunner.d.ts +21 -0
  124. package/dist/selfUpdate/commandRunner.d.ts.map +1 -0
  125. package/dist/selfUpdate/commandRunner.js +32 -0
  126. package/dist/selfUpdate/commandRunner.js.map +1 -0
  127. package/dist/selfUpdate/constants.d.ts +26 -0
  128. package/dist/selfUpdate/constants.d.ts.map +1 -0
  129. package/dist/selfUpdate/constants.js +31 -0
  130. package/dist/selfUpdate/constants.js.map +1 -0
  131. package/dist/selfUpdate/gitSource.d.ts +58 -0
  132. package/dist/selfUpdate/gitSource.d.ts.map +1 -0
  133. package/dist/selfUpdate/gitSource.js +183 -0
  134. package/dist/selfUpdate/gitSource.js.map +1 -0
  135. package/dist/selfUpdate/hostLock.d.ts +16 -0
  136. package/dist/selfUpdate/hostLock.d.ts.map +1 -0
  137. package/dist/selfUpdate/hostLock.js +101 -0
  138. package/dist/selfUpdate/hostLock.js.map +1 -0
  139. package/dist/selfUpdate/hotSupervisor.d.ts +47 -0
  140. package/dist/selfUpdate/hotSupervisor.d.ts.map +1 -0
  141. package/dist/selfUpdate/hotSupervisor.js +125 -0
  142. package/dist/selfUpdate/hotSupervisor.js.map +1 -0
  143. package/dist/selfUpdate/installKind.d.ts +45 -0
  144. package/dist/selfUpdate/installKind.d.ts.map +1 -0
  145. package/dist/selfUpdate/installKind.js +99 -0
  146. package/dist/selfUpdate/installKind.js.map +1 -0
  147. package/dist/selfUpdate/launchEnvironment.d.ts +3 -0
  148. package/dist/selfUpdate/launchEnvironment.d.ts.map +1 -0
  149. package/dist/selfUpdate/launchEnvironment.js +16 -0
  150. package/dist/selfUpdate/launchEnvironment.js.map +1 -0
  151. package/dist/selfUpdate/npmSource.d.ts +34 -0
  152. package/dist/selfUpdate/npmSource.d.ts.map +1 -0
  153. package/dist/selfUpdate/npmSource.js +107 -0
  154. package/dist/selfUpdate/npmSource.js.map +1 -0
  155. package/dist/selfUpdate/releaseNotes.d.ts +33 -0
  156. package/dist/selfUpdate/releaseNotes.d.ts.map +1 -0
  157. package/dist/selfUpdate/releaseNotes.js +115 -0
  158. package/dist/selfUpdate/releaseNotes.js.map +1 -0
  159. package/dist/selfUpdate/restart.d.ts +33 -0
  160. package/dist/selfUpdate/restart.d.ts.map +1 -0
  161. package/dist/selfUpdate/restart.js +94 -0
  162. package/dist/selfUpdate/restart.js.map +1 -0
  163. package/dist/selfUpdate/selfCheck.d.ts +20 -0
  164. package/dist/selfUpdate/selfCheck.d.ts.map +1 -0
  165. package/dist/selfUpdate/selfCheck.js +126 -0
  166. package/dist/selfUpdate/selfCheck.js.map +1 -0
  167. package/dist/selfUpdate/semver.d.ts +24 -0
  168. package/dist/selfUpdate/semver.d.ts.map +1 -0
  169. package/dist/selfUpdate/semver.js +165 -0
  170. package/dist/selfUpdate/semver.js.map +1 -0
  171. package/dist/selfUpdate/types.d.ts +51 -0
  172. package/dist/selfUpdate/types.d.ts.map +1 -0
  173. package/dist/selfUpdate/types.js +3 -0
  174. package/dist/selfUpdate/types.js.map +1 -0
  175. package/dist/selfUpdate/updateEngine.d.ts +110 -0
  176. package/dist/selfUpdate/updateEngine.d.ts.map +1 -0
  177. package/dist/selfUpdate/updateEngine.js +727 -0
  178. package/dist/selfUpdate/updateEngine.js.map +1 -0
  179. package/dist/selfUpdate/updateMessages.d.ts +84 -0
  180. package/dist/selfUpdate/updateMessages.d.ts.map +1 -0
  181. package/dist/selfUpdate/updateMessages.js +115 -0
  182. package/dist/selfUpdate/updateMessages.js.map +1 -0
  183. package/dist/selfUpdate/updateModes.d.ts +17 -0
  184. package/dist/selfUpdate/updateModes.d.ts.map +1 -0
  185. package/dist/selfUpdate/updateModes.js +14 -0
  186. package/dist/selfUpdate/updateModes.js.map +1 -0
  187. package/dist/selfUpdate/updatePending.d.ts +76 -0
  188. package/dist/selfUpdate/updatePending.d.ts.map +1 -0
  189. package/dist/selfUpdate/updatePending.js +131 -0
  190. package/dist/selfUpdate/updatePending.js.map +1 -0
  191. package/dist/selfUpdate/updatePolicy.d.ts +115 -0
  192. package/dist/selfUpdate/updatePolicy.d.ts.map +1 -0
  193. package/dist/selfUpdate/updatePolicy.js +83 -0
  194. package/dist/selfUpdate/updatePolicy.js.map +1 -0
  195. package/dist/selfUpdate/updateRuntime.d.ts +22 -0
  196. package/dist/selfUpdate/updateRuntime.d.ts.map +1 -0
  197. package/dist/selfUpdate/updateRuntime.js +148 -0
  198. package/dist/selfUpdate/updateRuntime.js.map +1 -0
  199. package/dist/startupPromptBuffer.d.ts +2 -0
  200. package/dist/startupPromptBuffer.d.ts.map +1 -1
  201. package/dist/startupPromptBuffer.js +4 -0
  202. package/dist/startupPromptBuffer.js.map +1 -1
  203. package/dist/state.d.ts +43 -0
  204. package/dist/state.d.ts.map +1 -1
  205. package/dist/state.js +54 -0
  206. package/dist/state.js.map +1 -1
  207. package/dist/types.d.ts +10 -0
  208. package/dist/types.d.ts.map +1 -1
  209. package/dist/utils/anthropicApiKeyCheck.d.ts +19 -0
  210. package/dist/utils/anthropicApiKeyCheck.d.ts.map +1 -0
  211. package/dist/utils/anthropicApiKeyCheck.js +41 -0
  212. package/dist/utils/anthropicApiKeyCheck.js.map +1 -0
  213. package/dist/utils/claudeAccountPickerPlan.d.ts +6 -1
  214. package/dist/utils/claudeAccountPickerPlan.d.ts.map +1 -1
  215. package/dist/utils/claudeAccountPickerPlan.js +5 -1
  216. package/dist/utils/claudeAccountPickerPlan.js.map +1 -1
  217. package/dist/utils/claudeApiKeyHelper.d.ts +19 -0
  218. package/dist/utils/claudeApiKeyHelper.d.ts.map +1 -0
  219. package/dist/utils/claudeApiKeyHelper.js +32 -0
  220. package/dist/utils/claudeApiKeyHelper.js.map +1 -0
  221. package/dist/utils/claudeApiSpend.d.ts +73 -0
  222. package/dist/utils/claudeApiSpend.d.ts.map +1 -0
  223. package/dist/utils/claudeApiSpend.js +82 -0
  224. package/dist/utils/claudeApiSpend.js.map +1 -0
  225. package/dist/utils/claudeCompactHook.d.ts +11 -6
  226. package/dist/utils/claudeCompactHook.d.ts.map +1 -1
  227. package/dist/utils/claudeCompactHook.js +28 -11
  228. package/dist/utils/claudeCompactHook.js.map +1 -1
  229. package/dist/utils/claudeLimitSwitch.d.ts +2 -1
  230. package/dist/utils/claudeLimitSwitch.d.ts.map +1 -1
  231. package/dist/utils/claudeLimitSwitch.js +3 -2
  232. package/dist/utils/claudeLimitSwitch.js.map +1 -1
  233. package/dist/utils/claudeProfileUsageLines.d.ts +18 -3
  234. package/dist/utils/claudeProfileUsageLines.d.ts.map +1 -1
  235. package/dist/utils/claudeProfileUsageLines.js +23 -2
  236. package/dist/utils/claudeProfileUsageLines.js.map +1 -1
  237. package/dist/utils/claudeProfiles.d.ts +57 -2
  238. package/dist/utils/claudeProfiles.d.ts.map +1 -1
  239. package/dist/utils/claudeProfiles.js +96 -3
  240. package/dist/utils/claudeProfiles.js.map +1 -1
  241. package/dist/utils/claudeStreamJson.d.ts +4 -1
  242. package/dist/utils/claudeStreamJson.d.ts.map +1 -1
  243. package/dist/utils/claudeStreamJson.js +6 -0
  244. package/dist/utils/claudeStreamJson.js.map +1 -1
  245. package/dist/utils/claudeTranscriptContent.d.ts +8 -0
  246. package/dist/utils/claudeTranscriptContent.d.ts.map +1 -1
  247. package/dist/utils/claudeTranscriptContent.js +44 -0
  248. package/dist/utils/claudeTranscriptContent.js.map +1 -1
  249. package/dist/utils/claudeUsage.d.ts +22 -6
  250. package/dist/utils/claudeUsage.d.ts.map +1 -1
  251. package/dist/utils/claudeUsage.js +12 -5
  252. package/dist/utils/claudeUsage.js.map +1 -1
  253. package/dist/utils/claudeUsageRefresher.d.ts +6 -0
  254. package/dist/utils/claudeUsageRefresher.d.ts.map +1 -1
  255. package/dist/utils/claudeUsageRefresher.js +2 -2
  256. package/dist/utils/claudeUsageRefresher.js.map +1 -1
  257. package/dist/utils/fallbackChain.d.ts +15 -8
  258. package/dist/utils/fallbackChain.d.ts.map +1 -1
  259. package/dist/utils/fallbackChain.js +30 -13
  260. package/dist/utils/fallbackChain.js.map +1 -1
  261. package/dist/utils/limitsBoardPlan.d.ts +4 -2
  262. package/dist/utils/limitsBoardPlan.d.ts.map +1 -1
  263. package/dist/utils/limitsBoardPlan.js +12 -5
  264. package/dist/utils/limitsBoardPlan.js.map +1 -1
  265. package/dist/utils/recvPreviewRedaction.d.ts +7 -2
  266. package/dist/utils/recvPreviewRedaction.d.ts.map +1 -1
  267. package/dist/utils/recvPreviewRedaction.js +10 -4
  268. package/dist/utils/recvPreviewRedaction.js.map +1 -1
  269. package/dist/utils/threadStatusReport.d.ts +12 -1
  270. package/dist/utils/threadStatusReport.d.ts.map +1 -1
  271. package/dist/utils/threadStatusReport.js +13 -4
  272. package/dist/utils/threadStatusReport.js.map +1 -1
  273. package/dist/utils/updateScreenPlan.d.ts +38 -0
  274. package/dist/utils/updateScreenPlan.d.ts.map +1 -0
  275. package/dist/utils/updateScreenPlan.js +143 -0
  276. package/dist/utils/updateScreenPlan.js.map +1 -0
  277. package/package.json +3 -1
@@ -1,4 +1,6 @@
1
1
  import type { AgentRuntimeInfo } from '../types';
2
+ import type { ClaudeProfileBilling } from './claudeProfiles';
3
+ import type { ClaudeApiSpend } from './claudeApiSpend';
2
4
  /** One Claude account profile as `/status` names it. */
3
5
  export interface ThreadStatusAccountSource {
4
6
  name: string;
@@ -8,6 +10,12 @@ export interface ThreadStatusAccountSource {
8
10
  loggedIn: boolean | undefined;
9
11
  /** Raw ISO limit mark of the profile record; a mark in the past reads as no limit. */
10
12
  limitedUntil: string | null;
13
+ /** How the account pays; `api` is marked on the row (every request costs money). Absent / `null`: a subscription. */
14
+ billing?: ClaudeProfileBilling | null;
15
+ /** When its API credits were found used up (marked on the row while it holds); absent / `null`: not marked. */
16
+ creditExhaustedAt?: string | null;
17
+ /** What an account billed to API credits spent through the bot (a line of its own under the row). */
18
+ apiSpend?: ClaudeApiSpend;
11
19
  }
12
20
  export interface ThreadStatusAccount {
13
21
  /** The account the live process runs on — or, with no live process, the one its next start uses. */
@@ -52,7 +60,10 @@ export interface ThreadStatusReportInput {
52
60
  * header, the bound working directory, the topic's view and the timezone.
53
61
  */
54
62
  export declare function getThreadStatusReport({ agentLine, subdir, isActive, isSleeping, workDir, model, effort, effortNextStart, startedAt, runtime, account, view, timezone, timezoneNow, }: ThreadStatusReportInput): string;
55
- /** @description The `Account:` row (plus a pending-switch row) of the `/status` report. */
63
+ /**
64
+ * @description The `Account:` row of the `/status` report, the spend line of an account billed to API credits, and a
65
+ * pending-switch row.
66
+ */
56
67
  export declare function formatThreadStatusAccountLines({ current, pending, nowMs }: ThreadStatusAccount, timezone: string): string[];
57
68
  export interface ThreadStatusModelSources {
58
69
  /** Live model the adapter itself can name right now (`getCurrentModel`). */
@@ -1 +1 @@
1
- {"version":3,"file":"threadStatusReport.d.ts","sourceRoot":"","sources":["../../src/utils/threadStatusReport.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAGjD,wDAAwD;AACxD,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,6GAA6G;IAC7G,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,sFAAsF;IACtF,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,oGAAoG;IACpG,OAAO,EAAE,yBAAyB,CAAC;IACnC,4GAA4G;IAC5G,OAAO,EAAE,yBAAyB,GAAG,IAAI,CAAC;IAC1C,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,iGAAiG;IACjG,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,uHAAuH;IACvH,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACjC;;;OAGG;IACH,OAAO,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACrC,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,SAAS,EACT,MAAM,EACN,QAAQ,EACR,UAAU,EACV,OAAO,EACP,KAAK,EACL,MAAM,EACN,eAAe,EACf,SAAS,EACT,OAAO,EACP,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,WAAW,GACZ,EAAE,uBAAuB,GAAG,MAAM,CA+BlC;AAcD,2FAA2F;AAC3F,wBAAgB,8BAA8B,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAI3H;AAED,MAAM,WAAW,wBAAwB;IACvC,4EAA4E;IAC5E,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,uFAAuF;IACvF,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,qEAAqE;IACrE,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,YAAY,EACZ,YAAY,EACZ,cAAc,GACf,EAAE,wBAAwB,GAAG,MAAM,GAAG,IAAI,CAE1C"}
1
+ {"version":3,"file":"threadStatusReport.d.ts","sourceRoot":"","sources":["../../src/utils/threadStatusReport.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGvD,wDAAwD;AACxD,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,6GAA6G;IAC7G,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,sFAAsF;IACtF,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,qHAAqH;IACrH,OAAO,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACtC,+GAA+G;IAC/G,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,qGAAqG;IACrG,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,oGAAoG;IACpG,OAAO,EAAE,yBAAyB,CAAC;IACnC,4GAA4G;IAC5G,OAAO,EAAE,yBAAyB,GAAG,IAAI,CAAC;IAC1C,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,iGAAiG;IACjG,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,uHAAuH;IACvH,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACjC;;;OAGG;IACH,OAAO,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACrC,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,SAAS,EACT,MAAM,EACN,QAAQ,EACR,UAAU,EACV,OAAO,EACP,KAAK,EACL,MAAM,EACN,eAAe,EACf,SAAS,EACT,OAAO,EACP,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,WAAW,GACZ,EAAE,uBAAuB,GAAG,MAAM,CA+BlC;AAgBD;;;GAGG;AACH,wBAAgB,8BAA8B,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAO3H;AAED,MAAM,WAAW,wBAAwB;IACvC,4EAA4E;IAC5E,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,uFAAuF;IACvF,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,qEAAqE;IACrE,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,YAAY,EACZ,YAAY,EACZ,cAAc,GACf,EAAE,wBAAwB,GAAG,MAAM,GAAG,IAAI,CAE1C"}
@@ -5,6 +5,7 @@ exports.formatThreadStatusAccountLines = formatThreadStatusAccountLines;
5
5
  exports.getThreadStatusModel = getThreadStatusModel;
6
6
  const i18n_1 = require("../i18n");
7
7
  const claudeUsage_1 = require("./claudeUsage");
8
+ const claudeProfileUsageLines_1 = require("./claudeProfileUsageLines");
8
9
  /**
9
10
  * @description Render the per-topic `/status` report. Pure (locale comes from
10
11
  * the caller's async i18n context) and kept OUT of `bot.ts` so it is unit-testable
@@ -52,18 +53,26 @@ function getThreadStatusReport({ agentLine, subdir, isActive, isSleeping, workDi
52
53
  }
53
54
  /**
54
55
  * @description `name · email` like an `/accounts` row (`name · not signed in` once a probe said so, the name
55
- * alone when never probed), plus the `/accounts` limit mark while it lies in the future, reset in the instance zone.
56
+ * alone when never probed), `· 💳 API` for an account billed to the API, `· 💸 credits used up` while that mark holds,
57
+ * plus the `/accounts` limit mark while it lies in the future, reset in the instance zone.
56
58
  */
57
- function formatAccount({ name, email, loggedIn, limitedUntil }, timezone, nowMs) {
59
+ function formatAccount({ name, email, loggedIn, limitedUntil, billing, creditExhaustedAt }, timezone, nowMs) {
58
60
  const detail = loggedIn === false ? (0, i18n_1.t)('account.row.loggedOut') : email;
61
+ const metered = `${billing === 'api' ? (0, i18n_1.t)('status.thread_account_api') : ''}${creditExhaustedAt ? (0, i18n_1.t)('status.thread_account_exhausted') : ''}`;
59
62
  const limited = limitedUntil !== null && Date.parse(limitedUntil) > nowMs
60
63
  ? (0, i18n_1.t)('status.thread_account_limited', { until: (0, claudeUsage_1.formatClaudeUsageResetAt)(limitedUntil, timezone, nowMs) })
61
64
  : '';
62
- return `${detail ? `${name} · ${detail}` : name}${limited}`;
65
+ return `${detail ? `${name} · ${detail}` : name}${metered}${limited}`;
63
66
  }
64
- /** @description The `Account:` row (plus a pending-switch row) of the `/status` report. */
67
+ /**
68
+ * @description The `Account:` row of the `/status` report, the spend line of an account billed to API credits, and a
69
+ * pending-switch row.
70
+ */
65
71
  function formatThreadStatusAccountLines({ current, pending, nowMs }, timezone) {
66
72
  const lines = [(0, i18n_1.t)('status.thread_account', { account: formatAccount(current, timezone, nowMs) })];
73
+ if (current.billing === 'api' && current.apiSpend) {
74
+ lines.push((0, i18n_1.t)('status.thread_api_spend', { name: current.name, ...(0, claudeProfileUsageLines_1.formatClaudeApiSpendWords)(current.apiSpend, timezone, nowMs) }));
75
+ }
67
76
  if (pending !== null)
68
77
  lines.push((0, i18n_1.t)('status.thread_account_pending', { account: formatAccount(pending, timezone, nowMs) }));
69
78
  return lines;
@@ -1 +1 @@
1
- {"version":3,"file":"threadStatusReport.js","sourceRoot":"","sources":["../../src/utils/threadStatusReport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"threadStatusReport.js","sourceRoot":"","sources":["../../src/utils/threadStatusReport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { UpdateOffer, UpdateStatus } from '../selfUpdate/updateEngine';
2
+ import { type Translate } from '../selfUpdate/updateMessages';
3
+ /**
4
+ * @description Pure plan of the `/update` screen (text + buttons), shared by the command and its buttons in
5
+ * `connectors/telegram/commands/selfUpdate.ts` so the text and the ✓ can never drift between the first render and the
6
+ * re-render after a tap. In General it carries the controls; in any other topic it is the same text without buttons and with
7
+ * "Change it in General."
8
+ */
9
+ export declare const updateModeCallbackPrefix = "upd_mode_";
10
+ export declare const updateWhatsNewCallbackPrefix = "upd_notes_";
11
+ export declare const updateCheckCallback = "upd_check";
12
+ /** Matches the install tap on the screen: `upd_go_<version or commit>`. */
13
+ export declare const updateInstallCallbackRe: RegExp;
14
+ /** Matches the install tap under an announcement in General: `upd_ann_<version or commit>`. */
15
+ export declare const updateAnnouncementInstallCallbackRe: RegExp;
16
+ export interface UpdateScreenButton {
17
+ text: string;
18
+ data: string;
19
+ }
20
+ export interface UpdateScreen {
21
+ text: string;
22
+ rows: UpdateScreenButton[][];
23
+ }
24
+ export interface UpdateScreenInput {
25
+ status: UpdateStatus;
26
+ /** The controls are General's; elsewhere the screen is read-only. */
27
+ isGeneral: boolean;
28
+ now: number;
29
+ /** The wall-clock time of an instant, in the instance's time zone (`14:20`). */
30
+ formatClock: (epochMs: number) => string;
31
+ }
32
+ /** @description "just now", "20 min ago", "3 h ago", "2 d ago". */
33
+ export declare function formatAgo(elapsedMs: number, translate: Translate): string;
34
+ /** @description Why an update that exists cannot be installed now — the line the screen shows, and what a refused «update now» says. */
35
+ export declare function describeBlockedOffer(offer: UpdateOffer, runningNode: string, translate: Translate): string;
36
+ /** @description The whole `/update` screen. */
37
+ export declare function buildUpdateScreen(input: UpdateScreenInput, translate: Translate): UpdateScreen;
38
+ //# sourceMappingURL=updateScreenPlan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateScreenPlan.d.ts","sourceRoot":"","sources":["../../src/utils/updateScreenPlan.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAwE,KAAK,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAGpI;;;;;GAKG;AAEH,eAAO,MAAM,wBAAwB,cAAc,CAAC;AACpD,eAAO,MAAM,4BAA4B,eAAe,CAAC;AACzD,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAC/C,2EAA2E;AAC3E,eAAO,MAAM,uBAAuB,QAAqD,CAAC;AAC1F,+FAA+F;AAC/F,eAAO,MAAM,mCAAmC,QAAiE,CAAC;AAMlH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,kBAAkB,EAAE,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,YAAY,CAAC;IACrB,qEAAqE;IACrE,SAAS,EAAE,OAAO,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,gFAAgF;IAChF,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;CAC1C;AAED,mEAAmE;AACnE,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,MAAM,CAKzE;AAoCD,wIAAwI;AACxI,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,MAAM,CAG1G;AA4DD,+CAA+C;AAC/C,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,SAAS,GAAG,YAAY,CAO9F"}
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updateAnnouncementInstallCallbackRe = exports.updateInstallCallbackRe = exports.updateCheckCallback = exports.updateWhatsNewCallbackPrefix = exports.updateModeCallbackPrefix = void 0;
4
+ exports.formatAgo = formatAgo;
5
+ exports.describeBlockedOffer = describeBlockedOffer;
6
+ exports.buildUpdateScreen = buildUpdateScreen;
7
+ const updateMessages_1 = require("../selfUpdate/updateMessages");
8
+ /**
9
+ * @description Pure plan of the `/update` screen (text + buttons), shared by the command and its buttons in
10
+ * `connectors/telegram/commands/selfUpdate.ts` so the text and the ✓ can never drift between the first render and the
11
+ * re-render after a tap. In General it carries the controls; in any other topic it is the same text without buttons and with
12
+ * "Change it in General."
13
+ */
14
+ exports.updateModeCallbackPrefix = 'upd_mode_';
15
+ exports.updateWhatsNewCallbackPrefix = 'upd_notes_';
16
+ exports.updateCheckCallback = 'upd_check';
17
+ /** Matches the install tap on the screen: `upd_go_<version or commit>`. */
18
+ exports.updateInstallCallbackRe = new RegExp(`^${updateMessages_1.updateInstallCallbackPrefix}(.+)$`);
19
+ /** Matches the install tap under an announcement in General: `upd_ann_<version or commit>`. */
20
+ exports.updateAnnouncementInstallCallbackRe = new RegExp(`^${updateMessages_1.updateAnnouncementInstallCallbackPrefix}(.+)$`);
21
+ const minuteMs = 60 * 1000;
22
+ const hourMs = 60 * minuteMs;
23
+ const dayMs = 24 * hourMs;
24
+ /** @description "just now", "20 min ago", "3 h ago", "2 d ago". */
25
+ function formatAgo(elapsedMs, translate) {
26
+ if (elapsedMs < minuteMs)
27
+ return translate('update.screen.ago.justNow');
28
+ if (elapsedMs < hourMs)
29
+ return translate('update.screen.ago.minutes', { count: Math.floor(elapsedMs / minuteMs) });
30
+ if (elapsedMs < dayMs)
31
+ return translate('update.screen.ago.hours', { count: Math.floor(elapsedMs / hourMs) });
32
+ return translate('update.screen.ago.days', { count: Math.floor(elapsedMs / dayMs) });
33
+ }
34
+ function describeInstall(status, translate) {
35
+ const { installKind, running, isHotMode } = status;
36
+ const version = running.version;
37
+ switch (installKind.kind) {
38
+ case 'npmGlobal':
39
+ return translate('update.screen.install.npm', { version, prefix: installKind.prefix });
40
+ case 'checkout':
41
+ return translate(isHotMode ? 'update.screen.install.gitHot' : 'update.screen.install.git', { version, commit: running.commit ?? '?' });
42
+ case 'ephemeral':
43
+ return translate('update.screen.install.ephemeral', { version });
44
+ case 'notifyOnly':
45
+ return translate(`update.screen.install.notifyOnly.${installKind.reason}`, { version, commit: running.commit ?? '?' });
46
+ }
47
+ }
48
+ function describeMode(status, translate) {
49
+ const mode = status.settings.autoUpdate;
50
+ const canInstall = status.installKind.kind === 'npmGlobal' || status.installKind.kind === 'checkout';
51
+ if (mode === 'on' && !canInstall)
52
+ return translate('update.screen.mode.onNotifyOnly');
53
+ return translate(`update.screen.mode.${mode}`);
54
+ }
55
+ function describeSkip(reason, translate) {
56
+ switch (reason) {
57
+ case 'dirty':
58
+ case 'diverged':
59
+ case 'noUpstream':
60
+ case 'inProgress':
61
+ return translate(`update.screen.skip.${reason}`);
62
+ default:
63
+ return translate('update.screen.skip.other');
64
+ }
65
+ }
66
+ /** @description Why an update that exists cannot be installed now — the line the screen shows, and what a refused «update now» says. */
67
+ function describeBlockedOffer(offer, runningNode, translate) {
68
+ if (offer.action === 'needsNode')
69
+ return translate('update.screen.offer.needsNode', { version: offer.target, required: offer.required ?? '', running: runningNode });
70
+ return translate('update.screen.skipped', { reason: describeSkip(offer.skipReason, translate) });
71
+ }
72
+ function describeOffer(offer, status, input, translate) {
73
+ const params = { version: offer.target, required: offer.required ?? '', running: status.runningNode };
74
+ switch (offer.action) {
75
+ case 'waitHold': {
76
+ const key = status.settings.autoUpdate === 'on' && offer.canInstallNow ? 'update.screen.offer.waitHoldAuto' : 'update.screen.offer.waitHoldNotice';
77
+ return translate(key, { ...params, time: input.formatClock(offer.until ?? input.now) });
78
+ }
79
+ case 'installWhenIdle':
80
+ return translate('update.screen.offer.installWhenIdle', params);
81
+ case 'notify':
82
+ return translate(offer.canInstallNow ? 'update.screen.offer.notify' : 'update.screen.offer.notifyManual', params);
83
+ case 'offerMajor':
84
+ return translate('update.screen.offer.major', params);
85
+ case 'offerBreaking':
86
+ return translate('update.screen.offer.breaking', params);
87
+ case 'needsNode':
88
+ case 'skipped':
89
+ return describeBlockedOffer(offer, status.runningNode, translate);
90
+ }
91
+ }
92
+ /** The "Checked … · …" line: what the last check saw, or what is going on right now. */
93
+ function describeProgress(status, input, translate) {
94
+ const target = status.inProgressTarget ?? '';
95
+ if (status.phase === 'installing')
96
+ return translate('update.screen.phase.installing', { version: target });
97
+ if (status.phase === 'restartPending')
98
+ return translate('update.screen.phase.restartPending', { version: target });
99
+ if (status.phase === 'waitingForIdle' && target !== '')
100
+ return translate('update.screen.phase.waitingForIdle', { version: target });
101
+ if (status.lastCheckAt === null || status.observation === null)
102
+ return translate('update.screen.neverChecked');
103
+ const ago = formatAgo(input.now - status.lastCheckAt, translate);
104
+ if (status.observation.kind === 'error')
105
+ return translate('update.screen.checkFailed', { ago, reason: status.observation.reason });
106
+ const detail = status.offer === null ? translate('update.screen.upToDate') : describeOffer(status.offer, status, input, translate);
107
+ return translate('update.screen.checked', { ago, detail });
108
+ }
109
+ function buildButtons(status, translate) {
110
+ const mode = status.settings.autoUpdate;
111
+ const modeLabels = [
112
+ ['on', translate('update.screen.button.modeOn')],
113
+ ['notify', translate('update.screen.button.modeNotify')],
114
+ ['off', translate('update.screen.button.modeOff')],
115
+ ];
116
+ const rows = [
117
+ modeLabels.map(([candidate, label]) => ({ text: candidate === mode ? `✓ ${label}` : label, data: `${exports.updateModeCallbackPrefix}${candidate}` })),
118
+ [
119
+ {
120
+ text: translate(status.settings.whatsNew ? 'update.screen.button.whatsNewOn' : 'update.screen.button.whatsNewOff'),
121
+ data: `${exports.updateWhatsNewCallbackPrefix}${status.settings.whatsNew ? 'off' : 'on'}`,
122
+ },
123
+ ],
124
+ [{ text: translate('update.screen.button.check'), data: exports.updateCheckCallback }],
125
+ ];
126
+ const isBusy = status.phase === 'installing' || status.phase === 'restartPending';
127
+ if (status.offer?.canInstallNow && !isBusy) {
128
+ rows.push([{ text: translate('update.screen.button.updateNow', { version: status.offer.target }), data: `${updateMessages_1.updateInstallCallbackPrefix}${status.offer.target}` }]);
129
+ }
130
+ return rows;
131
+ }
132
+ /** @description The whole `/update` screen. */
133
+ function buildUpdateScreen(input, translate) {
134
+ const { status } = input;
135
+ const lines = [describeInstall(status, translate), '', describeMode(status, translate), translate(status.settings.whatsNew ? 'update.screen.whatsNew.on' : 'update.screen.whatsNew.off'), '', describeProgress(status, input, translate)];
136
+ const manualCommand = status.installKind.kind === 'notifyOnly' ? status.installKind.manualCommand : null;
137
+ if (manualCommand !== null)
138
+ lines.push(translate('update.screen.manual', { command: manualCommand }));
139
+ if (!input.isGeneral)
140
+ lines.push('', translate('update.screen.changeInGeneral'));
141
+ return { text: lines.join('\n'), rows: input.isGeneral ? buildButtons(status, translate) : [] };
142
+ }
143
+ //# sourceMappingURL=updateScreenPlan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateScreenPlan.js","sourceRoot":"","sources":["../../src/utils/updateScreenPlan.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "charness",
3
- "version": "3.3.2",
3
+ "version": "3.5.0",
4
4
  "license": "MIT",
5
5
  "author": "Sergei Solo",
6
6
  "description": "Charness (formerly TelegramCode): Telegram forum-supergroup bot for Claude Code / OpenCode — one topic per task, isolated sessions, per-thread MCP",
@@ -25,6 +25,7 @@
25
25
  "files": [
26
26
  "dist/",
27
27
  "stt/gigaam_sidecar.py",
28
+ "CHANGELOG.md",
28
29
  "README.md",
29
30
  "DEVELOPMENT.md",
30
31
  "SETUP.md",
@@ -61,6 +62,7 @@
61
62
  "typecheck": "tsc -p tsconfig.typecheck.json",
62
63
  "prepublishOnly": "yarn typecheck && yarn build",
63
64
  "preversion": "yarn typecheck && yarn build && yarn test",
65
+ "version": "tsx src/release/cli.ts changelog && git add CHANGELOG.md",
64
66
  "test": "yarn test:unit && yarn test:flows",
65
67
  "test:unit": "node --import tsx --import ./src/__tests__/globalTestSetup.ts --test --test-timeout=120000 'src/__tests__/**/!(*E2e|*Live).test.ts'",
66
68
  "test:flows": "node --import tsx --import ./src/__tests__/globalTestSetup.ts --test --test-timeout=1200000 'src/__tests__/**/*E2e.test.ts'",