@copado/agentia-cli 0.117.0-alpha.0 → 0.119.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/README.md +225 -294
  2. package/dist/commands/cicd/notification/configure.d.ts +1 -1
  3. package/dist/commands/cicd/work/deployment-step/create.d.ts +1 -1
  4. package/dist/commands/testing/build/run.d.ts +2 -2
  5. package/dist/commands/testing/data-table/create.d.ts +1 -1
  6. package/dist/commands/testing/data-table/update.d.ts +1 -1
  7. package/dist/commands/testing/job/create.d.ts +1 -1
  8. package/dist/commands/testing/job/schedule/set.d.ts +1 -1
  9. package/dist/commands/testing/job/update.d.ts +1 -1
  10. package/dist/commands/testing/robot/update.d.ts +1 -1
  11. package/dist/commands/testing/run.d.ts +2 -2
  12. package/dist/commands/testing/test/run.d.ts +2 -2
  13. package/dist/lib/ai-chat-session.d.ts +0 -3
  14. package/dist/lib/ai-chat-session.js +66 -182
  15. package/dist/lib/ai-chat-session.js.map +1 -1
  16. package/dist/lib/ai-gateway.d.ts +1 -8
  17. package/dist/lib/ai-gateway.js +2 -34
  18. package/dist/lib/ai-gateway.js.map +1 -1
  19. package/dist/lib/ai-types.d.ts +0 -18
  20. package/dist/lib/ai-types.js +1 -45
  21. package/dist/lib/ai-types.js.map +1 -1
  22. package/dist/lib/cicd-gateway.d.ts +1 -0
  23. package/dist/lib/cicd-gateway.js +14 -1
  24. package/dist/lib/cicd-gateway.js.map +1 -1
  25. package/dist/lib/format.d.ts +0 -2
  26. package/dist/lib/format.js +2 -5
  27. package/dist/lib/format.js.map +1 -1
  28. package/dist/lib/mcp/tools.d.ts +2 -2
  29. package/dist/lib/testing-data-command.d.ts +1 -1
  30. package/dist/lib/testing-flags.d.ts +2 -2
  31. package/oclif.manifest.json +458 -609
  32. package/package.json +1 -10
  33. package/templates/skills/agentia-ai/SKILL.md +5 -5
  34. package/templates/skills/agentia-ai/references/ai-agents.md +3 -18
  35. package/dist/commands/ai/session/list.d.ts +0 -14
  36. package/dist/commands/ai/session/list.js +0 -46
  37. package/dist/commands/ai/session/list.js.map +0 -1
  38. package/dist/commands/ai/session/start.d.ts +0 -17
  39. package/dist/commands/ai/session/start.js +0 -60
  40. package/dist/commands/ai/session/start.js.map +0 -1
  41. package/dist/lib/ai-session-banner.d.ts +0 -5
  42. package/dist/lib/ai-session-banner.js +0 -20
  43. package/dist/lib/ai-session-banner.js.map +0 -1
  44. package/dist/lib/ai-session-tui-blocks.d.ts +0 -9
  45. package/dist/lib/ai-session-tui-blocks.js +0 -36
  46. package/dist/lib/ai-session-tui-blocks.js.map +0 -1
  47. package/dist/lib/ai-session-tui-clipboard.d.ts +0 -22
  48. package/dist/lib/ai-session-tui-clipboard.js +0 -78
  49. package/dist/lib/ai-session-tui-clipboard.js.map +0 -1
  50. package/dist/lib/ai-session-tui-composer.d.ts +0 -35
  51. package/dist/lib/ai-session-tui-composer.js +0 -96
  52. package/dist/lib/ai-session-tui-composer.js.map +0 -1
  53. package/dist/lib/ai-session-tui-highlight.d.ts +0 -11
  54. package/dist/lib/ai-session-tui-highlight.js +0 -310
  55. package/dist/lib/ai-session-tui-highlight.js.map +0 -1
  56. package/dist/lib/ai-session-tui-keys.d.ts +0 -42
  57. package/dist/lib/ai-session-tui-keys.js +0 -159
  58. package/dist/lib/ai-session-tui-keys.js.map +0 -1
  59. package/dist/lib/ai-session-tui-mermaid-image.d.ts +0 -43
  60. package/dist/lib/ai-session-tui-mermaid-image.js +0 -444
  61. package/dist/lib/ai-session-tui-mermaid-image.js.map +0 -1
  62. package/dist/lib/ai-session-tui-mermaid-paint.d.ts +0 -3
  63. package/dist/lib/ai-session-tui-mermaid-paint.js +0 -182
  64. package/dist/lib/ai-session-tui-mermaid-paint.js.map +0 -1
  65. package/dist/lib/ai-session-tui-mermaid.d.ts +0 -19
  66. package/dist/lib/ai-session-tui-mermaid.js +0 -158
  67. package/dist/lib/ai-session-tui-mermaid.js.map +0 -1
  68. package/dist/lib/ai-session-tui-message.d.ts +0 -9
  69. package/dist/lib/ai-session-tui-message.js +0 -24
  70. package/dist/lib/ai-session-tui-message.js.map +0 -1
  71. package/dist/lib/ai-session-tui-scroll.d.ts +0 -32
  72. package/dist/lib/ai-session-tui-scroll.js +0 -148
  73. package/dist/lib/ai-session-tui-scroll.js.map +0 -1
  74. package/dist/lib/ai-session-tui-slash.d.ts +0 -14
  75. package/dist/lib/ai-session-tui-slash.js +0 -53
  76. package/dist/lib/ai-session-tui-slash.js.map +0 -1
  77. package/dist/lib/ai-session-tui-welcome.d.ts +0 -12
  78. package/dist/lib/ai-session-tui-welcome.js +0 -33
  79. package/dist/lib/ai-session-tui-welcome.js.map +0 -1
  80. package/dist/lib/ai-session-tui-wrap.d.ts +0 -2
  81. package/dist/lib/ai-session-tui-wrap.js +0 -24
  82. package/dist/lib/ai-session-tui-wrap.js.map +0 -1
  83. package/dist/lib/ai-session-tui.d.ts +0 -7
  84. package/dist/lib/ai-session-tui.js +0 -859
  85. package/dist/lib/ai-session-tui.js.map +0 -1
  86. package/dist/lib/ai-sessions.d.ts +0 -17
  87. package/dist/lib/ai-sessions.js +0 -142
  88. package/dist/lib/ai-sessions.js.map +0 -1
