camelagi 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (249) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +224 -0
  3. package/camelagi.mjs +2 -0
  4. package/config.example.yaml +107 -0
  5. package/dist/agent/agent-openai.js +206 -0
  6. package/dist/agent/agent-openai.js.map +1 -0
  7. package/dist/agent/agent-sdk.js +209 -0
  8. package/dist/agent/agent-sdk.js.map +1 -0
  9. package/dist/agent/tool-adapter.js +31 -0
  10. package/dist/agent/tool-adapter.js.map +1 -0
  11. package/dist/agent/types.js +3 -0
  12. package/dist/agent/types.js.map +1 -0
  13. package/dist/agent.js +17 -0
  14. package/dist/agent.js.map +1 -0
  15. package/dist/approval-forward.js +42 -0
  16. package/dist/approval-forward.js.map +1 -0
  17. package/dist/approvals.js +151 -0
  18. package/dist/approvals.js.map +1 -0
  19. package/dist/boot.js +34 -0
  20. package/dist/boot.js.map +1 -0
  21. package/dist/bootstrap.js +451 -0
  22. package/dist/bootstrap.js.map +1 -0
  23. package/dist/camelagi-gateway.mjs +93611 -0
  24. package/dist/camelagi-gateway.mjs.map +7 -0
  25. package/dist/channels/adapter.js +10 -0
  26. package/dist/channels/adapter.js.map +1 -0
  27. package/dist/channels/discord.js +232 -0
  28. package/dist/channels/discord.js.map +1 -0
  29. package/dist/channels/handler.js +349 -0
  30. package/dist/channels/handler.js.map +1 -0
  31. package/dist/channels/index.js +19 -0
  32. package/dist/channels/index.js.map +1 -0
  33. package/dist/channels/registry.js +71 -0
  34. package/dist/channels/registry.js.map +1 -0
  35. package/dist/channels/telegram.js +83 -0
  36. package/dist/channels/telegram.js.map +1 -0
  37. package/dist/channels/types.js +3 -0
  38. package/dist/channels/types.js.map +1 -0
  39. package/dist/chunker.js +102 -0
  40. package/dist/chunker.js.map +1 -0
  41. package/dist/cli/cmd-agents.js +65 -0
  42. package/dist/cli/cmd-agents.js.map +1 -0
  43. package/dist/cli/cmd-bootstrap.js +10 -0
  44. package/dist/cli/cmd-bootstrap.js.map +1 -0
  45. package/dist/cli/cmd-chat.js +32 -0
  46. package/dist/cli/cmd-chat.js.map +1 -0
  47. package/dist/cli/cmd-config.js +88 -0
  48. package/dist/cli/cmd-config.js.map +1 -0
  49. package/dist/cli/cmd-cron.js +120 -0
  50. package/dist/cli/cmd-cron.js.map +1 -0
  51. package/dist/cli/cmd-daemon.js +37 -0
  52. package/dist/cli/cmd-daemon.js.map +1 -0
  53. package/dist/cli/cmd-doctor.js +18 -0
  54. package/dist/cli/cmd-doctor.js.map +1 -0
  55. package/dist/cli/cmd-logs.js +30 -0
  56. package/dist/cli/cmd-logs.js.map +1 -0
  57. package/dist/cli/cmd-pairing.js +41 -0
  58. package/dist/cli/cmd-pairing.js.map +1 -0
  59. package/dist/cli/cmd-reset.js +39 -0
  60. package/dist/cli/cmd-reset.js.map +1 -0
  61. package/dist/cli/cmd-serve.js +30 -0
  62. package/dist/cli/cmd-serve.js.map +1 -0
  63. package/dist/cli/cmd-sessions.js +56 -0
  64. package/dist/cli/cmd-sessions.js.map +1 -0
  65. package/dist/cli/cmd-setup.js +11 -0
  66. package/dist/cli/cmd-setup.js.map +1 -0
  67. package/dist/cli/cmd-soul.js +43 -0
  68. package/dist/cli/cmd-soul.js.map +1 -0
  69. package/dist/cli/parse.js +50 -0
  70. package/dist/cli/parse.js.map +1 -0
  71. package/dist/cli/registry.js +15 -0
  72. package/dist/cli/registry.js.map +1 -0
  73. package/dist/cli.js +103 -0
  74. package/dist/cli.js.map +1 -0
  75. package/dist/compact.js +92 -0
  76. package/dist/compact.js.map +1 -0
  77. package/dist/config.js +153 -0
  78. package/dist/config.js.map +1 -0
  79. package/dist/constants.js +21 -0
  80. package/dist/constants.js.map +1 -0
  81. package/dist/core/config.js +212 -0
  82. package/dist/core/config.js.map +1 -0
  83. package/dist/core/constants.js +21 -0
  84. package/dist/core/constants.js.map +1 -0
  85. package/dist/core/errors.js +5 -0
  86. package/dist/core/errors.js.map +1 -0
  87. package/dist/core/log.js +41 -0
  88. package/dist/core/log.js.map +1 -0
  89. package/dist/core/models.js +123 -0
  90. package/dist/core/models.js.map +1 -0
  91. package/dist/core/types.js +3 -0
  92. package/dist/core/types.js.map +1 -0
  93. package/dist/core/update-check.js +51 -0
  94. package/dist/core/update-check.js.map +1 -0
  95. package/dist/cron.js +81 -0
  96. package/dist/cron.js.map +1 -0
  97. package/dist/daemon.js +109 -0
  98. package/dist/daemon.js.map +1 -0
  99. package/dist/doctor.js +194 -0
  100. package/dist/doctor.js.map +1 -0
  101. package/dist/errors.js +5 -0
  102. package/dist/errors.js.map +1 -0
  103. package/dist/extensions/approval-forward.js +42 -0
  104. package/dist/extensions/approval-forward.js.map +1 -0
  105. package/dist/extensions/approvals.js +144 -0
  106. package/dist/extensions/approvals.js.map +1 -0
  107. package/dist/extensions/cron.js +306 -0
  108. package/dist/extensions/cron.js.map +1 -0
  109. package/dist/extensions/hooks.js +72 -0
  110. package/dist/extensions/hooks.js.map +1 -0
  111. package/dist/extensions/skills.js +97 -0
  112. package/dist/extensions/skills.js.map +1 -0
  113. package/dist/gateway/csrf.js +44 -0
  114. package/dist/gateway/csrf.js.map +1 -0
  115. package/dist/gateway/logger.js +81 -0
  116. package/dist/gateway/logger.js.map +1 -0
  117. package/dist/gateway/rate-limit.js +33 -0
  118. package/dist/gateway/rate-limit.js.map +1 -0
  119. package/dist/gateway/routes.js +315 -0
  120. package/dist/gateway/routes.js.map +1 -0
  121. package/dist/gateway/state.js +54 -0
  122. package/dist/gateway/state.js.map +1 -0
  123. package/dist/gateway/ws-handler.js +200 -0
  124. package/dist/gateway/ws-handler.js.map +1 -0
  125. package/dist/gateway-entry.js +16 -0
  126. package/dist/gateway-entry.js.map +1 -0
  127. package/dist/hooks.js +72 -0
  128. package/dist/hooks.js.map +1 -0
  129. package/dist/lanes.js +62 -0
  130. package/dist/lanes.js.map +1 -0
  131. package/dist/model.js +30 -0
  132. package/dist/model.js.map +1 -0
  133. package/dist/policy.js +22 -0
  134. package/dist/policy.js.map +1 -0
  135. package/dist/queue.js +45 -0
  136. package/dist/queue.js.map +1 -0
  137. package/dist/retry.js +96 -0
  138. package/dist/retry.js.map +1 -0
  139. package/dist/runs.js +83 -0
  140. package/dist/runs.js.map +1 -0
  141. package/dist/runtime/compact.js +99 -0
  142. package/dist/runtime/compact.js.map +1 -0
  143. package/dist/runtime/lanes.js +66 -0
  144. package/dist/runtime/lanes.js.map +1 -0
  145. package/dist/runtime/orchestrate.js +121 -0
  146. package/dist/runtime/orchestrate.js.map +1 -0
  147. package/dist/runtime/queue.js +50 -0
  148. package/dist/runtime/queue.js.map +1 -0
  149. package/dist/runtime/retry.js +127 -0
  150. package/dist/runtime/retry.js.map +1 -0
  151. package/dist/runtime/runs.js +105 -0
  152. package/dist/runtime/runs.js.map +1 -0
  153. package/dist/serve.js +209 -0
  154. package/dist/serve.js.map +1 -0
  155. package/dist/session.js +75 -0
  156. package/dist/session.js.map +1 -0
  157. package/dist/setup.js +254 -0
  158. package/dist/setup.js.map +1 -0
  159. package/dist/skills.js +89 -0
  160. package/dist/skills.js.map +1 -0
  161. package/dist/subagent.js +71 -0
  162. package/dist/subagent.js.map +1 -0
  163. package/dist/system-prompt.js +157 -0
  164. package/dist/system-prompt.js.map +1 -0
  165. package/dist/telegram/admin-bot.js +705 -0
  166. package/dist/telegram/admin-bot.js.map +1 -0
  167. package/dist/telegram/agent-bot.js +551 -0
  168. package/dist/telegram/agent-bot.js.map +1 -0
  169. package/dist/telegram/bot-approval.js +63 -0
  170. package/dist/telegram/bot-approval.js.map +1 -0
  171. package/dist/telegram/draft-stream.js +86 -0
  172. package/dist/telegram/draft-stream.js.map +1 -0
  173. package/dist/telegram/format.js +106 -0
  174. package/dist/telegram/format.js.map +1 -0
  175. package/dist/telegram/helpers.js +87 -0
  176. package/dist/telegram/helpers.js.map +1 -0
  177. package/dist/telegram/pairing-notify.js +52 -0
  178. package/dist/telegram/pairing-notify.js.map +1 -0
  179. package/dist/telegram/pairing.js +138 -0
  180. package/dist/telegram/pairing.js.map +1 -0
  181. package/dist/telegram/resolve.js +33 -0
  182. package/dist/telegram/resolve.js.map +1 -0
  183. package/dist/telegram/transcribe.js +77 -0
  184. package/dist/telegram/transcribe.js.map +1 -0
  185. package/dist/telegram/types.js +3 -0
  186. package/dist/telegram/types.js.map +1 -0
  187. package/dist/telegram/voice-wizard.js +84 -0
  188. package/dist/telegram/voice-wizard.js.map +1 -0
  189. package/dist/telegram/wizard.js +89 -0
  190. package/dist/telegram/wizard.js.map +1 -0
  191. package/dist/telegram/wizards.js +297 -0
  192. package/dist/telegram/wizards.js.map +1 -0
  193. package/dist/telegram-admin.js +800 -0
  194. package/dist/telegram-admin.js.map +1 -0
  195. package/dist/telegram.js +118 -0
  196. package/dist/telegram.js.map +1 -0
  197. package/dist/tools/cron.js +94 -0
  198. package/dist/tools/cron.js.map +1 -0
  199. package/dist/tools/edit.js +29 -0
  200. package/dist/tools/edit.js.map +1 -0
  201. package/dist/tools/exec.js +38 -0
  202. package/dist/tools/exec.js.map +1 -0
  203. package/dist/tools/fetch.js +28 -0
  204. package/dist/tools/fetch.js.map +1 -0
  205. package/dist/tools/index.js +16 -0
  206. package/dist/tools/index.js.map +1 -0
  207. package/dist/tools/memory.js +164 -0
  208. package/dist/tools/memory.js.map +1 -0
  209. package/dist/tools/patch.js +284 -0
  210. package/dist/tools/patch.js.map +1 -0
  211. package/dist/tools/read.js +26 -0
  212. package/dist/tools/read.js.map +1 -0
  213. package/dist/tools/search.js +62 -0
  214. package/dist/tools/search.js.map +1 -0
  215. package/dist/tools/subagent.js +48 -0
  216. package/dist/tools/subagent.js.map +1 -0
  217. package/dist/tools/write.js +22 -0
  218. package/dist/tools/write.js.map +1 -0
  219. package/dist/tui/commands.js +450 -0
  220. package/dist/tui/commands.js.map +1 -0
  221. package/dist/tui/components/assistant-message.js +26 -0
  222. package/dist/tui/components/assistant-message.js.map +1 -0
  223. package/dist/tui/components/chat-log.js +94 -0
  224. package/dist/tui/components/chat-log.js.map +1 -0
  225. package/dist/tui/components/custom-editor.js +40 -0
  226. package/dist/tui/components/custom-editor.js.map +1 -0
  227. package/dist/tui/components/hint-bar.js +13 -0
  228. package/dist/tui/components/hint-bar.js.map +1 -0
  229. package/dist/tui/components/tool-execution.js +73 -0
  230. package/dist/tui/components/tool-execution.js.map +1 -0
  231. package/dist/tui/components/user-message.js +19 -0
  232. package/dist/tui/components/user-message.js.map +1 -0
  233. package/dist/tui/components/welcome.js +147 -0
  234. package/dist/tui/components/welcome.js.map +1 -0
  235. package/dist/tui/context.js +3 -0
  236. package/dist/tui/context.js.map +1 -0
  237. package/dist/tui/theme.js +91 -0
  238. package/dist/tui/theme.js.map +1 -0
  239. package/dist/tui/tui.js +389 -0
  240. package/dist/tui/tui.js.map +1 -0
  241. package/dist/tui/ws-handler.js +154 -0
  242. package/dist/tui/ws-handler.js.map +1 -0
  243. package/dist/types.js +3 -0
  244. package/dist/types.js.map +1 -0
  245. package/dist/usage.js +88 -0
  246. package/dist/usage.js.map +1 -0
  247. package/dist/workspace.js +245 -0
  248. package/dist/workspace.js.map +1 -0
  249. package/package.json +74 -0
