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
@@ -0,0 +1,25 @@
1
+ /**
2
+ * One entry of a CHANGELOG section: a top-level paragraph or a top-level list item.
3
+ *
4
+ * `subsection` is the `###` heading in force (`Upgrading`, `Added`, …), `null` before the first one.
5
+ * `text` is the entry's lines joined by a space, list marker removed; `leadLine` is its first line as
6
+ * written, for quoting it in a message, and `leadLineIndex` its 0-based position in the text it came from.
7
+ */
8
+ export type ChangelogEntry = {
9
+ subsection: string | null;
10
+ text: string;
11
+ leadLine: string;
12
+ leadLineIndex: number;
13
+ };
14
+ /**
15
+ * @description Splits the body of a CHANGELOG section into its entries.
16
+ *
17
+ * A top-level line (no indent) starts an entry when it opens a list item, or a paragraph after a blank
18
+ * line / heading; an indented line and a wrapped paragraph line continue the entry above. A fenced block at
19
+ * column 0 holds no entry. Shared by the release gate (bold-lead check) and the what's-new summary, so both
20
+ * read the same text the same way.
21
+ */
22
+ export declare function getChangelogEntries(sectionText: string): ChangelogEntry[];
23
+ /** @description Whether an entry's text opens with a bold first sentence (`**…**`). */
24
+ export declare function checkHasBoldLead(entryText: string): boolean;
25
+ //# sourceMappingURL=changelogEntries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changelogEntries.d.ts","sourceRoot":"","sources":["../src/changelogEntries.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAQF;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,EAAE,CA+CzE;AAED,uFAAuF;AACvF,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE3D"}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getChangelogEntries = getChangelogEntries;
4
+ exports.checkHasBoldLead = checkHasBoldLead;
5
+ const headingPattern = /^(#{1,6})\s+(.*)$/;
6
+ const subsectionHeadingLevel = 3;
7
+ const listMarkerPattern = /^(?:[-*+]|\d+[.)])\s+/;
8
+ const fencePattern = /^(?:```|~~~)/;
9
+ const boldLeadPattern = /^\*\*(?=\S)[\s\S]*?\S\*\*/;
10
+ /**
11
+ * @description Splits the body of a CHANGELOG section into its entries.
12
+ *
13
+ * A top-level line (no indent) starts an entry when it opens a list item, or a paragraph after a blank
14
+ * line / heading; an indented line and a wrapped paragraph line continue the entry above. A fenced block at
15
+ * column 0 holds no entry. Shared by the release gate (bold-lead check) and the what's-new summary, so both
16
+ * read the same text the same way.
17
+ */
18
+ function getChangelogEntries(sectionText) {
19
+ const entries = [];
20
+ let subsection = null;
21
+ let current = null;
22
+ let isInFence = false;
23
+ for (const [lineIndex, line] of sectionText.split('\n').entries()) {
24
+ if (fencePattern.test(line)) {
25
+ isInFence = !isInFence;
26
+ current = null;
27
+ continue;
28
+ }
29
+ if (isInFence)
30
+ continue;
31
+ if (line.trim() === '') {
32
+ current = null;
33
+ continue;
34
+ }
35
+ const heading = headingPattern.exec(line);
36
+ if (heading) {
37
+ // A `###` names the subsection; a `##` (the next version's section) ends it.
38
+ subsection = heading[1].length >= subsectionHeadingLevel ? heading[2].trim() : null;
39
+ current = null;
40
+ continue;
41
+ }
42
+ if (/^\s/.test(line)) {
43
+ if (current)
44
+ current.text = `${current.text} ${line.trim()}`;
45
+ continue;
46
+ }
47
+ const marker = listMarkerPattern.exec(line);
48
+ if (marker) {
49
+ current = { subsection, text: line.slice(marker[0].length).trim(), leadLine: line, leadLineIndex: lineIndex };
50
+ entries.push(current);
51
+ continue;
52
+ }
53
+ if (current) {
54
+ current.text = `${current.text} ${line.trim()}`;
55
+ continue;
56
+ }
57
+ current = { subsection, text: line.trim(), leadLine: line, leadLineIndex: lineIndex };
58
+ entries.push(current);
59
+ }
60
+ return entries;
61
+ }
62
+ /** @description Whether an entry's text opens with a bold first sentence (`**…**`). */
63
+ function checkHasBoldLead(entryText) {
64
+ return boldLeadPattern.test(entryText);
65
+ }
66
+ //# sourceMappingURL=changelogEntries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changelogEntries.js","sourceRoot":"","sources":["../src/changelogEntries.ts"],"names":[],"mappings":";;AA4BA,kDA+CC;AAGD,4CAEC;AAlED,MAAM,cAAc,GAAG,mBAAmB,CAAC;AAC3C,MAAM,sBAAsB,GAAG,CAAC,CAAC;AACjC,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;AAClD,MAAM,YAAY,GAAG,cAAc,CAAC;AACpC,MAAM,eAAe,GAAG,2BAA2B,CAAC;AAEpD;;;;;;;GAOG;AACH,SAAgB,mBAAmB,CAAC,WAAmB;IACrD,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,IAAI,UAAU,GAAkB,IAAI,CAAC;IACrC,IAAI,OAAO,GAA0B,IAAI,CAAC;IAC1C,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,KAAK,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAClE,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,SAAS,GAAG,CAAC,SAAS,CAAC;YACvB,OAAO,GAAG,IAAI,CAAC;YACf,SAAS;QACX,CAAC;QACD,IAAI,SAAS;YAAE,SAAS;QAExB,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACvB,OAAO,GAAG,IAAI,CAAC;YACf,SAAS;QACX,CAAC;QAED,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,OAAO,EAAE,CAAC;YACZ,6EAA6E;YAC7E,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,sBAAsB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACpF,OAAO,GAAG,IAAI,CAAC;YACf,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,IAAI,OAAO;gBAAE,OAAO,CAAC,IAAI,GAAG,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YAC7D,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC;YAC9G,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtB,SAAS;QACX,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,GAAG,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YAChD,SAAS;QACX,CAAC;QACD,OAAO,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC;QACtF,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,uFAAuF;AACvF,SAAgB,gBAAgB,CAAC,SAAiB;IAChD,OAAO,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACzC,CAAC"}
package/dist/cli/bot.d.ts CHANGED
@@ -15,10 +15,14 @@
15
15
  * 3. Validate `WORK_ROOT` resolves to an existing directory — fail fast
