charness 3.0.0 โ†’ 3.2.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 (293) hide show
  1. package/.env.example +8 -7
  2. package/DEVELOPMENT.md +12 -6
  3. package/MIGRATION_1_TO_2.md +1 -1
  4. package/MIGRATION_RENAME_TO_CHARNESS.md +133 -0
  5. package/README.md +221 -555
  6. package/SETUP.md +539 -0
  7. package/dist/adapters/claudeCliAdapter.d.ts +16 -1
  8. package/dist/adapters/claudeCliAdapter.d.ts.map +1 -1
  9. package/dist/adapters/claudeCliAdapter.js +37 -2
  10. package/dist/adapters/claudeCliAdapter.js.map +1 -1
  11. package/dist/adapters/claudeConfigDir.d.ts +40 -0
  12. package/dist/adapters/claudeConfigDir.d.ts.map +1 -0
  13. package/dist/adapters/claudeConfigDir.js +3 -0
  14. package/dist/adapters/claudeConfigDir.js.map +1 -0
  15. package/dist/adapters/claudeJsonStreamAdapter.d.ts +32 -0
  16. package/dist/adapters/claudeJsonStreamAdapter.d.ts.map +1 -1
  17. package/dist/adapters/claudeJsonStreamAdapter.js +90 -8
  18. package/dist/adapters/claudeJsonStreamAdapter.js.map +1 -1
  19. package/dist/adapters/claudePlatformFlags.d.ts +4 -4
  20. package/dist/adapters/claudePlatformFlags.js +4 -4
  21. package/dist/adapters/createAdapter.d.ts +8 -0
  22. package/dist/adapters/createAdapter.d.ts.map +1 -1
  23. package/dist/adapters/createAdapter.js +37 -0
  24. package/dist/adapters/createAdapter.js.map +1 -1
  25. package/dist/adapters/openCodeAdapter.d.ts +23 -0
  26. package/dist/adapters/openCodeAdapter.d.ts.map +1 -1
  27. package/dist/adapters/openCodeAdapter.js +85 -2
  28. package/dist/adapters/openCodeAdapter.js.map +1 -1
  29. package/dist/agentLogin/agentLogin.d.ts +15 -2
  30. package/dist/agentLogin/agentLogin.d.ts.map +1 -1
  31. package/dist/agentLogin/agentLogin.js +53 -16
  32. package/dist/agentLogin/agentLogin.js.map +1 -1
  33. package/dist/apiErrorRetry.d.ts +8 -3
  34. package/dist/apiErrorRetry.d.ts.map +1 -1
  35. package/dist/apiErrorRetry.js +36 -5
  36. package/dist/apiErrorRetry.js.map +1 -1
  37. package/dist/apiRetryKick.d.ts +9 -0
  38. package/dist/apiRetryKick.d.ts.map +1 -1
  39. package/dist/apiRetryKick.js +16 -0
  40. package/dist/apiRetryKick.js.map +1 -1
  41. package/dist/bot.d.ts.map +1 -1
  42. package/dist/bot.js +642 -26
  43. package/dist/bot.js.map +1 -1
  44. package/dist/cli/bot.d.ts +4 -2
  45. package/dist/cli/bot.d.ts.map +1 -1
  46. package/dist/cli/bot.js +11 -3
  47. package/dist/cli/bot.js.map +1 -1
  48. package/dist/cli/botEntry.js +3 -1
  49. package/dist/cli/botEntry.js.map +1 -1
  50. package/dist/cli/claudeProfiles.d.ts +42 -0
  51. package/dist/cli/claudeProfiles.d.ts.map +1 -0
  52. package/dist/cli/claudeProfiles.js +106 -0
  53. package/dist/cli/claudeProfiles.js.map +1 -0
  54. package/dist/cli/envLoader.d.ts +6 -5
  55. package/dist/cli/envLoader.d.ts.map +1 -1
  56. package/dist/cli/envLoader.js +8 -27
  57. package/dist/cli/envLoader.js.map +1 -1
  58. package/dist/cli/hot.d.ts +2 -2
  59. package/dist/cli/hot.d.ts.map +1 -1
  60. package/dist/cli/hot.js +26 -16
  61. package/dist/cli/hot.js.map +1 -1
  62. package/dist/cli.js +19 -9
  63. package/dist/cli.js.map +1 -1
  64. package/dist/connectors/jira/adf.d.ts +23 -0
  65. package/dist/connectors/jira/adf.d.ts.map +1 -1
  66. package/dist/connectors/jira/adf.js +44 -0
  67. package/dist/connectors/jira/adf.js.map +1 -1
  68. package/dist/connectors/jira/answerSink.d.ts +27 -3
  69. package/dist/connectors/jira/answerSink.d.ts.map +1 -1
  70. package/dist/connectors/jira/answerSink.js +145 -18
  71. package/dist/connectors/jira/answerSink.js.map +1 -1
  72. package/dist/connectors/jira/attachmentTool.d.ts +7 -0
  73. package/dist/connectors/jira/attachmentTool.d.ts.map +1 -1
  74. package/dist/connectors/jira/attachmentTool.js +16 -0
  75. package/dist/connectors/jira/attachmentTool.js.map +1 -1
  76. package/dist/connectors/jira/client.d.ts +36 -0
  77. package/dist/connectors/jira/client.d.ts.map +1 -1
  78. package/dist/connectors/jira/client.js +46 -5
  79. package/dist/connectors/jira/client.js.map +1 -1
  80. package/dist/connectors/jira/config.d.ts +13 -17
  81. package/dist/connectors/jira/config.d.ts.map +1 -1
  82. package/dist/connectors/jira/config.js +15 -33
  83. package/dist/connectors/jira/config.js.map +1 -1
  84. package/dist/connectors/jira/connector.d.ts +10 -1
  85. package/dist/connectors/jira/connector.d.ts.map +1 -1
  86. package/dist/connectors/jira/connector.js +90 -16
  87. package/dist/connectors/jira/connector.js.map +1 -1
  88. package/dist/connectors/jira/contextLedger.d.ts +7 -0
  89. package/dist/connectors/jira/contextLedger.d.ts.map +1 -1
  90. package/dist/connectors/jira/contextLedger.js +18 -0
  91. package/dist/connectors/jira/contextLedger.js.map +1 -1
  92. package/dist/connectors/jira/contextPreamble.d.ts.map +1 -1
  93. package/dist/connectors/jira/contextPreamble.js +6 -3
  94. package/dist/connectors/jira/contextPreamble.js.map +1 -1
  95. package/dist/connectors/jira/inbound.d.ts +72 -10
  96. package/dist/connectors/jira/inbound.d.ts.map +1 -1
  97. package/dist/connectors/jira/inbound.js +204 -36
  98. package/dist/connectors/jira/inbound.js.map +1 -1
  99. package/dist/connectors/jira/issueBlocks.d.ts +31 -3
  100. package/dist/connectors/jira/issueBlocks.d.ts.map +1 -1
  101. package/dist/connectors/jira/issueBlocks.js +108 -29
  102. package/dist/connectors/jira/issueBlocks.js.map +1 -1
  103. package/dist/connectors/jira/issueContext.d.ts +11 -5
  104. package/dist/connectors/jira/issueContext.d.ts.map +1 -1
  105. package/dist/connectors/jira/issueContext.js +23 -6
  106. package/dist/connectors/jira/issueContext.js.map +1 -1
  107. package/dist/connectors/jira/issueDelta.d.ts +3 -0
  108. package/dist/connectors/jira/issueDelta.d.ts.map +1 -1
  109. package/dist/connectors/jira/issueDelta.js +15 -6
  110. package/dist/connectors/jira/issueDelta.js.map +1 -1
  111. package/dist/connectors/jira/mediaPlaceholders.d.ts +2 -0
  112. package/dist/connectors/jira/mediaPlaceholders.d.ts.map +1 -1
  113. package/dist/connectors/jira/mediaPlaceholders.js +16 -3
  114. package/dist/connectors/jira/mediaPlaceholders.js.map +1 -1
  115. package/dist/connectors/jira/prompt.d.ts +4 -0
  116. package/dist/connectors/jira/prompt.d.ts.map +1 -1
  117. package/dist/connectors/jira/prompt.js +20 -1
  118. package/dist/connectors/jira/prompt.js.map +1 -1
  119. package/dist/connectors/jira/sessionKeyCodec.d.ts +2 -0
  120. package/dist/connectors/jira/sessionKeyCodec.d.ts.map +1 -1
  121. package/dist/connectors/jira/sessionKeyCodec.js +5 -0
  122. package/dist/connectors/jira/sessionKeyCodec.js.map +1 -1
  123. package/dist/connectors/jira/trigger.d.ts +16 -3
  124. package/dist/connectors/jira/trigger.d.ts.map +1 -1
  125. package/dist/connectors/jira/trigger.js +17 -2
  126. package/dist/connectors/jira/trigger.js.map +1 -1
  127. package/dist/connectors/jira/triggerLog.d.ts +12 -3
  128. package/dist/connectors/jira/triggerLog.d.ts.map +1 -1
  129. package/dist/connectors/jira/triggerLog.js +18 -2
  130. package/dist/connectors/jira/triggerLog.js.map +1 -1
  131. package/dist/connectors/jira/trustedGroup.d.ts +54 -0
  132. package/dist/connectors/jira/trustedGroup.d.ts.map +1 -0
  133. package/dist/connectors/jira/trustedGroup.js +98 -0
  134. package/dist/connectors/jira/trustedGroup.js.map +1 -0
  135. package/dist/connectors/telegram/commands/autoContinueLimits.d.ts +3 -0
  136. package/dist/connectors/telegram/commands/autoContinueLimits.d.ts.map +1 -1
  137. package/dist/connectors/telegram/commands/autoContinueLimits.js +15 -45
  138. package/dist/connectors/telegram/commands/autoContinueLimits.js.map +1 -1
  139. package/dist/connectors/telegram/commands/claudeAccounts.d.ts +58 -0
  140. package/dist/connectors/telegram/commands/claudeAccounts.d.ts.map +1 -0
  141. package/dist/connectors/telegram/commands/claudeAccounts.js +591 -0
  142. package/dist/connectors/telegram/commands/claudeAccounts.js.map +1 -0
  143. package/dist/connectors/telegram/commands/fallbackChain.d.ts +49 -0
  144. package/dist/connectors/telegram/commands/fallbackChain.d.ts.map +1 -0
  145. package/dist/connectors/telegram/commands/fallbackChain.js +624 -0
  146. package/dist/connectors/telegram/commands/fallbackChain.js.map +1 -0
  147. package/dist/connectors/telegram/commands/modelProviders.d.ts +23 -1
  148. package/dist/connectors/telegram/commands/modelProviders.d.ts.map +1 -1
  149. package/dist/connectors/telegram/commands/modelProviders.js +131 -6
  150. package/dist/connectors/telegram/commands/modelProviders.js.map +1 -1
  151. package/dist/i18n/de.d.ts.map +1 -1
  152. package/dist/i18n/de.js +137 -9
  153. package/dist/i18n/de.js.map +1 -1
  154. package/dist/i18n/en.d.ts.map +1 -1
  155. package/dist/i18n/en.js +137 -9
  156. package/dist/i18n/en.js.map +1 -1
  157. package/dist/i18n/es.d.ts.map +1 -1
  158. package/dist/i18n/es.js +137 -9
  159. package/dist/i18n/es.js.map +1 -1
  160. package/dist/i18n/fr.d.ts.map +1 -1
  161. package/dist/i18n/fr.js +137 -9
  162. package/dist/i18n/fr.js.map +1 -1
  163. package/dist/i18n/hi.d.ts.map +1 -1
  164. package/dist/i18n/hi.js +137 -9
  165. package/dist/i18n/hi.js.map +1 -1
  166. package/dist/i18n/ja.d.ts.map +1 -1
  167. package/dist/i18n/ja.js +137 -9
  168. package/dist/i18n/ja.js.map +1 -1
  169. package/dist/i18n/ka.d.ts.map +1 -1
  170. package/dist/i18n/ka.js +137 -9
  171. package/dist/i18n/ka.js.map +1 -1
  172. package/dist/i18n/pt.d.ts.map +1 -1
  173. package/dist/i18n/pt.js +137 -9
  174. package/dist/i18n/pt.js.map +1 -1
  175. package/dist/i18n/ru.d.ts.map +1 -1
  176. package/dist/i18n/ru.js +137 -9
  177. package/dist/i18n/ru.js.map +1 -1
  178. package/dist/i18n/uk.d.ts.map +1 -1
  179. package/dist/i18n/uk.js +137 -9
  180. package/dist/i18n/uk.js.map +1 -1
  181. package/dist/i18n/uz.d.ts.map +1 -1
  182. package/dist/i18n/uz.js +137 -9
  183. package/dist/i18n/uz.js.map +1 -1
  184. package/dist/i18n/zh.d.ts.map +1 -1
  185. package/dist/i18n/zh.js +137 -9
  186. package/dist/i18n/zh.js.map +1 -1
  187. package/dist/index.js +1 -1
  188. package/dist/index.js.map +1 -1
  189. package/dist/installManager.d.ts +16 -2
  190. package/dist/installManager.d.ts.map +1 -1
  191. package/dist/installManager.js +42 -12
  192. package/dist/installManager.js.map +1 -1
  193. package/dist/instanceLock.d.ts.map +1 -1
  194. package/dist/instanceLock.js +10 -8
  195. package/dist/instanceLock.js.map +1 -1
  196. package/dist/legacyMigration.d.ts +69 -0
  197. package/dist/legacyMigration.d.ts.map +1 -0
  198. package/dist/legacyMigration.js +338 -0
  199. package/dist/legacyMigration.js.map +1 -0
  200. package/dist/legacyNames.d.ts +107 -0
  201. package/dist/legacyNames.d.ts.map +1 -0
  202. package/dist/legacyNames.js +230 -0
  203. package/dist/legacyNames.js.map +1 -0
  204. package/dist/platform/answerSink.d.ts +5 -0
  205. package/dist/platform/answerSink.d.ts.map +1 -1
  206. package/dist/platform/answerSink.js.map +1 -1
  207. package/dist/requests/answerRequest.d.ts +2 -0
  208. package/dist/requests/answerRequest.d.ts.map +1 -1
  209. package/dist/requests/answerRequest.js +3 -1
  210. package/dist/requests/answerRequest.js.map +1 -1
  211. package/dist/requests/answerStyle.d.ts +11 -0
  212. package/dist/requests/answerStyle.d.ts.map +1 -0
  213. package/dist/requests/answerStyle.js +14 -0
  214. package/dist/requests/answerStyle.js.map +1 -0
  215. package/dist/requests/answerTail.d.ts.map +1 -1
  216. package/dist/requests/answerTail.js +2 -0
  217. package/dist/requests/answerTail.js.map +1 -1
  218. package/dist/requests/requestHeader.d.ts.map +1 -1
  219. package/dist/requests/requestHeader.js +3 -0
  220. package/dist/requests/requestHeader.js.map +1 -1
  221. package/dist/requests/requestLedger.js +1 -1
  222. package/dist/requests/requestLedger.js.map +1 -1
  223. package/dist/requests/types.d.ts +3 -1
  224. package/dist/requests/types.d.ts.map +1 -1
  225. package/dist/scheduler/mcpSurface.d.ts +17 -1
  226. package/dist/scheduler/mcpSurface.d.ts.map +1 -1
  227. package/dist/scheduler/mcpSurface.js +86 -13
  228. package/dist/scheduler/mcpSurface.js.map +1 -1
  229. package/dist/state.d.ts +175 -2
  230. package/dist/state.d.ts.map +1 -1
  231. package/dist/state.js +303 -2
  232. package/dist/state.js.map +1 -1
  233. package/dist/types.d.ts +7 -0
  234. package/dist/types.d.ts.map +1 -1
  235. package/dist/utils/autoContinueOnLimit.d.ts +7 -0
  236. package/dist/utils/autoContinueOnLimit.d.ts.map +1 -1
  237. package/dist/utils/autoContinueOnLimit.js +10 -0
  238. package/dist/utils/autoContinueOnLimit.js.map +1 -1
  239. package/dist/utils/claudeAccountPickerPlan.d.ts +85 -0
  240. package/dist/utils/claudeAccountPickerPlan.d.ts.map +1 -0
  241. package/dist/utils/claudeAccountPickerPlan.js +123 -0
  242. package/dist/utils/claudeAccountPickerPlan.js.map +1 -0
  243. package/dist/utils/claudeLimitSwitch.d.ts +40 -0
  244. package/dist/utils/claudeLimitSwitch.d.ts.map +1 -0
  245. package/dist/utils/claudeLimitSwitch.js +54 -0
  246. package/dist/utils/claudeLimitSwitch.js.map +1 -0
  247. package/dist/utils/claudeProfileUsageLines.d.ts +15 -0
  248. package/dist/utils/claudeProfileUsageLines.d.ts.map +1 -0
  249. package/dist/utils/claudeProfileUsageLines.js +42 -0
  250. package/dist/utils/claudeProfileUsageLines.js.map +1 -0
  251. package/dist/utils/claudeProfiles.d.ts +124 -0
  252. package/dist/utils/claudeProfiles.d.ts.map +1 -0
  253. package/dist/utils/claudeProfiles.js +304 -0
  254. package/dist/utils/claudeProfiles.js.map +1 -0
  255. package/dist/utils/claudeStreamJson.d.ts +13 -1
  256. package/dist/utils/claudeStreamJson.d.ts.map +1 -1
  257. package/dist/utils/claudeStreamJson.js +13 -0
  258. package/dist/utils/claudeStreamJson.js.map +1 -1
  259. package/dist/utils/claudeUsage.d.ts +209 -0
  260. package/dist/utils/claudeUsage.d.ts.map +1 -0
  261. package/dist/utils/claudeUsage.js +413 -0
  262. package/dist/utils/claudeUsage.js.map +1 -0
  263. package/dist/utils/claudeUsageRefresher.d.ts +44 -0
  264. package/dist/utils/claudeUsageRefresher.d.ts.map +1 -0
  265. package/dist/utils/claudeUsageRefresher.js +95 -0
  266. package/dist/utils/claudeUsageRefresher.js.map +1 -0
  267. package/dist/utils/fallbackBridge.d.ts +32 -0
  268. package/dist/utils/fallbackBridge.d.ts.map +1 -0
  269. package/dist/utils/fallbackBridge.js +62 -0
  270. package/dist/utils/fallbackBridge.js.map +1 -0
  271. package/dist/utils/fallbackChain.d.ts +299 -0
  272. package/dist/utils/fallbackChain.d.ts.map +1 -0
  273. package/dist/utils/fallbackChain.js +542 -0
  274. package/dist/utils/fallbackChain.js.map +1 -0
  275. package/dist/utils/jsonStreamHost.d.ts +14 -3
  276. package/dist/utils/jsonStreamHost.d.ts.map +1 -1
  277. package/dist/utils/jsonStreamHost.js +26 -5
  278. package/dist/utils/jsonStreamHost.js.map +1 -1
  279. package/dist/utils/modelRecentPlan.d.ts +56 -0
  280. package/dist/utils/modelRecentPlan.d.ts.map +1 -0
  281. package/dist/utils/modelRecentPlan.js +107 -0
  282. package/dist/utils/modelRecentPlan.js.map +1 -0
  283. package/dist/utils/openCodeCompactPlugin.d.ts +11 -3
  284. package/dist/utils/openCodeCompactPlugin.d.ts.map +1 -1
  285. package/dist/utils/openCodeCompactPlugin.js +37 -5
  286. package/dist/utils/openCodeCompactPlugin.js.map +1 -1
  287. package/dist/utils/threadStatusReport.d.ts +25 -1
  288. package/dist/utils/threadStatusReport.d.ts.map +1 -1
  289. package/dist/utils/threadStatusReport.js +24 -1
  290. package/dist/utils/threadStatusReport.js.map +1 -1
  291. package/examples/.env.example +7 -7
  292. package/examples/docker-compose.yml +15 -14
  293. package/package.json +3 -1
