@redplanethq/corebrain 2.8.6 → 2.8.10

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 (72) hide show
  1. package/dist/commands/coding/read.d.ts +0 -3
  2. package/dist/commands/coding/read.d.ts.map +1 -1
  3. package/dist/commands/coding/read.js +15 -14
  4. package/dist/commands/coding/read.js.map +1 -1
  5. package/dist/server/tools/coding-tools.d.ts.map +1 -1
  6. package/dist/server/tools/coding-tools.js +52 -24
  7. package/dist/server/tools/coding-tools.js.map +1 -1
  8. package/dist/tui/chat.d.ts.map +1 -1
  9. package/dist/tui/chat.js +162 -59
  10. package/dist/tui/chat.js.map +1 -1
  11. package/dist/tui/components/approval-bar.d.ts +14 -0
  12. package/dist/tui/components/approval-bar.d.ts.map +1 -0
  13. package/dist/tui/components/approval-bar.js +32 -0
  14. package/dist/tui/components/approval-bar.js.map +1 -0
  15. package/dist/tui/components/approval-panel.d.ts +31 -0
  16. package/dist/tui/components/approval-panel.d.ts.map +1 -0
  17. package/dist/tui/components/approval-panel.js +184 -0
  18. package/dist/tui/components/approval-panel.js.map +1 -0
  19. package/dist/tui/components/dashboard-view.js +1 -1
  20. package/dist/tui/components/dashboard-view.js.map +1 -1
  21. package/dist/tui/components/status-line.d.ts +2 -0
  22. package/dist/tui/components/status-line.d.ts.map +1 -1
  23. package/dist/tui/components/status-line.js +12 -3
  24. package/dist/tui/components/status-line.js.map +1 -1
  25. package/dist/tui/components/tool-call-item.d.ts +26 -0
  26. package/dist/tui/components/tool-call-item.d.ts.map +1 -1
  27. package/dist/tui/components/tool-call-item.js +53 -3
  28. package/dist/tui/components/tool-call-item.js.map +1 -1
  29. package/dist/tui/components/widgets-view.js +3 -3
  30. package/dist/tui/components/widgets-view.js.map +1 -1
  31. package/dist/tui/hooks/use-conversation.d.ts +2 -0
  32. package/dist/tui/hooks/use-conversation.d.ts.map +1 -1
  33. package/dist/tui/hooks/use-conversation.js +313 -122
  34. package/dist/tui/hooks/use-conversation.js.map +1 -1
  35. package/dist/tui/utils/avatar.d.ts +27 -0
  36. package/dist/tui/utils/avatar.d.ts.map +1 -0
  37. package/dist/tui/utils/avatar.js +96 -0
  38. package/dist/tui/utils/avatar.js.map +1 -0
  39. package/dist/tui/utils/bundle-loader.d.ts +3 -0
  40. package/dist/tui/utils/bundle-loader.d.ts.map +1 -0
  41. package/dist/tui/utils/bundle-loader.js +49 -0
  42. package/dist/tui/utils/bundle-loader.js.map +1 -0
  43. package/dist/tui/utils/integration-loader.d.ts +14 -0
  44. package/dist/tui/utils/integration-loader.d.ts.map +1 -0
  45. package/dist/tui/utils/integration-loader.js +6 -0
  46. package/dist/tui/utils/integration-loader.js.map +1 -0
  47. package/dist/tui/utils/stream.d.ts +37 -5
  48. package/dist/tui/utils/stream.d.ts.map +1 -1
  49. package/dist/tui/utils/stream.js +70 -24
  50. package/dist/tui/utils/stream.js.map +1 -1
  51. package/dist/tui/utils/widget-loader.d.ts +19 -3
  52. package/dist/tui/utils/widget-loader.d.ts.map +1 -1
  53. package/dist/tui/utils/widget-loader.js +4 -53
  54. package/dist/tui/utils/widget-loader.js.map +1 -1
  55. package/dist/types/config.d.ts +1 -1
  56. package/dist/types/config.d.ts.map +1 -1
  57. package/dist/utils/coding-agents/claude-code.d.ts +3 -1
  58. package/dist/utils/coding-agents/claude-code.d.ts.map +1 -1
  59. package/dist/utils/coding-agents/claude-code.js +35 -0
  60. package/dist/utils/coding-agents/claude-code.js.map +1 -1
  61. package/dist/utils/coding-agents/codex.d.ts +3 -1
  62. package/dist/utils/coding-agents/codex.d.ts.map +1 -1
  63. package/dist/utils/coding-agents/codex.js +40 -0
  64. package/dist/utils/coding-agents/codex.js.map +1 -1
  65. package/dist/utils/coding-agents/index.d.ts +6 -3
  66. package/dist/utils/coding-agents/index.d.ts.map +1 -1
  67. package/dist/utils/coding-agents/index.js +17 -5
  68. package/dist/utils/coding-agents/index.js.map +1 -1
  69. package/dist/utils/coding-agents/types.d.ts +14 -0
  70. package/dist/utils/coding-agents/types.d.ts.map +1 -1
  71. package/dist/utils/coding-agents/types.js.map +1 -1
  72. package/package.json +4 -3
