@yuaone/cli 0.6.1 → 0.7.1
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/cli.js +73 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +70 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/tui/App.d.ts.map +1 -1
- package/dist/tui/App.js +85 -13
- package/dist/tui/App.js.map +1 -1
- package/dist/tui/agent-bridge.d.ts.map +1 -1
- package/dist/tui/agent-bridge.js +36 -8
- package/dist/tui/agent-bridge.js.map +1 -1
- package/dist/tui/components/FooterBar.d.ts.map +1 -1
- package/dist/tui/components/FooterBar.js +8 -1
- package/dist/tui/components/FooterBar.js.map +1 -1
- package/dist/tui/components/InputBox.d.ts +13 -1
- package/dist/tui/components/InputBox.d.ts.map +1 -1
- package/dist/tui/components/InputBox.js +95 -21
- package/dist/tui/components/InputBox.js.map +1 -1
- package/dist/tui/components/MessageBubble.d.ts.map +1 -1
- package/dist/tui/components/MessageBubble.js +64 -16
- package/dist/tui/components/MessageBubble.js.map +1 -1
- package/dist/tui/components/MessageList.d.ts +2 -0
- package/dist/tui/components/MessageList.d.ts.map +1 -1
- package/dist/tui/components/MessageList.js +21 -16
- package/dist/tui/components/MessageList.js.map +1 -1
- package/dist/tui/components/TaskPanel.d.ts +23 -0
- package/dist/tui/components/TaskPanel.d.ts.map +1 -0
- package/dist/tui/components/TaskPanel.js +71 -0
- package/dist/tui/components/TaskPanel.js.map +1 -0
- package/dist/tui/hooks/useAgentStream.d.ts.map +1 -1
- package/dist/tui/hooks/useAgentStream.js +72 -0
- package/dist/tui/hooks/useAgentStream.js.map +1 -1
- package/dist/tui/hooks/useTaskPanel.d.ts +30 -0
- package/dist/tui/hooks/useTaskPanel.d.ts.map +1 -0
- package/dist/tui/hooks/useTaskPanel.js +64 -0
- package/dist/tui/hooks/useTaskPanel.js.map +1 -0
- package/dist/tui/types.d.ts +21 -0
- package/dist/tui/types.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -14,6 +14,7 @@ import { MarkdownRenderer } from "./MarkdownRenderer.js";
|
|
|
14
14
|
import { DiffView } from "./DiffView.js";
|
|
15
15
|
const BANNER_TITLE_PREFIX = "YUAN v";
|
|
16
16
|
const BANNER_SUBTITLE = "Autonomous Coding Agent";
|
|
17
|
+
const BANNER_META_SEP = "---META---";
|
|
17
18
|
const FOX_PIXEL_PALETTE = {
|
|
18
19
|
".": null,
|
|
19
20
|
"O": "#f97316", // orange body
|
|
@@ -134,8 +135,27 @@ function BlinkingDot() {
|
|
|
134
135
|
}, []);
|
|
135
136
|
return _jsx(Text, { color: bright ? "white" : "#555555", children: "\u25CF" });
|
|
136
137
|
}
|
|
138
|
+
/** Get a short "verb" label for the tool call header */
|
|
139
|
+
function toolVerb(toolName) {
|
|
140
|
+
const n = toolName.toLowerCase();
|
|
141
|
+
if (n.includes("read"))
|
|
142
|
+
return "read";
|
|
143
|
+
if (n.includes("write"))
|
|
144
|
+
return "write";
|
|
145
|
+
if (n.includes("edit"))
|
|
146
|
+
return "edit";
|
|
147
|
+
if (n.includes("bash") || n.includes("shell") || n.includes("exec"))
|
|
148
|
+
return "bash";
|
|
149
|
+
if (n.includes("grep") || n.includes("search"))
|
|
150
|
+
return "search";
|
|
151
|
+
if (n.includes("glob") || n.includes("find"))
|
|
152
|
+
return "find";
|
|
153
|
+
if (n.includes("git"))
|
|
154
|
+
return "git";
|
|
155
|
+
return toolName;
|
|
156
|
+
}
|
|
137
157
|
function ToolCallLine({ tc, isLast, width }) {
|
|
138
|
-
const argsTruncated = truncateArgs(tc.argsSummary,
|
|
158
|
+
const argsTruncated = truncateArgs(tc.argsSummary, 38);
|
|
139
159
|
// Resolve diff
|
|
140
160
|
let resolvedDiff = null;
|
|
141
161
|
if (tc.status === "success" && DIFF_TOOL_NAMES.has(tc.toolName) && tc.result) {
|
|
@@ -153,13 +173,17 @@ function ToolCallLine({ tc, isLast, width }) {
|
|
|
153
173
|
displayDiff = limited.diff;
|
|
154
174
|
truncatedLines = limited.truncated;
|
|
155
175
|
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
176
|
+
// Tree connector: ├─ for non-last, └─ for last tool
|
|
177
|
+
const connector = isLast ? TOKENS.tree.last : TOKENS.tree.branch;
|
|
178
|
+
// Left continuation gutter for diff (aligns under tool args)
|
|
179
|
+
const diffGutter = isLast ? " " : `${TOKENS.tree.pipe} `;
|
|
180
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: connector }), tc.status === "running" ? (
|
|
181
|
+
// Running: blinking dot + bold tool verb + args
|
|
182
|
+
_jsxs(_Fragment, { children: [_jsx(Text, { children: " " }), _jsx(BlinkingDot, {}), _jsxs(Text, { bold: true, color: "white", children: [" ", toolVerb(tc.toolName)] }), argsTruncated ? _jsxs(Text, { dimColor: true, children: [" ", argsTruncated] }) : null] })) : tc.status === "error" ? (
|
|
183
|
+
// Error: red ✗ + dim tool verb + args
|
|
184
|
+
_jsxs(_Fragment, { children: [_jsx(Text, { color: "red", children: " \u2717" }), _jsxs(Text, { dimColor: true, children: [" ", toolVerb(tc.toolName)] }), argsTruncated ? _jsxs(Text, { dimColor: true, children: [" ", argsTruncated] }) : null] })) : (
|
|
185
|
+
// Success: dim ✓ + dim verb + args + duration
|
|
186
|
+
_jsxs(_Fragment, { children: [_jsx(Text, { color: "#3a7d44", children: " \u2713" }), _jsxs(Text, { dimColor: true, children: [" ", toolVerb(tc.toolName)] }), argsTruncated ? _jsxs(Text, { dimColor: true, children: [" ", argsTruncated] }) : null, tc.duration != null ? (_jsxs(Text, { color: "#555555", children: [" ", tc.duration.toFixed(1), "s"] })) : null] }))] }), displayDiff && (_jsxs(Box, { flexDirection: "column", paddingLeft: 4, children: [_jsx(DiffView, { diff: displayDiff, width: width - 6 }), truncatedLines > 0 && (_jsxs(Text, { dimColor: true, children: [" \u2026 ", truncatedLines, " more line", truncatedLines === 1 ? "" : "s"] }))] }))] }));
|
|
163
187
|
}
|
|
164
188
|
export function MessageBubble({ message, width, isLatest, }) {
|
|
165
189
|
const msg = message;
|
|
@@ -208,8 +232,12 @@ export function MessageBubble({ message, width, isLatest, }) {
|
|
|
208
232
|
return (_jsxs(Text, { backgroundColor: "#2a2a2a", color: "white", children: [full, " ".repeat(pad)] }, i));
|
|
209
233
|
}) }));
|
|
210
234
|
}
|
|
211
|
-
case "assistant":
|
|
212
|
-
|
|
235
|
+
case "assistant": {
|
|
236
|
+
const toolCalls = msg.toolCalls ?? [];
|
|
237
|
+
const hasTools = toolCalls.length > 0;
|
|
238
|
+
const hasText = !!msg.content;
|
|
239
|
+
return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Box, { children: msg.isStreaming && isLatest ? (_jsxs(_Fragment, { children: [_jsx(BlinkingDot, {}), _jsx(Text, { dimColor: true, children: " yuan" })] })) : (_jsx(Text, { dimColor: true, children: "\u25CF yuan" })) }), hasText && (_jsx(Box, { paddingLeft: 2, children: _jsx(MarkdownRenderer, { content: msg.content, width: width - 4 }) })), msg.isStreaming && isLatest && !hasText && (_jsx(Box, { paddingLeft: 2, children: _jsx(Text, { dimColor: true, children: "\u2588" }) })), hasTools && (_jsx(Box, { flexDirection: "column", paddingLeft: 2, marginTop: hasText ? 1 : 0, children: toolCalls.map((tc, i) => (_jsx(ToolCallLine, { tc: tc, isLast: i === toolCalls.length - 1, width: width - 2 }, tc.id))) }))] }));
|
|
240
|
+
}
|
|
213
241
|
case "tool": {
|
|
214
242
|
const icon = msg.toolSuccess ? "✓" : "✗";
|
|
215
243
|
const iconColor = msg.toolSuccess ? "green" : "red";
|
|
@@ -220,12 +248,32 @@ export function MessageBubble({ message, width, isLatest, }) {
|
|
|
220
248
|
}
|
|
221
249
|
case "system":
|
|
222
250
|
if (isBannerMessage) {
|
|
223
|
-
|
|
224
|
-
const
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
251
|
+
// Parse metadata embedded in banner content
|
|
252
|
+
const metaIdx = msg.content.indexOf(BANNER_META_SEP);
|
|
253
|
+
let meta = {};
|
|
254
|
+
let baseContent = msg.content;
|
|
255
|
+
if (metaIdx >= 0) {
|
|
256
|
+
try {
|
|
257
|
+
meta = JSON.parse(msg.content.slice(metaIdx + BANNER_META_SEP.length + 1).trim());
|
|
258
|
+
}
|
|
259
|
+
catch { /* ignore */ }
|
|
260
|
+
baseContent = msg.content.slice(0, metaIdx);
|
|
261
|
+
}
|
|
262
|
+
const lines = baseContent.split("\n");
|
|
263
|
+
const title = lines.find((l) => l.startsWith(BANNER_TITLE_PREFIX)) ?? `YUAN v${meta.version ?? ""}`;
|
|
264
|
+
const help = lines.find((l) => l.includes("/help")) ?? "Type /help for commands";
|
|
265
|
+
const site = lines.find((l) => l.includes("yuaone.com")) ?? "yuaone.com";
|
|
266
|
+
// What's new items for current version
|
|
267
|
+
const WHATS_NEW = [
|
|
268
|
+
"Native Gemini reasoning stream",
|
|
269
|
+
"Tool tree UI ├─✓/└─●",
|
|
270
|
+
"LLM Orchestrator (retry + telemetry)",
|
|
271
|
+
"Non-blocking ctx summarization",
|
|
272
|
+
"Pending queue bubble + ↑ edit",
|
|
273
|
+
];
|
|
274
|
+
const borderColor = "#5c3a1a";
|
|
275
|
+
const B = TOKENS.box;
|
|
276
|
+
return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, paddingLeft: 0, children: [_jsxs(Text, { color: borderColor, children: [B.topLeft, B.horizontal.repeat(2), " ", title, " ", B.horizontal.repeat(Math.max(0, width - title.length - 6)), B.topRight] }), _jsxs(Box, { flexDirection: "row", children: [_jsxs(Box, { flexDirection: "column", paddingLeft: 2, flexGrow: 0, minWidth: 30, children: [_jsx(PixelFoxSprite, {}), _jsx(Box, { height: 1 }), meta.model && _jsx(Text, { dimColor: true, children: meta.model }), meta.provider && _jsx(Text, { dimColor: true, children: meta.provider }), meta.cwd && _jsx(Text, { dimColor: true, children: meta.cwd }), _jsx(Box, { height: 1 }), _jsx(Text, { dimColor: true, children: help }), _jsx(Text, { dimColor: true, children: site })] }), _jsx(Box, { flexDirection: "column", paddingLeft: 1, paddingRight: 1, children: Array.from({ length: FOX_PIXEL_SPRITE.length + 7 }).map((_, i) => (_jsx(Text, { color: borderColor, children: B.vertical }, i))) }), _jsxs(Box, { flexDirection: "column", flexGrow: 1, paddingRight: 2, children: [(meta.model || meta.provider) && (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [meta.model && (_jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: "model " }), _jsx(Text, { color: "white", children: meta.model })] })), meta.provider && (_jsxs(Box, { children: [_jsx(Text, { dimColor: true, children: "via " }), _jsx(Text, { dimColor: true, children: meta.provider })] }))] })), _jsx(Text, { bold: true, color: "white", children: "What's new" }), _jsx(Box, { height: 1 }), WHATS_NEW.map((item, i) => (_jsxs(Box, { children: [_jsx(Text, { color: "#3a7d44", children: "\u00B7" }), _jsxs(Text, { dimColor: true, children: [" ", item] })] }, i)))] })] }), _jsxs(Text, { color: borderColor, children: [B.bottomLeft, B.horizontal.repeat(Math.max(0, width - 2)), B.bottomRight] })] }));
|
|
229
277
|
}
|
|
230
278
|
return (_jsx(Box, { marginBottom: 1, children: _jsx(Text, { dimColor: true, children: msg.content }) }));
|
|
231
279
|
default:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageBubble.js","sourceRoot":"","sources":["../../../src/tui/components/MessageBubble.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MessageBubble.js","sourceRoot":"","sources":["../../../src/tui/components/MessageBubble.tsx"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,8 @@ export interface MessageListProps {
|
|
|
15
15
|
messages: TUIMessage[];
|
|
16
16
|
isThinking?: boolean;
|
|
17
17
|
maxHeight?: number;
|
|
18
|
+
/** Pending queued message — shown as dim user bubble after latest message */
|
|
19
|
+
pendingMessage?: string;
|
|
18
20
|
}
|
|
19
21
|
export declare const MessageList: React.NamedExoticComponent<MessageListProps>;
|
|
20
22
|
//# sourceMappingURL=MessageList.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageList.d.ts","sourceRoot":"","sources":["../../../src/tui/components/MessageList.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAyD,MAAM,OAAO,CAAC;AAO9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9C,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"MessageList.d.ts","sourceRoot":"","sources":["../../../src/tui/components/MessageList.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAyD,MAAM,OAAO,CAAC;AAO9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9C,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AA2CD,eAAO,MAAM,WAAW,8CA+GtB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
/**
|
|
3
3
|
* MessageList — scrollable message area.
|
|
4
4
|
* Uses MessageBubble for individual message rendering.
|
|
@@ -22,37 +22,40 @@ const DIFF_TOOL_NAMES = new Set(["file_write", "file_edit", "edit_file", "write_
|
|
|
22
22
|
* Conservative (overestimates) to guarantee no overflow.
|
|
23
23
|
*/
|
|
24
24
|
function estimateLines(msg, columns) {
|
|
25
|
-
|
|
25
|
+
// Use a narrower effective width + generous safety margin to prevent overflow.
|
|
26
|
+
// Ink's Yoga layout + CJK double-width chars can exceed estimates, so we
|
|
27
|
+
// intentionally over-count to avoid content bleeding into adjacent components.
|
|
28
|
+
const contentWidth = Math.max(20, columns - 12); // extra 4-col margin vs prev
|
|
26
29
|
const textLen = msg.content?.length ?? 0;
|
|
27
|
-
|
|
30
|
+
// CJK chars can be 2x width → multiply by 1.3 to account for mixed CJK content
|
|
31
|
+
const contentLines = textLen === 0 ? 0 : Math.ceil((textLen * 1.3) / contentWidth);
|
|
28
32
|
switch (msg.role) {
|
|
29
33
|
case "user":
|
|
30
|
-
return Math.max(1, contentLines) + 1
|
|
34
|
+
return Math.max(1, contentLines) + 2; // +1 blank line after
|
|
31
35
|
case "assistant": {
|
|
32
36
|
const toolCalls = msg.toolCalls ?? [];
|
|
33
|
-
// Each tool call: 1 status line + up to
|
|
37
|
+
// Each tool call: 1 status line + up to 24 diff lines if file write/edit
|
|
34
38
|
const toolLines = toolCalls.reduce((sum, tc) => {
|
|
35
39
|
const hasDiff = DIFF_TOOL_NAMES.has(tc.toolName) && tc.status === "success";
|
|
36
|
-
return sum +
|
|
40
|
+
return sum + 2 + (hasDiff ? 24 : 0); // +2 for breathing room
|
|
37
41
|
}, 0);
|
|
38
|
-
|
|
39
|
-
return Math.max(1, contentLines) + toolLines + 1;
|
|
42
|
+
return Math.max(2, contentLines) + toolLines + 2;
|
|
40
43
|
}
|
|
41
44
|
case "tool":
|
|
42
|
-
return
|
|
45
|
+
return 2;
|
|
43
46
|
case "system": {
|
|
44
47
|
// Banner message with 16×10 fox sprite = 10 sprite rows + 4 text lines
|
|
45
48
|
const isBanner = msg.content?.includes("YUAN v") && msg.content?.includes("Autonomous Coding Agent");
|
|
46
49
|
if (isBanner)
|
|
47
|
-
return
|
|
50
|
+
return 16;
|
|
48
51
|
const newlines = (msg.content?.match(/\n/g) ?? []).length;
|
|
49
|
-
return Math.max(1, newlines +
|
|
52
|
+
return Math.max(1, newlines + 2); // +1 margin
|
|
50
53
|
}
|
|
51
54
|
default:
|
|
52
|
-
return
|
|
55
|
+
return 2;
|
|
53
56
|
}
|
|
54
57
|
}
|
|
55
|
-
export const MessageList = memo(function MessageList({ messages, isThinking, maxHeight, }) {
|
|
58
|
+
export const MessageList = memo(function MessageList({ messages, isThinking, maxHeight, pendingMessage, }) {
|
|
56
59
|
const { columns, rows } = useTerminalSize();
|
|
57
60
|
const height = maxHeight ?? rows - 4;
|
|
58
61
|
// Pinned = auto-scroll mode (show newest). false = user browsing history.
|
|
@@ -110,8 +113,10 @@ export const MessageList = memo(function MessageList({ messages, isThinking, max
|
|
|
110
113
|
startIdx = i;
|
|
111
114
|
}
|
|
112
115
|
const visibleMessages = messages.slice(startIdx, endIdx);
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
+
// Claude Code–style layout: start from top when messages are few,
|
|
117
|
+
// pin to bottom once they fill the viewport (feels natural, not floating in center)
|
|
118
|
+
const totalVisibleLines = visibleMessages.reduce((sum, m) => sum + estimateLines(m, columns), 0);
|
|
119
|
+
const justifyContent = totalVisibleLines >= height - reservedLines ? "flex-end" : "flex-start";
|
|
120
|
+
return (_jsxs(Box, { flexDirection: "column", height: height, overflow: "hidden", justifyContent: justifyContent, children: [visibleMessages.length === 0 && !isThinking && (_jsx(Box, { justifyContent: "center", flexGrow: 1, children: _jsx(Text, { dimColor: true, children: "Type a message to start..." }) })), visibleMessages.map((msg, i) => (_jsx(MessageBubble, { message: msg, width: columns, isLatest: startIdx + i === messages.length - 1 }, msg.id))), pendingMessage && (_jsxs(Box, { flexShrink: 0, marginBottom: 1, children: [_jsx(Text, { color: "#4b5563", children: "\u25B6 " }), _jsx(Text, { color: "#4b5563", children: pendingMessage.length > columns - 14 ? pendingMessage.slice(0, columns - 17) + "…" : pendingMessage }), _jsx(Text, { color: "#374151", children: " \u23F8queued" })] })), isThinking && !messages.some((m) => m.isStreaming) && (_jsxs(Box, { marginTop: 0, flexShrink: 0, children: [_jsx(Text, { children: " " }), _jsx(Spinner, { label: `${TOKENS.brand.name} ·····` })] }))] }));
|
|
116
121
|
});
|
|
117
122
|
//# sourceMappingURL=MessageList.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageList.js","sourceRoot":"","sources":["../../../src/tui/components/MessageList.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;AAEH,OAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC9E,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"MessageList.js","sourceRoot":"","sources":["../../../src/tui/components/MessageList.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TaskPanel — background agent task list + step detail viewer.
|
|
3
|
+
*
|
|
4
|
+
* Layout modes:
|
|
5
|
+
* LIST — shows all bg tasks with ▸ cursor, ↑↓ navigate, enter expand, esc close
|
|
6
|
+
* DETAIL — shows selected task's step tree, esc → back to list
|
|
7
|
+
*
|
|
8
|
+
* Opens below InputBox. Matches input container width.
|
|
9
|
+
* Truncates long labels with "…". Max 8 rows visible at a time.
|
|
10
|
+
*/
|
|
11
|
+
import React from "react";
|
|
12
|
+
import type { TUIBackgroundTask } from "../types.js";
|
|
13
|
+
export type TaskPanelMode = "list" | "detail";
|
|
14
|
+
export interface TaskPanelProps {
|
|
15
|
+
tasks: TUIBackgroundTask[];
|
|
16
|
+
mode: TaskPanelMode;
|
|
17
|
+
selectedIndex: number;
|
|
18
|
+
/** Task being viewed in detail mode (by id) */
|
|
19
|
+
detailTaskId: string | null;
|
|
20
|
+
width: number;
|
|
21
|
+
}
|
|
22
|
+
export declare function TaskPanel({ tasks, mode, selectedIndex, detailTaskId, width, }: TaskPanelProps): React.JSX.Element;
|
|
23
|
+
//# sourceMappingURL=TaskPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskPanel.d.ts","sourceRoot":"","sources":["../../../src/tui/components/TaskPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,iBAAiB,EAAa,MAAM,aAAa,CAAC;AAEhE,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE9C,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,IAAI,EAAE,aAAa,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,+CAA+C;IAC/C,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;CACf;AAqID,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,IAAI,EACJ,aAAa,EACb,YAAY,EACZ,KAAK,GACN,EAAE,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAWpC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import { TOKENS } from "../lib/tokens.js";
|
|
4
|
+
const MAX_LIST_ROWS = 6;
|
|
5
|
+
const MAX_DETAIL_ROWS = 8;
|
|
6
|
+
const LABEL_MAX = 26;
|
|
7
|
+
const MSG_MAX = 38;
|
|
8
|
+
function truncate(s, max) {
|
|
9
|
+
return s.length > max ? s.slice(0, max - 1) + "…" : s;
|
|
10
|
+
}
|
|
11
|
+
/** Status icon + color for a task */
|
|
12
|
+
function taskIcon(task) {
|
|
13
|
+
switch (task.status) {
|
|
14
|
+
case "running": return { icon: "●", color: "yellow" };
|
|
15
|
+
case "error": return { icon: "✗", color: "red" };
|
|
16
|
+
default: return { icon: "○", color: "#555555" };
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/** Step icon for detail tree */
|
|
20
|
+
function stepIcon(step) {
|
|
21
|
+
switch (step.type) {
|
|
22
|
+
case "success": return { icon: "✓", color: "#3a7d44" };
|
|
23
|
+
case "error": return { icon: "✗", color: "red" };
|
|
24
|
+
case "warning": return { icon: "⚠", color: "yellow" };
|
|
25
|
+
default: return { icon: "·", color: "#555555" };
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function TaskListView({ tasks, selectedIndex, width, }) {
|
|
29
|
+
const divider = TOKENS.box.horizontal.repeat(Math.max(0, width - 1));
|
|
30
|
+
const B = TOKENS.box;
|
|
31
|
+
// Visible window around selected
|
|
32
|
+
const start = Math.max(0, Math.min(selectedIndex - 2, tasks.length - MAX_LIST_ROWS));
|
|
33
|
+
const visible = tasks.slice(start, start + MAX_LIST_ROWS);
|
|
34
|
+
const hasAbove = start > 0;
|
|
35
|
+
const hasBelow = start + MAX_LIST_ROWS < tasks.length;
|
|
36
|
+
return (_jsxs(Box, { flexDirection: "column", flexShrink: 0, children: [_jsx(Text, { dimColor: true, children: divider }), _jsxs(Box, { justifyContent: "space-between", children: [_jsxs(Text, { dimColor: true, children: [" bg agents (", tasks.length, ")"] }), _jsx(Text, { dimColor: true, children: "\u2191\u2193 nav enter expand esc close " })] }), hasAbove && _jsxs(Text, { dimColor: true, children: [" \u2191 ", start, " more"] }), visible.map((task, i) => {
|
|
37
|
+
const absIdx = start + i;
|
|
38
|
+
const isSelected = absIdx === selectedIndex;
|
|
39
|
+
const { icon, color } = taskIcon(task);
|
|
40
|
+
const label = truncate(task.label, LABEL_MAX);
|
|
41
|
+
const lastStep = task.steps[task.steps.length - 1];
|
|
42
|
+
const lastMsg = lastStep ? truncate(lastStep.label, MSG_MAX) : "";
|
|
43
|
+
return (_jsxs(Box, { children: [_jsx(Text, { color: isSelected ? "white" : "#444444", children: isSelected ? "▸ " : " " }), _jsx(Text, { color: color, children: icon }), _jsxs(Text, { color: isSelected ? "white" : "#888888", children: [" ", label.padEnd(LABEL_MAX)] }), _jsxs(Text, { dimColor: true, children: [" ", lastMsg] })] }, task.id));
|
|
44
|
+
}), hasBelow && _jsxs(Text, { dimColor: true, children: [" \u2193 ", tasks.length - start - MAX_LIST_ROWS, " more"] })] }));
|
|
45
|
+
}
|
|
46
|
+
function TaskDetailView({ task, width, }) {
|
|
47
|
+
const divider = TOKENS.box.horizontal.repeat(Math.max(0, width - 1));
|
|
48
|
+
const { icon, color } = taskIcon(task);
|
|
49
|
+
// Show last MAX_DETAIL_ROWS steps
|
|
50
|
+
const steps = task.steps.slice(-MAX_DETAIL_ROWS);
|
|
51
|
+
const truncatedCount = task.steps.length - steps.length;
|
|
52
|
+
return (_jsxs(Box, { flexDirection: "column", flexShrink: 0, children: [_jsx(Text, { dimColor: true, children: divider }), _jsxs(Box, { justifyContent: "space-between", children: [_jsxs(Box, { children: [_jsxs(Text, { color: color, children: [" ", icon] }), _jsxs(Text, { color: "white", children: [" ", task.label] })] }), _jsx(Text, { dimColor: true, children: "esc back " })] }), _jsxs(Text, { dimColor: true, children: [" ", divider.slice(0, Math.max(0, width - 3))] }), truncatedCount > 0 && (_jsxs(Text, { dimColor: true, children: [" \u2026 ", truncatedCount, " earlier step", truncatedCount === 1 ? "" : "s"] })), steps.map((step, i) => {
|
|
53
|
+
const isLast = i === steps.length - 1;
|
|
54
|
+
const connector = isLast ? TOKENS.tree.last : TOKENS.tree.branch;
|
|
55
|
+
const { icon: sIcon, color: sColor } = stepIcon(step);
|
|
56
|
+
const label = truncate(step.label, width - 10);
|
|
57
|
+
return (_jsxs(Box, { paddingLeft: 2, children: [_jsx(Text, { dimColor: true, children: connector }), _jsxs(Text, { color: sColor, children: [" ", sIcon] }), _jsxs(Text, { dimColor: true, children: [" ", label] })] }, step.id));
|
|
58
|
+
}), steps.length === 0 && (_jsx(Box, { paddingLeft: 4, children: _jsx(Text, { dimColor: true, children: "no events yet" }) }))] }));
|
|
59
|
+
}
|
|
60
|
+
export function TaskPanel({ tasks, mode, selectedIndex, detailTaskId, width, }) {
|
|
61
|
+
if (tasks.length === 0)
|
|
62
|
+
return _jsx(Box, {});
|
|
63
|
+
if (mode === "detail" && detailTaskId) {
|
|
64
|
+
const task = tasks.find((t) => t.id === detailTaskId);
|
|
65
|
+
if (task) {
|
|
66
|
+
return _jsx(TaskDetailView, { task: task, width: width });
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return _jsx(TaskListView, { tasks: tasks, selectedIndex: selectedIndex, width: width });
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=TaskPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskPanel.js","sourceRoot":"","sources":["../../../src/tui/components/TaskPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAgentStream.d.ts","sourceRoot":"","sources":["../../../src/tui/hooks/useAgentStream.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAGV,gBAAgB,
|
|
1
|
+
{"version":3,"file":"useAgentStream.d.ts","sourceRoot":"","sources":["../../../src/tui/hooks/useAgentStream.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAGV,gBAAgB,EAKjB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,gBAAgB,CAAC;IACxB,WAAW,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAC7C,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,aAAa,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,kEAAkE;AAClE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,wBAAgB,cAAc,IAAI,oBAAoB,CA4jBrD"}
|
|
@@ -17,6 +17,7 @@ export function useAgentStream() {
|
|
|
17
17
|
const [lastError, setLastError] = useState(null);
|
|
18
18
|
const [filesChangedCount, setFilesChangedCount] = useState(0);
|
|
19
19
|
const [reasoningTree, setReasoningTree] = useState(undefined);
|
|
20
|
+
const [backgroundTasks, setBackgroundTasks] = useState([]);
|
|
20
21
|
const currentMsgIdRef = useRef(null);
|
|
21
22
|
const tokenWindowRef = useRef([]);
|
|
22
23
|
const currentThinkingMsgIdRef = useRef(null);
|
|
@@ -24,6 +25,25 @@ export function useAgentStream() {
|
|
|
24
25
|
const lastToolCallAtRef = useRef(0);
|
|
25
26
|
const startTimeRef = useRef(null);
|
|
26
27
|
const timerRef = useRef(null);
|
|
28
|
+
// Stall detection
|
|
29
|
+
const lastEventAtRef = useRef(Date.now());
|
|
30
|
+
const [stalledMs, setStalledMs] = useState(0);
|
|
31
|
+
const statusRef = useRef("idle");
|
|
32
|
+
// Stall check: every 5s, if active and no events for >20s → show warning
|
|
33
|
+
useEffect(() => {
|
|
34
|
+
const interval = setInterval(() => {
|
|
35
|
+
const st = statusRef.current;
|
|
36
|
+
const isActive = st === "thinking" || st === "streaming" || st === "tool_running";
|
|
37
|
+
if (isActive) {
|
|
38
|
+
const ms = Date.now() - lastEventAtRef.current;
|
|
39
|
+
setStalledMs(ms > 20_000 ? ms : 0);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
setStalledMs(0);
|
|
43
|
+
}
|
|
44
|
+
}, 5000);
|
|
45
|
+
return () => clearInterval(interval);
|
|
46
|
+
}, []);
|
|
27
47
|
const startTimer = useCallback(() => {
|
|
28
48
|
startTimeRef.current = Date.now();
|
|
29
49
|
setElapsedMs(0);
|
|
@@ -136,7 +156,10 @@ export function useAgentStream() {
|
|
|
136
156
|
setMessages((prev) => [...prev, msg]);
|
|
137
157
|
}, []);
|
|
138
158
|
const startAgent = useCallback(() => {
|
|
159
|
+
statusRef.current = "thinking";
|
|
139
160
|
setStatus("thinking");
|
|
161
|
+
lastEventAtRef.current = Date.now();
|
|
162
|
+
setStalledMs(0);
|
|
140
163
|
isStreamingRef.current = false;
|
|
141
164
|
setCurrentToolName(null);
|
|
142
165
|
setCurrentToolArgs(null);
|
|
@@ -161,12 +184,16 @@ export function useAgentStream() {
|
|
|
161
184
|
setMessages((prev) => [...prev, msg]);
|
|
162
185
|
}, [startTimer]);
|
|
163
186
|
const handleEvent = useCallback((event) => {
|
|
187
|
+
// Reset stall timer on every event
|
|
188
|
+
lastEventAtRef.current = Date.now();
|
|
189
|
+
setStalledMs(0);
|
|
164
190
|
switch (event.kind) {
|
|
165
191
|
case "agent:reasoning_delta": {
|
|
166
192
|
appendThinkingLines(String(event.text ?? ""));
|
|
167
193
|
break;
|
|
168
194
|
}
|
|
169
195
|
case "agent:thinking": {
|
|
196
|
+
statusRef.current = "thinking";
|
|
170
197
|
setStatus("thinking");
|
|
171
198
|
setCurrentToolName(null);
|
|
172
199
|
setCurrentToolArgs(null);
|
|
@@ -181,6 +208,7 @@ export function useAgentStream() {
|
|
|
181
208
|
// Reset thinking message ID so post-stream thinking events create a NEW message
|
|
182
209
|
// rather than appending to the old thinking block (prevents reasoning overlap)
|
|
183
210
|
currentThinkingMsgIdRef.current = null;
|
|
211
|
+
statusRef.current = "streaming";
|
|
184
212
|
setStatus("streaming");
|
|
185
213
|
setCurrentToolName(null);
|
|
186
214
|
setCurrentToolArgs(null);
|
|
@@ -197,6 +225,7 @@ export function useAgentStream() {
|
|
|
197
225
|
}
|
|
198
226
|
case "agent:tool_call": {
|
|
199
227
|
isStreamingRef.current = false;
|
|
228
|
+
statusRef.current = "tool_running";
|
|
200
229
|
setStatus("tool_running");
|
|
201
230
|
const toolName = event.tool;
|
|
202
231
|
const args = summarizeArgs(event.input);
|
|
@@ -282,7 +311,9 @@ export function useAgentStream() {
|
|
|
282
311
|
const errMsg = event.message;
|
|
283
312
|
setLastError(errMsg);
|
|
284
313
|
stopTimer();
|
|
314
|
+
statusRef.current = "error";
|
|
285
315
|
setStatus("error");
|
|
316
|
+
setStalledMs(0);
|
|
286
317
|
setCurrentToolName(null);
|
|
287
318
|
setCurrentToolArgs(null);
|
|
288
319
|
updateCurrentMessage((msg) => ({
|
|
@@ -301,7 +332,9 @@ export function useAgentStream() {
|
|
|
301
332
|
case "agent:completed": {
|
|
302
333
|
flushPendingText();
|
|
303
334
|
stopTimer();
|
|
335
|
+
statusRef.current = "completed";
|
|
304
336
|
setStatus("completed");
|
|
337
|
+
setStalledMs(0);
|
|
305
338
|
setCurrentToolName(null);
|
|
306
339
|
setCurrentToolArgs(null);
|
|
307
340
|
const summary = event.summary;
|
|
@@ -333,7 +366,9 @@ export function useAgentStream() {
|
|
|
333
366
|
break;
|
|
334
367
|
}
|
|
335
368
|
case "agent:approval_needed": {
|
|
369
|
+
statusRef.current = "awaiting_approval";
|
|
336
370
|
setStatus("awaiting_approval");
|
|
371
|
+
setStalledMs(0);
|
|
337
372
|
const action = event.action;
|
|
338
373
|
if (action?.tool) {
|
|
339
374
|
setCurrentToolName(action.tool);
|
|
@@ -355,6 +390,39 @@ export function useAgentStream() {
|
|
|
355
390
|
appendThinkingLines(lines.join("\n"));
|
|
356
391
|
break;
|
|
357
392
|
}
|
|
393
|
+
case "agent:bg_update": {
|
|
394
|
+
const { agentId, agentLabel, eventType, message, timestamp } = event;
|
|
395
|
+
const step = {
|
|
396
|
+
id: `step-${timestamp}-${Math.random().toString(36).slice(2, 6)}`,
|
|
397
|
+
label: message.length > 60 ? message.slice(0, 57) + "…" : message,
|
|
398
|
+
type: eventType,
|
|
399
|
+
timestamp,
|
|
400
|
+
};
|
|
401
|
+
setBackgroundTasks((prev) => {
|
|
402
|
+
const existing = prev.find((t) => t.id === agentId);
|
|
403
|
+
const MAX_STEPS = 20;
|
|
404
|
+
if (existing) {
|
|
405
|
+
const newSteps = [...existing.steps, step].slice(-MAX_STEPS);
|
|
406
|
+
return prev.map((t) => t.id === agentId
|
|
407
|
+
? {
|
|
408
|
+
...t,
|
|
409
|
+
status: eventType === "error" ? "error" : "running",
|
|
410
|
+
steps: newSteps,
|
|
411
|
+
lastUpdatedAt: timestamp,
|
|
412
|
+
}
|
|
413
|
+
: t);
|
|
414
|
+
}
|
|
415
|
+
const newTask = {
|
|
416
|
+
id: agentId,
|
|
417
|
+
label: agentLabel,
|
|
418
|
+
status: eventType === "error" ? "error" : "running",
|
|
419
|
+
steps: [step],
|
|
420
|
+
lastUpdatedAt: timestamp,
|
|
421
|
+
};
|
|
422
|
+
return [...prev, newTask];
|
|
423
|
+
});
|
|
424
|
+
break;
|
|
425
|
+
}
|
|
358
426
|
default:
|
|
359
427
|
break;
|
|
360
428
|
}
|
|
@@ -362,7 +430,9 @@ export function useAgentStream() {
|
|
|
362
430
|
const interrupt = useCallback(() => {
|
|
363
431
|
flushPendingText();
|
|
364
432
|
stopTimer();
|
|
433
|
+
statusRef.current = "interrupted";
|
|
365
434
|
setStatus("interrupted");
|
|
435
|
+
setStalledMs(0);
|
|
366
436
|
setCurrentToolName(null);
|
|
367
437
|
setCurrentToolArgs(null);
|
|
368
438
|
updateCurrentMessage((msg) => ({
|
|
@@ -420,6 +490,8 @@ export function useAgentStream() {
|
|
|
420
490
|
lastError,
|
|
421
491
|
filesChangedCount,
|
|
422
492
|
reasoningTree,
|
|
493
|
+
stalledMs,
|
|
494
|
+
backgroundTasks,
|
|
423
495
|
};
|
|
424
496
|
return {
|
|
425
497
|
state,
|