@opencomputer/cli 0.3.5 → 0.3.8

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/tui.js ADDED
@@ -0,0 +1,148 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "@opentui/react/jsx-runtime";
2
+ /** @jsxImportSource @opentui/react */
3
+ import { createCliRenderer, SyntaxStyle } from "@opentui/core";
4
+ import { createRoot, useKeyboard } from "@opentui/react";
5
+ import { useCallback, useEffect, useState } from "react";
6
+ const markdownStyle = SyntaxStyle.fromStyles({
7
+ default: { fg: "#e5e5df" },
8
+ "markup.heading": { fg: "#f1f1ea", bold: true },
9
+ "markup.strong": { fg: "#f1f1ea", bold: true },
10
+ "markup.italic": { fg: "#c8c8c0", italic: true },
11
+ "markup.list": { fg: "#8fb99a" },
12
+ "markup.raw": { fg: "#d5b87a" },
13
+ "markup.raw.block": { fg: "#d5b87a", bg: "#1b1b19" },
14
+ "markup.link": { fg: "#8fb99a" },
15
+ "markup.link.label": { fg: "#8fb99a", underline: true },
16
+ "markup.link.url": { fg: "#77776f", dim: true },
17
+ "markup.quote": { fg: "#a8a8a0", italic: true },
18
+ });
19
+ function SessionApp({ agentName, send, exit }) {
20
+ const [turns, setTurns] = useState([]);
21
+ const [sessionId, setSessionId] = useState();
22
+ const [input, setInput] = useState("");
23
+ const [busy, setBusy] = useState(false);
24
+ const [spinnerIndex, setSpinnerIndex] = useState(0);
25
+ const spinner = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
26
+ useEffect(() => {
27
+ if (!busy) {
28
+ setSpinnerIndex(0);
29
+ return;
30
+ }
31
+ const timer = setInterval(() => setSpinnerIndex((current) => (current + 1) % spinner.length), 90);
32
+ return () => clearInterval(timer);
33
+ }, [busy, spinner.length]);
34
+ useKeyboard((key) => {
35
+ if (key.name === "escape" || (key.ctrl && key.name === "c"))
36
+ exit();
37
+ });
38
+ const updateAssistant = useCallback((id, update) => {
39
+ setTurns((current) => current.map((turn) => (turn.id === id ? update(turn) : turn)));
40
+ }, []);
41
+ const submit = (value) => {
42
+ const prompt = value.trim();
43
+ if (!prompt || busy)
44
+ return;
45
+ if (prompt === "/exit" || prompt === "/quit") {
46
+ exit();
47
+ return;
48
+ }
49
+ setInput("");
50
+ setBusy(true);
51
+ const userId = crypto.randomUUID();
52
+ const assistantId = crypto.randomUUID();
53
+ setTurns((current) => [
54
+ ...current,
55
+ {
56
+ id: userId,
57
+ role: "user",
58
+ text: prompt,
59
+ reasoning: "",
60
+ tools: [],
61
+ active: false,
62
+ },
63
+ {
64
+ id: assistantId,
65
+ role: "assistant",
66
+ text: "",
67
+ reasoning: "",
68
+ tools: [],
69
+ active: true,
70
+ },
71
+ ]);
72
+ const emit = (event) => {
73
+ updateAssistant(assistantId, (turn) => {
74
+ if (event.type === "message.delta") {
75
+ return { ...turn, text: turn.text + String(event.data.text ?? "") };
76
+ }
77
+ if (event.type === "message.completed") {
78
+ return { ...turn, text: String(event.data.text ?? turn.text) };
79
+ }
80
+ if (event.type === "reasoning.delta") {
81
+ return {
82
+ ...turn,
83
+ reasoning: turn.reasoning + String(event.data.text ?? ""),
84
+ };
85
+ }
86
+ if (event.type.startsWith("tool.")) {
87
+ const id = String(event.data.callId ?? event.data.tool ?? "tool");
88
+ const previous = turn.tools.find((item) => item.id === id);
89
+ const eventName = typeof event.data.tool === "string" ? event.data.tool.trim() : "";
90
+ const eventTitle = typeof event.data.title === "string" ? event.data.title.trim() : "";
91
+ const status = event.type === "tool.completed"
92
+ ? "completed"
93
+ : event.type === "tool.failed"
94
+ ? "failed"
95
+ : "running";
96
+ const tool = {
97
+ id,
98
+ name: eventName || previous?.name || "tool",
99
+ title: eventTitle || previous?.title,
100
+ status,
101
+ };
102
+ const existing = turn.tools.findIndex((item) => item.id === id);
103
+ const tools = [...turn.tools];
104
+ if (existing === -1)
105
+ tools.push(tool);
106
+ else
107
+ tools[existing] = { ...tools[existing], ...tool };
108
+ return { ...turn, tools };
109
+ }
110
+ return turn;
111
+ });
112
+ };
113
+ void send(prompt, sessionId, emit)
114
+ .then((nextSessionId) => setSessionId(nextSessionId))
115
+ .catch((error) => {
116
+ updateAssistant(assistantId, (turn) => ({
117
+ ...turn,
118
+ error: error instanceof Error ? error.message : String(error),
119
+ }));
120
+ })
121
+ .finally(() => {
122
+ updateAssistant(assistantId, (turn) => ({ ...turn, active: false }));
123
+ setBusy(false);
124
+ });
125
+ };
126
+ return (_jsxs("box", { style: { width: "100%", height: "100%", flexDirection: "column", backgroundColor: "#11110f" }, children: [_jsxs("box", { style: { height: 3, paddingX: 2, flexDirection: "row", alignItems: "center", border: ["bottom"], borderColor: "#34342f" }, children: [_jsx("text", { fg: "#f0f0e9", children: _jsx("strong", { children: "OpenComputer" }) }), _jsxs("text", { fg: "#787870", children: [" / ", agentName] }), _jsx("box", { style: { flexGrow: 1 } }), _jsx("text", { fg: busy ? "#d2aa62" : "#69aa7c", children: busy ? spinner[spinnerIndex] : "●" }), _jsxs("text", { fg: "#85857d", children: [" ", busy ? "working" : "local"] })] }), _jsxs("scrollbox", { style: { flexGrow: 1, paddingX: 2, paddingY: 1 }, stickyScroll: true, stickyStart: "bottom", children: [!turns.length && (_jsxs("box", { style: { flexDirection: "column", paddingTop: 2 }, children: [_jsx("ascii-font", { text: "opencomputer", font: "tiny", color: ["#f1f1ea", "#8fb99a"], selectable: false, style: { marginBottom: 1 } }), _jsx("text", { fg: "#e6e6df", children: _jsx("strong", { children: "Test your agent locally" }) }), _jsx("text", { fg: "#77776f", children: "Send a message below. Connected tools are proxied through OpenComputer." })] })), turns.map((turn) => (_jsxs("box", { style: { flexDirection: "column", marginBottom: 1 }, children: [_jsx("text", { fg: turn.role === "user" ? "#999991" : "#6fa981", children: _jsx("strong", { children: turn.role === "user" ? "YOU" : agentName.toUpperCase() }) }), turn.role === "assistant" && (turn.reasoning || turn.tools.length > 0) && (_jsx("box", { style: { flexDirection: "column", marginTop: 1, marginBottom: turn.text ? 0 : 1 }, children: turn.active && !turn.text ? (_jsxs(_Fragment, { children: [turn.reasoning && _jsx("text", { fg: "#6f6f68", children: turn.reasoning }), turn.tools.map((tool) => (_jsxs("text", { fg: tool.status === "failed" ? "#b66b6b" : "#77776f", children: [tool.status === "completed" ? "✓" : tool.status === "failed" ? "×" : "○", " ", tool.title || tool.name] }, tool.id)))] })) : (_jsxs("text", { fg: "#66665f", children: ["\u2713 ", turn.tools.length ? `${turn.tools.length} tool ${turn.tools.length === 1 ? "call" : "calls"}` : "thought process"] })) })), turn.role === "assistant" &&
127
+ turn.active &&
128
+ !turn.text &&
129
+ !turn.reasoning &&
130
+ turn.tools.length === 0 && (_jsxs("text", { fg: "#77776f", children: [spinner[spinnerIndex], " Agent is working\u2026"] })), turn.text && (_jsx("markdown", { content: turn.text, syntaxStyle: markdownStyle, conceal: true, concealCode: true, streaming: turn.active, internalBlockMode: "top-level", style: { width: "100%" } })), turn.error && _jsxs("text", { fg: "#d27777", children: ["Error: ", turn.error] })] }, turn.id)))] }), _jsxs("box", { style: { height: 3, marginX: 2, marginBottom: 1, paddingX: 1, flexDirection: "row", border: true, borderColor: busy ? "#3b3b36" : "#62625b", alignItems: "center" }, children: [_jsx("text", { fg: "#77776f", children: "\u203A " }), _jsx("input", { style: { flexGrow: 1, width: "100%" }, value: input, placeholder: busy ? "Agent is working…" : `Message ${agentName}`, focused: !busy, onInput: setInput, onSubmit: submit })] }), _jsx("box", { style: { height: 1, paddingX: 2 }, children: _jsx("text", { fg: "#575751", children: "Enter send \u00B7 Esc exit \u00B7 /exit quit" }) })] }));
131
+ }
132
+ export async function runSessionTUI(options) {
133
+ const renderer = await createCliRenderer({ exitOnCtrlC: false });
134
+ const root = createRoot(renderer);
135
+ await new Promise((done) => {
136
+ let finished = false;
137
+ const exit = () => {
138
+ if (finished)
139
+ return;
140
+ finished = true;
141
+ done();
142
+ };
143
+ root.render(_jsx(SessionApp, { ...options, exit: exit }));
144
+ });
145
+ root.unmount();
146
+ renderer.destroy();
147
+ }
148
+ //# sourceMappingURL=tui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui.js","sourceRoot":"","sources":["../src/tui.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ :root{color:#252522;font-synthesis:none;background:#f6f6f3;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}*{box-sizing:border-box}body{min-width:320px;min-height:100vh;margin:0}button,textarea{font:inherit}button{color:inherit;cursor:pointer}.app-shell{min-height:100vh}header{background:#ffffffe6;border-bottom:1px solid #e4e4df;justify-content:space-between;align-items:center;height:62px;padding:0 24px;display:flex}.brand{align-items:center;gap:10px;min-width:0;font-weight:650;display:flex}.logo{color:#fff;letter-spacing:-.06em;background:#171714;border-radius:9px;place-items:center;width:30px;height:30px;font:700 12px ui-monospace,monospace;display:grid}.dev-badge{color:#77776f;letter-spacing:.08em;background:#eeeeea;border-radius:5px;padding:3px 6px;font-size:9px}.status{color:#77776f;align-items:center;gap:8px;font-size:12px;display:flex}.status i{background:#22a65a;border-radius:999px;width:7px;height:7px;box-shadow:0 0 0 3px #e2f5e9}.workspace{grid-template-columns:260px minmax(0,1fr);height:calc(100vh - 62px);display:grid}aside{background:#f0f0ec;border-right:1px solid #e4e4df;padding:14px 11px;overflow-y:auto}.new-session{text-align:left;background:#fafaf8;border:1px solid #deded8;border-radius:9px;align-items:center;gap:9px;width:100%;padding:10px 12px;font-weight:600;display:flex;box-shadow:0 1px 1px #00000008}.new-session:hover{background:#fff;border-color:#c5c5be}.section-label{color:#94948d;letter-spacing:.09em;text-transform:uppercase;margin:22px 10px 8px;font-size:10px;font-weight:700}nav button{text-align:left;background:0 0;border:0;border-radius:8px;width:100%;padding:10px;display:block}nav button:hover,nav button.active{background:#ffffffd1}nav strong,nav span{text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}nav strong{font-size:12px;font-weight:600}nav span{color:#999991;margin-top:4px;font-size:10px}main{background:#fff;grid-template-rows:minmax(0,1fr) auto;min-width:0;height:100%;min-height:0;display:grid;overflow:hidden}.timeline{overscroll-behavior:contain;min-height:0;padding:42px max(24px,50% - 390px);overflow-y:auto}.empty{color:#8c8c84;text-align:center;align-content:center;place-items:center;height:100%;display:grid}.empty-mark{color:#55554f;background:#fafaf8;border:1px solid #e1e1dc;border-radius:12px;place-items:center;width:40px;height:40px;margin-bottom:15px;display:grid}.empty h2{color:#33332f;margin:0;font:600 17px/1.3 inherit}.empty p{margin:7px 0 0;font-size:13px}.message{margin:0 0 30px}.who{color:#999991;letter-spacing:.07em;text-transform:uppercase;margin-bottom:8px;font-size:10px;font-weight:700}.message.user{text-align:right}.message.user .who{display:none}.message-body{overflow-wrap:anywhere;line-height:1.65}.message.user .message-body{text-align:left;background:#f0f0ec;border-radius:14px 14px 4px;max-width:82%;padding:10px 14px;display:inline-block}.message-body>:first-child{margin-top:0}.message-body>:last-child{margin-bottom:0}.message-body p{margin:.6em 0}.message-body pre{background:#f5f5f2;border-radius:9px;padding:14px;overflow-x:auto}.message-body code{font:.9em ui-monospace,SFMono-Regular,Menlo,monospace}.message-body :not(pre)>code{background:#f0f0ec;border-radius:4px;padding:2px 5px}.activity{color:#8d8d86;margin:0 0 13px;font-size:12px}.activity summary{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:7px;width:fit-content;font:11px ui-monospace,SFMono-Regular,Menlo,monospace;list-style:none;display:flex}.activity summary::-webkit-details-marker{display:none}.activity summary:after{content:"›";margin-left:2px;transition:transform .16s}.activity[open] summary:after{transform:rotate(90deg)}.pulse{color:#81817a;animation:1s ease-in-out infinite pulse}.check{color:#58a271}@keyframes pulse{50%{opacity:.25}}.activity-body{border-left:1px solid #dfdfda;margin-top:9px;padding:4px 0 4px 12px}.reasoning{color:#a0a099;white-space:pre-wrap;max-height:160px;margin:4px 0 10px;line-height:1.5;overflow:auto}.tool{color:#9b9b94;align-items:center;gap:8px;margin:7px 0;font:11px ui-monospace,SFMono-Regular,Menlo,monospace;display:flex}.tool.done{color:#85857e}.tool.failed{color:#b26161}.composer{z-index:1;background:#fff;border-top:1px solid #eeeeea;flex:none;padding:12px max(20px,50% - 410px) 18px;position:relative}.composer-box{background:#fff;border:1px solid #d8d8d2;border-radius:14px;align-items:flex-end;gap:8px;padding:8px 8px 8px 14px;display:flex;box-shadow:0 6px 24px #1e1e140f}textarea{resize:none;width:100%;min-height:44px;max-height:160px;color:inherit;background:0 0;border:0;outline:none;padding:7px 0;line-height:1.45}.composer button{color:#fff;background:#23231f;border:0;border-radius:10px;flex:none;place-items:center;width:34px;height:34px;font-size:19px;display:grid}.composer button:disabled{color:#aaa;cursor:default;background:#ebebe7}.hint{color:#aaa9a2;text-align:center;margin-top:7px;font-size:10px}.error,.fatal,.loading{color:#a34848}.fatal,.loading{text-align:center;place-content:center;padding:30px;display:grid}@media (prefers-color-scheme:dark){:root{color:#e5e5df;background:#141413}header,main,.composer{background:#181817;border-color:#30302d}aside{background:#111110;border-color:#30302d}.new-session,nav button:hover,nav button.active{color:#e7e7e1;background:#222220;border-color:#373733}.logo{color:#171714;background:#f2f2ed}.dev-badge,.message.user .message-body,.message-body :not(pre)>code{background:#292927}.empty-mark,.message-body pre{background:#20201e;border-color:#353531}.empty h2{color:#e5e5df}.activity-body{border-color:#3a3a36}.composer-box{box-shadow:none;background:#20201e;border-color:#3d3d38}textarea{color:#ecece6}.composer button{color:#1a1a18;background:#ecece6}.composer button:disabled{color:#666;background:#30302d}}@media (width<=700px){.workspace{grid-template-columns:1fr}aside{display:none}.timeline{padding:28px 17px}.composer{padding:10px 12px 14px}}
2
+ /*$vite$:1*/
@@ -0,0 +1,16 @@
1
+ //#region ui/boot.ts
2
+ var e = document.getElementById("root");
3
+ e && (e.textContent = "Starting local agent…");
4
+ function t(t) {
5
+ if (!e) return;
6
+ let n = t instanceof Error ? t.message : String(t);
7
+ e.innerHTML = "";
8
+ let r = document.createElement("main");
9
+ r.style.cssText = "display:grid;place-content:center;min-height:100vh;padding:32px;font:14px/1.5 ui-sans-serif,system-ui;color:#9b3434;background:#f6f6f3;text-align:center";
10
+ let i = document.createElement("strong");
11
+ i.textContent = "The local agent app could not start";
12
+ let a = document.createElement("p");
13
+ a.textContent = n, r.append(i, a), e.append(r);
14
+ }
15
+ window.addEventListener("error", (e) => t(e.error ?? e.message)), window.addEventListener("unhandledrejection", (e) => t(e.reason)), import("./main-ogntZBtk.js").catch(t);
16
+ //#endregion