@@ -0,0 +1,591 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createClaudeAccounts = createClaudeAccounts;
4
+ /**
5
+ * `/accounts` โ€” every account the bot works with, on one screen: the Claude accounts (profiles) with their usage
6
+ * (which one a topic's Claude sessions run on, add / re-login / remove) and the OpenCode providers the server is
7
+ * authenticated for (connect / disconnect). `/account`, `/connect` and `/disconnect` stay as hidden aliases; the
8
+ * OpenCode flows themselves live in `modelProviders.ts` and are only entered from here through ports. See
9
+ * README.md in this folder and `utils/claudeProfiles.ts`.
10
+ */
11
+ const telegraf_1 = require("telegraf");
12
+ const sessionKey_1 = require("../../../sessionKey");
13
+ const i18n_1 = require("../../../i18n");
14
+ const claudeProfiles_1 = require("../../../utils/claudeProfiles");
15
+ const claudeProfileUsageLines_1 = require("../../../utils/claudeProfileUsageLines");
16
+ const claudeUsageRefresher_1 = require("../../../utils/claudeUsageRefresher");
17
+ const claudeAccountPickerPlan_1 = require("../../../utils/claudeAccountPickerPlan");
18
+ const openCodeAdapter_1 = require("../../../adapters/openCodeAdapter");
19
+ const callbackMessage_1 = require("./callbackMessage");
20
+ /** Screens whose provider snapshot is kept (the newest); an older keyboard is refused as expired. */
21
+ const providerSnapshotLimit = 50;
22
+ /**
23
+ * @description Build the `/account` feature over its ports: the command, its buttons, the name capture the
24
+ * ยซAddยป button arms (the text handler asks `checkIsAwaitingProfileName` / `submitProfileName`), and the
25
+ * auth-status sink the sign-in driver reports to.
26
+ */
27
+ function createClaudeAccounts(ports) {
28
+ const { bot, command, getState, replyToThread, editThreadMessage, authoriseContext, withThreadLocale, checkIsGeneral, getDataDir, getInstanceTimezone, refreshClaudeUsage, readClaudeAuthStatus, startClaudeProfileLogin, applyClaudeProfile, applyClaudeProfileEverywhere, detectOpenCodeProviders, disconnectOpenCodeProvider, startOpenCodeConnect, applyAutoSwitch, getHomeClaudeDir, } = ports;
29
+ /**
30
+ * Topics whose next plain message is an answer to ยซโž•ยป: the name of a new Claude profile, or the id of the
31
+ * OpenCode provider to connect. One capture per topic; armed by the buttons / `add`, disarmed by a slash
32
+ * command or `/esc`.
33
+ */
34
+ const awaitingProfileName = new Map();
35
+ /** The OpenCode providers each screen MESSAGE listed โ€” its disconnect buttons carry an index into this. */
36
+ const providerSnapshots = new Map();
37
+ function rememberProviders(messageId, providers) {
38
+ providerSnapshots.delete(messageId);
39
+ providerSnapshots.set(messageId, providers);
40
+ while (providerSnapshots.size > providerSnapshotLimit) {
41
+ const oldest = providerSnapshots.keys().next().value;
42
+ if (oldest === undefined)
43
+ break;
44
+ providerSnapshots.delete(oldest);
45
+ }
46
+ }
47
+ async function readOpenCodeProviders() {
48
+ try {
49
+ return await detectOpenCodeProviders();
50
+ }
51
+ catch (e) {
52
+ console.warn('[accounts] the OpenCode providers are unavailable:', e instanceof Error ? e.message : e);
53
+ return [];
54
+ }
55
+ }
56
+ function resolveActiveName(key, isGeneral) {
57
+ return isGeneral ? getState().getClaudeProfileGlobalDefault() : getState().resolveClaudeProfileName(key);
58
+ }
59
+ /** The config directory of a profile; `null` for `default`. */
60
+ function resolveDir(name) {
61
+ return (0, claudeProfiles_1.resolveClaudeProfileDir)(getDataDir(), name);
62
+ }
63
+ function checkIsKnownProfile(name) {
64
+ return name === claudeProfiles_1.defaultClaudeProfileName || getState().getClaudeProfileRecord(name) !== undefined;
65
+ }
66
+ /**
67
+ * @description Re-read every added profile's auth status (and the default's) and persist what changed, so the
68
+ * picker shows the CLI's truth, not the state of the last sign-in. One short `claude auth status` per profile,
69
+ * in parallel; a failed probe leaves the record as it was.
70
+ */
71
+ async function refreshProfileStatuses() {
72
+ const names = Object.keys(getState().getClaudeProfileRecords());
73
+ const [defaultStatus, ...statuses] = await Promise.all([
74
+ readClaudeAuthStatus(null),
75
+ ...names.map((name) => readClaudeAuthStatus(resolveDir(name))),
76
+ ]);
77
+ await Promise.all([
78
+ recordProfileStatus(claudeProfiles_1.defaultClaudeProfileName, defaultStatus),
79
+ ...names.map((name, index) => recordProfileStatus(name, statuses[index])),
80
+ ]);
81
+ return defaultStatus;
82
+ }
83
+ /**
84
+ * Persist a probe's answer on the profile's record (nothing for a failed probe). `default` gets its hidden
85
+ * record, so the usage ranking and the CLI twin know whether it is signed in and as whom.
86
+ */
87
+ async function recordProfileStatus(name, status) {
88
+ if (status === null)
89
+ return;
90
+ if (name !== claudeProfiles_1.defaultClaudeProfileName && getState().getClaudeProfileRecord(name) === undefined)
91
+ return; // removed meanwhile
92
+ await getState().upsertClaudeProfileRecord(name, {
93
+ // A removed `default` comes back by itself the moment it is signed in again.
94
+ ...(name === claudeProfiles_1.defaultClaudeProfileName && status.loggedIn ? { isRemoved: undefined } : {}),
95
+ loggedIn: status.loggedIn,
96
+ email: status.email ?? undefined,
97
+ subscriptionType: status.subscriptionType ?? undefined,
98
+ orgName: status.orgName ?? undefined,
99
+ statusCheckedAt: new Date().toISOString(),
100
+ });
101
+ }
102
+ /** The sign-in driver's report at the end of a profile sign-in: record it, then move live sessions onto it. */
103
+ async function onClaudeProfileAuthStatus(_key, profile, status) {
104
+ await recordProfileStatus(profile.name, status);
105
+ // A topic may already have picked the profile before its sign-in: its sleeping session resumes under it by
106
+ // itself, and a live one is re-spawned now that the account exists.
107
+ if (status?.loggedIn)
108
+ await applyClaudeProfileEverywhere();
109
+ }
110
+ function formatRow(row) {
111
+ const marker = row.isActive ? 'โœ“ ' : 'โ€ข ';
112
+ const account = row.loggedIn === false || (row.loggedIn === undefined && row.email === null)
113
+ ? (0, i18n_1.t)('account.row.loggedOut')
114
+ : `${row.email ?? '?'}, ${(0, i18n_1.t)(`account.kind.${row.kind}`, { plan: row.subscriptionType ?? '?' })}`;
115
+ const users = row.topicCount > 0 ? (0, i18n_1.t)('account.row.topics', { count: row.topicCount }) : '';
116
+ return `${marker}${row.name} โ€” ${account}${users}${formatUsageLines(row.name)}`;
117
+ }
118
+ /**
119
+ * The profile's usage under its row (`utils/claudeProfileUsageLines.ts`, the renderer `/limits` shares), each
120
+ * line on its own row. Nothing for a profile never polled.
121
+ */
122
+ function formatUsageLines(name) {
123
+ const lines = (0, claudeProfileUsageLines_1.formatClaudeProfileUsageLines)(getState().getClaudeProfileInfo(name), getInstanceTimezone(), Date.now());
124
+ return lines.map((line) => `\n${line}`).join('');
125
+ }
126
+ function formatRowButton(row) {
127
+ const marker = row.isActive ? 'โœ“ ' : '';
128
+ const detail = row.loggedIn === false || (row.loggedIn === undefined && row.email === null)
129
+ ? (0, i18n_1.t)('account.row.loggedOut')
130
+ : row.email ?? row.name;
131
+ return `${marker}${row.name} ยท ${detail}`;
132
+ }
133
+ async function buildPickerRows(key, isGeneral) {
134
+ // The usage poll runs beside the status probes; a snapshot younger than a minute is kept.
135
+ const [defaultStatus] = await Promise.all([refreshProfileStatuses(), refreshClaudeUsage({ maxAgeMs: claudeUsageRefresher_1.claudeUsageOnDemandMaxAgeMs })]);
136
+ const state = getState();
137
+ const topicCounts = (0, claudeAccountPickerPlan_1.countTopicsPerProfile)(state.listBindings().map(({ key: boundKey }) => state.resolveClaudeProfileName(boundKey)));
138
+ return (0, claudeAccountPickerPlan_1.buildAccountPickerRows)({
139
+ isDefaultRemoved: state.getClaudeProfileInfo(claudeProfiles_1.defaultClaudeProfileName)?.isRemoved === true,
140
+ records: state.getClaudeProfileRecords(),
141
+ defaultStatus: {
142
+ loggedIn: defaultStatus?.loggedIn,
143
+ email: defaultStatus?.email ?? null,
144
+ subscriptionType: defaultStatus?.subscriptionType ?? null,
145
+ },
146
+ activeName: resolveActiveName(key, isGeneral),
147
+ topicCounts,
148
+ });
149
+ }
150
+ /** The main screen: text + keyboard, for the topic (or General), and the provider list the keyboard indexes. */
151
+ async function buildPicker(key, isGeneral) {
152
+ const [rows, providers] = await Promise.all([buildPickerRows(key, isGeneral), readOpenCodeProviders()]);
153
+ const list = rows.map(formatRow).join('\n');
154
+ const activeName = resolveActiveName(key, isGeneral);
155
+ const title = isGeneral
156
+ ? (0, i18n_1.t)('account.titleGeneral', { name: activeName, list })
157
+ : (0, i18n_1.t)('account.title', { name: activeName, list });
158
+ const openCodeSection = providers.length === 0
159
+ ? (0, i18n_1.t)('accounts.openCodeNone')
160
+ : (0, i18n_1.t)('accounts.openCodeSection', { list: providers.map((provider) => `โ€ข ${provider}`).join('\n') });
161
+ const isDefaultRemoved = getState().getClaudeProfileInfo(claudeProfiles_1.defaultClaudeProfileName)?.isRemoved === true;
162
+ const removedNote = isDefaultRemoved ? `\n\n${(0, i18n_1.t)('accounts.defaultRemovedNote')}` : '';
163
+ // The usage hint (which says the percentages are USED) follows the account list it explains.
164
+ const text = `${title}${removedNote}\n\n${(0, i18n_1.t)('account.usageHint')}\n\n${openCodeSection}\n\n${(0, i18n_1.t)('accounts.buttonsHint')}\n\n${(0, i18n_1.t)('account.autoSwitchHint')}`;
165
+ // One row per Claude account: pick it (โœ“ = the current one), sign it in again, remove it (`default` too: signs it out).
166
+ const keyboardRows = rows.map((row) => [
167
+ telegraf_1.Markup.button.callback(formatRowButton(row), (0, claudeAccountPickerPlan_1.buildAccountUseCallback)(row.name)),
168
+ telegraf_1.Markup.button.callback('๐Ÿ”‘', (0, claudeAccountPickerPlan_1.buildAccountLoginCallback)(row.name)),
169
+ telegraf_1.Markup.button.callback('๐Ÿ—‘', (0, claudeAccountPickerPlan_1.buildAccountRemoveCallback)(row.name)),
170
+ ]);
171
+ // A provider row mirrors it: what the button does is in its caption, ๐Ÿ”‘ connects it again.
172
+ providers.forEach((provider, index) => {
173
+ keyboardRows.push([
174
+ telegraf_1.Markup.button.callback((0, i18n_1.t)('accounts.disconnectButton', { provider }), (0, claudeAccountPickerPlan_1.buildAccountDisconnectCallback)(index)),
175
+ telegraf_1.Markup.button.callback('๐Ÿ”‘', (0, claudeAccountPickerPlan_1.buildAccountReconnectCallback)(index)),
176
+ ]);
177
+ });
178
+ keyboardRows.push([
179
+ telegraf_1.Markup.button.callback((0, i18n_1.t)('accounts.addClaudeButton'), claudeAccountPickerPlan_1.accountAddCallback),
180
+ telegraf_1.Markup.button.callback((0, i18n_1.t)('accounts.addProviderButton'), claudeAccountPickerPlan_1.accountAddProviderCallback),
181
+ ]);
182
+ if (!isGeneral && getState().getClaudeProfileOverride(key) !== undefined) {
183
+ keyboardRows.push([
184
+ telegraf_1.Markup.button.callback((0, i18n_1.t)('account.followButton', { name: getState().getClaudeProfileGlobalDefault() }), claudeAccountPickerPlan_1.accountFollowDefaultCallback),
185
+ ]);
186
+ }
187
+ return { text, keyboard: telegraf_1.Markup.inlineKeyboard(keyboardRows), providers };
188
+ }
189
+ /** Post the screen as a new message and remember the provider list its buttons index. */
190
+ async function postPicker(key, isGeneral) {
191
+ const picker = await buildPicker(key, isGeneral);
192
+ const messageId = await replyToThread(key, picker.text, picker.keyboard);
193
+ if (messageId !== null)
194
+ rememberProviders(messageId, picker.providers);
195
+ }
196
+ /** A sub-picker: one button per profile (`default` included only when `includeDefault`), plus ยซBackยป. */
197
+ function buildProfileChoiceKeyboard(buildCallback, includeDefault) {
198
+ const names = [...(includeDefault ? [claudeProfiles_1.defaultClaudeProfileName] : []), ...Object.keys(getState().getClaudeProfileRecords())];
199
+ const rows = names.map((name) => [telegraf_1.Markup.button.callback(name, buildCallback(name))]);
200
+ rows.push([telegraf_1.Markup.button.callback((0, i18n_1.t)('account.backButton'), claudeAccountPickerPlan_1.accountBackCallback)]);
201
+ return telegraf_1.Markup.inlineKeyboard(rows);
202
+ }
203
+ /** Re-render the picker IN PLACE (it is meant for repeated use, like `/model`); best-effort. */
204
+ async function rerenderPicker(key, messageId, isGeneral) {
205
+ if (messageId === null)
206
+ return;
207
+ const picker = await buildPicker(key, isGeneral);
208
+ rememberProviders(messageId, picker.providers);
209
+ await editThreadMessage(key, messageId, picker.text, picker.keyboard);
210
+ }
211
+ function describeApplyOutcome(outcome) {
212
+ return (0, i18n_1.t)(`account.applied.${outcome}`);
213
+ }
214
+ /**
215
+ * @description Apply a pick and RETURN the confirmation โ€” the one write path behind the command and the
216
+ * button. A regular topic sets its own pick and its live session follows at once (idle: re-spawned, same
217
+ * conversation; working: at turn end; sleeping: at the next resume). General sets the instance default and
218
+ * every topic that follows the default is moved the same way. A profile that is not signed in is refused:
219
+ * a session started under it would only fail with a logged-out error.
220
+ */
221
+ async function applyPick(key, isGeneral, name) {
222
+ if (!checkIsKnownProfile(name))
223
+ return (0, i18n_1.t)('account.unknown', { name });
224
+ if (name !== claudeProfiles_1.defaultClaudeProfileName) {
225
+ const status = await readClaudeAuthStatus(resolveDir(name));
226
+ await recordProfileStatus(name, status);
227
+ if (status !== null && !status.loggedIn)
228
+ return (0, i18n_1.t)('account.notLoggedIn', { name });
229
+ }
230
+ if (isGeneral) {
231
+ await getState().setClaudeProfileGlobalDefault(name);
232
+ await applyClaudeProfileEverywhere();
233
+ return (0, i18n_1.t)('account.setGlobal', { name });
234
+ }
235
+ await getState().setClaudeProfileOverride(key, name);
236
+ const outcome = await applyClaudeProfile(key);
237
+ return (0, i18n_1.t)('account.setThisTopic', { name, apply: describeApplyOutcome(outcome) });
238
+ }
239
+ /** A topic drops its own pick; its session follows the instance default from now on. */
240
+ async function applyFollowDefault(key) {
241
+ await getState().setClaudeProfileOverride(key, null);
242
+ const name = getState().getClaudeProfileGlobalDefault();
243
+ const outcome = await applyClaudeProfile(key);
244
+ return (0, i18n_1.t)('account.followSet', { name, apply: describeApplyOutcome(outcome) });
245
+ }
246
+ /**
247
+ * @description Create a profile and start its sign-in: the directory with its shared links, the registry
248
+ * record (flushed before the sign-in, so a crash never leaves a signed-in directory the picker cannot see),
249
+ * then the relay posts the link. Returns the message to post BEFORE the link, or the refusal.
250
+ */
251
+ async function addProfile(key, rawName) {
252
+ const name = (0, claudeProfiles_1.normaliseClaudeProfileName)(rawName);
253
+ if (!(0, claudeProfiles_1.checkIsValidClaudeProfileName)(name))
254
+ return (0, i18n_1.t)('account.invalidName', { max: claudeProfiles_1.claudeProfileNameMaxLength });
255
+ if (getState().getClaudeProfileRecord(name) !== undefined)
256
+ return (0, i18n_1.t)('account.exists', { name });
257
+ let configDir;
258
+ try {
259
+ configDir = (0, claudeProfiles_1.createClaudeProfileLayout)({ dataDir: getDataDir(), name });
260
+ }
261
+ catch (e) {
262
+ console.error(`[account] profile layout for ${name} failed:`, e instanceof Error ? e.message : e);
263
+ return (0, i18n_1.t)('account.createFailed', { name });
264
+ }
265
+ await getState().upsertClaudeProfileRecord(name, { createdAt: new Date().toISOString(), loggedIn: false });
266
+ await replyToThread(key, (0, i18n_1.t)('account.created', { name }));
267
+ await startClaudeProfileLogin(key, { name, configDir });
268
+ return '';
269
+ }
270
+ /** Sign a known profile in (again); `default` is the plain `~/.claude` login. */
271
+ async function loginProfile(key, name) {
272
+ if (!checkIsKnownProfile(name))
273
+ return (0, i18n_1.t)('account.unknown', { name });
274
+ if (name !== claudeProfiles_1.defaultClaudeProfileName) {
275
+ // The directory may be gone (a hand-cleaned DATA_DIR): recreate the layout so the login has a home.
276
+ (0, claudeProfiles_1.createClaudeProfileLayout)({ dataDir: getDataDir(), name });
277
+ }
278
+ await startClaudeProfileLogin(key, { name, configDir: resolveDir(name) });
279
+ return '';
280
+ }
281
+ /**
282
+ * @description Remove a profile โ€” the SAFE way: `default` is `~/.claude` and is never removed; the instance
283
+ * default is refused until General picks another (otherwise every following topic would silently change
284
+ * account); topics that picked the profile explicitly return to the instance default and are moved at once,
285
+ * and the confirmation says how many. The directory (its login with it) goes last, after the registry.
286
+ */
287
+ async function removeProfile(name) {
288
+ if (name === claudeProfiles_1.defaultClaudeProfileName)
289
+ return signOutDefault();
290
+ if (!checkIsKnownProfile(name))
291
+ return (0, i18n_1.t)('account.unknown', { name });
292
+ if (getState().getClaudeProfileGlobalDefault() === name)
293
+ return (0, i18n_1.t)('account.removeInstanceDefaultRefused', { name });
294
+ const dropped = await getState().removeClaudeProfileRecord(name);
295
+ try {
296
+ (0, claudeProfiles_1.removeClaudeProfileLayout)(getDataDir(), name);
297
+ }
298
+ catch (e) {
299
+ console.error(`[account] removing the directory of ${name} failed:`, e instanceof Error ? e.message : e);
300
+ }
301
+ await applyClaudeProfileEverywhere();
302
+ return (0, i18n_1.t)('account.removed', { name, count: dropped.length });
303
+ }
304
+ /**
305
+ * @description ยซRemoveยป for `default`: sign `~/.claude` out (delete just its stored subscription login, see
306
+ * `signOutDefaultClaudeLogin`) and hide it from the list and the rankings until it is signed in again. The
307
+ * transcripts, settings, skills and memory stay. Running sessions on it stop working at their next request.
308
+ */
309
+ async function signOutDefault() {
310
+ let isSignedOut = false;
311
+ try {
312
+ isSignedOut = (0, claudeProfiles_1.signOutDefaultClaudeLogin)(getHomeClaudeDir?.());
313
+ }
314
+ catch (e) {
315
+ console.error('[account] signing the default account out failed:', e instanceof Error ? e.message : e);
316
+ return (0, i18n_1.t)('account.removeDefaultFailed');
317
+ }
318
+ await getState().upsertClaudeProfileRecord(claudeProfiles_1.defaultClaudeProfileName, { isRemoved: true, loggedIn: false });
319
+ console.log(`[account] the default account was signed out (${isSignedOut ? 'login deleted' : 'no stored login found'})`);
320
+ return (0, i18n_1.t)('account.removedDefault');
321
+ }
322
+ /** The text of a removal confirmation and its Yes / Back keyboard. */
323
+ function buildRemoveConfirmation(name) {
324
+ const record = getState().getClaudeProfileRecord(name);
325
+ const count = getState().listClaudeProfileOverrideKeys(name).length;
326
+ if (name === claudeProfiles_1.defaultClaudeProfileName) {
327
+ const email = getState().getClaudeProfileInfo(name)?.email ?? (0, i18n_1.t)('account.row.loggedOut');
328
+ return {
329
+ text: (0, i18n_1.t)('account.confirmRemoveDefault', { email }),
330
+ keyboard: telegraf_1.Markup.inlineKeyboard([
331
+ [telegraf_1.Markup.button.callback((0, i18n_1.t)('account.confirmRemoveButton', { name }), (0, claudeAccountPickerPlan_1.buildAccountRemoveConfirmCallback)(name))],
332
+ [telegraf_1.Markup.button.callback((0, i18n_1.t)('account.backButton'), claudeAccountPickerPlan_1.accountBackCallback)],
333
+ ]),
334
+ };
335
+ }
336
+ return {
337
+ text: (0, i18n_1.t)('account.confirmRemove', { name, email: record?.email ?? (0, i18n_1.t)('account.row.loggedOut'), count }),
338
+ keyboard: telegraf_1.Markup.inlineKeyboard([
339
+ [telegraf_1.Markup.button.callback((0, i18n_1.t)('account.confirmRemoveButton', { name }), (0, claudeAccountPickerPlan_1.buildAccountRemoveConfirmCallback)(name))],
340
+ [telegraf_1.Markup.button.callback((0, i18n_1.t)('account.backButton'), claudeAccountPickerPlan_1.accountBackCallback)],
341
+ ]),
342
+ };
343
+ }
344
+ // โ”€โ”€ the ยซAddยป name capture โ”€โ”€
345
+ /** Whether the topic's next plain message is a new profile's name (the text handler asks before forwarding). */
346
+ function checkIsAwaitingProfileName(key) {
347
+ return awaitingProfileName.has((0, sessionKey_1.keyToString)(key));
348
+ }
349
+ /** Disarm the capture (a slash command, `/esc`, a teardown). Returns whether one was armed. */
350
+ function cancelProfileNameCapture(key) {
351
+ return awaitingProfileName.delete((0, sessionKey_1.keyToString)(key));
352
+ }
353
+ /** The captured provider id: start the `/connect` flow for it; a bad id keeps the capture armed. */
354
+ async function submitProviderId(key, text) {
355
+ const providerId = text.trim().toLowerCase();
356
+ if (!(0, openCodeAdapter_1.checkIsValidProviderId)(providerId)) {
357
+ await replyToThread(key, `${(0, i18n_1.t)('connect.invalid_provider', { provider: providerId })}\n${(0, i18n_1.t)('login.esc_hint')}`);
358
+ return;
359
+ }
360
+ awaitingProfileName.delete((0, sessionKey_1.keyToString)(key));
361
+ await startOpenCodeConnect(key, providerId);
362
+ }
363
+ /** The captured answer of ยซโž•ยป: a Claude profile name, or an OpenCode provider id, by what was asked. */
364
+ async function submitProfileName(key, text) {
365
+ if (awaitingProfileName.get((0, sessionKey_1.keyToString)(key)) === 'providerId') {
366
+ await submitProviderId(key, text);
367
+ return;
368
+ }
369
+ const name = (0, claudeProfiles_1.normaliseClaudeProfileName)(text);
370
+ if (!(0, claudeProfiles_1.checkIsValidClaudeProfileName)(name)) {
371
+ await replyToThread(key, `${(0, i18n_1.t)('account.invalidName', { max: claudeProfiles_1.claudeProfileNameMaxLength })}\n${(0, i18n_1.t)('login.esc_hint')}`);
372
+ return;
373
+ }
374
+ awaitingProfileName.delete((0, sessionKey_1.keyToString)(key));
375
+ const message = await addProfile(key, name);
376
+ if (message)
377
+ await replyToThread(key, message);
378
+ }
379
+ // โ”€โ”€ the command โ”€โ”€
380
+ function registerClaudeAccountCommands() {
381
+ // `/accounts` (hidden alias `/account`) โ€” bare: the screen. `add <name>` creates a profile and signs it in; `use <name>` switches
382
+ // this topic (General: the instance default); `login <name>` signs a profile in again; `remove <name>`
383
+ // deletes one. Not gated on a session: the pick is read at the next spawn, so it must be settable first.
384
+ command(['account', 'accounts'], async (_ctx, key, parsed) => {
385
+ const isGeneral = checkIsGeneral(key);
386
+ const [verb = '', ...rest] = parsed.args;
387
+ const name = (0, claudeProfiles_1.normaliseClaudeProfileName)(rest.join(' '));
388
+ switch (verb.toLowerCase()) {
389
+ case '': {
390
+ await postPicker(key, isGeneral);
391
+ return;
392
+ }
393
+ case 'add': {
394
+ if (!name) {
395
+ awaitingProfileName.set((0, sessionKey_1.keyToString)(key), 'claudeName');
396
+ await replyToThread(key, `${(0, i18n_1.t)('account.askName', { max: claudeProfiles_1.claudeProfileNameMaxLength })}\n${(0, i18n_1.t)('login.esc_hint')}`);
397
+ return;
398
+ }
399
+ const message = await addProfile(key, name);
400
+ if (message)
401
+ await replyToThread(key, message);
402
+ return;
403
+ }
404
+ case 'use': {
405
+ if (!name) {
406
+ await replyToThread(key, (0, i18n_1.t)('account.usage'));
407
+ return;
408
+ }
409
+ await replyToThread(key, await applyPick(key, isGeneral, name));
410
+ return;
411
+ }
412
+ case 'login': {
413
+ const message = await loginProfile(key, name || claudeProfiles_1.defaultClaudeProfileName);
414
+ if (message)
415
+ await replyToThread(key, message);
416
+ return;
417
+ }
418
+ case 'remove':
419
+ case 'rm': {
420
+ if (!name) {
421
+ await replyToThread(key, (0, i18n_1.t)('account.usage'));
422
+ return;
423
+ }
424
+ await replyToThread(key, await removeProfile(name));
425
+ return;
426
+ }
427
+ case 'autoswitch': {
428
+ if (name !== 'on' && name !== 'off') {
429
+ await replyToThread(key, (0, i18n_1.t)('account.usage'));
430
+ return;
431
+ }
432
+ await replyToThread(key, await applyAutoSwitch(key, isGeneral, name === 'on'));
433
+ return;
434
+ }
435
+ default:
436
+ await replyToThread(key, (0, i18n_1.t)('account.usage'));
437
+ }
438
+ });
439
+ }
440
+ /** The shared tap prologue: authorise, resolve the topic, run under its locale. */
441
+ async function handleTap(ctx, run) {
442
+ const key = await authoriseContext(ctx);
443
+ if (!key) {
444
+ await ctx.answerCbQuery((0, i18n_1.t)('cb.access_denied'));
445
+ return;
446
+ }
447
+ await withThreadLocale(key, () => run(key, checkIsGeneral(key), (0, callbackMessage_1.getCallbackMessageId)(ctx)));
448
+ }
449
+ /** `answerCbQuery` is capped at 200 characters: a long confirmation goes to the topic instead. */
450
+ async function answerTap(ctx, key, text) {
451
+ if (text.length <= 180) {
452
+ await ctx.answerCbQuery(text);
453
+ return;
454
+ }
455
+ await ctx.answerCbQuery();
456
+ await replyToThread(key, text);
457
+ }
458
+ function registerClaudeAccountCallbacks() {
459
+ bot.action(claudeAccountPickerPlan_1.accountUseCallbackRe, (ctx) => handleTap(ctx, async (key, isGeneral, messageId) => {
460
+ const name = (0, claudeAccountPickerPlan_1.parseAccountCallbackName)(ctx.match[0], claudeAccountPickerPlan_1.accountUseCallbackRe, { allowDefault: true });
461
+ if (name === null) {
462
+ await ctx.answerCbQuery();
463
+ return;
464
+ }
465
+ const confirmation = await applyPick(key, isGeneral, name);
466
+ await answerTap(ctx, key, confirmation);
467
+ await rerenderPicker(key, messageId, isGeneral);
468
+ }));
469
+ bot.action(claudeAccountPickerPlan_1.accountFollowDefaultCallback, (ctx) => handleTap(ctx, async (key, isGeneral, messageId) => {
470
+ if (isGeneral) {
471
+ await ctx.answerCbQuery();
472
+ return;
473
+ }
474
+ await answerTap(ctx, key, await applyFollowDefault(key));
475
+ await rerenderPicker(key, messageId, isGeneral);
476
+ }));
477
+ bot.action(claudeAccountPickerPlan_1.accountAddCallback, (ctx) => handleTap(ctx, async (key) => {
478
+ awaitingProfileName.set((0, sessionKey_1.keyToString)(key), 'claudeName');
479
+ await ctx.answerCbQuery();
480
+ await replyToThread(key, `${(0, i18n_1.t)('account.askName', { max: claudeProfiles_1.claudeProfileNameMaxLength })}\n${(0, i18n_1.t)('login.esc_hint')}`);
481
+ }));
482
+ bot.action(claudeAccountPickerPlan_1.accountAddProviderCallback, (ctx) => handleTap(ctx, async (key) => {
483
+ awaitingProfileName.set((0, sessionKey_1.keyToString)(key), 'providerId');
484
+ await ctx.answerCbQuery();
485
+ await replyToThread(key, `${(0, i18n_1.t)('accounts.askProvider')}\n${(0, i18n_1.t)('login.esc_hint')}`);
486
+ }));
487
+ // A provider's ยซ๐Ÿ”Œยป row โ†’ ask first (a disconnect drops stored credentials), against the snapshot of the
488
+ // message the button sits on: an older screen can never map its index onto a newer list.
489
+ bot.action(claudeAccountPickerPlan_1.accountDisconnectCallbackRe, (ctx) => handleTap(ctx, async (key, isGeneral, messageId) => {
490
+ const provider = messageId === null ? undefined : providerSnapshots.get(messageId)?.[Number(ctx.match[1])];
491
+ if (messageId === null || provider === undefined) {
492
+ await ctx.answerCbQuery((0, i18n_1.t)('accounts.stale'));
493
+ await rerenderPicker(key, messageId, isGeneral);
494
+ return;
495
+ }
496
+ await ctx.answerCbQuery();
497
+ await editThreadMessage(key, messageId, (0, i18n_1.t)('accounts.confirmDisconnect', { provider }), telegraf_1.Markup.inlineKeyboard([
498
+ [telegraf_1.Markup.button.callback((0, i18n_1.t)('accounts.confirmDisconnectButton', { provider }), (0, claudeAccountPickerPlan_1.buildAccountDisconnectConfirmCallback)(Number(ctx.match[1])))],
499
+ [telegraf_1.Markup.button.callback((0, i18n_1.t)('account.backButton'), claudeAccountPickerPlan_1.accountBackCallback)],
500
+ ]));
501
+ }));
502
+ bot.action(claudeAccountPickerPlan_1.accountDisconnectConfirmCallbackRe, (ctx) => handleTap(ctx, async (key, isGeneral, messageId) => {
503
+ const provider = messageId === null ? undefined : providerSnapshots.get(messageId)?.[Number(ctx.match[1])];
504
+ if (messageId === null || provider === undefined) {
505
+ await ctx.answerCbQuery((0, i18n_1.t)('accounts.stale'));
506
+ await rerenderPicker(key, messageId, isGeneral);
507
+ return;
508
+ }
509
+ await ctx.answerCbQuery();
510
+ await disconnectOpenCodeProvider(key, provider);
511
+ await rerenderPicker(key, messageId, isGeneral);
512
+ }));
513
+ // A provider's ยซ๐Ÿ”‘ยป โ†’ connect it again (the method picker); the screen is re-rendered first.
514
+ bot.action(claudeAccountPickerPlan_1.accountReconnectCallbackRe, (ctx) => handleTap(ctx, async (key, isGeneral, messageId) => {
515
+ const provider = messageId === null ? undefined : providerSnapshots.get(messageId)?.[Number(ctx.match[1])];
516
+ if (messageId === null || provider === undefined) {
517
+ await ctx.answerCbQuery((0, i18n_1.t)('accounts.stale'));
518
+ await rerenderPicker(key, messageId, isGeneral);
519
+ return;
520
+ }
521
+ await ctx.answerCbQuery();
522
+ await startOpenCodeConnect(key, provider);
523
+ }));
524
+ bot.action(claudeAccountPickerPlan_1.accountLoginMenuCallback, (ctx) => handleTap(ctx, async (key, _isGeneral, messageId) => {
525
+ await ctx.answerCbQuery();
526
+ if (messageId !== null)
527
+ await editThreadMessage(key, messageId, (0, i18n_1.t)('account.pickLogin'), buildProfileChoiceKeyboard(claudeAccountPickerPlan_1.buildAccountLoginCallback, true));
528
+ }));
529
+ bot.action(claudeAccountPickerPlan_1.accountRemoveMenuCallback, (ctx) => handleTap(ctx, async (key, _isGeneral, messageId) => {
530
+ await ctx.answerCbQuery();
531
+ if (Object.keys(getState().getClaudeProfileRecords()).length === 0) {
532
+ await replyToThread(key, (0, i18n_1.t)('account.nothingToRemove'));
533
+ return;
534
+ }
535
+ if (messageId !== null)
536
+ await editThreadMessage(key, messageId, (0, i18n_1.t)('account.pickRemove'), buildProfileChoiceKeyboard(claudeAccountPickerPlan_1.buildAccountRemoveCallback, false));
537
+ }));
538
+ bot.action(claudeAccountPickerPlan_1.accountBackCallback, (ctx) => handleTap(ctx, async (key, isGeneral, messageId) => {
539
+ await ctx.answerCbQuery();
540
+ await rerenderPicker(key, messageId, isGeneral);
541
+ }));
542
+ bot.action(claudeAccountPickerPlan_1.accountLoginCallbackRe, (ctx) => handleTap(ctx, async (key, isGeneral, messageId) => {
543
+ const name = (0, claudeAccountPickerPlan_1.parseAccountCallbackName)(ctx.match[0], claudeAccountPickerPlan_1.accountLoginCallbackRe, { allowDefault: true });
544
+ if (name === null) {
545
+ await ctx.answerCbQuery();
546
+ return;
547
+ }
548
+ await ctx.answerCbQuery();
549
+ await rerenderPicker(key, messageId, isGeneral); // the sub-picker is consumed back into the main picker
550
+ const message = await loginProfile(key, name);
551
+ if (message)
552
+ await replyToThread(key, message);
553
+ }));
554
+ bot.action(claudeAccountPickerPlan_1.accountRemoveCallbackRe, (ctx) => handleTap(ctx, async (key, _isGeneral, messageId) => {
555
+ const name = (0, claudeAccountPickerPlan_1.parseAccountCallbackName)(ctx.match[0], claudeAccountPickerPlan_1.accountRemoveCallbackRe, { allowDefault: true });
556
+ if (name === null || !checkIsKnownProfile(name)) {
557
+ await ctx.answerCbQuery((0, i18n_1.t)('account.unknown', { name: name ?? '?' }));
558
+ return;
559
+ }
560
+ await ctx.answerCbQuery();
561
+ const confirmation = buildRemoveConfirmation(name);
562
+ if (messageId !== null)
563
+ await editThreadMessage(key, messageId, confirmation.text, confirmation.keyboard);
564
+ }));
565
+ bot.action(claudeAccountPickerPlan_1.accountRemoveConfirmCallbackRe, (ctx) => handleTap(ctx, async (key, isGeneral, messageId) => {
566
+ const name = (0, claudeAccountPickerPlan_1.parseAccountCallbackName)(ctx.match[0], claudeAccountPickerPlan_1.accountRemoveConfirmCallbackRe, { allowDefault: true });
567
+ if (name === null) {
568
+ await ctx.answerCbQuery();
569
+ return;
570
+ }
571
+ const result = await removeProfile(name);
572
+ await answerTap(ctx, key, result);
573
+ await rerenderPicker(key, messageId, isGeneral);
574
+ }));
575
+ for (const [callback, enabled] of [[claudeAccountPickerPlan_1.accountAutoSwitchOnCallback, true], [claudeAccountPickerPlan_1.accountAutoSwitchOffCallback, false]]) {
576
+ bot.action(callback, (ctx) => handleTap(ctx, async (key, isGeneral, messageId) => {
577
+ await answerTap(ctx, key, await applyAutoSwitch(key, isGeneral, enabled));
578
+ await rerenderPicker(key, messageId, isGeneral);
579
+ }));
580
+ }
581
+ }
582
+ return {
583
+ registerClaudeAccountCommands,
584
+ registerClaudeAccountCallbacks,
585
+ checkIsAwaitingProfileName,
586
+ cancelProfileNameCapture,
587
+ submitProfileName,
588
+ onClaudeProfileAuthStatus,
589
+ };
590
+ }
591
+ //# sourceMappingURL=claudeAccounts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claudeAccounts.js","sourceRoot":"","sources":["../../../../src/connectors/telegram/commands/claudeAccounts.ts"],"names":[],"mappings":"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"}