koneck 2.25.10 → 2.25.12
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/chat.js +4 -4
- package/dist/chat.js.map +1 -1
- package/dist/engine.d.ts +23 -0
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +33 -6
- package/dist/engine.js.map +1 -1
- package/dist/ink-chat.d.ts.map +1 -1
- package/dist/ink-chat.js +22 -12
- package/dist/ink-chat.js.map +1 -1
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +16 -2
- package/dist/tools.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":"AAoCA,OAAO,KAAK,EAAE,WAAW,EAAiB,MAAM,YAAY,CAAC;AAgE7D,6FAA6F;AAC7F,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAM7C;AAqED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGnE;AAuBD;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,CAAC;AAE3E,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA2GzE,CAAC;AAEF,0CAA0C;AAC1C,iFAAiF;AACjF,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,KAAK,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAItD;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,UAAU,GAAG,QAAQ,CAMpD;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAIpF;AAkDD,UAAU,UAAU;IAAG,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE;AAUtG,qDAAqD;AACrD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAK7E;AAeD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE,CAWlF;
|
|
1
|
+
{"version":3,"file":"ink-chat.d.ts","sourceRoot":"","sources":["../src/ink-chat.tsx"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,WAAW,EAAiB,MAAM,YAAY,CAAC;AAgE7D,6FAA6F;AAC7F,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAM7C;AAqED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGnE;AAuBD;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,CAAC;AAE3E,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA2GzE,CAAC;AAEF,0CAA0C;AAC1C,iFAAiF;AACjF,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,KAAK,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAItD;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,UAAU,GAAG,QAAQ,CAMpD;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAIpF;AAkDD,UAAU,UAAU;IAAG,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE;AAUtG,qDAAqD;AACrD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAK7E;AAeD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE,CAWlF;AAyzED,wBAAsB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAKvE"}
|
package/dist/ink-chat.js
CHANGED
|
@@ -360,7 +360,7 @@ const COMMANDS = [
|
|
|
360
360
|
{ cmd: '/ask', desc: 'Ask another session and wait: /ask <repo> <question>' },
|
|
361
361
|
{ cmd: '/agents', desc: 'How parallel sub-agents are configured' },
|
|
362
362
|
{ cmd: '/subtask', desc: 'Run a task in an isolated sub-agent' },
|
|
363
|
-
{ cmd: '/
|
|
363
|
+
{ cmd: '/aside', desc: 'Ask a side question without interrupting the running task' },
|
|
364
364
|
{ cmd: '/clear', desc: 'Clear conversation history' },
|
|
365
365
|
{ cmd: '/new', desc: 'New session (alias of /clear)' },
|
|
366
366
|
{ cmd: '/reset', desc: 'Reset session (alias of /clear)' },
|
|
@@ -464,7 +464,7 @@ Slash commands:
|
|
|
464
464
|
/mode [auto|plan|code] Show or set mode
|
|
465
465
|
/effort [low|med|high|max] Set reasoning effort
|
|
466
466
|
/config [key] [value] View or set persistent config
|
|
467
|
-
/
|
|
467
|
+
/aside <question> Ask a side question without interrupting the running task
|
|
468
468
|
/usage Usage pane: session, context, models, limits
|
|
469
469
|
/tokens Show token usage breakdown
|
|
470
470
|
/cost Show session cost
|
|
@@ -850,11 +850,13 @@ function App({ config: initialConfig }) {
|
|
|
850
850
|
};
|
|
851
851
|
const currentDelay = () => {
|
|
852
852
|
const idleFor = Date.now() - lastActivityRef.current;
|
|
853
|
-
//
|
|
853
|
+
// Two complaints pull against each other here: a fast repaint flickers, a slow one looks
|
|
854
|
+
// like the app has seized. 500ms was too far — at two frames a second the spinner visibly
|
|
855
|
+
// steps and reads as lag. These are the slowest rates at which the animation still reads
|
|
856
|
+
// as motion, which is the property that matters more than the byte count.
|
|
854
857
|
if (idleFor < 2_000)
|
|
855
|
-
return
|
|
856
|
-
|
|
857
|
-
return idleFor > 15_000 ? 500 : 250;
|
|
858
|
+
return 120;
|
|
859
|
+
return idleFor > 15_000 ? 220 : 170;
|
|
858
860
|
};
|
|
859
861
|
timer = setTimeout(tick, 150);
|
|
860
862
|
return () => clearTimeout(timer);
|
|
@@ -1011,10 +1013,10 @@ function App({ config: initialConfig }) {
|
|
|
1011
1013
|
*/
|
|
1012
1014
|
async function askAside(question) {
|
|
1013
1015
|
if (!question.trim()) {
|
|
1014
|
-
addSystem('Usage: /
|
|
1016
|
+
addSystem('Usage: /aside <question> — answers alongside the running task, without interrupting it.');
|
|
1015
1017
|
return;
|
|
1016
1018
|
}
|
|
1017
|
-
addRow({ role: 'user', text: `/
|
|
1019
|
+
addRow({ role: 'user', text: `/aside ${question}` });
|
|
1018
1020
|
try {
|
|
1019
1021
|
const { runAgent } = await import('./engine.js');
|
|
1020
1022
|
const result = await runAgent(question, {
|
|
@@ -1028,7 +1030,7 @@ function App({ config: initialConfig }) {
|
|
|
1028
1030
|
addRow({ role: 'agent', text: typeof last?.content === 'string' ? last.content : '(no answer)' });
|
|
1029
1031
|
}
|
|
1030
1032
|
catch (e) {
|
|
1031
|
-
addSystem(`/
|
|
1033
|
+
addSystem(`/aside failed: ${e instanceof Error ? e.message : String(e)}`);
|
|
1032
1034
|
}
|
|
1033
1035
|
}
|
|
1034
1036
|
/** Opens the update panel, checking the registry each time it is opened deliberately. */
|
|
@@ -1305,6 +1307,14 @@ function App({ config: initialConfig }) {
|
|
|
1305
1307
|
return;
|
|
1306
1308
|
}
|
|
1307
1309
|
case '/btw': {
|
|
1310
|
+
// Not our name for it, but it is the one people arrive with. Say so rather than
|
|
1311
|
+
// answering "unknown command" to someone asking a perfectly reasonable question.
|
|
1312
|
+
addSystem(`KONECK calls this /aside.${arg ? ' Running it now.' : ''}`);
|
|
1313
|
+
if (arg)
|
|
1314
|
+
await askAside(arg);
|
|
1315
|
+
return;
|
|
1316
|
+
}
|
|
1317
|
+
case '/aside': {
|
|
1308
1318
|
// Also available when nothing is running, where it simply answers in a clean context.
|
|
1309
1319
|
await askAside(arg);
|
|
1310
1320
|
return;
|
|
@@ -1932,10 +1942,10 @@ function App({ config: initialConfig }) {
|
|
|
1932
1942
|
if (!text)
|
|
1933
1943
|
return;
|
|
1934
1944
|
// A side question is answered straight away and separately; everything else waits its turn.
|
|
1935
|
-
if (/^\/
|
|
1945
|
+
if (/^\/aside(\s|$)/.test(text)) {
|
|
1936
1946
|
setDraft('');
|
|
1937
1947
|
setCaret(0);
|
|
1938
|
-
void askAside(text.replace(/^\/
|
|
1948
|
+
void askAside(text.replace(/^\/aside\s*/, ''));
|
|
1939
1949
|
return;
|
|
1940
1950
|
}
|
|
1941
1951
|
setQueued(q => [...q, expandPastes(text, pastesRef.current)]);
|
|
@@ -2278,7 +2288,7 @@ function App({ config: initialConfig }) {
|
|
|
2278
2288
|
// markdown tables needlessly narrow. A marker plus the content reads better and
|
|
2279
2289
|
// cannot misalign, which is how Claude Code presents its own answers.
|
|
2280
2290
|
_jsxs(Box, { flexDirection: "column", marginTop: row.continued ? 0 : 1, children: [_jsxs(Box, { gap: 1, children: [_jsx(Text, { color: CYAN, bold: true, children: row.continued ? ' ' : 'ꞰK' }), _jsx(Box, { flexDirection: "column", children: _jsx(Markdown, { text: row.text ?? '', width: barWidth - 3 }) })] }), row.tokens != null && (_jsxs(Text, { color: MUTED, children: [_jsx(Text, { color: GREEN, children: "* " }), row.done ? `${row.done} in ${fmtElapsed(row.elapsed ?? 0)}` : fmtElapsed(row.elapsed ?? 0), ' | ', row.tokens, " tokens", ' | ', cfg.provider, " ", modelShort] }))] }, index)) }), _jsx(Box, { flexDirection: "column", children: busy && (agentState === 'processing' || agentState === 'syncing') && (_jsxs(Box, { flexDirection: "column", children: [sayRef.current.trim() !== '' && (_jsxs(Box, { gap: 1, children: [_jsx(Text, { color: CYAN, bold: true, children: replyStartedRef.current ? ' ' : 'ꞰK' }), _jsx(Box, { flexDirection: "column", children: tailLines(sayRef.current, liveReplyLines(termRows), replyWidth - 3)
|
|
2281
|
-
.split('\n').map((line, i) => _jsx(Text, { color: INK, children: line }, i)) })] })), liveToolRef.current && renderStep(liveToolRef.current, 1), queued.length > 0 && (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsxs(Box, { gap: 1, children: [_jsx(Text, { color: AMBER, children: "\u25AA" }), _jsxs(Text, { color: MUTED, children: [queued.length, " queued, will run when this finishes \u00B7 /
|
|
2291
|
+
.split('\n').map((line, i) => _jsx(Text, { color: INK, children: line }, i)) })] })), liveToolRef.current && renderStep(liveToolRef.current, 1), queued.length > 0 && (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsxs(Box, { gap: 1, children: [_jsx(Text, { color: AMBER, children: "\u25AA" }), _jsxs(Text, { color: MUTED, children: [queued.length, " queued, will run when this finishes \u00B7 /aside to ask without waiting"] })] }), queued.map((q, i) => (_jsx(Box, { paddingLeft: 2, children: _jsx(Text, { color: DIM, children: fitCells(q.split('\n')[0] ?? '', Math.max(20, barWidth - 6), true) }) }, i)))] })), agents.length > 0 && (() => {
|
|
2282
2292
|
const done = agents.filter(a => a.status !== 'running').length;
|
|
2283
2293
|
const failed = agents.filter(a => a.status === 'failed').length;
|
|
2284
2294
|
const tokens = agents.reduce((n, a) => n + a.tokens, 0);
|