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
@@ -0,0 +1,133 @@
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.PALETTE_COMMANDS = void 0;
7
+ exports.fuzzyMatch = fuzzyMatch;
8
+ exports.filterCommands = filterCommands;
9
+ exports.renderPalette = renderPalette;
10
+ /**
11
+ * Command palette — Ctrl+P opens a fuzzy-searchable list of all
12
+ * :commands. Inspired by OpenCode's Ctrl+P palette.
13
+ *
14
+ * Renders an overlay panel at the bottom of the screen (above the
15
+ * input box in bottom-input layout). User types to filter, arrow
16
+ * keys to navigate, Enter to execute, Esc to cancel.
17
+ */
18
+ const chalk_1 = __importDefault(require("chalk"));
19
+ const diamond_js_1 = require("./diamond.js");
20
+ const TEXT = chalk_1.default.hex(diamond_js_1.TEXT_HEX);
21
+ const TEXT_DIM = chalk_1.default.hex(diamond_js_1.TEXT_DIM_HEX);
22
+ const RUBY = diamond_js_1.RUBY_ACCENT;
23
+ const HIGHLIGHT = chalk_1.default.hex('#cc785c');
24
+ /**
25
+ * All commands available in the palette. Derived from help-data.ts
26
+ * but kept as a static list here to avoid circular imports.
27
+ */
28
+ exports.PALETTE_COMMANDS = [
29
+ // Session
30
+ { id: ':id', label: 'Show session ID', description: 'Current chat ID', category: 'Session' },
31
+ { id: ':sessions', label: 'List sessions', description: 'All saved sessions', category: 'Session' },
32
+ { id: ':resume', label: 'Resume session', description: 'Resume latest session', category: 'Session' },
33
+ { id: ':new', label: 'New session', description: 'Start fresh session', category: 'Session' },
34
+ { id: ':history', label: 'Show history', description: 'Turn count in current session', category: 'Session' },
35
+ { id: ':save', label: 'Save session', description: 'Rename/save current session', category: 'Session' },
36
+ // Model
37
+ { id: ':model', label: 'Switch model', description: 'Interactive model selector', category: 'Model / API' },
38
+ { id: ':models', label: 'List models', description: 'All available models', category: 'Model / API' },
39
+ { id: ':provider', label: 'Provider wizard', description: 'Pick provider, model, key', category: 'Model / API' },
40
+ { id: ':apikey', label: 'Set API key', description: 'Set API key for session', category: 'Model / API' },
41
+ // Workflows
42
+ { id: ':workflows', label: 'List workflows', description: 'All saved workflows', category: 'Workflows' },
43
+ { id: ':workflow', label: 'Create workflow', description: 'Multi-step workflow', category: 'Workflows' },
44
+ { id: ':machina', label: 'Machina task', description: 'Self-verification + auto-retry', category: 'Workflows' },
45
+ { id: ':council', label: 'Council', description: 'Parallel read-only specialists', category: 'Workflows' },
46
+ { id: ':q add', label: 'Queue task', description: 'Enqueue a task', category: 'Workflows' },
47
+ { id: ':q list', label: 'Queue list', description: 'List queued tasks', category: 'Workflows' },
48
+ // Memory
49
+ { id: ':dream', label: 'Dream', description: 'Consolidate episodes', category: 'Memory' },
50
+ { id: ':rem', label: 'Show memory', description: 'Reconciled memory', category: 'Memory' },
51
+ { id: ':mine', label: 'Mine patterns', description: 'Mine episodes for patterns', category: 'Memory' },
52
+ { id: ':research', label: 'Research', description: 'Multi-step research pass', category: 'Memory' },
53
+ { id: ':btw', label: 'Side question', description: 'Quick read-only question', category: 'Memory' },
54
+ // Voice
55
+ { id: ':speak', label: 'Toggle voice', description: 'Read replies aloud', category: 'Voice' },
56
+ // Safety
57
+ { id: ':approve', label: 'Toggle auto-approve', description: 'Skip y/N prompts', category: 'Safety' },
58
+ // System
59
+ { id: ':help', label: 'Help', description: 'Show all commands', category: 'System' },
60
+ { id: ':q', label: 'Quit', description: 'Exit Aura', category: 'System' },
61
+ { id: ':context', label: 'Context health', description: 'Token usage dashboard', category: 'System' },
62
+ { id: ':doctor', label: 'Doctor', description: 'Run health checks', category: 'System' },
63
+ ];
64
+ /**
65
+ * Fuzzy-match a query against a command's label + id.
66
+ * Returns a score (lower = better match), or -1 for no match.
67
+ */
68
+ function fuzzyMatch(query, text) {
69
+ if (!query)
70
+ return 0;
71
+ const q = query.toLowerCase();
72
+ const t = text.toLowerCase();
73
+ // Exact substring match — best
74
+ const idx = t.indexOf(q);
75
+ if (idx >= 0)
76
+ return idx;
77
+ // Fuzzy: all chars of query appear in order in text
78
+ let qi = 0;
79
+ let score = 0;
80
+ let lastMatchPos = -1;
81
+ for (let ti = 0; ti < t.length && qi < q.length; ti++) {
82
+ if (t[ti] === q[qi]) {
83
+ score += lastMatchPos >= 0 ? (ti - lastMatchPos) : 0;
84
+ lastMatchPos = ti;
85
+ qi++;
86
+ }
87
+ }
88
+ return qi === q.length ? score + 100 : -1;
89
+ }
90
+ /**
91
+ * Filter and sort commands by fuzzy match score.
92
+ */
93
+ function filterCommands(query) {
94
+ if (!query)
95
+ return exports.PALETTE_COMMANDS;
96
+ const scored = exports.PALETTE_COMMANDS.map(cmd => {
97
+ const score = fuzzyMatch(query, cmd.label + ' ' + cmd.id);
98
+ return { cmd, score };
99
+ }).filter(s => s.score >= 0);
100
+ scored.sort((a, b) => a.score - b.score);
101
+ return scored.map(s => s.cmd);
102
+ }
103
+ /**
104
+ * Render the palette overlay. Returns styled lines to draw.
105
+ * `selectedIdx` is the currently highlighted item.
106
+ * `maxVisible` controls how many items fit in the overlay.
107
+ */
108
+ function renderPalette(commands, query, selectedIdx, maxVisible, width) {
109
+ const lines = [];
110
+ // Header
111
+ lines.push(TEXT_DIM(' ┌─ command palette ' + '─'.repeat(Math.max(0, width - 21)) + '┐'));
112
+ lines.push(TEXT_DIM(' │ ') + RUBY(query) + TEXT_DIM('_'.repeat(Math.max(0, width - query.length - 6)) + ' │'));
113
+ const visible = commands.slice(0, maxVisible);
114
+ const actualSelected = Math.min(selectedIdx, visible.length - 1);
115
+ for (let i = 0; i < visible.length; i++) {
116
+ const cmd = visible[i];
117
+ const isSelected = i === actualSelected;
118
+ const prefix = isSelected ? RUBY('▸ ') : ' ';
119
+ const label = isSelected ? HIGHLIGHT.bold(cmd.label) : TEXT(cmd.label);
120
+ const desc = TEXT_DIM(` ${cmd.description}`);
121
+ const cat = TEXT_DIM(` [${cmd.category}]`);
122
+ const content = `${prefix}${label}${desc}${cat}`;
123
+ const truncContent = content.length > width - 4
124
+ ? content.slice(0, width - 5) + '…'
125
+ : content;
126
+ lines.push(TEXT_DIM(' │ ') + truncContent + TEXT_DIM(' │'));
127
+ }
128
+ // Footer
129
+ lines.push(TEXT_DIM(' └' + '─'.repeat(width - 4) + '┘'));
130
+ lines.push(TEXT_DIM(' ↑↓ navigate · Enter select · Esc cancel'));
131
+ return lines;
132
+ }
133
+ //# sourceMappingURL=command-palette.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-palette.js","sourceRoot":"","sources":["../../src/cli/command-palette.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import type { HistoryMessage } from '../providers/types.js';
2
+ export interface LargestMessage {
3
+ role: string;
4
+ preview: string;
5
+ tokens: number;
6
+ index: number;
7
+ }
8
+ export interface CompactionEvent {
9
+ turn: number;
10
+ beforeTokens: number;
11
+ afterTokens: number;
12
+ generation: number;
13
+ }
14
+ export interface ContextHealth {
15
+ estimatedTokens: number;
16
+ contextWindow: number;
17
+ usagePercent: number;
18
+ recapGeneration: number;
19
+ nextCompactionThreshold: number;
20
+ nextCompactionPercent: number;
21
+ tokensUntilCompaction: number;
22
+ rolloversRemaining: number;
23
+ totalInputTokens: number;
24
+ totalOutputTokens: number;
25
+ totalCostUsd: number;
26
+ turnCount: number;
27
+ toolCallCount: number;
28
+ compactionCount: number;
29
+ largestMessages: LargestMessage[];
30
+ compactionHistory: CompactionEvent[];
31
+ }
32
+ export declare class ContextHealthTracker {
33
+ private getSystem;
34
+ private getHistory;
35
+ private model;
36
+ private pricingModel;
37
+ private compactionEvents;
38
+ private _turnCount;
39
+ private _toolCallCount;
40
+ constructor(getSystem: () => string, getHistory: () => HistoryMessage[], model: string, pricingModel: string);
41
+ incrementTurn(): void;
42
+ incrementToolCalls(n?: number): void;
43
+ /** Replace the system-prompt source — used when a shared tracker is passed
44
+ * into the loop and the loop builds the real (task-embedded) system prompt. */
45
+ updateSystem(s: string): void;
46
+ recordCompaction(beforeTokens: number, afterTokens: number, generation: number): void;
47
+ snapshot(inputTokens?: number, outputTokens?: number): ContextHealth;
48
+ }
49
+ export declare function formatContextBar(h: ContextHealth): string;
50
+ export declare function formatContextDashboard(h: ContextHealth): string;
51
+ export declare function formatCompactionEvent(beforeTokens: number, afterTokens: number, generation: number, threshold: number): string;
@@ -0,0 +1,187 @@
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.ContextHealthTracker = void 0;
7
+ exports.formatContextBar = formatContextBar;
8
+ exports.formatContextDashboard = formatContextDashboard;
9
+ exports.formatCompactionEvent = formatCompactionEvent;
10
+ /**
11
+ * Context Health Dashboard — real-time visibility into token usage,
12
+ * compaction state, and session costs. Observational only — never
13
+ * modifies history or triggers compaction.
14
+ */
15
+ const chalk_1 = __importDefault(require("chalk"));
16
+ const diamond_js_1 = require("./diamond.js");
17
+ const compactor_js_1 = require("../agent/compactor.js");
18
+ const factory_js_1 = require("../providers/factory.js");
19
+ const loop_js_1 = require("../agent/loop.js");
20
+ const LADDER = [0.55, 0.70, 0.85];
21
+ const ROLLOVER_AT_GENERATION = 3;
22
+ const DEFAULT_WINDOW = 128_000;
23
+ class ContextHealthTracker {
24
+ getSystem;
25
+ getHistory;
26
+ model;
27
+ pricingModel;
28
+ compactionEvents = [];
29
+ _turnCount = 0;
30
+ _toolCallCount = 0;
31
+ constructor(getSystem, getHistory, model, pricingModel) {
32
+ this.getSystem = getSystem;
33
+ this.getHistory = getHistory;
34
+ this.model = model;
35
+ this.pricingModel = pricingModel;
36
+ }
37
+ incrementTurn() { this._turnCount++; }
38
+ incrementToolCalls(n = 1) { this._toolCallCount += n; }
39
+ /** Replace the system-prompt source — used when a shared tracker is passed
40
+ * into the loop and the loop builds the real (task-embedded) system prompt. */
41
+ updateSystem(s) { this.getSystem = () => s; }
42
+ recordCompaction(beforeTokens, afterTokens, generation) {
43
+ this.compactionEvents.push({ turn: this._turnCount, beforeTokens, afterTokens, generation });
44
+ }
45
+ snapshot(inputTokens = 0, outputTokens = 0) {
46
+ const system = this.getSystem();
47
+ const history = this.getHistory();
48
+ const estimatedTokens = (0, compactor_js_1.estimateContextTokens)(system, history);
49
+ const contextWindow = (0, factory_js_1.getContextWindow)(this.model) ?? DEFAULT_WINDOW;
50
+ const usagePercent = (estimatedTokens / contextWindow) * 100;
51
+ const recapGeneration = (0, compactor_js_1.getRecapGeneration)(history);
52
+ const genIndex = Math.min(recapGeneration, LADDER.length - 1);
53
+ const nextCompactionPercent = Math.round(LADDER[genIndex] * 100);
54
+ const nextCompactionThreshold = Math.floor(contextWindow * LADDER[genIndex]);
55
+ const tokensUntilCompaction = Math.max(0, nextCompactionThreshold - estimatedTokens);
56
+ return {
57
+ estimatedTokens, contextWindow, usagePercent, recapGeneration,
58
+ nextCompactionThreshold, nextCompactionPercent, tokensUntilCompaction,
59
+ rolloversRemaining: Math.max(0, ROLLOVER_AT_GENERATION - recapGeneration),
60
+ totalInputTokens: inputTokens, totalOutputTokens: outputTokens,
61
+ totalCostUsd: (0, loop_js_1.costFor)(this.pricingModel, inputTokens, outputTokens),
62
+ turnCount: this._turnCount, toolCallCount: this._toolCallCount,
63
+ compactionCount: this.compactionEvents.length,
64
+ largestMessages: getLargestMessages(history, system, 5),
65
+ compactionHistory: [...this.compactionEvents],
66
+ };
67
+ }
68
+ }
69
+ exports.ContextHealthTracker = ContextHealthTracker;
70
+ function getLargestMessages(history, system, n) {
71
+ const messages = [];
72
+ messages.push({ role: 'system', preview: 'System prompt', tokens: (0, compactor_js_1.countText)(system), index: -1 });
73
+ for (let i = 0; i < history.length; i++) {
74
+ const msg = history[i];
75
+ const tokens = (0, compactor_js_1.countMessage)(msg);
76
+ let preview;
77
+ switch (msg.role) {
78
+ case 'user':
79
+ preview = msg.content?.slice(0, 60) ?? '(empty)';
80
+ break;
81
+ case 'assistant':
82
+ preview = msg.content?.slice(0, 60) || (msg.toolCalls?.length ? 'Calls: ' + msg.toolCalls.map(c => c.name).join(', ') : '(empty)');
83
+ break;
84
+ case 'tool_result':
85
+ preview = 'Tool: ' + msg.results.map(r => r.name).join(', ');
86
+ break;
87
+ default: preview = '(unknown)';
88
+ }
89
+ messages.push({ role: msg.role, preview, tokens, index: i });
90
+ }
91
+ return messages.sort((a, b) => b.tokens - a.tokens).slice(0, n);
92
+ }
93
+ function formatContextBar(h) {
94
+ const barWidth = 20;
95
+ const filled = Math.max(0, Math.min(barWidth, Math.round((h.usagePercent / 100) * barWidth)));
96
+ const ladderPos = LADDER.map(r => Math.floor(r * barWidth));
97
+ let bar = '';
98
+ for (let i = 0; i < barWidth; i++) {
99
+ if (i < filled)
100
+ bar += '\u2588';
101
+ else if (ladderPos.includes(i))
102
+ bar += '\u250a';
103
+ else
104
+ bar += '\u2591';
105
+ }
106
+ const barColor = h.usagePercent < 50 ? chalk_1.default.hex('#5a9e6e') : h.usagePercent < 70 ? chalk_1.default.hex('#d4903a') : chalk_1.default.hex('#b15439');
107
+ const pct = h.usagePercent.toFixed(0) + '%';
108
+ const tok = (h.estimatedTokens / 1000).toFixed(1) + 'k/' + (h.contextWindow / 1000).toFixed(0) + 'k';
109
+ const gen = h.recapGeneration > 0 ? ' \u00b7 gen ' + h.recapGeneration : '';
110
+ const compact = ' \u00b7 compact @ ' + h.nextCompactionPercent + '% (' + (h.nextCompactionThreshold / 1000).toFixed(0) + 'k)';
111
+ const cost = h.totalCostUsd > 0 ? ' \u00b7 $' + h.totalCostUsd.toFixed(2) : '';
112
+ return ' \u25c6 Context: ' + barColor(bar) + ' ' + pct + ' (' + tok + ')' + gen + compact + cost + ' \u00b7 ' + h.turnCount + ' turns';
113
+ }
114
+ function formatContextDashboard(h) {
115
+ const w = process.stdout.columns ?? 80;
116
+ const line = '\u2500'.repeat(Math.min(w - 4, 60));
117
+ const barWidth = 30;
118
+ const filled = Math.max(0, Math.min(barWidth, Math.round((h.usagePercent / 100) * barWidth)));
119
+ const ladderPos = LADDER.map(r => Math.floor(r * barWidth));
120
+ let bar = '';
121
+ for (let i = 0; i < barWidth; i++) {
122
+ if (i < filled)
123
+ bar += '\u2588';
124
+ else if (ladderPos.includes(i))
125
+ bar += '\u250a';
126
+ else
127
+ bar += '\u2591';
128
+ }
129
+ const barColor = h.usagePercent < 50 ? chalk_1.default.hex('#5a9e6e') : h.usagePercent < 70 ? chalk_1.default.hex('#d4903a') : chalk_1.default.hex('#b15439');
130
+ const freeTokens = Math.max(0, h.contextWindow - h.estimatedTokens);
131
+ const freePct = (100 - Math.min(100, h.usagePercent)).toFixed(0);
132
+ const lines = [
133
+ '',
134
+ chalk_1.default.hex(diamond_js_1.FAINT_HEX)(line),
135
+ chalk_1.default.hex('#cc785c').bold(' Context Health Dashboard'),
136
+ chalk_1.default.hex(diamond_js_1.FAINT_HEX)(line),
137
+ '',
138
+ ' Window: ' + chalk_1.default.hex('#c8b5a0')(h.contextWindow.toLocaleString()) + ' tokens',
139
+ ' Used: ' + chalk_1.default.hex('#c8b5a0')(h.estimatedTokens.toLocaleString()) + ' tokens (' + chalk_1.default.bold(h.usagePercent.toFixed(1) + '%') + ') ' + barColor(bar),
140
+ ' Free: ' + chalk_1.default.hex('#c8b5a0')(freeTokens.toLocaleString()) + ' tokens (' + freePct + '%)',
141
+ '',
142
+ ' Compaction: ' + chalk_1.default.hex('#c8b5a0')('Generation ' + h.recapGeneration + ' of ' + ROLLOVER_AT_GENERATION),
143
+ ' Next fire: ' + chalk_1.default.hex('#c8b5a0')(h.nextCompactionThreshold.toLocaleString() + ' tokens (' + h.nextCompactionPercent + '%)') + ' \u2014 ' + chalk_1.default.hex('#d4903a')(h.tokensUntilCompaction.toLocaleString() + ' tokens away'),
144
+ ' Ladder: ' + formatLadder(h.recapGeneration),
145
+ ' Remaining: ' + chalk_1.default.hex('#c8b5a0')(h.rolloversRemaining + ' compaction(s) before dream flush'),
146
+ '',
147
+ chalk_1.default.hex('#cc785c').bold(' Session totals'),
148
+ ' Input: ' + chalk_1.default.hex('#c8b5a0')(h.totalInputTokens.toLocaleString()) + ' tokens',
149
+ ' Output: ' + chalk_1.default.hex('#c8b5a0')(h.totalOutputTokens.toLocaleString()) + ' tokens',
150
+ ' Cost: ' + chalk_1.default.hex('#c8b5a0')('$' + h.totalCostUsd.toFixed(4)),
151
+ ' Turns: ' + chalk_1.default.hex('#c8b5a0')(String(h.turnCount)),
152
+ ' Tools: ' + chalk_1.default.hex('#c8b5a0')(h.toolCallCount + ' calls'),
153
+ ];
154
+ if (h.compactionHistory.length > 0) {
155
+ lines.push('', chalk_1.default.hex('#cc785c').bold(' Compaction history'));
156
+ for (const e of h.compactionHistory) {
157
+ const saved = ((1 - e.afterTokens / e.beforeTokens) * 100).toFixed(0);
158
+ lines.push(' Turn ' + e.turn + ': ' + e.beforeTokens.toLocaleString() + ' \u2192 ' + e.afterTokens.toLocaleString() + ' tokens ' + chalk_1.default.hex('#5a9e6e')('(-' + saved + '%)') + ' gen ' + (e.generation - 1) + '\u2192' + e.generation);
159
+ }
160
+ }
161
+ if (h.largestMessages.length > 0) {
162
+ lines.push('', chalk_1.default.hex('#cc785c').bold(' Largest messages'));
163
+ for (const m of h.largestMessages) {
164
+ const idx = m.index === -1 ? 'sys' : '#' + m.index;
165
+ lines.push(' ' + chalk_1.default.hex(diamond_js_1.FAINT_HEX)(idx.padEnd(4)) + ' ' + chalk_1.default.hex(diamond_js_1.TEXT_DIM_HEX)(m.role.padEnd(12)) + ' ' + m.preview + ' ' + chalk_1.default.hex('#d4903a')(m.tokens.toLocaleString() + ' tok'));
166
+ }
167
+ }
168
+ lines.push('', chalk_1.default.hex(diamond_js_1.FAINT_HEX)(line), '');
169
+ return lines.join('\n');
170
+ }
171
+ function formatLadder(generation) {
172
+ const rungs = LADDER.map((r, i) => {
173
+ const pct = (r * 100).toFixed(0) + '%';
174
+ if (i < generation)
175
+ return chalk_1.default.hex('#5a9e6e')(pct + ' \u2713');
176
+ if (i === generation)
177
+ return chalk_1.default.hex('#d4903a')(pct + ' pending');
178
+ return chalk_1.default.hex(diamond_js_1.FAINT_HEX)(pct);
179
+ });
180
+ const flush = chalk_1.default.hex('#6d8fb3')('flush');
181
+ return rungs.join(' \u2192 ') + ' \u2192 ' + flush;
182
+ }
183
+ function formatCompactionEvent(beforeTokens, afterTokens, generation, threshold) {
184
+ const saved = ((1 - afterTokens / beforeTokens) * 100).toFixed(0);
185
+ return 'Context compacted: ' + beforeTokens.toLocaleString() + ' \u2192 ' + afterTokens.toLocaleString() + ' tokens ' + chalk_1.default.hex('#5a9e6e')('(-' + saved + '%)') + ' \u00b7 gen ' + generation + ' \u00b7 threshold ' + threshold.toLocaleString();
186
+ }
187
+ //# sourceMappingURL=context-health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-health.js","sourceRoot":"","sources":["../../src/cli/context-health.ts"],"names":[],"mappings":"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"}
@@ -1 +1,68 @@
1
+ import chalk from 'chalk';
2
+ export declare const RUBY_HEX = "#9b1b30";
3
+ export declare const RUBY_ACCENT: chalk.Chalk;
4
+ export declare const BG_HEX = "#0f1724";
5
+ export declare const PANEL_BG_HEX = "#1c2739";
6
+ export declare const TERRACOTTA_HEX = "#cc785c";
7
+ export declare const TEXT_HEX = "#e8e6e3";
8
+ export declare const TEXT_DIM_HEX = "#8a94a6";
9
+ export declare const FAINT_HEX = "#4a5568";
10
+ export declare const TEXT: chalk.Chalk;
11
+ export declare const TEXT_DIM: chalk.Chalk;
12
+ export declare const FAINT: chalk.Chalk;
13
+ export declare const CHROME_DIM: chalk.Chalk;
14
+ /**
15
+ * Color a run of identical border/rule characters with the four-stop ruby
16
+ * gradient, dark → bright, split into four roughly equal segments across
17
+ * its length. Works for horizontal rules ('─'.repeat(n)) and is also used
18
+ * character-by-character for vertical dividers (see `gradientRows`).
19
+ */
20
+ export declare function gradient(str: string): string;
21
+ /** Bold variant of `gradient()` — for borders that need extra visual weight (e.g. the input box, where the user types). */
22
+ export declare function gradientBold(str: string): string;
23
+ /**
24
+ * Color for the Nth row (0-indexed) of a `total`-row vertical divider —
25
+ * dark at the top, bright at the bottom, same four stops as `gradient()`.
26
+ * Used to color a single divider character ('│') per output row.
27
+ */
28
+ export declare function gradientStopFor(row: number, total: number): chalk.Chalk;
29
+ /**
30
+ * Brilliant-cut gem, 9 rows: a narrow flat table, a widening crown, the
31
+ * wide girdle (row 4, the widest point), then a long tapering pavilion
32
+ * down to a single point — the silhouette of an actual cut diamond, not
33
+ * a symmetric kite or a wedge. Solid blocks only (no fractional glyphs)
34
+ * so the point renders cleanly on every terminal font; per-row 3D facet
35
+ * shading is applied at render time by styleGemRow, not baked in here.
36
+ */
37
+ export declare const GEM: string[];
38
+ /** Column width of one gem row (all rows share the same padded width). */
39
+ export declare const GEM_WIDTH: number;
40
+ /** The gem's styled Nth row, or null if out of range — for compositing beside other columns. */
41
+ export declare function gemRow(i: number): string | null;
42
+ export interface BannerInfo {
43
+ version: string;
44
+ title?: string;
45
+ model?: string;
46
+ provider?: string;
47
+ language?: string;
48
+ mode?: string;
49
+ cwd?: string;
50
+ extras?: string[];
51
+ }
52
+ /** Clear the screen and move the cursor to the top-left (home). */
53
+ export declare function clearToTop(): void;
54
+ /**
55
+ * The banner's fully-styled lines, one string per terminal row:
56
+ * - Brilliant-cut gem centered above the wordmark, each row faceted
57
+ * left-bright / mid / shadow (light hits from the top-left).
58
+ * - LOGO text gets a left-bright / right-shadow treatment.
59
+ * - Session metadata (version, provider/model, cwd, tagline) below.
60
+ * Exposed separately from renderBanner() so the TUI can keep a copy and
61
+ * repaint the banner itself when it rebuilds the screen (e.g. returning
62
+ * from scroll mode) — the alt screen has no scrollback to recover it from.
63
+ */
64
+ export declare function buildBannerLines(info: BannerInfo): string[];
65
+ /** Render the banner pinned to the top of a cleared screen, so it reads like a real app header, not scrollback. */
66
+ export declare function renderBanner(info: BannerInfo): void;
67
+ /** Standalone diamond (no logo, no info column) — splash contexts. */
1
68
  export declare function renderDiamond(): void;