@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/README.md +13 -8
- package/dist/api.d.ts +9 -3
- package/dist/api.js +6 -6
- package/dist/api.js.map +1 -1
- package/dist/commands.js +31 -26
- package/dist/commands.js.map +1 -1
- package/dist/dev-ui.d.ts +1 -1
- package/dist/dev-ui.js +5 -201
- package/dist/dev-ui.js.map +1 -1
- package/dist/dev-ui.test.js +5 -6
- package/dist/dev-ui.test.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +5 -6
- package/dist/index.js.map +1 -1
- package/dist/local.js +177 -87
- package/dist/local.js.map +1 -1
- package/dist/tui.d.ts +12 -0
- package/dist/tui.js +148 -0
- package/dist/tui.js.map +1 -0
- package/dist/ui/dev-ui.css +2 -0
- package/dist/ui/dev-ui.js +16 -0
- package/dist/ui/main-ogntZBtk.js +25176 -0
- package/package.json +19 -5
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
|
package/dist/tui.js.map
ADDED
|
@@ -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
|