@orbit-intelligence/orbit-agent 0.3.12

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 (80) hide show
  1. package/LICENSE +16 -0
  2. package/README.md +23 -0
  3. package/bin/orbit +26 -0
  4. package/dist/prompts/system.js +80 -0
  5. package/dist/src/cli/args.js +145 -0
  6. package/dist/src/cli/orchestrate.js +100 -0
  7. package/dist/src/cli/run.js +393 -0
  8. package/dist/src/config/config-schema.js +151 -0
  9. package/dist/src/config/index.js +57 -0
  10. package/dist/src/core/agent/agent-loop.js +402 -0
  11. package/dist/src/core/agents/delegate.js +120 -0
  12. package/dist/src/core/agents/orchestrator.js +58 -0
  13. package/dist/src/core/agents/prompts.js +82 -0
  14. package/dist/src/core/agents/types.js +1 -0
  15. package/dist/src/core/context/context-manager.js +167 -0
  16. package/dist/src/core/events.js +23 -0
  17. package/dist/src/core/llm/http.js +207 -0
  18. package/dist/src/core/llm/index.js +93 -0
  19. package/dist/src/core/llm/models.js +228 -0
  20. package/dist/src/core/llm/providers/gemini.js +211 -0
  21. package/dist/src/core/llm/providers/openai-compat.js +31 -0
  22. package/dist/src/core/llm/router.js +125 -0
  23. package/dist/src/core/llm/secrets.js +121 -0
  24. package/dist/src/core/llm/types.js +10 -0
  25. package/dist/src/core/orchestration/dispatcher.js +74 -0
  26. package/dist/src/core/orchestration/messenger.js +139 -0
  27. package/dist/src/core/orchestration/roles.js +129 -0
  28. package/dist/src/core/orchestration/runtime.js +122 -0
  29. package/dist/src/core/orchestration/session.js +204 -0
  30. package/dist/src/core/orchestration/shared-context.js +88 -0
  31. package/dist/src/core/orchestration/tools.js +187 -0
  32. package/dist/src/core/orchestration/types.js +3 -0
  33. package/dist/src/core/permissions/index.js +58 -0
  34. package/dist/src/core/project-context.js +115 -0
  35. package/dist/src/core/skill-loader.js +31 -0
  36. package/dist/src/core/tools/edit.js +142 -0
  37. package/dist/src/core/tools/filesystem.js +203 -0
  38. package/dist/src/core/tools/git.js +138 -0
  39. package/dist/src/core/tools/registry.js +73 -0
  40. package/dist/src/core/tools/search.js +90 -0
  41. package/dist/src/core/tools/shell.js +65 -0
  42. package/dist/src/core/tools/types.js +6 -0
  43. package/dist/src/core/types.js +3 -0
  44. package/dist/src/index.js +11 -0
  45. package/dist/src/session/event-log.js +55 -0
  46. package/dist/src/session/store.js +76 -0
  47. package/dist/src/setup/wizard.js +401 -0
  48. package/dist/src/tui/InkApp.js +67 -0
  49. package/dist/src/tui/ansi.js +142 -0
  50. package/dist/src/tui/app.js +768 -0
  51. package/dist/src/tui/colors.js +13 -0
  52. package/dist/src/tui/components/AgentDock.js +46 -0
  53. package/dist/src/tui/components/Composer.js +35 -0
  54. package/dist/src/tui/components/Header.js +23 -0
  55. package/dist/src/tui/components/ModelPicker.js +23 -0
  56. package/dist/src/tui/components/PermissionModal.js +29 -0
  57. package/dist/src/tui/components/SlashMenu.js +15 -0
  58. package/dist/src/tui/components/StatusLine.js +27 -0
  59. package/dist/src/tui/components/Transcript.js +31 -0
  60. package/dist/src/tui/components/WorkingStatus.js +29 -0
  61. package/dist/src/tui/components/input.js +246 -0
  62. package/dist/src/tui/components/markdown.js +384 -0
  63. package/dist/src/tui/components/message.js +105 -0
  64. package/dist/src/tui/context.js +8 -0
  65. package/dist/src/tui/geometry.js +40 -0
  66. package/dist/src/tui/renderer.js +116 -0
  67. package/dist/src/tui/rows.js +247 -0
  68. package/dist/src/tui/scheduler.js +32 -0
  69. package/dist/src/tui/store.js +127 -0
  70. package/dist/src/tui/style.js +151 -0
  71. package/dist/src/tui/term.js +309 -0
  72. package/dist/src/tui/text.js +104 -0
  73. package/dist/src/tui/themes/index.js +15 -0
  74. package/dist/src/tui/themes/palettes.js +137 -0
  75. package/dist/src/tui/themes/types.js +1 -0
  76. package/dist/src/utils/diff.js +161 -0
  77. package/dist/src/utils/platform.js +71 -0
  78. package/dist/src/utils/signals.js +26 -0
  79. package/dist/src/version.js +4 -0
  80. package/package.json +71 -0