@@ -0,0 +1,389 @@
1
+ // CamelAGI TUI — gateway WebSocket client
2
+ // All agent execution flows through the gateway.
3
+ import { CombinedAutocompleteProvider, Container, Loader, ProcessTerminal, SelectList, Text, TUI, } from "@mariozechner/pi-tui";
4
+ import { WebSocket } from "ws";
5
+ import { loadConfig, saveConfig, ensureDirs } from "../core/config.js";
6
+ import { seedWorkspace } from "../workspace.js";
7
+ import { buildSystemPrompt } from "../system-prompt.js";
8
+ import { loadMessages, listSessions } from "../session.js";
9
+ import { getSessionUsage, formatTokens } from "../usage.js";
10
+ import { execFile } from "node:child_process";
11
+ import { ChatLog } from "./components/chat-log.js";
12
+ import { CustomEditor } from "./components/custom-editor.js";
13
+ import { HintBar } from "./components/hint-bar.js";
14
+ import { buildWelcomeScreen } from "./components/welcome.js";
15
+ import { theme, editorTheme, selectListTheme } from "./theme.js";
16
+ import { handleWsMessage } from "./ws-handler.js";
17
+ import { handleCommand, handleAgentCreation } from "./commands.js";
18
+ function getSlashCommands() {
19
+ return [
20
+ { name: "help", description: "Show available commands and shortcuts" },
21
+ { name: "model", description: "Switch model or show current" },
22
+ { name: "config", description: "Show current configuration" },
23
+ { name: "sessions", description: "List saved sessions" },
24
+ { name: "session", description: "Switch to a session" },
25
+ { name: "clear", description: "Clear chat history" },
26
+ { name: "tools", description: "Toggle tool output expand/collapse" },
27
+ { name: "skills", description: "List active skills" },
28
+ { name: "think", description: "Set thinking level (off|low|medium|high)" },
29
+ { name: "effort", description: "Set effort level (low|medium|high|max)" },
30
+ { name: "context", description: "Show context breakdown (injected files, tokens)" },
31
+ { name: "status", description: "Show session status" },
32
+ { name: "compact", description: "Force context compaction now" },
33
+ { name: "new", description: "Start a new session" },
34
+ { name: "agents", description: "List, create, or remove agents" },
35
+ { name: "soul", description: "View/edit an agent's SOUL.md" },
36
+ { name: "cancel", description: "Cancel agent creation" },
37
+ { name: "setup", description: "Run setup wizard" },
38
+ { name: "exit", description: "Exit CamelAGI" },
39
+ { name: "quit", description: "Exit CamelAGI" },
40
+ ];
41
+ }
42
+ export async function runTui(opts = {}) {
43
+ ensureDirs();
44
+ seedWorkspace();
45
+ const config = loadConfig();
46
+ const systemPrompt = buildSystemPrompt(config.systemPrompt, config.skills);
47
+ const state = {
48
+ config,
49
+ sid: opts.session ?? `session-${Date.now()}`,
50
+ messages: loadMessages(opts.session ?? `session-${Date.now()}`),
51
+ currentModel: config.model,
52
+ currentThinking: config.thinking,
53
+ currentEffort: config.effort,
54
+ systemPrompt,
55
+ toolsExpanded: false,
56
+ toolCounter: 0,
57
+ pendingMessage: null,
58
+ isThinking: false,
59
+ agentCreation: null,
60
+ sdkSessionId: undefined,
61
+ };
62
+ // --- Connect to gateway ---
63
+ const wsUrl = opts.wsUrl;
64
+ if (!wsUrl)
65
+ throw new Error("wsUrl is required — TUI connects to gateway via WebSocket");
66
+ const ws = new WebSocket(wsUrl);
67
+ await new Promise((resolve, reject) => {
68
+ ws.on("open", resolve);
69
+ ws.on("error", reject);
70
+ });
71
+ const wsSend = (data) => {
72
+ if (ws.readyState === WebSocket.OPEN) {
73
+ ws.send(JSON.stringify(data));
74
+ }
75
+ };
76
+ // --- Build UI ---
77
+ const tui = new TUI(new ProcessTerminal());
78
+ const statusContainer = new Container();
79
+ const chatLog = new ChatLog();
80
+ const editor = new CustomEditor(tui, editorTheme);
81
+ const hintBar = new HintBar();
82
+ const root = new Container();
83
+ root.addChild(chatLog);
84
+ root.addChild(statusContainer);
85
+ root.addChild(editor);
86
+ root.addChild(hintBar);
87
+ tui.addChild(root);
88
+ tui.setFocus(editor);
89
+ editor.setAutocompleteProvider(new CombinedAutocompleteProvider(getSlashCommands(), process.cwd()));
90
+ // --- Status management ---
91
+ let activityStatus = "idle";
92
+ let lastCtrlCAt = 0;
93
+ let statusText = null;
94
+ let statusLoader = null;
95
+ let statusStartedAt = null;
96
+ let statusTimer = null;
97
+ const formatElapsed = (startMs) => {
98
+ const totalSeconds = Math.max(0, Math.floor((Date.now() - startMs) / 1000));
99
+ if (totalSeconds < 60)
100
+ return `${totalSeconds}s`;
101
+ const minutes = Math.floor(totalSeconds / 60);
102
+ const seconds = totalSeconds % 60;
103
+ return `${minutes}m ${seconds}s`;
104
+ };
105
+ const ensureStatusText = () => {
106
+ if (statusText)
107
+ return;
108
+ statusContainer.clear();
109
+ statusLoader?.stop();
110
+ statusLoader = null;
111
+ statusText = new Text("", 1, 0);
112
+ statusContainer.addChild(statusText);
113
+ };
114
+ const ensureStatusLoader = () => {
115
+ if (statusLoader)
116
+ return;
117
+ statusContainer.clear();
118
+ statusText = null;
119
+ statusLoader = new Loader(tui, (spinner) => theme.accent(spinner), (text) => theme.bold(theme.accentSoft(text)), "");
120
+ statusContainer.addChild(statusLoader);
121
+ };
122
+ const renderStatus = () => {
123
+ const isBusy = activityStatus.startsWith("thinking") ||
124
+ activityStatus.startsWith("running tool") ||
125
+ activityStatus.startsWith("responding") ||
126
+ activityStatus.startsWith("subagent") ||
127
+ activityStatus.startsWith("compacting");
128
+ if (isBusy) {
129
+ if (!statusStartedAt)
130
+ statusStartedAt = Date.now();
131
+ ensureStatusLoader();
132
+ if (!statusTimer) {
133
+ statusTimer = setInterval(() => {
134
+ if (!statusStartedAt)
135
+ return;
136
+ const elapsed = formatElapsed(statusStartedAt);
137
+ statusLoader?.setMessage(`${activityStatus} | ${elapsed}`);
138
+ }, 1000);
139
+ }
140
+ statusLoader?.setMessage(activityStatus);
141
+ }
142
+ else {
143
+ statusStartedAt = null;
144
+ if (statusTimer) {
145
+ clearInterval(statusTimer);
146
+ statusTimer = null;
147
+ }
148
+ statusLoader?.stop();
149
+ statusLoader = null;
150
+ if (activityStatus !== "idle") {
151
+ ensureStatusText();
152
+ statusText?.setText(theme.dim(activityStatus));
153
+ }
154
+ else {
155
+ statusContainer.clear();
156
+ statusText = null;
157
+ }
158
+ }
159
+ };
160
+ const setActivity = (text) => {
161
+ activityStatus = text;
162
+ renderStatus();
163
+ tui.requestRender();
164
+ };
165
+ const updateHint = () => {
166
+ const usage = getSessionUsage(state.sid);
167
+ const parts = [
168
+ `? for shortcuts`,
169
+ state.currentModel,
170
+ state.config.provider,
171
+ ];
172
+ if (usage.calls > 0) {
173
+ parts.push(`${formatTokens(usage.totalInput + usage.totalOutput)} tokens`);
174
+ }
175
+ hintBar.setHint(parts.join(" · "));
176
+ };
177
+ const updateHeader = () => { };
178
+ const updateFooter = () => { updateHint(); };
179
+ // --- Overlays ---
180
+ const openOverlay = (component) => { tui.showOverlay(component); };
181
+ const closeOverlay = () => { tui.hideOverlay(); tui.setFocus(editor); };
182
+ const openModelSelector = async () => {
183
+ const { resolvePreset, fetchOpenRouterModels } = await import("../core/models.js");
184
+ const preset = resolvePreset(state.config.provider, state.config.baseUrl);
185
+ let models = [...preset.models];
186
+ // For OpenRouter: try fetching live model list
187
+ const isOpenRouter = state.config.baseUrl?.includes("openrouter");
188
+ if (isOpenRouter) {
189
+ chatLog.addSystem("Fetching models from OpenRouter...");
190
+ tui.requestRender();
191
+ const live = await fetchOpenRouterModels(state.config.apiKey);
192
+ if (live.length > 0) {
193
+ models = live.map((m) => m.id);
194
+ }
195
+ }
196
+ if (!models.includes(state.currentModel)) {
197
+ models.unshift(state.currentModel);
198
+ }
199
+ const items = models.map((m) => ({
200
+ value: m, label: m, description: m === state.currentModel ? "(current)" : "",
201
+ }));
202
+ const list = new SelectList(items, 15, selectListTheme);
203
+ list.onSelect = async (item) => {
204
+ closeOverlay();
205
+ if (item.value === state.currentModel)
206
+ return;
207
+ wsSend({ type: "model.switch", model: item.value, thinking: state.currentThinking });
208
+ saveConfig({ model: item.value });
209
+ state.config = loadConfig();
210
+ state.currentModel = item.value;
211
+ chatLog.addSystem(`Switched to ${item.value}`);
212
+ updateHeader();
213
+ updateFooter();
214
+ tui.requestRender();
215
+ };
216
+ list.onCancel = () => closeOverlay();
217
+ openOverlay(list);
218
+ };
219
+ const openSessionSelector = () => {
220
+ const sessions = listSessions();
221
+ if (sessions.length === 0) {
222
+ chatLog.addSystem("No sessions.");
223
+ tui.requestRender();
224
+ return;
225
+ }
226
+ const items = sessions.map((s) => {
227
+ const date = new Date(s.createdAt).toLocaleString();
228
+ const displayLabel = s.label ? `${s.id} (${s.label})` : s.id;
229
+ return { value: s.id, label: displayLabel, description: `${s.model} · ${date}` };
230
+ });
231
+ const list = new SelectList(items, 9, selectListTheme);
232
+ list.onSelect = (item) => {
233
+ closeOverlay();
234
+ state.sid = item.value;
235
+ state.sdkSessionId = undefined;
236
+ state.messages = loadMessages(state.sid);
237
+ chatLog.clearAll();
238
+ if (state.messages.length > 0) {
239
+ for (const m of state.messages) {
240
+ if (m.role === "user")
241
+ chatLog.addUser(m.content);
242
+ else if (m.role === "assistant")
243
+ chatLog.finalizeAssistant(m.content);
244
+ }
245
+ }
246
+ chatLog.addSystem(`Switched to session: ${state.sid}`);
247
+ updateHeader();
248
+ updateFooter();
249
+ tui.requestRender();
250
+ };
251
+ list.onCancel = () => closeOverlay();
252
+ openOverlay(list);
253
+ };
254
+ // --- Shell execution ---
255
+ const runShellCommand = (cmd) => {
256
+ const command = cmd.slice(1).trim();
257
+ if (!command)
258
+ return;
259
+ chatLog.addSystem(`$ ${command}`);
260
+ setActivity("running shell");
261
+ execFile("bash", ["-c", command], {
262
+ cwd: process.cwd(), timeout: 30_000, maxBuffer: 1024 * 1024,
263
+ }, (_err, stdout, stderr) => {
264
+ const out = (stdout ?? "").slice(0, 40_000);
265
+ const err = (stderr ?? "").slice(0, 10_000);
266
+ chatLog.addSystem((err ? `${out}\n${err}` : out) || "(no output)");
267
+ setActivity("idle");
268
+ tui.requestRender();
269
+ });
270
+ };
271
+ // --- Build context ---
272
+ const ctx = {
273
+ state, tui, chatLog, editor, hintBar, ws, wsSend,
274
+ setActivity, updateHeader, updateFooter, updateHint,
275
+ openOverlay, closeOverlay,
276
+ selectListTheme,
277
+ openModelSelector, openSessionSelector,
278
+ };
279
+ // --- Gateway WS events ---
280
+ ws.on("message", (raw) => {
281
+ let msg;
282
+ try {
283
+ msg = JSON.parse(raw.toString());
284
+ }
285
+ catch {
286
+ return;
287
+ }
288
+ handleWsMessage(ctx, msg);
289
+ });
290
+ ws.on("close", () => {
291
+ chatLog.addSystem("Gateway connection lost.");
292
+ setActivity("disconnected");
293
+ tui.requestRender();
294
+ });
295
+ // --- Editor events ---
296
+ editor.onSubmit = (text) => {
297
+ const raw = text;
298
+ const value = raw.trim();
299
+ editor.setText("");
300
+ if (!value)
301
+ return;
302
+ editor.addToHistory(value);
303
+ // Agent creation flow intercept
304
+ if (state.agentCreation && !value.startsWith("/")) {
305
+ if (handleAgentCreation(ctx, value))
306
+ return;
307
+ }
308
+ if (raw.startsWith("!") && raw !== "!") {
309
+ runShellCommand(raw);
310
+ return;
311
+ }
312
+ if (value.startsWith("/")) {
313
+ void handleCommand(ctx, value);
314
+ return;
315
+ }
316
+ // Send message to gateway
317
+ chatLog.addUser(value);
318
+ setActivity("thinking");
319
+ state.toolCounter = 0;
320
+ state.pendingMessage = value;
321
+ wsSend({
322
+ type: "chat",
323
+ message: value,
324
+ session: state.sid,
325
+ ...(state.sdkSessionId && { sdkSessionId: state.sdkSessionId }),
326
+ });
327
+ };
328
+ editor.onEscape = () => {
329
+ wsSend({ type: "abort" });
330
+ setActivity("aborting...");
331
+ };
332
+ editor.onCtrlC = () => {
333
+ if (editor.getText().trim().length > 0) {
334
+ editor.setText("");
335
+ setActivity("cleared input");
336
+ tui.requestRender();
337
+ return;
338
+ }
339
+ const now = Date.now();
340
+ if (now - lastCtrlCAt < 1000) {
341
+ tui.stop();
342
+ ws.close();
343
+ process.exit(0);
344
+ }
345
+ lastCtrlCAt = now;
346
+ setActivity("press ctrl+c again to exit");
347
+ };
348
+ editor.onCtrlD = () => { tui.stop(); ws.close(); process.exit(0); };
349
+ editor.onCtrlO = () => {
350
+ state.toolsExpanded = !state.toolsExpanded;
351
+ chatLog.setToolsExpanded(state.toolsExpanded);
352
+ setActivity(state.toolsExpanded ? "tools expanded" : "tools collapsed");
353
+ };
354
+ editor.onCtrlL = () => openModelSelector();
355
+ editor.onCtrlP = () => openSessionSelector();
356
+ // --- Init ---
357
+ updateHint();
358
+ setActivity("idle");
359
+ if (state.messages.length > 0) {
360
+ for (const m of state.messages) {
361
+ if (m.role === "user")
362
+ chatLog.addUser(m.content);
363
+ else if (m.role === "assistant")
364
+ chatLog.finalizeAssistant(m.content);
365
+ }
366
+ }
367
+ else {
368
+ const sessions = listSessions();
369
+ const welcome = buildWelcomeScreen({
370
+ version: "0.5.0",
371
+ userName: process.env.USER ?? process.env.USERNAME,
372
+ model: state.currentModel,
373
+ effort: state.config.effort,
374
+ provider: state.config.provider,
375
+ cwd: process.cwd(),
376
+ sessions,
377
+ thinking: state.currentThinking,
378
+ }, process.stdout.columns ?? 120);
379
+ chatLog.addChild(welcome);
380
+ }
381
+ tui.start();
382
+ tui.requestRender();
383
+ await new Promise((resolve) => {
384
+ process.once("exit", resolve);
385
+ process.once("SIGINT", resolve);
386
+ process.once("SIGTERM", resolve);
387
+ });
388
+ }
389
+ //# sourceMappingURL=tui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui.js","sourceRoot":"","sources":["../../src/tui/tui.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,iDAAiD;AAEjD,OAAO,EACL,4BAA4B,EAC5B,SAAS,EACT,MAAM,EACN,eAAe,EACf,UAAU,EACV,IAAI,EACJ,GAAG,GAEJ,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAe,MAAM,mBAAmB,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEjE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAOnE,SAAS,gBAAgB;IACvB,OAAO;QACL,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,uCAAuC,EAAE;QACtE,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,8BAA8B,EAAE;QAC9D,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4BAA4B,EAAE;QAC7D,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,qBAAqB,EAAE;QACxD,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,qBAAqB,EAAE;QACvD,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE;QACpD,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,oCAAoC,EAAE;QACpE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oBAAoB,EAAE;QACrD,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,0CAA0C,EAAE;QAC1E,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wCAAwC,EAAE;QACzE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,iDAAiD,EAAE;QACnF,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qBAAqB,EAAE;QACtD,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,8BAA8B,EAAE;QAChE,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE;QACnD,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gCAAgC,EAAE;QACjE,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,8BAA8B,EAAE;QAC7D,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uBAAuB,EAAE;QACxD,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE;QAClD,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE;QAC9C,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE;KAC/C,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAAmB,EAAE;IAChD,UAAU,EAAE,CAAC;IACb,aAAa,EAAE,CAAC;IAChB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAE3E,MAAM,KAAK,GAAa;QACtB,MAAM;QACN,GAAG,EAAE,IAAI,CAAC,OAAO,IAAI,WAAW,IAAI,CAAC,GAAG,EAAE,EAAE;QAC5C,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,OAAO,IAAI,WAAW,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAC/D,YAAY,EAAE,MAAM,CAAC,KAAK;QAC1B,eAAe,EAAE,MAAM,CAAC,QAAQ;QAChC,aAAa,EAAE,MAAM,CAAC,MAAM;QAC5B,YAAY;QACZ,aAAa,EAAE,KAAK;QACpB,WAAW,EAAE,CAAC;QACd,cAAc,EAAE,IAAI;QACpB,UAAU,EAAE,KAAK;QACjB,aAAa,EAAE,IAAI;QACnB,YAAY,EAAE,SAAS;KACxB,CAAC;IAEF,6BAA6B;IAE7B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACzB,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAEzF,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACvB,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,CAAC,IAAa,EAAE,EAAE;QAC/B,IAAI,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YACrC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CAAC;IAEF,mBAAmB;IAEnB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC;IAC3C,MAAM,eAAe,GAAG,IAAI,SAAS,EAAE,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,MAAM,IAAI,GAAG,IAAI,SAAS,EAAE,CAAC;IAC7B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACvB,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC/B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACtB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACvB,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACnB,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAErB,MAAM,CAAC,uBAAuB,CAC5B,IAAI,4BAA4B,CAAC,gBAAgB,EAAE,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CACpE,CAAC;IAEF,4BAA4B;IAE5B,IAAI,cAAc,GAAG,MAAM,CAAC;IAC5B,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,UAAU,GAAgB,IAAI,CAAC;IACnC,IAAI,YAAY,GAAkB,IAAI,CAAC;IACvC,IAAI,eAAe,GAAkB,IAAI,CAAC;IAC1C,IAAI,WAAW,GAA0B,IAAI,CAAC;IAE9C,MAAM,aAAa,GAAG,CAAC,OAAe,EAAE,EAAE;QACxC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC5E,IAAI,YAAY,GAAG,EAAE;YAAE,OAAO,GAAG,YAAY,GAAG,CAAC;QACjD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,YAAY,GAAG,EAAE,CAAC;QAClC,OAAO,GAAG,OAAO,KAAK,OAAO,GAAG,CAAC;IACnC,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC5B,IAAI,UAAU;YAAE,OAAO;QACvB,eAAe,CAAC,KAAK,EAAE,CAAC;QACxB,YAAY,EAAE,IAAI,EAAE,CAAC;QACrB,YAAY,GAAG,IAAI,CAAC;QACpB,UAAU,GAAG,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAChC,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACvC,CAAC,CAAC;IAEF,MAAM,kBAAkB,GAAG,GAAG,EAAE;QAC9B,IAAI,YAAY;YAAE,OAAO;QACzB,eAAe,CAAC,KAAK,EAAE,CAAC;QACxB,UAAU,GAAG,IAAI,CAAC;QAClB,YAAY,GAAG,IAAI,MAAM,CACvB,GAAG,EACH,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAClC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAC5C,EAAE,CACH,CAAC;QACF,eAAe,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACzC,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC;YAClD,cAAc,CAAC,UAAU,CAAC,cAAc,CAAC;YACzC,cAAc,CAAC,UAAU,CAAC,YAAY,CAAC;YACvC,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC;YACrC,cAAc,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QAC1C,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,eAAe;gBAAE,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACnD,kBAAkB,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;oBAC7B,IAAI,CAAC,eAAe;wBAAE,OAAO;oBAC7B,MAAM,OAAO,GAAG,aAAa,CAAC,eAAe,CAAC,CAAC;oBAC/C,YAAY,EAAE,UAAU,CAAC,GAAG,cAAc,MAAM,OAAO,EAAE,CAAC,CAAC;gBAC7D,CAAC,EAAE,IAAI,CAAC,CAAC;YACX,CAAC;YACD,YAAY,EAAE,UAAU,CAAC,cAAc,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,eAAe,GAAG,IAAI,CAAC;YACvB,IAAI,WAAW,EAAE,CAAC;gBAChB,aAAa,CAAC,WAAW,CAAC,CAAC;gBAC3B,WAAW,GAAG,IAAI,CAAC;YACrB,CAAC;YACD,YAAY,EAAE,IAAI,EAAE,CAAC;YACrB,YAAY,GAAG,IAAI,CAAC;YACpB,IAAI,cAAc,KAAK,MAAM,EAAE,CAAC;gBAC9B,gBAAgB,EAAE,CAAC;gBACnB,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;YACjD,CAAC;iBAAM,CAAC;gBACN,eAAe,CAAC,KAAK,EAAE,CAAC;gBACxB,UAAU,GAAG,IAAI,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,EAAE;QACnC,cAAc,GAAG,IAAI,CAAC;QACtB,YAAY,EAAE,CAAC;QACf,GAAG,CAAC,aAAa,EAAE,CAAC;IACtB,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,KAAK,GAAa;YACtB,iBAAiB;YACjB,KAAK,CAAC,YAAY;YAClB,KAAK,CAAC,MAAM,CAAC,QAAQ;SACtB,CAAC;QACF,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAC7E,CAAC;QACD,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,GAAG,EAAE,GAAoC,CAAC,CAAC;IAChE,MAAM,YAAY,GAAG,GAAG,EAAE,GAAG,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;IAE7C,mBAAmB;IAEnB,MAAM,WAAW,GAAG,CAAC,SAAc,EAAE,EAAE,GAAG,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,MAAM,YAAY,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAExE,MAAM,iBAAiB,GAAG,KAAK,IAAI,EAAE;QACnC,MAAM,EAAE,aAAa,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;QACnF,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC1E,IAAI,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAEhC,+CAA+C;QAC/C,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;QAClE,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,CAAC,SAAS,CAAC,oCAAoC,CAAC,CAAC;YACxD,GAAG,CAAC,aAAa,EAAE,CAAC;YACpB,MAAM,IAAI,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC9D,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;YACzC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACrC,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC/B,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,KAAK,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;SAC7E,CAAC,CAAC,CAAC;QAEJ,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE,EAAE,EAAE,eAAe,CAAC,CAAC;QACxD,IAAI,CAAC,QAAQ,GAAG,KAAK,EAAE,IAAI,EAAE,EAAE;YAC7B,YAAY,EAAE,CAAC;YACf,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,YAAY;gBAAE,OAAO;YAC9C,MAAM,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC;YACrF,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAClC,KAAK,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;YAC5B,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC;YAChC,OAAO,CAAC,SAAS,CAAC,eAAe,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAC/C,YAAY,EAAE,CAAC;YACf,YAAY,EAAE,CAAC;YACf,GAAG,CAAC,aAAa,EAAE,CAAC;QACtB,CAAC,CAAC;QACF,IAAI,CAAC,QAAQ,GAAG,GAAG,EAAE,CAAC,YAAY,EAAE,CAAC;QACrC,WAAW,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC,CAAC;IAEF,MAAM,mBAAmB,GAAG,GAAG,EAAE;QAC/B,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;QAChC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;YAClC,GAAG,CAAC,aAAa,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAC/B,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,CAAC;YACpD,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,MAAM,IAAI,EAAE,EAAE,CAAC;QACnF,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC;QACvD,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,EAAE,EAAE;YACvB,YAAY,EAAE,CAAC;YACf,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;YACvB,KAAK,CAAC,YAAY,GAAG,SAAS,CAAC;YAC/B,KAAK,CAAC,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACzC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;oBAC/B,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM;wBAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;yBAC7C,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW;wBAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;gBACxE,CAAC;YACH,CAAC;YACD,OAAO,CAAC,SAAS,CAAC,wBAAwB,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;YACvD,YAAY,EAAE,CAAC;YACf,YAAY,EAAE,CAAC;YACf,GAAG,CAAC,aAAa,EAAE,CAAC;QACtB,CAAC,CAAC;QACF,IAAI,CAAC,QAAQ,GAAG,GAAG,EAAE,CAAC,YAAY,EAAE,CAAC;QACrC,WAAW,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC,CAAC;IAEF,0BAA0B;IAE1B,MAAM,eAAe,GAAG,CAAC,GAAW,EAAE,EAAE;QACtC,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACpC,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,OAAO,CAAC,SAAS,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;QAClC,WAAW,CAAC,eAAe,CAAC,CAAC;QAC7B,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE;YAChC,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,GAAG,IAAI;SAC5D,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YAC1B,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAC5C,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAC5C,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,aAAa,CAAC,CAAC;YACnE,WAAW,CAAC,MAAM,CAAC,CAAC;YACpB,GAAG,CAAC,aAAa,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,wBAAwB;IAExB,MAAM,GAAG,GAAW;QAClB,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM;QAChD,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU;QACnD,WAAW,EAAE,YAAY;QACzB,eAAe;QACf,iBAAiB,EAAE,mBAAmB;KACvC,CAAC;IAEF,4BAA4B;IAE5B,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE;QACvB,IAAI,GAAQ,CAAC;QACb,IAAI,CAAC;YAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO;QAAC,CAAC;QAC3D,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QAClB,OAAO,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;QAC9C,WAAW,CAAC,cAAc,CAAC,CAAC;QAC5B,GAAG,CAAC,aAAa,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,wBAAwB;IAExB,MAAM,CAAC,QAAQ,GAAG,CAAC,IAAY,EAAE,EAAE;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC;QACjB,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACzB,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACnB,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAE3B,gCAAgC;QAChC,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAClD,IAAI,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC;gBAAE,OAAO;QAC9C,CAAC;QAED,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;YACvC,eAAe,CAAC,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,KAAK,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;QAED,0BAA0B;QAC1B,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACvB,WAAW,CAAC,UAAU,CAAC,CAAC;QACxB,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;QACtB,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC;QAC7B,MAAM,CAAC;YACL,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,KAAK,CAAC,GAAG;YAClB,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC;SAChE,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,CAAC,QAAQ,GAAG,GAAG,EAAE;QACrB,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1B,WAAW,CAAC,aAAa,CAAC,CAAC;IAC7B,CAAC,CAAC;IAEF,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE;QACpB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACnB,WAAW,CAAC,eAAe,CAAC,CAAC;YAC7B,GAAG,CAAC,aAAa,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,GAAG,GAAG,WAAW,GAAG,IAAI,EAAE,CAAC;YAC7B,GAAG,CAAC,IAAI,EAAE,CAAC;YACX,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,WAAW,GAAG,GAAG,CAAC;QAClB,WAAW,CAAC,4BAA4B,CAAC,CAAC;IAC5C,CAAC,CAAC;IAEF,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE;QACpB,KAAK,CAAC,aAAa,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC;QAC3C,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC9C,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAC1E,CAAC,CAAC;IACF,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,iBAAiB,EAAE,CAAC;IAC3C,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,mBAAmB,EAAE,CAAC;IAE7C,eAAe;IAEf,UAAU,EAAE,CAAC;IACb,WAAW,CAAC,MAAM,CAAC,CAAC;IAEpB,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM;gBAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;iBAC7C,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW;gBAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,kBAAkB,CAAC;YACjC,OAAO,EAAE,OAAO;YAChB,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ;YAClD,KAAK,EAAE,KAAK,CAAC,YAAY;YACzB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM;YAC3B,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ;YAC/B,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;YAClB,QAAQ;YACR,QAAQ,EAAE,KAAK,CAAC,eAAe;SAChC,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC;QAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED,GAAG,CAAC,KAAK,EAAE,CAAC;IACZ,GAAG,CAAC,aAAa,EAAE,CAAC;IAEpB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAClC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,154 @@
1
+ // TUI WebSocket message handler — processes gateway events
2
+ import { SelectList } from "@mariozechner/pi-tui";
3
+ import { formatUsageSummary } from "../usage.js";
4
+ export function handleWsMessage(ctx, msg) {
5
+ const { state, chatLog, tui, setActivity, updateHeader, updateFooter, openOverlay, closeOverlay, wsSend } = ctx;
6
+ switch (msg.type) {
7
+ case "init":
8
+ state.sdkSessionId = msg.sessionId;
9
+ break;
10
+ case "stream_text":
11
+ state.isThinking = false;
12
+ chatLog.appendAssistantText(msg.text);
13
+ setActivity("responding");
14
+ break;
15
+ case "thinking":
16
+ if (msg.state === "start") {
17
+ state.isThinking = true;
18
+ setActivity("thinking deeply...");
19
+ }
20
+ else {
21
+ state.isThinking = false;
22
+ }
23
+ break;
24
+ case "thinking_delta":
25
+ setActivity("thinking deeply...");
26
+ break;
27
+ case "chunk":
28
+ chatLog.updateAssistant(msg.text);
29
+ setActivity("thinking");
30
+ break;
31
+ case "approval_request": {
32
+ const approvalId = msg.id;
33
+ const toolName = msg.toolName;
34
+ const preview = msg.preview;
35
+ setActivity(`awaiting approval: ${toolName}`);
36
+ chatLog.addSystem(`${toolName}: ${preview}`);
37
+ const items = [
38
+ { value: "allow-once", label: "Allow once", description: "Run this time only" },
39
+ { value: "allow-always", label: "Always allow", description: "Add to allowlist" },
40
+ { value: "deny", label: "Deny", description: "Block this tool call" },
41
+ ];
42
+ const approvalList = new SelectList(items, 5, ctx.selectListTheme);
43
+ approvalList.onSelect = (item) => {
44
+ closeOverlay();
45
+ wsSend({ type: "approval.decide", id: approvalId, decision: item.value });
46
+ chatLog.addSystem(`-> ${item.label}`);
47
+ setActivity("thinking");
48
+ tui.requestRender();
49
+ };
50
+ approvalList.onCancel = () => {
51
+ closeOverlay();
52
+ wsSend({ type: "approval.decide", id: approvalId, decision: "deny" });
53
+ chatLog.addSystem("-> Denied (cancelled)");
54
+ setActivity("thinking");
55
+ tui.requestRender();
56
+ };
57
+ openOverlay(approvalList);
58
+ tui.requestRender();
59
+ break;
60
+ }
61
+ case "approval_resolved":
62
+ break;
63
+ case "tool_call": {
64
+ const id = msg.id ?? `tool-${++state.toolCounter}`;
65
+ chatLog.startTool(id, msg.name, msg.args);
66
+ setActivity(`running tool: ${msg.name}`);
67
+ break;
68
+ }
69
+ case "tool_result": {
70
+ const id = msg.id ?? `tool-${state.toolCounter}`;
71
+ chatLog.finishTool(id, msg.preview);
72
+ setActivity("thinking");
73
+ break;
74
+ }
75
+ case "subagent_start":
76
+ chatLog.addSystem(`Subagent started: ${msg.agentId}`);
77
+ setActivity(`subagent: ${msg.agentId}`);
78
+ break;
79
+ case "subagent_progress": {
80
+ const parts = [`subagent: ${msg.agentId}`];
81
+ if (msg.toolCount != null)
82
+ parts.push(`${msg.toolCount} tools`);
83
+ if (msg.duration != null)
84
+ parts.push(`${msg.duration}s`);
85
+ setActivity(parts.join(" | "));
86
+ break;
87
+ }
88
+ case "subagent_done":
89
+ chatLog.addSystem(`Subagent completed: ${msg.agentId}`);
90
+ setActivity("thinking");
91
+ break;
92
+ case "usage":
93
+ updateFooter();
94
+ break;
95
+ case "done": {
96
+ state.isThinking = false;
97
+ chatLog.finalizeAssistant(msg.response || "(no response)");
98
+ if (msg.sdkSessionId) {
99
+ state.sdkSessionId = msg.sdkSessionId;
100
+ }
101
+ if (state.pendingMessage) {
102
+ state.messages.push({ role: "user", content: state.pendingMessage });
103
+ state.pendingMessage = null;
104
+ }
105
+ if (msg.response) {
106
+ state.messages.push({ role: "assistant", content: msg.response });
107
+ }
108
+ updateFooter();
109
+ setActivity("idle");
110
+ break;
111
+ }
112
+ case "retry":
113
+ chatLog.addSystem(`Retrying (${msg.kind}, attempt ${msg.attempt + 1})...`);
114
+ break;
115
+ case "compacted":
116
+ chatLog.addSystem("(context compacted)");
117
+ break;
118
+ case "error":
119
+ state.isThinking = false;
120
+ chatLog.addSystem(`Error: ${msg.message}`);
121
+ setActivity("error");
122
+ break;
123
+ case "aborted":
124
+ state.isThinking = false;
125
+ chatLog.addSystem("Request aborted.");
126
+ setActivity("aborted");
127
+ break;
128
+ case "model.switched":
129
+ state.currentModel = msg.model;
130
+ state.currentThinking = msg.thinking;
131
+ if (msg.effort)
132
+ state.currentEffort = msg.effort;
133
+ state.sdkSessionId = undefined;
134
+ updateHeader();
135
+ updateFooter();
136
+ break;
137
+ case "sessions":
138
+ break;
139
+ case "status":
140
+ chatLog.addSystem([
141
+ `Session: ${msg.session}`,
142
+ `Model: ${msg.model}`,
143
+ `Provider: ${msg.provider}`,
144
+ `Messages: ${msg.messageCount}`,
145
+ `History: ~${msg.historyTokens?.toLocaleString()} tokens`,
146
+ msg.usage ? `Token usage: ${formatUsageSummary(msg.usage)} (${msg.usage.calls} API calls)` : null,
147
+ `Active runs: ${msg.activeRuns}`,
148
+ state.sdkSessionId ? `SDK session: ${state.sdkSessionId.slice(0, 12)}...` : null,
149
+ ].filter(Boolean).join("\n"));
150
+ break;
151
+ }
152
+ tui.requestRender();
153
+ }
154
+ //# sourceMappingURL=ws-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws-handler.js","sourceRoot":"","sources":["../../src/tui/ws-handler.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ // Shared types
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,eAAe"}