aura-code 0.5.0 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (294) hide show
  1. package/README.md +47 -164
  2. package/dist/agent/affect.d.ts +13 -0
  3. package/dist/agent/affect.js +34 -0
  4. package/dist/agent/affect.js.map +1 -0
  5. package/dist/agent/compactor.d.ts +27 -4
  6. package/dist/agent/compactor.js +185 -54
  7. package/dist/agent/compactor.js.map +1 -1
  8. package/dist/agent/confess.d.ts +35 -0
  9. package/dist/agent/confess.js +296 -0
  10. package/dist/agent/confess.js.map +1 -0
  11. package/dist/agent/domain-expertise.d.ts +22 -0
  12. package/dist/agent/domain-expertise.js +110 -0
  13. package/dist/agent/domain-expertise.js.map +1 -0
  14. package/dist/agent/executive-queue.d.ts +26 -0
  15. package/dist/agent/executive-queue.js +50 -0
  16. package/dist/agent/executive-queue.js.map +1 -0
  17. package/dist/agent/generational-flush.d.ts +28 -0
  18. package/dist/agent/generational-flush.js +48 -0
  19. package/dist/agent/generational-flush.js.map +1 -0
  20. package/dist/agent/loop-profile.d.ts +50 -0
  21. package/dist/agent/loop-profile.js +88 -0
  22. package/dist/agent/loop-profile.js.map +1 -0
  23. package/dist/agent/loop.d.ts +14 -5
  24. package/dist/agent/loop.js +167 -23
  25. package/dist/agent/loop.js.map +1 -1
  26. package/dist/agent/memory-consolidate.d.ts +14 -0
  27. package/dist/agent/memory-consolidate.js +141 -0
  28. package/dist/agent/memory-consolidate.js.map +1 -0
  29. package/dist/agent/mixture.d.ts +33 -0
  30. package/dist/agent/mixture.js +138 -0
  31. package/dist/agent/mixture.js.map +1 -0
  32. package/dist/agent/spawner.js +2 -2
  33. package/dist/agent/spawner.js.map +1 -1
  34. package/dist/agent/system-prompt.d.ts +1 -1
  35. package/dist/agent/system-prompt.js +49 -13
  36. package/dist/agent/system-prompt.js.map +1 -1
  37. package/dist/agent/unified-memory.d.ts +15 -0
  38. package/dist/agent/unified-memory.js +164 -0
  39. package/dist/agent/unified-memory.js.map +1 -0
  40. package/dist/checkpoints/engine.d.ts +44 -0
  41. package/dist/checkpoints/engine.js +324 -0
  42. package/dist/checkpoints/engine.js.map +1 -0
  43. package/dist/cli/command-palette.d.ts +26 -0
  44. package/dist/cli/command-palette.js +133 -0
  45. package/dist/cli/command-palette.js.map +1 -0
  46. package/dist/cli/context-health.d.ts +51 -0
  47. package/dist/cli/context-health.js +187 -0
  48. package/dist/cli/context-health.js.map +1 -0
  49. package/dist/cli/diamond.d.ts +67 -0
  50. package/dist/cli/diamond.js +222 -12
  51. package/dist/cli/diamond.js.map +1 -1
  52. package/dist/cli/dic.d.ts +2 -0
  53. package/dist/cli/dic.js +106 -0
  54. package/dist/cli/dic.js.map +1 -0
  55. package/dist/cli/diff-view.d.ts +18 -0
  56. package/dist/cli/diff-view.js +114 -0
  57. package/dist/cli/diff-view.js.map +1 -0
  58. package/dist/cli/display.d.ts +18 -4
  59. package/dist/cli/display.js +74 -146
  60. package/dist/cli/display.js.map +1 -1
  61. package/dist/cli/help-data.d.ts +7 -0
  62. package/dist/cli/help-data.js +80 -0
  63. package/dist/cli/help-data.js.map +1 -0
  64. package/dist/cli/index.js +1001 -788
  65. package/dist/cli/index.js.map +1 -1
  66. package/dist/cli/markdown.d.ts +5 -0
  67. package/dist/cli/markdown.js +128 -0
  68. package/dist/cli/markdown.js.map +1 -0
  69. package/dist/cli/model-select.d.ts +39 -0
  70. package/dist/cli/model-select.js +65 -0
  71. package/dist/cli/model-select.js.map +1 -0
  72. package/dist/cli/tui.d.ts +34 -0
  73. package/dist/cli/tui.js +1176 -0
  74. package/dist/cli/tui.js.map +1 -0
  75. package/dist/config/defaults.d.ts +6 -17
  76. package/dist/config/defaults.js +25 -39
  77. package/dist/config/defaults.js.map +1 -1
  78. package/dist/config/project-config.d.ts +2 -6
  79. package/dist/config/project-config.js +2 -2
  80. package/dist/config/project-config.js.map +1 -1
  81. package/dist/doctor/checks.d.ts +18 -0
  82. package/dist/doctor/checks.js +524 -0
  83. package/dist/doctor/checks.js.map +1 -0
  84. package/dist/doctor/index.d.ts +4 -0
  85. package/dist/doctor/index.js +229 -0
  86. package/dist/doctor/index.js.map +1 -0
  87. package/dist/doctor/repair.d.ts +19 -0
  88. package/dist/doctor/repair.js +126 -0
  89. package/dist/doctor/repair.js.map +1 -0
  90. package/dist/doctor/types.d.ts +38 -0
  91. package/dist/doctor/types.js +10 -0
  92. package/dist/doctor/types.js.map +1 -0
  93. package/dist/dream/dream.d.ts +79 -36
  94. package/dist/dream/dream.js +327 -117
  95. package/dist/dream/dream.js.map +1 -1
  96. package/dist/dream/episode.d.ts +17 -0
  97. package/dist/dream/episode.js +116 -0
  98. package/dist/dream/episode.js.map +1 -0
  99. package/dist/dream/okf.d.ts +10 -0
  100. package/dist/dream/okf.js +280 -0
  101. package/dist/dream/okf.js.map +1 -0
  102. package/dist/dream/parser.d.ts +60 -0
  103. package/dist/dream/parser.js +176 -0
  104. package/dist/dream/parser.js.map +1 -0
  105. package/dist/dream/reconcile.d.ts +69 -0
  106. package/dist/dream/reconcile.js +303 -0
  107. package/dist/dream/reconcile.js.map +1 -0
  108. package/dist/kanban/engine.d.ts +26 -0
  109. package/dist/kanban/engine.js +208 -0
  110. package/dist/kanban/engine.js.map +1 -0
  111. package/dist/kanban/types.d.ts +19 -0
  112. package/dist/kanban/types.js +9 -1
  113. package/dist/kanban/types.js.map +1 -1
  114. package/dist/machina/index.d.ts +16 -0
  115. package/dist/machina/index.js +61 -0
  116. package/dist/machina/index.js.map +1 -0
  117. package/dist/machina/render-html.d.ts +2 -0
  118. package/dist/machina/render-html.js +191 -0
  119. package/dist/machina/render-html.js.map +1 -0
  120. package/dist/machina/render-terminal.d.ts +2 -0
  121. package/dist/machina/render-terminal.js +99 -0
  122. package/dist/machina/render-terminal.js.map +1 -0
  123. package/dist/machina/repair.d.ts +23 -0
  124. package/dist/machina/repair.js +98 -0
  125. package/dist/machina/repair.js.map +1 -0
  126. package/dist/machina/spec.d.ts +61 -0
  127. package/dist/machina/spec.js +124 -0
  128. package/dist/machina/spec.js.map +1 -0
  129. package/dist/machina/verify.d.ts +39 -0
  130. package/dist/machina/verify.js +95 -0
  131. package/dist/machina/verify.js.map +1 -0
  132. package/dist/mining/extract.d.ts +34 -0
  133. package/dist/mining/extract.js +229 -0
  134. package/dist/mining/extract.js.map +1 -0
  135. package/dist/mining/refine.d.ts +28 -0
  136. package/dist/mining/refine.js +256 -0
  137. package/dist/mining/refine.js.map +1 -0
  138. package/dist/perception/extractor.js +5 -3
  139. package/dist/perception/extractor.js.map +1 -1
  140. package/dist/perception/graph-store.d.ts +0 -11
  141. package/dist/perception/graph-store.js +0 -33
  142. package/dist/perception/graph-store.js.map +1 -1
  143. package/dist/perception/index.d.ts +1 -1
  144. package/dist/perception/index.js +1 -2
  145. package/dist/perception/index.js.map +1 -1
  146. package/dist/plugins/commands.d.ts +38 -0
  147. package/dist/plugins/commands.js +134 -0
  148. package/dist/plugins/commands.js.map +1 -0
  149. package/dist/plugins/frontmatter.d.ts +14 -0
  150. package/dist/plugins/frontmatter.js +78 -0
  151. package/dist/plugins/frontmatter.js.map +1 -0
  152. package/dist/plugins/hooks.d.ts +12 -0
  153. package/dist/plugins/hooks.js +148 -0
  154. package/dist/plugins/hooks.js.map +1 -0
  155. package/dist/plugins/loader.d.ts +7 -0
  156. package/dist/plugins/loader.js +255 -0
  157. package/dist/plugins/loader.js.map +1 -0
  158. package/dist/plugins/market.d.ts +23 -0
  159. package/dist/plugins/market.js +281 -0
  160. package/dist/plugins/market.js.map +1 -0
  161. package/dist/plugins/types.d.ts +90 -0
  162. package/dist/plugins/types.js +20 -0
  163. package/dist/plugins/types.js.map +1 -0
  164. package/dist/providers/anthropic-oauth-draft.d.ts +119 -0
  165. package/dist/providers/anthropic-oauth-draft.js +414 -0
  166. package/dist/providers/anthropic-oauth-draft.js.map +1 -0
  167. package/dist/providers/anthropic.d.ts +4 -1
  168. package/dist/providers/anthropic.js +34 -6
  169. package/dist/providers/anthropic.js.map +1 -1
  170. package/dist/providers/factory.d.ts +71 -14
  171. package/dist/providers/factory.js +205 -124
  172. package/dist/providers/factory.js.map +1 -1
  173. package/dist/providers/google.js +8 -21
  174. package/dist/providers/google.js.map +1 -1
  175. package/dist/providers/live-models.d.ts +23 -0
  176. package/dist/providers/live-models.js +145 -0
  177. package/dist/providers/live-models.js.map +1 -0
  178. package/dist/providers/openai-compatible.d.ts +1 -12
  179. package/dist/providers/openai-compatible.js +71 -108
  180. package/dist/providers/openai-compatible.js.map +1 -1
  181. package/dist/providers/resilient-factory.js +1 -1
  182. package/dist/providers/resilient-factory.js.map +1 -1
  183. package/dist/rem/graph.d.ts +72 -0
  184. package/dist/rem/graph.js +139 -0
  185. package/dist/rem/graph.js.map +1 -0
  186. package/dist/rem/index.d.ts +16 -0
  187. package/dist/rem/index.js +60 -0
  188. package/dist/rem/index.js.map +1 -0
  189. package/dist/rem/render-html.d.ts +2 -0
  190. package/dist/rem/render-html.js +189 -0
  191. package/dist/rem/render-html.js.map +1 -0
  192. package/dist/rem/render-terminal.d.ts +4 -0
  193. package/dist/rem/render-terminal.js +94 -0
  194. package/dist/rem/render-terminal.js.map +1 -0
  195. package/dist/repl/queue.d.ts +22 -0
  196. package/dist/repl/queue.js +165 -0
  197. package/dist/repl/queue.js.map +1 -0
  198. package/dist/repl/side-channel.d.ts +23 -0
  199. package/dist/repl/side-channel.js +63 -0
  200. package/dist/repl/side-channel.js.map +1 -0
  201. package/dist/research/council.d.ts +5 -2
  202. package/dist/research/council.js +73 -10
  203. package/dist/research/council.js.map +1 -1
  204. package/dist/ruby/alternator.d.ts +11 -30
  205. package/dist/ruby/alternator.js +59 -38
  206. package/dist/ruby/alternator.js.map +1 -1
  207. package/dist/ruby/episode-capture.d.ts +0 -10
  208. package/dist/ruby/episode-capture.js +0 -33
  209. package/dist/ruby/episode-capture.js.map +1 -1
  210. package/dist/ruby/types.js +1 -1
  211. package/dist/ruby/types.js.map +1 -1
  212. package/dist/safety/path-jail.d.ts +17 -0
  213. package/dist/safety/path-jail.js +100 -0
  214. package/dist/safety/path-jail.js.map +1 -0
  215. package/dist/safety/permissions.d.ts +12 -21
  216. package/dist/safety/permissions.js +81 -216
  217. package/dist/safety/permissions.js.map +1 -1
  218. package/dist/safety/ssrf.d.ts +29 -0
  219. package/dist/safety/ssrf.js +185 -0
  220. package/dist/safety/ssrf.js.map +1 -0
  221. package/dist/server/index.js +64 -10
  222. package/dist/server/index.js.map +1 -1
  223. package/dist/setup/first-run.d.ts +0 -24
  224. package/dist/setup/first-run.js +10 -344
  225. package/dist/setup/first-run.js.map +1 -1
  226. package/dist/setup/key-store.d.ts +12 -0
  227. package/dist/setup/key-store.js +108 -0
  228. package/dist/setup/key-store.js.map +1 -0
  229. package/dist/setup/provider-registry.js +31 -18
  230. package/dist/setup/provider-registry.js.map +1 -1
  231. package/dist/setup/provider-test.d.ts +7 -0
  232. package/dist/setup/provider-test.js +73 -10
  233. package/dist/setup/provider-test.js.map +1 -1
  234. package/dist/setup/provider-wizard.d.ts +4 -1
  235. package/dist/setup/provider-wizard.js +92 -26
  236. package/dist/setup/provider-wizard.js.map +1 -1
  237. package/dist/setup/xiaomi.d.ts +1 -1
  238. package/dist/setup/xiaomi.js +3 -3
  239. package/dist/setup/xiaomi.js.map +1 -1
  240. package/dist/tools/browser.js +6 -4
  241. package/dist/tools/browser.js.map +1 -1
  242. package/dist/tools/clipboard.js +7 -1
  243. package/dist/tools/clipboard.js.map +1 -1
  244. package/dist/tools/dictate.d.ts +60 -0
  245. package/dist/tools/dictate.js +983 -0
  246. package/dist/tools/dictate.js.map +1 -0
  247. package/dist/tools/dictate_patched.js +1057 -0
  248. package/dist/tools/edit-file.js +10 -2
  249. package/dist/tools/edit-file.js.map +1 -1
  250. package/dist/tools/gmail-tool.d.ts +5 -1
  251. package/dist/tools/gmail-tool.js +151 -11
  252. package/dist/tools/gmail-tool.js.map +1 -1
  253. package/dist/tools/http-request.js +14 -4
  254. package/dist/tools/http-request.js.map +1 -1
  255. package/dist/tools/image-read.js +34 -2
  256. package/dist/tools/image-read.js.map +1 -1
  257. package/dist/tools/index.d.ts +16 -1
  258. package/dist/tools/index.js +59 -8
  259. package/dist/tools/index.js.map +1 -1
  260. package/dist/tools/mcp.js +12 -0
  261. package/dist/tools/mcp.js.map +1 -1
  262. package/dist/tools/read-file.js +10 -14
  263. package/dist/tools/read-file.js.map +1 -1
  264. package/dist/tools/telegram-audio-policy.d.ts +30 -0
  265. package/dist/tools/telegram-audio-policy.js +49 -0
  266. package/dist/tools/telegram-audio-policy.js.map +1 -0
  267. package/dist/tools/telegram-bot.js +1136 -539
  268. package/dist/tools/telegram-bot.js.map +1 -1
  269. package/dist/tools/telegram-voice.d.ts +18 -5
  270. package/dist/tools/telegram-voice.js +54 -12
  271. package/dist/tools/telegram-voice.js.map +1 -1
  272. package/dist/tools/telegram.d.ts +3 -3
  273. package/dist/tools/telegram.js +5 -84
  274. package/dist/tools/telegram.js.map +1 -1
  275. package/dist/tools/tools.d.ts +2 -14
  276. package/dist/tools/tools.js +79 -144
  277. package/dist/tools/tools.js.map +1 -1
  278. package/dist/tools/web-fetch.js +39 -7
  279. package/dist/tools/web-fetch.js.map +1 -1
  280. package/dist/tools/web-search.js +2 -3
  281. package/dist/tools/web-search.js.map +1 -1
  282. package/dist/util/errors.js +1 -15
  283. package/dist/util/errors.js.map +1 -1
  284. package/dist/util/json-repair.d.ts +11 -0
  285. package/dist/util/json-repair.js +31 -0
  286. package/dist/util/json-repair.js.map +1 -0
  287. package/dist/util/rate-limiter.js +2 -8
  288. package/dist/util/rate-limiter.js.map +1 -1
  289. package/dist/viz/index.js +793 -792
  290. package/dist/viz/index.js.map +1 -1
  291. package/dist/viz/reader.d.ts +33 -0
  292. package/dist/viz/reader.js +343 -0
  293. package/dist/viz/reader.js.map +1 -0
  294. package/package.json +13 -32
