@chiwanpark/pi-squared-agent 0.1.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 (162) hide show
  1. package/README.md +13 -0
  2. package/dist/cli.d.ts +3 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +144 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/index.d.ts +11 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +11 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/runtime/auth-store.d.ts +36 -0
  11. package/dist/runtime/auth-store.d.ts.map +1 -0
  12. package/dist/runtime/auth-store.js +131 -0
  13. package/dist/runtime/auth-store.js.map +1 -0
  14. package/dist/runtime/config-store.d.ts +44 -0
  15. package/dist/runtime/config-store.d.ts.map +1 -0
  16. package/dist/runtime/config-store.js +138 -0
  17. package/dist/runtime/config-store.js.map +1 -0
  18. package/dist/runtime/messages.d.ts +12 -0
  19. package/dist/runtime/messages.d.ts.map +1 -0
  20. package/dist/runtime/messages.js +101 -0
  21. package/dist/runtime/messages.js.map +1 -0
  22. package/dist/runtime/model-resolver.d.ts +52 -0
  23. package/dist/runtime/model-resolver.d.ts.map +1 -0
  24. package/dist/runtime/model-resolver.js +175 -0
  25. package/dist/runtime/model-resolver.js.map +1 -0
  26. package/dist/runtime/pi-agent.d.ts +83 -0
  27. package/dist/runtime/pi-agent.d.ts.map +1 -0
  28. package/dist/runtime/pi-agent.js +405 -0
  29. package/dist/runtime/pi-agent.js.map +1 -0
  30. package/dist/runtime/status-store.d.ts +50 -0
  31. package/dist/runtime/status-store.d.ts.map +1 -0
  32. package/dist/runtime/status-store.js +65 -0
  33. package/dist/runtime/status-store.js.map +1 -0
  34. package/dist/runtime/system-prompt.d.ts +11 -0
  35. package/dist/runtime/system-prompt.d.ts.map +1 -0
  36. package/dist/runtime/system-prompt.js +43 -0
  37. package/dist/runtime/system-prompt.js.map +1 -0
  38. package/dist/runtime/tools/bash.d.ts +23 -0
  39. package/dist/runtime/tools/bash.d.ts.map +1 -0
  40. package/dist/runtime/tools/bash.js +206 -0
  41. package/dist/runtime/tools/bash.js.map +1 -0
  42. package/dist/runtime/tools/child-process.d.ts +13 -0
  43. package/dist/runtime/tools/child-process.d.ts.map +1 -0
  44. package/dist/runtime/tools/child-process.js +75 -0
  45. package/dist/runtime/tools/child-process.js.map +1 -0
  46. package/dist/runtime/tools/output-accumulator.d.ts +52 -0
  47. package/dist/runtime/tools/output-accumulator.d.ts.map +1 -0
  48. package/dist/runtime/tools/output-accumulator.js +160 -0
  49. package/dist/runtime/tools/output-accumulator.js.map +1 -0
  50. package/dist/runtime/tools/shell.d.ts +26 -0
  51. package/dist/runtime/tools/shell.d.ts.map +1 -0
  52. package/dist/runtime/tools/shell.js +116 -0
  53. package/dist/runtime/tools/shell.js.map +1 -0
  54. package/dist/runtime/tools/truncate.d.ts +38 -0
  55. package/dist/runtime/tools/truncate.d.ts.map +1 -0
  56. package/dist/runtime/tools/truncate.js +98 -0
  57. package/dist/runtime/tools/truncate.js.map +1 -0
  58. package/dist/tools/bash/child-process.d.ts +13 -0
  59. package/dist/tools/bash/child-process.d.ts.map +1 -0
  60. package/dist/tools/bash/child-process.js +79 -0
  61. package/dist/tools/bash/child-process.js.map +1 -0
  62. package/dist/tools/bash/output-accumulator.d.ts +54 -0
  63. package/dist/tools/bash/output-accumulator.d.ts.map +1 -0
  64. package/dist/tools/bash/output-accumulator.js +171 -0
  65. package/dist/tools/bash/output-accumulator.js.map +1 -0
  66. package/dist/tools/bash/shell.d.ts +26 -0
  67. package/dist/tools/bash/shell.d.ts.map +1 -0
  68. package/dist/tools/bash/shell.js +129 -0
  69. package/dist/tools/bash/shell.js.map +1 -0
  70. package/dist/tools/bash/tool.d.ts +23 -0
  71. package/dist/tools/bash/tool.d.ts.map +1 -0
  72. package/dist/tools/bash/tool.js +219 -0
  73. package/dist/tools/bash/tool.js.map +1 -0
  74. package/dist/tools/bash/truncate.d.ts +50 -0
  75. package/dist/tools/bash/truncate.d.ts.map +1 -0
  76. package/dist/tools/bash/truncate.js +184 -0
  77. package/dist/tools/bash/truncate.js.map +1 -0
  78. package/dist/tools/external-tool.d.ts +2 -0
  79. package/dist/tools/external-tool.d.ts.map +1 -0
  80. package/dist/tools/external-tool.js +15 -0
  81. package/dist/tools/external-tool.js.map +1 -0
  82. package/dist/tools/file/edit-diff.d.ts +27 -0
  83. package/dist/tools/file/edit-diff.d.ts.map +1 -0
  84. package/dist/tools/file/edit-diff.js +196 -0
  85. package/dist/tools/file/edit-diff.js.map +1 -0
  86. package/dist/tools/file/edit.d.ts +26 -0
  87. package/dist/tools/file/edit.d.ts.map +1 -0
  88. package/dist/tools/file/edit.js +106 -0
  89. package/dist/tools/file/edit.js.map +1 -0
  90. package/dist/tools/file/find.d.ts +27 -0
  91. package/dist/tools/file/find.d.ts.map +1 -0
  92. package/dist/tools/file/find.js +150 -0
  93. package/dist/tools/file/find.js.map +1 -0
  94. package/dist/tools/file/glob.d.ts +6 -0
  95. package/dist/tools/file/glob.d.ts.map +1 -0
  96. package/dist/tools/file/glob.js +50 -0
  97. package/dist/tools/file/glob.js.map +1 -0
  98. package/dist/tools/file/grep.d.ts +29 -0
  99. package/dist/tools/file/grep.d.ts.map +1 -0
  100. package/dist/tools/file/grep.js +220 -0
  101. package/dist/tools/file/grep.js.map +1 -0
  102. package/dist/tools/file/index.d.ts +7 -0
  103. package/dist/tools/file/index.d.ts.map +1 -0
  104. package/dist/tools/file/index.js +7 -0
  105. package/dist/tools/file/index.js.map +1 -0
  106. package/dist/tools/file/ls.d.ts +27 -0
  107. package/dist/tools/file/ls.d.ts.map +1 -0
  108. package/dist/tools/file/ls.js +82 -0
  109. package/dist/tools/file/ls.js.map +1 -0
  110. package/dist/tools/file/read.d.ts +23 -0
  111. package/dist/tools/file/read.d.ts.map +1 -0
  112. package/dist/tools/file/read.js +98 -0
  113. package/dist/tools/file/read.js.map +1 -0
  114. package/dist/tools/file/write.d.ts +17 -0
  115. package/dist/tools/file/write.d.ts.map +1 -0
  116. package/dist/tools/file/write.js +45 -0
  117. package/dist/tools/file/write.js.map +1 -0
  118. package/dist/tools/file-mutation-queue.d.ts +3 -0
  119. package/dist/tools/file-mutation-queue.d.ts.map +1 -0
  120. package/dist/tools/file-mutation-queue.js +47 -0
  121. package/dist/tools/file-mutation-queue.js.map +1 -0
  122. package/dist/tools/path-utils.d.ts +5 -0
  123. package/dist/tools/path-utils.d.ts.map +1 -0
  124. package/dist/tools/path-utils.js +79 -0
  125. package/dist/tools/path-utils.js.map +1 -0
  126. package/dist/tools/web/index.d.ts +2 -0
  127. package/dist/tools/web/index.d.ts.map +1 -0
  128. package/dist/tools/web/index.js +2 -0
  129. package/dist/tools/web/index.js.map +1 -0
  130. package/dist/tools/web/search.d.ts +44 -0
  131. package/dist/tools/web/search.d.ts.map +1 -0
  132. package/dist/tools/web/search.js +209 -0
  133. package/dist/tools/web/search.js.map +1 -0
  134. package/dist/tui/box.d.ts +11 -0
  135. package/dist/tui/box.d.ts.map +1 -0
  136. package/dist/tui/box.js +24 -0
  137. package/dist/tui/box.js.map +1 -0
  138. package/dist/tui/chat-screen.d.ts +29 -0
  139. package/dist/tui/chat-screen.d.ts.map +1 -0
  140. package/dist/tui/chat-screen.js +475 -0
  141. package/dist/tui/chat-screen.js.map +1 -0
  142. package/dist/tui/commands.d.ts +34 -0
  143. package/dist/tui/commands.d.ts.map +1 -0
  144. package/dist/tui/commands.js +691 -0
  145. package/dist/tui/commands.js.map +1 -0
  146. package/dist/tui/interactive.d.ts +9 -0
  147. package/dist/tui/interactive.d.ts.map +1 -0
  148. package/dist/tui/interactive.js +88 -0
  149. package/dist/tui/interactive.js.map +1 -0
  150. package/dist/tui/overlays.d.ts +39 -0
  151. package/dist/tui/overlays.d.ts.map +1 -0
  152. package/dist/tui/overlays.js +157 -0
  153. package/dist/tui/overlays.js.map +1 -0
  154. package/dist/tui/theme.d.ts +40 -0
  155. package/dist/tui/theme.d.ts.map +1 -0
  156. package/dist/tui/theme.js +120 -0
  157. package/dist/tui/theme.js.map +1 -0
  158. package/dist/tui/welcome.d.ts +3 -0
  159. package/dist/tui/welcome.d.ts.map +1 -0
  160. package/dist/tui/welcome.js +37 -0
  161. package/dist/tui/welcome.js.map +1 -0
  162. package/package.json +54 -0
