ispbills-icli 8.5.8 → 8.6.0
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/package.json +1 -1
- package/src/tui/app.js +3 -3
- package/src/tui/components.js +13 -11
package/package.json
CHANGED
package/src/tui/app.js
CHANGED
|
@@ -706,7 +706,7 @@ export function App({ cfg, display = {}, onExternal, onExit, initialQuestion, sh
|
|
|
706
706
|
setChoice({
|
|
707
707
|
title: '⚙ Tool request',
|
|
708
708
|
note: toolDesc,
|
|
709
|
-
sel: 0, text: '', focusText: false, allowText:
|
|
709
|
+
sel: 0, text: '', focusText: false, allowText: true,
|
|
710
710
|
isToolApproval: true,
|
|
711
711
|
options: [
|
|
712
712
|
{ label: '1. Yes', value: 'yes, proceed with this tool call' },
|
|
@@ -1830,10 +1830,10 @@ export function App({ cfg, display = {}, onExternal, onExit, initialQuestion, sh
|
|
|
1830
1830
|
|
|
1831
1831
|
${live
|
|
1832
1832
|
? html`<${Box} flexDirection="column">
|
|
1833
|
-
|
|
1833
|
+
${live.text ? html`<${AssistantMessage} text=${live.text} cols=${cols} ts=${startedAt || Date.now()} streaming=${true} />` : null}
|
|
1834
1834
|
${live.reasoning ? html`<${Reasoning} text=${live.reasoning} show=${showReasoning} />` : null}
|
|
1835
1835
|
${live.reply?.steps ? html`<${Plan} reply=${live.reply} live=${true} />` : null}
|
|
1836
|
-
|
|
1836
|
+
<${StatusLines} lines=${live.status} busy=${busy} />
|
|
1837
1837
|
<${Thinking} label=${live.reply ? 'Planning' : live.text ? 'Responding' : 'Working'} startedAt=${startedAt} />
|
|
1838
1838
|
<//>`
|
|
1839
1839
|
: null}
|
package/src/tui/components.js
CHANGED
|
@@ -90,7 +90,7 @@ function formatTs(ts) {
|
|
|
90
90
|
function SpeakerLine({ label, color, cols = 80, ts, rightLabel = '' }) {
|
|
91
91
|
const stamp = ts ? `[${formatTs(ts)}]` : '';
|
|
92
92
|
return html`
|
|
93
|
-
<${Box} paddingX=${
|
|
93
|
+
<${Box} paddingX=${1} marginTop=${1} width=${cols}>
|
|
94
94
|
<${Text} color=${color} bold>${label}<//>
|
|
95
95
|
<${Box} flexGrow=${1} />
|
|
96
96
|
${rightLabel ? html`<${Text} color=${C.muted}>${rightLabel}<//>` : null}
|
|
@@ -118,7 +118,7 @@ export function TabBar({ active = 'session', cols = 80, mode = 'ask' }) {
|
|
|
118
118
|
const on = t.id === active;
|
|
119
119
|
return html`
|
|
120
120
|
<${Box} key=${t.id}>
|
|
121
|
-
${i > 0 ? html`<${Text}
|
|
121
|
+
${i > 0 ? html`<${Text} backgroundColor="blue"> <//>` : null}
|
|
122
122
|
${on
|
|
123
123
|
? html`<${Text} color="white" bold backgroundColor="blue">[${t.label}]<//>`
|
|
124
124
|
: html`<${Text} color="white" dimColor backgroundColor="blue">${t.label}<//>`}
|
|
@@ -221,7 +221,7 @@ export function UserMessage({ text, cols = 80, ts }) {
|
|
|
221
221
|
<${Box} flexDirection="column" marginTop=${1}>
|
|
222
222
|
<${Sep} cols=${cols} />
|
|
223
223
|
<${SpeakerLine} label="You" color=${C.brand} cols=${cols} ts=${ts} />
|
|
224
|
-
<${Box} paddingX=${
|
|
224
|
+
<${Box} paddingX=${1}>
|
|
225
225
|
<${Text}>${withMentions(text)}<//>
|
|
226
226
|
<//>
|
|
227
227
|
<//>`;
|
|
@@ -257,7 +257,7 @@ export function AssistantMessage({ text, cols = 80, ts, label = `${glyphs.copilo
|
|
|
257
257
|
<${Box} flexDirection="column" marginTop=${1}>
|
|
258
258
|
<${Sep} cols=${cols} />
|
|
259
259
|
<${SpeakerLine} label=${label} color=${C.accent} cols=${cols} ts=${ts} />
|
|
260
|
-
<${Box} paddingX=${
|
|
260
|
+
<${Box} paddingX=${1} flexDirection="column" width=${bodyWidth}>
|
|
261
261
|
${streaming ? html`<${StreamingText} text=${text} />` : html`<${Markdown} content=${text} />`}
|
|
262
262
|
<//>
|
|
263
263
|
<//>`;
|
|
@@ -315,17 +315,18 @@ export function StatusLines({ lines = [], busy = false }) {
|
|
|
315
315
|
const em = String(line).match(LEAD_EMOJI);
|
|
316
316
|
const body = em ? String(line).slice(em[0].length) : String(line).replace(/^[\s◈◆●○◎⇢→>*✓✗×!⚠·-]+/u, '');
|
|
317
317
|
const ci = body.indexOf(':');
|
|
318
|
-
const action = ci > -1 ? body.slice(0, ci) : body;
|
|
318
|
+
const action = ci > -1 ? body.slice(0, ci).trim() : body.trim();
|
|
319
319
|
const detail = ci > -1 ? body.slice(ci + 1).trim() : '';
|
|
320
|
+
// §6/§23: render as [Tool call: name detail] ✓/spinner chip
|
|
321
|
+
const chipLabel = detail ? `${em ? em[1] : ''}${action} ${detail}` : `${em ? em[1] : ''}${action}`;
|
|
320
322
|
return html`
|
|
321
|
-
<${Box} key=${'s' + i}>
|
|
323
|
+
<${Box} key=${'s' + i} marginTop=${0}>
|
|
324
|
+
<${Text} color=${C.muted}> <//>
|
|
325
|
+
<${Text} color=${running ? C.warning : C.muted}>[<//>
|
|
326
|
+
<${Text} color=${running ? C.white : C.muted} bold=${running}>${chipLabel.trim()}<//><${Text} color=${running ? C.warning : C.muted}>]<//><${Text}> <//>
|
|
322
327
|
${running
|
|
323
328
|
? html`<${Text} color=${C.accent}><${Spinner} type=${spinnerType()} /><//>`
|
|
324
|
-
: html`<${Text} color=${C.
|
|
325
|
-
<${Text}> <//>
|
|
326
|
-
${em ? html`<${Text}>${em[1]} <//>` : null}
|
|
327
|
-
<${Text} color=${running ? C.white : C.gray} bold=${running}>${action}<//>
|
|
328
|
-
${detail ? html`<${Text} color=${C.gray}>: ${detail}<//>` : null}
|
|
329
|
+
: html`<${Text} color=${C.success}>${glyphs.check}<//>`}
|
|
329
330
|
<//>`;
|
|
330
331
|
})}
|
|
331
332
|
<//>`;
|
|
@@ -518,6 +519,7 @@ export function Choice({ title, note, options = [], sel = 0, allowText = false,
|
|
|
518
519
|
<${Box} paddingX=${2} marginTop=${1}>
|
|
519
520
|
<${Text} color=${C.accent} bold>⚙ Tool request<//>
|
|
520
521
|
<//>
|
|
522
|
+
<${Sep} cols=${80} />
|
|
521
523
|
${note ? html`<${Box} paddingX=${2} marginTop=${1}><${Text} color=${C.muted}>${note}<//><//>` : null}
|
|
522
524
|
<${Box} flexDirection="column" marginTop=${1} paddingX=${2}>
|
|
523
525
|
${options.map((o, i) => {
|