@kenkaiiii/ggcoder 4.8.1 → 4.8.2
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/dist/ui/components/AssistantMessage.test.js +7 -1
- package/dist/ui/components/AssistantMessage.test.js.map +1 -1
- package/dist/ui/components/InputArea.test.js +11 -5
- package/dist/ui/components/InputArea.test.js.map +1 -1
- package/dist/ui/queued-message.test.js +7 -1
- package/dist/ui/queued-message.test.js.map +1 -1
- package/dist/ui/terminal-history.d.ts.map +1 -1
- package/dist/ui/terminal-history.js +5 -2
- package/dist/ui/terminal-history.js.map +1 -1
- package/dist/ui/terminal-history.test.js +10 -3
- package/dist/ui/terminal-history.test.js.map +1 -1
- package/dist/ui/tui-simulation.test.js +7 -1
- package/dist/ui/tui-simulation.test.js.map +1 -1
- package/dist/ui/utils/assistant-stream-split.d.ts +7 -0
- package/dist/ui/utils/assistant-stream-split.d.ts.map +1 -1
- package/dist/ui/utils/assistant-stream-split.js +22 -1
- package/dist/ui/utils/assistant-stream-split.js.map +1 -1
- package/dist/ui/utils/assistant-stream-split.test.js +14 -0
- package/dist/ui/utils/assistant-stream-split.test.js.map +1 -1
- package/dist/ui/utils/markdown-renderer.d.ts.map +1 -1
- package/dist/ui/utils/markdown-renderer.js +46 -3
- package/dist/ui/utils/markdown-renderer.js.map +1 -1
- package/dist/ui/utils/markdown-renderer.test.d.ts +2 -0
- package/dist/ui/utils/markdown-renderer.test.d.ts.map +1 -0
- package/dist/ui/utils/markdown-renderer.test.js +63 -0
- package/dist/ui/utils/markdown-renderer.test.js.map +1 -0
- package/dist/ui/utils/terminal-graphics.d.ts +28 -1
- package/dist/ui/utils/terminal-graphics.d.ts.map +1 -1
- package/dist/ui/utils/terminal-graphics.js +44 -3
- package/dist/ui/utils/terminal-graphics.js.map +1 -1
- package/dist/ui/utils/terminal-graphics.test.js +40 -1
- package/dist/ui/utils/terminal-graphics.test.js.map +1 -1
- package/package.json +4 -4
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import React from "react";
|
|
3
3
|
import { Text, renderToString } from "ink";
|
|
4
|
-
import { describe, expect, it } from "vitest";
|
|
4
|
+
import { describe, expect, it, vi } from "vitest";
|
|
5
5
|
import stripAnsi from "strip-ansi";
|
|
6
6
|
import { ChatControls, ChatLayout } from "./components/ChatLayout.js";
|
|
7
7
|
import { ChatLivePane } from "./components/ChatLivePane.js";
|
|
8
8
|
import { TerminalSizeProvider } from "./hooks/useTerminalSize.js";
|
|
9
9
|
import { renderTranscriptItem } from "./transcript/TranscriptRenderer.js";
|
|
10
10
|
import { loadTheme, ThemeContext } from "./theme/theme.js";
|
|
11
|
+
// BLACK_CIRCLE is platform-dependent (⏺ on macOS, ● elsewhere); pin it so
|
|
12
|
+
// the hardcoded frame expectations pass on Linux/Windows CI too.
|
|
13
|
+
vi.mock("./constants/figures.js", async (importOriginal) => ({
|
|
14
|
+
...(await importOriginal()),
|
|
15
|
+
BLACK_CIRCLE: "\u23FA",
|
|
16
|
+
}));
|
|
11
17
|
const COLUMNS = 80;
|
|
12
18
|
const ROWS = 24;
|
|
13
19
|
const CONTROLS_ROWS = 6;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tui-simulation.test.js","sourceRoot":"","sources":["../../src/ui/tui-simulation.test.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"tui-simulation.test.js","sourceRoot":"","sources":["../../src/ui/tui-simulation.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,13 @@ export interface AssistantStreamSplit {
|
|
|
10
10
|
* about to overflow the live region. Over-counting slightly is fine — it just
|
|
11
11
|
* flushes marginally earlier. Each newline-separated line wraps independently;
|
|
12
12
|
* an empty line still occupies one row.
|
|
13
|
+
*
|
|
14
|
+
* Markdown table lines are counted at double height plus a fixed border
|
|
15
|
+
* overhead per table block: the box-drawing renderer adds borders and column
|
|
16
|
+
* padding wraps cells onto extra rows, so raw character math systematically
|
|
17
|
+
* UNDER-counts tables. Under-counting here delays the mid-stream flush until
|
|
18
|
+
* the live region has already overflowed the terminal, which strands
|
|
19
|
+
* unerasable rows in scrollback (orphaned ⏺ lines above the redrawn frame).
|
|
13
20
|
*/
|
|
14
21
|
export declare function estimateRenderedRows(text: string, columns: number): number;
|
|
15
22
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assistant-stream-split.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/assistant-stream-split.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;
|
|
1
|
+
{"version":3,"file":"assistant-stream-split.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/assistant-stream-split.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAOD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAiB1E;AAOD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,CAe9E"}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
const TABLE_LINE_PATTERN = /^\s*\|/;
|
|
2
|
+
// A rendered box-drawing table adds a top border, header separator, and bottom
|
|
3
|
+
// border beyond the raw markdown line count.
|
|
4
|
+
const TABLE_BORDER_OVERHEAD = 3;
|
|
1
5
|
/**
|
|
2
6
|
* Estimate how many terminal rows `text` occupies when wrapped at `columns`.
|
|
3
7
|
*
|
|
@@ -6,14 +10,31 @@
|
|
|
6
10
|
* about to overflow the live region. Over-counting slightly is fine — it just
|
|
7
11
|
* flushes marginally earlier. Each newline-separated line wraps independently;
|
|
8
12
|
* an empty line still occupies one row.
|
|
13
|
+
*
|
|
14
|
+
* Markdown table lines are counted at double height plus a fixed border
|
|
15
|
+
* overhead per table block: the box-drawing renderer adds borders and column
|
|
16
|
+
* padding wraps cells onto extra rows, so raw character math systematically
|
|
17
|
+
* UNDER-counts tables. Under-counting here delays the mid-stream flush until
|
|
18
|
+
* the live region has already overflowed the terminal, which strands
|
|
19
|
+
* unerasable rows in scrollback (orphaned ⏺ lines above the redrawn frame).
|
|
9
20
|
*/
|
|
10
21
|
export function estimateRenderedRows(text, columns) {
|
|
11
22
|
if (text.length === 0)
|
|
12
23
|
return 0;
|
|
13
24
|
const width = Math.max(1, Math.floor(columns));
|
|
14
25
|
let rows = 0;
|
|
26
|
+
let inTable = false;
|
|
15
27
|
for (const line of text.split("\n")) {
|
|
16
|
-
|
|
28
|
+
const isTableLine = TABLE_LINE_PATTERN.test(line);
|
|
29
|
+
if (isTableLine && !inTable) {
|
|
30
|
+
inTable = true;
|
|
31
|
+
rows += TABLE_BORDER_OVERHEAD;
|
|
32
|
+
}
|
|
33
|
+
else if (!isTableLine) {
|
|
34
|
+
inTable = false;
|
|
35
|
+
}
|
|
36
|
+
const lineRows = line.length === 0 ? 1 : Math.ceil(line.length / width);
|
|
37
|
+
rows += isTableLine ? lineRows * 2 : lineRows;
|
|
17
38
|
}
|
|
18
39
|
return rows;
|
|
19
40
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assistant-stream-split.js","sourceRoot":"","sources":["../../../src/ui/utils/assistant-stream-split.ts"],"names":[],"mappings":"AAKA
|
|
1
|
+
{"version":3,"file":"assistant-stream-split.js","sourceRoot":"","sources":["../../../src/ui/utils/assistant-stream-split.ts"],"names":[],"mappings":"AAKA,MAAM,kBAAkB,GAAG,QAAQ,CAAC;AACpC,+EAA+E;AAC/E,6CAA6C;AAC7C,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAEhC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY,EAAE,OAAe;IAChE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/C,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,WAAW,IAAI,CAAC,OAAO,EAAE,CAAC;YAC5B,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,IAAI,qBAAqB,CAAC;QAChC,CAAC;aAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YACxB,OAAO,GAAG,KAAK,CAAC;QAClB,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;QACxE,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAChD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACvD,OAAO,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,2BAA2B,CAAC,IAAY;IACtD,MAAM,QAAQ,GAAG,aAAa,CAAC;IAC/B,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC;IACd,IAAI,KAA6B,CAAC;IAClC,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC9C,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAClD,kEAAkE;QAClE,IAAI,WAAW,IAAI,IAAI,CAAC,MAAM;YAAE,MAAM;QACtC,2EAA2E;QAC3E,4CAA4C;QAC5C,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;YAAE,SAAS;QAC5D,IAAI,GAAG,WAAW,CAAC;IACrB,CAAC;IACD,IAAI,IAAI,IAAI,CAAC;QAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAC/D,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;AAC/E,CAAC"}
|
|
@@ -56,5 +56,19 @@ describe("estimateRenderedRows", () => {
|
|
|
56
56
|
it("is resilient to non-positive column counts", () => {
|
|
57
57
|
expect(estimateRenderedRows("abc", 0)).toBe(3);
|
|
58
58
|
});
|
|
59
|
+
it("over-counts markdown table lines to flush before the live region overflows", () => {
|
|
60
|
+
const table = "| a | b |\n|---|---|\n| one | two |\n| three | four |";
|
|
61
|
+
const plain = "a b\nx y\none two\nthree four";
|
|
62
|
+
// Same raw line count, but the table must estimate strictly taller — the
|
|
63
|
+
// box-drawing renderer adds borders and cell wrapping.
|
|
64
|
+
expect(estimateRenderedRows(table, 80)).toBeGreaterThan(estimateRenderedRows(plain, 80));
|
|
65
|
+
// Border overhead (3) + 4 doubled lines = 11 for this table.
|
|
66
|
+
expect(estimateRenderedRows(table, 80)).toBeGreaterThanOrEqual(11);
|
|
67
|
+
});
|
|
68
|
+
it("charges border overhead once per table block", () => {
|
|
69
|
+
const twoTables = "| a |\n|---|\n| b |\n\n| c |\n|---|\n| d |";
|
|
70
|
+
const oneTable = "| a |\n|---|\n| b |\n| c |\n| d |";
|
|
71
|
+
expect(estimateRenderedRows(twoTables, 80)).toBeGreaterThan(estimateRenderedRows(oneTable, 80));
|
|
72
|
+
});
|
|
59
73
|
});
|
|
60
74
|
//# sourceMappingURL=assistant-stream-split.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assistant-stream-split.test.js","sourceRoot":"","sources":["../../../src/ui/utils/assistant-stream-split.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"assistant-stream-split.test.js","sourceRoot":"","sources":["../../../src/ui/utils/assistant-stream-split.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-renderer.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/markdown-renderer.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AA2B/C,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,KAAK,EACZ,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM,CAsER;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAE1E;AAwED,wBAAgB,6BAA6B,CAAC,EAC5C,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,eAAuB,GACxB,EAAE;IACD,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC;IACb,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,GAAG,MAAM,EAAE,CASX;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,yBAAyB,CAAC,EACxC,IAAI,EACJ,KAAK,EACL,KAAK,EACL,SAAiB,EACjB,uBAAuB,EACvB,cAAqB,GACtB,EAAE,2BAA2B,GAAG,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"markdown-renderer.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/markdown-renderer.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AA2B/C,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,KAAK,EACZ,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM,CAsER;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAE1E;AAwED,wBAAgB,6BAA6B,CAAC,EAC5C,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,eAAuB,GACxB,EAAE;IACD,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC;IACb,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,GAAG,MAAM,EAAE,CASX;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,yBAAyB,CAAC,EACxC,IAAI,EACJ,KAAK,EACL,KAAK,EACL,SAAiB,EACjB,uBAAuB,EACvB,cAAqB,GACtB,EAAE,2BAA2B,GAAG,MAAM,EAAE,CA6NxC"}
|
|
@@ -226,12 +226,50 @@ export function renderMarkdownToAnsiLines({ text, theme, width, isPending = fals
|
|
|
226
226
|
if (tableHeaders.length > 0 && tableRows.length > 0) {
|
|
227
227
|
const styledHeaders = tableHeaders.map((header) => renderInlineMarkdownToAnsi(stripUnsafeCharacters(header), theme, theme.link));
|
|
228
228
|
const styledRows = tableRows.map((row) => row.map((cell) => renderInlineMarkdownToAnsi(stripUnsafeCharacters(cell), theme, theme.text)));
|
|
229
|
-
|
|
229
|
+
const tableLines = renderAnsiTable({
|
|
230
|
+
headers: styledHeaders,
|
|
231
|
+
rows: styledRows,
|
|
232
|
+
terminalWidth: width,
|
|
233
|
+
theme,
|
|
234
|
+
});
|
|
235
|
+
// While streaming, a tall in-progress table must not overflow the live
|
|
236
|
+
// region: Ink can't erase rows that scroll past the terminal top, which
|
|
237
|
+
// strands stale lines in scrollback. Mirror addCodeBlock's clamp.
|
|
238
|
+
if (isPending && availableTerminalHeight !== undefined) {
|
|
239
|
+
const reservedLines = 2;
|
|
240
|
+
const maxTableLinesWhenPending = Math.max(0, availableTerminalHeight - reservedLines);
|
|
241
|
+
if (tableLines.length > maxTableLinesWhenPending) {
|
|
242
|
+
if (maxTableLinesWhenPending < 1) {
|
|
243
|
+
addLines([colorize("... table is being written ...", theme.textMuted)]);
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
addLines(tableLines.slice(0, maxTableLinesWhenPending));
|
|
247
|
+
addLines([colorize("... generating more ...", theme.textMuted)]);
|
|
248
|
+
}
|
|
249
|
+
inTable = false;
|
|
250
|
+
tableRows = [];
|
|
251
|
+
tableHeaders = [];
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
addLines(tableLines);
|
|
230
256
|
}
|
|
231
257
|
inTable = false;
|
|
232
258
|
tableRows = [];
|
|
233
259
|
tableHeaders = [];
|
|
234
260
|
};
|
|
261
|
+
// While streaming, trailing `|`-prefixed lines are an in-progress table tail
|
|
262
|
+
// (a partial row, or a header whose separator hasn't arrived). Rendering them
|
|
263
|
+
// raw flushes the half-built table and dumps pipe soup on every chunk — hold
|
|
264
|
+
// them back until they complete.
|
|
265
|
+
let pendingTableTailStart = lines.length;
|
|
266
|
+
if (isPending) {
|
|
267
|
+
while (pendingTableTailStart > 0 &&
|
|
268
|
+
/^\s*\|/.test(lines[pendingTableTailStart - 1] ?? "") &&
|
|
269
|
+
lines.length - pendingTableTailStart < 2) {
|
|
270
|
+
pendingTableTailStart -= 1;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
235
273
|
lines.forEach((line, index) => {
|
|
236
274
|
if (inCodeBlock) {
|
|
237
275
|
const fenceMatch = line.match(codeFenceRegex);
|
|
@@ -267,7 +305,7 @@ export function renderMarkdownToAnsiLines({ text, theme, width, isPending = fals
|
|
|
267
305
|
tableHeaders = tableRowMatch[1]?.split("|").map((cell) => cell.trim()) ?? [];
|
|
268
306
|
tableRows = [];
|
|
269
307
|
}
|
|
270
|
-
else {
|
|
308
|
+
else if (index < pendingTableTailStart) {
|
|
271
309
|
addInlineLine(line);
|
|
272
310
|
}
|
|
273
311
|
}
|
|
@@ -283,6 +321,11 @@ export function renderMarkdownToAnsiLines({ text, theme, width, isPending = fals
|
|
|
283
321
|
tableRows.push(cells);
|
|
284
322
|
}
|
|
285
323
|
else if (inTable && !tableRowMatch) {
|
|
324
|
+
if (index >= pendingTableTailStart) {
|
|
325
|
+
// Partial row of the streaming table — keep the table open and drop
|
|
326
|
+
// the incomplete line; the next chunk completes it.
|
|
327
|
+
return;
|
|
328
|
+
}
|
|
286
329
|
flushTable();
|
|
287
330
|
if (line.trim().length > 0)
|
|
288
331
|
addInlineLine(line);
|
|
@@ -314,7 +357,7 @@ export function renderMarkdownToAnsiLines({ text, theme, width, isPending = fals
|
|
|
314
357
|
lastLineEmpty = true;
|
|
315
358
|
}
|
|
316
359
|
}
|
|
317
|
-
else {
|
|
360
|
+
else if (index < pendingTableTailStart) {
|
|
318
361
|
addInlineLine(line);
|
|
319
362
|
}
|
|
320
363
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-renderer.js","sourceRoot":"","sources":["../../../src/ui/utils/markdown-renderer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"markdown-renderer.js","sourceRoot":"","sources":["../../../src/ui/utils/markdown-renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-renderer.test.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/markdown-renderer.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import stripAnsi from "strip-ansi";
|
|
3
|
+
import { renderMarkdownToAnsiLines } from "./markdown-renderer.js";
|
|
4
|
+
import darkTheme from "../theme/dark.json" with { type: "json" };
|
|
5
|
+
const theme = darkTheme;
|
|
6
|
+
const COMPLETE_TABLE = "Intro line.\n\n| Name | Status |\n|---|---|\n| alpha | ok |\n| beta | failed |";
|
|
7
|
+
function renderPlain(text, options) {
|
|
8
|
+
return renderMarkdownToAnsiLines({
|
|
9
|
+
text,
|
|
10
|
+
theme,
|
|
11
|
+
width: 80,
|
|
12
|
+
isPending: options?.isPending ?? false,
|
|
13
|
+
availableTerminalHeight: options?.height,
|
|
14
|
+
}).map((line) => stripAnsi(line));
|
|
15
|
+
}
|
|
16
|
+
describe("renderMarkdownToAnsiLines tables", () => {
|
|
17
|
+
it("renders a complete table as a box-drawing table", () => {
|
|
18
|
+
const lines = renderPlain(COMPLETE_TABLE);
|
|
19
|
+
expect(lines.some((line) => line.startsWith("┌"))).toBe(true);
|
|
20
|
+
expect(lines.some((line) => line.includes("alpha"))).toBe(true);
|
|
21
|
+
expect(lines.some((line) => line.includes("|"))).toBe(false);
|
|
22
|
+
});
|
|
23
|
+
it("keeps a streaming table intact when the last row is partial", () => {
|
|
24
|
+
const partial = COMPLETE_TABLE + "\n| gamma | in prog";
|
|
25
|
+
const lines = renderPlain(partial, { isPending: true });
|
|
26
|
+
// The completed rows still render as a table…
|
|
27
|
+
expect(lines.some((line) => line.startsWith("┌"))).toBe(true);
|
|
28
|
+
expect(lines.some((line) => line.includes("beta"))).toBe(true);
|
|
29
|
+
// …and the half-streamed row is held back instead of dumped as raw pipes.
|
|
30
|
+
expect(lines.some((line) => line.includes("| gamma"))).toBe(false);
|
|
31
|
+
});
|
|
32
|
+
it("holds back a streaming table header whose separator has not arrived", () => {
|
|
33
|
+
const headerOnly = "Intro line.\n\n| Name | Status |";
|
|
34
|
+
const lines = renderPlain(headerOnly, { isPending: true });
|
|
35
|
+
expect(lines.some((line) => line.includes("| Name"))).toBe(false);
|
|
36
|
+
});
|
|
37
|
+
it("holds back a streaming header plus partial separator", () => {
|
|
38
|
+
const partialSeparator = "Intro line.\n\n| Name | Status |\n|---|-";
|
|
39
|
+
const lines = renderPlain(partialSeparator, { isPending: true });
|
|
40
|
+
expect(lines.some((line) => line.includes("|"))).toBe(false);
|
|
41
|
+
});
|
|
42
|
+
it("still renders raw pipe lines verbatim when finalized (history parity)", () => {
|
|
43
|
+
const headerOnly = "Intro line.\n\n| Name | Status |";
|
|
44
|
+
const lines = renderPlain(headerOnly);
|
|
45
|
+
expect(lines.some((line) => line.includes("| Name | Status |"))).toBe(true);
|
|
46
|
+
});
|
|
47
|
+
it("clamps a tall pending table to the available terminal height", () => {
|
|
48
|
+
const manyRows = Array.from({ length: 30 }, (_, i) => `| row${i} | value${i} |`).join("\n");
|
|
49
|
+
const tall = `| Name | Status |\n|---|---|\n${manyRows}`;
|
|
50
|
+
const height = 10;
|
|
51
|
+
const lines = renderPlain(tall, { isPending: true, height });
|
|
52
|
+
expect(lines.length).toBeLessThanOrEqual(height);
|
|
53
|
+
expect(lines.at(-1)).toContain("... generating more ...");
|
|
54
|
+
});
|
|
55
|
+
it("does not clamp tall tables when finalized", () => {
|
|
56
|
+
const manyRows = Array.from({ length: 30 }, (_, i) => `| row${i} | value${i} |`).join("\n");
|
|
57
|
+
const tall = `| Name | Status |\n|---|---|\n${manyRows}`;
|
|
58
|
+
const lines = renderPlain(tall, { height: 10 });
|
|
59
|
+
expect(lines.length).toBeGreaterThan(30);
|
|
60
|
+
expect(lines.some((line) => line.includes("generating more"))).toBe(false);
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
//# sourceMappingURL=markdown-renderer.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-renderer.test.js","sourceRoot":"","sources":["../../../src/ui/utils/markdown-renderer.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,33 @@ export declare function detectGraphicsProtocol(env?: NodeJS.ProcessEnv, isTTY?:
|
|
|
11
11
|
* Encode a base64 image payload into an inline-image escape sequence for the
|
|
12
12
|
* given protocol. Returns an empty string for the "none" protocol so callers
|
|
13
13
|
* can append unconditionally.
|
|
14
|
+
*
|
|
15
|
+
* When `rows` is given, the image is constrained to that many terminal cells
|
|
16
|
+
* tall (aspect ratio preserved) and, for kitty, the cursor is told not to
|
|
17
|
+
* move (`C=1`). Callers that interleave images with a TUI live frame need a
|
|
18
|
+
* deterministic height — see `encodeInlineImageBlock`.
|
|
19
|
+
*/
|
|
20
|
+
export declare function encodeInlineImage(base64: string, protocol: GraphicsProtocol, rows?: number): string;
|
|
21
|
+
/** Default preview height (in terminal rows) for inline image blocks. */
|
|
22
|
+
export declare const INLINE_IMAGE_ROWS = 12;
|
|
23
|
+
/**
|
|
24
|
+
* Encode an inline image as a fixed-height block whose visual height exactly
|
|
25
|
+
* matches its newline count.
|
|
26
|
+
*
|
|
27
|
+
* A raw image escape occupies many terminal rows while contributing zero
|
|
28
|
+
* newlines to the written stream — any TUI layer that counts `\n`s to erase
|
|
29
|
+
* or reposition its live frame (Ink's log-update does exactly that) then
|
|
30
|
+
* erases at the wrong offset, stranding fragments of the old frame in
|
|
31
|
+
* scrollback (orphaned `⏺` rows around the image).
|
|
32
|
+
*
|
|
33
|
+
* This emits `rows` real newlines to reserve the space (all scrolling is
|
|
34
|
+
* caused by plain newlines every layer can account for), saves the cursor,
|
|
35
|
+
* jumps to the top of the reserved block, draws the height-constrained image
|
|
36
|
+
* there, and restores the cursor to the line after the block. The returned
|
|
37
|
+
* string contains exactly `rows` newlines and renders exactly `rows` tall.
|
|
14
38
|
*/
|
|
15
|
-
export declare function
|
|
39
|
+
export declare function encodeInlineImageBlock(base64: string, protocol: GraphicsProtocol, options?: {
|
|
40
|
+
rows?: number;
|
|
41
|
+
leftPad?: string;
|
|
42
|
+
}): string;
|
|
16
43
|
//# sourceMappingURL=terminal-graphics.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal-graphics.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/terminal-graphics.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;AAK1D;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,KAAK,GAAE,OAAuC,GAC7C,gBAAgB,CAyBlB;AAED
|
|
1
|
+
{"version":3,"file":"terminal-graphics.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/terminal-graphics.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;AAK1D;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,KAAK,GAAE,OAAuC,GAC7C,gBAAgB,CAyBlB;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,CAAC,EAAE,MAAM,GACZ,MAAM,CA0BR;AAED,yEAAyE;AACzE,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5C,MAAM,CAaR"}
|
|
@@ -42,27 +42,68 @@ export function detectGraphicsProtocol(env = process.env, isTTY = Boolean(proces
|
|
|
42
42
|
* Encode a base64 image payload into an inline-image escape sequence for the
|
|
43
43
|
* given protocol. Returns an empty string for the "none" protocol so callers
|
|
44
44
|
* can append unconditionally.
|
|
45
|
+
*
|
|
46
|
+
* When `rows` is given, the image is constrained to that many terminal cells
|
|
47
|
+
* tall (aspect ratio preserved) and, for kitty, the cursor is told not to
|
|
48
|
+
* move (`C=1`). Callers that interleave images with a TUI live frame need a
|
|
49
|
+
* deterministic height — see `encodeInlineImageBlock`.
|
|
45
50
|
*/
|
|
46
|
-
export function encodeInlineImage(base64, protocol) {
|
|
51
|
+
export function encodeInlineImage(base64, protocol, rows) {
|
|
47
52
|
if (protocol === "none" || base64.length === 0)
|
|
48
53
|
return "";
|
|
49
54
|
if (protocol === "iterm") {
|
|
50
55
|
// OSC 1337 ; File = inline=1 ; preserveAspectRatio=1 : <base64> BEL
|
|
51
|
-
|
|
56
|
+
const height = rows !== undefined ? `;height=${rows}` : "";
|
|
57
|
+
return `\u001b]1337;File=inline=1;preserveAspectRatio=1${height}:${base64}\u0007`;
|
|
52
58
|
}
|
|
53
59
|
// kitty graphics protocol: chunked APC transmission.
|
|
54
60
|
// first chunk: _G f=100,a=T,m=<1|0> ; <chunk> ST
|
|
55
61
|
// later chunks: _G m=<1|0> ; <chunk> ST
|
|
56
62
|
// m=1 marks "more chunks follow", m=0 marks the final chunk.
|
|
63
|
+
// r=<rows> scales the image to fit that many cells (width auto); C=1 keeps
|
|
64
|
+
// the cursor where it is so the caller fully owns cursor movement.
|
|
65
|
+
const sizing = rows !== undefined ? `,r=${rows},C=1` : "";
|
|
57
66
|
const chunks = [];
|
|
58
67
|
for (let offset = 0; offset < base64.length; offset += KITTY_CHUNK_SIZE) {
|
|
59
68
|
const chunk = base64.slice(offset, offset + KITTY_CHUNK_SIZE);
|
|
60
69
|
const isFirst = offset === 0;
|
|
61
70
|
const isLast = offset + KITTY_CHUNK_SIZE >= base64.length;
|
|
62
71
|
const more = isLast ? 0 : 1;
|
|
63
|
-
const control = isFirst ? `f=100,a=T,m=${more}` : `m=${more}`;
|
|
72
|
+
const control = isFirst ? `f=100,a=T${sizing},m=${more}` : `m=${more}`;
|
|
64
73
|
chunks.push(`\u001b_G${control};${chunk}\u001b\\`);
|
|
65
74
|
}
|
|
66
75
|
return chunks.join("");
|
|
67
76
|
}
|
|
77
|
+
/** Default preview height (in terminal rows) for inline image blocks. */
|
|
78
|
+
export const INLINE_IMAGE_ROWS = 12;
|
|
79
|
+
/**
|
|
80
|
+
* Encode an inline image as a fixed-height block whose visual height exactly
|
|
81
|
+
* matches its newline count.
|
|
82
|
+
*
|
|
83
|
+
* A raw image escape occupies many terminal rows while contributing zero
|
|
84
|
+
* newlines to the written stream — any TUI layer that counts `\n`s to erase
|
|
85
|
+
* or reposition its live frame (Ink's log-update does exactly that) then
|
|
86
|
+
* erases at the wrong offset, stranding fragments of the old frame in
|
|
87
|
+
* scrollback (orphaned `⏺` rows around the image).
|
|
88
|
+
*
|
|
89
|
+
* This emits `rows` real newlines to reserve the space (all scrolling is
|
|
90
|
+
* caused by plain newlines every layer can account for), saves the cursor,
|
|
91
|
+
* jumps to the top of the reserved block, draws the height-constrained image
|
|
92
|
+
* there, and restores the cursor to the line after the block. The returned
|
|
93
|
+
* string contains exactly `rows` newlines and renders exactly `rows` tall.
|
|
94
|
+
*/
|
|
95
|
+
export function encodeInlineImageBlock(base64, protocol, options) {
|
|
96
|
+
if (protocol === "none" || base64.length === 0)
|
|
97
|
+
return "";
|
|
98
|
+
const rows = Math.max(1, options?.rows ?? INLINE_IMAGE_ROWS);
|
|
99
|
+
const leftPad = options?.leftPad ?? "";
|
|
100
|
+
const image = encodeInlineImage(base64, protocol, rows);
|
|
101
|
+
return ("\n".repeat(rows) + // reserve rows; the only source of scrolling
|
|
102
|
+
"\u001b7" + // save cursor (start of the line after the block)
|
|
103
|
+
`\u001b[${rows}A` + // up to the block's top row
|
|
104
|
+
leftPad + // indent via printable spaces over the blank row
|
|
105
|
+
image +
|
|
106
|
+
"\u001b8" // restore — back to the line after the block
|
|
107
|
+
);
|
|
108
|
+
}
|
|
68
109
|
//# sourceMappingURL=terminal-graphics.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal-graphics.js","sourceRoot":"","sources":["../../../src/ui/utils/terminal-graphics.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,EAAE;AACF,6DAA6D;AAC7D,2DAA2D;AAC3D,iEAAiE;AACjE,EAAE;AACF,0EAA0E;AAC1E,yEAAyE;AACzE,6CAA6C;AAI7C,gEAAgE;AAChE,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAE9B;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAyB,OAAO,CAAC,GAAG,EACpC,QAAiB,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IAE9C,IAAI,CAAC,KAAK;QAAE,OAAO,MAAM,CAAC;IAE1B,4EAA4E;IAC5E,wEAAwE;IACxE,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,WAAW,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC;IAExC,iEAAiE;IACjE,IAAI,WAAW,KAAK,WAAW,IAAI,WAAW,KAAK,SAAS,IAAI,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;QACpF,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,2DAA2D;IAC3D,IAAI,GAAG,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7D,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,WAAW,KAAK,SAAS,IAAI,GAAG,CAAC,uBAAuB,CAAC,IAAI,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACxF,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"terminal-graphics.js","sourceRoot":"","sources":["../../../src/ui/utils/terminal-graphics.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { detectGraphicsProtocol, encodeInlineImage } from "./terminal-graphics.js";
|
|
2
|
+
import { detectGraphicsProtocol, encodeInlineImage, encodeInlineImageBlock, INLINE_IMAGE_ROWS, } from "./terminal-graphics.js";
|
|
3
3
|
describe("detectGraphicsProtocol", () => {
|
|
4
4
|
it("detects iTerm2 and WezTerm as the iterm protocol", () => {
|
|
5
5
|
expect(detectGraphicsProtocol({ TERM_PROGRAM: "iTerm.app" }, true)).toBe("iterm");
|
|
@@ -57,5 +57,44 @@ describe("encodeInlineImage", () => {
|
|
|
57
57
|
expect(chunks).toHaveLength(1);
|
|
58
58
|
expect(chunks[0].startsWith("\u001b_Gf=100,a=T,m=0;")).toBe(true);
|
|
59
59
|
});
|
|
60
|
+
it("constrains image height in cells when rows is given", () => {
|
|
61
|
+
expect(encodeInlineImage(base64, "iterm", 12)).toContain(";height=12:");
|
|
62
|
+
const kitty = encodeInlineImage(base64, "kitty", 12);
|
|
63
|
+
expect(kitty).toContain("r=12");
|
|
64
|
+
// C=1: the caller owns cursor movement.
|
|
65
|
+
expect(kitty).toContain("C=1");
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
describe("encodeInlineImageBlock", () => {
|
|
69
|
+
const base64 = Buffer.from("image bytes").toString("base64");
|
|
70
|
+
it("returns empty for the none protocol or empty payload", () => {
|
|
71
|
+
expect(encodeInlineImageBlock(base64, "none")).toBe("");
|
|
72
|
+
expect(encodeInlineImageBlock("", "kitty")).toBe("");
|
|
73
|
+
});
|
|
74
|
+
it("contains exactly `rows` newlines so visual height matches line count", () => {
|
|
75
|
+
for (const protocol of ["iterm", "kitty"]) {
|
|
76
|
+
const out = encodeInlineImageBlock(base64, protocol, { rows: 8 });
|
|
77
|
+
expect(out.split("\n")).toHaveLength(9); // 8 newlines
|
|
78
|
+
const defaultOut = encodeInlineImageBlock(base64, protocol);
|
|
79
|
+
expect(defaultOut.split("\n")).toHaveLength(INLINE_IMAGE_ROWS + 1);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
it("reserves rows first, then draws the height-constrained image into them", () => {
|
|
83
|
+
const out = encodeInlineImageBlock(base64, "iterm", { rows: 8, leftPad: " " });
|
|
84
|
+
const newlinesEnd = out.lastIndexOf("\n") + 1;
|
|
85
|
+
// All newlines precede the cursor choreography — nothing after them scrolls.
|
|
86
|
+
expect(out.slice(0, newlinesEnd)).toBe("\n".repeat(8));
|
|
87
|
+
const tail = out.slice(newlinesEnd);
|
|
88
|
+
const save = tail.indexOf("\u001b7");
|
|
89
|
+
const up = tail.indexOf("\u001b[8A");
|
|
90
|
+
const image = tail.indexOf("\u001b]1337");
|
|
91
|
+
const restore = tail.indexOf("\u001b8");
|
|
92
|
+
expect(save).toBeGreaterThanOrEqual(0);
|
|
93
|
+
expect(up).toBeGreaterThan(save);
|
|
94
|
+
expect(image).toBeGreaterThan(up);
|
|
95
|
+
expect(restore).toBeGreaterThan(image);
|
|
96
|
+
expect(tail).toContain(";height=8:");
|
|
97
|
+
expect(tail).toContain(" \u001b]1337");
|
|
98
|
+
});
|
|
60
99
|
});
|
|
61
100
|
//# sourceMappingURL=terminal-graphics.test.js.map
|