neoctl 0.2.9 → 0.2.11

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 (117) hide show
  1. package/dist/context/compaction.js +3 -3
  2. package/dist/context/compaction.js.map +1 -1
  3. package/dist/context/prompts.js +5 -1
  4. package/dist/context/prompts.js.map +1 -1
  5. package/dist/core/image-note-prompt.d.ts +8 -0
  6. package/dist/core/image-note-prompt.js +20 -0
  7. package/dist/core/image-note-prompt.js.map +1 -0
  8. package/dist/core/image-notes.d.ts +21 -0
  9. package/dist/core/image-notes.js +112 -0
  10. package/dist/core/image-notes.js.map +1 -0
  11. package/dist/core/image-registry.d.ts +5 -0
  12. package/dist/core/image-registry.js +49 -3
  13. package/dist/core/image-registry.js.map +1 -1
  14. package/dist/core/query-engine.js +6 -1
  15. package/dist/core/query-engine.js.map +1 -1
  16. package/dist/core/query.js +189 -1
  17. package/dist/core/query.js.map +1 -1
  18. package/dist/index.d.ts +3 -0
  19. package/dist/index.js +3 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/model/anthropic-mapper.js +3 -1
  22. package/dist/model/anthropic-mapper.js.map +1 -1
  23. package/dist/model/openai-mappers.js +3 -1
  24. package/dist/model/openai-mappers.js.map +1 -1
  25. package/dist/repl/browser.d.ts +232 -0
  26. package/dist/repl/browser.js +156 -0
  27. package/dist/repl/browser.js.map +1 -0
  28. package/dist/repl/env-file.d.ts +4 -0
  29. package/dist/repl/env-file.js +97 -0
  30. package/dist/repl/env-file.js.map +1 -0
  31. package/dist/repl/foreground-exec.d.ts +10 -0
  32. package/dist/repl/foreground-exec.js +34 -0
  33. package/dist/repl/foreground-exec.js.map +1 -0
  34. package/dist/repl/index.js +141 -2919
  35. package/dist/repl/index.js.map +1 -1
  36. package/dist/repl/login-view.d.ts +75 -0
  37. package/dist/repl/login-view.js +38 -0
  38. package/dist/repl/login-view.js.map +1 -0
  39. package/dist/repl/login.d.ts +14 -0
  40. package/dist/repl/login.js +165 -0
  41. package/dist/repl/login.js.map +1 -0
  42. package/dist/repl/message-rendering.d.ts +99 -0
  43. package/dist/repl/message-rendering.js +476 -0
  44. package/dist/repl/message-rendering.js.map +1 -0
  45. package/dist/repl/prompt-payload.d.ts +9 -0
  46. package/dist/repl/prompt-payload.js +64 -0
  47. package/dist/repl/prompt-payload.js.map +1 -0
  48. package/dist/repl/prompt-view.d.ts +235 -0
  49. package/dist/repl/prompt-view.js +184 -0
  50. package/dist/repl/prompt-view.js.map +1 -0
  51. package/dist/repl/repl-types.d.ts +88 -0
  52. package/dist/repl/repl-types.js +2 -0
  53. package/dist/repl/repl-types.js.map +1 -0
  54. package/dist/repl/runtime.d.ts +33 -0
  55. package/dist/repl/runtime.js +202 -0
  56. package/dist/repl/runtime.js.map +1 -0
  57. package/dist/repl/slash-completion.d.ts +28 -0
  58. package/dist/repl/slash-completion.js +287 -0
  59. package/dist/repl/slash-completion.js.map +1 -0
  60. package/dist/repl/status-panel.d.ts +234 -0
  61. package/dist/repl/status-panel.js +509 -0
  62. package/dist/repl/status-panel.js.map +1 -0
  63. package/dist/repl/terminal.d.ts +19 -0
  64. package/dist/repl/terminal.js +81 -0
  65. package/dist/repl/terminal.js.map +1 -0
  66. package/dist/repl/tool-rendering.d.ts +6 -0
  67. package/dist/repl/tool-rendering.js +502 -0
  68. package/dist/repl/tool-rendering.js.map +1 -0
  69. package/dist/repl/usage.d.ts +17 -0
  70. package/dist/repl/usage.js +57 -0
  71. package/dist/repl/usage.js.map +1 -0
  72. package/dist/session/smoke-session.js +1 -1
  73. package/dist/session/tool-result-memory.d.ts +3 -0
  74. package/dist/session/tool-result-memory.js +9 -19
  75. package/dist/session/tool-result-memory.js.map +1 -1
  76. package/dist/tools/builtins/image-generation-tool.d.ts +13 -0
  77. package/dist/tools/builtins/image-generation-tool.js +131 -7
  78. package/dist/tools/builtins/image-generation-tool.js.map +1 -1
  79. package/dist/tools/builtins/image-loader-tool.d.ts +7 -0
  80. package/dist/tools/builtins/image-loader-tool.js +29 -1
  81. package/dist/tools/builtins/image-loader-tool.js.map +1 -1
  82. package/dist/tools/builtins/image-note-tool.d.ts +29 -0
  83. package/dist/tools/builtins/image-note-tool.js +183 -0
  84. package/dist/tools/builtins/image-note-tool.js.map +1 -0
  85. package/dist/tools/registry.js +21 -2
  86. package/dist/tools/registry.js.map +1 -1
  87. package/dist/tools/run-tool-use.js +47 -7
  88. package/dist/tools/run-tool-use.js.map +1 -1
  89. package/dist/tools/smoke-tool-system.js +5 -3
  90. package/dist/tools/smoke-tool-system.js.map +1 -1
  91. package/dist/web/index.js +2 -0
  92. package/dist/web/index.js.map +1 -1
  93. package/package.json +2 -2
  94. package/scripts/copy-model-metadata.mjs +4 -4
  95. package/scripts/install-ripgrep.cjs +196 -196
  96. package/vendor/ripgrep/darwin-arm64/COPYING +3 -3
  97. package/vendor/ripgrep/darwin-arm64/LICENSE-MIT +21 -21
  98. package/vendor/ripgrep/darwin-arm64/UNLICENSE +24 -24
  99. package/vendor/ripgrep/darwin-arm64/manifest.json +7 -7
  100. package/vendor/ripgrep/darwin-x64/COPYING +3 -3
  101. package/vendor/ripgrep/darwin-x64/LICENSE-MIT +21 -21
  102. package/vendor/ripgrep/darwin-x64/UNLICENSE +24 -24
  103. package/vendor/ripgrep/darwin-x64/manifest.json +7 -7
  104. package/vendor/ripgrep/linux-arm64/COPYING +3 -3
  105. package/vendor/ripgrep/linux-arm64/LICENSE-MIT +21 -21
  106. package/vendor/ripgrep/linux-arm64/UNLICENSE +24 -24
  107. package/vendor/ripgrep/linux-arm64/manifest.json +7 -7
  108. package/vendor/ripgrep/linux-x64/COPYING +3 -3
  109. package/vendor/ripgrep/linux-x64/LICENSE-MIT +21 -21
  110. package/vendor/ripgrep/linux-x64/UNLICENSE +24 -24
  111. package/vendor/ripgrep/linux-x64/manifest.json +7 -7
  112. package/vendor/ripgrep/win32-arm64/manifest.json +7 -7
  113. package/vendor/ripgrep/win32-x64/COPYING +3 -3
  114. package/vendor/ripgrep/win32-x64/LICENSE-MIT +21 -21
  115. package/vendor/ripgrep/win32-x64/UNLICENSE +24 -24
  116. package/vendor/ripgrep/win32-x64/manifest.json +7 -7
  117. package/scripts/patch-ink-clear-terminal.cjs +0 -55
