@kenkaiiii/ggcoder 4.3.230 → 4.3.231
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/core/goal-controller.d.ts +27 -6
- package/dist/core/goal-controller.d.ts.map +1 -1
- package/dist/core/goal-controller.js +246 -141
- package/dist/core/goal-controller.js.map +1 -1
- package/dist/core/goal-controller.test.js +210 -79
- package/dist/core/goal-controller.test.js.map +1 -1
- package/dist/core/goal-engine.d.ts +61 -0
- package/dist/core/goal-engine.d.ts.map +1 -0
- package/dist/core/goal-engine.js +123 -0
- package/dist/core/goal-engine.js.map +1 -0
- package/dist/core/goal-engine.test.d.ts +2 -0
- package/dist/core/goal-engine.test.d.ts.map +1 -0
- package/dist/core/goal-engine.test.js +295 -0
- package/dist/core/goal-engine.test.js.map +1 -0
- package/dist/core/goal-integration.d.ts +80 -0
- package/dist/core/goal-integration.d.ts.map +1 -0
- package/dist/core/goal-integration.js +296 -0
- package/dist/core/goal-integration.js.map +1 -0
- package/dist/core/goal-integration.test.d.ts +2 -0
- package/dist/core/goal-integration.test.d.ts.map +1 -0
- package/dist/core/goal-integration.test.js +369 -0
- package/dist/core/goal-integration.test.js.map +1 -0
- package/dist/core/goal-prerequisites.test.js +37 -1
- package/dist/core/goal-prerequisites.test.js.map +1 -1
- package/dist/core/goal-store.d.ts +80 -1
- package/dist/core/goal-store.d.ts.map +1 -1
- package/dist/core/goal-store.js +232 -65
- package/dist/core/goal-store.js.map +1 -1
- package/dist/core/goal-store.test.js +111 -2
- package/dist/core/goal-store.test.js.map +1 -1
- package/dist/core/goal-worker.d.ts.map +1 -1
- package/dist/core/goal-worker.js +55 -4
- package/dist/core/goal-worker.js.map +1 -1
- package/dist/core/goal-worker.test.js +75 -6
- package/dist/core/goal-worker.test.js.map +1 -1
- package/dist/core/goal-worktree.d.ts +55 -1
- package/dist/core/goal-worktree.d.ts.map +1 -1
- package/dist/core/goal-worktree.js +164 -1
- package/dist/core/goal-worktree.js.map +1 -1
- package/dist/core/goal-worktree.test.js +226 -4
- package/dist/core/goal-worktree.test.js.map +1 -1
- package/dist/system-prompt.d.ts.map +1 -1
- package/dist/system-prompt.js +9 -6
- package/dist/system-prompt.js.map +1 -1
- package/dist/system-prompt.test.js +1 -1
- package/dist/system-prompt.test.js.map +1 -1
- package/dist/tools/edit-diff.d.ts +17 -4
- package/dist/tools/edit-diff.d.ts.map +1 -1
- package/dist/tools/edit-diff.js +78 -16
- package/dist/tools/edit-diff.js.map +1 -1
- package/dist/tools/edit-diff.test.js +31 -1
- package/dist/tools/edit-diff.test.js.map +1 -1
- package/dist/tools/edit-robustness.test.d.ts +2 -0
- package/dist/tools/edit-robustness.test.d.ts.map +1 -0
- package/dist/tools/edit-robustness.test.js +415 -0
- package/dist/tools/edit-robustness.test.js.map +1 -0
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/edit.js +15 -16
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/edit.test.js +23 -12
- package/dist/tools/edit.test.js.map +1 -1
- package/dist/tools/goals.d.ts +9 -1
- package/dist/tools/goals.d.ts.map +1 -1
- package/dist/tools/goals.js +78 -25
- package/dist/tools/goals.js.map +1 -1
- package/dist/tools/goals.test.js +142 -11
- package/dist/tools/goals.test.js.map +1 -1
- package/dist/ui/App.d.ts +9 -1
- package/dist/ui/App.d.ts.map +1 -1
- package/dist/ui/App.js +78 -16
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/components/ChatLayout.d.ts +8 -1
- package/dist/ui/components/ChatLayout.d.ts.map +1 -1
- package/dist/ui/components/ChatLayout.js +4 -1
- package/dist/ui/components/ChatLayout.js.map +1 -1
- package/dist/ui/components/ChatScreen.d.ts +14 -1
- package/dist/ui/components/ChatScreen.d.ts.map +1 -1
- package/dist/ui/components/ChatScreen.js +3 -2
- package/dist/ui/components/ChatScreen.js.map +1 -1
- package/dist/ui/components/InputArea.d.ts +13 -1
- package/dist/ui/components/InputArea.d.ts.map +1 -1
- package/dist/ui/components/InputArea.js +96 -12
- package/dist/ui/components/InputArea.js.map +1 -1
- package/dist/ui/components/TranscriptViewport.d.ts +34 -0
- package/dist/ui/components/TranscriptViewport.d.ts.map +1 -0
- package/dist/ui/components/TranscriptViewport.js +45 -0
- package/dist/ui/components/TranscriptViewport.js.map +1 -0
- package/dist/ui/footer-jump-regression.test.d.ts +2 -0
- package/dist/ui/footer-jump-regression.test.d.ts.map +1 -0
- package/dist/ui/footer-jump-regression.test.js +167 -0
- package/dist/ui/footer-jump-regression.test.js.map +1 -0
- package/dist/ui/goal-events.d.ts +1 -1
- package/dist/ui/goal-events.d.ts.map +1 -1
- package/dist/ui/goal-events.js +2 -2
- package/dist/ui/goal-events.js.map +1 -1
- package/dist/ui/goal-events.test.js +2 -2
- package/dist/ui/goal-events.test.js.map +1 -1
- package/dist/ui/goal-lifecycle-orchestration.test.js +13 -97
- package/dist/ui/goal-lifecycle-orchestration.test.js.map +1 -1
- package/dist/ui/goal-progress.d.ts.map +1 -1
- package/dist/ui/goal-progress.js +0 -1
- package/dist/ui/goal-progress.js.map +1 -1
- package/dist/ui/goal-run-helpers.d.ts +0 -4
- package/dist/ui/goal-run-helpers.d.ts.map +1 -1
- package/dist/ui/goal-run-helpers.js +2 -21
- package/dist/ui/goal-run-helpers.js.map +1 -1
- package/dist/ui/hooks/useChatLayoutMeasurements.d.ts +8 -0
- package/dist/ui/hooks/useChatLayoutMeasurements.d.ts.map +1 -1
- package/dist/ui/hooks/useChatLayoutMeasurements.js +2 -0
- package/dist/ui/hooks/useChatLayoutMeasurements.js.map +1 -1
- package/dist/ui/hooks/useGoalOrchestration.d.ts +2 -1
- package/dist/ui/hooks/useGoalOrchestration.d.ts.map +1 -1
- package/dist/ui/hooks/useGoalOrchestration.js +198 -80
- package/dist/ui/hooks/useGoalOrchestration.js.map +1 -1
- package/dist/ui/hooks/useTerminalSize.d.ts +8 -1
- package/dist/ui/hooks/useTerminalSize.d.ts.map +1 -1
- package/dist/ui/hooks/useTerminalSize.js +12 -2
- package/dist/ui/hooks/useTerminalSize.js.map +1 -1
- package/dist/ui/hooks/useTranscriptHistory.d.ts +1 -1
- package/dist/ui/hooks/useTranscriptHistory.d.ts.map +1 -1
- package/dist/ui/hooks/useTranscriptHistory.js +23 -9
- package/dist/ui/hooks/useTranscriptHistory.js.map +1 -1
- package/dist/ui/hooks/useTranscriptHistory.test.d.ts +2 -0
- package/dist/ui/hooks/useTranscriptHistory.test.d.ts.map +1 -0
- package/dist/ui/hooks/useTranscriptHistory.test.js +61 -0
- package/dist/ui/hooks/useTranscriptHistory.test.js.map +1 -0
- package/dist/ui/hooks/useTranscriptScroll.d.ts +30 -0
- package/dist/ui/hooks/useTranscriptScroll.d.ts.map +1 -0
- package/dist/ui/hooks/useTranscriptScroll.js +44 -0
- package/dist/ui/hooks/useTranscriptScroll.js.map +1 -0
- package/dist/ui/hooks/useTranscriptScroll.test.d.ts +2 -0
- package/dist/ui/hooks/useTranscriptScroll.test.d.ts.map +1 -0
- package/dist/ui/hooks/useTranscriptScroll.test.js +119 -0
- package/dist/ui/hooks/useTranscriptScroll.test.js.map +1 -0
- package/dist/ui/live-area-clamp.test.js +11 -2
- package/dist/ui/live-area-clamp.test.js.map +1 -1
- package/dist/ui/render.d.ts +8 -0
- package/dist/ui/render.d.ts.map +1 -1
- package/dist/ui/render.js +69 -7
- package/dist/ui/render.js.map +1 -1
- package/dist/ui/stores/transcript-scroll-store.d.ts +27 -0
- package/dist/ui/stores/transcript-scroll-store.d.ts.map +1 -0
- package/dist/ui/stores/transcript-scroll-store.js +73 -0
- package/dist/ui/stores/transcript-scroll-store.js.map +1 -0
- package/dist/ui/stores/transcript-scroll-store.test.d.ts +2 -0
- package/dist/ui/stores/transcript-scroll-store.test.d.ts.map +1 -0
- package/dist/ui/stores/transcript-scroll-store.test.js +73 -0
- package/dist/ui/stores/transcript-scroll-store.test.js.map +1 -0
- package/dist/ui/testing/screen-recorder.d.ts +29 -0
- package/dist/ui/testing/screen-recorder.d.ts.map +1 -0
- package/dist/ui/testing/screen-recorder.js +179 -0
- package/dist/ui/testing/screen-recorder.js.map +1 -0
- package/dist/ui/transcript/TranscriptRenderer.d.ts.map +1 -1
- package/dist/ui/transcript/TranscriptRenderer.js +1 -1
- package/dist/ui/transcript/TranscriptRenderer.js.map +1 -1
- package/dist/ui/transcript/spacing.d.ts +1 -0
- package/dist/ui/transcript/spacing.d.ts.map +1 -1
- package/dist/ui/transcript/spacing.js +7 -0
- package/dist/ui/transcript/spacing.js.map +1 -1
- package/dist/ui/transcript/spacing.test.js +29 -0
- package/dist/ui/transcript/spacing.test.js.map +1 -1
- package/dist/ui/transcript/transcript-lines.d.ts +32 -0
- package/dist/ui/transcript/transcript-lines.d.ts.map +1 -0
- package/dist/ui/transcript/transcript-lines.js +82 -0
- package/dist/ui/transcript/transcript-lines.js.map +1 -0
- package/dist/ui/transcript/transcript-lines.test.d.ts +2 -0
- package/dist/ui/transcript/transcript-lines.test.d.ts.map +1 -0
- package/dist/ui/transcript/transcript-lines.test.js +76 -0
- package/dist/ui/transcript/transcript-lines.test.js.map +1 -0
- package/dist/ui/transcript-viewport-pinning.test.d.ts +2 -0
- package/dist/ui/transcript-viewport-pinning.test.d.ts.map +1 -0
- package/dist/ui/transcript-viewport-pinning.test.js +148 -0
- package/dist/ui/transcript-viewport-pinning.test.js.map +1 -0
- package/dist/ui/tui-simulation.test.d.ts +2 -0
- package/dist/ui/tui-simulation.test.d.ts.map +1 -0
- package/dist/ui/tui-simulation.test.js +138 -0
- package/dist/ui/tui-simulation.test.js.map +1 -0
- package/dist/ui/tui-terminal-recorder.test.d.ts +2 -0
- package/dist/ui/tui-terminal-recorder.test.d.ts.map +1 -0
- package/dist/ui/tui-terminal-recorder.test.js +134 -0
- package/dist/ui/tui-terminal-recorder.test.js.map +1 -0
- package/package.json +5 -5
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { Text, renderToString } from "ink";
|
|
4
|
+
import { describe, expect, it } from "vitest";
|
|
5
|
+
import stripAnsi from "strip-ansi";
|
|
6
|
+
import { ChatControls, ChatLayout } from "./components/ChatLayout.js";
|
|
7
|
+
import { ChatLivePane } from "./components/ChatLivePane.js";
|
|
8
|
+
import { TerminalSizeProvider } from "./hooks/useTerminalSize.js";
|
|
9
|
+
import { renderTranscriptItem } from "./transcript/TranscriptRenderer.js";
|
|
10
|
+
import { loadTheme, ThemeContext } from "./theme/theme.js";
|
|
11
|
+
const COLUMNS = 80;
|
|
12
|
+
const ROWS = 24;
|
|
13
|
+
const CONTROLS_ROWS = 6;
|
|
14
|
+
const LIVE_ROWS = ROWS - CONTROLS_ROWS - 1;
|
|
15
|
+
const theme = loadTheme("dark");
|
|
16
|
+
function rawLines(value) {
|
|
17
|
+
return stripAnsi(value).replace(/\r/g, "\n").split("\n");
|
|
18
|
+
}
|
|
19
|
+
function trimTrailingEmptyLines(lines) {
|
|
20
|
+
const next = [...lines];
|
|
21
|
+
while (next.at(-1) === "")
|
|
22
|
+
next.pop();
|
|
23
|
+
return next;
|
|
24
|
+
}
|
|
25
|
+
function visibleLines(value) {
|
|
26
|
+
return trimTrailingEmptyLines(rawLines(value));
|
|
27
|
+
}
|
|
28
|
+
function countLineContaining(lines, needle) {
|
|
29
|
+
return lines.filter((line) => line.includes(needle)).length;
|
|
30
|
+
}
|
|
31
|
+
function SimulatedControls({ done }) {
|
|
32
|
+
return (_jsxs(ChatControls, { controlsRef: () => { }, children: [_jsx(Text, { children: done ? "SIM_DONE_STATUS" : "SIM_ACTIVITY_STATUS" }), _jsx(Text, { children: "SIM_INPUT_TOP" }), _jsx(Text, { children: "SIM_INPUT_BODY" }), _jsx(Text, { children: "SIM_INPUT_BOTTOM" }), _jsx(Text, { children: "SIM_FOOTER" }), _jsx(Text, { children: "SIM_ACTIVITY_BAR" })] }));
|
|
33
|
+
}
|
|
34
|
+
function SimulatedTui({ liveItems, streamingText = "", done, }) {
|
|
35
|
+
const renderItem = (item, index, items) => renderTranscriptItem({
|
|
36
|
+
item,
|
|
37
|
+
index,
|
|
38
|
+
items,
|
|
39
|
+
version: "sim",
|
|
40
|
+
currentModel: "sim-model",
|
|
41
|
+
currentProvider: "anthropic",
|
|
42
|
+
displayedCwd: "/tmp/sim-project",
|
|
43
|
+
columns: COLUMNS,
|
|
44
|
+
theme,
|
|
45
|
+
renderMarkdown: true,
|
|
46
|
+
measuredLiveAreaRows: LIVE_ROWS,
|
|
47
|
+
});
|
|
48
|
+
return (_jsx(ThemeContext.Provider, { value: theme, children: _jsx(TerminalSizeProvider, { children: _jsxs(ChatLayout, { columns: COLUMNS, children: [_jsx(ChatLivePane, { liveItems: liveItems, renderItem: renderItem, isRunning: !done, visibleStreamingText: streamingText, streamingThinking: "", thinkingMs: 0, reserveStreamingSpacing: false, renderMarkdown: true, measuredLiveAreaRows: LIVE_ROWS, assistantMarginTop: 0, streamingContinuation: false }), _jsx(SimulatedControls, { done: done })] }) }) }));
|
|
49
|
+
}
|
|
50
|
+
function renderSimulationFrame(props) {
|
|
51
|
+
const originalColumns = process.stdout.columns;
|
|
52
|
+
const originalRows = process.stdout.rows;
|
|
53
|
+
process.stdout.columns = COLUMNS;
|
|
54
|
+
process.stdout.rows = ROWS;
|
|
55
|
+
try {
|
|
56
|
+
return visibleLines(renderToString(_jsx(SimulatedTui, { ...props }), { columns: COLUMNS }));
|
|
57
|
+
}
|
|
58
|
+
finally {
|
|
59
|
+
process.stdout.columns = originalColumns;
|
|
60
|
+
process.stdout.rows = originalRows;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
const longPrompt = Array.from({ length: 28 }, (_, index) => {
|
|
64
|
+
return `SIM_LONG_PROMPT_LINE_${String(index + 1).padStart(2, "0")}`;
|
|
65
|
+
}).join("\n");
|
|
66
|
+
const longAssistant = Array.from({ length: 40 }, (_, index) => {
|
|
67
|
+
return `SIM_ASSISTANT_LINE_${String(index + 1).padStart(2, "0")}`;
|
|
68
|
+
}).join("\n");
|
|
69
|
+
describe("TUI simulation", () => {
|
|
70
|
+
it("keeps compact transcript order and only clamps overflowing active output", () => {
|
|
71
|
+
const running = renderSimulationFrame({
|
|
72
|
+
liveItems: [{ kind: "assistant", id: "assistant-running", text: longAssistant }],
|
|
73
|
+
streamingText: "",
|
|
74
|
+
});
|
|
75
|
+
const done = renderSimulationFrame({ liveItems: [], done: true });
|
|
76
|
+
expect(running).toHaveLength(ROWS - 1);
|
|
77
|
+
expect(done).toHaveLength(CONTROLS_ROWS);
|
|
78
|
+
expect(countLineContaining(running, "SIM_ASSISTANT_LINE_")).toBeGreaterThan(0);
|
|
79
|
+
expect(done.some((line) => line.includes("GG Coder"))).toBe(false);
|
|
80
|
+
expect(running.slice(-6)).toEqual([
|
|
81
|
+
"SIM_ACTIVITY_STATUS",
|
|
82
|
+
"SIM_INPUT_TOP",
|
|
83
|
+
"SIM_INPUT_BODY",
|
|
84
|
+
"SIM_INPUT_BOTTOM",
|
|
85
|
+
"SIM_FOOTER",
|
|
86
|
+
"SIM_ACTIVITY_BAR",
|
|
87
|
+
]);
|
|
88
|
+
expect(done.slice(-6)).toEqual([
|
|
89
|
+
"SIM_DONE_STATUS",
|
|
90
|
+
"SIM_INPUT_TOP",
|
|
91
|
+
"SIM_INPUT_BODY",
|
|
92
|
+
"SIM_INPUT_BOTTOM",
|
|
93
|
+
"SIM_FOOTER",
|
|
94
|
+
"SIM_ACTIVITY_BAR",
|
|
95
|
+
]);
|
|
96
|
+
});
|
|
97
|
+
it("bottom-clips large prompt/output blocks without duplicating visible chat rows", () => {
|
|
98
|
+
const frame = renderSimulationFrame({
|
|
99
|
+
liveItems: [
|
|
100
|
+
{ kind: "user", id: "long-user", text: longPrompt },
|
|
101
|
+
{ kind: "assistant", id: "long-assistant", text: longAssistant },
|
|
102
|
+
],
|
|
103
|
+
streamingText: "SIM_STREAMING_TAIL",
|
|
104
|
+
});
|
|
105
|
+
expect(frame).toHaveLength(ROWS - 1);
|
|
106
|
+
expect(countLineContaining(frame, "SIM_LONG_PROMPT_LINE_01")).toBeLessThanOrEqual(1);
|
|
107
|
+
expect(countLineContaining(frame, "SIM_ASSISTANT_LINE_40")).toBeLessThanOrEqual(1);
|
|
108
|
+
expect(countLineContaining(frame, "SIM_STREAMING_TAIL")).toBeLessThanOrEqual(1);
|
|
109
|
+
expect(frame.slice(-2)).toEqual(["SIM_FOOTER", "SIM_ACTIVITY_BAR"]);
|
|
110
|
+
});
|
|
111
|
+
it("keeps message/tool spacing stable in the simulated live frame", () => {
|
|
112
|
+
const frame = renderSimulationFrame({
|
|
113
|
+
liveItems: [
|
|
114
|
+
{ kind: "assistant", id: "assistant-intro", text: "I’ll inspect the renderer first." },
|
|
115
|
+
{
|
|
116
|
+
kind: "tool_group",
|
|
117
|
+
id: "tool-group",
|
|
118
|
+
tools: [
|
|
119
|
+
{
|
|
120
|
+
toolCallId: "read-1",
|
|
121
|
+
name: "read",
|
|
122
|
+
args: { file_path: "src/ui/App.tsx" },
|
|
123
|
+
status: "done",
|
|
124
|
+
result: "ok",
|
|
125
|
+
},
|
|
126
|
+
],
|
|
127
|
+
},
|
|
128
|
+
{ kind: "assistant", id: "assistant-next", text: "Now I’ll patch the layout." },
|
|
129
|
+
],
|
|
130
|
+
});
|
|
131
|
+
const compact = frame.filter((line) => line.length > 0);
|
|
132
|
+
expect(compact).toContain(" ⏺ I’ll inspect the renderer first.");
|
|
133
|
+
expect(compact.some((line) => line.includes("Read") && line.includes("App.tsx"))).toBe(true);
|
|
134
|
+
expect(compact).toContain(" ⏺ Now I’ll patch the layout.");
|
|
135
|
+
expect(countLineContaining(frame, "Now I’ll patch the layout.")).toBe(1);
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
//# sourceMappingURL=tui-simulation.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui-simulation.test.js","sourceRoot":"","sources":["../../src/ui/tui-simulation.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui-terminal-recorder.test.d.ts","sourceRoot":"","sources":["../../src/ui/tui-terminal-recorder.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import React from "react";
|
|
5
|
+
import { render } from "ink";
|
|
6
|
+
import { describe, expect, it } from "vitest";
|
|
7
|
+
import stripAnsi from "strip-ansi";
|
|
8
|
+
import { ChatControls, ChatLayout } from "./components/ChatLayout.js";
|
|
9
|
+
import { ChatLivePane } from "./components/ChatLivePane.js";
|
|
10
|
+
import { TerminalSizeProvider } from "./hooks/useTerminalSize.js";
|
|
11
|
+
import { renderTranscriptItem } from "./transcript/TranscriptRenderer.js";
|
|
12
|
+
import { loadTheme, ThemeContext } from "./theme/theme.js";
|
|
13
|
+
import { createTerminalHistoryPrinter } from "./terminal-history.js";
|
|
14
|
+
import { Text, useStdout } from "ink";
|
|
15
|
+
import { useEffect, useRef, useState } from "react";
|
|
16
|
+
import { useTranscriptHistory } from "./hooks/useTranscriptHistory.js";
|
|
17
|
+
import { ScreenRecorder, makeRecordingStdout } from "./testing/screen-recorder.js";
|
|
18
|
+
const COLUMNS = 80;
|
|
19
|
+
const ROWS = 24;
|
|
20
|
+
const CONTROLS_ROWS = 6;
|
|
21
|
+
const LIVE_ROWS = ROWS - CONTROLS_ROWS - 2;
|
|
22
|
+
const theme = loadTheme("dark");
|
|
23
|
+
const terminalContext = {
|
|
24
|
+
theme,
|
|
25
|
+
columns: COLUMNS,
|
|
26
|
+
version: "sim",
|
|
27
|
+
model: "sim-model",
|
|
28
|
+
provider: "anthropic",
|
|
29
|
+
cwd: "/tmp/sim-project",
|
|
30
|
+
};
|
|
31
|
+
function SimulatedControls({ label }) {
|
|
32
|
+
return (_jsxs(ChatControls, { controlsRef: () => { }, children: [_jsx(Text, { children: label }), _jsx(Text, { children: "SIM_INPUT_TOP" }), _jsx(Text, { children: "SIM_INPUT_BODY" }), _jsx(Text, { children: "SIM_INPUT_BOTTOM" }), _jsx(Text, { children: "SIM_FOOTER" }), _jsx(Text, { children: "SIM_ACTIVITY_BAR" })] }));
|
|
33
|
+
}
|
|
34
|
+
function SimulatedTui({ liveItems, streamingText = "", controlsLabel, }) {
|
|
35
|
+
const renderItem = (item, index, items) => renderTranscriptItem({
|
|
36
|
+
item,
|
|
37
|
+
index,
|
|
38
|
+
items,
|
|
39
|
+
version: "sim",
|
|
40
|
+
currentModel: "sim-model",
|
|
41
|
+
currentProvider: "anthropic",
|
|
42
|
+
displayedCwd: "/tmp/sim-project",
|
|
43
|
+
columns: COLUMNS,
|
|
44
|
+
theme,
|
|
45
|
+
renderMarkdown: true,
|
|
46
|
+
measuredLiveAreaRows: LIVE_ROWS,
|
|
47
|
+
});
|
|
48
|
+
return (_jsx(ThemeContext.Provider, { value: theme, children: _jsx(TerminalSizeProvider, { children: _jsxs(ChatLayout, { columns: COLUMNS, children: [_jsx(ChatLivePane, { liveItems: liveItems, renderItem: renderItem, isRunning: controlsLabel !== "SIM_DONE_STATUS", visibleStreamingText: streamingText, streamingThinking: "", thinkingMs: 0, reserveStreamingSpacing: false, renderMarkdown: true, measuredLiveAreaRows: LIVE_ROWS, assistantMarginTop: 0, streamingContinuation: false }), _jsx(SimulatedControls, { label: controlsLabel })] }) }) }));
|
|
49
|
+
}
|
|
50
|
+
function StatefulSimulatedTui({ initialLiveItems, streamingText = "", controlsLabel, flushItems, }) {
|
|
51
|
+
const { write: writeStdout } = useStdout();
|
|
52
|
+
const [history, setHistory] = useState([]);
|
|
53
|
+
const [liveItems, setLiveItems] = useState(initialLiveItems);
|
|
54
|
+
const flushedRef = useRef(false);
|
|
55
|
+
const { queueFlush } = useTranscriptHistory({
|
|
56
|
+
terminalHistoryPrinter: createTerminalHistoryPrinter(),
|
|
57
|
+
terminalHistoryContext: terminalContext,
|
|
58
|
+
writeStdout,
|
|
59
|
+
sessionPathRef: { current: undefined },
|
|
60
|
+
sessionManagerRef: { current: null },
|
|
61
|
+
history,
|
|
62
|
+
setHistory,
|
|
63
|
+
setLiveItems,
|
|
64
|
+
});
|
|
65
|
+
useEffect(() => {
|
|
66
|
+
if (!flushItems || flushedRef.current)
|
|
67
|
+
return;
|
|
68
|
+
flushedRef.current = true;
|
|
69
|
+
queueFlush(flushItems);
|
|
70
|
+
}, [flushItems, queueFlush]);
|
|
71
|
+
return (_jsx(SimulatedTui, { liveItems: liveItems, streamingText: streamingText, controlsLabel: controlsLabel }));
|
|
72
|
+
}
|
|
73
|
+
function makeStdout(recorder) {
|
|
74
|
+
return makeRecordingStdout(recorder);
|
|
75
|
+
}
|
|
76
|
+
function normalizedViewport(recorder) {
|
|
77
|
+
return recorder.viewportLines().map((line) => stripAnsi(line));
|
|
78
|
+
}
|
|
79
|
+
function formatFrame(label, lines) {
|
|
80
|
+
const body = lines
|
|
81
|
+
.map((line, index) => `${String(index + 1).padStart(2, "0")}│${line}`)
|
|
82
|
+
.join("\n");
|
|
83
|
+
return `\n=== ${label} ===\n${body}\n`;
|
|
84
|
+
}
|
|
85
|
+
function maybeWriteFrames(frames) {
|
|
86
|
+
if (process.env.GG_TUI_RECORD !== "1")
|
|
87
|
+
return;
|
|
88
|
+
const outPath = path.join(process.cwd(), ".gg", "tui-terminal-recorder.txt");
|
|
89
|
+
fs.mkdirSync(path.dirname(outPath), { recursive: true });
|
|
90
|
+
fs.writeFileSync(outPath, frames.map((frame) => formatFrame(frame.label, frame.lines)).join("\n"));
|
|
91
|
+
}
|
|
92
|
+
const longAssistant = Array.from({ length: 40 }, (_, index) => {
|
|
93
|
+
return `SIM_ASSISTANT_LINE_${String(index + 1).padStart(2, "0")}`;
|
|
94
|
+
}).join("\n");
|
|
95
|
+
async function nextRender() {
|
|
96
|
+
await new Promise((resolve) => setTimeout(resolve, 45));
|
|
97
|
+
}
|
|
98
|
+
describe("TUI terminal recorder", () => {
|
|
99
|
+
it("keeps the final assistant response live on normal done instead of flush-scrolling under controls", async () => {
|
|
100
|
+
const recorder = new ScreenRecorder({ columns: COLUMNS, rows: ROWS });
|
|
101
|
+
const stdout = makeStdout(recorder);
|
|
102
|
+
const frames = [];
|
|
103
|
+
const capture = (label) => frames.push({ label, lines: normalizedViewport(recorder) });
|
|
104
|
+
const mounted = render(_jsx(StatefulSimulatedTui, { initialLiveItems: [{ kind: "assistant", id: "assistant-live", text: longAssistant }], controlsLabel: "SIM_ACTIVITY_STATUS" }), { stdout, columns: COLUMNS, rows: ROWS, patchConsole: false, maxFps: 1000 });
|
|
105
|
+
await nextRender();
|
|
106
|
+
capture("hook active assistant before flush");
|
|
107
|
+
mounted.rerender(_jsx(StatefulSimulatedTui, { initialLiveItems: [{ kind: "assistant", id: "assistant-live", text: longAssistant }], controlsLabel: "SIM_DONE_STATUS" }));
|
|
108
|
+
await nextRender();
|
|
109
|
+
await nextRender();
|
|
110
|
+
capture("hook done after flush");
|
|
111
|
+
const viewport = normalizedViewport(recorder);
|
|
112
|
+
mounted.unmount();
|
|
113
|
+
maybeWriteFrames(frames);
|
|
114
|
+
const activeFrame = frames.find((frame) => frame.label === "hook active assistant before flush")?.lines ?? [];
|
|
115
|
+
const doneFrame = frames.find((frame) => frame.label === "hook done after flush")?.lines ?? [];
|
|
116
|
+
const activeStatusSlot = activeFrame.findIndex((line) => line.includes("SIM_ACTIVITY_STATUS"));
|
|
117
|
+
const doneStatusSlot = doneFrame.findIndex((line) => line.includes("SIM_DONE_STATUS"));
|
|
118
|
+
expect(doneStatusSlot).toBe(activeStatusSlot);
|
|
119
|
+
expect(doneFrame.some((line) => line.includes("SIM_ASSISTANT_LINE_40"))).toBe(true);
|
|
120
|
+
const doneIndex = viewport.findIndex((line) => line.includes("SIM_DONE_STATUS"));
|
|
121
|
+
const footerIndex = viewport.findIndex((line) => line.includes("SIM_FOOTER"));
|
|
122
|
+
expect(doneIndex).toBeGreaterThanOrEqual(0);
|
|
123
|
+
expect(footerIndex).toBeGreaterThan(doneIndex);
|
|
124
|
+
expect(viewport.slice(doneIndex, footerIndex + 2)).toEqual([
|
|
125
|
+
"SIM_DONE_STATUS",
|
|
126
|
+
"SIM_INPUT_TOP",
|
|
127
|
+
"SIM_INPUT_BODY",
|
|
128
|
+
"SIM_INPUT_BOTTOM",
|
|
129
|
+
"SIM_FOOTER",
|
|
130
|
+
"SIM_ACTIVITY_BAR",
|
|
131
|
+
]);
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
//# sourceMappingURL=tui-terminal-recorder.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui-terminal-recorder.test.js","sourceRoot":"","sources":["../../src/ui/tui-terminal-recorder.test.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kenkaiiii/ggcoder",
|
|
3
|
-
"version": "4.3.
|
|
3
|
+
"version": "4.3.231",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "CLI coding agent with OAuth authentication for Anthropic, OpenAI, and Gemini",
|
|
6
6
|
"license": "MIT",
|
|
@@ -110,9 +110,9 @@
|
|
|
110
110
|
"strip-ansi": "^7.2.0",
|
|
111
111
|
"wrap-ansi": "^10.0.0",
|
|
112
112
|
"zod": "^4.4.3",
|
|
113
|
-
"@kenkaiiii/gg-agent": "4.3.
|
|
114
|
-
"@kenkaiiii/gg-
|
|
115
|
-
"@kenkaiiii/gg-
|
|
113
|
+
"@kenkaiiii/gg-agent": "4.3.231",
|
|
114
|
+
"@kenkaiiii/gg-pixel": "4.3.101",
|
|
115
|
+
"@kenkaiiii/gg-ai": "4.3.231"
|
|
116
116
|
},
|
|
117
117
|
"optionalDependencies": {
|
|
118
118
|
"@huggingface/transformers": "^3.6.0",
|
|
@@ -135,7 +135,7 @@
|
|
|
135
135
|
"build": "pnpm clean && tsc",
|
|
136
136
|
"check": "tsc --noEmit",
|
|
137
137
|
"test": "vitest run",
|
|
138
|
-
"verify:goal:tests": "vitest run src/core/goal-controller.test.ts src/core/goal-store.test.ts src/core/goal-prerequisites.test.ts src/core/goal-verifier.test.ts src/core/goal-worker.test.ts src/core/goal-worker-dev-server-lifecycle.test.ts src/core/goal-lifecycle-smoke.test.ts src/tools/goals.test.ts src/tools/goal-mode.test.ts src/ui/goal-events.test.ts src/ui/goal-lifecycle-orchestration.test.ts src/ui/goal-overlay.test.ts src/ui/goal-status-bar.test.ts src/system-prompt.test.ts",
|
|
138
|
+
"verify:goal:tests": "vitest run src/core/goal-controller.test.ts src/core/goal-engine.test.ts src/core/goal-store.test.ts src/core/goal-integration.test.ts src/core/goal-prerequisites.test.ts src/core/goal-verifier.test.ts src/core/goal-worker.test.ts src/core/goal-worker-dev-server-lifecycle.test.ts src/core/goal-worktree.test.ts src/core/goal-lifecycle-smoke.test.ts src/tools/goals.test.ts src/tools/goal-mode.test.ts src/ui/goal-events.test.ts src/ui/goal-lifecycle-orchestration.test.ts src/ui/goal-overlay.test.ts src/ui/goal-status-bar.test.ts src/system-prompt.test.ts",
|
|
139
139
|
"verify:goal:overhead": "tsx scripts/verify-goal-overhead-harness.ts",
|
|
140
140
|
"goal:overhead-audit": "tsx scripts/verify-goal-overhead-audit.ts",
|
|
141
141
|
"verify:goal:e2e": "pnpm dlx tsx scripts/verify-goal-e2e.ts"
|