@@ -3,21 +3,231 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.GEM_WIDTH = exports.GEM = exports.CHROME_DIM = exports.FAINT = exports.TEXT_DIM = exports.TEXT = exports.FAINT_HEX = exports.TEXT_DIM_HEX = exports.TEXT_HEX = exports.TERRACOTTA_HEX = exports.PANEL_BG_HEX = exports.BG_HEX = exports.RUBY_ACCENT = exports.RUBY_HEX = void 0;
7
+ exports.gradient = gradient;
8
+ exports.gradientBold = gradientBold;
9
+ exports.gradientStopFor = gradientStopFor;
10
+ exports.gemRow = gemRow;
11
+ exports.clearToTop = clearToTop;
12
+ exports.buildBannerLines = buildBannerLines;
13
+ exports.renderBanner = renderBanner;
6
14
  exports.renderDiamond = renderDiamond;
7
15
  const chalk_1 = __importDefault(require("chalk"));
8
- const r = chalk_1.default.hex('#9b1b30');
9
- const g = chalk_1.default.hex('#c9a84c');
10
- const w = chalk_1.default.hex('#f0ece4');
16
+ // Ruby palette — matches https://aurawebsite-self.vercel.app/
17
+ // (#e63956 bright ruby, #9b1b30 primary, #4a0d1a deep wine)
18
+ const light = chalk_1.default.hex('#e63956');
19
+ const mid = chalk_1.default.hex('#c22743');
20
+ const ruby = chalk_1.default.hex('#9b1b30');
21
+ const shadow = chalk_1.default.hex('#6d1322');
22
+ // Primary ruby as a single reusable accent (e.g. the message-bubble left
23
+ // bar) — distinct from the 4-stop gradient, which is for dividers/borders.
24
+ exports.RUBY_HEX = '#9b1b30';
25
+ exports.RUBY_ACCENT = ruby;
26
+ // ── Palette v3: bluish-dark background, terracotta chrome, white text ──────
27
+ // Terminal background, set via OSC 11 on TUI start (desaturated dark navy).
28
+ exports.BG_HEX = '#0f1724';
29
+ // Elevated panel background (code/log blocks) — one step lighter than BG_HEX.
30
+ exports.PANEL_BG_HEX = '#1c2739';
31
+ // Tool/UI chrome — the terracotta already used for tool labels and mode
32
+ // indicators across the CLI. Everything that is "the tooling talking to you".
33
+ exports.TERRACOTTA_HEX = '#cc785c';
34
+ // Primary text (user input, assistant replies, body copy) — near-white for
35
+ // maximum readability on the bluish background.
36
+ exports.TEXT_HEX = '#e8e6e3';
37
+ // Secondary/de-emphasized text — desaturated blue-gray, quieter than TEXT_HEX
38
+ // but still readable on BG_HEX.
39
+ exports.TEXT_DIM_HEX = '#8a94a6';
40
+ // Faintest text (rules, timings, ellipses) — visible but receding on BG_HEX.
41
+ exports.FAINT_HEX = '#4a5568';
42
+ exports.TEXT = chalk_1.default.hex(exports.TEXT_HEX);
43
+ exports.TEXT_DIM = chalk_1.default.hex(exports.TEXT_DIM_HEX);
44
+ exports.FAINT = chalk_1.default.hex(exports.FAINT_HEX);
45
+ // Muted terracotta for unfocused/quiet chrome (e.g. blurred panel borders).
46
+ exports.CHROME_DIM = chalk_1.default.hex('#8a5a48');
47
+ const dim = exports.TEXT_DIM;
48
+ /**
49
+ * The four terracotta stops, dark end → bright end, centered on
50
+ * TERRACOTTA_HEX. Used for every line that separates fields/panels/sections
51
+ * (box borders, rules, column dividers) — per the fixed palette rule,
52
+ * dividers get this same four-stop gradient rather than a single flat hue.
53
+ * (The ruby stops above remain for the gem/logo branding only.)
54
+ */
55
+ const chromeShadow = chalk_1.default.hex('#7a4636');
56
+ const chromeMid = chalk_1.default.hex('#a05a44');
57
+ const chromeBase = chalk_1.default.hex(exports.TERRACOTTA_HEX);
58
+ const chromeLight = chalk_1.default.hex('#e29a80');
59
+ const GRADIENT_STOPS = [chromeShadow, chromeMid, chromeBase, chromeLight];
60
+ /**
61
+ * Color a run of identical border/rule characters with the four-stop ruby
62
+ * gradient, dark → bright, split into four roughly equal segments across
63
+ * its length. Works for horizontal rules ('─'.repeat(n)) and is also used
64
+ * character-by-character for vertical dividers (see `gradientRows`).
65
+ */
66
+ function gradient(str) {
67
+ const len = str.length;
68
+ if (len === 0)
69
+ return str;
70
+ const segLen = Math.max(1, Math.ceil(len / GRADIENT_STOPS.length));
71
+ let out = '';
72
+ let i = 0;
73
+ for (const stop of GRADIENT_STOPS) {
74
+ if (i >= len)
75
+ break;
76
+ out += stop(str.slice(i, i + segLen));
77
+ i += segLen;
78
+ }
79
+ return out;
80
+ }
81
+ /** Bold variant of `gradient()` — for borders that need extra visual weight (e.g. the input box, where the user types). */
82
+ function gradientBold(str) {
83
+ const len = str.length;
84
+ if (len === 0)
85
+ return str;
86
+ const segLen = Math.max(1, Math.ceil(len / GRADIENT_STOPS.length));
87
+ let out = '';
88
+ let i = 0;
89
+ for (const stop of GRADIENT_STOPS) {
90
+ if (i >= len)
91
+ break;
92
+ out += stop.bold(str.slice(i, i + segLen));
93
+ i += segLen;
94
+ }
95
+ return out;
96
+ }
97
+ /**
98
+ * Color for the Nth row (0-indexed) of a `total`-row vertical divider —
99
+ * dark at the top, bright at the bottom, same four stops as `gradient()`.
100
+ * Used to color a single divider character ('│') per output row.
101
+ */
102
+ function gradientStopFor(row, total) {
103
+ const idx = Math.min(GRADIENT_STOPS.length - 1, Math.floor((row / Math.max(1, total)) * GRADIENT_STOPS.length));
104
+ return GRADIENT_STOPS[idx];
105
+ }
106
+ /**
107
+ * Brilliant-cut gem, 9 rows: a narrow flat table, a widening crown, the
108
+ * wide girdle (row 4, the widest point), then a long tapering pavilion
109
+ * down to a single point — the silhouette of an actual cut diamond, not
110
+ * a symmetric kite or a wedge. Solid blocks only (no fractional glyphs)
111
+ * so the point renders cleanly on every terminal font; per-row 3D facet
112
+ * shading is applied at render time by styleGemRow, not baked in here.
113
+ */
114
+ exports.GEM = [
115
+ ' █████ ', // table
116
+ ' ████████ ', // crown
117
+ ' ██████████ ', // crown → girdle
118
+ '████████████', // girdle (widest)
119
+ ' █████████ ', // pavilion
120
+ ' ███████ ', // pavilion
121
+ ' █████ ', // pavilion
122
+ ' ███ ', // pavilion, narrowing to the point
123
+ ' █ ', // point
124
+ ];
125
+ /** Column width of one gem row (all rows share the same padded width). */
126
+ exports.GEM_WIDTH = exports.GEM[0].length;
127
+ /** The gem's styled Nth row, or null if out of range — for compositing beside other columns. */
128
+ function gemRow(i) {
129
+ const row = exports.GEM[i];
130
+ return row === undefined ? null : styleGemRow(row, FACET_SHADES);
131
+ }
132
+ const LOGO = [
133
+ ' ░▒▓██████▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓███████▓▒░ ░▒▓██████▓▒░ ░▒▓██████▓▒░ ▒▓██████▓▒░░▒▓███████▓▒░░ ▒▓████████▓ ',
134
+ '░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ ▒▓█▓▒░ ',
135
+ '░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░░▒▓█▓▒░▒▓█▓▒░ ',
136
+ '░▒▓████████▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓███████▓▒░░▒▓████████▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░░▒▓█▓▒░▒▓██████▓▒ ',
137
+ '░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░░▒▓█▓▒░▒▓█▓▒░ ',
138
+ '░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ ▒▓█▓▒░ ',
139
+ '░▒▓█▓▒░░▒▓█▓▒░░▒▓██████▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ ░▒▓██████▓▒░ ░▒▓██████▓▒░░▒▓███████▓▒░░ ▒▓████████▓ ',
140
+ ];
141
+ // Shade zones for 3D faceted diamond: [leftFace, midFace, shadowFace].
142
+ // Light comes from top-left, so left face is brightest.
143
+ const FACET_SHADES = [light, mid, shadow];
144
+ /** Clear the screen and move the cursor to the top-left (home). */
145
+ function clearToTop() {
146
+ // \x1b[2J clears the screen, \x1b[3J wipes scrollback, \x1b[H homes cursor.
147
+ // Matches how Claude Code pins its header at the top on launch.
148
+ if (process.stdout.isTTY)
149
+ process.stdout.write('\x1b[2J\x1b[3J\x1b[H');
150
+ }
151
+ /** A ruby-gradient horizontal rule spanning the terminal width (capped). */
152
+ function rule() {
153
+ const width = Math.min(process.stdout.columns ?? 80, 100);
154
+ return gradient('─'.repeat(width));
155
+ }
156
+ /**
157
+ * Apply 3D faceted lighting to a diamond row: bright → mid → shadow across
158
+ * the width of its solid-block run (three-zone split, 40/35/25).
159
+ */
160
+ function styleGemRow(row, shades) {
161
+ const match = row.match(/([█]+)/);
162
+ if (!match)
163
+ return row;
164
+ const blockStr = match[1];
165
+ const blockIdx = match.index;
166
+ const len = blockStr.length;
167
+ const leftLen = Math.max(1, Math.ceil(len * 0.40));
168
+ const midLen = Math.max(1, Math.ceil(len * 0.35));
169
+ const rightLen = Math.max(0, len - leftLen - midLen);
170
+ let styled = '';
171
+ if (leftLen > 0)
172
+ styled += shades[0](blockStr.slice(0, leftLen));
173
+ if (midLen > 0)
174
+ styled += shades[1](blockStr.slice(leftLen, leftLen + midLen));
175
+ if (rightLen > 0)
176
+ styled += shades[2](blockStr.slice(leftLen + midLen));
177
+ return row.slice(0, blockIdx) + styled + row.slice(blockIdx + len);
178
+ }
179
+ /** The gem's styled rows, centered above whatever text follows them. */
180
+ function gemBlockLines(indent) {
181
+ const pad = ' '.repeat(Math.max(0, indent));
182
+ return exports.GEM.map(row => pad + styleGemRow(row, FACET_SHADES));
183
+ }
184
+ /** Render the gem alone, centered above whatever text follows it. */
185
+ function renderGemBlock(indent) {
186
+ gemBlockLines(indent).forEach(line => console.log(line));
187
+ }
188
+ /**
189
+ * The banner's fully-styled lines, one string per terminal row:
190
+ * - Brilliant-cut gem centered above the wordmark, each row faceted
191
+ * left-bright / mid / shadow (light hits from the top-left).
192
+ * - LOGO text gets a left-bright / right-shadow treatment.
193
+ * - Session metadata (version, provider/model, cwd, tagline) below.
194
+ * Exposed separately from renderBanner() so the TUI can keep a copy and
195
+ * repaint the banner itself when it rebuilds the screen (e.g. returning
196
+ * from scroll mode) — the alt screen has no scrollback to recover it from.
197
+ */
198
+ function buildBannerLines(info) {
199
+ const lines = [''];
200
+ const gemIndent = Math.floor((LOGO[0].length - exports.GEM[0].length) / 2);
201
+ lines.push(...gemBlockLines(gemIndent), '');
202
+ LOGO.forEach(row => {
203
+ const midPoint = Math.floor(row.length / 2);
204
+ lines.push(light(row.slice(0, midPoint)) + shadow(row.slice(midPoint)));
205
+ });
206
+ lines.push('');
207
+ const meta = [
208
+ info.provider,
209
+ info.model,
210
+ info.language,
211
+ info.mode && `${info.mode} mode`,
212
+ ...(info.extras ?? []),
213
+ ].filter(Boolean).join(' · ');
214
+ lines.push(' ' + ruby.bold(`v${info.version}`) + (info.title ? dim(` — ${info.title}`) : ''));
215
+ if (meta)
216
+ lines.push(' ' + dim(meta));
217
+ lines.push(' ' + dim(info.cwd ?? process.cwd()));
218
+ lines.push(' ' + light.italic('"I don\'t try. I verify."'));
219
+ lines.push(rule());
220
+ return lines;
221
+ }
222
+ /** Render the banner pinned to the top of a cleared screen, so it reads like a real app header, not scrollback. */
223
+ function renderBanner(info) {
224
+ clearToTop();
225
+ buildBannerLines(info).forEach(line => console.log(line));
226
+ }
227
+ /** Standalone diamond (no logo, no info column) — splash contexts. */
11
228
  function renderDiamond() {
12
- console.log(r(' / / / \ \ \ '));
13
- console.log(w(' /__|____|__|__\ '));
14
- console.log(w(' \ | | | / '));
15
- console.log(r(' \ \ / / / '));
16
- console.log(r(' \ \ / // '));
17
- console.log(r(' \ \/ // '));
18
- console.log(g(' \ // '));
19
- console.log(g(' \// '));
20
- console.log(g(' V '));
229
+ console.log('');
230
+ renderGemBlock(2);
21
231
  console.log('');
22
232
  }
