@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.
- package/README.md +225 -294
- package/dist/commands/cicd/notification/configure.d.ts +1 -1
- package/dist/commands/cicd/work/deployment-step/create.d.ts +1 -1
- package/dist/commands/testing/build/run.d.ts +2 -2
- package/dist/commands/testing/data-table/create.d.ts +1 -1
- package/dist/commands/testing/data-table/update.d.ts +1 -1
- package/dist/commands/testing/job/create.d.ts +1 -1
- package/dist/commands/testing/job/schedule/set.d.ts +1 -1
- package/dist/commands/testing/job/update.d.ts +1 -1
- package/dist/commands/testing/robot/update.d.ts +1 -1
- package/dist/commands/testing/run.d.ts +2 -2
- package/dist/commands/testing/test/run.d.ts +2 -2
- package/dist/lib/ai-chat-session.d.ts +0 -3
- package/dist/lib/ai-chat-session.js +66 -182
- package/dist/lib/ai-chat-session.js.map +1 -1
- package/dist/lib/ai-gateway.d.ts +1 -8
- package/dist/lib/ai-gateway.js +2 -34
- package/dist/lib/ai-gateway.js.map +1 -1
- package/dist/lib/ai-types.d.ts +0 -18
- package/dist/lib/ai-types.js +1 -45
- package/dist/lib/ai-types.js.map +1 -1
- package/dist/lib/cicd-gateway.d.ts +1 -0
- package/dist/lib/cicd-gateway.js +14 -1
- package/dist/lib/cicd-gateway.js.map +1 -1
- package/dist/lib/format.d.ts +0 -2
- package/dist/lib/format.js +2 -5
- package/dist/lib/format.js.map +1 -1
- package/dist/lib/mcp/tools.d.ts +2 -2
- package/dist/lib/testing-data-command.d.ts +1 -1
- package/dist/lib/testing-flags.d.ts +2 -2
- package/oclif.manifest.json +458 -609
- package/package.json +1 -10
- package/templates/skills/agentia-ai/SKILL.md +5 -5
- package/templates/skills/agentia-ai/references/ai-agents.md +3 -18
- package/dist/commands/ai/session/list.d.ts +0 -14
- package/dist/commands/ai/session/list.js +0 -46
- package/dist/commands/ai/session/list.js.map +0 -1
- package/dist/commands/ai/session/start.d.ts +0 -17
- package/dist/commands/ai/session/start.js +0 -60
- package/dist/commands/ai/session/start.js.map +0 -1
- package/dist/lib/ai-session-banner.d.ts +0 -5
- package/dist/lib/ai-session-banner.js +0 -20
- package/dist/lib/ai-session-banner.js.map +0 -1
- package/dist/lib/ai-session-tui-blocks.d.ts +0 -9
- package/dist/lib/ai-session-tui-blocks.js +0 -36
- package/dist/lib/ai-session-tui-blocks.js.map +0 -1
- package/dist/lib/ai-session-tui-clipboard.d.ts +0 -22
- package/dist/lib/ai-session-tui-clipboard.js +0 -78
- package/dist/lib/ai-session-tui-clipboard.js.map +0 -1
- package/dist/lib/ai-session-tui-composer.d.ts +0 -35
- package/dist/lib/ai-session-tui-composer.js +0 -96
- package/dist/lib/ai-session-tui-composer.js.map +0 -1
- package/dist/lib/ai-session-tui-highlight.d.ts +0 -11
- package/dist/lib/ai-session-tui-highlight.js +0 -310
- package/dist/lib/ai-session-tui-highlight.js.map +0 -1
- package/dist/lib/ai-session-tui-keys.d.ts +0 -42
- package/dist/lib/ai-session-tui-keys.js +0 -159
- package/dist/lib/ai-session-tui-keys.js.map +0 -1
- package/dist/lib/ai-session-tui-mermaid-image.d.ts +0 -43
- package/dist/lib/ai-session-tui-mermaid-image.js +0 -444
- package/dist/lib/ai-session-tui-mermaid-image.js.map +0 -1
- package/dist/lib/ai-session-tui-mermaid-paint.d.ts +0 -3
- package/dist/lib/ai-session-tui-mermaid-paint.js +0 -182
- package/dist/lib/ai-session-tui-mermaid-paint.js.map +0 -1
- package/dist/lib/ai-session-tui-mermaid.d.ts +0 -19
- package/dist/lib/ai-session-tui-mermaid.js +0 -158
- package/dist/lib/ai-session-tui-mermaid.js.map +0 -1
- package/dist/lib/ai-session-tui-message.d.ts +0 -9
- package/dist/lib/ai-session-tui-message.js +0 -24
- package/dist/lib/ai-session-tui-message.js.map +0 -1
- package/dist/lib/ai-session-tui-scroll.d.ts +0 -32
- package/dist/lib/ai-session-tui-scroll.js +0 -148
- package/dist/lib/ai-session-tui-scroll.js.map +0 -1
- package/dist/lib/ai-session-tui-slash.d.ts +0 -14
- package/dist/lib/ai-session-tui-slash.js +0 -53
- package/dist/lib/ai-session-tui-slash.js.map +0 -1
- package/dist/lib/ai-session-tui-welcome.d.ts +0 -12
- package/dist/lib/ai-session-tui-welcome.js +0 -33
- package/dist/lib/ai-session-tui-welcome.js.map +0 -1
- package/dist/lib/ai-session-tui-wrap.d.ts +0 -2
- package/dist/lib/ai-session-tui-wrap.js +0 -24
- package/dist/lib/ai-session-tui-wrap.js.map +0 -1
- package/dist/lib/ai-session-tui.d.ts +0 -7
- package/dist/lib/ai-session-tui.js +0 -859
- package/dist/lib/ai-session-tui.js.map +0 -1
- package/dist/lib/ai-sessions.d.ts +0 -17
- package/dist/lib/ai-sessions.js +0 -142
- 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":"AAAA,6FAA6F;AAC7F,OAAO,EAAC,KAAK,EAAC,MAAM,iBAAiB,CAAA;AACrC,OAAO,EAAC,gBAAgB,EAAC,MAAM,mBAAmB,CAAA;AAElD,MAAM,SAAS,GAAG,EAAE,CAAA;AACpB,MAAM,kBAAkB,GAAG,MAAM,CAAA;AACjC,MAAM,aAAa,GAAG,OAAO,CAAA;AAC7B,MAAM,cAAc,GAAG,EAAE,CAAA;AACzB,MAAM,cAAc,GAAG,GAAG,CAAA;AAC1B,MAAM,aAAa,GAAG,EAAE,CAAA;AACxB,MAAM,cAAc,GAAG,EAAE,CAAA;AACzB,MAAM,WAAW,GAAG,IAAI,CAAA;AACxB,MAAM,WAAW,GAAG,YAAY,CAAA;AAChC,MAAM,IAAI,GAAG,QAAQ,CAAA;AACrB,MAAM,UAAU,GAAG,aAAa,CAAA;AAChC,MAAM,SAAS,GAAG,UAAU,CAAA;AAC5B,MAAM,KAAK,GAAG,UAAU,CAAA;AAExB,mFAAmF;AACnF,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,MAAM,EAAE,SAAS;IACjB,EAAE,EAAE,SAAS;IACb,MAAM,EAAE,SAAS;IACjB,EAAE,EAAE,SAAS;IACb,IAAI,EAAE,WAAW;IACjB,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,SAAS;CACV,CAAA;AAEV;;;GAGG;AACH,MAAM,oBAAoB,GACxB,o1CAAo1C;KACj1C,KAAK,CAAC,GAAG,CAAC;KACV,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAA;AAwB3C,MAAM,UAAU,GAAG,IAAI,GAAG,EAA8B,CAAA;AACxD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAA;AACrC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAA;AAE5C,SAAS,KAAK,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW;IACpD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAA;AAC5C,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;IACxB,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC3C,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QAC1B,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS;YAAE,OAAO,SAAS,CAAA;QAC3E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;IAC7F,CAAC;IAED,MAAM,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC1C,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;IACnB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;AAC3H,CAAC;AAED,SAAS,SAAS,CAAC,GAA6B;IAC9C,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAA;AAC7E,CAAC;AAED,SAAS,OAAO,CAAC,EAAU,EAAE,EAAU,EAAE,OAAe;IACtD,MAAM,KAAK,GAAG,aAAa,CAAC,EAAE,CAAC,CAAA;IAC/B,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,CAAC,CAAA;IAC9B,IAAI,KAAK,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,CAAA;IACxD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,CAAA;IAC3C,OAAO,SAAS,CAAC;QACf,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QACtD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QACtD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;KACvD,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAW;IACrC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAA;IACtC,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACxC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS;QAAE,OAAO,IAAI,CAAA;IACvC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;QACpD,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS;YAAE,SAAQ;QAChE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;IACrC,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,aAAa,CAAC,GAAW;IAChC,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAA;IACtC,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,mBAAmB,CAAC,EAAE,CAAA;IACrD,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,mBAAmB,CAAC,EAAE,CAAA;IACrD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACjC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACnC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;IACrC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACnC,OAAO,IAAI,GAAG,CACZ,MAAM,CAAC,OAAO,CAAC;QACb,MAAM,EAAE,MAAM,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QACrC,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAChC,eAAe,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QACpC,YAAY,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QACjC,KAAK,EAAE,IAAI,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QAClC,YAAY,EAAE,OAAO,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3C,cAAc,EAAE,MAAM,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QAC7C,KAAK,EAAE,EAAE;QACT,aAAa,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QAClC,aAAa,EAAE,KAAK,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QAC3C,WAAW,EAAE,KAAK,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QACzC,MAAM,EAAE,MAAM,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QACrC,EAAE;QACF,MAAM,EAAE,MAAM,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QACrC,EAAE;QACF,IAAI,EAAE,IAAI,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QACjC,KAAK,EAAE,KAAK,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QACnC,OAAO,EAAE,OAAO,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;KACvC,CAAC,CACH,CAAA;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,KAAK,CAAC,UAAU,CAAC,sBAAsB,EAAE,MAAM,CAAC,GAAG,CAAA,KAAK,CAAC,CAAA;AAClE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;IAC/B,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAA;IAChF,IAAI,GAAG,GAAG,GAAG,CAAA;IACb,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC5B,IAAI,KAAK,KAAK,SAAS;YAAE,SAAQ;QACjC,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,WAAW,YAAY,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,CAAA;IAC9F,CAAC;IAED,GAAG,GAAG,GAAG,CAAC,UAAU,CAClB,gFAAgF,EAChF,CAAC,IAAI,EAAE,EAAU,EAAE,OAAe,EAAE,EAAU,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CACjG,CAAA;IACD,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAA;IACnD,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,iDAAiD,EAAE,2CAA2C,CAAC,CAAA;IACpH,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,SAAS,OAAO,CAAC,KAAa;IAC5B,IAAI,IAAI,GAAG,UAAU,CAAA;IACrB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACrD,IAAI,IAAI,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACrC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IACnC,CAAC;IAED,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,CAAA;AAClC,CAAC;AAED,SAAS,SAAS,CAAC,KAAa;IAC9B,MAAM,IAAI,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAA;IACxC,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;AAC7D,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,EAAU;IAC1C,OAAO,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAA;AACzD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,GAAW,EAAE,IAAY;IAC3D,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAA;IAC9B,IAAI,IAAI,GAAG,EAAE,CAAA;IACb,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;QAChD,IAAI,IAAI,WAAW,GAAG,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAA;IACnD,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAU,EAAE,GAAW,EAAE,IAAY;IACnE,MAAM,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAA;IACzG,IAAI,MAAM,CAAC,MAAM,IAAI,IAAI;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;IACpE,OAAO,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;AAClD,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,IAAI,MAAM,CAAC,GAAG,IAAI,4BAA4B,EAAE,GAAG,CAAC,CAAA;AAC7D,CAAC;AAED,SAAS,WAAW,CAAC,KAAyB;IAC5C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAA;IACrC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAC7C,OAAO,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,KAAK,IAAI,UAAU,KAAK,OAAO,CAAA;AAC7H,CAAC;AAED,SAAS,UAAU,CAAC,KAAyB;IAC3C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAA;IACrC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAC7C,OAAO,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,OAAO,IAAI,UAAU,KAAK,KAAK,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,OAAO,CAAA;AAC9H,CAAC;AAED,SAAS,WAAW,CAAC,IAAuB;IAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAA;AAClD,CAAC;AAED,SAAS,oBAAoB,CAAC,GAAsB;IAClD,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAA;IACtD,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAA;IAC3C,6EAA6E;IAC7E,yEAAyE;IACzE,IAAI,GAAG,CAAC,eAAe,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,KAAK,OAAO;QAAE,OAAO,mBAAmB,CAAA;IAClH,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,kBAAkB,CAAC;QAAE,OAAO,MAAM,CAAA;IACvD,IAAI,OAAO,KAAK,WAAW;QAAE,OAAO,eAAe,CAAA;IACnD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3G,OAAO,eAAe,CAAA;IACxB,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,MAAyB,OAAO,CAAC,GAAG,EACpC,KAAkD,EAAE;IAEpD,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAA;IACpC,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,kBAAkB,KAAK,SAAS;QAAE,OAAO,MAAM,CAAA;IAC5E,IAAI,UAAU,CAAC,GAAG,CAAC,kBAAkB,CAAC;QAAE,OAAO,MAAM,CAAA;IACrD,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACrD,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,kBAAkB,CAAC;QAAE,OAAO,MAAM,CAAA;IAC/D,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,kBAAkB,CAAC;QAAE,OAAO,MAAM,CAAA;IACjF,OAAO,oBAAoB,CAAC,GAAG,CAAC,CAAA;AAClC,CAAC;AAED,SAAS,aAAa,CAAC,OAAe,EAAE,IAAoC;IAC1E,OAAO;QACL,UAAU,EAAE,mBAAmB,CAAC,EAAE;QAClC,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAC,IAAI,EAAE,EAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAC,EAAC,CAAC;QACpG,KAAK,EAAE,EAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAC;QACtC,IAAI,EAAE;YACJ,iBAAiB,EAAE,WAAW;YAC9B,eAAe,EAAE,IAAI;YACrB,eAAe,EAAE,WAAW;SAC7B;KACF,CAAA;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW,EAAE,KAAyB;IACtD,IAAI,UAAU,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAA;QAC7C,IAAI,MAAM,KAAK,SAAS;YAAE,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACrD,CAAC;IAED,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;AAC5B,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAc,EAAE,OAAe;IACjE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,kBAAkB;QAAE,OAAO,SAAS,CAAA;IAC/E,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,cAAc,CAAC,CAAA;IAC/C,MAAM,GAAG,GAAG,GAAG,IAAI,KAAK,MAAM,EAAE,CAAA;IAChC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAClC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAA;IACtE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,gBAAgB,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;QACzD,MAAM,GAAG,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAA;QACpC,MAAM,OAAO,GAAG,IAAI,GAAG,aAAa,CAAA;QACpC,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAA;QAChE,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAA;QAC5B,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,aAAa,EAAE,CAAC;YACnD,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;YACpB,OAAO,SAAS,CAAA;QAClB,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CAAA;QACnF,MAAM,MAAM,GAAuB;YACjC,IAAI;YACJ,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC;YAChB,GAAG;YACH,SAAS,EAAE,QAAQ,CAAC,MAAM;YAC1B,QAAQ,EAAE,QAAQ,CAAC,KAAK;YACxB,IAAI;YACJ,GAAG;SACJ,CAAA;QACD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QACrB,OAAO,MAAM,CAAA;IACf,CAAC;IAAC,MAAM,CAAC;QACP,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QACpB,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,MAA0B,EAAE,QAAgB,EAAE,QAAgB;IAC9E,IAAI,QAAQ,IAAI,CAAC,IAAI,QAAQ,IAAI,MAAM,CAAC,IAAI;QAAE,OAAO,MAAM,CAAC,GAAG,CAAA;IAC/D,MAAM,QAAQ,GAAG,GAAG,MAAM,CAAC,EAAE,IAAI,QAAQ,IAAI,QAAQ,EAAE,CAAA;IACvD,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACvC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAA;IACvC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAA;IACnE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAA;IACtG,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,aAAa,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAC,MAAM,EAAE,GAAG,EAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAA;IACjG,IAAI,UAAU,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAA;QAC7C,IAAI,MAAM,KAAK,SAAS;YAAE,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACrD,CAAC;IAED,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;IAC7B,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,SAAS,QAAQ,CAAC,QAAgB,EAAE,MAAyB,OAAO,CAAC,GAAG;IACtE,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAA;IAC3C,OAAO,eAAe,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAA;AAC/E,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAc,EAAE,OAAgB;IAC5D,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC,WAAW,MAAM,UAAU,CAAC,CAAA;IACvE,OAAO,QAAQ,CAAC,WAAW,MAAM,IAAI,OAAO,UAAU,CAAC,CAAA;AACzD,CAAC;AAED,SAAS,cAAc,CAAC,GAAW,EAAE,MAAc;IACjD,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;IACnC,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,IAAI,KAAK,GAAG,IAAI,CAAA;IAChB,OAAO,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC,CAAA;QACtD,MAAM,IAAI,WAAW,CAAA;QACrB,MAAM,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACzC,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,MAAM,MAAM,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC,CAAA;YAC9D,KAAK,GAAG,KAAK,CAAA;QACf,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC,CAAA;QACtD,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACvB,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,MAA0B;IACvE,OAAO,cAAc,CAAC,MAAM,CAAC,GAAG,EAAE,uBAAuB,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;AACzG,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAW,EAAE,IAAY,EAAE,IAAY,EAAE,EAAU;IAC7E,OAAO,cAAc,CAAC,GAAG,EAAE,uBAAuB,EAAE,MAAM,IAAI,MAAM,IAAI,EAAE,CAAC,CAAA;AAC7E,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAW,EAAE,IAAY,EAAE,IAAY;IACjE,OAAO,QAAQ,CACb,kCAAkC,GAAG,CAAC,MAAM,UAAU,IAAI,WAAW,IAAI,4CAA4C,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CACpJ,CAAA;AACH,CAAC;AAED,SAAS,YAAY,CAAC,EAAU;IAC9B,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;QACxC,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,CAAC,EAAE,KAAK,EAAE;YAAE,OAAO,KAAK,CAAA;IACtD,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,SAAS,cAAc,CAAC,MAA0B,EAAE,QAA8B,EAAE,QAAgB,EAAE,QAAgB;IACpH,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAChD,IAAI,QAAQ,KAAK,eAAe;QAAE,OAAO,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA;IAClG,OAAO,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;AACvD,CAAC;AAID,SAAS,WAAW,CAAC,KAAe;IAClC,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAA;IACpC,MAAM,IAAI,GAAiB,EAAE,CAAA;IAC7B,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,OAAO,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;QAC9C,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YACvD,KAAK,IAAI,CAAC,CAAA;YACV,SAAQ;QACV,CAAC;QAED,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QACxC,IAAI,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QACvC,MAAM,KAAK,GAAG,KAAK,CAAA;QACnB,MAAM,QAAQ,GAAG,GAAG,CAAA;QACpB,KAAK,IAAI,CAAC,CAAA;QACV,OAAO,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;YAC7C,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;gBAAE,MAAK;YAC3D,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE;gBAAE,MAAK;YAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;YAC5C,IAAI,OAAO,KAAK,GAAG,GAAG,CAAC;gBAAE,MAAK;YAC9B,GAAG,GAAG,OAAO,CAAA;YACb,KAAK,IAAI,CAAC,CAAA;QACZ,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAC,CAAC,CAAA;IACxE,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,2BAA2B,CAAC,KAAa;IAChD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;QAAE,OAAO,KAAK,CAAA;IAC9C,MAAM,QAAQ,GAAa,EAAE,CAAA;IAC7B,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;QACxC,IAAI,KAAK,KAAK,KAAK,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAAE,SAAQ;QAC1D,QAAQ,CAAC,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC,CAAA;QACpD,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC3B,CAAC;IAED,OAAO,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK,CAAA;AAClE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,WAAiC,0BAA0B,EAAE;IAC3G,IAAI,QAAQ,KAAK,MAAM;QAAE,OAAO,KAAK,CAAA;IACrC,IAAI,QAAQ,KAAK,mBAAmB;QAAE,OAAO,2BAA2B,CAAC,KAAK,CAAC,CAAA;IAC/E,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAA;IACtD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IACnC,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;IAC/B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IACnC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAA;IACzC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACnC,IAAI,MAAM,KAAK,SAAS;YAAE,SAAQ;QAClC,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,CAAA;QACzE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,GAAG,CAAC,KAAK,IAAI,OAAO,UAAU,GAAG,CAAC,KAAK,GAAG,CAAC,CAAA;IAC5E,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IACpC,IAAI,GAAG,GAAG,EAAE,CAAA;IACZ,IAAI,aAAa,GAAG,KAAK,CAAA;IACzB,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QAC5C,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,aAAa;YAAE,GAAG,IAAI,OAAO,CAAA;QAC/C,GAAG,IAAI,IAAI,CAAA;QACX,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACjC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,aAAa,GAAG,KAAK,CAAA;YACrB,SAAQ;QACV,CAAC;QAED,GAAG,IAAI,OAAO,GAAG,MAAM,CAAA;QACvB,aAAa,GAAG,IAAI,CAAA;IACtB,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,MAA0B,EAC1B,WAAiC,0BAA0B,EAAE;IAE7D,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxB,OAAO,GAAG,EAAE;YACV,4BAA4B;QAC9B,CAAC,CAAA;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC1C,MAAM,CAAC,KAAK,GAAG,CAAC,CACd,KAA0B,EAC1B,QAAoD,EACpD,EAAmC,EACnC,EAAE;QACF,MAAM,YAAY,GAAG,OAAO,QAAQ,KAAK,UAAU,CAAA;QACnD,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAA;QAC7C,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAA;QAC/C,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAChH,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QACjD,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;QAC1D,OAAO,QAAQ,CAAC,QAAQ,EAAE,GAA4B,EAAE,QAAQ,CAAC,CAAA;IACnE,CAAC,CAAgC,CAAA;IACjC,OAAO,GAAG,EAAE;QACV,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAA;IACzB,CAAC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,UAAU,CAAC,KAAK,EAAE,CAAA;IAClB,WAAW,CAAC,KAAK,EAAE,CAAA;IACnB,UAAU,CAAC,KAAK,EAAE,CAAA;AACpB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAA8B;IACjE,IAAI,QAAQ,KAAK,MAAM;QAAE,OAAO,SAAS,CAAA;IACzC,OAAO,QAAQ,KAAK,mBAAmB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAA;AACrE,CAAC"}
|
|
@@ -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
|