16
16
  * with a clear message if not.
17
17
  * 4. Acquire the single-instance lock and wire cleanup handlers.
18
- * 5. Dynamically import `../bot` (which reads env at module scope) and
18
+ * 5. Count this boot against a pending update (`update-pending.json`): a new version that has failed to start twice
19
+ * is rolled back here — before the bot module can break the boot — and the process restarts onto the old one.
20
+ * After the lock, never before: a start that loses the lock is not a boot, and counting it would let two stray
21
+ * starts roll a healthy running version back from underneath it.
22
+ * 6. Dynamically import `../bot` (which reads env at module scope) and
19
23
  * call `startBot()`.
20
24
  *
21
- * The dynamic import in step 5 is deliberate: a static `import` at the top
25
+ * The dynamic import in step 6 is deliberate: a static `import` at the top
22
26
  * of this file would resolve `process.env` at module-load time, before
23
27
  * the env load ran, and we'd see undefined tokens. `await import(...)`
24
28
  * defers binding until after env is populated.
@@ -1 +1 @@
1
- {"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../../src/cli/bot.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,MAAM,CAAC,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA+CnF"}
1
+ {"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../../src/cli/bot.ts"],"names":[],"mappings":"AAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,MAAM,CAAC,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAiDnF"}
package/dist/cli/bot.js CHANGED
@@ -35,12 +35,17 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.runBot = runBot;
37
37
  const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
38
39
  const connectorGuards_1 = require("./connectorGuards");
39
40
  const instanceLock_1 = require("../instanceLock");
40
41
  const state_1 = require("../state");
41
42
  const consoleFileTap_1 = require("../utils/consoleFileTap");
42
43
  const legacyNames_1 = require("../legacyNames");
43
44
  const legacyMigration_1 = require("../legacyMigration");
