@yuaone/cli 0.1.3 → 0.3.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 +29 -4
- package/dist/cli.js.map +1 -1
- package/dist/tui/App.d.ts +33 -0
- package/dist/tui/App.d.ts.map +1 -0
- package/dist/tui/App.js +244 -0
- package/dist/tui/App.js.map +1 -0
- package/dist/tui/agent-bridge.d.ts +56 -0
- package/dist/tui/agent-bridge.d.ts.map +1 -0
- package/dist/tui/agent-bridge.js +138 -0
- package/dist/tui/agent-bridge.js.map +1 -0
- package/dist/tui/components/BashOutput.d.ts +12 -0
- package/dist/tui/components/BashOutput.d.ts.map +1 -0
- package/dist/tui/components/BashOutput.js +19 -0
- package/dist/tui/components/BashOutput.js.map +1 -0
- package/dist/tui/components/CollapsibleSection.d.ts +14 -0
- package/dist/tui/components/CollapsibleSection.d.ts.map +1 -0
- package/dist/tui/components/CollapsibleSection.js +7 -0
- package/dist/tui/components/CollapsibleSection.js.map +1 -0
- package/dist/tui/components/DiffView.d.ts +11 -0
- package/dist/tui/components/DiffView.d.ts.map +1 -0
- package/dist/tui/components/DiffView.js +20 -0
- package/dist/tui/components/DiffView.js.map +1 -0
- package/dist/tui/components/FooterBar.d.ts +11 -0
- package/dist/tui/components/FooterBar.d.ts.map +1 -0
- package/dist/tui/components/FooterBar.js +14 -0
- package/dist/tui/components/FooterBar.js.map +1 -0
- package/dist/tui/components/InputBox.d.ts +24 -0
- package/dist/tui/components/InputBox.d.ts.map +1 -0
- package/dist/tui/components/InputBox.js +124 -0
- package/dist/tui/components/InputBox.js.map +1 -0
- package/dist/tui/components/MarkdownRenderer.d.ts +11 -0
- package/dist/tui/components/MarkdownRenderer.d.ts.map +1 -0
- package/dist/tui/components/MarkdownRenderer.js +118 -0
- package/dist/tui/components/MarkdownRenderer.js.map +1 -0
- package/dist/tui/components/MessageBubble.d.ts +16 -0
- package/dist/tui/components/MessageBubble.d.ts.map +1 -0
- package/dist/tui/components/MessageBubble.js +38 -0
- package/dist/tui/components/MessageBubble.js.map +1 -0
- package/dist/tui/components/MessageList.d.ts +15 -0
- package/dist/tui/components/MessageList.d.ts.map +1 -0
- package/dist/tui/components/MessageList.js +31 -0
- package/dist/tui/components/MessageList.js.map +1 -0
- package/dist/tui/components/SlashMenu.d.ts +14 -0
- package/dist/tui/components/SlashMenu.d.ts.map +1 -0
- package/dist/tui/components/SlashMenu.js +21 -0
- package/dist/tui/components/SlashMenu.js.map +1 -0
- package/dist/tui/components/Spinner.d.ts +9 -0
- package/dist/tui/components/Spinner.d.ts.map +1 -0
- package/dist/tui/components/Spinner.js +19 -0
- package/dist/tui/components/Spinner.js.map +1 -0
- package/dist/tui/components/StatusBar.d.ts +13 -0
- package/dist/tui/components/StatusBar.d.ts.map +1 -0
- package/dist/tui/components/StatusBar.js +15 -0
- package/dist/tui/components/StatusBar.js.map +1 -0
- package/dist/tui/components/ThinkingDots.d.ts +9 -0
- package/dist/tui/components/ThinkingDots.d.ts.map +1 -0
- package/dist/tui/components/ThinkingDots.js +19 -0
- package/dist/tui/components/ThinkingDots.js.map +1 -0
- package/dist/tui/components/ToolCallTree.d.ts +12 -0
- package/dist/tui/components/ToolCallTree.d.ts.map +1 -0
- package/dist/tui/components/ToolCallTree.js +45 -0
- package/dist/tui/components/ToolCallTree.js.map +1 -0
- package/dist/tui/hooks/useAgentStream.d.ts +27 -0
- package/dist/tui/hooks/useAgentStream.d.ts.map +1 -0
- package/dist/tui/hooks/useAgentStream.js +212 -0
- package/dist/tui/hooks/useAgentStream.js.map +1 -0
- package/dist/tui/hooks/useInputHistory.d.ts +17 -0
- package/dist/tui/hooks/useInputHistory.d.ts.map +1 -0
- package/dist/tui/hooks/useInputHistory.js +49 -0
- package/dist/tui/hooks/useInputHistory.js.map +1 -0
- package/dist/tui/hooks/useKeyHandler.d.ts +12 -0
- package/dist/tui/hooks/useKeyHandler.d.ts.map +1 -0
- package/dist/tui/hooks/useKeyHandler.js +20 -0
- package/dist/tui/hooks/useKeyHandler.js.map +1 -0
- package/dist/tui/hooks/useScrollPosition.d.ts +27 -0
- package/dist/tui/hooks/useScrollPosition.d.ts.map +1 -0
- package/dist/tui/hooks/useScrollPosition.js +54 -0
- package/dist/tui/hooks/useScrollPosition.js.map +1 -0
- package/dist/tui/hooks/useSlashCommands.d.ts +22 -0
- package/dist/tui/hooks/useSlashCommands.d.ts.map +1 -0
- package/dist/tui/hooks/useSlashCommands.js +61 -0
- package/dist/tui/hooks/useSlashCommands.js.map +1 -0
- package/dist/tui/hooks/useTerminalSize.d.ts +11 -0
- package/dist/tui/hooks/useTerminalSize.d.ts.map +1 -0
- package/dist/tui/hooks/useTerminalSize.js +25 -0
- package/dist/tui/hooks/useTerminalSize.js.map +1 -0
- package/dist/tui/lib/ansi.d.ts +36 -0
- package/dist/tui/lib/ansi.d.ts.map +1 -0
- package/dist/tui/lib/ansi.js +40 -0
- package/dist/tui/lib/ansi.js.map +1 -0
- package/dist/tui/lib/box-drawing.d.ts +12 -0
- package/dist/tui/lib/box-drawing.d.ts.map +1 -0
- package/dist/tui/lib/box-drawing.js +30 -0
- package/dist/tui/lib/box-drawing.js.map +1 -0
- package/dist/tui/lib/diff-formatter.d.ts +9 -0
- package/dist/tui/lib/diff-formatter.d.ts.map +1 -0
- package/dist/tui/lib/diff-formatter.js +65 -0
- package/dist/tui/lib/diff-formatter.js.map +1 -0
- package/dist/tui/lib/tokens.d.ts +56 -0
- package/dist/tui/lib/tokens.d.ts.map +1 -0
- package/dist/tui/lib/tokens.js +61 -0
- package/dist/tui/lib/tokens.js.map +1 -0
- package/dist/tui/lib/truncate.d.ts +11 -0
- package/dist/tui/lib/truncate.d.ts.map +1 -0
- package/dist/tui/lib/truncate.js +69 -0
- package/dist/tui/lib/truncate.js.map +1 -0
- package/dist/tui/lib/update-checker.d.ts +21 -0
- package/dist/tui/lib/update-checker.d.ts.map +1 -0
- package/dist/tui/lib/update-checker.js +133 -0
- package/dist/tui/lib/update-checker.js.map +1 -0
- package/dist/tui/types.d.ts +77 -0
- package/dist/tui/types.d.ts.map +1 -0
- package/dist/tui/types.js +5 -0
- package/dist/tui/types.js.map +1 -0
- package/package.json +13 -3
package/dist/cli.js
CHANGED
|
@@ -25,9 +25,10 @@ program
|
|
|
25
25
|
.name("yuan")
|
|
26
26
|
.description("YUAN — Autonomous Coding Agent")
|
|
27
27
|
.version("0.1.0");
|
|
28
|
-
// ─── Default: Interactive mode ───
|
|
28
|
+
// ─── Default: Interactive mode (TUI) ───
|
|
29
29
|
program
|
|
30
|
-
.
|
|
30
|
+
.option("--classic", "Use classic readline REPL instead of full-screen TUI")
|
|
31
|
+
.action(async (options) => {
|
|
31
32
|
const configManager = new ConfigManager();
|
|
32
33
|
const sessionManager = new SessionManager();
|
|
33
34
|
if (!configManager.isConfigured()) {
|
|
@@ -36,8 +37,32 @@ program
|
|
|
36
37
|
await configManager.interactiveSetup();
|
|
37
38
|
console.log();
|
|
38
39
|
}
|
|
39
|
-
|
|
40
|
-
|
|
40
|
+
// Use classic mode if requested or not a TTY
|
|
41
|
+
if (options.classic || !process.stdout.isTTY) {
|
|
42
|
+
const session = new InteractiveSession(renderer, sessionManager, configManager);
|
|
43
|
+
await session.start();
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
// Full-screen TUI mode (default)
|
|
47
|
+
const { launchTUI } = await import("./tui/App.js");
|
|
48
|
+
const { AgentBridge } = await import("./tui/agent-bridge.js");
|
|
49
|
+
const config = configManager.get();
|
|
50
|
+
const bridge = new AgentBridge({
|
|
51
|
+
provider: config.provider || "openai",
|
|
52
|
+
apiKey: config.apiKey,
|
|
53
|
+
model: config.model,
|
|
54
|
+
baseUrl: config.baseUrl,
|
|
55
|
+
workDir: process.cwd(),
|
|
56
|
+
});
|
|
57
|
+
launchTUI({
|
|
58
|
+
version: "0.1.3",
|
|
59
|
+
model: configManager.getModel(),
|
|
60
|
+
provider: config.provider || "openai",
|
|
61
|
+
bridge,
|
|
62
|
+
onExit: () => {
|
|
63
|
+
process.exit(0);
|
|
64
|
+
},
|
|
65
|
+
});
|
|
41
66
|
});
|
|
42
67
|
// ─── yuan code <prompt> / yuan run <prompt> ───
|
|
43
68
|
const oneshotAction = async (prompt, options) => {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEnD,MAAM,QAAQ,GAAG,IAAI,gBAAgB,EAAE,CAAC;AAExC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,gCAAgC,CAAC;KAC7C,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* YUAN TUI — Root App component.
|
|
3
|
+
* Fully wired to AgentBridge for real LLM-powered agent execution.
|
|
4
|
+
*
|
|
5
|
+
* Layout (top to bottom):
|
|
6
|
+
* StatusBar (1 row)
|
|
7
|
+
* MessageList (dynamic height — shrinks when SlashMenu opens)
|
|
8
|
+
* SlashMenu (0 or N rows — pushes input down, squeezes messages up)
|
|
9
|
+
* InputBox (1 row)
|
|
10
|
+
* FooterBar (1 row)
|
|
11
|
+
*/
|
|
12
|
+
import { AgentBridge } from "./agent-bridge.js";
|
|
13
|
+
export interface AppProps {
|
|
14
|
+
version: string;
|
|
15
|
+
model: string;
|
|
16
|
+
provider: string;
|
|
17
|
+
bridge: AgentBridge;
|
|
18
|
+
onExit?: () => void;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Public API to control the TUI from outside the React tree.
|
|
22
|
+
*/
|
|
23
|
+
export interface TUIController {
|
|
24
|
+
unmount: () => void;
|
|
25
|
+
bridge: AgentBridge;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Launch the TUI. Returns a controller.
|
|
29
|
+
*/
|
|
30
|
+
export declare function launchTUI(props: Omit<AppProps, "bridge"> & {
|
|
31
|
+
bridge: AgentBridge;
|
|
32
|
+
}): TUIController;
|
|
33
|
+
//# sourceMappingURL=App.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/tui/App.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAcH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIhD,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAkSD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,GAAG,aAAa,CAuBlG"}
|
package/dist/tui/App.js
ADDED
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* YUAN TUI — Root App component.
|
|
4
|
+
* Fully wired to AgentBridge for real LLM-powered agent execution.
|
|
5
|
+
*
|
|
6
|
+
* Layout (top to bottom):
|
|
7
|
+
* StatusBar (1 row)
|
|
8
|
+
* MessageList (dynamic height — shrinks when SlashMenu opens)
|
|
9
|
+
* SlashMenu (0 or N rows — pushes input down, squeezes messages up)
|
|
10
|
+
* InputBox (1 row)
|
|
11
|
+
* FooterBar (1 row)
|
|
12
|
+
*/
|
|
13
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
14
|
+
import { render, Box, useApp } from "ink";
|
|
15
|
+
import { enterTUI, exitTUI } from "./lib/ansi.js";
|
|
16
|
+
import { useTerminalSize } from "./hooks/useTerminalSize.js";
|
|
17
|
+
import { useAgentStream } from "./hooks/useAgentStream.js";
|
|
18
|
+
import { useKeyHandler } from "./hooks/useKeyHandler.js";
|
|
19
|
+
import { StatusBar } from "./components/StatusBar.js";
|
|
20
|
+
import { MessageList } from "./components/MessageList.js";
|
|
21
|
+
import { InputBox } from "./components/InputBox.js";
|
|
22
|
+
import { FooterBar } from "./components/FooterBar.js";
|
|
23
|
+
import { SlashMenu } from "./components/SlashMenu.js";
|
|
24
|
+
import { useSlashCommands } from "./hooks/useSlashCommands.js";
|
|
25
|
+
import { checkForUpdate, loadSettings, saveSettings } from "./lib/update-checker.js";
|
|
26
|
+
function App({ version, model, provider, bridge, onExit, }) {
|
|
27
|
+
const { exit } = useApp();
|
|
28
|
+
const { columns, rows } = useTerminalSize();
|
|
29
|
+
const agentStream = useAgentStream();
|
|
30
|
+
const bridgeRef = useRef(bridge);
|
|
31
|
+
bridgeRef.current = bridge;
|
|
32
|
+
// Stable ref to agentStream.handleEvent to avoid useEffect re-runs
|
|
33
|
+
const handleEventRef = useRef(agentStream.handleEvent);
|
|
34
|
+
handleEventRef.current = agentStream.handleEvent;
|
|
35
|
+
const [tokensPerSec, setTokensPerSec] = useState();
|
|
36
|
+
// Slash command state
|
|
37
|
+
const [slashState, slashActions] = useSlashCommands();
|
|
38
|
+
// Wire bridge events to useAgentStream — runs once on mount
|
|
39
|
+
useEffect(() => {
|
|
40
|
+
bridge.onEvent((event) => {
|
|
41
|
+
handleEventRef.current(event);
|
|
42
|
+
if (event.kind === "agent:token_usage") {
|
|
43
|
+
const input = event.input;
|
|
44
|
+
const output = event.output;
|
|
45
|
+
setTokensPerSec(input + output);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
bridge.onTermination(() => {
|
|
49
|
+
// useAgentStream handles this via agent:completed event
|
|
50
|
+
});
|
|
51
|
+
}, [bridge]);
|
|
52
|
+
// Message submission
|
|
53
|
+
const handleSubmit = useCallback((value) => {
|
|
54
|
+
agentStream.addUserMessage(value);
|
|
55
|
+
agentStream.startAgent();
|
|
56
|
+
setTokensPerSec(undefined);
|
|
57
|
+
bridgeRef.current.sendMessage(value).catch((err) => {
|
|
58
|
+
agentStream.handleEvent({
|
|
59
|
+
kind: "agent:error",
|
|
60
|
+
message: err.message,
|
|
61
|
+
retryable: false,
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
}, [agentStream]);
|
|
65
|
+
// Interruption
|
|
66
|
+
const handleInterrupt = useCallback(() => {
|
|
67
|
+
bridgeRef.current.interrupt();
|
|
68
|
+
agentStream.interrupt();
|
|
69
|
+
}, [agentStream]);
|
|
70
|
+
// Slash commands
|
|
71
|
+
const handleSlashCommand = useCallback((cmd) => {
|
|
72
|
+
slashActions.close();
|
|
73
|
+
if (cmd === "/exit" || cmd === "/quit" || cmd === "/q") {
|
|
74
|
+
onExit?.();
|
|
75
|
+
exit();
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
if (cmd === "/clear") {
|
|
79
|
+
agentStream.clearMessages();
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
if (cmd === "/help" || cmd === "/h") {
|
|
83
|
+
agentStream.addSystemMessage([
|
|
84
|
+
"Available commands:",
|
|
85
|
+
" /help — Show this help",
|
|
86
|
+
" /status — Model, tokens, session info",
|
|
87
|
+
" /clear — Clear conversation",
|
|
88
|
+
" /model — Change model",
|
|
89
|
+
" /config — Show configuration",
|
|
90
|
+
" /session — Session info",
|
|
91
|
+
" /diff — Show file changes",
|
|
92
|
+
" /undo — Undo last change",
|
|
93
|
+
" /settings — Auto-update preferences",
|
|
94
|
+
" /exit — Exit YUAN",
|
|
95
|
+
"",
|
|
96
|
+
" yuaone.com",
|
|
97
|
+
].join("\n"));
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
if (cmd === "/status") {
|
|
101
|
+
const s = agentStream.state;
|
|
102
|
+
const files = bridgeRef.current.filesChanged;
|
|
103
|
+
agentStream.addSystemMessage([
|
|
104
|
+
`YUAN v${version}`,
|
|
105
|
+
` Provider : ${provider}`,
|
|
106
|
+
` Model : ${model}`,
|
|
107
|
+
` Status : ${s.status}`,
|
|
108
|
+
` Messages : ${s.messages.length}`,
|
|
109
|
+
` Tokens : ${s.totalTokensUsed.toLocaleString()} total`,
|
|
110
|
+
s.tokensPerSecond > 0 ? ` Speed : ${s.tokensPerSecond} tok/s` : "",
|
|
111
|
+
` Files : ${files.length} changed`,
|
|
112
|
+
"",
|
|
113
|
+
" yuaone.com",
|
|
114
|
+
].filter(Boolean).join("\n"));
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
if (cmd === "/diff") {
|
|
118
|
+
const files = bridgeRef.current.filesChanged;
|
|
119
|
+
const content = files.length > 0
|
|
120
|
+
? `Changed files:\n${files.map((f) => ` ${f}`).join("\n")}`
|
|
121
|
+
: "No files changed in this session.";
|
|
122
|
+
agentStream.addSystemMessage(content);
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
if (cmd === "/settings") {
|
|
126
|
+
const settings = loadSettings();
|
|
127
|
+
const current = settings.autoUpdate;
|
|
128
|
+
const options = ["prompt", "auto", "never"];
|
|
129
|
+
const currentIdx = options.indexOf(current);
|
|
130
|
+
// Cycle to next option
|
|
131
|
+
const nextIdx = (currentIdx + 1) % options.length;
|
|
132
|
+
const next = options[nextIdx];
|
|
133
|
+
settings.autoUpdate = next;
|
|
134
|
+
saveSettings(settings);
|
|
135
|
+
const labels = {
|
|
136
|
+
prompt: "Ask before updating",
|
|
137
|
+
auto: "Auto-update on launch",
|
|
138
|
+
never: "Never check for updates",
|
|
139
|
+
};
|
|
140
|
+
agentStream.addSystemMessage(`Auto-update: ${labels[next]}\n` +
|
|
141
|
+
` 1. prompt — ${current === "prompt" ? "●" : "○"} Ask before updating\n` +
|
|
142
|
+
` 2. auto — ${current === "auto" ? "●" : "○"} Auto-update on launch\n` +
|
|
143
|
+
` 3. never — ${current === "never" ? "●" : "○"} Never check\n` +
|
|
144
|
+
`\n Changed to: ${labels[next]} (run /settings again to cycle)`);
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
agentStream.addSystemMessage(`Unknown command: ${cmd}. Type /help for available commands.`);
|
|
148
|
+
}, [agentStream, onExit, exit, slashActions]);
|
|
149
|
+
// Check for updates on mount (non-blocking)
|
|
150
|
+
useEffect(() => {
|
|
151
|
+
checkForUpdate(version).then((info) => {
|
|
152
|
+
if (info?.hasUpdate) {
|
|
153
|
+
const settings = loadSettings();
|
|
154
|
+
if (settings.autoUpdate === "auto") {
|
|
155
|
+
agentStream.addSystemMessage(`Updating YUAN ${info.currentVersion} → ${info.latestVersion}...`);
|
|
156
|
+
import("./lib/update-checker.js").then(({ performUpdate }) => {
|
|
157
|
+
performUpdate().then((ok) => {
|
|
158
|
+
agentStream.addSystemMessage(ok
|
|
159
|
+
? `Updated to ${info.latestVersion}. Restart to apply.`
|
|
160
|
+
: "Update failed. Run: npm i -g @yuaone/cli@latest");
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
else if (settings.autoUpdate === "prompt") {
|
|
165
|
+
agentStream.addSystemMessage(`Update available: ${info.currentVersion} → ${info.latestVersion}\n` +
|
|
166
|
+
` Run: npm i -g @yuaone/cli@latest\n` +
|
|
167
|
+
` Or: /settings to enable auto-update`);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}).catch(() => {
|
|
171
|
+
// Non-critical — silently ignore
|
|
172
|
+
});
|
|
173
|
+
}, []); // eslint-disable-line react-hooks/exhaustive-deps
|
|
174
|
+
// Input change → open/close slash menu
|
|
175
|
+
const handleInputChange = useCallback((value) => {
|
|
176
|
+
if (value.startsWith("/")) {
|
|
177
|
+
slashActions.filter(value);
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
slashActions.close();
|
|
181
|
+
}
|
|
182
|
+
}, [slashActions]);
|
|
183
|
+
// Slash menu navigation
|
|
184
|
+
const handleSlashNavigate = useCallback((direction) => {
|
|
185
|
+
if (direction === "up") {
|
|
186
|
+
slashActions.selectPrev();
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
slashActions.selectNext();
|
|
190
|
+
}
|
|
191
|
+
}, [slashActions]);
|
|
192
|
+
// Slash menu select → return command name
|
|
193
|
+
const handleSlashSelect = useCallback(() => {
|
|
194
|
+
const selected = slashActions.getSelected();
|
|
195
|
+
return selected?.name ?? null;
|
|
196
|
+
}, [slashActions]);
|
|
197
|
+
// Double Ctrl+C to exit — first press shows hint, second press exits.
|
|
198
|
+
// This allows terminal's native Ctrl+C copy to work during text selection.
|
|
199
|
+
const ctrlCTimerRef = useRef(0);
|
|
200
|
+
useKeyHandler({
|
|
201
|
+
onExit: () => {
|
|
202
|
+
const now = Date.now();
|
|
203
|
+
if (now - ctrlCTimerRef.current < 2000) {
|
|
204
|
+
// Double press within 2s → exit
|
|
205
|
+
onExit?.();
|
|
206
|
+
exit();
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
ctrlCTimerRef.current = now;
|
|
210
|
+
agentStream.addSystemMessage("Press Ctrl+C again to exit.");
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
});
|
|
214
|
+
const isRunning = agentStream.state.status !== "idle";
|
|
215
|
+
// Calculate how many rows the slash menu takes
|
|
216
|
+
const slashMenuRows = slashState.isOpen
|
|
217
|
+
? Math.min(slashState.filtered.length, 8) + 2 // items + top/bottom border
|
|
218
|
+
: 0;
|
|
219
|
+
// Content area height = total rows - status(1) - slashMenu(N) - input(1) - footer(1) - padding(2)
|
|
220
|
+
const contentHeight = Math.max(3, rows - 5 - slashMenuRows);
|
|
221
|
+
const messages = agentStream.state.messages;
|
|
222
|
+
return (_jsxs(Box, { flexDirection: "column", width: columns, height: rows, children: [_jsx(StatusBar, { version: version, model: model, provider: provider, tokensPerSec: agentStream.state.tokensPerSecond || tokensPerSec, isRunning: isRunning }), _jsx(MessageList, { messages: messages, isThinking: isRunning, maxHeight: contentHeight }), slashState.isOpen && (_jsx(SlashMenu, { commands: slashState.filtered, selectedIndex: slashState.selectedIndex, isOpen: slashState.isOpen, width: columns })), _jsx(InputBox, { onSubmit: handleSubmit, onInterrupt: handleInterrupt, onSlashCommand: handleSlashCommand, onInputChange: handleInputChange, slashMenuOpen: slashState.isOpen, onSlashNavigate: handleSlashNavigate, onSlashSelect: handleSlashSelect, onSlashClose: slashActions.close, isRunning: isRunning }), _jsx(FooterBar, { isRunning: isRunning, slashMenuOpen: slashState.isOpen })] }));
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Launch the TUI. Returns a controller.
|
|
226
|
+
*/
|
|
227
|
+
export function launchTUI(props) {
|
|
228
|
+
enterTUI();
|
|
229
|
+
const { unmount } = render(_jsx(App, { ...props }), { exitOnCtrlC: false });
|
|
230
|
+
const cleanup = () => {
|
|
231
|
+
exitTUI();
|
|
232
|
+
unmount();
|
|
233
|
+
};
|
|
234
|
+
process.on("exit", cleanup);
|
|
235
|
+
process.on("SIGINT", () => {
|
|
236
|
+
cleanup();
|
|
237
|
+
process.exit(0);
|
|
238
|
+
});
|
|
239
|
+
return {
|
|
240
|
+
unmount: cleanup,
|
|
241
|
+
bridge: props.bridge,
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=App.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/tui/App.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agent-bridge.ts — Bridges @yuaone/core AgentLoop to the TUI.
|
|
3
|
+
*
|
|
4
|
+
* This is the non-React glue layer that:
|
|
5
|
+
* 1. Creates AgentLoop with proper config
|
|
6
|
+
* 2. Subscribes to AgentLoop events
|
|
7
|
+
* 3. Forwards events to a callback (which the TUI App sets)
|
|
8
|
+
* 4. Handles interruption (Esc → hard interrupt)
|
|
9
|
+
* 5. Handles approval flow
|
|
10
|
+
*/
|
|
11
|
+
import { type AgentEvent, type ApprovalRequest, type ApprovalResponse } from "@yuaone/core";
|
|
12
|
+
export interface AgentBridgeConfig {
|
|
13
|
+
provider: string;
|
|
14
|
+
apiKey: string;
|
|
15
|
+
model?: string;
|
|
16
|
+
baseUrl?: string;
|
|
17
|
+
workDir: string;
|
|
18
|
+
}
|
|
19
|
+
export type EventCallback = (event: AgentEvent) => void;
|
|
20
|
+
export type ApprovalCallback = (request: ApprovalRequest) => Promise<ApprovalResponse>;
|
|
21
|
+
export type TerminationCallback = (result: {
|
|
22
|
+
reason: string;
|
|
23
|
+
[key: string]: unknown;
|
|
24
|
+
}) => void;
|
|
25
|
+
export declare class AgentBridge {
|
|
26
|
+
private config;
|
|
27
|
+
private loop;
|
|
28
|
+
private eventCallback;
|
|
29
|
+
private approvalCallback;
|
|
30
|
+
private terminationCallback;
|
|
31
|
+
private changedFiles;
|
|
32
|
+
private isProcessing;
|
|
33
|
+
constructor(config: AgentBridgeConfig);
|
|
34
|
+
/** Set the event callback (called for every AgentEvent) */
|
|
35
|
+
onEvent(cb: EventCallback): void;
|
|
36
|
+
/** Set the approval callback */
|
|
37
|
+
onApproval(cb: ApprovalCallback): void;
|
|
38
|
+
/** Set the termination callback (called when run() completes) */
|
|
39
|
+
onTermination(cb: TerminationCallback): void;
|
|
40
|
+
/** Whether the agent is currently processing */
|
|
41
|
+
get running(): boolean;
|
|
42
|
+
/** Get list of changed files in this session */
|
|
43
|
+
get filesChanged(): string[];
|
|
44
|
+
/**
|
|
45
|
+
* Send a message to the agent. Creates a new AgentLoop each time
|
|
46
|
+
* (matching the interactive.ts pattern — stateless per request).
|
|
47
|
+
*/
|
|
48
|
+
sendMessage(message: string): Promise<void>;
|
|
49
|
+
/** Interrupt the current agent execution (hard stop) */
|
|
50
|
+
interrupt(): void;
|
|
51
|
+
/** Handle approval requests by delegating to the callback */
|
|
52
|
+
private handleApproval;
|
|
53
|
+
/** Reset file tracking */
|
|
54
|
+
resetChangedFiles(): void;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=agent-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-bridge.d.ts","sourceRoot":"","sources":["../../src/tui/agent-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAIL,KAAK,UAAU,EAEf,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACtB,MAAM,cAAc,CAAC;AAGtB,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;AACxD,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;AACvF,MAAM,MAAM,mBAAmB,GAAG,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,KAAK,IAAI,CAAC;AAE/F,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,IAAI,CAA0B;IACtC,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,mBAAmB,CAAoC;IAC/D,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,YAAY,CAAS;gBAEjB,MAAM,EAAE,iBAAiB;IAIrC,2DAA2D;IAC3D,OAAO,CAAC,EAAE,EAAE,aAAa,GAAG,IAAI;IAIhC,gCAAgC;IAChC,UAAU,CAAC,EAAE,EAAE,gBAAgB,GAAG,IAAI;IAItC,iEAAiE;IACjE,aAAa,CAAC,EAAE,EAAE,mBAAmB,GAAG,IAAI;IAI5C,gDAAgD;IAChD,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,gDAAgD;IAChD,IAAI,YAAY,IAAI,MAAM,EAAE,CAE3B;IAED;;;OAGG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4EjD,wDAAwD;IACxD,SAAS,IAAI,IAAI;IASjB,6DAA6D;YAC/C,cAAc;IAQ5B,0BAA0B;IAC1B,iBAAiB,IAAI,IAAI;CAG1B"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agent-bridge.ts — Bridges @yuaone/core AgentLoop to the TUI.
|
|
3
|
+
*
|
|
4
|
+
* This is the non-React glue layer that:
|
|
5
|
+
* 1. Creates AgentLoop with proper config
|
|
6
|
+
* 2. Subscribes to AgentLoop events
|
|
7
|
+
* 3. Forwards events to a callback (which the TUI App sets)
|
|
8
|
+
* 4. Handles interruption (Esc → hard interrupt)
|
|
9
|
+
* 5. Handles approval flow
|
|
10
|
+
*/
|
|
11
|
+
import { AgentLoop, DEFAULT_LOOP_CONFIG, } from "@yuaone/core";
|
|
12
|
+
import { createDefaultRegistry } from "@yuaone/tools";
|
|
13
|
+
export class AgentBridge {
|
|
14
|
+
config;
|
|
15
|
+
loop = null;
|
|
16
|
+
eventCallback = null;
|
|
17
|
+
approvalCallback = null;
|
|
18
|
+
terminationCallback = null;
|
|
19
|
+
changedFiles = [];
|
|
20
|
+
isProcessing = false;
|
|
21
|
+
constructor(config) {
|
|
22
|
+
this.config = config;
|
|
23
|
+
}
|
|
24
|
+
/** Set the event callback (called for every AgentEvent) */
|
|
25
|
+
onEvent(cb) {
|
|
26
|
+
this.eventCallback = cb;
|
|
27
|
+
}
|
|
28
|
+
/** Set the approval callback */
|
|
29
|
+
onApproval(cb) {
|
|
30
|
+
this.approvalCallback = cb;
|
|
31
|
+
}
|
|
32
|
+
/** Set the termination callback (called when run() completes) */
|
|
33
|
+
onTermination(cb) {
|
|
34
|
+
this.terminationCallback = cb;
|
|
35
|
+
}
|
|
36
|
+
/** Whether the agent is currently processing */
|
|
37
|
+
get running() {
|
|
38
|
+
return this.isProcessing;
|
|
39
|
+
}
|
|
40
|
+
/** Get list of changed files in this session */
|
|
41
|
+
get filesChanged() {
|
|
42
|
+
return [...this.changedFiles];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Send a message to the agent. Creates a new AgentLoop each time
|
|
46
|
+
* (matching the interactive.ts pattern — stateless per request).
|
|
47
|
+
*/
|
|
48
|
+
async sendMessage(message) {
|
|
49
|
+
if (this.isProcessing)
|
|
50
|
+
return;
|
|
51
|
+
this.isProcessing = true;
|
|
52
|
+
const { provider, apiKey, model, baseUrl, workDir } = this.config;
|
|
53
|
+
// Build BYOK config
|
|
54
|
+
const byokConfig = {
|
|
55
|
+
provider: provider,
|
|
56
|
+
apiKey,
|
|
57
|
+
model,
|
|
58
|
+
baseUrl,
|
|
59
|
+
};
|
|
60
|
+
// Create tool registry
|
|
61
|
+
const registry = createDefaultRegistry();
|
|
62
|
+
const toolExecutor = registry.toExecutor(workDir);
|
|
63
|
+
// Build agent config
|
|
64
|
+
const agentConfig = {
|
|
65
|
+
byok: byokConfig,
|
|
66
|
+
loop: {
|
|
67
|
+
model: "coding",
|
|
68
|
+
maxIterations: DEFAULT_LOOP_CONFIG.maxIterations,
|
|
69
|
+
maxTokensPerIteration: DEFAULT_LOOP_CONFIG.maxTokensPerIteration,
|
|
70
|
+
totalTokenBudget: DEFAULT_LOOP_CONFIG.totalTokenBudget,
|
|
71
|
+
tools: toolExecutor.definitions,
|
|
72
|
+
systemPrompt: "You are YUAN, an autonomous coding agent. " +
|
|
73
|
+
"You have access to tools for reading, writing, editing files, running shell commands, and searching code. " +
|
|
74
|
+
"Complete the user's coding tasks efficiently and correctly.",
|
|
75
|
+
projectPath: workDir,
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
// Create AgentLoop
|
|
79
|
+
const loop = new AgentLoop({
|
|
80
|
+
config: agentConfig,
|
|
81
|
+
toolExecutor,
|
|
82
|
+
governorConfig: { planTier: "LOCAL" },
|
|
83
|
+
approvalHandler: (request) => this.handleApproval(request),
|
|
84
|
+
autoFixConfig: { maxRetries: 3, autoLint: true, autoBuild: true, autoTest: false },
|
|
85
|
+
});
|
|
86
|
+
this.loop = loop;
|
|
87
|
+
// Subscribe to events
|
|
88
|
+
loop.on("event", (event) => {
|
|
89
|
+
// Track file changes
|
|
90
|
+
if (event.kind === "agent:file_change") {
|
|
91
|
+
if (!this.changedFiles.includes(event.path)) {
|
|
92
|
+
this.changedFiles.push(event.path);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Forward to TUI
|
|
96
|
+
this.eventCallback?.(event);
|
|
97
|
+
});
|
|
98
|
+
try {
|
|
99
|
+
const result = await loop.run(message);
|
|
100
|
+
this.terminationCallback?.(result);
|
|
101
|
+
}
|
|
102
|
+
catch (err) {
|
|
103
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
104
|
+
this.eventCallback?.({
|
|
105
|
+
kind: "agent:error",
|
|
106
|
+
message: errMsg,
|
|
107
|
+
retryable: false,
|
|
108
|
+
});
|
|
109
|
+
this.terminationCallback?.({ reason: "ERROR", error: errMsg });
|
|
110
|
+
}
|
|
111
|
+
finally {
|
|
112
|
+
this.isProcessing = false;
|
|
113
|
+
this.loop = null;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/** Interrupt the current agent execution (hard stop) */
|
|
117
|
+
interrupt() {
|
|
118
|
+
if (this.loop && this.isProcessing) {
|
|
119
|
+
this.loop.interrupt({
|
|
120
|
+
type: "hard",
|
|
121
|
+
source: "cli",
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/** Handle approval requests by delegating to the callback */
|
|
126
|
+
async handleApproval(request) {
|
|
127
|
+
if (this.approvalCallback) {
|
|
128
|
+
return this.approvalCallback(request);
|
|
129
|
+
}
|
|
130
|
+
// Default: auto-approve (can be changed via config)
|
|
131
|
+
return "approve";
|
|
132
|
+
}
|
|
133
|
+
/** Reset file tracking */
|
|
134
|
+
resetChangedFiles() {
|
|
135
|
+
this.changedFiles = [];
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=agent-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-bridge.js","sourceRoot":"","sources":["../../src/tui/agent-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,SAAS,EACT,mBAAmB,GAMpB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AActD,MAAM,OAAO,WAAW;IACd,MAAM,CAAoB;IAC1B,IAAI,GAAqB,IAAI,CAAC;IAC9B,aAAa,GAAyB,IAAI,CAAC;IAC3C,gBAAgB,GAA4B,IAAI,CAAC;IACjD,mBAAmB,GAA+B,IAAI,CAAC;IACvD,YAAY,GAAa,EAAE,CAAC;IAC5B,YAAY,GAAG,KAAK,CAAC;IAE7B,YAAY,MAAyB;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,2DAA2D;IAC3D,OAAO,CAAC,EAAiB;QACvB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;IAC1B,CAAC;IAED,gCAAgC;IAChC,UAAU,CAAC,EAAoB;QAC7B,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;IAC7B,CAAC;IAED,iEAAiE;IACjE,aAAa,CAAC,EAAuB;QACnC,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;IAChC,CAAC;IAED,gDAAgD;IAChD,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,gDAAgD;IAChD,IAAI,YAAY;QACd,OAAO,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,WAAW,CAAC,OAAe;QAC/B,IAAI,IAAI,CAAC,YAAY;YAAE,OAAO;QAC9B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAEzB,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QAElE,oBAAoB;QACpB,MAAM,UAAU,GAAe;YAC7B,QAAQ,EAAE,QAA6C;YACvD,MAAM;YACN,KAAK;YACL,OAAO;SACR,CAAC;QAEF,uBAAuB;QACvB,MAAM,QAAQ,GAAG,qBAAqB,EAAE,CAAC;QACzC,MAAM,YAAY,GAAG,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAElD,qBAAqB;QACrB,MAAM,WAAW,GAAgB;YAC/B,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE;gBACJ,KAAK,EAAE,QAAQ;gBACf,aAAa,EAAE,mBAAmB,CAAC,aAAa;gBAChD,qBAAqB,EAAE,mBAAmB,CAAC,qBAAqB;gBAChE,gBAAgB,EAAE,mBAAmB,CAAC,gBAAgB;gBACtD,KAAK,EAAE,YAAY,CAAC,WAAW;gBAC/B,YAAY,EACV,4CAA4C;oBAC5C,4GAA4G;oBAC5G,6DAA6D;gBAC/D,WAAW,EAAE,OAAO;aACrB;SACF,CAAC;QAEF,mBAAmB;QACnB,MAAM,IAAI,GAAG,IAAI,SAAS,CAAC;YACzB,MAAM,EAAE,WAAW;YACnB,YAAY;YACZ,cAAc,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE;YACrC,eAAe,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;YAC1D,aAAa,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;SACnF,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,sBAAsB;QACtB,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAiB,EAAE,EAAE;YACrC,qBAAqB;YACrB,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;gBACvC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC5C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC;YAED,iBAAiB;YACjB,IAAI,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACvC,IAAI,CAAC,mBAAmB,EAAE,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChE,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,IAAI,EAAE,aAAa;gBACnB,OAAO,EAAE,MAAM;gBACf,SAAS,EAAE,KAAK;aACjB,CAAC,CAAC;YACH,IAAI,CAAC,mBAAmB,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACjE,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACnB,CAAC;IACH,CAAC;IAED,wDAAwD;IACxD,SAAS;QACP,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;gBAClB,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,KAAK;aACd,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,6DAA6D;IACrD,KAAK,CAAC,cAAc,CAAC,OAAwB;QACnD,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACxC,CAAC;QACD,oDAAoD;QACpD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,0BAA0B;IAC1B,iBAAiB;QACf,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;IACzB,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BashOutput — shell command output in a bordered box.
|
|
3
|
+
*/
|
|
4
|
+
import React from "react";
|
|
5
|
+
export interface BashOutputProps {
|
|
6
|
+
command: string;
|
|
7
|
+
output: string;
|
|
8
|
+
exitCode?: number;
|
|
9
|
+
width: number;
|
|
10
|
+
}
|
|
11
|
+
export declare function BashOutput({ command: _command, output, exitCode, width, }: BashOutputProps): React.JSX.Element;
|
|
12
|
+
//# sourceMappingURL=BashOutput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BashOutput.d.ts","sourceRoot":"","sources":["../../../src/tui/components/BashOutput.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,UAAU,CAAC,EACzB,OAAO,EAAE,QAAQ,EACjB,MAAM,EACN,QAAQ,EACR,KAAK,GACN,EAAE,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAkCrC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
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
|
+
import { truncate } from "../lib/truncate.js";
|
|
5
|
+
export function BashOutput({ command: _command, output, exitCode, width, }) {
|
|
6
|
+
const boxWidth = Math.max(20, width - 6);
|
|
7
|
+
const contentWidth = boxWidth - 4; // borders + padding
|
|
8
|
+
const lines = output.split("\n");
|
|
9
|
+
const maxLines = 20;
|
|
10
|
+
const truncatedLines = lines.length > maxLines;
|
|
11
|
+
const visibleLines = truncatedLines ? lines.slice(0, maxLines) : lines;
|
|
12
|
+
const headerColor = exitCode != null && exitCode !== 0 ? "red" : undefined;
|
|
13
|
+
const headerText = exitCode != null && exitCode !== 0
|
|
14
|
+
? `output (exit ${exitCode})`
|
|
15
|
+
: "output";
|
|
16
|
+
const headerLine = `${TOKENS.box.topLeft}${TOKENS.box.horizontal} ${headerText} ${TOKENS.box.horizontal.repeat(Math.max(0, boxWidth - headerText.length - 5))}${TOKENS.box.topRight}`;
|
|
17
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { dimColor: true, color: headerColor, children: headerLine }), visibleLines.map((line, i) => (_jsxs(Box, { children: [_jsxs(Text, { dimColor: true, children: [TOKENS.box.vertical, " "] }), _jsx(Text, { children: truncate(line, contentWidth) })] }, i))), truncatedLines && (_jsx(Box, { children: _jsxs(Text, { dimColor: true, children: [TOKENS.box.vertical, " ... (", lines.length - maxLines, " more lines)"] }) })), _jsxs(Text, { dimColor: true, children: [TOKENS.box.bottomLeft, TOKENS.box.horizontal.repeat(boxWidth - 2), TOKENS.box.bottomRight] })] }));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=BashOutput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BashOutput.js","sourceRoot":"","sources":["../../../src/tui/components/BashOutput.tsx"],"names":[],"mappings":";AAKA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAS9C,MAAM,UAAU,UAAU,CAAC,EACzB,OAAO,EAAE,QAAQ,EACjB,MAAM,EACN,QAAQ,EACR,KAAK,GACW;IAChB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IACzC,MAAM,YAAY,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,oBAAoB;IACvD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,EAAE,CAAC;IACpB,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC;IAC/C,MAAM,YAAY,GAAG,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAEvE,MAAM,WAAW,GAAG,QAAQ,IAAI,IAAI,IAAI,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3E,MAAM,UAAU,GAAG,QAAQ,IAAI,IAAI,IAAI,QAAQ,KAAK,CAAC;QACnD,CAAC,CAAC,gBAAgB,QAAQ,GAAG;QAC7B,CAAC,CAAC,QAAQ,CAAC;IAEb,MAAM,UAAU,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,IAAI,UAAU,IAAI,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IAEtL,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,IAAI,IAAC,QAAQ,QAAC,KAAK,EAAE,WAAW,YAAG,UAAU,GAAQ,EACrD,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAC7B,MAAC,GAAG,eACF,MAAC,IAAI,IAAC,QAAQ,mBAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,UAAU,EAC7C,KAAC,IAAI,cAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,GAAQ,KAFnC,CAAC,CAGL,CACP,CAAC,EACD,cAAc,IAAI,CACjB,KAAC,GAAG,cACF,MAAC,IAAI,IAAC,QAAQ,mBAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,aAAS,KAAK,CAAC,MAAM,GAAG,QAAQ,oBAAoB,GACnF,CACP,EACD,MAAC,IAAI,IAAC,QAAQ,mBACX,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,IACrF,IACH,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CollapsibleSection — generic expand/collapse wrapper.
|
|
3
|
+
* Used by ToolCallTree for file reads, diffs, bash output.
|
|
4
|
+
*/
|
|
5
|
+
import React from "react";
|
|
6
|
+
export interface CollapsibleSectionProps {
|
|
7
|
+
isExpanded: boolean;
|
|
8
|
+
onToggle: () => void;
|
|
9
|
+
collapsedSummary: string;
|
|
10
|
+
expandHint?: string;
|
|
11
|
+
children: React.ReactNode;
|
|
12
|
+
}
|
|
13
|
+
export declare function CollapsibleSection({ isExpanded, onToggle: _onToggle, collapsedSummary, expandHint, children, }: CollapsibleSectionProps): React.JSX.Element;
|
|
14
|
+
//# sourceMappingURL=CollapsibleSection.d.ts.map
|