@@ -1,12 +1,310 @@
1
- import { createConversationApi, streamConversation } from '../utils/stream.js';
1
+ import { appendFileSync } from 'node:fs';
2
+ import { createConversationApi, streamConversation, streamConversationApproval } from '../utils/stream.js';
2
3
  import { ToolCallItem } from '../components/tool-call-item.js';
3
4
  // Tools whose sub-calls should be shown as nested children
4
- const CONTAINER_TOOLS = new Set(['gather_context', 'take_action']);
5
+ const CONTAINER_TOOLS = new Set([
6
+ 'gather_context',
7
+ 'take_action',
8
+ 'agent-take_action',
9
+ 'agent-gather_context',
10
+ 'agent-think',
11
+ ]);
12
+ // ── Convert Mastra data-tool-agent payload to OutputPart[] ────────────────────
13
+ function mastraDataToOutputParts(data) {
14
+ const parts = [];
15
+ // Use latest step's data if available, otherwise top-level
16
+ const steps = Array.isArray(data.steps) ? data.steps : [];
17
+ const source = steps.length > 0 ? steps[steps.length - 1] : data;
18
+ // Merge calls from latest step + top-level
19
+ const stepCalls = source.toolCalls ?? [];
20
+ const topCalls = steps.length > 0 ? (data.toolCalls ?? []) : [];
21
+ const stepCallIds = new Set(stepCalls.map(tc => (tc.payload ?? tc).toolCallId));
22
+ const mergedCalls = [
23
+ ...stepCalls,
24
+ ...topCalls.filter(tc => !stepCallIds.has((tc.payload ?? tc).toolCallId)),
25
+ ];
26
+ // Merge results from latest step + top-level
27
+ const stepResults = source.toolResults ?? [];
28
+ const topResults = steps.length > 0 ? (data.toolResults ?? []) : [];
29
+ const stepResultIds = new Set(stepResults.map(r => (r.payload ?? r).toolCallId));
30
+ const allResults = [
31
+ ...stepResults,
32
+ ...topResults.filter(r => !stepResultIds.has((r.payload ?? r).toolCallId)),
33
+ ];
34
+ const resultMap = new Map();
35
+ for (const r of allResults) {
36
+ const res = r.payload ?? r;
37
+ resultMap.set(res.toolCallId, res.result);
38
+ }
39
+ const seenCallIds = new Set();
40
+ for (const tc of mergedCalls) {
41
+ const call = tc.payload ?? tc;
42
+ if (seenCallIds.has(call.toolCallId))
43
+ continue;
44
+ seenCallIds.add(call.toolCallId);
45
+ const hasResult = resultMap.has(call.toolCallId);
46
+ const part = {
47
+ type: `tool-${call.toolName}`,
48
+ toolCallId: call.toolCallId,
49
+ input: call.args,
50
+ state: hasResult ? 'output-available' : 'in-progress',
51
+ ...(hasResult && { output: resultMap.get(call.toolCallId) }),
52
+ };
53
+ parts.push(part);
54
+ }
55
+ const text = source.text ?? data.text;
56
+ if (text) {
57
+ parts.push({ type: 'text', text, state: 'done' });
58
+ }
59
+ return parts;
60
+ }
5
61
  // ── Factory (hook-like, no React required) ────────────────────────────────────