23
233
  //# sourceMappingURL=diamond.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"diamond.js","sourceRoot":"","sources":["../../src/cli/diamond.ts"],"names":[],"mappings":";;;;;AAMA,sCAWC;AAjBD,kDAA0B;AAE1B,MAAM,CAAC,GAAG,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC/B,MAAM,CAAC,GAAG,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC/B,MAAM,CAAC,GAAG,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAE/B,SAAgB,aAAa;IAC3B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"diamond.js","sourceRoot":"","sources":["../../src/cli/diamond.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,106 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const diamond_js_1 = require("./diamond.js");
9
+ const dictate_js_1 = require("../tools/dictate.js");
10
+ const minimist_1 = __importDefault(require("minimist"));
11
+ // ─────────────────────────────────────────────────────────────────────────────
12
+ // dic — standalone dictation command
13
+ // Usage:
14
+ // dic Record mic → transcribe (Ctrl+C to stop)
15
+ // dic speak <text> Speak text aloud via MiMo TTS
16
+ // dic devices List available audio input devices
17
+ // dic voices List available MiMo TTS voices
18
+ // dic --device <name> Use a specific audio input device
19
+ // ─────────────────────────────────────────────────────────────────────────────
20
+ const rawArgs = process.argv.slice(2);
21
+ const parsed = (0, minimist_1.default)(rawArgs);
22
+ const sub = parsed._[0];
23
+ if (sub === 'toggle') {
24
+ // One-hotkey dictation: 1st press starts recording, 2nd press stops +
25
+ // transcribes + types into the focused window (with Enter). Built for a
26
+ // global shortcut (e.g. KDE Super+Space bound to `dic toggle`).
27
+ const deviceId = parsed.device || undefined;
28
+ const submit = parsed.submit !== false && !parsed['no-submit'];
29
+ (0, dictate_js_1.toggleDictation)({ deviceId, submit }).catch(e => {
30
+ console.error(chalk_1.default.hex('#b15439')(`\nFatal: ${String(e)}`));
31
+ process.exit(1);
32
+ });
33
+ }
34
+ else if (sub === 'devices' || sub === 'device') {
35
+ (0, dictate_js_1.listDevices)();
36
+ }
37
+ else if (sub === 'speak') {
38
+ const voice = parsed.voice || undefined;
39
+ const textParts = parsed._.slice(1);
40
+ const text = textParts.join(' ').trim();
41
+ if (!text) {
42
+ console.error(chalk_1.default.hex('#b15439')('Usage: dic speak <text> [--voice <id>]\n'));
43
+ process.exit(1);
44
+ }
45
+ (0, dictate_js_1.speakText)(text, voice).catch(e => {
46
+ console.error(chalk_1.default.hex('#b15439')(`\nFatal: ${String(e)}`));
47
+ process.exit(1);
48
+ });
49
+ }
50
+ else if (sub === 'voices') {
51
+ (0, dictate_js_1.listVoices)();
52
+ }
53
+ else if (sub === 'help' || parsed.help || parsed.h) {
54
+ console.log(`
55
+ ${chalk_1.default.hex('#cc785c').bold('dic')} ${chalk_1.default.hex('#8a7768')('— speech-to-text & text-to-speech')}
56
+
57
+ ${chalk_1.default.hex(diamond_js_1.FAINT_HEX)('Usage:')}
58
+ ${chalk_1.default.hex('#8a7768')('dic')} Record → transcribe → copy + type into focused window
59
+ ${chalk_1.default.hex('#8a7768')('dic --no-inject')} Record → transcribe → clipboard only (no typing)
60
+ ${chalk_1.default.hex('#8a7768')('dic toggle')} Hotkey mode: 1st press records, 2nd press sends (types + Enter)
61
+ ${chalk_1.default.hex('#8a7768')('dic toggle --no-submit')} Toggle, but don't press Enter after typing
62
+ ${chalk_1.default.hex('#8a7768')('dic loop')} Continuous: speak → type → repeat (Ctrl+C to stop)
63
+ ${chalk_1.default.hex('#8a7768')('dic loop --silence 2000')} Continuous with custom silence threshold (ms)
64
+ ${chalk_1.default.hex('#8a7768')('dic --device <name>')} Record with a specific audio device
65
+ ${chalk_1.default.hex('#8a7768')('dic devices')} List available audio input devices
66
+ ${chalk_1.default.hex('#8a7768')('dic speak <text>')} Speak text aloud via MiMo TTS
67
+ ${chalk_1.default.hex('#8a7768')('dic speak <text> --voice Chloe')} Speak with a specific voice
68
+ ${chalk_1.default.hex('#8a7768')('dic voices')} List available TTS voices
69
+
70
+ ${chalk_1.default.hex(diamond_js_1.FAINT_HEX)('API keys:')}
71
+ PARAKEET_BASE_URL Local NVIDIA Parakeet ASR (self-hosted, no key)
72
+ XIAOMI_API_KEY MiMo ASR (STT) + MiMo TTS — free tier available
73
+ OPENAI_API_KEY OpenAI Whisper (STT fallback)
74
+ GROQ_API_KEY Groq Whisper (STT fallback, very fast)
75
+
76
+ ${chalk_1.default.hex(diamond_js_1.FAINT_HEX)('Notes:')}
77
+ - STT prioritizes PARAKEET_BASE_URL > XIAOMI_API_KEY > OPENAI_API_KEY > GROQ_API_KEY
78
+ - TTS requires XIAOMI_API_KEY (limited-time free)
79
+ - Transcriptions are automatically copied to clipboard
80
+ - Injection (typing into the focused window) is ON by default; use --no-inject to disable
81
+ - KDE/KWin Wayland rejects wtype — install ydotool and enable ydotoold for typing there
82
+ - 'dic loop' runs continuous dictation with auto-injection
83
+ - 'dic toggle' is meant for a global shortcut (e.g. KDE Super+Space → dic toggle)
84
+ - Press Ctrl+C to stop recording
85
+ \n`);
86
+ }
87
+ else if (sub === 'loop' || parsed.loop || parsed.l) {
88
+ // Continuous dictation loop
89
+ const deviceId = parsed.device || undefined;
90
+ const silenceMs = parsed.silence ? Number(parsed.silence) : 1500;
91
+ (0, dictate_js_1.dictationLoop)({ deviceId, silenceMs }).catch(e => {
92
+ console.error(chalk_1.default.hex('#b15439')(`\nFatal: ${String(e)}`));
93
+ process.exit(1);
94
+ });
95
+ }
96
+ else {
97
+ // Default: dictate. Injection is ON by default (transcription is typed into
98
+ // the focused window when it finishes); --no-inject gives clipboard-only.
99
+ const deviceId = parsed.device || undefined;
100
+ const inject = parsed.inject !== false && !parsed['clip-only'];
101
+ (0, dictate_js_1.dictate)({ deviceId, inject }).catch(e => {
102
+ console.error(chalk_1.default.hex('#b15439')(`\nFatal: ${String(e)}`));
103
+ process.exit(1);
104
+ });
105
+ }
106
+ //# sourceMappingURL=dic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dic.js","sourceRoot":"","sources":["../../src/cli/dic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export interface DiffLine {
2
+ type: 'add' | 'remove' | 'context' | 'hunk' | 'file';
3
+ content: string;
4
+ }
5
+ /**
6
+ * Compute a simple line-level diff between old and new text.
7
+ * Uses LCS-based approach for accuracy.
8
+ */
9
+ export declare function computeDiff(oldText: string, newText: string): DiffLine[];
10
+ /**
11
+ * Render a diff as styled terminal lines. Shows up to `maxLines` lines
12
+ * of context, then collapses with a "... N more lines" marker.
13
+ */
14
+ export declare function renderDiff(diff: DiffLine[], maxLines?: number): string[];
15
+ /**
16
+ * Quick diff preview for tool calls — shows a compact summary.
17
+ */
18
+ export declare function diffPreview(oldText: string, newText: string, filePath: string): string[];
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.computeDiff = computeDiff;
7
+ exports.renderDiff = renderDiff;
8
+ exports.diffPreview = diffPreview;
9
+ /**
10
+ * Inline diff renderer — shows file edits as colored +/- lines,
11
+ * like `git diff` but with Aura's palette.
12
+ */
13
+ const chalk_1 = __importDefault(require("chalk"));
14
+ const diamond_js_1 = require("./diamond.js");
15
+ const TEXT_DIM = chalk_1.default.hex(diamond_js_1.TEXT_DIM_HEX);
16
+ const RUBY = diamond_js_1.RUBY_ACCENT;
17
+ const ADDED = chalk_1.default.hex('#5a9e6e');
18
+ const REMOVED = chalk_1.default.hex('#b15439');
19
+ const HUNK_HEADER = chalk_1.default.hex(diamond_js_1.FAINT_HEX);
20
+ const FILE_HEADER = chalk_1.default.hex('#cc785c');
21
+ /**
22
+ * Compute a simple line-level diff between old and new text.
23
+ * Uses LCS-based approach for accuracy.
24
+ */
25
+ function computeDiff(oldText, newText) {
26
+ const oldLines = oldText.split('\n');
27
+ const newLines = newText.split('\n');
28
+ const diff = [];
29
+ // Simple LCS diff
30
+ const m = oldLines.length;
31
+ const n = newLines.length;
32
+ const dp = Array(m + 1).fill(null).map(() => Array(n + 1).fill(0));
33
+ for (let i = 1; i <= m; i++) {
34
+ for (let j = 1; j <= n; j++) {
35
+ if (oldLines[i - 1] === newLines[j - 1]) {
36
+ dp[i][j] = dp[i - 1][j - 1] + 1;
37
+ }
38
+ else {
39
+ dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
40
+ }
41
+ }
42
+ }
43
+ const traceDiff = (i, j) => {
44
+ if (i > 0 && j > 0 && oldLines[i - 1] === newLines[j - 1]) {
45
+ traceDiff(i - 1, j - 1);
46
+ diff.push({ type: 'context', content: oldLines[i - 1] });
47
+ }
48
+ else if (j > 0 && (i === 0 || dp[i][j - 1] >= dp[i - 1][j])) {
49
+ traceDiff(i, j - 1);
50
+ diff.push({ type: 'add', content: newLines[j - 1] });
51
+ }
52
+ else if (i > 0 && (j === 0 || dp[i][j - 1] < dp[i - 1][j])) {
53
+ traceDiff(i - 1, j);
54
+ diff.push({ type: 'remove', content: oldLines[i - 1] });
55
+ }
56
+ };
57
+ traceDiff(m, n);
58
+ return diff;
59
+ }
60
+ /**
61
+ * Render a diff as styled terminal lines. Shows up to `maxLines` lines
62
+ * of context, then collapses with a "... N more lines" marker.
63
+ */
64
+ function renderDiff(diff, maxLines = 30) {
65
+ const lines = [];
66
+ let shown = 0;
67
+ let totalChanges = 0;
68
+ for (const d of diff) {
69
+ if (d.type === 'add' || d.type === 'remove')
70
+ totalChanges++;
71
+ }
72
+ const maxChanges = Math.min(maxLines, totalChanges);
73
+ let changeCount = 0;
74
+ for (const d of diff) {
75
+ if (d.type === 'add' || d.type === 'remove') {
76
+ if (changeCount >= maxChanges)
77
+ continue;
78
+ changeCount++;
79
+ }
80
+ if (shown >= maxLines && d.type !== 'hunk' && d.type !== 'file') {
81
+ const remaining = totalChanges - changeCount;
82
+ if (remaining > 0) {
83
+ lines.push(TEXT_DIM(` … ${remaining} more changes`));
84
+ }
85
+ break;
86
+ }
87
+ shown++;
88
+ switch (d.type) {
89
+ case 'add':
90
+ lines.push(ADDED(` + ${d.content}`));
91
+ break;
92
+ case 'remove':
93
+ lines.push(REMOVED(` - ${d.content}`));
94
+ break;
95
+ case 'context':
96
+ lines.push(TEXT_DIM(` ${d.content}`));
97
+ break;
98
+ }
99
+ }
100
+ return lines;
101
+ }
102
+ /**
103
+ * Quick diff preview for tool calls — shows a compact summary.
104
+ */
105
+ function diffPreview(oldText, newText, filePath) {
106
+ const diff = computeDiff(oldText, newText);
107
+ const added = diff.filter(d => d.type === 'add').length;
108
+ const removed = diff.filter(d => d.type === 'remove').length;
109
+ const lines = [
110
+ FILE_HEADER.bold(` 📝 ${filePath}`) + TEXT_DIM(` +${added} -${removed}`),
111
+ ];
112
+ return [...lines, ...renderDiff(diff, 15)];
113
+ }
114
+ //# sourceMappingURL=diff-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff-view.js","sourceRoot":"","sources":["../../src/cli/diff-view.ts"],"names":[],"mappings":"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"}
@@ -36,9 +36,23 @@ export interface Display {
36
36
  provider: string;
37
37
  state: 'closed' | 'open' | 'half-open';
38
38
  }): void;
