koneck 2.128.69 → 2.128.71
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/ink-chat.d.ts +33 -0
- package/dist/ink-chat.d.ts.map +1 -1
- package/dist/ink-chat.js +100 -10
- package/dist/ink-chat.js.map +1 -1
- package/dist/web/ui-client.d.ts.map +1 -1
- package/dist/web/ui-client.js +8 -2
- package/dist/web/ui-client.js.map +1 -1
- package/package.json +1 -1
package/dist/ink-chat.d.ts
CHANGED
|
@@ -2,11 +2,20 @@ import React from 'react';
|
|
|
2
2
|
import { type FileDiff } from './diff-view.js';
|
|
3
3
|
import type { AllowRule } from './permissions.js';
|
|
4
4
|
import { type KoneckPolicy } from './policy.js';
|
|
5
|
+
import type { Plan } from './plan.js';
|
|
5
6
|
import type { AgentConfig } from './types.js';
|
|
6
7
|
type Effort = 'low' | 'medium' | 'high' | 'max';
|
|
7
8
|
/** A corrupt or obsolete setting must not turn into an invalid prompt modifier. */
|
|
8
9
|
export declare function savedEffort(value: unknown): Effort | undefined;
|
|
9
10
|
/** 92000 → "1m 32s", 7400 → "7.4s", 12 → "12ms". Sub-second work read as a broken "0.0s". */
|
|
11
|
+
/**
|
|
12
|
+
* A duration as people say it: "12.3s", "5m 15s", "1h 30m 25s".
|
|
13
|
+
*
|
|
14
|
+
* Past an hour it kept counting minutes — "185m 25s", reported with a screenshot and the request
|
|
15
|
+
* "90 minutes could be 1h 30mins". Seconds stay, so a running timer still visibly moves; and they
|
|
16
|
+
* are floored, because rounding them showed "1m 60s" for the last half-second of a minute. The
|
|
17
|
+
* browser's `ms()` says the same thing in the same words (ui-client.ts).
|
|
18
|
+
*/
|
|
10
19
|
export declare function fmtElapsed(ms: number): string;
|
|
11
20
|
/** A picker label uses all of its allocated column, only ellipsising at the actual boundary. */
|
|
12
21
|
export declare function pickerLabel(text: string, width: number): string;
|
|
@@ -154,6 +163,30 @@ export declare function forkRow(task: string, meta: string, width: number, inden
|
|
|
154
163
|
gap: string;
|
|
155
164
|
meta: string;
|
|
156
165
|
};
|
|
166
|
+
/** How long each half of a blink lasts, and how long the cursor stays solid after a key. */
|
|
167
|
+
export declare const BLINK_MS = 530;
|
|
168
|
+
export declare const SOLID_AFTER_KEY_MS = 600;
|
|
169
|
+
/**
|
|
170
|
+
* Whether the painted cursor is showing at this moment.
|
|
171
|
+
*
|
|
172
|
+
* Asked for: "it does not indicate where the typing is, like a blinking indicator". It blinks only
|
|
173
|
+
* where the terminal redraws atomically — elsewhere every blink is a repaint the eye can see, the
|
|
174
|
+
* flicker this interface has spent a long time getting rid of — and stays solid for a moment after
|
|
175
|
+
* each key, as an editor's does, so it is never off while somebody is looking for it.
|
|
176
|
+
*/
|
|
177
|
+
/**
|
|
178
|
+
* The running task in a few lines, for /aside: what was asked, how far the plan has got, how long.
|
|
179
|
+
* Null when nothing is running and there is no plan, so an ordinary aside is left as it was.
|
|
180
|
+
*/
|
|
181
|
+
export declare function asideStatus(s: {
|
|
182
|
+
task: string | null;
|
|
183
|
+
plan: Plan | null;
|
|
184
|
+
busy: boolean;
|
|
185
|
+
elapsedMs: number;
|
|
186
|
+
tools: number;
|
|
187
|
+
liveTool: string | null;
|
|
188
|
+
}): string | null;
|
|
189
|
+
export declare function cursorShowing(now: number, lastKeyAt: number, canBlink: boolean): boolean;
|
|
157
190
|
/**
|
|
158
191
|
* Whether the terminal should report the wheel to KONECK, when nothing has been saved either way.
|
|
159
192
|
*
|
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,KAAmD,MAAM,OAAO,CAAC;AA8BxE,OAAO,EAAyB,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAgCtE,OAAO,KAAK,EAAY,SAAS,EAAE,MAAM,kBAAkB,CAAC;AA8B5D,OAAO,EAA6C,KAAK,YAAY,EAAE,MAAM,aAAa,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
|
@@ -226,14 +226,25 @@ function toolDetailOrThrow(name, argsJson) {
|
|
|
226
226
|
}
|
|
227
227
|
}
|
|
228
228
|
/** 92000 → "1m 32s", 7400 → "7.4s", 12 → "12ms". Sub-second work read as a broken "0.0s". */
|
|
229
|
+
/**
|
|
230
|
+
* A duration as people say it: "12.3s", "5m 15s", "1h 30m 25s".
|
|
231
|
+
*
|
|
232
|
+
* Past an hour it kept counting minutes — "185m 25s", reported with a screenshot and the request
|
|
233
|
+
* "90 minutes could be 1h 30mins". Seconds stay, so a running timer still visibly moves; and they
|
|
234
|
+
* are floored, because rounding them showed "1m 60s" for the last half-second of a minute. The
|
|
235
|
+
* browser's `ms()` says the same thing in the same words (ui-client.ts).
|
|
236
|
+
*/
|
|
229
237
|
export function fmtElapsed(ms) {
|
|
230
238
|
if (ms < 1000)
|
|
231
239
|
return Math.round(ms) + 'ms';
|
|
232
240
|
const sec = ms / 1000;
|
|
233
241
|
if (sec < 60)
|
|
234
242
|
return sec.toFixed(1) + 's';
|
|
235
|
-
const
|
|
236
|
-
|
|
243
|
+
const total = Math.floor(sec);
|
|
244
|
+
const h = Math.floor(total / 3600);
|
|
245
|
+
const m = Math.floor((total % 3600) / 60);
|
|
246
|
+
const s = total % 60;
|
|
247
|
+
return h > 0 ? `${h}h ${m}m ${s}s` : `${m}m ${s}s`;
|
|
237
248
|
}
|
|
238
249
|
function fmtTokens(n) {
|
|
239
250
|
return n >= 1000 ? (n / 1000).toFixed(1) + 'k' : String(n);
|
|
@@ -613,8 +624,53 @@ export function forkRow(task, meta, width, indent = FORK_LEAD) {
|
|
|
613
624
|
* cursor is drawn when it sits on a character mid-string. Now both cases are the same thing: a
|
|
614
625
|
* painted cell, in the same place, whatever the terminal has to draw with.
|
|
615
626
|
*/
|
|
616
|
-
function Cursor() {
|
|
617
|
-
|
|
627
|
+
function Cursor({ on = true }) {
|
|
628
|
+
// Off is a plain space, not nothing: the cell stays, so the line does not shift as it blinks.
|
|
629
|
+
return on ? _jsx(Text, { backgroundColor: CYAN, children: " " }) : _jsx(Text, { children: " " });
|
|
630
|
+
}
|
|
631
|
+
/** How long each half of a blink lasts, and how long the cursor stays solid after a key. */
|
|
632
|
+
export const BLINK_MS = 530;
|
|
633
|
+
export const SOLID_AFTER_KEY_MS = 600;
|
|
634
|
+
/**
|
|
635
|
+
* Whether the painted cursor is showing at this moment.
|
|
636
|
+
*
|
|
637
|
+
* Asked for: "it does not indicate where the typing is, like a blinking indicator". It blinks only
|
|
638
|
+
* where the terminal redraws atomically — elsewhere every blink is a repaint the eye can see, the
|
|
639
|
+
* flicker this interface has spent a long time getting rid of — and stays solid for a moment after
|
|
640
|
+
* each key, as an editor's does, so it is never off while somebody is looking for it.
|
|
641
|
+
*/
|
|
642
|
+
/**
|
|
643
|
+
* The running task in a few lines, for /aside: what was asked, how far the plan has got, how long.
|
|
644
|
+
* Null when nothing is running and there is no plan, so an ordinary aside is left as it was.
|
|
645
|
+
*/
|
|
646
|
+
export function asideStatus(s) {
|
|
647
|
+
const steps = s.plan?.steps ?? [];
|
|
648
|
+
if (!s.busy && steps.length === 0)
|
|
649
|
+
return null;
|
|
650
|
+
const lines = ['**Status now**'];
|
|
651
|
+
if (s.task)
|
|
652
|
+
lines.push(`Task: ${s.task.length > 160 ? s.task.slice(0, 157) + '…' : s.task}`);
|
|
653
|
+
if (steps.length) {
|
|
654
|
+
const done = steps.filter(x => x.state === 'done').length;
|
|
655
|
+
const doing = steps.find(x => x.state === 'doing') ?? steps.find(x => x.state === 'todo');
|
|
656
|
+
const blocked = steps.filter(x => x.state === 'blocked').length;
|
|
657
|
+
lines.push(`Plan: ${done} of ${steps.length} steps done`
|
|
658
|
+
+ (blocked ? `, ${blocked} blocked` : '')
|
|
659
|
+
+ (doing ? ` — now on "${doing.text}"` : ''));
|
|
660
|
+
}
|
|
661
|
+
if (s.busy) {
|
|
662
|
+
lines.push(`Working for ${fmtElapsed(s.elapsedMs)}`
|
|
663
|
+
+ (s.tools ? `, ${s.tools} tool call${s.tools === 1 ? '' : 's'} so far` : '')
|
|
664
|
+
+ (s.liveTool ? `, running ${s.liveTool} now` : '') + '.');
|
|
665
|
+
}
|
|
666
|
+
return lines.join('\n');
|
|
667
|
+
}
|
|
668
|
+
export function cursorShowing(now, lastKeyAt, canBlink) {
|
|
669
|
+
if (!canBlink)
|
|
670
|
+
return true;
|
|
671
|
+
if (now - lastKeyAt < SOLID_AFTER_KEY_MS)
|
|
672
|
+
return true;
|
|
673
|
+
return Math.floor(now / BLINK_MS) % 2 === 0;
|
|
618
674
|
}
|
|
619
675
|
/**
|
|
620
676
|
* Whether the terminal should report the wheel to KONECK, when nothing has been saved either way.
|
|
@@ -3159,6 +3215,20 @@ export function App({ config: initialConfig, clearFrame, synchronizedFrames = fa
|
|
|
3159
3215
|
const showDiffsRef = useRef(true);
|
|
3160
3216
|
/** When a key was last pressed. The animation stands down while somebody is typing. */
|
|
3161
3217
|
const lastKeyAtRef = useRef(0);
|
|
3218
|
+
/*
|
|
3219
|
+
* The cursor's blink while nothing else redraws. A turn in progress redraws on its own — the
|
|
3220
|
+
* spinner — and carries the blink with it; idle, this is the only thing that does, and only where
|
|
3221
|
+
* a redraw is composited (see cursorShowing).
|
|
3222
|
+
*/
|
|
3223
|
+
const [, setBlinkTick] = useState(0);
|
|
3224
|
+
useEffect(() => {
|
|
3225
|
+
if (!syncedFramesRef.current)
|
|
3226
|
+
return;
|
|
3227
|
+
if (busy && animate)
|
|
3228
|
+
return;
|
|
3229
|
+
const timer = setInterval(() => setBlinkTick(n => n + 1), BLINK_MS);
|
|
3230
|
+
return () => clearInterval(timer);
|
|
3231
|
+
}, [busy, animate]);
|
|
3162
3232
|
const wordTimer = useRef(0);
|
|
3163
3233
|
// Register on the session bus so other running KONECK instances can reach this one.
|
|
3164
3234
|
useEffect(() => {
|
|
@@ -3936,9 +4006,28 @@ export function App({ config: initialConfig, clearFrame, synchronizedFrames = fa
|
|
|
3936
4006
|
return;
|
|
3937
4007
|
}
|
|
3938
4008
|
addRow({ role: 'user', text: `/aside ${question}` });
|
|
4009
|
+
/*
|
|
4010
|
+
* What KONECK already knows, said at once, and handed to the model with the question.
|
|
4011
|
+
*
|
|
4012
|
+
* The aside ran a fresh agent on the bare question, so "how far from finishing" was asked of
|
|
4013
|
+
* something that had never heard of the task — and on a local Ollama it waited behind the main
|
|
4014
|
+
* turn's request before even guessing. The plan, the step in progress and the time spent are
|
|
4015
|
+
* facts this interface holds; they need no model and no wait.
|
|
4016
|
+
*/
|
|
4017
|
+
const status = asideStatus({
|
|
4018
|
+
task: retryTaskRef.current, plan, busy,
|
|
4019
|
+
elapsedMs: busy && busyStart.current ? Date.now() - busyStart.current : 0,
|
|
4020
|
+
tools: turnToolsRef.current, liveTool: liveToolRef.current?.name ?? null,
|
|
4021
|
+
});
|
|
4022
|
+
if (status)
|
|
4023
|
+
addSystem(status);
|
|
3939
4024
|
try {
|
|
3940
4025
|
const { runAgent } = await import('./engine.js');
|
|
3941
|
-
const result = await runAgent(
|
|
4026
|
+
const result = await runAgent(status
|
|
4027
|
+
? `[A side question, asked while another agent works on the task below. Answer it from this `
|
|
4028
|
+
+ `status first; read files only if the status does not answer it. Do not change anything.]\n`
|
|
4029
|
+
+ `${status}\n\nQuestion: ${question}`
|
|
4030
|
+
: question, {
|
|
3942
4031
|
...cfg, ci: true, silent: true,
|
|
3943
4032
|
// This is enforced at the engine approval boundary, not left as a prompt suggestion:
|
|
3944
4033
|
// a concurrent side question cannot edit, run a command, persist memory, or call MCP.
|
|
@@ -7887,11 +7976,12 @@ export function App({ config: initialConfig, clearFrame, synchronizedFrames = fa
|
|
|
7887
7976
|
if (sel) {
|
|
7888
7977
|
return (_jsxs(_Fragment, { children: [_jsx(Text, { color: INK, children: draft.slice(0, sel[0]) }), _jsx(Text, { backgroundColor: CYAN, color: ON_ACCENT, children: draft.slice(sel[0], sel[1]) }), _jsx(Text, { color: INK, children: draft.slice(sel[1]) })] }));
|
|
7889
7978
|
}
|
|
7890
|
-
return (_jsxs(_Fragment, { children: [_jsx(Text, { color: INK, children: draft.slice(0, caret) }),
|
|
7891
|
-
|
|
7892
|
-
|
|
7893
|
-
? _jsxs(_Fragment, { children: [_jsx(Text, { backgroundColor: CYAN, color: ON_ACCENT, children: draft[caret] }), _jsx(Text, { color: INK, children: draft.slice(caret + 1) })] })
|
|
7894
|
-
: _jsx(Cursor, {
|
|
7979
|
+
return (_jsxs(_Fragment, { children: [_jsx(Text, { color: INK, children: draft.slice(0, caret) }), (() => {
|
|
7980
|
+
const on = cursorShowing(Date.now(), lastKeyAtRef.current, syncedFramesRef.current);
|
|
7981
|
+
return caret < draft.length
|
|
7982
|
+
? _jsxs(_Fragment, { children: [_jsx(Text, { ...(on ? { backgroundColor: CYAN, color: ON_ACCENT } : { color: INK }), children: draft[caret] }), _jsx(Text, { color: INK, children: draft.slice(caret + 1) })] })
|
|
7983
|
+
: _jsx(Cursor, { on: on });
|
|
7984
|
+
})(), _jsx(Text, { color: DIM, children: draft === '' && !busy ? ' ' + sliceToWidth(PLACEHOLDER, Math.max(0, uiWidth - 13)).text : '' })] }));
|
|
7895
7985
|
})()] }) }), copyNotice && _jsx(Text, { color: CYAN, children: copyNotice }), (() => {
|
|
7896
7986
|
const limit = ctxFill?.limit ?? detectedContext?.limit
|
|
7897
7987
|
?? contextLimitWithSource(cfg.model, cfg.contextTokens, servesOwnWeights(cfg.provider)).limit;
|