45
+ const bootRollback_1 = require("../selfUpdate/bootRollback");
46
+ const launchEnvironment_1 = require("../selfUpdate/launchEnvironment");
47
+ const restart_1 = require("../selfUpdate/restart");
48
+ const updatePending_1 = require("../selfUpdate/updatePending");
44
49
  /**
45
50
  * @description Shared bot startup used by the public no-arg CLI and the
46
51
  * internal hot-worker entry.
@@ -58,10 +63,14 @@ const legacyMigration_1 = require("../legacyMigration");
58
63
  * 3. Validate `WORK_ROOT` resolves to an existing directory — fail fast
59
64
  * with a clear message if not.
60
65
  * 4. Acquire the single-instance lock and wire cleanup handlers.
61
- * 5. Dynamically import `../bot` (which reads env at module scope) and
66
+ * 5. Count this boot against a pending update (`update-pending.json`): a new version that has failed to start twice
67
+ * is rolled back here — before the bot module can break the boot — and the process restarts onto the old one.
68
+ * After the lock, never before: a start that loses the lock is not a boot, and counting it would let two stray
69
+ * starts roll a healthy running version back from underneath it.
70
+ * 6. Dynamically import `../bot` (which reads env at module scope) and
62
71
  * call `startBot()`.
63
72
  *
64
- * The dynamic import in step 5 is deliberate: a static `import` at the top
73
+ * The dynamic import in step 6 is deliberate: a static `import` at the top
65
74
  * of this file would resolve `process.env` at module-load time, before
66
75
  * the env load ran, and we'd see undefined tokens. `await import(...)`
67
76
  * defers binding until after env is populated.
@@ -92,6 +101,7 @@ async function runBot(options = {}) {
92
101
  }
93
102
  await (0, instanceLock_1.acquireLock)();
94
103
  (0, instanceLock_1.installLockCleanupHandlers)();
104
+ await handleUpdateRollbackAtBoot(options.isHotWorker === true);
95
105
  // The pre-rename config / data dirs and keys move to the Charness names here: a COLD start, under the
96
106
  // lock, before the bot module (and its state) loads. A hot worker's reload never migrates. What it
97
107
  // could not move is announced next, once — after the tee, so the lines reach the bot log.
@@ -103,4 +113,26 @@ async function runBot(options = {}) {
103
113
  const { startBot } = await Promise.resolve().then(() => __importStar(require('../bot')));
104
114
  await startBot();
105
115
  }
116
+ /**
117
+ * @description The boot-time half of a safe update: a version that cannot start is put back by the process that failed to
118
+ * start it, holding the instance lock. A plain process then releases the lock and restarts onto the restored install
119
+ * (`process.execve` keeps the pid, and the new image takes the lock afresh); a hot worker exits cleanly instead (the exit
120
+ * handler releases the lock), and its watcher rebuilds the reset checkout and starts a new worker.
121
+ */
122
+ async function handleUpdateRollbackAtBoot(isHotWorker) {
123
+ const packageRoot = path.resolve(__dirname, '..', '..');
124
+ const outcome = await (0, updatePending_1.runBootUpdateCheck)({
125
+ dataDir: (0, state_1.resolveDataDir)(),
126
+ rollback: (0, bootRollback_1.createBootRollback)({ packageRoot, execPath: process.execPath, platform: process.platform, hasExecve: typeof process.execve === 'function', isHotWorker }),
127
+ log: (line) => console.error(line),
128
+ });
129
+ if (outcome !== 'rolledBack')
130
+ return;
131
+ if (isHotWorker) {
132
+ process.exit(0);
133
+ return;
134
+ }
135
+ (0, instanceLock_1.releaseLock)();
136
+ (0, restart_1.reexecProcess)((0, restart_1.getReexecTarget)({ execPath: process.execPath, packageRoot, argv: process.argv }), (0, launchEnvironment_1.getLaunchEnvironment)(), (0, restart_1.createDefaultReexecDeps)());
137
+ }
106
138
  //# sourceMappingURL=bot.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bot.js","sourceRoot":"","sources":["../../src/cli/bot.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCA,wBA+CC;AAhFD,uCAAyB;AACzB,uDAA+D;AAC/D,kDAA0E;AAC1E,oCAA0C;AAC1C,4DAAgE;AAChE,gDAAuD;AACvD,wDAAwD;AAExD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACI,KAAK,UAAU,MAAM,CAAC,UAAqC,EAAE;IAClE,0EAA0E;IAC1E,0EAA0E;IAC1E,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,4CAA0B,GAAE,CAAC;IAEhD,wEAAwE;IACxE,4EAA4E;IAC5E,6EAA6E;IAC7E,qDAAqD;IACrD,IAAA,sCAAqB,EAAC,IAAA,sBAAc,GAAE,CAAC,CAAC;IAExC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,8DAA8D;YAC5D,oCAAoC;YACpC,iEAAiE;YACjE,wEAAwE,CAC3E,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QACtC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,4BAA4B,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,CACtD,CAAC;IACJ,CAAC;IACD,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;IACjC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QACzD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,mDAAmD,EAAE,IAAI,CAC1D,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAA,0BAAW,GAAE,CAAC;IACpB,IAAA,yCAA0B,GAAE,CAAC;IAE7B,sGAAsG;IACtG,mGAAmG;IACnG,0FAA0F;IAC1F,IAAI,CAAC,OAAO,CAAC,WAAW;QAAE,IAAA,oCAAkB,GAAE,CAAC;IAC/C,IAAA,mCAAqB,GAAE,CAAC;IAExB,0EAA0E;IAC1E,qEAAqE;IACrE,MAAM,EAAE,QAAQ,EAAE,GAAG,wDAAa,QAAQ,GAAC,CAAC;IAC5C,MAAM,QAAQ,EAAE,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"bot.js","sourceRoot":"","sources":["../../src/cli/bot.ts"],"names":[],"mappings":"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"}
@@ -28,7 +28,7 @@ export declare function parseClaudeProfilesCliArgs(argv: readonly string[]): {
28
28
  ok: false;
29
29
  error: string;
30
30
  };
31
- /** One human line: `✓ work /data/…/work mail@example.com personal max 5h 12% 🔄 in 2h · week 40% 🔄 in 2d 1h · Fable 3% 🔄 in 2d 1h` (no Fable part for an account without that window). */
31
+ /** One human line: `✓ work /data/…/work mail@example.com personal max 5h 12% 🔄 in 2h · week 40% 🔄 in 2d 1h · Fable 3% 🔄 in 2d 1h` (no Fable part for an account without that window; an account billed to API credits says so and has no windows). */
32
32
  export declare function formatClaudeProfileCliLine(entry: ClaudeProfileReportEntry, nowMs: number): string;