@@ -0,0 +1,309 @@
1
+ /**
2
+ * Low-level terminal handling: raw mode, ANSI key parser, bracketed paste,
3
+ * resize, alt-screen, and basic escape sequences.
4
+ *
5
+ * Uses no native deps; Termux-compatible.
6
+ */
7
+ import { createInterface } from 'node:readline';
8
+ import process from 'node:process';
9
+ let rawModeOn = false;
10
+ let rlInterface = null;
11
+ let rlPaused = false;
12
+ const keyListeners = new Set();
13
+ const resizeListeners = new Set();
14
+ let _termSize = [process.stdout.columns || 80, process.stdout.rows || 24];
15
+ let keyBuffer = '';
16
+ let pasteBuffer = '';
17
+ let inPaste = false;
18
+ let escapeTimer = null;
19
+ // ---------------------------------------------------------------------------
20
+ // Resize
21
+ // ---------------------------------------------------------------------------
22
+ function handleResize() {
23
+ _termSize = [process.stdout.columns || 80, process.stdout.rows || 24];
24
+ for (const l of resizeListeners)
25
+ l();
26
+ }
27
+ // ---------------------------------------------------------------------------
28
+ // Raw mode
29
+ // ---------------------------------------------------------------------------
30
+ export function setup() {
31
+ if (rawModeOn)
32
+ return;
33
+ rawModeOn = true;
34
+ // Save state
35
+ if (process.stdin.isTTY)
36
+ process.stdin.setRawMode(true);
37
+ process.stdout.write('\x1b[?1049h'); // enter alt screen
38
+ process.stdout.write('\x1b[?25l'); // hide cursor
39
+ process.stdout.write('\x1b[?2004h'); // bracketed paste on
40
+ process.stdout.write('\x1b[?7l'); // disable line wrapping
41
+ process.stdout.write('\x1b[?12h'); // blinking cursor off
42
+ _termSize = [process.stdout.columns || 80, process.stdout.rows || 24];
43
+ process.stdin.resume();
44
+ rlInterface = createInterface({ input: process.stdin, terminal: true });
45
+ rlInterface.on('line', () => { }); // drain
46
+ process.stdin.on('data', onData);
47
+ process.on('SIGWINCH', handleResize);
48
+ }
49
+ export function teardown() {
50
+ if (!rawModeOn)
51
+ return;
52
+ rawModeOn = false;
53
+ if (escapeTimer) {
54
+ clearTimeout(escapeTimer);
55
+ escapeTimer = null;
56
+ }
57
+ process.stdout.write('\x1b[?2004l'); // bracketed paste off
58
+ process.stdout.write('\x1b[?25h'); // show cursor
59
+ process.stdout.write('\x1b[?1049l'); // alt screen off
60
+ process.stdout.write('\x1b[?7h'); // re-enable line wrapping
61
+ process.stdout.write('\x1b[?12l'); // blinking cursor normal
62
+ if (rlInterface) {
63
+ rlInterface.close();
64
+ rlInterface = null;
65
+ }
66
+ if (process.stdin.isTTY)
67
+ process.stdin.setRawMode(false);
68
+ process.stdin.pause();
69
+ process.stdin.removeListener('data', onData);
70
+ process.removeListener('SIGWINCH', handleResize);
71
+ }
72
+ export function onKey(cb) {
73
+ keyListeners.add(cb);
74
+ return () => { keyListeners.delete(cb); };
75
+ }
76
+ export function onResize(cb) {
77
+ resizeListeners.add(cb);
78
+ return () => { resizeListeners.delete(cb); };
79
+ }
80
+ export function termSize() {
81
+ return _termSize;
82
+ }
83
+ export function columns() { return _termSize[0]; }
84
+ export function rows() { return _termSize[1]; }
85
+ // ---------------------------------------------------------------------------
86
+ // Output helpers
87
+ // ---------------------------------------------------------------------------
88
+ export function write(s) {
89
+ process.stdout.write(s);
90
+ }
91
+ export function writeRaw(bytes) {
92
+ process.stdout.write(bytes);
93
+ }
94
+ export function moveCursorTo(col, row) {
95
+ process.stdout.write(`\x1b[${row + 1};${col + 1}H`);
96
+ }
97
+ export function hideCursor() { process.stdout.write('\x1b[?25l'); }
98
+ export function showCursor() { process.stdout.write('\x1b[?25h'); }
99
+ export function eraseLine() { process.stdout.write('\x1b[2K'); }
100
+ export function eraseBelow() { process.stdout.write('\x1b[J'); }
101
+ export function eraseAbove() { process.stdout.write('\x1b[1J'); }
102
+ export function eraseRegion(col, row, len) {
103
+ moveCursorTo(col, row);
104
+ process.stdout.write('\x1b[2K');
105
+ moveCursorTo(col, row);
106
+ process.stdout.write(' '.repeat(len));
107
+ moveCursorTo(col, row);
108
+ }
109
+ export function saveCursor() { process.stdout.write('\x1b[s'); }
110
+ export function restoreCursor() { process.stdout.write('\x1b[u'); }
111
+ export function alternateScreen() {
112
+ process.stdout.write('\x1b[?1049h');
113
+ }
114
+ export function mainScreen() {
115
+ process.stdout.write('\x1b[?1049l');
116
+ }
117
+ export function setScrollRegion(top, bottom) {
118
+ // top and bottom are 1-indexed row numbers.
119
+ process.stdout.write(`\x1b[${top};${bottom}r`);
120
+ }
121
+ export function clearScrollRegion() {
122
+ process.stdout.write('\x1b[r');
123
+ }
124
+ export function scrollUp(lines) {
125
+ process.stdout.write(`\x1b[${lines}S`);
126
+ }
127
+ export function scrollDown(lines) {
128
+ process.stdout.write(`\x1b[${lines}T`);
129
+ }
130
+ export function setRgbColor(fg, bg) {
131
+ if (fg)
132
+ process.stdout.write(fg);
133
+ if (bg)
134
+ process.stdout.write(bg);
135
+ }
136
+ export function resetColor() {
137
+ process.stdout.write('\x1b[0m');
138
+ }
139
+ // ---------------------------------------------------------------------------
140
+ // Key parser
141
+ // ---------------------------------------------------------------------------
142
+ function onData(data) {
143
+ keyBuffer += data.toString('utf8');
144
+ let changed = true;
145
+ while (changed) {
146
+ changed = false;
147
+ const result = tryParseKey(keyBuffer);
148
+ if (result.consumed > 0) {
149
+ keyBuffer = keyBuffer.slice(result.consumed);
150
+ changed = true;
151
+ if (result.key)
152
+ emitKey(result.key);
153
+ }
154
+ }
155
+ if (escapeTimer && keyBuffer !== '\x1b') {
156
+ // The leading ESC got consumed as part of a sequence; drop any pending
157
+ // lone-ESC timer.
158
+ clearTimeout(escapeTimer);
159
+ escapeTimer = null;
160
+ }
161
+ }
162
+ function tryParseKey(buf) {
163
+ if (buf.length === 0)
164
+ return { consumed: 0, key: null };
165
+ // Start bracketed paste
166
+ if (buf.startsWith('\x1b[200~')) {
167
+ inPaste = true;
168
+ pasteBuffer = '';
169
+ return { consumed: 6, key: null };
170
+ }
171
+ // End bracketed paste
172
+ if (inPaste) {
173
+ const end = buf.indexOf('\x1b[201~');
174
+ if (end === -1) {
175
+ // accumulate — don't emit yet
176
+ return { consumed: buf.length, key: null };
177
+ }
178
+ const text = buf.slice(0, end);
179
+ inPaste = false;
180
+ pasteBuffer = '';
181
+ return { consumed: end + 5, key: { name: 'paste', value: text, raw: text, paste: true } };
182
+ }
183
+ if (buf.startsWith('\x1b')) {
184
+ return tryParseEscape(buf);
185
+ }
186
+ // Control character (byte < 0x20 except ESC)
187
+ const c = buf.charCodeAt(0);
188
+ if (c < 0x20) {
189
+ return tryParseControl(buf);
190
+ }
191
+ // Printable character
192
+ const ch = buf[0];
193
+ return { consumed: 1, key: { name: 'char', value: ch, raw: ch } };
194
+ }
195
+ function tryParseEscape(buf) {
196
+ if (buf === '\x1b') {
197
+ // A bare ESC is ambiguous until more bytes arrive (it could be the prefix
198
+ // of a CSI/OSC sequence). Wait a beat; if nothing follows, treat it as the
199
+ // Escape key.
200
+ scheduleEscape();
201
+ return { consumed: 0, key: null }; // partial
202
+ }
203
+ const c2 = buf[1] ?? '';
204
+ if (c2 === 'O') {
205
+ // ESC O x
206
+ if (buf.length < 3)
207
+ return { consumed: 0, key: null };
208
+ const x = buf[2];
209
+ const map = { H: 'home', F: 'end', P: 'f1', Q: 'f2', R: 'f3', S: 'f4' };
210
+ if (map[x])
211
+ return { consumed: 3, key: { name: map[x], value: '', raw: buf.slice(0, 3) } };
212
+ return { consumed: 3, key: { name: 'char', value: buf.slice(2, 3), raw: buf.slice(0, 3) } };
213
+ }
214
+ if (c2 === '[') {
215
+ if (buf.length < 3)
216
+ return { consumed: 0, key: null };
217
+ const third = buf[2];
218
+ // Sequence: ESC [ <params> <final>
219
+ let endIdx = 2;
220
+ while (endIdx < buf.length && (buf.charCodeAt(endIdx) >= 0x30 && buf.charCodeAt(endIdx) <= 0x3f))
221
+ endIdx++;
222
+ if (endIdx >= buf.length)
223
+ return { consumed: 0, key: null }; // partial params
224
+ const final = buf[endIdx];
225
+ const params = buf.slice(3, endIdx);
226
+ return { consumed: endIdx + 1, key: mapCSI(params, final, buf.slice(0, endIdx + 1)) };
227
+ }
228
+ // Alt + char
229
+ const ch = buf[1];
230
+ return { consumed: 2, key: { name: 'alt-' + ch, value: ch, raw: buf.slice(0, 2) } };
231
+ }
232
+ function mapCSI(params, final, raw) {
233
+ const num = parseInt(params, 10) || 0;
234
+ switch (final) {
235
+ case 'A': return { name: 'up', value: '', raw };
236
+ case 'B': return { name: 'down', value: '', raw };
237
+ case 'C': return { name: 'right', value: '', raw };
238
+ case 'D': return { name: 'left', value: '', raw };
239
+ case 'H': return { name: 'home', value: '', raw };
240
+ case 'F': return { name: 'end', value: '', raw };
241
+ case 'Z': return { name: 'shift-tab', value: '', raw };
242
+ case '~': {
243
+ const map = { 1: 'home', 2: 'insert', 3: 'delete', 4: 'end', 5: 'pageup', 6: 'pagedown' };
244
+ return { name: map[num] ?? 'unknown-' + num, value: '', raw };
245
+ }
246
+ case 'C': return { name: 'right', value: '', raw };
247
+ case 'D': return { name: 'left', value: '', raw };
248
+ case 'M': {
249
+ // mouse — ignore for now
250
+ return { name: 'mouse', value: '', raw };
251
+ }
252
+ default:
253
+ if (params.startsWith('1;5')) {
254
+ const ctrlMap = { C: 'ctrl-right', D: 'ctrl-left', H: 'ctrl-home', F: 'ctrl-end' };
255
+ return { name: ctrlMap[final] ?? 'ctrl-' + final, value: '', raw };
256
+ }
257
+ if (params.startsWith('27;')) {
258
+ // ESC [ 27;mod;code ~ — virtual keys (Shift+Enter etc)
259
+ const parts = params.split(';');
260
+ const code = parseInt(parts[2] ?? '', 10);
261
+ if (code === 13)
262
+ return { name: 'enter', value: '', raw };
263
+ }
264
+ return { name: 'unknown', value: final, raw };
265
+ }
266
+ }
267
+ function tryParseControl(buf) {
268
+ const c = buf.charCodeAt(0);
269
+ if (c === 0x0a || c === 0x0d || c === 0x24) {
270
+ return { consumed: 1, key: { name: 'enter', value: '', raw: buf.slice(0, 1) } };
271
+ }
272
+ if (c === 0x03)
273
+ return { consumed: 1, key: { name: 'ctrl-c', value: '', raw: '\x03' } };
274
+ if (c === 0x04)
275
+ return { consumed: 1, key: { name: 'ctrl-d', value: '', raw: '\x04' } };
276
+ if (c === 0x08 || c === 0x7f)
277
+ return { consumed: 1, key: { name: 'backspace', value: '', raw: buf.slice(0, 1) } };
278
+ if (c === 0x09)
279
+ return { consumed: 1, key: { name: 'tab', value: '', raw: '\t' } };
280
+ if (c === 0x1b)
281
+ return tryParseEscape(buf);
282
+ if (c >= 0x01 && c <= 0x1a) {
283
+ // map a-z control
284
+ const letter = String.fromCharCode(0x60 + c);
285
+ return { consumed: 1, key: { name: 'ctrl-' + letter, value: '', raw: buf.slice(0, 1) } };
286
+ }
287
+ return { consumed: 1, key: { name: 'char', value: buf[0], raw: buf.slice(0, 1) } };
288
+ }
289
+ function emitKey(key) {
290
+ for (const l of keyListeners)
291
+ l(key);
292
+ }
293
+ function scheduleEscape() {
294
+ if (escapeTimer)
295
+ return;
296
+ escapeTimer = setTimeout(() => {
297
+ escapeTimer = null;
298
+ if (keyBuffer === '\x1b') {
299
+ keyBuffer = '';
300
+ emitKey({ name: 'escape', value: '', raw: '\x1b' });
301
+ }
302
+ }, 45);
303
+ }
304
+ export function flushKeyBuffer() {
305
+ if (keyBuffer.length > 0) {
306
+ emitKey({ name: 'char', value: keyBuffer, raw: keyBuffer });
307
+ keyBuffer = '';
308
+ }
309
+ }
@@ -0,0 +1,104 @@
1
+ import stringWidth from 'string-width';
2
+ import stripAnsi from 'strip-ansi';
3
+ /**
4
+ * ANSI-aware text math helpers used across the UI.
5
+ */
6
+ export { stringWidth };
7
+ export function width(s) {
8
+ return stringWidth(s);
9
+ }
10
+ export function strip(s) {
11
+ return stripAnsi(s);
12
+ }
13
+ /**
14
+ * Word-wrap plain or ANSI text to a given width, splitting long words.
15
+ * Returns an array of visual lines (each within `width` columns).
16
+ */
17
+ export function wrapText(text, maxWidth) {
18
+ if (maxWidth <= 0)
19
+ return [''];
20
+ const lines = [];
21
+ for (const rawLine of text.split('\n')) {
22
+ if (width(rawLine) <= maxWidth) {
23
+ lines.push(rawLine);
24
+ continue;
25
+ }
26
+ const words = rawLine.split(/(\s+)/);
27
+ let current = '';
28
+ for (const word of words) {
29
+ const proposed = current === '' ? word : current + word;
30
+ if (width(proposed) <= maxWidth) {
31
+ current = proposed;
32
+ continue;
33
+ }
34
+ if (current !== '') {
35
+ lines.push(current);
36
+ current = '';
37
+ }
38
+ // break the word itself if too long
39
+ if (width(word) > maxWidth) {
40
+ let chunk = '';
41
+ for (const char of Array.from(word)) {
42
+ if (width(chunk + char) > maxWidth) {
43
+ lines.push(chunk);
44
+ chunk = char;
45
+ }
46
+ else {
47
+ chunk += char;
48
+ }
49
+ }
50
+ current = chunk;
51
+ }
52
+ else {
53
+ current = word;
54
+ }
55
+ }
56
+ lines.push(current);
57
+ }
58
+ return lines;
59
+ }
60
+ /**
61
+ * Truncate to a visual width, appending an ellipsis marker when cut.
62
+ * ANSI sequences in input are preserved (kept at the edges of the result).
63
+ */
64
+ export function truncate(text, maxWidth, marker = '…') {
65
+ if (maxWidth <= 0)
66
+ return marker;
67
+ const raw = strip(text);
68
+ if (stringWidth(raw) <= maxWidth)
69
+ return text;
70
+ // Truncate the raw string, then re-apply leading ANSI styles from the input.
71
+ const ansiPrefix = text.match(/^\x1b\[[0-9;]*m/)?.[0] ?? '';
72
+ const tail = marker;
73
+ const bodyWidth = Math.max(0, maxWidth - stringWidth(tail));
74
+ let out = '';
75
+ const chars = Array.from(raw);
76
+ for (const ch of chars) {
77
+ if (stringWidth(out) + stringWidth(ch) > bodyWidth)
78
+ break;
79
+ out += ch;
80
+ }
81
+ return `${ansiPrefix}${out}${tail}`;
82
+ }
83
+ /** Pad a string (visually) so the styled text occupies exactly `width` cols. */
84
+ export function padRight(s, totalWidth, fill = ' ') {
85
+ const w = stringWidth(strip(s));
86
+ const pad = Math.max(0, totalWidth - w);
87
+ return s + fill.repeat(pad);
88
+ }
89
+ /** Measure a string but map it to a character-index-safe cursor offset. */
90
+ export function indexAtWidth(text, targetWidth) {
91
+ let w = 0;
92
+ let i = 0;
93
+ for (const ch of Array.from(text)) {
94
+ if (w + stringWidth(ch) > targetWidth)
95
+ break;
96
+ w += stringWidth(ch);
97
+ i += ch.length;
98
+ }
99
+ return i;
100
+ }
101
+ /** Count visible characters before (and including) a byte index. */
102
+ export function visibleLength(text) {
103
+ return stringWidth(strip(text));
104
+ }
@@ -0,0 +1,15 @@
1
+ import { PALETTES } from './palettes.js';
2
+ import { buildTheme, rgbToInt } from '../style.js';
3
+ export { PALETTES, buildTheme, rgbToInt };
4
+ export const THEME_NAMES = [
5
+ 'tokyonight',
6
+ 'catppuccin-mocha',
7
+ 'catppuccin-latte',
8
+ 'nord',
9
+ 'gruvbox',
10
+ 'monokai',
11
+ 'clean-dark',
12
+ ];
13
+ export function makeTheme(name) {
14
+ return buildTheme(name);
15
+ }
@@ -0,0 +1,137 @@
1
+ import { rgbToInt } from '../style.js';
2
+ const c = rgbToInt;
3
+ export const PALETTES = {
4
+ tokyonight: {
5
+ bg: c(26, 27, 38),
6
+ text: c(192, 202, 245),
7
+ muted: c(86, 95, 137),
8
+ dim: c(59, 66, 97),
9
+ accent: c(122, 162, 247),
10
+ secondary: c(187, 154, 247),
11
+ success: c(158, 206, 106),
12
+ warning: c(224, 175, 104),
13
+ danger: c(247, 118, 142),
14
+ info: c(125, 207, 255),
15
+ border: c(47, 52, 87),
16
+ borderBright: c(59, 66, 97),
17
+ selection: c(51, 70, 124),
18
+ codeBg: c(22, 22, 30),
19
+ codeText: c(169, 177, 214),
20
+ prompt: c(122, 162, 247),
21
+ line: c(86, 95, 137),
22
+ },
23
+ 'catppuccin-mocha': {
24
+ bg: c(30, 30, 46),
25
+ text: c(205, 214, 244),
26
+ muted: c(127, 132, 156),
27
+ dim: c(49, 50, 68),
28
+ accent: c(137, 180, 250),
29
+ secondary: c(203, 166, 247),
30
+ success: c(166, 227, 161),
31
+ warning: c(249, 226, 175),
32
+ danger: c(243, 139, 168),
33
+ info: c(137, 220, 235),
34
+ border: c(49, 50, 68),
35
+ borderBright: c(69, 71, 90),
36
+ selection: c(69, 71, 90),
37
+ codeBg: c(24, 24, 37),
38
+ codeText: c(166, 173, 200),
39
+ prompt: c(137, 180, 250),
40
+ line: c(127, 132, 156),
41
+ },
42
+ 'catppuccin-latte': {
43
+ bg: c(239, 241, 245),
44
+ text: c(76, 79, 105),
45
+ muted: c(156, 160, 176),
46
+ dim: c(204, 208, 218),
47
+ accent: c(30, 102, 245),
48
+ secondary: c(136, 57, 239),
49
+ success: c(64, 160, 43),
50
+ warning: c(223, 142, 29),
51
+ danger: c(210, 15, 57),
52
+ info: c(4, 165, 229),
53
+ border: c(204, 208, 218),
54
+ borderBright: c(188, 192, 204),
55
+ selection: c(183, 189, 242),
56
+ codeBg: c(230, 233, 239),
57
+ codeText: c(108, 111, 133),
58
+ prompt: c(30, 102, 245),
59
+ line: c(156, 160, 176),
60
+ },
61
+ nord: {
62
+ bg: c(46, 52, 64),
63
+ text: c(216, 222, 233),
64
+ muted: c(97, 110, 136),
65
+ dim: c(59, 66, 82),
66
+ accent: c(136, 192, 208),
67
+ secondary: c(180, 142, 173),
68
+ success: c(163, 190, 140),
69
+ warning: c(235, 203, 139),
70
+ danger: c(191, 97, 106),
71
+ info: c(129, 161, 193),
72
+ border: c(67, 76, 94),
73
+ borderBright: c(76, 86, 106),
74
+ selection: c(67, 76, 94),
75
+ codeBg: c(43, 48, 64),
76
+ codeText: c(229, 233, 240),
77
+ prompt: c(136, 192, 208),
78
+ line: c(76, 86, 106),
79
+ },
80
+ gruvbox: {
81
+ bg: c(40, 40, 40),
82
+ text: c(235, 219, 178),
83
+ muted: c(146, 131, 116),
84
+ dim: c(60, 56, 54),
85
+ accent: c(131, 165, 152),
86
+ secondary: c(211, 134, 155),
87
+ success: c(184, 187, 38),
88
+ warning: c(250, 189, 47),
89
+ danger: c(251, 73, 52),
90
+ info: c(142, 192, 124),
91
+ border: c(60, 56, 54),
92
+ borderBright: c(80, 73, 69),
93
+ selection: c(80, 73, 69),
94
+ codeBg: c(29, 32, 33),
95
+ codeText: c(235, 219, 178),
96
+ prompt: c(131, 165, 152),
97
+ line: c(146, 131, 116),
98
+ },
99
+ monokai: {
100
+ bg: c(39, 40, 34),
101
+ text: c(248, 248, 242),
102
+ muted: c(117, 113, 94),
103
+ dim: c(62, 61, 50),
104
+ accent: c(102, 217, 239),
105
+ secondary: c(174, 129, 255),
106
+ success: c(166, 226, 46),
107
+ warning: c(230, 219, 116),
108
+ danger: c(249, 38, 114),
109
+ info: c(161, 239, 228),
110
+ border: c(62, 61, 50),
111
+ borderBright: c(74, 74, 61),
112
+ selection: c(73, 72, 62),
113
+ codeBg: c(30, 31, 28),
114
+ codeText: c(248, 248, 242),
115
+ prompt: c(102, 217, 239),
116
+ line: c(117, 113, 94),
117
+ },
118
+ 'clean-dark': {
119
+ bg: c(11, 12, 15),
120
+ text: c(218, 218, 220),
121
+ muted: c(92, 99, 112),
122
+ dim: c(26, 29, 36),
123
+ accent: c(90, 162, 255),
124
+ secondary: c(178, 136, 247),
125
+ success: c(47, 212, 124),
126
+ warning: c(242, 181, 68),
127
+ danger: c(255, 84, 112),
128
+ info: c(62, 198, 224),
129
+ border: c(25, 28, 35),
130
+ borderBright: c(38, 43, 54),
131
+ selection: c(29, 58, 95),
132
+ codeBg: c(15, 17, 22),
133
+ codeText: c(201, 204, 212),
134
+ prompt: c(90, 162, 255),
135
+ line: c(56, 63, 76),
136
+ },
137
+ };
@@ -0,0 +1 @@
1
+ export {};