@@ -1,444 +0,0 @@
1
- /* eslint-disable no-bitwise -- Kitty image ids and FNV hashes are 24-bit packed integers. */
2
- import { Resvg } from '@resvg/resvg-js';
3
- import { renderMermaidSVG } from 'beautiful-mermaid';
4
- const MAX_CACHE = 24;
5
- const MAX_MERMAID_SOURCE = 16_384;
6
- const MAX_PNG_BYTES = 512_000;
7
- const MAX_IMAGE_ROWS = 36;
8
- const MAX_IMAGE_COLS = 200;
9
- const CELL_WIDTH_PX = 12;
10
- const CELL_HEIGHT_PX = 24;
11
- const KITTY_CHUNK = 4096;
12
- const PLACEHOLDER = '\u{10EEEE}';
13
- const SLOT = '\uE000';
14
- const FNV_OFFSET = 2_166_136_261;
15
- const FNV_PRIME = 16_777_619;
16
- const RGB24 = 16_777_215;
17
- /** Dark flowchart colors close to filled-node terminal renderers (Kitty/iTerm). */
18
- export const MERMAID_IMAGE_THEME = {
19
- accent: '#6cb6ff',
20
- bg: '#0d1117',
21
- border: '#3d6d99',
22
- fg: '#e6edf3',
23
- font: 'Helvetica',
24
- line: '#6cb6ff',
25
- muted: '#8b9cb3',
26
- surface: '#1b3a5f',
27
- };
28
- /**
29
- * Kitty row/column diacritics (Unicode 6 NSM set). Index `i` → code point.
30
- * Source: kitty `gen/rowcolumn-diacritics.txt`.
31
- */
32
- const ROWCOLUMN_DIACRITICS = '305,30d,30e,310,312,33d,33e,33f,346,34a,34b,34c,350,351,352,357,35b,363,364,365,366,367,368,369,36a,36b,36c,36d,36e,36f,483,484,485,486,487,592,593,594,595,597,598,599,59c,59d,59e,59f,5a0,5a1,5a8,5a9,5ab,5ac,5af,5c4,610,611,612,613,614,615,616,617,657,658,659,65a,65b,65d,65e,6d6,6d7,6d8,6d9,6da,6db,6dc,6df,6e0,6e1,6e2,6e4,6e7,6e8,6eb,6ec,730,732,733,735,736,73a,73d,73f,740,741,743,745,747,749,74a,7eb,7ec,7ed,7ee,7ef,7f0,7f1,7f3,816,817,818,819,81b,81c,81d,81e,81f,820,821,822,823,825,826,827,829,82a,82b,82c,82d,951,953,954,f82,f83,f86,f87,135d,135e,135f,17dd,193a,1a17,1a75,1a76,1a77,1a78,1a79,1a7a,1a7b,1a7c,1b6b,1b6d,1b6e,1b6f,1b70,1b71,1b72,1b73,1cd0,1cd1,1cd2,1cda,1cdb,1ce0,1dc0,1dc1,1dc3,1dc4,1dc5,1dc6,1dc7,1dc8,1dc9,1dcb,1dcc,1dd1,1dd2,1dd3,1dd4,1dd5,1dd6,1dd7,1dd8,1dd9,1dda,1ddb,1ddc,1ddd,1dde,1ddf,1de0,1de1,1de2,1de3,1de4,1de5,1de6,1dfe,20d0,20d1,20d4,20d5,20d6,20d7,20db,20dc,20e1,20e7,20e9,20f0,2cef,2cf0,2cf1,2de0,2de1,2de2,2de3,2de4,2de5,2de6,2de7,2de8,2de9,2dea,2deb,2dec,2ded,2dee,2def,2df0,2df1,2df2,2df3,2df4,2df5,2df6,2df7,2df8,2df9,2dfa,2dfb,2dfc,2dfd,2dfe,2dff,a66f,a67c,a67d,a6f0,a6f1,a8e0,a8e1,a8e2,a8e3,a8e4,a8e5,a8e6,a8e7,a8e8,a8e9,a8ea,a8eb,a8ec,a8ed,a8ee,a8ef,a8f0,a8f1,aab0,aab2,aab3,aab7,aab8,aabe,aabf,aac1,fe20,fe21,fe22,fe23,fe24,fe25,fe26,10a0f,10a38,1d185,1d186,1d187,1d188,1d189,1d1aa,1d1ab,1d1ac,1d1ad,1d242,1d243,1d244'
33
- .split(',')
34
- .map((hex) => Number.parseInt(hex, 16));
35
- const imageCache = new Map();
36
- const transmitted = new Set();
37
- const sliceCache = new Map();
38
- function clamp(value, min, max) {
39
- return Math.min(max, Math.max(min, value));
40
- }
41
- function parseHexColor(value) {
42
- const hex = value.trim();
43
- const short = /^#([\da-f]{3})$/iu.exec(hex);
44
- if (short?.[1] !== undefined) {
45
- const [r, g, b] = short[1];
46
- if (r === undefined || g === undefined || b === undefined)
47
- return undefined;
48
- return [Number.parseInt(r + r, 16), Number.parseInt(g + g, 16), Number.parseInt(b + b, 16)];
49
- }
50
- const full = /^#([\da-f]{6})$/iu.exec(hex);
51
- if (full?.[1] === undefined)
52
- return undefined;
53
- const raw = full[1];
54
- return [Number.parseInt(raw.slice(0, 2), 16), Number.parseInt(raw.slice(2, 4), 16), Number.parseInt(raw.slice(4, 6), 16)];
55
- }
56
- function formatHex(rgb) {
57
- return `#${rgb.map((part) => part.toString(16).padStart(2, '0')).join('')}`;
58
- }
59
- function mixSrgb(fg, bg, percent) {
60
- const front = parseHexColor(fg);
61
- const back = parseHexColor(bg);
62
- if (front === undefined || back === undefined)
63
- return fg;
64
- const amount = clamp(percent, 0, 100) / 100;
65
- return formatHex([
66
- Math.round(front[0] * amount + back[0] * (1 - amount)),
67
- Math.round(front[1] * amount + back[1] * (1 - amount)),
68
- Math.round(front[2] * amount + back[2] * (1 - amount)),
69
- ]);
70
- }
71
- function parseInlineSvgVars(svg) {
72
- const vars = new Map();
73
- const tag = /style="([^"]*)"/u.exec(svg);
74
- if (tag?.[1] === undefined)
75
- return vars;
76
- for (const part of tag[1].split(';')) {
77
- const match = /^--([\w-]+):(.+)$/u.exec(part.trim());
78
- if (match?.[1] === undefined || match[2] === undefined)
79
- continue;
80
- vars.set(match[1], match[2].trim());
81
- }
82
- return vars;
83
- }
84
- function mermaidVarMap(svg) {
85
- const parsed = parseInlineSvgVars(svg);
86
- const bg = parsed.get('bg') ?? MERMAID_IMAGE_THEME.bg;
87
- const fg = parsed.get('fg') ?? MERMAID_IMAGE_THEME.fg;
88
- const muted = parsed.get('muted');
89
- const line = parsed.get('line');
90
- const accent = parsed.get('accent');
91
- const surface = parsed.get('surface');
92
- const border = parsed.get('border');
93
- return new Map(Object.entries({
94
- _arrow: accent ?? mixSrgb(fg, bg, 85),
95
- '_group-fill': bg,
96
- '_group-hdr': mixSrgb(fg, bg, 5),
97
- '_inner-stroke': mixSrgb(fg, bg, 12),
98
- '_key-badge': mixSrgb(fg, bg, 10),
99
- _line: line ?? mixSrgb(fg, bg, 50),
100
- '_node-fill': surface ?? mixSrgb(fg, bg, 3),
101
- '_node-stroke': border ?? mixSrgb(fg, bg, 20),
102
- _text: fg,
103
- '_text-faint': mixSrgb(fg, bg, 25),
104
- '_text-muted': muted ?? mixSrgb(fg, bg, 40),
105
- '_text-sec': muted ?? mixSrgb(fg, bg, 60),
106
- accent: accent ?? mixSrgb(fg, bg, 85),
107
- bg,
108
- border: border ?? mixSrgb(fg, bg, 20),
109
- fg,
110
- line: line ?? mixSrgb(fg, bg, 50),
111
- muted: muted ?? mixSrgb(fg, bg, 40),
112
- surface: surface ?? mixSrgb(fg, bg, 3),
113
- }));
114
- }
115
- function escapeRegExp(value) {
116
- return value.replaceAll(/[.*+?^${}()|[\]\\]/gu, String.raw `\$&`);
117
- }
118
- export function inlineMermaidSvgCss(svg) {
119
- const vars = mermaidVarMap(svg);
120
- const names = [...vars.keys()].sort((left, right) => right.length - left.length);
121
- let out = svg;
122
- for (const name of names) {
123
- const value = vars.get(name);
124
- if (value === undefined)
125
- continue;
126
- out = out.replaceAll(new RegExp(`var\\(--${escapeRegExp(name)}(?:,[^)]+)?\\)`, 'gu'), value);
127
- }
128
- out = out.replaceAll(/color-mix\(in srgb,\s*(#[\dA-Fa-f]{3,8})\s+(\d+)%\s*,\s*(#[\dA-Fa-f]{3,8})\)/gu, (_all, fg, percent, bg) => mixSrgb(fg, bg, Number.parseInt(percent, 10)));
129
- out = out.replaceAll(/@import url\([^)]+\);/gu, '');
130
- out = out.replaceAll("font-family: 'Helvetica', system-ui, sans-serif", 'font-family: Helvetica, Arial, sans-serif');
131
- return out;
132
- }
133
- function fnv1a24(value) {
134
- let hash = FNV_OFFSET;
135
- for (let index = 0; index < value.length; index += 1) {
136
- hash ^= value.codePointAt(index) ?? 0;
137
- hash = Math.imul(hash, FNV_PRIME);
138
- }
139
- return (hash >>> 0) % RGB24 || 1;
140
- }
141
- function diacritic(index) {
142
- const code = ROWCOLUMN_DIACRITICS[index];
143
- return code === undefined ? '' : String.fromCodePoint(code);
144
- }
145
- export function mermaidImageColor(id) {
146
- return `#${(id & RGB24).toString(16).padStart(6, '0')}`;
147
- }
148
- export function kittyPlaceholderRow(row, cols) {
149
- const rowMark = diacritic(row);
150
- let line = '';
151
- for (let column = 0; column < cols; column += 1) {
152
- line += PLACEHOLDER + rowMark + diacritic(column);
153
- }
154
- return line;
155
- }
156
- export function overlaySlotText(id, row, cols) {
157
- const marker = `${SLOT}${(id & RGB24).toString(16).padStart(6, '0')}${row.toString(16).padStart(2, '0')}`;
158
- if (marker.length >= cols)
159
- return marker.slice(0, Math.max(1, cols));
160
- return marker + ' '.repeat(cols - marker.length);
161
- }
162
- export function overlaySlotPattern() {
163
- return new RegExp(`${SLOT}([0-9a-f]{6})([0-9a-f]{2})`, 'u');
164
- }
165
- function isTruthyEnv(value) {
166
- if (value === undefined)
167
- return false;
168
- const normalized = value.trim().toLowerCase();
169
- return normalized === '1' || normalized === 'true' || normalized === 'on' || normalized === 'yes' || normalized === 'image';
170
- }
171
- function isFalsyEnv(value) {
172
- if (value === undefined)
173
- return false;
174
- const normalized = value.trim().toLowerCase();
175
- return normalized === '0' || normalized === 'false' || normalized === 'off' || normalized === 'no' || normalized === 'ascii';
176
- }
177
- function isMochaArgv(argv) {
178
- return argv.some((arg) => arg.includes('mocha'));
179
- }
180
- function protocolFromTerminal(env) {
181
- const program = (env.TERM_PROGRAM ?? '').toLowerCase();
182
- const term = (env.TERM ?? '').toLowerCase();
183
- // Unicode placeholders only work in Kitty. Cursor/VS Code/iTerm/Ghostty/Warp
184
- // either ignore the image protocol or leave overlay slot text on screen.
185
- if (env.KITTY_WINDOW_ID !== undefined || term.includes('kitty') || program === 'kitty')
186
- return 'kitty-placeholder';
187
- if (!isTruthyEnv(env.AGENTIA_AI_MERMAID))
188
- return 'none';
189
- if (program === 'iterm.app')
190
- return 'overlay-iterm';
191
- if (program === 'ghostty' || program === 'wezterm' || term.includes('ghostty') || term.includes('wezterm')) {
192
- return 'overlay-kitty';
193
- }
194
- return 'none';
195
- }
196
- export function detectMermaidImageProtocol(env = process.env, io = {}) {
197
- const argv = io.argv ?? process.argv;
198
- if (isMochaArgv(argv) && env.AGENTIA_AI_MERMAID === undefined)
199
- return 'none';
200
- if (isFalsyEnv(env.AGENTIA_AI_MERMAID))
201
- return 'none';
202
- const tty = io.isTTY ?? Boolean(process.stdout.isTTY);
203
- if (!tty && !isTruthyEnv(env.AGENTIA_AI_MERMAID))
204
- return 'none';
205
- if (env.TMUX !== undefined && !isTruthyEnv(env.AGENTIA_AI_MERMAID))
206
- return 'none';
207
- return protocolFromTerminal(env);
208
- }
209
- function rasterOptions(widthPx, crop) {
210
- return {
211
- background: MERMAID_IMAGE_THEME.bg,
212
- ...(crop === undefined ? {} : { crop: { bottom: crop.bottom, left: 0, right: widthPx, top: crop.top } }),
213
- fitTo: { mode: 'width', value: widthPx },
214
- font: {
215
- defaultFontFamily: 'Helvetica',
216
- loadSystemFonts: true,
217
- sansSerifFamily: 'Helvetica',
218
- },
219
- };
220
- }
221
- function cacheSet(key, value) {
222
- if (imageCache.size >= MAX_CACHE) {
223
- const oldest = imageCache.keys().next().value;
224
- if (oldest !== undefined)
225
- imageCache.delete(oldest);
226
- }
227
- imageCache.set(key, value);
228
- }
229
- export function rasterizeMermaidPng(source, columns) {
230
- if (source.length === 0 || source.length > MAX_MERMAID_SOURCE)
231
- return undefined;
232
- const cols = clamp(columns, 20, MAX_IMAGE_COLS);
233
- const key = `${cols}\n${source}`;
234
- const cached = imageCache.get(key);
235
- if (cached !== undefined)
236
- return cached === false ? undefined : cached;
237
- try {
238
- const raw = renderMermaidSVG(source, MERMAID_IMAGE_THEME);
239
- const svg = inlineMermaidSvgCss(raw);
240
- const widthPx = cols * CELL_WIDTH_PX;
241
- const rendered = new Resvg(svg, rasterOptions(widthPx)).render();
242
- const png = rendered.asPng();
243
- if (png.length === 0 || png.length > MAX_PNG_BYTES) {
244
- cacheSet(key, false);
245
- return undefined;
246
- }
247
- const rows = clamp(Math.round(rendered.height / CELL_HEIGHT_PX), 4, MAX_IMAGE_ROWS);
248
- const record = {
249
- cols,
250
- id: fnv1a24(key),
251
- png,
252
- pngHeight: rendered.height,
253
- pngWidth: rendered.width,
254
- rows,
255
- svg,
256
- };
257
- cacheSet(key, record);
258
- return record;
259
- }
260
- catch {
261
- cacheSet(key, false);
262
- return undefined;
263
- }
264
- }
265
- function pngSlice(record, startRow, rowCount) {
266
- if (startRow <= 0 && rowCount >= record.rows)
267
- return record.png;
268
- const sliceKey = `${record.id}:${startRow}:${rowCount}`;
269
- const cached = sliceCache.get(sliceKey);
270
- if (cached !== undefined)
271
- return cached;
272
- const top = Math.round((startRow / record.rows) * record.pngHeight);
273
- const bottom = Math.max(top + 1, Math.round(((startRow + rowCount) / record.rows) * record.pngHeight));
274
- const png = new Resvg(record.svg, rasterOptions(record.pngWidth, { bottom, top })).render().asPng();
275
- if (sliceCache.size >= MAX_CACHE) {
276
- const oldest = sliceCache.keys().next().value;
277
- if (oldest !== undefined)
278
- sliceCache.delete(oldest);
279
- }
280
- sliceCache.set(sliceKey, png);
281
- return png;
282
- }
283
- function wrapTmux(sequence, env = process.env) {
284
- if (env.TMUX === undefined)
285
- return sequence;
286
- return `\u001BPtmux;${sequence.replaceAll('\u001B', '\u001B\u001B')}\u001B\\`;
287
- }
288
- function kittyGraphicsCommand(params, payload) {
289
- if (payload === undefined)
290
- return wrapTmux(`\u001B_G${params}\u001B\\`);
291
- return wrapTmux(`\u001B_G${params};${payload}\u001B\\`);
292
- }
293
- function encodeKittyPng(png, params) {
294
- const data = png.toString('base64');
295
- const parts = [];
296
- let offset = 0;
297
- let first = true;
298
- while (offset < data.length) {
299
- const chunk = data.slice(offset, offset + KITTY_CHUNK);
300
- offset += KITTY_CHUNK;
301
- const more = offset < data.length ? 1 : 0;
302
- if (first) {
303
- parts.push(kittyGraphicsCommand(`${params},m=${more}`, chunk));
304
- first = false;
305
- }
306
- else {
307
- parts.push(kittyGraphicsCommand(`m=${more}`, chunk));
308
- }
309
- }
310
- return parts.join('');
311
- }
312
- export function encodeKittyPlaceholderTransmit(record) {
313
- return encodeKittyPng(record.png, `a=T,f=100,q=2,U=1,i=${record.id},c=${record.cols},r=${record.rows}`);
314
- }
315
- function encodeKittyOverlay(png, cols, rows, id) {
316
- return encodeKittyPng(png, `a=T,f=100,q=2,C=1,i=${id},c=${cols},r=${rows}`);
317
- }
318
- function encodeItermOverlay(png, cols, rows) {
319
- return wrapTmux(`\u001B]1337;File=inline=1;size=${png.length};width=${cols};height=${rows};preserveAspectRatio=1;doNotMoveCursor=1:${png.toString('base64')}\u0007`);
320
- }
321
- function lookupRecord(id) {
322
- for (const value of imageCache.values()) {
323
- if (value !== false && value.id === id)
324
- return value;
325
- }
326
- return undefined;
327
- }
328
- function overlayPayload(record, protocol, startRow, rowCount) {
329
- const png = pngSlice(record, startRow, rowCount);
330
- if (protocol === 'overlay-kitty')
331
- return encodeKittyOverlay(png, record.cols, rowCount, record.id);
332
- return encodeItermOverlay(png, record.cols, rowCount);
333
- }
334
- function overlayRuns(lines) {
335
- const pattern = overlaySlotPattern();
336
- const runs = [];
337
- let index = 0;
338
- while (index < lines.length) {
339
- const match = pattern.exec(lines[index] ?? '');
340
- if (match?.[1] === undefined || match[2] === undefined) {
341
- index += 1;
342
- continue;
343
- }
344
- const id = Number.parseInt(match[1], 16);
345
- let row = Number.parseInt(match[2], 16);
346
- const start = index;
347
- const startRow = row;
348
- index += 1;
349
- while (index < lines.length) {
350
- const next = pattern.exec(lines[index] ?? '');
351
- if (next?.[1] === undefined || next[2] === undefined)
352
- break;
353
- if (Number.parseInt(next[1], 16) !== id)
354
- break;
355
- const nextRow = Number.parseInt(next[2], 16);
356
- if (nextRow !== row + 1)
357
- break;
358
- row = nextRow;
359
- index += 1;
360
- }
361
- runs.push({ count: index - start, end: index - 1, id, start, startRow });
362
- }
363
- return runs;
364
- }
365
- function prependPlaceholderTransmits(frame) {
366
- if (!frame.includes(PLACEHOLDER))
367
- return frame;
368
- const prefixes = [];
369
- for (const value of imageCache.values()) {
370
- if (value === false || transmitted.has(value.id))
371
- continue;
372
- prefixes.push(encodeKittyPlaceholderTransmit(value));
373
- transmitted.add(value.id);
374
- }
375
- return prefixes.length === 0 ? frame : prefixes.join('') + frame;
376
- }
377
- export function expandImageFrame(frame, protocol = detectMermaidImageProtocol()) {
378
- if (protocol === 'none')
379
- return frame;
380
- if (protocol === 'kitty-placeholder')
381
- return prependPlaceholderTransmits(frame);
382
- const newline = frame.includes('\r\n') ? '\r\n' : '\n';
383
- const lines = frame.split(/\r?\n/u);
384
- const runs = overlayRuns(lines);
385
- if (runs.length === 0)
386
- return frame;
387
- const inserts = new Map();
388
- for (const run of runs) {
389
- const record = lookupRecord(run.id);
390
- if (record === undefined)
391
- continue;
392
- const payload = overlayPayload(record, protocol, run.startRow, run.count);
393
- inserts.set(run.end, `\u001B[${run.count}A${payload}\u001B[${run.count}B`);
394
- }
395
- if (inserts.size === 0)
396
- return frame;
397
- let out = '';
398
- let skipSeparator = false;
399
- for (const [index, line] of lines.entries()) {
400
- if (index > 0 && !skipSeparator)
401
- out += newline;
402
- out += line;
403
- const insert = inserts.get(index);
404
- if (insert === undefined) {
405
- skipSeparator = false;
406
- continue;
407
- }
408
- out += newline + insert;
409
- skipSeparator = true;
410
- }
411
- return out;
412
- }
413
- export function installStdoutImageBridge(stdout, protocol = detectMermaidImageProtocol()) {
414
- if (protocol === 'none') {
415
- return () => {
416
- /* Image protocol is off. */
417
- };
418
- }
419
- const original = stdout.write.bind(stdout);
420
- stdout.write = ((chunk, encoding, cb) => {
421
- const encodingIsFn = typeof encoding === 'function';
422
- const callback = encodingIsFn ? encoding : cb;
423
- const enc = encodingIsFn ? undefined : encoding;
424
- const text = typeof chunk === 'string' ? chunk : Buffer.isBuffer(chunk) ? chunk.toString('utf8') : String(chunk);
425
- const expanded = expandImageFrame(text, protocol);
426
- if (enc === undefined)
427
- return original(expanded, callback);
428
- return original(expanded, enc, callback);
429
- });
430
- return () => {
431
- stdout.write = original;
432
- };
433
- }
434
- export function resetMermaidImageState() {
435
- imageCache.clear();
436
- transmitted.clear();
437
- sliceCache.clear();
438
- }
439
- export function mermaidImageSlotKind(protocol) {
440
- if (protocol === 'none')
441
- return undefined;
442
- return protocol === 'kitty-placeholder' ? 'placeholder' : 'overlay';
443
- }
444
- //# sourceMappingURL=ai-session-tui-mermaid-image.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ai-session-tui-mermaid-image.js","sourceRoot":"","sources":["../../src/lib/ai-session-tui-mermaid-image.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { type HighlightSpan } from './ai-session-tui-highlight.js';
2
- export declare function paintMermaidArt(lines: string[]): HighlightSpan[][] | undefined;
3
- export declare function paintMermaidShapeKey(shapes: ReadonlySet<string>): HighlightSpan[] | undefined;
@@ -1,182 +0,0 @@
1
- const MIN_BOX_WIDTH = 3;
2
- const MAX_BOX_HEIGHT = 16;
3
- const CONNECTOR = '#6cb6ff';
4
- const TOP_LEFT = {
5
- '(': 'stadium',
6
- '┌': 'rectangle',
7
- '╭': 'rounded',
8
- '◇': 'diamond',
9
- };
10
- const TOP_RIGHT = {
11
- ')': 'stadium',
12
- '┐': 'rectangle',
13
- '╮': 'rounded',
14
- '◇': 'diamond',
15
- };
16
- const BOTTOM_LEFT = {
17
- '(': 'stadium',
18
- '└': 'rectangle',
19
- '╰': 'rounded',
20
- '◇': 'diamond',
21
- };
22
- const BOTTOM_RIGHT = {
23
- ')': 'stadium',
24
- '┘': 'rectangle',
25
- '╯': 'rounded',
26
- '◇': 'diamond',
27
- };
28
- const FILL = {
29
- diamond: { backgroundColor: '#5c3d12', color: '#ffd37a' },
30
- rectangle: { backgroundColor: '#1b3a5f', color: '#d7e8ff' },
31
- rounded: { backgroundColor: '#1b4332', color: '#7ee2a8' },
32
- stadium: { backgroundColor: '#1b4332', color: '#7ee2a8' },
33
- };
34
- const KEY_SHAPES = [
35
- { fill: 'diamond', label: 'diamond', shape: 'diamond' },
36
- { fill: 'rectangle', label: 'hexagon', shape: 'hexagon' },
37
- { fill: 'rectangle', label: 'rectangle', shape: 'rectangle' },
38
- { fill: 'rounded', label: 'rounded', shape: 'rounded' },
39
- { fill: 'stadium', label: 'circle', shape: 'circle' },
40
- { fill: 'stadium', label: 'stadium', shape: 'stadium' },
41
- ];
42
- const ERASE = new Set(['(', ')', '─', '│', '┌', '┐', '└', '┘', '├', '┤', '┬', '┴', '┼', '╭', '╮', '╯', '╰', '╵', '╷', '◇']);
43
- const CONNECTOR_CHARS = new Set(['─', '│', '┌', '┐', '└', '┘', '├', '┤', '┬', '┴', '┼', '╵', '╷', '▲', '►', '▼', '◄']);
44
- function padGrid(lines) {
45
- let width = 0;
46
- for (const line of lines) {
47
- if (line.length > width)
48
- width = line.length;
49
- }
50
- const grid = [];
51
- for (const line of lines)
52
- grid.push([...line.padEnd(width, ' ')]);
53
- return grid;
54
- }
55
- function charAt(grid, x, y) {
56
- return grid[y]?.[x] ?? ' ';
57
- }
58
- function findTopRight(row, left, shape) {
59
- for (const [x, char] of row.entries()) {
60
- if (x <= left)
61
- continue;
62
- if (TOP_RIGHT[char] === shape)
63
- return x;
64
- if (char === '─' || char === '┬')
65
- continue;
66
- return undefined;
67
- }
68
- return undefined;
69
- }
70
- function findBottom(grid, box) {
71
- for (const [y] of grid.entries()) {
72
- if (y <= box.top)
73
- continue;
74
- if (y - box.top > MAX_BOX_HEIGHT)
75
- return undefined;
76
- if (BOTTOM_LEFT[charAt(grid, box.left, y)] === box.shape && BOTTOM_RIGHT[charAt(grid, box.right, y)] === box.shape) {
77
- return y;
78
- }
79
- }
80
- return undefined;
81
- }
82
- function markUsed(used, box, grid) {
83
- for (const [y, row] of grid.entries()) {
84
- if (y < box.top || y > box.bottom)
85
- continue;
86
- for (const [x] of row.entries()) {
87
- if (x < box.left || x > box.right)
88
- continue;
89
- used.add(`${x},${y}`);
90
- }
91
- }
92
- }
93
- function findBoxes(grid) {
94
- const boxes = [];
95
- const used = new Set();
96
- for (const [y, row] of grid.entries()) {
97
- for (const [x, char] of row.entries()) {
98
- if (used.has(`${x},${y}`))
99
- continue;
100
- const shape = TOP_LEFT[char];
101
- if (shape === undefined)
102
- continue;
103
- const right = findTopRight(row, x, shape);
104
- if (right === undefined || right - x + 1 < MIN_BOX_WIDTH)
105
- continue;
106
- const bottom = findBottom(grid, { left: x, right, shape, top: y }) ?? (shape === 'stadium' ? y : undefined);
107
- if (bottom === undefined)
108
- continue;
109
- const box = { bottom, left: x, right, shape, top: y };
110
- boxes.push(box);
111
- markUsed(used, box, grid);
112
- }
113
- }
114
- return boxes;
115
- }
116
- function boxAt(boxes, x, y) {
117
- return boxes.find((box) => x >= box.left && x <= box.right && y >= box.top && y <= box.bottom);
118
- }
119
- function encodeRow(cells) {
120
- const spans = [];
121
- let run;
122
- for (const cell of cells) {
123
- if (run !== undefined && run.color === cell.color && run.backgroundColor === cell.backgroundColor) {
124
- run.text += cell.text;
125
- continue;
126
- }
127
- run = {
128
- ...(cell.backgroundColor === undefined ? {} : { backgroundColor: cell.backgroundColor }),
129
- ...(cell.color === undefined ? {} : { color: cell.color }),
130
- text: cell.text,
131
- };
132
- spans.push(run);
133
- }
134
- return spans.length === 0 ? [{ text: ' ' }] : spans;
135
- }
136
- export function paintMermaidArt(lines) {
137
- if (lines.length === 0)
138
- return undefined;
139
- const grid = padGrid(lines);
140
- const boxes = findBoxes(grid);
141
- if (boxes.length === 0)
142
- return undefined;
143
- return grid.map((row, y) => {
144
- const cells = [];
145
- for (const [x, raw] of row.entries()) {
146
- const box = boxAt(boxes, x, y);
147
- if (box !== undefined) {
148
- const fill = FILL[box.shape];
149
- cells.push({
150
- backgroundColor: fill.backgroundColor,
151
- color: fill.color,
152
- text: ERASE.has(raw) ? ' ' : raw,
153
- });
154
- continue;
155
- }
156
- cells.push({
157
- ...(CONNECTOR_CHARS.has(raw) ? { color: CONNECTOR } : {}),
158
- text: raw,
159
- });
160
- }
161
- return encodeRow(cells);
162
- });
163
- }
164
- export function paintMermaidShapeKey(shapes) {
165
- const spans = [{ text: 'Key: ' }];
166
- let found = false;
167
- for (const entry of KEY_SHAPES) {
168
- if (!shapes.has(entry.shape))
169
- continue;
170
- const fill = FILL[entry.fill];
171
- if (found)
172
- spans.push({ text: ' ' });
173
- spans.push({
174
- backgroundColor: fill.backgroundColor,
175
- color: fill.color,
176
- text: ` ${entry.label} `,
177
- });
178
- found = true;
179
- }
180
- return found ? spans : undefined;
181
- }
182
- //# sourceMappingURL=ai-session-tui-mermaid-paint.js.map