@kenkaiiii/ggcoder 4.14.0 → 4.14.1
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/cache-warm-benchmark.d.ts +22 -0
- package/dist/core/cache-warm-benchmark.d.ts.map +1 -0
- package/dist/core/cache-warm-benchmark.js +170 -0
- package/dist/core/cache-warm-benchmark.js.map +1 -0
- package/dist/core/fast-apply-benchmark.d.ts +26 -0
- package/dist/core/fast-apply-benchmark.d.ts.map +1 -0
- package/dist/core/fast-apply-benchmark.js +284 -0
- package/dist/core/fast-apply-benchmark.js.map +1 -0
- package/dist/ui/App.d.ts +1 -2
- package/dist/ui/App.d.ts.map +1 -1
- package/dist/ui/components/ActivityIndicator.d.ts +1 -1
- package/dist/ui/components/ActivityIndicator.d.ts.map +1 -1
- package/dist/ui/components/AnimationContext.d.ts +1 -1
- package/dist/ui/components/AnimationContext.d.ts.map +1 -1
- package/dist/ui/components/AssistantMessage.d.ts +1 -1
- package/dist/ui/components/AssistantMessage.d.ts.map +1 -1
- package/dist/ui/components/BackgroundTasksBar.d.ts +1 -2
- package/dist/ui/components/BackgroundTasksBar.d.ts.map +1 -1
- package/dist/ui/components/Banner.d.ts +1 -2
- package/dist/ui/components/Banner.d.ts.map +1 -1
- package/dist/ui/components/ChatFooterPane.d.ts +1 -2
- package/dist/ui/components/ChatFooterPane.d.ts.map +1 -1
- package/dist/ui/components/ChatInputStack.d.ts +1 -1
- package/dist/ui/components/ChatInputStack.d.ts.map +1 -1
- package/dist/ui/components/ChatLayout.d.ts +4 -4
- package/dist/ui/components/ChatLayout.d.ts.map +1 -1
- package/dist/ui/components/ChatLivePane.d.ts +1 -1
- package/dist/ui/components/ChatLivePane.d.ts.map +1 -1
- package/dist/ui/components/ChatScreen.d.ts +1 -1
- package/dist/ui/components/ChatScreen.d.ts.map +1 -1
- package/dist/ui/components/ChatStatusRow.d.ts +1 -1
- package/dist/ui/components/ChatStatusRow.d.ts.map +1 -1
- package/dist/ui/components/CompactionNotice.d.ts +2 -3
- package/dist/ui/components/CompactionNotice.d.ts.map +1 -1
- package/dist/ui/components/DiffFrame.d.ts +1 -1
- package/dist/ui/components/DiffFrame.d.ts.map +1 -1
- package/dist/ui/components/DiffView.d.ts +1 -2
- package/dist/ui/components/DiffView.d.ts.map +1 -1
- package/dist/ui/components/Footer.d.ts +1 -2
- package/dist/ui/components/Footer.d.ts.map +1 -1
- package/dist/ui/components/FooterStatusRow.d.ts +1 -2
- package/dist/ui/components/FooterStatusRow.d.ts.map +1 -1
- package/dist/ui/components/FullScreenOverlayRouter.d.ts +1 -2
- package/dist/ui/components/FullScreenOverlayRouter.d.ts.map +1 -1
- package/dist/ui/components/IdealHookMessage.d.ts +1 -1
- package/dist/ui/components/IdealHookMessage.d.ts.map +1 -1
- package/dist/ui/components/InputArea.d.ts +1 -1
- package/dist/ui/components/InputArea.d.ts.map +1 -1
- package/dist/ui/components/LiveToolPanel.d.ts +1 -2
- package/dist/ui/components/LiveToolPanel.d.ts.map +1 -1
- package/dist/ui/components/Markdown.d.ts +2 -2
- package/dist/ui/components/Markdown.d.ts.map +1 -1
- package/dist/ui/components/ModelSelector.d.ts +1 -2
- package/dist/ui/components/ModelSelector.d.ts.map +1 -1
- package/dist/ui/components/Overlay.d.ts +1 -1
- package/dist/ui/components/Overlay.d.ts.map +1 -1
- package/dist/ui/components/PixelOverlay.d.ts +1 -2
- package/dist/ui/components/PixelOverlay.d.ts.map +1 -1
- package/dist/ui/components/PlanApproval.d.ts +1 -2
- package/dist/ui/components/PlanApproval.d.ts.map +1 -1
- package/dist/ui/components/PlanBanner.d.ts +1 -2
- package/dist/ui/components/PlanBanner.d.ts.map +1 -1
- package/dist/ui/components/PlanModeLogo.d.ts +1 -2
- package/dist/ui/components/PlanModeLogo.d.ts.map +1 -1
- package/dist/ui/components/PlanOverlay.d.ts +2 -3
- package/dist/ui/components/PlanOverlay.d.ts.map +1 -1
- package/dist/ui/components/PlanProgress.d.ts +1 -2
- package/dist/ui/components/PlanProgress.d.ts.map +1 -1
- package/dist/ui/components/QueueIndicator.d.ts +1 -2
- package/dist/ui/components/QueueIndicator.d.ts.map +1 -1
- package/dist/ui/components/RewindOverlay.d.ts +1 -2
- package/dist/ui/components/RewindOverlay.d.ts.map +1 -1
- package/dist/ui/components/SelectList.d.ts +1 -2
- package/dist/ui/components/SelectList.d.ts.map +1 -1
- package/dist/ui/components/ServerToolExecution.d.ts +1 -2
- package/dist/ui/components/ServerToolExecution.d.ts.map +1 -1
- package/dist/ui/components/SessionSelector.d.ts +1 -2
- package/dist/ui/components/SessionSelector.d.ts.map +1 -1
- package/dist/ui/components/SessionSummary.d.ts +1 -2
- package/dist/ui/components/SessionSummary.d.ts.map +1 -1
- package/dist/ui/components/SettingsSelector.d.ts +1 -2
- package/dist/ui/components/SettingsSelector.d.ts.map +1 -1
- package/dist/ui/components/SkillsOverlay.d.ts +1 -2
- package/dist/ui/components/SkillsOverlay.d.ts.map +1 -1
- package/dist/ui/components/SlashCommandMenu.d.ts +1 -2
- package/dist/ui/components/SlashCommandMenu.d.ts.map +1 -1
- package/dist/ui/components/SlashStyledSelectList.d.ts +1 -2
- package/dist/ui/components/SlashStyledSelectList.d.ts.map +1 -1
- package/dist/ui/components/Spinner.d.ts +1 -2
- package/dist/ui/components/Spinner.d.ts.map +1 -1
- package/dist/ui/components/StreamingArea.d.ts +1 -1
- package/dist/ui/components/StreamingArea.d.ts.map +1 -1
- package/dist/ui/components/SubAgentPanel.d.ts +1 -2
- package/dist/ui/components/SubAgentPanel.d.ts.map +1 -1
- package/dist/ui/components/TaskPickerMenu.d.ts +1 -2
- package/dist/ui/components/TaskPickerMenu.d.ts.map +1 -1
- package/dist/ui/components/ThemeSelector.d.ts +1 -2
- package/dist/ui/components/ThemeSelector.d.ts.map +1 -1
- package/dist/ui/components/ThinkingBlock.d.ts +1 -1
- package/dist/ui/components/ThinkingBlock.d.ts.map +1 -1
- package/dist/ui/components/ToolExecution.d.ts +1 -2
- package/dist/ui/components/ToolExecution.d.ts.map +1 -1
- package/dist/ui/components/ToolGroupExecution.d.ts +1 -2
- package/dist/ui/components/ToolGroupExecution.d.ts.map +1 -1
- package/dist/ui/components/TranscriptViewport.d.ts +1 -1
- package/dist/ui/components/TranscriptViewport.d.ts.map +1 -1
- package/dist/ui/components/UserMessage.d.ts +1 -2
- package/dist/ui/components/UserMessage.d.ts.map +1 -1
- package/dist/ui/transcript/MiscRows.d.ts +7 -8
- package/dist/ui/transcript/MiscRows.d.ts.map +1 -1
- package/dist/ui/transcript/StatusRow.d.ts +1 -1
- package/dist/ui/transcript/StatusRow.d.ts.map +1 -1
- package/dist/ui/transcript/ToolRows.d.ts +6 -7
- package/dist/ui/transcript/ToolRows.d.ts.map +1 -1
- package/dist/ui/transcript/TranscriptItemFrame.d.ts +1 -1
- package/dist/ui/transcript/TranscriptItemFrame.d.ts.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompt-cache warming micro-benchmark — isolates the cache effect.
|
|
3
|
+
*
|
|
4
|
+
* The existing api-benchmark grows the conversation each turn and uses a tiny
|
|
5
|
+
* (~250 token) system prompt, which is BELOW Anthropic's minimum cacheable
|
|
6
|
+
* prefix (1024 tok Sonnet/Opus, 2048 Haiku) — so caching never engages and the
|
|
7
|
+
* A/B is dominated by turn-to-turn throughput variance.
|
|
8
|
+
*
|
|
9
|
+
* This test uses a large, FIXED prefix (well above the min) and a tiny variable
|
|
10
|
+
* suffix, then measures, per arm:
|
|
11
|
+
* COLD — fresh cache key, first hit (cache WRITE, no read).
|
|
12
|
+
* WARM — prewarm the prefix, then measure the next call's cache_read + TTFT.
|
|
13
|
+
*
|
|
14
|
+
* It reports cache_read tokens and TTFT directly, so the cache effect is visible
|
|
15
|
+
* regardless of throughput noise.
|
|
16
|
+
*
|
|
17
|
+
* Usage: npx tsx src/core/cache-warm-benchmark.ts
|
|
18
|
+
* Env: GG_CW_PROVIDER (default anthropic), GG_CW_MODEL (default claude-haiku-4-5-20251001),
|
|
19
|
+
* GG_CW_REPS (default 4)
|
|
20
|
+
*/
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=cache-warm-benchmark.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-warm-benchmark.d.ts","sourceRoot":"","sources":["../../src/core/cache-warm-benchmark.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompt-cache warming micro-benchmark — isolates the cache effect.
|
|
3
|
+
*
|
|
4
|
+
* The existing api-benchmark grows the conversation each turn and uses a tiny
|
|
5
|
+
* (~250 token) system prompt, which is BELOW Anthropic's minimum cacheable
|
|
6
|
+
* prefix (1024 tok Sonnet/Opus, 2048 Haiku) — so caching never engages and the
|
|
7
|
+
* A/B is dominated by turn-to-turn throughput variance.
|
|
8
|
+
*
|
|
9
|
+
* This test uses a large, FIXED prefix (well above the min) and a tiny variable
|
|
10
|
+
* suffix, then measures, per arm:
|
|
11
|
+
* COLD — fresh cache key, first hit (cache WRITE, no read).
|
|
12
|
+
* WARM — prewarm the prefix, then measure the next call's cache_read + TTFT.
|
|
13
|
+
*
|
|
14
|
+
* It reports cache_read tokens and TTFT directly, so the cache effect is visible
|
|
15
|
+
* regardless of throughput noise.
|
|
16
|
+
*
|
|
17
|
+
* Usage: npx tsx src/core/cache-warm-benchmark.ts
|
|
18
|
+
* Env: GG_CW_PROVIDER (default anthropic), GG_CW_MODEL (default claude-haiku-4-5-20251001),
|
|
19
|
+
* GG_CW_REPS (default 4)
|
|
20
|
+
*/
|
|
21
|
+
import { stream } from "@kenkaiiii/gg-ai";
|
|
22
|
+
import { AuthStorage } from "./auth-storage.js";
|
|
23
|
+
/** Build a large, realistic coding-agent system prompt (~well above 2048 tok). */
|
|
24
|
+
function bigPrefix() {
|
|
25
|
+
const toolDoc = (name, desc) => `### ${name}\n${desc}\nParameters are validated with a Zod schema and converted to JSON Schema at the provider boundary. ` +
|
|
26
|
+
`Errors are returned as structured tool results so the agent can self-correct in the same turn. `;
|
|
27
|
+
const tools = [
|
|
28
|
+
toolDoc("read", "Read a file's contents with cat -n style numbered lines, truncated to 2000 lines or 50KB."),
|
|
29
|
+
toolDoc("write", "Write content to a file, creating parent directories. Existing files must be read first."),
|
|
30
|
+
toolDoc("edit", "Replace text via search/replace blocks applied sequentially with a fuzzy fallback ladder."),
|
|
31
|
+
toolDoc("bash", "Execute a shell command in a non-interactive bash shell with combined stdout/stderr."),
|
|
32
|
+
toolDoc("grep", "Search file contents using regex, returning filepath:line:content matches."),
|
|
33
|
+
toolDoc("find", "Find files matching a glob pattern, respecting .gitignore."),
|
|
34
|
+
toolDoc("ls", "List directory contents with file types and sizes."),
|
|
35
|
+
toolDoc("web_fetch", "Fetch and read web page content as Markdown, extracting main content."),
|
|
36
|
+
toolDoc("subagent", "Spawn an isolated sub-agent with its own context window for a focused task."),
|
|
37
|
+
toolDoc("task_output", "Read new output from a background process by id."),
|
|
38
|
+
];
|
|
39
|
+
// Repeat the tool block several times so the prefix clears Anthropic's
|
|
40
|
+
// minimum cacheable size (1024 tok Sonnet/Opus, 2048 Haiku) with headroom.
|
|
41
|
+
const bulkTools = [];
|
|
42
|
+
for (let r = 0; r < 22; r++)
|
|
43
|
+
bulkTools.push(...tools, `<!-- tool block repetition ${r} for prefix sizing -->`);
|
|
44
|
+
return [
|
|
45
|
+
"You are GG Coder — a coding agent that works directly in the user's codebase.",
|
|
46
|
+
"You explore, understand, change, and verify code end-to-end.",
|
|
47
|
+
"",
|
|
48
|
+
"## How to Talk",
|
|
49
|
+
"Lead with the outcome. One idea per line. Bottom line first. No preamble or recap.",
|
|
50
|
+
"Stay silent between tool calls unless you hit a decision, tradeoff, or question.",
|
|
51
|
+
"",
|
|
52
|
+
"## How to Work",
|
|
53
|
+
"Read before edit/write; re-read after formatters, codegen, or any disk mutator.",
|
|
54
|
+
"Match neighbouring code style. Keep edits small; plan multi-file work first.",
|
|
55
|
+
"Choose targeted verification appropriate to the change; read and fix failures.",
|
|
56
|
+
"Do not assume APIs, CLI flags, config schema, or error wording — verify against source.",
|
|
57
|
+
"",
|
|
58
|
+
"## Tools",
|
|
59
|
+
...bulkTools,
|
|
60
|
+
"",
|
|
61
|
+
"## Code Quality",
|
|
62
|
+
"Intent-revealing names; reuse existing deps. Types first; handle I/O, input, and external API errors.",
|
|
63
|
+
"No dead or commented-out code, placeholders, or unasked refactors.",
|
|
64
|
+
"",
|
|
65
|
+
"## Environment",
|
|
66
|
+
"Working directory: /home/user/project. Platform: darwin.",
|
|
67
|
+
].join("\n");
|
|
68
|
+
}
|
|
69
|
+
async function call(cfg, system, user, promptCacheKey, cacheRetention) {
|
|
70
|
+
const messages = [
|
|
71
|
+
{ role: "system", content: system },
|
|
72
|
+
{ role: "user", content: user },
|
|
73
|
+
];
|
|
74
|
+
const start = Date.now();
|
|
75
|
+
let ttftMs = 0;
|
|
76
|
+
let first = true;
|
|
77
|
+
const result = stream({
|
|
78
|
+
provider: cfg.provider,
|
|
79
|
+
model: cfg.model,
|
|
80
|
+
messages,
|
|
81
|
+
maxTokens: 16,
|
|
82
|
+
apiKey: cfg.apiKey,
|
|
83
|
+
baseUrl: cfg.baseUrl,
|
|
84
|
+
accountId: cfg.accountId,
|
|
85
|
+
promptCacheKey,
|
|
86
|
+
cacheRetention,
|
|
87
|
+
});
|
|
88
|
+
for await (const event of result) {
|
|
89
|
+
if (first && (event.type === "text_delta" || event.type === "thinking_delta")) {
|
|
90
|
+
ttftMs = Date.now() - start;
|
|
91
|
+
first = false;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
const response = await result.response;
|
|
95
|
+
return {
|
|
96
|
+
ttftMs: ttftMs || Date.now() - start,
|
|
97
|
+
wallMs: Date.now() - start,
|
|
98
|
+
inputTokens: response.usage.inputTokens,
|
|
99
|
+
cacheRead: response.usage.cacheRead ?? 0,
|
|
100
|
+
cacheWrite: response.usage.cacheWrite ?? 0,
|
|
101
|
+
outputTokens: response.usage.outputTokens,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
function sleep(ms) {
|
|
105
|
+
return new Promise((r) => setTimeout(r, ms));
|
|
106
|
+
}
|
|
107
|
+
async function main() {
|
|
108
|
+
const provider = process.env.GG_CW_PROVIDER ?? "anthropic";
|
|
109
|
+
const model = process.env.GG_CW_MODEL ?? "claude-haiku-4-5-20251001";
|
|
110
|
+
const reps = parseInt(process.env.GG_CW_REPS ?? "4", 10);
|
|
111
|
+
const auth = new AuthStorage();
|
|
112
|
+
await auth.load();
|
|
113
|
+
const c = await auth.resolveCredentials(provider);
|
|
114
|
+
const cfg = {
|
|
115
|
+
provider,
|
|
116
|
+
model,
|
|
117
|
+
apiKey: c.accessToken,
|
|
118
|
+
baseUrl: c.baseUrl,
|
|
119
|
+
accountId: c.accountId,
|
|
120
|
+
};
|
|
121
|
+
const system = bigPrefix();
|
|
122
|
+
// Rough token size of the prefix (chars/3.3) for context.
|
|
123
|
+
console.log(`\n🔥 Cache-warm micro-benchmark: ${provider}/${model}`);
|
|
124
|
+
console.log(` Prefix ~${Math.round(system.length / 3.3)} tokens, ${reps} reps per arm\n`);
|
|
125
|
+
// ── COLD arm: every rep uses a UNIQUE cache key → never reads cache ──
|
|
126
|
+
console.log("▶ COLD (no warming — fresh cache key each call):");
|
|
127
|
+
// Each cold rep gets UNIQUE prefix content (Anthropic caches by content, not
|
|
128
|
+
// by key) so every call is a true cache miss — otherwise rep 2+ would read
|
|
129
|
+
// rep 1's cache and pollute the cold baseline.
|
|
130
|
+
const cold = [];
|
|
131
|
+
for (let i = 0; i < reps; i++) {
|
|
132
|
+
const uniqueSystem = `<!-- cold-sample-${Date.now()}-${i} -->\n${system}`;
|
|
133
|
+
const m = await call(cfg, uniqueSystem, `Question ${i}: name one tool.`, `cold-${Date.now()}-${i}`, "short");
|
|
134
|
+
cold.push(m);
|
|
135
|
+
console.log(` rep ${i + 1}: TTFT ${m.ttftMs}ms | in ${m.inputTokens} | cacheRead ${m.cacheRead} | cacheWrite ${m.cacheWrite}`);
|
|
136
|
+
await sleep(1500);
|
|
137
|
+
}
|
|
138
|
+
await sleep(3000);
|
|
139
|
+
// ── WARM arm: prewarm a SHARED key, then measure subsequent calls (cache reads) ──
|
|
140
|
+
console.log("\n▶ WARM (prewarm shared prefix, then measure cache reads):");
|
|
141
|
+
const warmKey = `warm-${Date.now()}`;
|
|
142
|
+
// Prewarm: a throwaway call that writes the cache.
|
|
143
|
+
const pw = await call(cfg, system, "warm.", warmKey, "long");
|
|
144
|
+
console.log(` prewarm: cacheWrite ${pw.cacheWrite} (cache primed)`);
|
|
145
|
+
await sleep(1500);
|
|
146
|
+
const warm = [];
|
|
147
|
+
for (let i = 0; i < reps; i++) {
|
|
148
|
+
const m = await call(cfg, system, `Question ${i}: name one tool.`, warmKey, "long");
|
|
149
|
+
warm.push(m);
|
|
150
|
+
console.log(` rep ${i + 1}: TTFT ${m.ttftMs}ms | in ${m.inputTokens} | cacheRead ${m.cacheRead} | cacheWrite ${m.cacheWrite}`);
|
|
151
|
+
await sleep(1500);
|
|
152
|
+
}
|
|
153
|
+
const avg = (xs, f) => xs.reduce((s, m) => s + f(m), 0) / xs.length;
|
|
154
|
+
const coldTtft = avg(cold, (m) => m.ttftMs);
|
|
155
|
+
const warmTtft = avg(warm, (m) => m.ttftMs);
|
|
156
|
+
const coldRead = avg(cold, (m) => m.cacheRead);
|
|
157
|
+
const warmRead = avg(warm, (m) => m.cacheRead);
|
|
158
|
+
console.log("\n══════════════════════ RESULTS ══════════════════════");
|
|
159
|
+
console.log(`Avg cacheRead tokens : cold ${coldRead.toFixed(0)} → warm ${warmRead.toFixed(0)}`);
|
|
160
|
+
console.log(`Avg TTFT : cold ${coldTtft.toFixed(0)}ms → warm ${warmTtft.toFixed(0)}ms ` +
|
|
161
|
+
`(${coldTtft > warmTtft ? "-" : "+"}${Math.abs(((coldTtft - warmTtft) / coldTtft) * 100).toFixed(0)}%)`);
|
|
162
|
+
const warmHitRate = warm.filter((m) => m.cacheRead > 0).length / warm.length;
|
|
163
|
+
console.log(`Warm cache hit rate : ${(warmHitRate * 100).toFixed(0)}%`);
|
|
164
|
+
console.log(`Verdict: ${warmRead > 0 ? "caching ENGAGES when prefix exceeds the min — warming converts cold writes to reads" : "caching did NOT engage (prefix below provider minimum, or OAuth path strips cache_control)"}`);
|
|
165
|
+
}
|
|
166
|
+
main().catch((err) => {
|
|
167
|
+
console.error("Benchmark failed:", err);
|
|
168
|
+
process.exit(1);
|
|
169
|
+
});
|
|
170
|
+
//# sourceMappingURL=cache-warm-benchmark.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-warm-benchmark.js","sourceRoot":"","sources":["../../src/core/cache-warm-benchmark.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fast-apply vs current-edit benchmark — real-API measurement.
|
|
3
|
+
*
|
|
4
|
+
* Two strategies for the same edit task, measured end-to-end against live models:
|
|
5
|
+
*
|
|
6
|
+
* BASELINE (what ggcoder does today): the frontier model emits full
|
|
7
|
+
* search/replace edit blocks (old_text + new_text, verbatim context). Our
|
|
8
|
+
* edit tool then applies them LOCALLY and instantly (no apply model).
|
|
9
|
+
*
|
|
10
|
+
* FAST-APPLY (the proposed feature): the frontier model emits a terse "lazy"
|
|
11
|
+
* edit using `// ... existing code ...` markers (far fewer output tokens), and
|
|
12
|
+
* a cheap/fast "apply" model merges that lazy edit into the full file —
|
|
13
|
+
* regenerating the whole file as output.
|
|
14
|
+
*
|
|
15
|
+
* We measure, per task: frontier output tokens + time, apply-model output tokens
|
|
16
|
+
* + time, total wall-clock, and an anchor-based correctness check.
|
|
17
|
+
*
|
|
18
|
+
* Usage:
|
|
19
|
+
* npx tsx src/core/fast-apply-benchmark.ts
|
|
20
|
+
*
|
|
21
|
+
* Env overrides:
|
|
22
|
+
* GG_FA_FRONTIER_PROVIDER / GG_FA_FRONTIER_MODEL (default openai / gpt-5.5)
|
|
23
|
+
* GG_FA_APPLY_PROVIDER / GG_FA_APPLY_MODEL (default gemini / gemini-3.1-flash-lite-preview)
|
|
24
|
+
*/
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=fast-apply-benchmark.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fast-apply-benchmark.d.ts","sourceRoot":"","sources":["../../src/core/fast-apply-benchmark.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG"}
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fast-apply vs current-edit benchmark — real-API measurement.
|
|
3
|
+
*
|
|
4
|
+
* Two strategies for the same edit task, measured end-to-end against live models:
|
|
5
|
+
*
|
|
6
|
+
* BASELINE (what ggcoder does today): the frontier model emits full
|
|
7
|
+
* search/replace edit blocks (old_text + new_text, verbatim context). Our
|
|
8
|
+
* edit tool then applies them LOCALLY and instantly (no apply model).
|
|
9
|
+
*
|
|
10
|
+
* FAST-APPLY (the proposed feature): the frontier model emits a terse "lazy"
|
|
11
|
+
* edit using `// ... existing code ...` markers (far fewer output tokens), and
|
|
12
|
+
* a cheap/fast "apply" model merges that lazy edit into the full file —
|
|
13
|
+
* regenerating the whole file as output.
|
|
14
|
+
*
|
|
15
|
+
* We measure, per task: frontier output tokens + time, apply-model output tokens
|
|
16
|
+
* + time, total wall-clock, and an anchor-based correctness check.
|
|
17
|
+
*
|
|
18
|
+
* Usage:
|
|
19
|
+
* npx tsx src/core/fast-apply-benchmark.ts
|
|
20
|
+
*
|
|
21
|
+
* Env overrides:
|
|
22
|
+
* GG_FA_FRONTIER_PROVIDER / GG_FA_FRONTIER_MODEL (default openai / gpt-5.5)
|
|
23
|
+
* GG_FA_APPLY_PROVIDER / GG_FA_APPLY_MODEL (default gemini / gemini-3.1-flash-lite-preview)
|
|
24
|
+
*/
|
|
25
|
+
import { stream } from "@kenkaiiii/gg-ai";
|
|
26
|
+
import { AuthStorage } from "./auth-storage.js";
|
|
27
|
+
function genFile(lines) {
|
|
28
|
+
// Build a realistic-ish TS module with many small functions so the edit
|
|
29
|
+
// target sits in the middle and most of the file is "untouched context".
|
|
30
|
+
const head = [
|
|
31
|
+
`import { EventEmitter } from "node:events";`,
|
|
32
|
+
`import { performance } from "node:perf_hooks";`,
|
|
33
|
+
``,
|
|
34
|
+
`/** Auto-generated module with ${lines} lines for benchmarking. */`,
|
|
35
|
+
`export interface Config {`,
|
|
36
|
+
` retries: number;`,
|
|
37
|
+
` timeoutMs: number;`,
|
|
38
|
+
` label: string;`,
|
|
39
|
+
`}`,
|
|
40
|
+
``,
|
|
41
|
+
`const DEFAULT_TIMEOUT = 3000;`,
|
|
42
|
+
``,
|
|
43
|
+
];
|
|
44
|
+
const body = [];
|
|
45
|
+
let n = 0;
|
|
46
|
+
while (head.length + body.length < lines - 12) {
|
|
47
|
+
body.push(`export function task${n}(x: number): number {`, ` // step ${n}`, ` const y = x * ${n + 1} + DEFAULT_TIMEOUT;`, ` return y - ${n};`, `}`, ``);
|
|
48
|
+
n++;
|
|
49
|
+
}
|
|
50
|
+
const tail = [
|
|
51
|
+
`export function computeTimeout(cfg: Config): number {`,
|
|
52
|
+
` return cfg.timeoutMs > 0 ? cfg.timeoutMs : DEFAULT_TIMEOUT;`,
|
|
53
|
+
`}`,
|
|
54
|
+
``,
|
|
55
|
+
`export const SENTINEL_TAIL = "anchor_${lines}_end";`,
|
|
56
|
+
``,
|
|
57
|
+
];
|
|
58
|
+
return [...head, ...body, ...tail].join("\n");
|
|
59
|
+
}
|
|
60
|
+
function buildTasks() {
|
|
61
|
+
const sizes = [
|
|
62
|
+
{ name: "small", lines: 40 },
|
|
63
|
+
{ name: "medium", lines: 160 },
|
|
64
|
+
{ name: "large", lines: 420 },
|
|
65
|
+
];
|
|
66
|
+
return sizes.map((s) => ({
|
|
67
|
+
name: s.name,
|
|
68
|
+
approxLines: s.lines,
|
|
69
|
+
file: genFile(s.lines),
|
|
70
|
+
instruction: "Change `computeTimeout` so that when `cfg.retries` is greater than 0 it returns " +
|
|
71
|
+
"`cfg.timeoutMs * cfg.retries` (capped at 30000), otherwise it keeps the existing behaviour. " +
|
|
72
|
+
"Also add a one-line JSDoc comment above the function describing it.",
|
|
73
|
+
mustContain: ["cfg.timeoutMs * cfg.retries", "30000", "computeTimeout"],
|
|
74
|
+
mustPreserve: ["DEFAULT_TIMEOUT = 3000", `SENTINEL_TAIL = "anchor_${s.lines}_end"`, "task0"],
|
|
75
|
+
}));
|
|
76
|
+
}
|
|
77
|
+
// ── Prompts ──────────────────────────────────────────────────
|
|
78
|
+
function baselinePrompt(file, instruction) {
|
|
79
|
+
return [
|
|
80
|
+
{
|
|
81
|
+
role: "system",
|
|
82
|
+
content: "You are a coding agent's edit engine. Output ONLY search/replace edit blocks " +
|
|
83
|
+
"in this exact format, nothing else:\n" +
|
|
84
|
+
"<<<<<<< SEARCH\n(exact text from the file)\n=======\n(replacement text)\n>>>>>>> REPLACE\n" +
|
|
85
|
+
"The SEARCH text must be copied verbatim from the file including surrounding context " +
|
|
86
|
+
"so it matches uniquely. Do not output explanations.",
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
role: "user",
|
|
90
|
+
content: `FILE:\n\`\`\`ts\n${file}\n\`\`\`\n\nEDIT INSTRUCTION: ${instruction}`,
|
|
91
|
+
},
|
|
92
|
+
];
|
|
93
|
+
}
|
|
94
|
+
function lazyEditPrompt(file, instruction) {
|
|
95
|
+
return [
|
|
96
|
+
{
|
|
97
|
+
role: "system",
|
|
98
|
+
content: "You are a coding agent. Output ONLY a concise 'lazy' edit snippet that shows the " +
|
|
99
|
+
"change, using `// ... existing code ...` to elide all unchanged regions. " +
|
|
100
|
+
"Show just enough surrounding context to locate the change unambiguously. " +
|
|
101
|
+
"Do not reproduce the whole file. Do not explain.",
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
role: "user",
|
|
105
|
+
content: `FILE:\n\`\`\`ts\n${file}\n\`\`\`\n\nEDIT INSTRUCTION: ${instruction}`,
|
|
106
|
+
},
|
|
107
|
+
];
|
|
108
|
+
}
|
|
109
|
+
function applyPrompt(file, lazyEdit) {
|
|
110
|
+
return [
|
|
111
|
+
{
|
|
112
|
+
role: "system",
|
|
113
|
+
content: "You merge a lazy edit into a source file. Given the ORIGINAL file and an EDIT " +
|
|
114
|
+
"snippet that uses `// ... existing code ...` markers, output the COMPLETE final file " +
|
|
115
|
+
"with the edit applied. Output ONLY the raw file contents — no markdown fences, no commentary.",
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
role: "user",
|
|
119
|
+
content: `ORIGINAL FILE:\n${file}\n\nEDIT:\n${lazyEdit}`,
|
|
120
|
+
},
|
|
121
|
+
];
|
|
122
|
+
}
|
|
123
|
+
function sleep(ms) {
|
|
124
|
+
return new Promise((r) => setTimeout(r, ms));
|
|
125
|
+
}
|
|
126
|
+
async function call(provider, model, apiKey, baseUrl, accountId, messages, maxTokens) {
|
|
127
|
+
// Retry transient provider errors (429/500) with exponential backoff so a
|
|
128
|
+
// flaky cheap model doesn't abort the whole benchmark.
|
|
129
|
+
let lastErr;
|
|
130
|
+
for (let attempt = 0; attempt < 4; attempt++) {
|
|
131
|
+
try {
|
|
132
|
+
return await callOnce(provider, model, apiKey, baseUrl, accountId, messages, maxTokens);
|
|
133
|
+
}
|
|
134
|
+
catch (err) {
|
|
135
|
+
lastErr = err;
|
|
136
|
+
await sleep(2000 * (attempt + 1));
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
throw lastErr;
|
|
140
|
+
}
|
|
141
|
+
async function callOnce(provider, model, apiKey, baseUrl, accountId, messages, maxTokens) {
|
|
142
|
+
const start = Date.now();
|
|
143
|
+
let ttftMs = 0;
|
|
144
|
+
let first = true;
|
|
145
|
+
let text = "";
|
|
146
|
+
const result = stream({
|
|
147
|
+
provider: provider,
|
|
148
|
+
model,
|
|
149
|
+
messages,
|
|
150
|
+
maxTokens,
|
|
151
|
+
apiKey,
|
|
152
|
+
baseUrl,
|
|
153
|
+
accountId,
|
|
154
|
+
});
|
|
155
|
+
for await (const event of result) {
|
|
156
|
+
if (first && (event.type === "text_delta" || event.type === "thinking_delta")) {
|
|
157
|
+
ttftMs = Date.now() - start;
|
|
158
|
+
first = false;
|
|
159
|
+
}
|
|
160
|
+
if (event.type === "text_delta")
|
|
161
|
+
text += event.text;
|
|
162
|
+
}
|
|
163
|
+
const response = await result.response;
|
|
164
|
+
const wallMs = Date.now() - start;
|
|
165
|
+
const content = response.message.content;
|
|
166
|
+
const finalText = typeof content === "string"
|
|
167
|
+
? content
|
|
168
|
+
: content
|
|
169
|
+
.filter((p) => p.type === "text")
|
|
170
|
+
.map((p) => p.text ?? "")
|
|
171
|
+
.join("");
|
|
172
|
+
return {
|
|
173
|
+
text: finalText || text,
|
|
174
|
+
outputTokens: response.usage.outputTokens,
|
|
175
|
+
inputTokens: response.usage.inputTokens,
|
|
176
|
+
cacheRead: response.usage.cacheRead ?? 0,
|
|
177
|
+
ttftMs,
|
|
178
|
+
wallMs,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
// ── Correctness ─────────────────────────────────────────────
|
|
182
|
+
function checkAnchors(finalFile, task) {
|
|
183
|
+
for (const s of task.mustContain)
|
|
184
|
+
if (!finalFile.includes(s))
|
|
185
|
+
return false;
|
|
186
|
+
for (const s of task.mustPreserve)
|
|
187
|
+
if (!finalFile.includes(s))
|
|
188
|
+
return false;
|
|
189
|
+
return true;
|
|
190
|
+
}
|
|
191
|
+
async function main() {
|
|
192
|
+
const frontierProvider = process.env.GG_FA_FRONTIER_PROVIDER ?? "openai";
|
|
193
|
+
const frontierModel = process.env.GG_FA_FRONTIER_MODEL ?? "gpt-5.5";
|
|
194
|
+
const applyProvider = process.env.GG_FA_APPLY_PROVIDER ?? "gemini";
|
|
195
|
+
const applyModel = process.env.GG_FA_APPLY_MODEL ?? "gemini-3.1-flash-lite-preview";
|
|
196
|
+
const auth = new AuthStorage();
|
|
197
|
+
await auth.load();
|
|
198
|
+
const resolve = async (p) => {
|
|
199
|
+
const c = await auth.resolveCredentials(p);
|
|
200
|
+
return { apiKey: c.accessToken, baseUrl: c.baseUrl, accountId: c.accountId };
|
|
201
|
+
};
|
|
202
|
+
const fc = await resolve(frontierProvider);
|
|
203
|
+
const ac = await resolve(applyProvider);
|
|
204
|
+
console.log(`\n⚡ Fast-apply benchmark`);
|
|
205
|
+
console.log(` Frontier: ${frontierProvider}/${frontierModel}`);
|
|
206
|
+
console.log(` Apply: ${applyProvider}/${applyModel}\n`);
|
|
207
|
+
const tasks = buildTasks();
|
|
208
|
+
const rows = [];
|
|
209
|
+
for (const task of tasks) {
|
|
210
|
+
process.stdout.write(`▶ ${task.name} (${task.approxLines} lines)\n`);
|
|
211
|
+
await sleep(2500); // space out calls to avoid cheap-model rate limits
|
|
212
|
+
// ── BASELINE: frontier emits full search/replace blocks (local apply = ~0ms) ──
|
|
213
|
+
const baseStart = Date.now();
|
|
214
|
+
const baseFrontier = await call(frontierProvider, frontierModel, fc.apiKey, fc.baseUrl, fc.accountId, baselinePrompt(task.file, task.instruction), 4096);
|
|
215
|
+
// Local apply is deterministic & instant; correctness = did the model produce
|
|
216
|
+
// a SEARCH block whose target text actually exists in the file?
|
|
217
|
+
const searchBlocks = [
|
|
218
|
+
...baseFrontier.text.matchAll(/<<<<<<< SEARCH\n([\s\S]*?)\n=======/g),
|
|
219
|
+
].map((m) => m[1]);
|
|
220
|
+
const replaceBlocks = [
|
|
221
|
+
...baseFrontier.text.matchAll(/=======\n([\s\S]*?)\n>>>>>>> REPLACE/g),
|
|
222
|
+
].map((m) => m[1]);
|
|
223
|
+
let baseFile = task.file;
|
|
224
|
+
let baseApplied = searchBlocks.length > 0;
|
|
225
|
+
for (let i = 0; i < searchBlocks.length; i++) {
|
|
226
|
+
if (baseFile.includes(searchBlocks[i])) {
|
|
227
|
+
baseFile = baseFile.replace(searchBlocks[i], replaceBlocks[i] ?? "");
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
baseApplied = false; // search text didn't match verbatim → would fail/retry
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
const baseTotalMs = Date.now() - baseStart;
|
|
234
|
+
const baseOk = baseApplied && checkAnchors(baseFile, task);
|
|
235
|
+
process.stdout.write(` baseline: frontier ${baseFrontier.outputTokens} out tok, ${(baseFrontier.wallMs / 1000).toFixed(1)}s | apply ~0s | ${baseOk ? "OK" : "FAIL"}\n`);
|
|
236
|
+
// ── FAST-APPLY: frontier emits lazy edit, apply model merges whole file ──
|
|
237
|
+
const faStart = Date.now();
|
|
238
|
+
const faFrontier = await call(frontierProvider, frontierModel, fc.apiKey, fc.baseUrl, fc.accountId, lazyEditPrompt(task.file, task.instruction), 2048);
|
|
239
|
+
const apply = await call(applyProvider, applyModel, ac.apiKey, ac.baseUrl, ac.accountId, applyPrompt(task.file, faFrontier.text), 8192);
|
|
240
|
+
const faTotalMs = Date.now() - faStart;
|
|
241
|
+
const faFile = apply.text.replace(/^```[a-z]*\n?/i, "").replace(/\n?```$/i, "");
|
|
242
|
+
const faOk = checkAnchors(faFile, task);
|
|
243
|
+
process.stdout.write(` fast-apply: frontier ${faFrontier.outputTokens} out tok, ${(faFrontier.wallMs / 1000).toFixed(1)}s | apply ${apply.outputTokens} out tok, ${(apply.wallMs / 1000).toFixed(1)}s | ${faOk ? "OK" : "FAIL"}\n\n`);
|
|
244
|
+
rows.push({
|
|
245
|
+
task: task.name,
|
|
246
|
+
lines: task.approxLines,
|
|
247
|
+
baseFrontierTokens: baseFrontier.outputTokens,
|
|
248
|
+
baseFrontierMs: baseFrontier.wallMs,
|
|
249
|
+
baseTotalMs,
|
|
250
|
+
baseOk,
|
|
251
|
+
faFrontierTokens: faFrontier.outputTokens,
|
|
252
|
+
faFrontierMs: faFrontier.wallMs,
|
|
253
|
+
faApplyTokens: apply.outputTokens,
|
|
254
|
+
faApplyMs: apply.wallMs,
|
|
255
|
+
faTotalMs,
|
|
256
|
+
faOk,
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
// ── Report ──
|
|
260
|
+
console.log("\n══════════════════════ RESULTS ══════════════════════\n");
|
|
261
|
+
console.log("Task Lines | BASELINE total | FAST-APPLY total | Δ wall | base/fa frontier-out-tok | OK");
|
|
262
|
+
for (const r of rows) {
|
|
263
|
+
const delta = ((r.baseTotalMs - r.faTotalMs) / r.baseTotalMs) * 100;
|
|
264
|
+
console.log(`${r.task.padEnd(7)} ${String(r.lines).padStart(4)} | ` +
|
|
265
|
+
`${(r.baseTotalMs / 1000).toFixed(1).padStart(11)}s | ` +
|
|
266
|
+
`${(r.faTotalMs / 1000).toFixed(1).padStart(13)}s | ` +
|
|
267
|
+
`${(delta >= 0 ? "-" : "+") + Math.abs(delta).toFixed(0) + "%"}`.padStart(8) +
|
|
268
|
+
` | ${String(r.baseFrontierTokens).padStart(5)} / ${String(r.faFrontierTokens).padStart(5)}` +
|
|
269
|
+
` | ${r.baseOk ? "B" : "b"}${r.faOk ? "F" : "f"}`);
|
|
270
|
+
}
|
|
271
|
+
const sum = (f) => rows.reduce((s, r) => s + f(r), 0);
|
|
272
|
+
const baseTot = sum((r) => r.baseTotalMs);
|
|
273
|
+
const faTot = sum((r) => r.faTotalMs);
|
|
274
|
+
console.log(`\nTotals: baseline ${(baseTot / 1000).toFixed(1)}s vs fast-apply ${(faTot / 1000).toFixed(1)}s ` +
|
|
275
|
+
`→ ${baseTot > faTot ? "fast-apply faster" : "baseline faster"} by ${Math.abs(((baseTot - faTot) / baseTot) * 100).toFixed(0)}%`);
|
|
276
|
+
console.log(`Frontier output tokens: baseline ${sum((r) => r.baseFrontierTokens)} vs fast-apply ${sum((r) => r.faFrontierTokens)} ` +
|
|
277
|
+
`(${(((sum((r) => r.baseFrontierTokens) - sum((r) => r.faFrontierTokens)) / sum((r) => r.baseFrontierTokens)) * 100).toFixed(0)}% fewer)`);
|
|
278
|
+
console.log(`Correctness: baseline ${rows.filter((r) => r.baseOk).length}/${rows.length}, fast-apply ${rows.filter((r) => r.faOk).length}/${rows.length}`);
|
|
279
|
+
}
|
|
280
|
+
main().catch((err) => {
|
|
281
|
+
console.error("Benchmark failed:", err);
|
|
282
|
+
process.exit(1);
|
|
283
|
+
});
|
|
284
|
+
//# sourceMappingURL=fast-apply-benchmark.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fast-apply-benchmark.js","sourceRoot":"","sources":["../../src/core/fast-apply-benchmark.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/App.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import React from "react";
|
|
2
1
|
import { type Message, type Provider, type ThinkingLevel } from "@kenkaiiii/gg-ai";
|
|
3
2
|
import type { AgentTool } from "@kenkaiiii/gg-agent";
|
|
4
3
|
import type { ProcessManager } from "../core/process-manager.js";
|
|
@@ -165,5 +164,5 @@ export interface AppProps {
|
|
|
165
164
|
idealReviewEnabled?: boolean;
|
|
166
165
|
};
|
|
167
166
|
}
|
|
168
|
-
export declare function App(props: AppProps):
|
|
167
|
+
export declare function App(props: AppProps): import("react/jsx-runtime").JSX.Element;
|
|
169
168
|
//# sourceMappingURL=App.d.ts.map
|
package/dist/ui/App.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/ui/App.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/ui/App.tsx"],"names":[],"mappings":"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"}
|
|
@@ -52,6 +52,6 @@ interface ActivityIndicatorProps {
|
|
|
52
52
|
/** Disable decorative per-tick animation so terminal scrollback remains usable. */
|
|
53
53
|
staticDisplay?: boolean;
|
|
54
54
|
}
|
|
55
|
-
export declare function ActivityIndicator({ phase, elapsedMs: elapsedMsProp, runStartRef, thinkingMs, isThinking, tokenEstimate, charCountRef: charCountRefProp, realTokensAccumRef: realTokensAccumRefProp, retryInfo, planDone, planTotal, pulseColors: pulseColorsOverride, staticDisplay, }: ActivityIndicatorProps):
|
|
55
|
+
export declare function ActivityIndicator({ phase, elapsedMs: elapsedMsProp, runStartRef, thinkingMs, isThinking, tokenEstimate, charCountRef: charCountRefProp, realTokensAccumRef: realTokensAccumRefProp, retryInfo, planDone, planTotal, pulseColors: pulseColorsOverride, staticDisplay, }: ActivityIndicatorProps): import("react/jsx-runtime").JSX.Element;
|
|
56
56
|
export {};
|
|
57
57
|
//# sourceMappingURL=ActivityIndicator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActivityIndicator.d.ts","sourceRoot":"","sources":["../../../src/ui/components/ActivityIndicator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAG3D,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AA6DzE,KAAK,oBAAoB,GAAG;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,oBAAoB,CAsB/E;AAwBD,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,OAAO,EACnB,aAAa,EAAE,MAAM,GACpB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAKtC;AA4BD,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAIjE;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAIhE;AA4ED,UAAU,sBAAsB;IAC9B,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACvC,oDAAoD;IACpD,kBAAkB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IACnD;;;;OAIG;IACH,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,mFAAmF;IACnF,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAWD,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,SAAS,EAAE,aAAa,EACxB,WAAW,EACX,UAAU,EACV,UAAU,EACV,aAAa,EACb,YAAY,EAAE,gBAAgB,EAC9B,kBAAkB,EAAE,sBAAsB,EAC1C,SAAS,EACT,QAAY,EACZ,SAAa,EACb,WAAW,EAAE,mBAAmB,EAChC,aAAqB,GACtB,EAAE,sBAAsB,
|
|
1
|
+
{"version":3,"file":"ActivityIndicator.d.ts","sourceRoot":"","sources":["../../../src/ui/components/ActivityIndicator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAG3D,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AA6DzE,KAAK,oBAAoB,GAAG;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,oBAAoB,CAsB/E;AAwBD,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,OAAO,EACnB,aAAa,EAAE,MAAM,GACpB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAKtC;AA4BD,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAIjE;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAIhE;AA4ED,UAAU,sBAAsB;IAC9B,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACvC,oDAAoD;IACpD,kBAAkB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IACnD;;;;OAIG;IACH,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,mFAAmF;IACnF,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAWD,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,SAAS,EAAE,aAAa,EACxB,WAAW,EACX,UAAU,EACV,UAAU,EACV,aAAa,EACb,YAAY,EAAE,gBAAgB,EAC9B,kBAAkB,EAAE,sBAAsB,EAC1C,SAAS,EACT,QAAY,EACZ,SAAa,EACb,WAAW,EAAE,mBAAmB,EAChC,aAAqB,GACtB,EAAE,sBAAsB,2CAwMxB"}
|
|
@@ -14,7 +14,7 @@ import React from "react";
|
|
|
14
14
|
declare const TICK_INTERVAL = 100;
|
|
15
15
|
export declare function AnimationProvider({ children }: {
|
|
16
16
|
children: React.ReactNode;
|
|
17
|
-
}):
|
|
17
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
18
18
|
/** Returns the current global animation tick counter. */
|
|
19
19
|
export declare function useAnimationTick(enabled?: boolean): number;
|
|
20
20
|
/** Returns whether the terminal currently has focus when focus reporting is supported. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnimationContext.d.ts","sourceRoot":"","sources":["../../../src/ui/components/AnimationContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAQN,MAAM,OAAO,CAAC;AAEf;;;;;;;;;;;GAWG;AAEH,QAAA,MAAM,aAAa,MAAM,CAAC;AAoB1B,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"AnimationContext.d.ts","sourceRoot":"","sources":["../../../src/ui/components/AnimationContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAQN,MAAM,OAAO,CAAC;AAEf;;;;;;;;;;;GAWG;AAEH,QAAA,MAAM,aAAa,MAAM,CAAC;AAoB1B,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,2CAoG5E;AAED,yDAAyD;AACzD,wBAAgB,gBAAgB,CAAC,OAAO,UAAO,GAAG,MAAM,CAQvD;AAED,0FAA0F;AAC1F,wBAAgB,gBAAgB,CAAC,OAAO,UAAO,GAAG,OAAO,CAQxD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,UAAO,GAAG,IAAI,CAMvD;AAED,wBAAgB,mBAAmB,CAAC,OAAO,UAAO,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAIrF;AAED,sFAAsF;AACtF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAExF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -10,6 +10,6 @@ interface AssistantMessageProps {
|
|
|
10
10
|
marginTop?: number;
|
|
11
11
|
continuation?: boolean;
|
|
12
12
|
}
|
|
13
|
-
export declare const AssistantMessage: React.MemoExoticComponent<({ text, thinking, thinkingMs, showThinking, streaming, renderMarkdown, availableTerminalHeight, marginTop, continuation, }: AssistantMessageProps) =>
|
|
13
|
+
export declare const AssistantMessage: React.MemoExoticComponent<({ text, thinking, thinkingMs, showThinking, streaming, renderMarkdown, availableTerminalHeight, marginTop, continuation, }: AssistantMessageProps) => import("react/jsx-runtime").JSX.Element | null>;
|
|
14
14
|
export {};
|
|
15
15
|
//# sourceMappingURL=AssistantMessage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssistantMessage.d.ts","sourceRoot":"","sources":["../../../src/ui/components/AssistantMessage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,UAAU,qBAAqB;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAOD,eAAO,MAAM,gBAAgB,yJAU1B,qBAAqB,
|
|
1
|
+
{"version":3,"file":"AssistantMessage.d.ts","sourceRoot":"","sources":["../../../src/ui/components/AssistantMessage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,UAAU,qBAAqB;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAOD,eAAO,MAAM,gBAAgB,yJAU1B,qBAAqB,oDAiDtB,CAAC"}
|