39
+ /** One-line context health bar — shown before each LLM call. */
40
+ contextBar?(health: import('./context-health.js').ContextHealth): void;
41
+ /** Full context dashboard — shown on /context command. */
42
+ contextDashboard?(health: import('./context-health.js').ContextHealth): void;
43
+ /** Compaction event — replaces the current generic warning. */
44
+ compactionEvent?(info: {
45
+ beforeTokens: number;
46
+ afterTokens: number;
47
+ generation: number;
48
+ threshold: number;
49
+ }): void;
39
50
  }
40
51
  export declare function createTerminalDisplay(): Display;
41
- /** Format a token count compactly: 1234 → "1.2K", 25400 → "25.4K", 1000000 → "1M". */
42
- export declare function formatCompact(n: number): string;
43
- /** Build the context-bar line, e.g. ` 25.4K/1M [████░░░░░░] 23%`. */
44
- export declare function formatContextBar(used: number, limit: number, estimated: boolean): string;
52
+ /**
53
+ * One-line context-usage bar used by tests and any direct callers.
54
+ * Clamps the visual fill to the bar width but keeps the true percentage in text
55
+ * so over-limit usage (cumulative session tokens vs a single model window) is
56
+ * visible rather than hidden.
57
+ */
58
+ export declare function formatContextBar(usedTokens: number, limitTokens: number, isEstimated?: boolean): string;