62
+ let streamCounter = 0;
6
63
  export function createConversation(baseUrl, apiKey) {
7
64
  let conversationId = null;
8
65
  let incognito = false;
9
66
  let activeAbortController = null;
67
+ // Equivalent of webapp's cachedNestedPartsRef — persists agent item across streams
68
+ let savedAgentItem = null;
69
+ // ── Shared stream event processor ─────────────────────────────────────────
70
+ async function processStream(gen, callbacks, controller) {
71
+ const streamNum = ++streamCounter;
72
+ const logFile = `/tmp/core-stream-${streamNum}.log`;
73
+ const activeTools = new Map();
74
+ const toolNameMap = new Map(); // toolCallId → toolName
75
+ const toolInputMap = new Map(); // toolCallId → input
76
+ let activeParent = null;
77
+ let lastAgentItem = savedAgentItem; // restored from prior stream (like cachedNestedPartsRef)
78
+ let hadApprovalRequest = false;
79
+ const approvedContainerIds = new Set(); // prevent duplicate approval expansion
80
+ try {
81
+ for await (const event of gen) {
82
+ try {
83
+ appendFileSync(logFile, JSON.stringify(event) + '\n');
84
+ }
85
+ catch { /* ignore */ }
86
+ switch (event.type) {
87
+ case 'text-delta': {
88
+ callbacks.onTextDelta(event.delta);
89
+ break;
90
+ }
91
+ case 'tool-input-start': {
92
+ toolNameMap.set(event.toolCallId, event.toolName);
93
+ const item = new ToolCallItem(event.toolName);
94
+ activeTools.set(event.toolCallId, item);
95
+ if (CONTAINER_TOOLS.has(event.toolName)) {
96
+ activeParent = { id: event.toolCallId, item };
97
+ if (event.toolName.startsWith('agent-'))
98
+ lastAgentItem = item;
99
+ callbacks.onToolStart?.(event.toolCallId, event.toolName, item);
100
+ }
101
+ else if (activeParent) {
102
+ activeParent.item.addChild(item);
103
+ callbacks.onRerender?.();
104
+ }
105
+ else {
106
+ callbacks.onToolStart?.(event.toolCallId, event.toolName, item);
107
+ }
108
+ break;
109
+ }
110
+ case 'tool-input-delta': {
111
+ activeTools
112
+ .get(event.toolCallId)
113
+ ?.appendArgsDelta(event.inputTextDelta);
114
+ callbacks.onRerender?.();
115
+ break;
116
+ }
117
+ case 'tool-input-available': {
118
+ toolInputMap.set(event.toolCallId, event.input);
119
+ break;
120
+ }
121
+ case 'tool-call': {
122
+ toolNameMap.set(event.toolCallId, event.toolName);
123
+ toolInputMap.set(event.toolCallId, event.args);
124
+ const item = new ToolCallItem(event.toolName);
125
+ item.setArgs(event.args);
126
+ activeTools.set(event.toolCallId, item);
127
+ if (CONTAINER_TOOLS.has(event.toolName)) {
128
+ activeParent = { id: event.toolCallId, item };
129
+ if (event.toolName.startsWith('agent-'))
130
+ lastAgentItem = item;
131
+ callbacks.onToolStart?.(event.toolCallId, event.toolName, item);
132
+ }
133
+ else if (activeParent) {
134
+ item.setDone();
135
+ activeParent.item.addChild(item);
136
+ callbacks.onRerender?.();
137
+ }
138
+ else {
139
+ callbacks.onToolStart?.(event.toolCallId, event.toolName, item);
140
+ }
141
+ break;
142
+ }
143
+ case 'tool-output-available': {
144
+ const parentItem = activeTools.get(event.toolCallId);
145
+ if (parentItem && event.output) {
146
+ let parts = null;
147
+ if (Array.isArray(event.output.parts)) {
148
+ parts = event.output.parts;
149
+ }
150
+ else if (event.output.toolCalls ?? event.output.toolResults ?? event.output.steps) {
151
+ parts = mastraDataToOutputParts(event.output);
152
+ }
153
+ if (parts)
154
+ parentItem.updateFromOutputParts(parts);
155
+ }
156
+ if (!event.preliminary && activeParent?.id === event.toolCallId) {
157
+ parentItem?.setDone();
158
+ activeParent = null;
159
+ if (lastAgentItem === parentItem)
160
+ lastAgentItem = null;
161
+ }
162
+ callbacks.onRerender?.();
163
+ break;
164
+ }
165
+ case 'tool-result': {
166
+ const item = activeTools.get(event.toolCallId);
167
+ if (item) {
168
+ item.setDone(event.result);
169
+ if (activeParent?.id === event.toolCallId) {
170
+ activeParent = null;
171
+ }
172
+ }
173
+ callbacks.onRerender?.();
174
+ break;
175
+ }
176
+ case 'tool-approval-request': {
177
+ hadApprovalRequest = true;
178
+ const toolName = toolNameMap.get(event.toolCallId) ?? event.toolCallId;
179
+ // Save agent item unconditionally — must happen before any early break
180
+ // so the next processStream (approval resume stream) can look up children.
181
+ if (lastAgentItem)
182
+ savedAgentItem = lastAgentItem;
183
+ // Mirror webapp's findPendingApprovals: expand container tools into
184
+ // their pending children so the user sees the actual leaf tools.
185
+ const containerItem = activeTools.get(event.toolCallId);
186
+ const isContainerTool = toolName === 'agent-take_action' || toolName === 'take_action';
187
+ if (isContainerTool && containerItem) {
188
+ // Deduplicate: parallel tool calls fire multiple approval events for
189
+ // the same container. Only expand once — one approval covers all children.
190
+ if (approvedContainerIds.has(event.toolCallId))
191
+ break;
192
+ approvedContainerIds.add(event.toolCallId);
193
+ const pendingChildren = containerItem.getPendingChildren();
194
+ if (pendingChildren.length > 0) {
195
+ for (const child of pendingChildren) {
196
+ callbacks.onApprovalRequested?.(event.approvalId, event.toolCallId, child.toolName, child.input);
197
+ }
198
+ break;
199
+ }
200
+ }
201
+ // Fall back: if toolName wasn't resolved, check children cached from first stream
202
+ let resolvedName = toolName;
203
+ let toolInput = toolInputMap.get(event.toolCallId);
204
+ if (resolvedName === event.toolCallId && lastAgentItem) {
205
+ const childInfo = lastAgentItem.getChildInfo(event.toolCallId);
206
+ if (childInfo) {
207
+ resolvedName = childInfo.toolName;
208
+ toolInput = childInfo.input;
209
+ }
210
+ }
211
+ callbacks.onApprovalRequested?.(event.approvalId, event.toolCallId, resolvedName, toolInput);
212
+ break;
213
+ }
214
+ case 'data-tool-agent': {
215
+ // Mirror webapp's mergeAgentParts: agentData = raw.data ?? raw
216
+ const agentData = event.data ?? event;
217
+ if (agentData.toolCalls || agentData.toolResults || agentData.steps) {
218
+ // Orphan in resumed approval stream — create synthetic item like webapp
219
+ if (!lastAgentItem) {
220
+ lastAgentItem = new ToolCallItem('agent-take_action');
221
+ }
222
+ const allAgentCalls = [
223
+ ...(agentData.toolCalls ?? []),
224
+ ...(Array.isArray(agentData.steps)
225
+ ? agentData.steps.flatMap((s) => s.toolCalls ?? [])
226
+ : []),
227
+ ];
228
+ for (const tc of allAgentCalls) {
229
+ const call = tc.payload ?? tc;
230
+ if (call.toolCallId && call.toolName) {
231
+ toolNameMap.set(call.toolCallId, call.toolName);
232
+ if (call.args)
233
+ toolInputMap.set(call.toolCallId, call.args);
234
+ }
235
+ }
236
+ const parts = mastraDataToOutputParts(agentData);
237
+ if (parts.length > 0) {
238
+ lastAgentItem.updateFromOutputParts(parts);
239
+ callbacks.onRerender?.();
240
+ }
241
+ else {
242
+ // Post-approval pattern: toolCalls is [] but toolResults has results
243
+ // for children registered in an earlier snapshot — mark them done.
244
+ const allResults = [
245
+ ...(agentData.toolResults ?? []),
246
+ ...(Array.isArray(agentData.steps)
247
+ ? agentData.steps.flatMap((s) => s.toolResults ?? [])
248
+ : []),
249
+ ];
250
+ if (allResults.length > 0) {
251
+ const resultMap = new Map();
252
+ for (const r of allResults) {
253
+ const res = r.payload ?? r;
254
+ if (res.toolCallId)
255
+ resultMap.set(res.toolCallId, res.result);
256
+ }
257
+ lastAgentItem.markChildrenDoneByIds(resultMap);
258
+ callbacks.onRerender?.();
259
+ }
260
+ }
261
+ }
262
+ break;
263
+ }
264
+ case 'finish-step': {
265
+ for (const item of activeTools.values()) {
266
+ item.setDone();
267
+ }
268
+ activeParent = null;
269
+ lastAgentItem = null;
270
+ activeTools.clear();
271
+ callbacks.onStepFinish?.();
272
+ break;
273
+ }
274
+ case 'error': {
275
+ if (event.error === 'terminated')
276
+ break;
277
+ callbacks.onError?.(new Error(event.error));
278
+ break;
279
+ }
280
+ default:
281
+ break;
282
+ }
283
+ }
284
+ // Only fire finish if this wasn't an approval pause
285
+ if (!hadApprovalRequest) {
286
+ callbacks.onFinish?.();
287
+ }
288
+ }
289
+ catch (err) {
290
+ if (err instanceof Error && err.name === 'AbortError') {
291
+ callbacks.onAbort?.();
292
+ return;
293
+ }
294
+ const msg = err instanceof Error ? err.message : String(err);
295
+ if (msg === 'terminated') {
296
+ if (!hadApprovalRequest)
297
+ callbacks.onFinish?.();
298
+ return;
299
+ }
300
+ callbacks.onError?.(err instanceof Error ? err : new Error(msg));
301
+ }
302
+ finally {
303
+ if (activeAbortController === controller) {
304
+ activeAbortController = null;
305
+ }
306
+ }
307
+ }
10
308
  return {
11
309
  get conversationId() {
12
310
  return conversationId;
@@ -20,6 +318,7 @@ export function createConversation(baseUrl, apiKey) {
20
318
  },
21
319
  clear() {
22
320
  conversationId = null;
321
+ savedAgentItem = null;
23
322
  },
24
323
  resume(id) {
25
324
  conversationId = id;
@@ -30,131 +329,23 @@ export function createConversation(baseUrl, apiKey) {
30
329
  async send(message, callbacks) {
31
330
  const controller = new AbortController();
32
331
  activeAbortController = controller;
33
- try {
34
- if (!conversationId) {
332
+ if (!conversationId) {
333
+ try {
35
334
  conversationId = await createConversationApi(baseUrl, apiKey, message, incognito);
36
335
  }
37
- const activeTools = new Map();
38
- // The currently-running container tool (gather_context / take_action)
39
- let activeParent = null;
40
- for await (const event of streamConversation(baseUrl, apiKey, conversationId, message, controller.signal)) {
41
- switch (event.type) {
42
- case 'text-delta': {
43
- callbacks.onTextDelta(event.delta);
44
- break;
45
- }
46
- case 'tool-input-start': {
47
- const item = new ToolCallItem(event.toolName);
48
- activeTools.set(event.toolCallId, item);
49
- if (CONTAINER_TOOLS.has(event.toolName)) {
50
- // Container tool — show at top level, track as parent
51
- activeParent = { id: event.toolCallId, item };
52
- callbacks.onToolStart?.(event.toolCallId, event.toolName, item);
53
- }
54
- else if (activeParent) {
55
- // Nested tool — attach as child of the active container
56
- activeParent.item.addChild(item);
57
- callbacks.onRerender?.();
58
- }
59
- else {
60
- callbacks.onToolStart?.(event.toolCallId, event.toolName, item);
61
- }
62
- break;
63
- }
64
- case 'tool-input-delta': {
65
- activeTools
66
- .get(event.toolCallId)
67
- ?.appendArgsDelta(event.inputTextDelta);
68
- callbacks.onRerender?.();
69
- break;
70
- }
71
- case 'tool-call': {
72
- // Non-streaming complete tool call
73
- const item = new ToolCallItem(event.toolName);
74
- item.setArgs(event.args);
75
- activeTools.set(event.toolCallId, item);
76
- if (CONTAINER_TOOLS.has(event.toolName)) {
77
- activeParent = { id: event.toolCallId, item };
78
- callbacks.onToolStart?.(event.toolCallId, event.toolName, item);
79
- }
80
- else if (activeParent) {
81
- item.setDone();
82
- activeParent.item.addChild(item);
83
- callbacks.onRerender?.();
84
- }
85
- else {
86
- callbacks.onToolStart?.(event.toolCallId, event.toolName, item);
87
- }
88
- break;
89
- }
90
- case 'tool-output-available': {
91
- // Streaming output from gather_context / take_action —
92
- // output.parts[] carries nested tool states in real-time
93
- const parentItem = activeTools.get(event.toolCallId);
94
- if (parentItem && event.output?.parts) {
95
- parentItem.updateFromOutputParts(event.output.parts);
96
- }
97
- // Mark parent done on final (non-preliminary) update
98
- if (!event.preliminary && activeParent?.id === event.toolCallId) {
99
- parentItem?.setDone();
100
- activeParent = null;
101
- }
102
- callbacks.onRerender?.();
103
- break;
104
- }
105
- case 'tool-result': {
106
- const item = activeTools.get(event.toolCallId);
107
- if (item) {
108
- item.setDone(event.result);
109
- if (activeParent?.id === event.toolCallId) {
110
- activeParent = null;
111
- }
112
- }
113
- callbacks.onRerender?.();
114
- break;
115
- }
116
- case 'finish-step': {
117
- for (const item of activeTools.values()) {
118
- item.setDone();
119
- }
120
- activeParent = null;
121
- activeTools.clear();
122
- callbacks.onStepFinish?.();
123
- break;
124
- }
125
- case 'error': {
126
- // AI SDK emits "terminated" as a normal end-of-stream signal
127
- if (event.error === 'terminated')
128
- break;
129
- callbacks.onError?.(new Error(event.error));
130
- break;
131
- }
132
- default:
133
- break;
134
- }
135
- }
136
- // Stream ended — fire finish once
137
- callbacks.onFinish?.();
138
- }
139
- catch (err) {
140
- // Aborted by user — not an error
141
- if (err instanceof Error && err.name === 'AbortError') {
142
- callbacks.onAbort?.();
336
+ catch (err) {
337
+ callbacks.onError?.(err instanceof Error ? err : new Error(String(err)));
143
338
  return;
144
339
  }
145
- const message = err instanceof Error ? err.message : String(err);
146
- // undici throws "terminated" when the server closes the SSE connection normally
147
- if (message === 'terminated') {
148
- callbacks.onFinish?.();
149
- return;
150
- }
151
- callbacks.onError?.(err instanceof Error ? err : new Error(message));
152
- }
153
- finally {
154
- if (activeAbortController === controller) {
155
- activeAbortController = null;
156
- }
157
340
  }
341
+ await processStream(streamConversation(baseUrl, apiKey, conversationId, message, controller.signal), callbacks, controller);
342
+ },
343
+ async approve(approved, toolCallId, callbacks) {
344
+ if (!conversationId)
345
+ return;
346
+ const controller = new AbortController();
347
+ activeAbortController = controller;
348
+ await processStream(streamConversationApproval(baseUrl, apiKey, conversationId, toolCallId, approved, controller.signal), callbacks, controller);
158
349
  },
159
350
  };
160
351
  }
@@ -1 +1 @@
1
- {"version":3,"file":"use-conversation.js","sourceRoot":"","sources":["../../../src/tui/hooks/use-conversation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-conversation.js","sourceRoot":"","sources":["../../../src/tui/hooks/use-conversation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { Text } from '@mariozechner/pi-tui';
2
+ import type { Component } from '@mariozechner/pi-tui';
3
+ /**
4
+ * Checks if the current terminal supports inline images.
5
+ * Extends pi-tui's detection with tmux passthrough and explicit override.
6
+ */
7
+ export declare function supportsImages(): boolean;
8
+ /**
9
+ * Builds an inline PNG Image component from base64 data.
10
+ * Returns null if terminal doesn't support images.
11
+ */
12
+ export declare function buildImageAvatar(base64Png: string, accentHex: string): Component | null;
13
+ /**
14
+ * Renders a PNG (base64) as colored Unicode half-block characters.
15
+ * Uses ▀ (upper half block) with ANSI 24-bit fg/bg colors to pack
16
+ * 2 pixel rows into each terminal line, preserving aspect ratio.
17
+ * Works in any terminal that supports truecolor (no Kitty/iTerm2 needed).
18
+ */
19
+ export declare function buildColorBlockAvatar(base64Png: string, targetCols?: number): Text;
20
+ /**
21
+ * Returns the best available avatar component:
22
+ * - Inline PNG image (if terminal supports Kitty/iTerm2 protocol)
23
+ * - Colored half-block rendering (truecolor, works everywhere)
24
+ * - Deterministic accent-colored pixel grid (final fallback, no PNG needed)
25
+ */
26
+ export declare function buildAvatar(name: string, accentHex: string, base64Png?: string | null): Component;
27
+ //# sourceMappingURL=avatar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avatar.d.ts","sourceRoot":"","sources":["../../../src/tui/utils/avatar.ts"],"names":[],"mappings":"AAEA,OAAO,EACN,IAAI,EAKJ,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,sBAAsB,CAAC;AAEpD;;;GAGG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAkBxC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAWvF;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,SAAK,GAAG,IAAI,CA8B9E;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAC1B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GACvB,SAAS,CAcX"}
@@ -0,0 +1,96 @@
1
+ import chalk from 'chalk';
2
+ import { decode as decodePng } from 'fast-png';
3
+ import { Text, Image, getPngDimensions, getCapabilities, resetCapabilitiesCache, } from '@mariozechner/pi-tui';
4
+ /**
5
+ * Checks if the current terminal supports inline images.
6
+ * Extends pi-tui's detection with tmux passthrough and explicit override.
7
+ */
8
+ export function supportsImages() {
9
+ // Allow explicit override via env var
10
+ if (process.env.CORE_IMAGE_PROTOCOL === 'iterm2' || process.env.CORE_IMAGE_PROTOCOL === 'kitty') {
11
+ return true;
12
+ }
13
+ // tmux passes TERM_PROGRAM through — but some setups don't.
14
+ // If running inside tmux, check if the outer terminal supports images.
15
+ if (process.env.TERM === 'screen' || process.env.TMUX) {
16
+ const outerTerm = (process.env.TERM_PROGRAM ?? '').toLowerCase();
17
+ if (outerTerm === 'iterm.app' || process.env.ITERM_SESSION_ID)
18
+ return true;
19
+ if (outerTerm === 'kitty' || process.env.KITTY_WINDOW_ID)
20
+ return true;
21
+ if (outerTerm === 'wezterm' || process.env.WEZTERM_PANE)
22
+ return true;
23
+ if (outerTerm === 'ghostty' || process.env.GHOSTTY_RESOURCES_DIR)
24
+ return true;
25
+ }
26
+ resetCapabilitiesCache();
27
+ return getCapabilities().images !== null;
28
+ }
29
+ /**
30
+ * Builds an inline PNG Image component from base64 data.
31
+ * Returns null if terminal doesn't support images.
32
+ */
33
+ export function buildImageAvatar(base64Png, accentHex) {
34
+ if (!supportsImages())
35
+ return null;
36
+ const dims = getPngDimensions(base64Png);
37
+ if (!dims)
38
+ return null;
39
+ return new Image(base64Png, 'image/png', { fallbackColor: chalk.hex(accentHex) }, { maxWidthCells: 8, maxHeightCells: 4 }, dims);
40
+ }
41
+ /**
42
+ * Renders a PNG (base64) as colored Unicode half-block characters.
43
+ * Uses ▀ (upper half block) with ANSI 24-bit fg/bg colors to pack
44
+ * 2 pixel rows into each terminal line, preserving aspect ratio.
45
+ * Works in any terminal that supports truecolor (no Kitty/iTerm2 needed).
46
+ */
47
+ export function buildColorBlockAvatar(base64Png, targetCols = 10) {
48
+ const buffer = Buffer.from(base64Png, 'base64');
49
+ const png = decodePng(buffer);
50
+ const { width, height, data, channels } = png;
51
+ // Terminal cells are ~1:2 (width:height). Half-blocks split each line into
52
+ // 2 pixel rows, but the visual height of a line is still 2× the cell width.
53
+ // Dividing by 2 cancels that out so the rendered output is visually square.
54
+ const termRows = Math.max(1, Math.round((targetCols * height) / (width * 2)));
55
+ const pixelRows = termRows * 2;
56
+ function getPixel(pxRow, pxCol) {
57
+ const srcRow = Math.min(Math.floor((pxRow * height) / pixelRows), height - 1);
58
+ const srcCol = Math.min(Math.floor((pxCol * width) / targetCols), width - 1);
59
+ const idx = (srcRow * width + srcCol) * channels;
60
+ return [data[idx], data[idx + 1], data[idx + 2]];
61
+ }
62
+ const lines = [];
63
+ for (let row = 0; row < termRows; row++) {
64
+ let line = '';
65
+ for (let col = 0; col < targetCols; col++) {
66
+ const [tr, tg, tb] = getPixel(row * 2, col);
67
+ const [br, bg, bb] = getPixel(row * 2 + 1, col);
68
+ line += chalk.rgb(tr, tg, tb).bgRgb(br, bg, bb)('▀');
69
+ }
70
+ lines.push(line);
71
+ }
72
+ return new Text(lines.join('\n'), 0, 1);
73
+ }
74
+ /**
75
+ * Returns the best available avatar component:
76
+ * - Inline PNG image (if terminal supports Kitty/iTerm2 protocol)
77
+ * - Colored half-block rendering (truecolor, works everywhere)
78
+ * - Deterministic accent-colored pixel grid (final fallback, no PNG needed)
79
+ */
80
+ export function buildAvatar(name, accentHex, base64Png) {
81
+ if (base64Png) {
82
+ const img = buildImageAvatar(base64Png, accentHex);
83
+ if (img)
84
+ return img;
85
+ try {
86
+ return buildColorBlockAvatar(base64Png);
87
+ }
88
+ catch {
89
+ // fall through to accent-colored fallback
90
+ }
91
+ }
92
+ // Final fallback: simple accent block (no PNG)
93
+ const block = chalk.hex(accentHex)('██\n██\n██');
94
+ return new Text(block, 0, 1);
95
+ }
96
+ //# sourceMappingURL=avatar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avatar.js","sourceRoot":"","sources":["../../../src/tui/utils/avatar.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Fetch a remote JS bundle, rewrite bare-specifier imports, and dynamically import it. */
2
+ export declare function loadBundle(frontendUrl: string): Promise<Record<string, unknown>>;
3
+ //# sourceMappingURL=bundle-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle-loader.d.ts","sourceRoot":"","sources":["../../../src/tui/utils/bundle-loader.ts"],"names":[],"mappings":"AAgCA,2FAA2F;AAC3F,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAwBtF"}