@@ -0,0 +1,476 @@
1
+ import React from "react";
2
+ import { Box, Text } from "ink";
3
+ import stripAnsi from "strip-ansi";
4
+ import wrapAnsi from "wrap-ansi";
5
+ import { estimateMarkdownLineCount, markdownRenderKey, MarkdownText } from "./markdown-renderer.js";
6
+ import { formatToolResultLine, formatToolUse } from "./tool-rendering.js";
7
+ const e = React.createElement;
8
+ const MESSAGE_BLOCK_SPACING_LINES = 1;
9
+ const SUMMARY_BLOCK = {
10
+ maxLines: 6,
11
+ detailIndent: " ",
12
+ };
13
+ const THINKING_COLOR = "#a855f7";
14
+ const THINKING_MARKER = "●";
15
+ const THINKING_SUMMARY_MAX_LINES = 1000;
16
+ export const MessageList = React.memo(function MessageList({ lines, width, liveMaxLines, lineIndexOffset = 0, onMarkdownRenderComplete }) {
17
+ const contentWidth = messageContentWidth(width);
18
+ const toolWidth = toolContentWidth(width);
19
+ return e(Box, { flexDirection: "column" }, ...lines.map((line, index) => e(MessageBlock, {
20
+ key: line.id,
21
+ line,
22
+ width,
23
+ blockIndex: lineIndexOffset + index,
24
+ contentWidth,
25
+ toolWidth,
26
+ liveMaxLines,
27
+ onMarkdownRenderComplete,
28
+ })));
29
+ });
30
+ export function MessageBlock({ line, width, blockIndex, contentWidth, toolWidth, liveMaxLines, onMarkdownRenderComplete }) {
31
+ return e(Box, { flexDirection: "column", marginTop: blockIndex > 0 ? MESSAGE_BLOCK_SPACING_LINES : 0 }, e(MessageLine, { line, width, contentWidth, toolWidth, liveMaxLines, onMarkdownRenderComplete }));
32
+ }
33
+ function MessageLine({ line, width, contentWidth = messageContentWidth(width), toolWidth = toolContentWidth(width), liveMaxLines, onMarkdownRenderComplete }) {
34
+ if (line.previewStyle === "summary") {
35
+ const useRoleMarker = summaryUsesRoleMarker(line);
36
+ const summaryWidth = useRoleMarker ? contentWidth : toolWidth;
37
+ const display = displayWindowForLine(line, summaryWidth, line.live ? liveMaxLines : undefined);
38
+ return e(Box, { flexDirection: "row" }, useRoleMarker ? e(Text, { color: markerColorForKind(line.kind) }, messageRoleMarker(line.kind)) : null, e(Box, { flexDirection: "column", width: summaryWidth }, ...renderDisplayText(line, summaryWidth, display.maxLines, display.skipTop)));
39
+ }
40
+ const useRoleMarker = !titleProvidesToolMarker(line);
41
+ const lineWidth = useRoleMarker ? contentWidth : toolWidth;
42
+ const clipPendingMarkdown = !line.live && onMarkdownRenderComplete !== undefined && lineNeedsDynamicRender(line, lineWidth);
43
+ const display = displayWindowForLine(line, lineWidth, line.live || clipPendingMarkdown ? liveMaxLines : undefined);
44
+ const contentNodes = [];
45
+ if (line.title)
46
+ contentNodes.push(renderBlockTitle(line));
47
+ if (line.bodyTitle)
48
+ contentNodes.push(e(Text, { key: `body-title-${line.id}`, bold: true }, line.bodyTitle));
49
+ contentNodes.push(...renderDisplayText(line, lineWidth, display.maxLines, display.skipTop, onMarkdownRenderComplete));
50
+ return e(Box, { flexDirection: "row" }, useRoleMarker ? e(Text, { color: markerColorForKind(line.kind) }, messageRoleMarker(line.kind)) : null, e(Box, { flexDirection: "column", width: lineWidth }, ...contentNodes));
51
+ }
52
+ function displayWindowForLine(line, width, maxLines) {
53
+ if (maxLines === undefined)
54
+ return { skipTop: 0 };
55
+ const safeMaxLines = Math.max(1, maxLines);
56
+ const lineCount = estimateRenderedLineCount(line, width);
57
+ return {
58
+ maxLines: safeMaxLines,
59
+ skipTop: Math.max(0, lineCount - safeMaxLines),
60
+ };
61
+ }
62
+ function estimateRenderedLineCount(line, width) {
63
+ if (line.previewStyle === "summary")
64
+ return renderSummaryLines(line, width).length;
65
+ if (line.format === "ansi")
66
+ return wrapAnsi(line.text, Math.max(10, width), { hard: true, trim: false }).split("\n").length;
67
+ return estimateMarkdownLineCount(line.text, width);
68
+ }
69
+ export function lineNeedsDynamicRender(line, width) {
70
+ if (titleProvidesToolMarker(line))
71
+ return false;
72
+ if (line.live || line.pendingReplacement)
73
+ return true;
74
+ if (line.previewStyle === "summary" || line.format === "ansi")
75
+ return false;
76
+ return line.renderedKey !== markdownRenderKey(line.text, line.kind, width);
77
+ }
78
+ export function lineRenderContentWidth(line, terminalWidth) {
79
+ return titleProvidesToolMarker(line) ? toolContentWidth(terminalWidth) : messageContentWidth(terminalWidth);
80
+ }
81
+ function renderDisplayText(line, width, maxLines, skipTop = 0, onMarkdownRenderComplete) {
82
+ if (line.previewStyle === "summary")
83
+ return renderSummaryBlock(line, width, maxLines, skipTop);
84
+ if (line.format === "ansi")
85
+ return renderAnsiBlock(line.text, width, maxLines, skipTop);
86
+ const shouldAsyncRenderMarkdown = !line.live && onMarkdownRenderComplete !== undefined;
87
+ return [e(MarkdownText, {
88
+ key: `markdown-${line.id}`,
89
+ text: line.text,
90
+ kind: line.kind,
91
+ width,
92
+ maxLines,
93
+ skipLines: skipTop,
94
+ asyncRender: shouldAsyncRenderMarkdown,
95
+ onRenderComplete: shouldAsyncRenderMarkdown ? (renderKey) => onMarkdownRenderComplete(line.id, renderKey) : undefined,
96
+ })];
97
+ }
98
+ function renderSummaryLines(line, width) {
99
+ const content = line.text;
100
+ const detailWidth = Math.max(10, width - SUMMARY_BLOCK.detailIndent.length);
101
+ const title = summaryTitle(line);
102
+ const rawLines = content.replace(/\r\n/g, "\n").split("\n");
103
+ const wrapped = rawLines.flatMap((rawLine, index) => {
104
+ const lineWidth = index === 0 && !title ? width : detailWidth;
105
+ return wrapAnsi(rawLine, Math.max(10, lineWidth), { hard: true, trim: false }).split("\n");
106
+ });
107
+ const maxLines = line.summaryMaxLines ?? SUMMARY_BLOCK.maxLines;
108
+ const preview = [title, ...wrapped].filter((value) => stripAnsi(value).length > 0).slice(0, maxLines);
109
+ if (wrapped.length + (title ? 1 : 0) > maxLines && preview.length > 0) {
110
+ preview[preview.length - 1] = truncateAnsi(preview[preview.length - 1], Math.max(1, detailWidth - 1)) + "\u2026";
111
+ }
112
+ return preview.length ? preview : [""];
113
+ }
114
+ function summaryTitle(line) {
115
+ if (summaryUsesRoleMarker(line))
116
+ return "";
117
+ const title = line.title ?? titleForKind(line.kind);
118
+ if (!line.titleStatus)
119
+ return title;
120
+ return `${title} ${titleStatusMarker(line.titleStatus)}`;
121
+ }
122
+ function summaryUsesRoleMarker(line) {
123
+ return line.previewStyle === "summary" && (line.kind === "system" || line.kind === "meta");
124
+ }
125
+ function titleProvidesToolMarker(line) {
126
+ return !!line.title && (line.title.startsWith("\u25C7 ") || line.title.startsWith("\u25C6 "));
127
+ }
128
+ function titleStatusMarker(status) {
129
+ return status === "success" ? "\u2713" : "\u2717";
130
+ }
131
+ function titleStatusColor(status) {
132
+ return status === "success" ? "green" : "red";
133
+ }
134
+ function renderBlockTitle(line) {
135
+ const title = line.title ?? titleForKind(line.kind);
136
+ if (!line.titleStatus)
137
+ return e(Text, { key: `title-${line.id}`, color: colorForKind(line.kind), bold: true }, title);
138
+ return e(Text, { key: `title-${line.id}`, color: colorForKind(line.kind), bold: true }, `${title} `, e(Text, { color: titleStatusColor(line.titleStatus), bold: true }, titleStatusMarker(line.titleStatus)));
139
+ }
140
+ function renderSummaryBlock(line, width, maxLines, skipTop = 0) {
141
+ const allPreviewLines = renderSummaryLines(line, width);
142
+ const preview = clipStrings(allPreviewLines, maxLines, skipTop);
143
+ return preview.map((previewLine, index) => {
144
+ const sourceIndex = skipTop + index;
145
+ const detail = sourceIndex > 0;
146
+ const text = detail ? `${SUMMARY_BLOCK.detailIndent}${previewLine}` : previewLine;
147
+ if (!detail && line.titleStatus) {
148
+ const marker = titleStatusMarker(line.titleStatus);
149
+ const markerSuffix = ` ${marker}`;
150
+ const titleText = text.endsWith(markerSuffix) ? text.slice(0, -marker.length) : `${text} `;
151
+ return e(Text, {
152
+ key: `summary-${line.id}-${index}`,
153
+ color: colorForKind(line.kind),
154
+ bold: true,
155
+ }, titleText, e(Text, { color: titleStatusColor(line.titleStatus), bold: true }, marker));
156
+ }
157
+ if (line.format === "ansi") {
158
+ const baseStyle = detail
159
+ ? { color: "gray", dimColor: true }
160
+ : { color: colorForKind(line.kind), bold: true };
161
+ return e(Text, { key: `summary-${line.id}-${index}` }, ...renderAnsiInline(text, baseStyle));
162
+ }
163
+ return e(Text, {
164
+ key: `summary-${line.id}-${index}`,
165
+ color: detail ? "gray" : colorForKind(line.kind),
166
+ dimColor: detail,
167
+ bold: !detail,
168
+ }, text);
169
+ });
170
+ }
171
+ function renderAnsiBlock(text, width, maxLines, skipTop = 0) {
172
+ const lines = clipStrings(wrapAnsi(text, Math.max(10, width), { hard: true, trim: false }).split("\n"), maxLines, skipTop);
173
+ return lines.map((line, index) => e(Text, { key: `ansi-${index}` }, ...renderAnsiInline(line)));
174
+ }
175
+ function clipStrings(lines, maxLines, skipTop = 0) {
176
+ const start = Math.max(0, skipTop);
177
+ if (maxLines === undefined)
178
+ return lines.slice(start);
179
+ if (maxLines <= 0)
180
+ return [];
181
+ return lines.slice(start, start + maxLines);
182
+ }
183
+ function renderAnsiInline(text, baseStyle = {}) {
184
+ const nodes = [];
185
+ const pattern = /\x1b\[([0-9;]*)m/g;
186
+ let lastIndex = 0;
187
+ let style = { ...baseStyle };
188
+ let match;
189
+ while ((match = pattern.exec(text)) !== null) {
190
+ if (match.index > lastIndex) {
191
+ nodes.push(e(Text, { key: `ansi-${nodes.length}`, ...style }, text.slice(lastIndex, match.index)));
192
+ }
193
+ style = nextAnsiStyle(style, match[1], baseStyle);
194
+ lastIndex = match.index + match[0].length;
195
+ }
196
+ if (lastIndex < text.length)
197
+ nodes.push(e(Text, { key: `ansi-${nodes.length}`, ...style }, text.slice(lastIndex)));
198
+ return nodes.length ? nodes : [e(Text, { key: "ansi-empty", ...baseStyle }, "")];
199
+ }
200
+ function nextAnsiStyle(current, rawCodes, baseStyle = {}) {
201
+ const codes = rawCodes ? rawCodes.split(";").filter(Boolean).map((code) => Number(code)) : [0];
202
+ let next = { ...current };
203
+ for (let index = 0; index < codes.length; index += 1) {
204
+ const code = codes[index] ?? 0;
205
+ if (code === 0)
206
+ next = { ...baseStyle };
207
+ else if (code === 1)
208
+ next.bold = true;
209
+ else if (code === 2)
210
+ next.dimColor = true;
211
+ else if (code === 3)
212
+ next.italic = true;
213
+ else if (code === 4)
214
+ next.underline = true;
215
+ else if (code === 22) {
216
+ next.bold = undefined;
217
+ next.dimColor = undefined;
218
+ }
219
+ else if (code === 23)
220
+ next.italic = undefined;
221
+ else if (code === 24)
222
+ next.underline = undefined;
223
+ else if (code === 39)
224
+ next.color = undefined;
225
+ else if (code === 49)
226
+ next.backgroundColor = undefined;
227
+ else if (code >= 30 && code <= 37)
228
+ next.color = ANSI_COLORS[code - 30];
229
+ else if (code >= 90 && code <= 97)
230
+ next.color = ANSI_BRIGHT_COLORS[code - 90];
231
+ else if (code >= 40 && code <= 47)
232
+ next.backgroundColor = ANSI_COLORS[code - 40];
233
+ else if (code >= 100 && code <= 107)
234
+ next.backgroundColor = ANSI_BRIGHT_COLORS[code - 100];
235
+ else if (code === 38 || code === 48) {
236
+ const isForeground = code === 38;
237
+ const mode = codes[index + 1];
238
+ if (mode === 5) {
239
+ const color = xtermColor(codes[index + 2]);
240
+ if (isForeground)
241
+ next.color = color;
242
+ else
243
+ next.backgroundColor = color;
244
+ index += 2;
245
+ }
246
+ else if (mode === 2) {
247
+ const color = rgbColor(codes[index + 2], codes[index + 3], codes[index + 4]);
248
+ if (isForeground)
249
+ next.color = color;
250
+ else
251
+ next.backgroundColor = color;
252
+ index += 4;
253
+ }
254
+ }
255
+ }
256
+ return next;
257
+ }
258
+ const ANSI_COLORS = ["black", "red", "green", "yellow", "blue", "magenta", "cyan", "white"];
259
+ const ANSI_BRIGHT_COLORS = ["gray", "redBright", "greenBright", "yellowBright", "blueBright", "magentaBright", "cyanBright", "whiteBright"];
260
+ function xtermColor(value) {
261
+ if (value === undefined || Number.isNaN(value))
262
+ return undefined;
263
+ if (value < 8)
264
+ return ANSI_COLORS[value];
265
+ if (value < 16)
266
+ return ANSI_BRIGHT_COLORS[value - 8];
267
+ return undefined;
268
+ }
269
+ function rgbColor(red, green, blue) {
270
+ if ([red, green, blue].some((value) => value === undefined || Number.isNaN(value)))
271
+ return undefined;
272
+ return `#${[red, green, blue].map((value) => Math.max(0, Math.min(255, value ?? 0)).toString(16).padStart(2, "0")).join("")}`;
273
+ }
274
+ function hasAnsi(text) {
275
+ return /\x1b\[[0-9;]*m/.test(text);
276
+ }
277
+ function messageContentWidth(columns) {
278
+ return Math.max(20, Math.min(columns - 4, 120));
279
+ }
280
+ function toolContentWidth(columns) {
281
+ return Math.max(20, Math.min(columns - 2, 140));
282
+ }
283
+ export function renderMessage(message, append, activeAssistantId, options = {}) {
284
+ if (message.metadata?.syntheticToolUse === true)
285
+ return false;
286
+ if (message.role === "progress" || message.isMeta)
287
+ return false;
288
+ if (message.role === "assistant" && activeAssistantId !== undefined && message.blocks.some((block) => block.type === "text")) {
289
+ return true;
290
+ }
291
+ let rendered = false;
292
+ for (const block of message.blocks) {
293
+ if (block.type === "text") {
294
+ const kind = kindForRole(message.role);
295
+ if (kind === "meta")
296
+ continue;
297
+ if (kind === "system")
298
+ append({ kind, title: titleForRole(message.role), text: block.text, previewStyle: "summary" });
299
+ else
300
+ append({ kind, text: block.text });
301
+ rendered = true;
302
+ }
303
+ if (block.type === "image") {
304
+ const kind = kindForRole(message.role);
305
+ if (kind === "meta")
306
+ continue;
307
+ append({ kind, text: block.label ?? `[image ${block.mimeType}]` });
308
+ rendered = true;
309
+ }
310
+ if (block.type === "thinking") {
311
+ if (options.includeThinkingBlocks === false)
312
+ continue;
313
+ append(thinkingLine(block.text));
314
+ rendered = true;
315
+ }
316
+ if (block.type === "tool_use" && options.includeToolUseBlocks) {
317
+ append({ ...formatToolUse(block), live: false });
318
+ rendered = true;
319
+ }
320
+ if (block.type === "tool_result") {
321
+ append(formatToolResultLine(block.name, block.output, block.ok));
322
+ rendered = true;
323
+ }
324
+ }
325
+ return rendered;
326
+ }
327
+ export function renderToolResultMessage(message, append, renderedToolResultIds) {
328
+ let rendered = false;
329
+ for (const block of message.blocks) {
330
+ if (block.type !== "tool_result")
331
+ continue;
332
+ renderedToolResultIds.add(block.toolUseId);
333
+ append(formatToolResultLine(block.name, block.output, block.ok));
334
+ rendered = true;
335
+ }
336
+ return rendered;
337
+ }
338
+ export function assistantText(message) {
339
+ const text = message.blocks
340
+ .filter((block) => block.type === "text")
341
+ .map((block) => block.text)
342
+ .join("");
343
+ return text.length > 0 ? text : undefined;
344
+ }
345
+ export function thinkingText(message) {
346
+ const text = message.blocks
347
+ .filter((block) => block.type === "thinking")
348
+ .map((block) => block.text)
349
+ .join("");
350
+ return text.length > 0 ? text : undefined;
351
+ }
352
+ function colorForKind(kind) {
353
+ if (kind === "user")
354
+ return "cyan";
355
+ if (kind === "assistant")
356
+ return "green";
357
+ if (kind === "thinking")
358
+ return THINKING_COLOR;
359
+ if (kind === "tool")
360
+ return "#d4b04c";
361
+ if (kind === "error")
362
+ return "red";
363
+ if (kind === "meta")
364
+ return "gray";
365
+ return "white";
366
+ }
367
+ function markerColorForKind(kind) {
368
+ if (kind === "thinking")
369
+ return THINKING_COLOR;
370
+ return colorForKind(kind);
371
+ }
372
+ function messageRoleMarker(kind) {
373
+ if (kind === "thinking")
374
+ return `${THINKING_MARKER} `;
375
+ return "● ";
376
+ }
377
+ function kindForRole(role) {
378
+ if (role === "user")
379
+ return "user";
380
+ if (role === "assistant")
381
+ return "assistant";
382
+ if (role === "tool_result")
383
+ return "tool";
384
+ if (role === "progress")
385
+ return "meta";
386
+ if (role === "system")
387
+ return "meta";
388
+ return "system";
389
+ }
390
+ function titleForKind(kind) {
391
+ if (kind === "thinking")
392
+ return `${THINKING_MARKER} think`;
393
+ if (kind === "tool")
394
+ return "Tool";
395
+ if (kind === "error")
396
+ return "Error";
397
+ if (kind === "meta")
398
+ return "Meta";
399
+ if (kind === "system")
400
+ return "System";
401
+ if (kind === "user")
402
+ return "User";
403
+ return "Assistant";
404
+ }
405
+ function titleForRole(role) {
406
+ if (role === "progress")
407
+ return "Meta";
408
+ if (role === "system")
409
+ return "System";
410
+ if (role === "tool_result")
411
+ return "Tool result";
412
+ return titleForKind(kindForRole(role));
413
+ }
414
+ export function systemLine(text, summaryMaxLines) {
415
+ return {
416
+ kind: "system",
417
+ title: "System",
418
+ text,
419
+ previewStyle: "summary",
420
+ summaryMaxLines,
421
+ };
422
+ }
423
+ export function thinkingLine(text, live = false) {
424
+ return {
425
+ kind: "thinking",
426
+ title: titleForKind("thinking"),
427
+ text,
428
+ previewStyle: "summary",
429
+ summaryMaxLines: THINKING_SUMMARY_MAX_LINES,
430
+ live,
431
+ };
432
+ }
433
+ export function metaLine(text) {
434
+ return {
435
+ kind: "meta",
436
+ title: "Meta",
437
+ text,
438
+ previewStyle: "summary",
439
+ };
440
+ }
441
+ function truncateAnsi(value, maxLength) {
442
+ if (stripAnsi(value).length <= maxLength)
443
+ return value;
444
+ if (maxLength <= 0)
445
+ return "";
446
+ let visibleLength = 0;
447
+ let index = 0;
448
+ let output = "";
449
+ const ansiPattern = /\x1b\[[0-9;]*m/y;
450
+ while (index < value.length && visibleLength < maxLength) {
451
+ ansiPattern.lastIndex = index;
452
+ const ansiMatch = ansiPattern.exec(value);
453
+ if (ansiMatch) {
454
+ output += ansiMatch[0];
455
+ index = ansiPattern.lastIndex;
456
+ continue;
457
+ }
458
+ const codePoint = value.codePointAt(index);
459
+ if (codePoint === undefined)
460
+ break;
461
+ const char = String.fromCodePoint(codePoint);
462
+ output += char;
463
+ visibleLength += 1;
464
+ index += char.length;
465
+ }
466
+ return hasAnsi(output) ? `${output}\x1b[0m` : output;
467
+ }
468
+ function fitToWidth(value, width) {
469
+ const stripped = stripAnsi(value);
470
+ if (stripped.length === width)
471
+ return stripped;
472
+ if (stripped.length > width)
473
+ return stripped.slice(0, width);
474
+ return stripped.padEnd(width, " ");
475
+ }
476
+ //# sourceMappingURL=message-rendering.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-rendering.js","sourceRoot":"","sources":["../../src/repl/message-rendering.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGpG,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE1E,MAAM,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC;AAE9B,MAAM,2BAA2B,GAAG,CAAC,CAAC;AACtC,MAAM,aAAa,GAAG;IACpB,QAAQ,EAAE,CAAC;IACX,YAAY,EAAE,MAAM;CACrB,CAAC;AACF,MAAM,cAAc,GAAG,SAAS,CAAC;AACjC,MAAM,eAAe,GAAG,GAAG,CAAC;AAC5B,MAAM,0BAA0B,GAAG,IAAI,CAAC;AAExC,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,WAAW,CACxD,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,eAAe,GAAG,CAAC,EAAE,wBAAwB,EAO1E;IAED,MAAM,YAAY,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC1C,OAAO,CAAC,CACN,GAAG,EACH,EAAE,aAAa,EAAE,QAAQ,EAAE,EAC3B,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,EAAE;QAC5C,GAAG,EAAE,IAAI,CAAC,EAAE;QACZ,IAAI;QACJ,KAAK;QACL,UAAU,EAAE,eAAe,GAAG,KAAK;QACnC,YAAY;QACZ,SAAS;QACT,YAAY;QACZ,wBAAwB;KACzB,CAAC,CAAC,CACJ,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,MAAM,UAAU,YAAY,CAC1B,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,wBAAwB,EASzF;IAED,OAAO,CAAC,CACN,GAAG,EACH,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,EAAE,EACxF,CAAC,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,wBAAwB,EAAE,CAAC,CACjG,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAClB,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,GAAG,mBAAmB,CAAC,KAAK,CAAC,EAAE,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,wBAAwB,EAQpI;IAED,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACpC,MAAM,aAAa,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9D,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC/F,OAAO,CAAC,CACN,GAAG,EACH,EAAE,aAAa,EAAE,KAAK,EAAE,EACxB,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EACtG,CAAC,CACC,GAAG,EACH,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,EAChD,GAAG,iBAAiB,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CAC5E,CACF,CAAC;IACJ,CAAC;IACD,MAAM,aAAa,GAAG,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3D,MAAM,mBAAmB,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,wBAAwB,KAAK,SAAS,IAAI,sBAAsB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC5H,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,IAAI,mBAAmB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACnH,MAAM,YAAY,GAAsB,EAAE,CAAC;IAC3C,IAAI,IAAI,CAAC,KAAK;QAAE,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,IAAI,IAAI,CAAC,SAAS;QAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,cAAc,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAC7G,YAAY,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,EAAE,wBAAwB,CAAC,CAAC,CAAC;IACtH,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,EACpC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EACtG,CAAC,CACC,GAAG,EACH,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,EAC7C,GAAG,YAAY,CAChB,CACF,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAY,EAAE,KAAa,EAAE,QAA4B;IACrF,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IAClD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,yBAAyB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACzD,OAAO;QACL,QAAQ,EAAE,YAAY;QACtB,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC;KAC/C,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB,CAAC,IAAY,EAAE,KAAa;IAC5D,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;QAAE,OAAO,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC;IACnF,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IAC5H,OAAO,yBAAyB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAY,EAAE,KAAa;IAChE,IAAI,uBAAuB,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAChD,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,kBAAkB;QAAE,OAAO,IAAI,CAAC;IACtD,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IAC5E,OAAO,IAAI,CAAC,WAAW,KAAK,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAY,EAAE,aAAqB;IACxE,OAAO,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;AAC9G,CAAC;AAED,SAAS,iBAAiB,CACxB,IAAY,EACZ,KAAa,EACb,QAAiB,EACjB,OAAO,GAAG,CAAC,EACX,wBAAsE;IAEtE,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;QAAE,OAAO,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC/F,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACxF,MAAM,yBAAyB,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,wBAAwB,KAAK,SAAS,CAAC;IACvF,OAAO,CAAC,CAAC,CAAC,YAAY,EAAE;YACtB,GAAG,EAAE,YAAY,IAAI,CAAC,EAAE,EAAE;YAC1B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK;YACL,QAAQ;YACR,SAAS,EAAE,OAAO;YAClB,WAAW,EAAE,yBAAyB;YACtC,gBAAgB,EAAE,yBAAyB,CAAC,CAAC,CAAC,CAAC,SAAiB,EAAE,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;SAC9H,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY,EAAE,KAAa;IACrD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;IAC1B,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,GAAG,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC5E,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;QAClD,MAAM,SAAS,GAAG,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC;QAC9D,OAAO,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7F,CAAC,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,IAAI,aAAa,CAAC,QAAQ,CAAC;IAChE,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,GAAG,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACtG,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtE,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;IACnH,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,qBAAqB,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,IAAI,CAAC,IAAI,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC;IACpC,OAAO,GAAG,KAAK,IAAI,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY;IACzC,OAAO,IAAI,CAAC,YAAY,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;AAC7F,CAAC;AAED,SAAS,uBAAuB,CAAC,IAAY;IAC3C,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;AAChG,CAAC;AAED,SAAS,iBAAiB,CAAC,MAA0C;IACnE,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;AACpD,CAAC;AAED,SAAS,gBAAgB,CAAC,MAA0C;IAClE,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;AAChD,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,IAAI,CAAC,IAAI,CAAC,WAAW;QAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,SAAS,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;IACtH,OAAO,CAAC,CACN,IAAI,EACJ,EAAE,GAAG,EAAE,SAAS,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EACvE,GAAG,KAAK,GAAG,EACX,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CACxG,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY,EAAE,KAAa,EAAE,QAAiB,EAAE,OAAO,GAAG,CAAC;IACrF,MAAM,eAAe,GAAG,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,WAAW,CAAC,eAAe,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE;QACxC,MAAM,WAAW,GAAG,OAAO,GAAG,KAAK,CAAC;QACpC,MAAM,MAAM,GAAG,WAAW,GAAG,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,YAAY,GAAG,WAAW,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;QAClF,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACnD,MAAM,YAAY,GAAG,IAAI,MAAM,EAAE,CAAC;YAClC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC;YAC3F,OAAO,CAAC,CACN,IAAI,EACJ;gBACE,GAAG,EAAE,WAAW,IAAI,CAAC,EAAE,IAAI,KAAK,EAAE;gBAClC,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC9B,IAAI,EAAE,IAAI;aACX,EACD,SAAS,EACT,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,CAAC,CAC3E,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAc,MAAM;gBACjC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;gBACnC,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YACnD,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,WAAW,IAAI,CAAC,EAAE,IAAI,KAAK,EAAE,EAAE,EAAE,GAAG,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;QAC/F,CAAC;QACD,OAAO,CAAC,CACN,IAAI,EACJ;YACE,GAAG,EAAE,WAAW,IAAI,CAAC,EAAE,IAAI,KAAK,EAAE;YAClC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;YAChD,QAAQ,EAAE,MAAM;YAChB,IAAI,EAAE,CAAC,MAAM;SACd,EACD,IAAI,CACL,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,eAAe,CAAC,IAAY,EAAE,KAAa,EAAE,QAAiB,EAAE,OAAO,GAAG,CAAC;IAClF,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC3H,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,QAAQ,KAAK,EAAE,EAAE,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClG,CAAC;AAED,SAAS,WAAW,CAAC,KAAe,EAAE,QAA4B,EAAE,OAAO,GAAG,CAAC;IAC7E,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACnC,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACtD,IAAI,QAAQ,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAC7B,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,QAAQ,CAAC,CAAC;AAC9C,CAAC;AACD,SAAS,gBAAgB,CAAC,IAAY,EAAE,YAAuB,EAAE;IAC/D,MAAM,KAAK,GAAsB,EAAE,CAAC;IACpC,MAAM,OAAO,GAAG,mBAAmB,CAAC;IACpC,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,KAAK,GAAc,EAAE,GAAG,SAAS,EAAE,CAAC;IACxC,IAAI,KAA6B,CAAC;IAElC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC7C,IAAI,KAAK,CAAC,KAAK,GAAG,SAAS,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,QAAQ,KAAK,CAAC,MAAM,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACrG,CAAC;QACD,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAClD,SAAS,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC5C,CAAC;IAED,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,QAAQ,KAAK,CAAC,MAAM,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACnH,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AACnF,CAAC;AAWD,SAAS,aAAa,CAAC,OAAkB,EAAE,QAA4B,EAAE,YAAuB,EAAE;IAChG,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/F,IAAI,IAAI,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;IAC1B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,IAAI,KAAK,CAAC;YAAE,IAAI,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC;aACnC,IAAI,IAAI,KAAK,CAAC;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;aACjC,IAAI,IAAI,KAAK,CAAC;YAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;aACrC,IAAI,IAAI,KAAK,CAAC;YAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;aACnC,IAAI,IAAI,KAAK,CAAC;YAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;aACtC,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;YACrB,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;YACtB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC5B,CAAC;aAAM,IAAI,IAAI,KAAK,EAAE;YAAE,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;aAC3C,IAAI,IAAI,KAAK,EAAE;YAAE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;aAC5C,IAAI,IAAI,KAAK,EAAE;YAAE,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;aACxC,IAAI,IAAI,KAAK,EAAE;YAAE,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;aAClD,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE;YAAE,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;aAClE,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE;YAAE,IAAI,CAAC,KAAK,GAAG,kBAAkB,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;aACzE,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE;YAAE,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;aAC5E,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG;YAAE,IAAI,CAAC,eAAe,GAAG,kBAAkB,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;aACtF,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;YACpC,MAAM,YAAY,GAAG,IAAI,KAAK,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAC9B,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC3C,IAAI,YAAY;oBAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;;oBAChC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;gBAClC,KAAK,IAAI,CAAC,CAAC;YACb,CAAC;iBAAM,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACtB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC7E,IAAI,YAAY;oBAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;;oBAChC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;gBAClC,KAAK,IAAI,CAAC,CAAC;YACb,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAC5F,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;AAE5I,SAAS,UAAU,CAAC,KAAyB;IAC3C,IAAI,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACjE,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,KAAK,GAAG,EAAE;QAAE,OAAO,kBAAkB,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IACrD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,QAAQ,CAAC,GAAuB,EAAE,KAAyB,EAAE,IAAwB;IAC5F,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACrG,OAAO,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AAChI,CAAC;AAED,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAe;IAC1C,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAe;IACvC,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,OAAgB,EAChB,MAA4C,EAC5C,iBAA0B,EAC1B,UAA+E,EAAE;IAEjF,IAAI,OAAO,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAChE,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,iBAAiB,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,CAAC;QAC7H,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,IAAI,KAAK,MAAM;gBAAE,SAAS;YAC9B,IAAI,IAAI,KAAK,QAAQ;gBAAE,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC;;gBACjH,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACxC,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,IAAI,KAAK,MAAM;gBAAE,SAAS;YAC9B,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,IAAI,UAAU,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;YACnE,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC9B,IAAI,OAAO,CAAC,qBAAqB,KAAK,KAAK;gBAAE,SAAS;YACtD,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACjC,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;YAC9D,MAAM,CAAC,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACjD,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YACjC,MAAM,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YACjE,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,OAAgB,EAChB,MAA4C,EAC5C,qBAAkC;IAElC,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnC,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa;YAAE,SAAS;QAC3C,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC3C,MAAM,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QACjE,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM;SACxB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;SACxC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;SAC1B,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM;SACxB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC;SAC5C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;SAC1B,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5C,CAAC;AAED,SAAS,YAAY,CAAC,IAAoB;IACxC,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACnC,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,OAAO,CAAC;IACzC,IAAI,IAAI,KAAK,UAAU;QAAE,OAAO,cAAc,CAAC;IAC/C,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,SAAS,CAAC;IACtC,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IACnC,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACnC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAoB;IAC9C,IAAI,IAAI,KAAK,UAAU;QAAE,OAAO,cAAc,CAAC;IAC/C,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAqB;IAC9C,IAAI,IAAI,KAAK,UAAU;QAAE,OAAO,GAAG,eAAe,GAAG,CAAC;IACtD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,WAAW,CAAC,IAAqB;IACxC,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACnC,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,WAAW,CAAC;IAC7C,IAAI,IAAI,KAAK,aAAa;QAAE,OAAO,MAAM,CAAC;IAC1C,IAAI,IAAI,KAAK,UAAU;QAAE,OAAO,MAAM,CAAC;IACvC,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC;IACrC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,YAAY,CAAC,IAAoB;IACxC,IAAI,IAAI,KAAK,UAAU;QAAE,OAAO,GAAG,eAAe,QAAQ,CAAC;IAC3D,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACnC,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,OAAO,CAAC;IACrC,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACnC,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IACvC,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACnC,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,YAAY,CAAC,IAAqB;IACzC,IAAI,IAAI,KAAK,UAAU;QAAE,OAAO,MAAM,CAAC;IACvC,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IACvC,IAAI,IAAI,KAAK,aAAa;QAAE,OAAO,aAAa,CAAC;IACjD,OAAO,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,eAAwB;IAC/D,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,QAAQ;QACf,IAAI;QACJ,YAAY,EAAE,SAAS;QACvB,eAAe;KAChB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,IAAI,GAAG,KAAK;IACrD,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,YAAY,CAAC,UAAU,CAAC;QAC/B,IAAI;QACJ,YAAY,EAAE,SAAS;QACvB,eAAe,EAAE,0BAA0B;QAC3C,IAAI;KACL,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,MAAM;QACb,IAAI;QACJ,YAAY,EAAE,SAAS;KACxB,CAAC;AACJ,CAAC;AAGD,SAAS,YAAY,CAAC,KAAa,EAAE,SAAiB;IACpD,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,SAAS;QAAE,OAAO,KAAK,CAAC;IACvD,IAAI,SAAS,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAE9B,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,MAAM,WAAW,GAAG,iBAAiB,CAAC;IAEtC,OAAO,KAAK,GAAG,KAAK,CAAC,MAAM,IAAI,aAAa,GAAG,SAAS,EAAE,CAAC;QACzD,WAAW,CAAC,SAAS,GAAG,KAAK,CAAC;QAC9B,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;YACvB,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC;YAC9B,SAAS;QACX,CAAC;QAED,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,SAAS,KAAK,SAAS;YAAE,MAAM;QACnC,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAC7C,MAAM,IAAI,IAAI,CAAC;QACf,aAAa,IAAI,CAAC,CAAC;QACnB,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;AACvD,CAAC;AAID,SAAS,UAAU,CAAC,KAAa,EAAE,KAAa;IAC9C,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,QAAQ,CAAC,MAAM,KAAK,KAAK;QAAE,OAAO,QAAQ,CAAC;IAC/C,IAAI,QAAQ,CAAC,MAAM,GAAG,KAAK;QAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC7D,OAAO,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACrC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { MessageBlock } from "../types/messages.js";
2
+ import type { ClipboardAttachment } from "./repl-types.js";
3
+ export declare function shouldFoldClipboardText(text: string): boolean;
4
+ export declare function attachmentsForText(text: string, attachments: readonly ClipboardAttachment[]): ClipboardAttachment[];
5
+ export declare function buildPromptPayload(displayText: string, attachments: readonly ClipboardAttachment[]): {
6
+ text: string;
7
+ blocks?: MessageBlock[];
8
+ };
9
+ export declare function escapeRegExp(value: string): string;
@@ -0,0 +1,64 @@
1
+ export function shouldFoldClipboardText(text) {
2
+ return text.length >= LONG_CLIPBOARD_TEXT_THRESHOLD;
3
+ }
4
+ export function attachmentsForText(text, attachments) {
5
+ return attachments.filter((attachment) => text.includes(attachment.label));
6
+ }
7
+ export function buildPromptPayload(displayText, attachments) {
8
+ const activeAttachments = attachmentsForText(displayText, attachments);
9
+ if (activeAttachments.length === 0)
10
+ return { text: displayText };
11
+ const blocks = [];
12
+ let cursor = 0;
13
+ while (cursor < displayText.length) {
14
+ const next = nextAttachmentOccurrence(displayText, activeAttachments, cursor);
15
+ if (!next) {
16
+ pushTextBlock(blocks, displayText.slice(cursor));
17
+ break;
18
+ }
19
+ pushTextBlock(blocks, displayText.slice(cursor, next.index));
20
+ if (next.attachment.kind === "text" && next.attachment.text !== undefined) {
21
+ pushTextBlock(blocks, next.attachment.text);
22
+ }
23
+ else if (next.attachment.kind === "image" && next.attachment.image) {
24
+ blocks.push({ type: "image", mimeType: next.attachment.image.mimeType, data: next.attachment.image.data, label: next.attachment.label });
25
+ }
26
+ cursor = next.index + next.attachment.label.length;
27
+ }
28
+ const text = blocks
29
+ .map((block) => {
30
+ if (block.type === "text")
31
+ return block.text;
32
+ if (block.type === "image")
33
+ return block.label ?? "[image]";
34
+ return "";
35
+ })
36
+ .join("");
37
+ return { text, blocks };
38
+ }
39
+ function nextAttachmentOccurrence(text, attachments, start) {
40
+ let best;
41
+ for (const attachment of attachments) {
42
+ const index = text.indexOf(attachment.label, start);
43
+ if (index === -1)
44
+ continue;
45
+ if (!best || index < best.index)
46
+ best = { index, attachment };
47
+ }
48
+ return best;
49
+ }
50
+ function pushTextBlock(blocks, text) {
51
+ if (!text)
52
+ return;
53
+ const previous = blocks[blocks.length - 1];
54
+ if (previous?.type === "text") {
55
+ previous.text += text;
56
+ return;
57
+ }
58
+ blocks.push({ type: "text", text });
59
+ }
60
+ export function escapeRegExp(value) {
61
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
62
+ }
63
+ const LONG_CLIPBOARD_TEXT_THRESHOLD = 200;
64
+ //# sourceMappingURL=prompt-payload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-payload.js","sourceRoot":"","sources":["../../src/repl/prompt-payload.ts"],"names":[],"mappings":"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"}