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.
@@ -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;AA+yED,wBAAsB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAKvE"}
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: '/btw', desc: 'Ask a side question without interrupting the running task' },
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
- /btw <question> Ask a side question without interrupting the running task
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
- // Something is still arriving, so keep it lively.
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 150;
856
- // A long wait with nothing to show: slow right down.
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: /btw <question> — answers alongside the running task, without interrupting it.');
1016
+ addSystem('Usage: /aside <question> — answers alongside the running task, without interrupting it.');
1015
1017
  return;
1016
1018
  }
1017
- addRow({ role: 'user', text: `/btw ${question}` });
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(`/btw failed: ${e instanceof Error ? e.message : String(e)}`);
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 (/^\/btw(\s|$)/.test(text)) {
1945
+ if (/^\/aside(\s|$)/.test(text)) {
1936
1946
  setDraft('');
1937
1947
  setCaret(0);
1938
- void askAside(text.replace(/^\/btw\s*/, ''));
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 /btw 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 && (() => {
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);