@@ -0,0 +1,475 @@
1
+ import { homedir } from "node:os";
2
+ import { Editor, Markdown, truncateToWidth, visibleWidth, wrapTextWithAnsi, } from "@earendil-works/pi-tui";
3
+ import { contentToText, isAssistantError, messageRole, messageToMarkdownBlocks } from "../runtime/messages.js";
4
+ import { applyEditorSurfaceBackground, editorTheme, markdownTheme, style } from "./theme.js";
5
+ import { renderWelcome } from "./welcome.js";
6
+ export class ChatScreen {
7
+ tui;
8
+ runtime;
9
+ editor;
10
+ panel = null;
11
+ messageRenderCache = null;
12
+ errorRenderCache = null;
13
+ panelProxy = {
14
+ render: () => [],
15
+ handleInput: (data) => this.panel?.handleInput(data),
16
+ invalidate: () => this.panel?.invalidate(),
17
+ };
18
+ constructor(tui, runtime, options) {
19
+ this.tui = tui;
20
+ this.runtime = runtime;
21
+ this.editor = new Editor(tui, { ...editorTheme }, { paddingX: 1 });
22
+ this.editor.onSubmit = (text) => options.onSubmit(text);
23
+ }
24
+ setPanel(panel) {
25
+ this.panel = panel;
26
+ this.tui.setFocus(panel ? this.panelProxy : this.editor);
27
+ this.tui.requestRender(true);
28
+ }
29
+ render(width) {
30
+ const safeWidth = Math.max(1, width);
31
+ const snapshot = this.runtime.status.getSnapshot();
32
+ this.editor.disableSubmit = snapshot.phase === "streaming" || snapshot.phase === "aborting";
33
+ this.editor.borderColor = (text) => EDITOR_BORDER_MARKER + text.replace(/./g, " ");
34
+ const editorLines = this.editor
35
+ .render(safeWidth)
36
+ .map((line) => (line.includes(EDITOR_BORDER_MARKER) ? "" : line))
37
+ .map((line) => applyEditorSurfaceBackground(line, safeWidth));
38
+ if (isSlashCommandMenuOpen(this.editor)) {
39
+ editorLines.push(applyEditorSurfaceBackground("", safeWidth));
40
+ }
41
+ const footer = this.renderFooter(safeWidth, snapshot);
42
+ const messageLines = this.renderMessages(safeWidth, snapshot);
43
+ const errorLines = this.renderError(safeWidth, snapshot.lastError);
44
+ const panelLines = this.panel
45
+ ? this.panel.render(safeWidth).map((line) => truncateToWidth(line, safeWidth, ""))
46
+ : [];
47
+ const aboveEditorPanelLines = this.panel?.placement === "belowEditor" ? [] : panelLines;
48
+ const belowEditorPanelLines = this.panel?.placement === "belowEditor" ? panelLines : [];
49
+ // Emit the full message history rather than slicing to the visible viewport.
50
+ // Truncating here would prevent older lines from ever being written to the
51
+ // terminal, leaving tmux (and other terminals' native scrollback) with
52
+ // nothing to scroll. The underlying TUI handles natural terminal scrolling
53
+ // when total content exceeds the terminal height, pushing older lines into
54
+ // the scrollback buffer where the user (and tmux copy mode) can reach them.
55
+ //
56
+ // The transcript is cached by status timestamp so plain editor input does
57
+ // not re-run Markdown/tool-output rendering for the entire history on every
58
+ // keystroke. Keep per-section truncation instead of a final whole-screen map
59
+ // to avoid walking huge transcripts just because the input line changed.
60
+ return [
61
+ ...messageLines,
62
+ ...errorLines,
63
+ ...aboveEditorPanelLines,
64
+ ...editorLines,
65
+ ...belowEditorPanelLines,
66
+ ...footer,
67
+ "",
68
+ ];
69
+ }
70
+ handleInput(data) {
71
+ this.editor.handleInput(data);
72
+ }
73
+ invalidate() {
74
+ this.messageRenderCache = null;
75
+ this.errorRenderCache = null;
76
+ this.editor.invalidate();
77
+ }
78
+ renderFooter(width, snapshot) {
79
+ const provider = snapshot.model.provider;
80
+ const model = snapshot.model.id;
81
+ const thinking = ` ${snapshot.thinkingLevel}`;
82
+ const cwd = formatCwd(this.runtime.getCwd());
83
+ const phase = formatPhase(snapshot.phase);
84
+ const contextWindow = renderContextWindowUsage(snapshot);
85
+ const contextPart = contextWindow ? ` ${style.gray("·")} ${contextWindow}` : "";
86
+ const title = `${style.gray("(")}${style.gray(provider)}${style.gray(")")} ${style.bold(style.white(model))}${style.gray(thinking)} ${style.gray("·")} ${style.gray(cwd)}${contextPart} ${style.gray("·")} ${phase}`;
87
+ return [truncateToWidth(title, width, "")];
88
+ }
89
+ renderError(width, error) {
90
+ const cached = this.errorRenderCache;
91
+ if (cached && cached.width === width && cached.error === error) {
92
+ return cached.lines;
93
+ }
94
+ const lines = error ? wrapWithPrefix(style.red("error: "), error, width) : [];
95
+ this.errorRenderCache = { width, error, lines };
96
+ return lines;
97
+ }
98
+ renderMessages(width, snapshot) {
99
+ const cached = this.messageRenderCache;
100
+ if (cached && cached.width === width && cached.updatedAt === snapshot.updatedAt) {
101
+ return cached.lines;
102
+ }
103
+ const lines = [];
104
+ const toolCalls = new Map();
105
+ for (const message of snapshot.messages) {
106
+ lines.push(...renderMessage(message, width, false, toolCalls));
107
+ collectBashToolCalls(message, toolCalls);
108
+ }
109
+ if (snapshot.streamingMessage) {
110
+ lines.push(...renderMessage(snapshot.streamingMessage, width, true, toolCalls));
111
+ }
112
+ const renderedLines = [...renderWelcome(width, snapshot, this.runtime.getCwd()), ...lines].map((line) => truncateToWidth(line, width, ""));
113
+ this.messageRenderCache = { width, updatedAt: snapshot.updatedAt, lines: renderedLines };
114
+ return renderedLines;
115
+ }
116
+ }
117
+ function isSlashCommandMenuOpen(editor) {
118
+ if (!editor.isShowingAutocomplete())
119
+ return false;
120
+ const cursor = editor.getCursor();
121
+ const line = editor.getLines()[cursor.line] ?? "";
122
+ const textBeforeCursor = line.slice(0, cursor.col);
123
+ return textBeforeCursor.startsWith("/") && !textBeforeCursor.includes(" ");
124
+ }
125
+ function formatPhase(phase) {
126
+ switch (phase) {
127
+ case "idle":
128
+ return style.green("idle");
129
+ case "streaming":
130
+ return style.yellow("responding");
131
+ case "aborting":
132
+ return style.yellow("aborting");
133
+ case "error":
134
+ return style.red("error");
135
+ default:
136
+ return phase;
137
+ }
138
+ }
139
+ function formatCwd(cwd) {
140
+ const home = homedir();
141
+ if (cwd === home)
142
+ return "~";
143
+ if (cwd.startsWith(home + "/"))
144
+ return "~" + cwd.slice(home.length);
145
+ return cwd;
146
+ }
147
+ function renderContextWindowUsage(snapshot) {
148
+ const contextWindow = snapshot.model.contextWindow;
149
+ if (!Number.isFinite(contextWindow) || contextWindow <= 0)
150
+ return undefined;
151
+ const messages = snapshot.streamingMessage ? [...snapshot.messages, snapshot.streamingMessage] : snapshot.messages;
152
+ const usedTokens = estimateContextTokens(messages);
153
+ const percent = Math.round((usedTokens / contextWindow) * 100);
154
+ const percentage = styleContextUsagePercentage(`${percent}%`, percent);
155
+ return `${percentage}${style.gray(" used")} ${style.gray(`(${formatTokenCount(usedTokens)} / ${formatTokenCount(contextWindow)})`)}`;
156
+ }
157
+ function styleContextUsagePercentage(text, percent) {
158
+ if (percent >= 90)
159
+ return style.red(text);
160
+ if (percent >= 70)
161
+ return style.yellow(text);
162
+ return style.green(text);
163
+ }
164
+ function formatTokenCount(count) {
165
+ const safeCount = Math.max(0, Math.round(count));
166
+ if (safeCount < 1000)
167
+ return String(safeCount);
168
+ if (safeCount < 10_000)
169
+ return `${(safeCount / 1000).toFixed(1).replace(/\.0$/, "")}K`;
170
+ if (safeCount < 1_000_000)
171
+ return `${Math.round(safeCount / 1000)}K`;
172
+ if (safeCount < 10_000_000)
173
+ return `${(safeCount / 1_000_000).toFixed(1).replace(/\.0$/, "")}M`;
174
+ return `${Math.round(safeCount / 1_000_000)}M`;
175
+ }
176
+ function estimateContextTokens(messages) {
177
+ const usageInfo = getLastAssistantUsageInfo(messages);
178
+ if (!usageInfo)
179
+ return messages.reduce((total, message) => total + estimateMessageTokens(message), 0);
180
+ const usageTokens = calculateUsageTokens(usageInfo.usage);
181
+ const trailingTokens = messages
182
+ .slice(usageInfo.index + 1)
183
+ .reduce((total, message) => total + estimateMessageTokens(message), 0);
184
+ return usageTokens + trailingTokens;
185
+ }
186
+ function getLastAssistantUsageInfo(messages) {
187
+ for (let index = messages.length - 1; index >= 0; index--) {
188
+ const usage = getAssistantUsage(messages[index]);
189
+ if (usage)
190
+ return { usage, index };
191
+ }
192
+ return undefined;
193
+ }
194
+ function getAssistantUsage(message) {
195
+ if (!isRecord(message) || message.role !== "assistant" || !isRecord(message.usage))
196
+ return undefined;
197
+ if (message.stopReason === "aborted" || message.stopReason === "error")
198
+ return undefined;
199
+ const usage = message.usage;
200
+ const input = numberField(usage.input);
201
+ const output = numberField(usage.output);
202
+ const cacheRead = numberField(usage.cacheRead);
203
+ const cacheWrite = numberField(usage.cacheWrite);
204
+ const totalTokens = numberField(usage.totalTokens);
205
+ if ([input, output, cacheRead, cacheWrite, totalTokens].every((value) => value === undefined))
206
+ return undefined;
207
+ const usageLike = {
208
+ input: input ?? 0,
209
+ output: output ?? 0,
210
+ cacheRead: cacheRead ?? 0,
211
+ cacheWrite: cacheWrite ?? 0,
212
+ totalTokens: totalTokens ?? 0,
213
+ };
214
+ // Streaming partial assistant messages are initialized with a zero-filled
215
+ // usage object. Treating that as authoritative makes the footer show
216
+ // 0 / limit until the final usage arrives; ignore it so we keep using the
217
+ // previous completed usage plus estimated trailing messages while streaming.
218
+ if (calculateUsageTokens(usageLike) <= 0)
219
+ return undefined;
220
+ return usageLike;
221
+ }
222
+ function calculateUsageTokens(usage) {
223
+ return usage.totalTokens || usage.input + usage.output + usage.cacheRead + usage.cacheWrite;
224
+ }
225
+ function numberField(value) {
226
+ return typeof value === "number" && Number.isFinite(value) ? value : undefined;
227
+ }
228
+ function estimateMessageTokens(message) {
229
+ return Math.ceil(estimateMessageChars(message) / 4);
230
+ }
231
+ function estimateMessageChars(message) {
232
+ if (!isRecord(message))
233
+ return safeStringify(message).length;
234
+ switch (message.role) {
235
+ case "user":
236
+ case "toolResult":
237
+ return estimateContentChars(message.content);
238
+ case "assistant":
239
+ return (estimateAssistantContentChars(message.content) +
240
+ (typeof message.errorMessage === "string" ? message.errorMessage.length : 0));
241
+ default:
242
+ return typeof message.content === "string" || Array.isArray(message.content)
243
+ ? estimateContentChars(message.content)
244
+ : safeStringify(message).length;
245
+ }
246
+ }
247
+ function estimateContentChars(content) {
248
+ if (typeof content === "string")
249
+ return content.length;
250
+ if (!Array.isArray(content))
251
+ return 0;
252
+ return content.reduce((total, block) => total + estimateContentBlockChars(block), 0);
253
+ }
254
+ function estimateAssistantContentChars(content) {
255
+ if (typeof content === "string")
256
+ return content.length;
257
+ if (!Array.isArray(content))
258
+ return 0;
259
+ return content.reduce((total, block) => total + estimateAssistantContentBlockChars(block), 0);
260
+ }
261
+ function estimateContentBlockChars(block) {
262
+ if (!isRecord(block))
263
+ return 0;
264
+ if (block.type === "text" && typeof block.text === "string")
265
+ return block.text.length;
266
+ if (block.type === "image")
267
+ return 4800;
268
+ return 0;
269
+ }
270
+ function estimateAssistantContentBlockChars(block) {
271
+ if (!isRecord(block))
272
+ return 0;
273
+ if (block.type === "text" && typeof block.text === "string")
274
+ return block.text.length;
275
+ if (block.type === "thinking" && typeof block.thinking === "string")
276
+ return block.thinking.length;
277
+ if (block.type === "toolCall")
278
+ return String(block.name ?? "").length + safeStringify(block.arguments).length;
279
+ return estimateContentBlockChars(block);
280
+ }
281
+ function safeStringify(value) {
282
+ try {
283
+ return JSON.stringify(value) ?? "";
284
+ }
285
+ catch {
286
+ return String(value);
287
+ }
288
+ }
289
+ const BLOCK_PADDING_Y = 1;
290
+ const TOOL_RESULT_PADDING_X = 1;
291
+ const EDITOR_BORDER_MARKER = "\u001b]pi-squared:editor-border\u0007";
292
+ function isRecord(value) {
293
+ return typeof value === "object" && value !== null;
294
+ }
295
+ function renderMessage(message, width, streaming = false, toolCalls = new Map()) {
296
+ const role = messageRole(message);
297
+ if (role === "toolResult")
298
+ return renderToolResult(message, width, toolCalls);
299
+ const error = isAssistantError(message);
300
+ const blocks = messageToMarkdownBlocks(message);
301
+ if (streaming && blocks.length === 0) {
302
+ blocks.push({ kind: "message", text: "…" });
303
+ }
304
+ else if (streaming && blocks.length > 0) {
305
+ const last = blocks[blocks.length - 1];
306
+ if (last.text.trim().length === 0)
307
+ last.text = "…";
308
+ }
309
+ const lines = [];
310
+ for (const block of blocks) {
311
+ lines.push(...renderMarkdownBlock(block.text, width, blockStyle(role, block.kind, error)));
312
+ }
313
+ return lines;
314
+ }
315
+ function collectBashToolCalls(message, toolCalls) {
316
+ if (!isRecord(message) || message.role !== "assistant" || !Array.isArray(message.content))
317
+ return;
318
+ for (const block of message.content) {
319
+ if (!isRecord(block) || block.type !== "toolCall" || typeof block.name !== "string" || typeof block.id !== "string")
320
+ continue;
321
+ const args = isRecord(block.arguments) ? block.arguments : undefined;
322
+ const timeout = typeof args?.timeout === "number" ? args.timeout : undefined;
323
+ toolCalls.set(block.id, { name: block.name, summary: summarizeToolCall(block.name, args), timeout });
324
+ }
325
+ }
326
+ function renderToolResult(message, width, toolCalls) {
327
+ const toolCallId = isRecord(message) && typeof message.toolCallId === "string" ? message.toolCallId : undefined;
328
+ const toolName = isRecord(message) && typeof message.toolName === "string" ? message.toolName : "tool";
329
+ const call = toolCallId ? toolCalls.get(toolCallId) : undefined;
330
+ const label = call?.name ?? toolName;
331
+ const command = sanitizeToolResultText(call?.summary ?? toolName).replace(/\n+$/, "") || toolName;
332
+ const timeout = call?.timeout === undefined ? undefined : String(call.timeout);
333
+ const output = sanitizeToolResultText(isRecord(message) ? contentToText(message.content) : "");
334
+ const contentLines = [
335
+ ...renderToolResultHeader(label, command, timeout),
336
+ "",
337
+ ...styleMultiline(output || "(no output)", style.gray),
338
+ ];
339
+ const paddingLine = applyLineBackground("", width, style.bgTool);
340
+ return [
341
+ ...Array.from({ length: BLOCK_PADDING_Y }, () => paddingLine),
342
+ ...contentLines.map((line) => applyToolResultLineBackground(line, width)),
343
+ ...Array.from({ length: BLOCK_PADDING_Y }, () => paddingLine),
344
+ ];
345
+ }
346
+ function renderToolResultHeader(label, command, timeout) {
347
+ const commandLines = command.split("\n");
348
+ const lastIndex = commandLines.length - 1;
349
+ return commandLines.map((line, index) => {
350
+ const prefix = index === 0 ? `${style.bold(style.toolTitle(label))} ` : " ".repeat(label.length + 1);
351
+ const suffix = index === lastIndex && timeout !== undefined ? ` ${style.gray(`(timeout: ${timeout})`)}` : "";
352
+ return `${prefix}${style.toolTitle(line.length > 0 ? line : " ")}${suffix}`;
353
+ });
354
+ }
355
+ function summarizeToolCall(name, args) {
356
+ if (!args)
357
+ return name;
358
+ if (name === "bash" && typeof args.command === "string")
359
+ return args.command;
360
+ if ((name === "read" || name === "write" || name === "edit" || name === "ls") && typeof args.path === "string") {
361
+ return args.path;
362
+ }
363
+ if (name === "find" && typeof args.pattern === "string") {
364
+ return `${args.pattern}${typeof args.path === "string" ? ` in ${args.path}` : ""}`;
365
+ }
366
+ if (name === "grep" && typeof args.pattern === "string") {
367
+ return `/${args.pattern}/${typeof args.path === "string" ? ` in ${args.path}` : ""}`;
368
+ }
369
+ try {
370
+ return JSON.stringify(args);
371
+ }
372
+ catch {
373
+ return name;
374
+ }
375
+ }
376
+ function sanitizeToolResultText(text) {
377
+ return stripAnsiEscapeCodes(text)
378
+ .replace(/\r\n/g, "\n")
379
+ .replace(/\r/g, "\n")
380
+ .replace(/\t/g, " ")
381
+ .replace(/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f-\u009f]/g, "");
382
+ }
383
+ function stripAnsiEscapeCodes(text) {
384
+ let result = "";
385
+ let index = 0;
386
+ while (index < text.length) {
387
+ const escapeLength = ansiEscapeSequenceLength(text, index);
388
+ if (escapeLength > 0) {
389
+ index += escapeLength;
390
+ continue;
391
+ }
392
+ result += text[index];
393
+ index++;
394
+ }
395
+ return result;
396
+ }
397
+ function ansiEscapeSequenceLength(text, index) {
398
+ const char = text[index];
399
+ if (char === "\u009b")
400
+ return controlSequenceLength(text, index + 1, index);
401
+ if (char !== "\u001b")
402
+ return 0;
403
+ const next = text[index + 1];
404
+ if (!next)
405
+ return 1;
406
+ if (next === "[")
407
+ return controlSequenceLength(text, index + 2, index);
408
+ if (next === "]" || next === "_" || next === "P" || next === "^") {
409
+ for (let cursor = index + 2; cursor < text.length; cursor++) {
410
+ if (text[cursor] === "\u0007")
411
+ return cursor + 1 - index;
412
+ if (text[cursor] === "\u001b" && text[cursor + 1] === "\\")
413
+ return cursor + 2 - index;
414
+ }
415
+ return text.length - index;
416
+ }
417
+ if (/[\x40-\x5f]/.test(next))
418
+ return 2;
419
+ return 1;
420
+ }
421
+ function controlSequenceLength(text, cursor, start) {
422
+ while (cursor < text.length) {
423
+ const code = text.charCodeAt(cursor);
424
+ if (code >= 0x40 && code <= 0x7e)
425
+ return cursor + 1 - start;
426
+ cursor++;
427
+ }
428
+ return text.length - start;
429
+ }
430
+ function styleMultiline(text, color) {
431
+ return text.split("\n").map((line) => color(line.length > 0 ? line : " "));
432
+ }
433
+ function applyToolResultLineBackground(line, width) {
434
+ return applyLineBackground(`${" ".repeat(TOOL_RESULT_PADDING_X)}${line}`, width, style.bgTool);
435
+ }
436
+ function applyLineBackground(line, width, bgColor) {
437
+ const truncated = truncateToWidth(line, width, "");
438
+ const padding = " ".repeat(Math.max(0, width - visibleWidth(truncated)));
439
+ return bgColor(truncated + padding);
440
+ }
441
+ function renderMarkdownBlock(text, width, defaultTextStyle) {
442
+ const markdown = new Markdown(text, 1, BLOCK_PADDING_Y, markdownTheme, defaultTextStyle);
443
+ return markdown.render(width);
444
+ }
445
+ function blockStyle(role, kind, error) {
446
+ if (error)
447
+ return { bgColor: style.bgError, color: style.red };
448
+ if (kind === "thinking")
449
+ return { bgColor: style.bgThinking, color: style.gray, italic: true };
450
+ switch (role) {
451
+ case "user":
452
+ return { bgColor: style.bgUser, color: style.text };
453
+ case "assistant":
454
+ return { bgColor: style.bgAssistant, color: style.text };
455
+ case "toolResult":
456
+ return { bgColor: style.bgTool, color: style.text };
457
+ default:
458
+ return { bgColor: style.bgCustom, color: style.text };
459
+ }
460
+ }
461
+ function wrapWithPrefix(prefix, text, width) {
462
+ const prefixWidth = visibleWidth(prefix);
463
+ const continuation = " ".repeat(prefixWidth);
464
+ const bodyWidth = Math.max(1, width - prefixWidth);
465
+ const lines = [];
466
+ const sourceLines = text.split("\n");
467
+ for (const sourceLine of sourceLines) {
468
+ const wrapped = wrapTextWithAnsi(sourceLine.length > 0 ? sourceLine : " ", bodyWidth);
469
+ for (const chunk of wrapped.length > 0 ? wrapped : [""]) {
470
+ lines.push(`${lines.length === 0 ? prefix : continuation}${chunk}`);
471
+ }
472
+ }
473
+ return lines.map((line) => truncateToWidth(line, width, ""));
474
+ }
475
+ //# sourceMappingURL=chat-screen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-screen.js","sourceRoot":"","sources":["../../src/tui/chat-screen.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { OAuthCredentials } from "@earendil-works/pi-ai";
2
+ import type { SlashCommand, TUI } from "@earendil-works/pi-tui";
3
+ import type { AuthStore } from "../runtime/auth-store.js";
4
+ import type { ConfigStore } from "../runtime/config-store.js";
5
+ import type { ChatScreen } from "./chat-screen.js";
6
+ import type { PiSquaredAgentRuntime } from "../runtime/pi-agent.js";
7
+ export interface CommandContext {
8
+ tui: TUI;
9
+ screen: ChatScreen;
10
+ runtime: PiSquaredAgentRuntime;
11
+ /** Request the interactive loop to stop and exit. */
12
+ requestExit: () => void;
13
+ }
14
+ export interface CommandDefinition {
15
+ command: SlashCommand;
16
+ execute(args: string, ctx: CommandContext): Promise<void>;
17
+ }
18
+ export interface ParsedCommand {
19
+ name: string;
20
+ args: string;
21
+ }
22
+ export declare function parseSlashCommand(text: string): ParsedCommand | null;
23
+ /**
24
+ * Build the slash command registry. Returns both the commands the editor
25
+ * autocomplete uses and the handler map for dispatching submitted commands.
26
+ */
27
+ export declare function createCommands(authStore?: AuthStore, configStore?: ConfigStore): CommandDefinition[];
28
+ export interface CommandRegistry {
29
+ commands: SlashCommand[];
30
+ execute(text: string, ctx: CommandContext): Promise<boolean>;
31
+ }
32
+ export declare function buildRegistry(definitions?: CommandDefinition[]): CommandRegistry;
33
+ export type { OAuthCredentials };
34
+ //# sourceMappingURL=commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/tui/commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,gBAAgB,EAKjB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,KAAK,EAAoB,YAAY,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAIlF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAyB,MAAM,4BAA4B,CAAC;AACrF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAmBpE,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,GAAG,CAAC;IACT,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,qBAAqB,CAAC;IAC/B,qDAAqD;IACrD,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3D;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAOpE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,iBAAiB,EAAE,CAapG;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9D;AAED,wBAAgB,aAAa,CAAC,WAAW,GAAE,iBAAiB,EAAqB,GAAG,eAAe,CAsBlG;AAwqBD,YAAY,EAAE,gBAAgB,EAAE,CAAC"}