koneck 2.128.50 → 2.128.52
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/engine.d.ts.map +1 -1
- package/dist/engine.js +17 -3
- package/dist/engine.js.map +1 -1
- package/dist/ink-chat.d.ts.map +1 -1
- package/dist/ink-chat.js +65 -86
- package/dist/ink-chat.js.map +1 -1
- package/dist/session-changes.d.ts +66 -0
- package/dist/session-changes.d.ts.map +1 -0
- package/dist/session-changes.js +96 -0
- package/dist/session-changes.js.map +1 -0
- package/dist/web/sessions.d.ts +5 -9
- package/dist/web/sessions.d.ts.map +1 -1
- package/dist/web/sessions.js +18 -43
- package/dist/web/sessions.js.map +1 -1
- package/package.json +1 -1
package/dist/ink-chat.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ink-chat.d.ts","sourceRoot":"","sources":["../src/ink-chat.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AA8B3D,OAAO,EAAyB,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAuCtE,OAAO,KAAK,EAAY,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"ink-chat.d.ts","sourceRoot":"","sources":["../src/ink-chat.tsx"],"names":[],"mappings":"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"}
|
package/dist/ink-chat.js
CHANGED
|
@@ -18,7 +18,7 @@ import { ImageDraft, pastedImagePath } from './image-draft.js';
|
|
|
18
18
|
import { readClipboard, readClipboardImage, startSelectionCopy, cleanPastedSecret, copyViaTerminal } from './clipboard.js';
|
|
19
19
|
import { paceFrom } from './pace.js';
|
|
20
20
|
import { policyFrom, FAILOVER_OFF } from './failover.js';
|
|
21
|
-
import { listCheckpoints, revertCheckpoint, previewCheckpoint,
|
|
21
|
+
import { listCheckpoints, revertCheckpoint, previewCheckpoint, createWorkspaceCheckpoint, checkpointScope } from './checkpoint.js';
|
|
22
22
|
import { fileDiff, diffSummary } from './diff-view.js';
|
|
23
23
|
import { tokenizeLine, spanLangFor } from './highlight-spans.js';
|
|
24
24
|
import { setTerminalTitle } from './terminal-title.js';
|
|
@@ -27,7 +27,7 @@ import { attachReferences, linesIn } from './mention-resolve.js';
|
|
|
27
27
|
import { rankMentions, describeCandidates, rowDetail } from './web/mention.js';
|
|
28
28
|
import { gatherSignals } from './web/mention-signals.js';
|
|
29
29
|
import { isSlashCommand, findMentions, shortenMentions } from './mentions.js';
|
|
30
|
-
import { bar, humanTokens, humanDuration,
|
|
30
|
+
import { bar, humanTokens, humanDuration, contextWindowFor, recordStatus, classifyResponse, stateLabel, readModelStatus, computeUiWidth, } from './usage.js';
|
|
31
31
|
import { Markdown, Panel, panelWidth, safeCommitPoint, displayWidth, sliceToWidth } from './markdown-ink.js';
|
|
32
32
|
import { G } from './glyphs.js';
|
|
33
33
|
import { fetchUpdateStatus, updateCommand } from './update-check.js';
|
|
@@ -50,6 +50,7 @@ import { MODES as MODE_SPECS, modeSpec, decide, loadRules, saveRules, addRule, c
|
|
|
50
50
|
import { AskQueue } from './ask-queue.js';
|
|
51
51
|
import { contextLimitWithSource } from './context-limit.js';
|
|
52
52
|
import { planSummary } from './plan.js';
|
|
53
|
+
import { SessionChanges, readForDiff as readForDiffAt, totalsOf } from './session-changes.js';
|
|
53
54
|
import os from 'node:os';
|
|
54
55
|
import { modeLine, nextMode, statusFacts, barCells, PLACEHOLDER } from './status-line.js';
|
|
55
56
|
import { savePlan, plansDir, PLAN_CHOICES, PROCEED_PROMPT } from './plan-file.js';
|
|
@@ -790,9 +791,7 @@ export function expandPastes(draft, pastes) {
|
|
|
790
791
|
});
|
|
791
792
|
}
|
|
792
793
|
/** Past this, a file is not read for diffing — the render would be useless anyway. */
|
|
793
|
-
const MAX_DIFF_BYTES = 512 * 1024;
|
|
794
794
|
/** One tool rarely touches more; the cap stops a bulk move from flooding scrollback. */
|
|
795
|
-
const MAX_DIFF_FILES = 4;
|
|
796
795
|
/*
|
|
797
796
|
* How many changed lines the side panel draws per file.
|
|
798
797
|
*
|
|
@@ -1854,7 +1853,8 @@ export function App({ config: initialConfig, clearFrame, synchronizedFrames = fa
|
|
|
1854
1853
|
* and the diff still runs from the state it was in before the first edit, which is the change the
|
|
1855
1854
|
* person actually wants to review.
|
|
1856
1855
|
*/
|
|
1857
|
-
|
|
1856
|
+
// The record, shared with the web session so the two count changes identically.
|
|
1857
|
+
const changesRef = useRef(new SessionChanges(() => cfgRef.current.cwd));
|
|
1858
1858
|
const [liveDiffs, setLiveDiffs] = useState([]);
|
|
1859
1859
|
const charsRef = useRef(0); // streamed chars, for the live token estimate
|
|
1860
1860
|
const realTokRef = useRef(0); // real output tokens this turn, once the provider reports usage
|
|
@@ -1907,15 +1907,7 @@ export function App({ config: initialConfig, clearFrame, synchronizedFrames = fa
|
|
|
1907
1907
|
* would race the very write it is trying to photograph.
|
|
1908
1908
|
*/
|
|
1909
1909
|
function readForDiff(rel) {
|
|
1910
|
-
|
|
1911
|
-
const abs = path.resolve(cfg.cwd, rel);
|
|
1912
|
-
if (statSync(abs).size > MAX_DIFF_BYTES)
|
|
1913
|
-
return null;
|
|
1914
|
-
return readFileSync(abs, 'utf-8');
|
|
1915
|
-
}
|
|
1916
|
-
catch {
|
|
1917
|
-
return null; // absent: a creation, which fileDiff renders as such
|
|
1918
|
-
}
|
|
1910
|
+
return readForDiffAt(cfg.cwd, rel);
|
|
1919
1911
|
}
|
|
1920
1912
|
/** What a path is, or null if it is not there. Synchronous: a prompt is submitted in one go. */
|
|
1921
1913
|
function pathKind(absolute) {
|
|
@@ -1931,13 +1923,8 @@ export function App({ config: initialConfig, clearFrame, synchronizedFrames = fa
|
|
|
1931
1923
|
commitSay();
|
|
1932
1924
|
// Photograph every file this tool has announced it will touch, before it touches it.
|
|
1933
1925
|
turnToolsRef.current += 1;
|
|
1934
|
-
|
|
1935
|
-
|
|
1936
|
-
// The session baseline: first touch only, so repeated edits still diff from the original.
|
|
1937
|
-
for (const { rel, before } of pendingDiffRef.current) {
|
|
1938
|
-
if (!diffBaseRef.current.has(rel))
|
|
1939
|
-
diffBaseRef.current.set(rel, before);
|
|
1940
|
-
}
|
|
1926
|
+
// This call's befores, and the session's first-touch baseline, in one step: see session-changes.ts.
|
|
1927
|
+
pendingDiffRef.current = changesRef.current.before(name, args);
|
|
1941
1928
|
liveToolRef.current = { kind: 'tool', name, detail: toolDetail(name, args), startedAt: Date.now() };
|
|
1942
1929
|
setRepaint(v => v + 1);
|
|
1943
1930
|
}
|
|
@@ -1969,13 +1956,8 @@ export function App({ config: initialConfig, clearFrame, synchronizedFrames = fa
|
|
|
1969
1956
|
* formatter, the model reverting itself — can change a file this one had finished with. Disk is
|
|
1970
1957
|
* the truth about what the change currently is.
|
|
1971
1958
|
*/
|
|
1972
|
-
if (
|
|
1973
|
-
const all =
|
|
1974
|
-
for (const [rel, before] of diffBaseRef.current) {
|
|
1975
|
-
const d = fileDiff(rel, before, readForDiff(rel), { maxLines: PANEL_DIFF_LINES });
|
|
1976
|
-
if (!d.unchanged)
|
|
1977
|
-
all.push(d);
|
|
1978
|
-
}
|
|
1959
|
+
if (changesRef.current.size) {
|
|
1960
|
+
const all = changesRef.current.diffs(PANEL_DIFF_LINES);
|
|
1979
1961
|
setLiveDiffs(all);
|
|
1980
1962
|
/*
|
|
1981
1963
|
* Open itself on the session's first change, once, unless the person has already decided.
|
|
@@ -2102,9 +2084,6 @@ export function App({ config: initialConfig, clearFrame, synchronizedFrames = fa
|
|
|
2102
2084
|
},
|
|
2103
2085
|
onToolResult: (name, ok, ms, detail) => {
|
|
2104
2086
|
finishTool(name, ok, ms, detail);
|
|
2105
|
-
// A file just changed, so the footer's +added −removed has too.
|
|
2106
|
-
if (ok && FILE_WRITING_TOOLS.has(name))
|
|
2107
|
-
refreshDelta();
|
|
2108
2087
|
},
|
|
2109
2088
|
onToolOutput: (_name, line) => {
|
|
2110
2089
|
// Written to the ref rather than to state: a dev server logs a request every second or two,
|
|
@@ -2565,10 +2544,21 @@ export function App({ config: initialConfig, clearFrame, synchronizedFrames = fa
|
|
|
2565
2544
|
if (!process.stdout.isTTY)
|
|
2566
2545
|
return;
|
|
2567
2546
|
if (altScreen) {
|
|
2568
|
-
|
|
2547
|
+
/*
|
|
2548
|
+
* Enter, home the cursor, and ask for the wheel as arrow keys.
|
|
2549
|
+
*
|
|
2550
|
+
* ?1007 is "alternate scroll": in the alternate screen, the terminal turns wheel movement
|
|
2551
|
+
* into Up and Down, without handing KONECK the mouse. So the wheel can scroll the
|
|
2552
|
+
* conversation while a drag still selects text the ordinary way — the two things asked for,
|
|
2553
|
+
* "i can't scroll" and "select must happen on mouse like selecting in a document", which
|
|
2554
|
+
* mouse tracking could only offer one at a time. VTE does this unasked; xterm and Windows
|
|
2555
|
+
* Terminal need it requested. With mouse tracking on, the terminal sends mouse reports
|
|
2556
|
+
* instead and this is ignored, so it is safe to leave set.
|
|
2557
|
+
*/
|
|
2558
|
+
process.stdout.write('\u001b[?1049h\u001b[H\u001b[?1007h');
|
|
2569
2559
|
clearFrame?.();
|
|
2570
2560
|
setRepaint(n => n + 1);
|
|
2571
|
-
return () => { process.stdout.write('\u001b[?1049l'); };
|
|
2561
|
+
return () => { process.stdout.write('\u001b[?1007l\u001b[?1049l'); };
|
|
2572
2562
|
}
|
|
2573
2563
|
// Leaving it is the same problem in reverse: the ordinary screen still holds whatever was
|
|
2574
2564
|
// there before, and Ink's idea of what it drew belongs to the buffer just abandoned.
|
|
@@ -2589,7 +2579,7 @@ export function App({ config: initialConfig, clearFrame, synchronizedFrames = fa
|
|
|
2589
2579
|
useEffect(() => {
|
|
2590
2580
|
const leave = () => {
|
|
2591
2581
|
if (process.stdout.isTTY)
|
|
2592
|
-
process.stdout.write('\u001b[?1049l');
|
|
2582
|
+
process.stdout.write('\u001b[?1007l\u001b[?1049l');
|
|
2593
2583
|
};
|
|
2594
2584
|
const signals = ['SIGINT', 'SIGTERM', 'SIGHUP'];
|
|
2595
2585
|
const onSignal = (signal) => () => {
|
|
@@ -2775,8 +2765,6 @@ export function App({ config: initialConfig, clearFrame, synchronizedFrames = fa
|
|
|
2775
2765
|
// thinking, and the gap between the two is where local tool work lives.
|
|
2776
2766
|
const sessionStartRef = useRef(Date.now());
|
|
2777
2767
|
const apiMsRef = useRef(0);
|
|
2778
|
-
/** Tree hash captured at startup, so "code changes" is a diff rather than a running tally. */
|
|
2779
|
-
const baseTreeRef = useRef(null);
|
|
2780
2768
|
const [usagePane, setUsagePane] = useState(null);
|
|
2781
2769
|
/** Which setting is highlighted on the Settings tab. */
|
|
2782
2770
|
const [settingRow, setSettingRow] = useState(0);
|
|
@@ -2784,9 +2772,6 @@ export function App({ config: initialConfig, clearFrame, synchronizedFrames = fa
|
|
|
2784
2772
|
const [stored, setStored] = useState({});
|
|
2785
2773
|
/** Non-null while a value is being typed rather than stepped. */
|
|
2786
2774
|
const [editing, setEditing] = useState(null);
|
|
2787
|
-
// undefined while the diff is still being computed, null once git has said there is nothing to
|
|
2788
|
-
// compare against. Collapsing the two would flash "not a git repo" at every open.
|
|
2789
|
-
const [usageDiff, setUsageDiff] = useState(undefined);
|
|
2790
2775
|
const [modelCatalog, setModelCatalog] = useState([]);
|
|
2791
2776
|
/** Why the last listing came back empty, so the pane can say which rather than guess. */
|
|
2792
2777
|
const catalogNote = useRef(null);
|
|
@@ -3256,46 +3241,15 @@ export function App({ config: initialConfig, clearFrame, synchronizedFrames = fa
|
|
|
3256
3241
|
process.on('exit', off);
|
|
3257
3242
|
return () => { off(); process.off('exit', off); };
|
|
3258
3243
|
}, []);
|
|
3259
|
-
// The tree as it stood before the session touched anything. Recorded once, so "code changes"
|
|
3260
|
-
// stays a comparison against the starting point however long the session runs.
|
|
3261
|
-
useEffect(() => {
|
|
3262
|
-
void snapshotTree(cfg.cwd).then(t => {
|
|
3263
|
-
baseTreeRef.current = t;
|
|
3264
|
-
// Nothing has changed yet at the moment of the snapshot; outside git there is nothing to count.
|
|
3265
|
-
setUsageDiff(t ? { added: 0, removed: 0, files: 0 } : null);
|
|
3266
|
-
});
|
|
3267
|
-
}, [cfg.cwd]);
|
|
3268
3244
|
/*
|
|
3269
|
-
*
|
|
3245
|
+
* No startup snapshot of the tree any more.
|
|
3270
3246
|
*
|
|
3271
|
-
*
|
|
3272
|
-
*
|
|
3273
|
-
*
|
|
3247
|
+
* It existed to count "code changes" with git, and cost a full snapshot of the workspace at every
|
|
3248
|
+
* start — 20.6 seconds on a workspace git had not been told about, which then marked it too slow
|
|
3249
|
+
* to snapshot, so every later count came back empty and the footer read "+0 -0" for the whole
|
|
3250
|
+
* session while the diff panel beside it read "+99 -64". The count comes from the panel's own
|
|
3251
|
+
* record now (session-changes.ts), which needs no git and cannot disagree with the panel.
|
|
3274
3252
|
*/
|
|
3275
|
-
const deltaTimerRef = useRef(null);
|
|
3276
|
-
const deltaLastRef = useRef(0);
|
|
3277
|
-
function refreshDelta() {
|
|
3278
|
-
const run = () => {
|
|
3279
|
-
deltaLastRef.current = Date.now();
|
|
3280
|
-
// A refresh that comes back empty keeps the last figure: git can refuse a snapshot while
|
|
3281
|
-
// another is writing its index, and a transient refusal is not "outside a repository" —
|
|
3282
|
-
// that is decided once, by the snapshot taken at startup.
|
|
3283
|
-
void diffStatSince(cfgRef.current.cwd, baseTreeRef.current)
|
|
3284
|
-
.then(d => { if (d)
|
|
3285
|
-
setUsageDiff(d); })
|
|
3286
|
-
.catch(() => { });
|
|
3287
|
-
};
|
|
3288
|
-
const wait = 4_000 - (Date.now() - deltaLastRef.current);
|
|
3289
|
-
if (wait <= 0) {
|
|
3290
|
-
run();
|
|
3291
|
-
return;
|
|
3292
|
-
}
|
|
3293
|
-
if (deltaTimerRef.current)
|
|
3294
|
-
return;
|
|
3295
|
-
deltaTimerRef.current = setTimeout(() => { deltaTimerRef.current = null; run(); }, wait);
|
|
3296
|
-
}
|
|
3297
|
-
useEffect(() => () => { if (deltaTimerRef.current)
|
|
3298
|
-
clearTimeout(deltaTimerRef.current); }, []);
|
|
3299
3253
|
// A new model is a new window, and a figure measured against the old one would mislead.
|
|
3300
3254
|
useEffect(() => { setCtxFill(null); }, [cfg.model, cfg.provider]);
|
|
3301
3255
|
const addRow = (row) => setRows(prev => [...prev, row]);
|
|
@@ -3656,7 +3610,6 @@ export function App({ config: initialConfig, clearFrame, synchronizedFrames = fa
|
|
|
3656
3610
|
setUsagePane(tab);
|
|
3657
3611
|
setEditing(null);
|
|
3658
3612
|
void loadKoneckConfig().then(c => setStored(c));
|
|
3659
|
-
void diffStatSince(cfg.cwd, baseTreeRef.current).then(setUsageDiff);
|
|
3660
3613
|
if (modelCatalog.length === 0)
|
|
3661
3614
|
void loadModelCatalog();
|
|
3662
3615
|
}
|
|
@@ -5879,6 +5832,18 @@ export function App({ config: initialConfig, clearFrame, synchronizedFrames = fa
|
|
|
5879
5832
|
setScrollBack(v => Math.max(0, v - section));
|
|
5880
5833
|
return;
|
|
5881
5834
|
}
|
|
5835
|
+
/*
|
|
5836
|
+
* And a page at a time with Alt+PgUp/PgDn.
|
|
5837
|
+
*
|
|
5838
|
+
* Windows Terminal binds Alt+arrows to moving between its own panes, so on some setups the
|
|
5839
|
+
* one key the panel scrolled with never reached KONECK — "in the live diff panel, i can't
|
|
5840
|
+
* scroll". Alt with the page keys is bound to nothing there.
|
|
5841
|
+
*/
|
|
5842
|
+
if (key.meta && (key.pageUp || key.pageDown)) {
|
|
5843
|
+
const pageLines = Math.max(3, termRows - 8);
|
|
5844
|
+
setPanelScroll(v => Math.max(0, Math.min(2_000, v + (key.pageUp ? -pageLines : pageLines))));
|
|
5845
|
+
return;
|
|
5846
|
+
}
|
|
5882
5847
|
if (key.pageUp) {
|
|
5883
5848
|
setScrollBack(v => Math.min(rows.length - 1, v + page));
|
|
5884
5849
|
return;
|
|
@@ -6376,8 +6341,23 @@ export function App({ config: initialConfig, clearFrame, synchronizedFrames = fa
|
|
|
6376
6341
|
*/
|
|
6377
6342
|
if (key.upArrow || key.downArrow) {
|
|
6378
6343
|
const moved = caretRowMove(draft, caret, composerTextWidth, key.upArrow ? -1 : 1);
|
|
6379
|
-
if (moved === null)
|
|
6380
|
-
|
|
6344
|
+
if (moved === null) {
|
|
6345
|
+
/*
|
|
6346
|
+
* Nowhere for the caret to go, so on the alternate screen the arrow scrolls instead.
|
|
6347
|
+
*
|
|
6348
|
+
* This is what the wheel arrives as there (see ?1007 where the screen is entered), and it
|
|
6349
|
+
* was being thrown away — an empty or one-line input has no row to move to, so the wheel
|
|
6350
|
+
* did nothing at all. Reported as "in the main conversation i can't scroll". A draft of
|
|
6351
|
+
* several rows still gets its caret moved first, which is what the arrows are for.
|
|
6352
|
+
*/
|
|
6353
|
+
if (altScreen && !key.shift) {
|
|
6354
|
+
if (key.upArrow)
|
|
6355
|
+
setScrollBack(v => Math.min(Math.max(0, rows.length - 1), v + 1));
|
|
6356
|
+
else
|
|
6357
|
+
setScrollBack(v => Math.max(0, v - 1));
|
|
6358
|
+
}
|
|
6359
|
+
return;
|
|
6360
|
+
}
|
|
6381
6361
|
if (key.shift) {
|
|
6382
6362
|
if (selAnchor === null)
|
|
6383
6363
|
setSelAnchor(caret);
|
|
@@ -6703,7 +6683,6 @@ export function App({ config: initialConfig, clearFrame, synchronizedFrames = fa
|
|
|
6703
6683
|
// whichever of those three happened last, which for anyone who closes the terminal
|
|
6704
6684
|
// normally was an old snapshot — the reported "always resumes the old one".
|
|
6705
6685
|
void doSave().catch(() => { });
|
|
6706
|
-
refreshDelta();
|
|
6707
6686
|
// A run that stopped short says so, rather than letting the footer imply it finished.
|
|
6708
6687
|
if (incompleteRef.current) {
|
|
6709
6688
|
addSystem(incompleteRef.current);
|
|
@@ -6745,7 +6724,6 @@ export function App({ config: initialConfig, clearFrame, synchronizedFrames = fa
|
|
|
6745
6724
|
liveToolRef.current = null;
|
|
6746
6725
|
flushAgents();
|
|
6747
6726
|
void doSave().catch(() => { });
|
|
6748
|
-
refreshDelta();
|
|
6749
6727
|
setRows(prev => [
|
|
6750
6728
|
...prev,
|
|
6751
6729
|
...(trailing ? [{ role: 'steps', steps: [{ kind: 'say', text: trailing }] }] : []),
|
|
@@ -6940,7 +6918,7 @@ export function App({ config: initialConfig, clearFrame, synchronizedFrames = fa
|
|
|
6940
6918
|
*/
|
|
6941
6919
|
const renderRow = (row, index) => (row.role === 'header' ? (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { flexDirection: "column", alignItems: "center", marginTop: 1, marginBottom: 1, children: [logoFor(uiWidth, G.ascii).map((line, i) => (_jsx(Text, { color: CYAN, bold: true, children: line }, i))), _jsx(Text, { color: CYAN, bold: true, children: "KONECK / SOFTWARE DELIVERY SYSTEM" }), _jsx(Text, { color: MUTED, children: "Deliberate engineering, with control at every change." }), altScreen && (_jsx(Text, { color: DIM, children: mouse
|
|
6942
6920
|
? `Wheel and PageUp scroll · shift-drag to select · /altscreen off for the terminal's own scrollback`
|
|
6943
|
-
: `
|
|
6921
|
+
: `Wheel, ↑↓ or PgUp scroll · Alt+↑↓ or Alt+PgUp scroll the diff panel · /altscreen off for the terminal's own scrollback` }))] }), _jsx(Panel, { width: barWidth, color: CYAN, title: "KONECK", children: [`MODEL: \`${modelShort}\` PROVIDER: \`${cfg.provider}\` WORKSPACE: \`${workspace}\``] })] }, index)) : row.role === 'user' ? (
|
|
6944
6922
|
// Painted as a filled bar so the user's own words are the most findable thing
|
|
6945
6923
|
// on screen when scrolling back through a long session.
|
|
6946
6924
|
_jsx(Box, { marginTop: 1, flexDirection: "column", children: wrapPreserving(row.text ?? '', barWidth - 2).map((line, li) => (_jsx(Text, { backgroundColor: USER_BG, color: USER_FG, bold: li === 0, children: (li === 0 ? `${G.caret} ` : ' ') + fitCells(line, barWidth - 2) }, li))) }, index)) : row.role === 'plan' ? (() => {
|
|
@@ -7268,9 +7246,10 @@ export function App({ config: initialConfig, clearFrame, synchronizedFrames = fa
|
|
|
7268
7246
|
lines.push(`Duration (API) ${humanDuration(apiMsRef.current)}`);
|
|
7269
7247
|
lines.push(`Duration (wall) ${humanDuration(wall)}`);
|
|
7270
7248
|
lines.push(`Turns ${stats.turns}`);
|
|
7271
|
-
lines.push(`Code changes ${
|
|
7272
|
-
|
|
7273
|
-
|
|
7249
|
+
lines.push(`Code changes ${(() => {
|
|
7250
|
+
const t = totalsOf(liveDiffs);
|
|
7251
|
+
return `${t.added} added, ${t.removed} removed, ${t.files} file${t.files === 1 ? '' : 's'}`;
|
|
7252
|
+
})()}`);
|
|
7274
7253
|
lines.push(`Tokens ${humanTokens(stats.promptTokens)} in · ${humanTokens(stats.completionTokens)} out`);
|
|
7275
7254
|
lines.push('');
|
|
7276
7255
|
if (apiMsRef.current > 0 && wall > apiMsRef.current) {
|
|
@@ -7632,7 +7611,7 @@ export function App({ config: initialConfig, clearFrame, synchronizedFrames = fa
|
|
|
7632
7611
|
?? contextLimitWithSource(cfg.model, cfg.contextTokens, servesOwnWeights(cfg.provider)).limit;
|
|
7633
7612
|
const facts = statusFacts({
|
|
7634
7613
|
model: cfg.model, limit, promptTokens: ctxFill?.tokens ?? 0,
|
|
7635
|
-
cwd: cfg.cwd, home: os.homedir(), delta:
|
|
7614
|
+
cwd: cfg.cwd, home: os.homedir(), delta: totalsOf(liveDiffs),
|
|
7636
7615
|
});
|
|
7637
7616
|
const sep = _jsx(Text, { color: DIM, children: ' · ' });
|
|
7638
7617
|
const bar = facts.ctx ? barCells(facts.ctx.fraction, 10) : null;
|