33
33
  /**
34
34
  * @description Run the subcommand; returns the exit code. Output goes to stdout, a refusal to stderr.
@@ -1 +1 @@
1
- {"version":3,"file":"claudeProfiles.d.ts","sourceRoot":"","sources":["../../src/cli/claudeProfiles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,EAKL,KAAK,wBAAwB,EAE9B,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,gFAAgF;AAChF,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,qBAAqB,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAgB5I;AAED,+LAA+L;AAC/L,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,wBAAwB,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAmBjG;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,EAAE,GAAE;IACF,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACf,GACL,OAAO,CAAC,MAAM,CAAC,CA8BjB"}
1
+ {"version":3,"file":"claudeProfiles.d.ts","sourceRoot":"","sources":["../../src/cli/claudeProfiles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,EAKL,KAAK,wBAAwB,EAE9B,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,gFAAgF;AAChF,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,qBAAqB,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAgB5I;AAED,4PAA4P;AAC5P,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,wBAAwB,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAwBjG;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,EAAE,GAAE;IACF,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACf,GACL,OAAO,CAAC,MAAM,CAAC,CA8BjB"}
@@ -47,24 +47,29 @@ function parseClaudeProfilesCliArgs(argv) {
47
47
  return { ok: false, error: '--model needs a value' };
48
48
  return { ok: true, args };
49
49
  }
50
- /** One human line: `✓ work /data/…/work mail@example.com personal max 5h 12% 🔄 in 2h · week 40% 🔄 in 2d 1h · Fable 3% 🔄 in 2d 1h` (no Fable part for an account without that window). */
50
+ /** One human line: `✓ work /data/…/work mail@example.com personal max 5h 12% 🔄 in 2h · week 40% 🔄 in 2d 1h · Fable 3% 🔄 in 2d 1h` (no Fable part for an account without that window; an account billed to API credits says so and has no windows). */
51
51
  function formatClaudeProfileCliLine(entry, nowMs) {
52
52
  const find = (kind) => entry.buckets.find((bucket) => bucket.kind === kind) ?? null;
53
53
  const weeklyReset = find('weekly_all')?.resetsAt ?? null;
54
54
  const read = (kind) => (0, claudeUsage_1.formatClaudeUsageBucket)(find(kind), nowMs, { fallbackResetsAt: kind === 'session' ? weeklyReset : null });
55
55
  const marker = entry.isRecommended ? '✓' : entry.isEligible ? '•' : '✗';
56
+ const isApi = entry.billing === 'api';
56
57
  const account = entry.loggedIn === false
57
58
  ? 'not signed in'
58
- : entry.loggedIn === null && entry.email === null
59
- ? 'not probed yet (open /account once)'
60
- : `${entry.email ?? '?'} ${entry.kind} ${entry.subscriptionType ?? '?'}`;
61
- const usage = entry.buckets.length === 0
59
+ : isApi
60
+ ? `${entry.email ?? 'API key'} API billing (pay per use, never recommended)`
61
+ : entry.loggedIn === null && entry.email === null
62
+ ? 'not probed yet (open /account once)'
63
+ : `${entry.email ?? '?'} ${entry.kind} ${entry.subscriptionType ?? '?'}`;
64
+ const formatWindows = () => (entry.buckets.length === 0
62
65
  ? 'usage not read yet'
63
66
  : `${[
64
67
  `5h ${read('session')}`,
65
68
  `week ${read('weekly_all')}`,
66
69
  ...(find('weekly_scoped') === null ? [] : [`Fable ${read('weekly_scoped')}`]),
67
- ].join(' · ')}${entry.isUsageStale ? ' (stale)' : ''}`;
70
+ ].join(' · ')}${entry.isUsageStale ? ' (stale)' : ''}`);
71
+ // An account billed to API credits has no windows; its limit is the balance.
72
+ const usage = isApi ? `no windows${entry.creditExhaustedAt === null ? '' : ' CREDITS USED UP'}` : formatWindows();
68
73
  const limited = entry.limitedUntil && Date.parse(entry.limitedUntil) > nowMs ? ` LIMITED until ${entry.limitedUntil}` : '';
69
74
  return `${marker} ${entry.name} ${entry.configDir ?? '(default: no CLAUDE_CONFIG_DIR)'} ${account} ${usage}${limited}`;
70
75
  }
@@ -1 +1 @@
1
- {"version":3,"file":"claudeProfiles.js","sourceRoot":"","sources":["../../src/cli/claudeProfiles.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claudeProfiles.js","sourceRoot":"","sources":["../../src/cli/claudeProfiles.ts"],"names":[],"mappings":"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"}
package/dist/cli/hot.d.ts CHANGED
@@ -27,6 +27,13 @@ type HotChildName = 'tsc' | 'nodemon';
27
27
  * resolve the project root from the bin's own realpath. `yarn hot` in the
28
28
  * repo is the in-project equivalent.
29
29
  *
30
+ * **Re-executing itself.** A worker reload is all an update needs — until a file the SUPERVISOR itself loaded changed.
31
+ * Right at its start the supervisor writes `DATA_DIR/hot-supervisor.json` (its pid, start token and the hash of every
32
+ * `dist/` module it loaded); a worker that finds one of those files changed signals it with `SIGUSR2` at an idle point,
33
+ * and the supervisor stops `tsc -w` and nodemon, leaves the OpenCode server and the speech sidecar alone, and replaces
34
+ * itself with `process.execve` — the same pid, so a Docker entrypoint `wait`ing on it, `charness-restart-bot` and systemd
35
+ * see nothing. The new image gets the environment this one was launched with, not what it loaded since.
36
+ *
30
37
  * The supervisor is also the OWNER of the local speech engine's sidecar: it exports its pid and start
31
38
  * token to the worker (`buildHotWorkerEnv`), the sidecar dies with it (its own watchdog covers a SIGKILL), and
32
39
  * the supervisor's shutdown stops the recorded one. A reload of the worker leaves it running for the next
@@ -1 +1 @@
1
- {"version":3,"file":"hot.d.ts","sourceRoot":"","sources":["../../src/cli/hot.ts"],"names":[],"mappings":"AAgBA,OAAO,EAKL,KAAK,eAAe,EACrB,MAAM,wBAAwB,CAAC;AAGhC,UAAU,eAAe;IACvB,gBAAgB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IAChD,oBAAoB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,KAAK,YAAY,GAAG,KAAK,GAAG,SAAS,CAAC;AAMtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAmL5C;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,YAAY,EACvB,aAAa,EAAE,MAAM,CAAC,OAAO,GAC5B,MAAM,CAAC,OAAO,CAEhB;AAED,yEAAyE;AACzE,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAEzE;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,OAAO,OAAO,CAAC,QAAQ,GAAG,OAAO,CAElF;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,GAAE,eAKL,GACA,OAAO,CAAC,OAAO,CAAC,CAclB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,CAAC,UAAU,EAC1B,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,eAAe,GACzB,MAAM,CAAC,UAAU,CAWnB"}
1
+ {"version":3,"file":"hot.d.ts","sourceRoot":"","sources":["../../src/cli/hot.ts"],"names":[],"mappings":"AAgBA,OAAO,EAKL,KAAK,eAAe,EACrB,MAAM,wBAAwB,CAAC;AAMhC,UAAU,eAAe;IACvB,gBAAgB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IAChD,oBAAoB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,KAAK,YAAY,GAAG,KAAK,GAAG,SAAS,CAAC;AAMtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAyN5C;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,YAAY,EACvB,aAAa,EAAE,MAAM,CAAC,OAAO,GAC5B,MAAM,CAAC,OAAO,CAEhB;AAED,yEAAyE;AACzE,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAEzE;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,OAAO,OAAO,CAAC,QAAQ,GAAG,OAAO,CAElF;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,GAAE,eAKL,GACA,OAAO,CAAC,OAAO,CAAC,CAclB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,CAAC,UAAU,EAC1B,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,eAAe,GACzB,MAAM,CAAC,UAAU,CAWnB"}
package/dist/cli/hot.js CHANGED
@@ -49,6 +49,9 @@ const installManager_1 = require("../installManager");
49
49
  const legacyNames_1 = require("../legacyNames");
50
50
  const sttSidecarOwner_1 = require("../stt/sttSidecarOwner");
51
51
  const legacyMigration_1 = require("../legacyMigration");
52
+ const launchEnvironment_1 = require("../selfUpdate/launchEnvironment");
53
+ const restart_1 = require("../selfUpdate/restart");
54
+ const hotSupervisor_1 = require("../selfUpdate/hotSupervisor");
52
55
  const tscWatchCompleteMarker = 'Watching for file changes.';
53
56
  const tscWatchReadyMarker = `Found 0 errors. ${tscWatchCompleteMarker}`;
54
57
  const tscWatchTailLength = tscWatchReadyMarker.length - 1;
@@ -73,6 +76,13 @@ const tscWatchTailLength = tscWatchReadyMarker.length - 1;
73
76
  * resolve the project root from the bin's own realpath. `yarn hot` in the
74
77
  * repo is the in-project equivalent.
75
78
  *
79
+ * **Re-executing itself.** A worker reload is all an update needs — until a file the SUPERVISOR itself loaded changed.
80
+ * Right at its start the supervisor writes `DATA_DIR/hot-supervisor.json` (its pid, start token and the hash of every
81
+ * `dist/` module it loaded); a worker that finds one of those files changed signals it with `SIGUSR2` at an idle point,
82
+ * and the supervisor stops `tsc -w` and nodemon, leaves the OpenCode server and the speech sidecar alone, and replaces
83
+ * itself with `process.execve` — the same pid, so a Docker entrypoint `wait`ing on it, `charness-restart-bot` and systemd
84
+ * see nothing. The new image gets the environment this one was launched with, not what it loaded since.
85
+ *
76
86
  * The supervisor is also the OWNER of the local speech engine's sidecar: it exports its pid and start
77
87
  * token to the worker (`buildHotWorkerEnv`), the sidecar dies with it (its own watchdog covers a SIGKILL), and
78
88
  * the supervisor's shutdown stops the recorded one. A reload of the worker leaves it running for the next
@@ -141,8 +151,24 @@ async function runHot() {
141
151
  if (connectors.ok && connectors.connectors.includes('telegram'))
142
152
  await prepareHotOpenCodeServer();
143
153
  // The data dir the worker will use (a relative DATA_DIR resolves against the project root, nodemon's cwd).
144
- const sttDataDir = path.resolve(projectRoot, process.env.DATA_DIR || (0, legacyNames_1.resolveDefaultDataDir)());
154
+ const workerDataDir = path.resolve(projectRoot, process.env.DATA_DIR || (0, legacyNames_1.resolveDefaultDataDir)());
145
155
  const supervisorIdentity = (0, installManager_1.getProcessIdentity)(process.pid);
156
+ const reexecTarget = (0, restart_1.getReexecTarget)({ execPath: process.execPath, packageRoot: projectRoot, argv: process.argv });
157
+ const canReexec = supervisorIdentity !== null && typeof process.execve === 'function';
158
+ // Before anything rebuilds `dist/`: the hashes must be those of the code this process actually loaded.
159
+ if (supervisorIdentity) {
160
+ try {
161
+ (0, hotSupervisor_1.writeHotSupervisorRecord)(workerDataDir, {
162
+ pid: supervisorIdentity.pid,
163
+ startToken: supervisorIdentity.startToken,
164
+ canReexec,
165
+ modules: (0, hotSupervisor_1.collectLoadedDistModules)(path.join(projectRoot, 'dist'), Object.keys(require.cache)),
166
+ });
167
+ }
168
+ catch (error) {
169
+ process.stderr.write(`charness hot: could not write the supervisor record: ${error instanceof Error ? error.message : error}\n`);
170
+ }
171
+ }
146
172
  const sttOwner = supervisorIdentity
147
173
  ? { pid: supervisorIdentity.pid, startToken: supervisorIdentity.startToken }
148
174
  : undefined;
@@ -156,6 +182,7 @@ async function runHot() {
156
182
  const children = new Set();
157
183
  let nodemonChild = null;
158
184
  let shuttingDown = false;
185
+ let isReexecuting = false;
159
186
  let isSidecarStopped = false;
160
187
  let finalCode = 0;
161
188
  let resolveChildrenStopped = null;
@@ -166,19 +193,26 @@ async function runHot() {
166
193
  if (shuttingDown && children.size === 0 && isSidecarStopped)
167
194
  resolveChildrenStopped?.();
168
195
  };
169
- const forwardSignal = (sig) => {
196
+ const forwardSignal = (sig, options = {}) => {
170
197
  if (shuttingDown)
171
198
  return;
172
199
  shuttingDown = true;
200
+ isReexecuting = options.isReexec === true;
173
201
  for (const child of children) {
174
202
  if (child.killed || child.exitCode !== null)
175
203
  continue;
176
204
  const childName = child === nodemonChild ? 'nodemon' : 'tsc';
177
205
  child.kill(getHotChildShutdownSignal(childName, sig));
178
206
  }
207
+ // A re-exec keeps the sidecar (and the OpenCode server): the new image is the same process, the same owner.
208
+ if (isReexecuting) {
209
+ isSidecarStopped = true;
210
+ checkShouldResolveChildren();
211
+ return;
212
+ }
179
213
  // The sidecar does not outlive its owner: stop the recorded one (guarded, bounded at ~3 s) while the
180
214
  // watchers wind down; the wrapper exits only after both.
181
- void (0, sttSidecarOwner_1.stopRecordedSttSidecar)((0, sttSidecarOwner_1.createDefaultSttSidecarOwnerDeps)(() => sttDataDir))
215
+ void (0, sttSidecarOwner_1.stopRecordedSttSidecar)((0, sttSidecarOwner_1.createDefaultSttSidecarOwnerDeps)(() => workerDataDir))
182
216
  .catch((error) => {
183
217
  process.stderr.write(`charness hot: stopping the local speech engine failed: ${error instanceof Error ? error.message : error}\n`);
184
218
  })
@@ -191,6 +225,18 @@ async function runHot() {
191
225
  for (const sig of ['SIGINT', 'SIGTERM', 'SIGHUP']) {
192
226
  process.on(sig, () => forwardSignal(sig));
193
227
  }
228
+ // A worker asks for a re-exec (see the docstring). Checked first: nothing is stopped when the new image could not start.
229
+ process.on(hotSupervisor_1.supervisorReexecSignal, () => {
230
+ if (shuttingDown || !canReexec)
231
+ return;
232
+ const problems = (0, restart_1.getReexecProblems)(reexecTarget);
233
+ if (problems.length > 0) {
234
+ process.stderr.write(`charness hot: not re-executing — ${problems.join('; ')}\n`);
235
+ return;
236
+ }
237
+ process.stderr.write('charness hot: re-executing the supervisor (a file it loaded changed)\n');
238
+ forwardSignal('SIGTERM', { isReexec: true });
239
+ });
194
240
  const registerChild = (child, childName) => {
195
241
  children.add(child);
196
242
  let isSettled = false;
@@ -260,6 +306,10 @@ async function runHot() {
260
306
  'Check the TypeScript output path and save; nodemon will keep waiting.\n');
261
307
  });
262
308
  await childrenStopped;
309
+ if (isReexecuting) {
310
+ (0, restart_1.reexecProcess)(reexecTarget, (0, launchEnvironment_1.getLaunchEnvironment)(), (0, restart_1.createDefaultReexecDeps)());
311
+ return;
312
+ }
263
313
  process.exit(finalCode);
264
314
  }
265
315
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"hot.js","sourceRoot":"","sources":["../../src/cli/hot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hot.js","sourceRoot":"","sources":["../../src/cli/hot.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
- export {};
2
+ import './selfUpdate/launchEnvironment';
3
3
  //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAGA,OAAO,gCAAgC,CAAC"}
package/dist/cli.js CHANGED
@@ -34,6 +34,8 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  };
35
35
  })();
36
36
  Object.defineProperty(exports, "__esModule", { value: true });
37
+ // FIRST import, on purpose: it snapshots the launch environment before anything reads a `.env` file into `process.env`.
38
+ require("./selfUpdate/launchEnvironment");
37
39
  const fs = __importStar(require("fs"));
38
40
  const path = __importStar(require("path"));
39
41
  const applyDnsFix_1 = require("./cli/applyDnsFix");
@@ -129,6 +131,12 @@ async function main() {
129
131
  process.exitCode = await runClaudeProfilesCli(process.argv.slice(3));
130
132
  return;
131
133
  }
134
+ // The updater's pre-switch probe of a new install (hidden: not in --help).
135
+ if (sub === 'self-check') {
136
+ const { runSelfCheckCli } = await Promise.resolve().then(() => __importStar(require('./selfUpdate/selfCheck')));
137
+ process.exitCode = await runSelfCheckCli(process.argv.slice(3), path.resolve(__dirname, '..'));
138
+ return;
139
+ }
132
140
  process.stderr.write(`Unknown command: ${sub}\n\n`);
133
141
  printUsage();
134
142
  process.exit(2);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,uCAAyB;AACzB,2CAA6B;AAC7B,mDAAgD;AAChD,mCAAmC;AACnC,mCAAmC;AAEnC,IAAA,yBAAW,GAAE,CAAC;AAEd;;;;;;GAMG;AACH,SAAS,YAAY;IACnB,IAAI,OAAO,GAAG,SAAS,CAAC;IACxB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5F,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,6BAA6B;IAC/B,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;AACvC,CAAC;AAED;;;;;;GAMG;AACH,SAAS,UAAU;IACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,UAAU;QACR,0EAA0E;QAC1E,8EAA8E;QAC9E,6EAA6E;QAC7E,2EAA2E;QAC3E,qFAAqF;QACrF,qFAAqF;QACrF,2EAA2E;QAC3E,8CAA8C;QAC9C,iDAAiD;QACjD,IAAI;QACJ,gBAAgB;QAChB,2EAA2E;QAC3E,+DAA+D;QAC/D,oFAAoF;QACpF,oFAAoF;QACpF,0EAA0E;QAC1E,oEAAoE;QACpE,0CAA0C,CAC7C,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,KAAK,UAAU,IAAI;IACjB,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEpC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,MAAM,IAAA,YAAM,GAAE,CAAC;QACf,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QAClB,MAAM,IAAA,YAAM,GAAE,CAAC;QACf,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACvD,UAAU,EAAE,CAAC;QACb,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QAC7D,YAAY,EAAE,CAAC;QACf,OAAO;IACT,CAAC;IAED,sGAAsG;IACtG,6DAA6D;IAC7D,IAAI,GAAG,KAAK,iBAAiB,EAAE,CAAC;QAC9B,MAAM,EAAE,oBAAoB,EAAE,GAAG,wDAAa,sBAAsB,GAAC,CAAC;QACtE,OAAO,CAAC,QAAQ,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,OAAO;IACT,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,GAAG,MAAM,CAAC,CAAC;IACpD,UAAU,EAAE,CAAC;IACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * The folder picker of `/bind` — and of `/topic`, which shows the same keyboard with its buttons pointing at a
3
+ * wizard instead of at the topic it sits in. A leaf module (no `bot.ts`, no environment): the command modules take it
4
+ * as a plain import.
5
+ */
6
+ import { Markup } from 'telegraf';
7
+ /** Inline-keyboard page size for `/bind`. 20 fits one phone screen comfortably. */
8
+ export declare const BIND_PAGE_SIZE = 20;
9
+ /**
10
+ * «Create new folder» button of the `/bind` picker. The callback id deliberately does NOT start with `bind_`, so the
11
+ * `bind_<subdir>` action regex can't mistake it for a folder pick.
12
+ */
13
+ export declare const bindCreateFolderCallback = "bindCreateFolder";
14
+ /**
15
+ * «Leave current dir» button — the folded-in `/unbind`. Like {@link bindCreateFolderCallback}, the callback id
16
+ * deliberately does NOT start with `bind_`. Only rendered in a bound topic.
17
+ */
18
+ export declare const bindLeaveCurrentCallback = "bindLeaveCurrent";
19
+ /** The middle «N/M» pill of the nav row: pure UI, answered without a state change (shared by every picker built here). */
20
+ export declare const bindPageNoopCallback = "bind_page_noop";
21
+ /** The callback data of a picker's buttons: `/bind` acts on the topic the keyboard sits in, `/topic` on its wizard. */
22
+ export interface BindPickerCallbacks {
23
+ /** The folder button of `subdir`, the `index`-th entry of the WHOLE list (not of its page). */
24
+ getFolderCallback: (subdir: string, index: number) => string;
25
+ getPageCallback: (page: number) => string;
26
+ createFolderCallback: string;
27
+ /** A full-width last row of its own — the way out of a wizard (`/bind`'s picker has none). */
28
+ cancelButton?: {
29
+ label: string;
30
+ callback: string;
31
+ };
32
+ }
33
+ /** `/bind`'s own: the folder name rides in the data, pages are numbered. */
34
+ export declare const bindPickerCallbacks: BindPickerCallbacks;
35
+ /**
36
+ * @description Build a `subdir`-suggestion keyboard for `/bind` and friends.
37
+ *
38
+ * Lists are paginated at {@link BIND_PAGE_SIZE} entries: a `WORK_ROOT` with
39
+ * many subfolders (mono-repo workspace, packages dir, etc.) would otherwise
40
+ * push the inline keyboard past Telegram's per-message height limit and
41
+ * lose entries below the fold.
42
+ *
43
+ * The nav row appears only when there's more than one page. The middle
44
+ * `pageLabel` button is a no-op ({@link bindPageNoopCallback}) — it exists
45
+ * solely so the user sees "2/5" without us having to fake a divider with
46
+ * a separate message.
47
+ *
48
+ * Subdirs whose callback_data exceeds 64 bytes are filtered out upstream
49
+ * in `listAvailableSubdirs`. `page` is clamped to a valid index so a stale
50
+ * callback (folders disappeared since the keyboard was sent) just lands
51
+ * on the last available page.
52
+ *
53
+ * When `isBound` the FIRST row is a full-width «leave current dir» button
54
+ * ({@link bindLeaveCurrentCallback}, the folded-in `/unbind`); the «create new folder»
55
+ * button ({@link bindCreateFolderCallback}) follows. Both callbacks deliberately do
56
+ * NOT start with `bind_`, so they can't be mistaken for a folder pick by the
57
+ * `bind_<subdir>` action regex. They ride on every page so they're reachable
58
+ * regardless of pagination.
59
+ *
60
+ * `callbacks` re-targets the buttons (the `/topic` wizard's, which adds a «cancel» row at the bottom); the layout
61
+ * stays the one `/bind` has.
62
+ */
63
+ export declare function buildBindKeyboard(subdirs: readonly string[], page?: number, pageSize?: number, isBound?: boolean, callbacks?: BindPickerCallbacks): Markup.Markup<import("@telegraf/types").InlineKeyboardMarkup>;
64
+ //# sourceMappingURL=bindPicker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bindPicker.d.ts","sourceRoot":"","sources":["../../../src/connectors/telegram/bindPicker.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAIlC,mFAAmF;AACnF,eAAO,MAAM,cAAc,KAAK,CAAC;AAEjC;;;GAGG;AACH,eAAO,MAAM,wBAAwB,qBAAqB,CAAC;AAE3D;;;GAGG;AACH,eAAO,MAAM,wBAAwB,qBAAqB,CAAC;AAE3D,0HAA0H;AAC1H,eAAO,MAAM,oBAAoB,mBAAmB,CAAC;AAErD,uHAAuH;AACvH,MAAM,WAAW,mBAAmB;IAClC,+FAA+F;IAC/F,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7D,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1C,oBAAoB,EAAE,MAAM,CAAC;IAC7B,8FAA8F;IAC9F,YAAY,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CACpD;AAED,4EAA4E;AAC5E,eAAO,MAAM,mBAAmB,EAAE,mBAIjC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,IAAI,GAAE,MAAU,EAChB,QAAQ,GAAE,MAAuB,EACjC,OAAO,GAAE,OAAe,EACxB,SAAS,GAAE,mBAAyC,iEAwCrD"}