@redplanethq/corebrain 2.8.5 → 2.8.9

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 (80) hide show
  1. package/dist/assets/assets/AppIcon.icns +0 -0
  2. package/dist/commands/coding/read.d.ts +0 -4
  3. package/dist/commands/coding/read.d.ts.map +1 -1
  4. package/dist/commands/coding/read.js +15 -25
  5. package/dist/commands/coding/read.js.map +1 -1
  6. package/dist/commands/gateway/start.d.ts.map +1 -1
  7. package/dist/commands/gateway/start.js +32 -2
  8. package/dist/commands/gateway/start.js.map +1 -1
  9. package/dist/server/tools/coding-tools.d.ts.map +1 -1
  10. package/dist/server/tools/coding-tools.js +52 -30
  11. package/dist/server/tools/coding-tools.js.map +1 -1
  12. package/dist/tui/chat.d.ts.map +1 -1
  13. package/dist/tui/chat.js +278 -91
  14. package/dist/tui/chat.js.map +1 -1
  15. package/dist/tui/components/approval-bar.d.ts +14 -0
  16. package/dist/tui/components/approval-bar.d.ts.map +1 -0
  17. package/dist/tui/components/approval-bar.js +32 -0
  18. package/dist/tui/components/approval-bar.js.map +1 -0
  19. package/dist/tui/components/approval-panel.d.ts +31 -0
  20. package/dist/tui/components/approval-panel.d.ts.map +1 -0
  21. package/dist/tui/components/approval-panel.js +184 -0
  22. package/dist/tui/components/approval-panel.js.map +1 -0
  23. package/dist/tui/components/dashboard-view.d.ts +20 -0
  24. package/dist/tui/components/dashboard-view.d.ts.map +1 -0
  25. package/dist/tui/components/dashboard-view.js +147 -0
  26. package/dist/tui/components/dashboard-view.js.map +1 -0
  27. package/dist/tui/components/status-line.d.ts +18 -0
  28. package/dist/tui/components/status-line.d.ts.map +1 -0
  29. package/dist/tui/components/status-line.js +47 -0
  30. package/dist/tui/components/status-line.js.map +1 -0
  31. package/dist/tui/components/tool-call-item.d.ts +26 -0
  32. package/dist/tui/components/tool-call-item.d.ts.map +1 -1
  33. package/dist/tui/components/tool-call-item.js +53 -3
  34. package/dist/tui/components/tool-call-item.js.map +1 -1
  35. package/dist/tui/components/widgets-view.d.ts +33 -0
  36. package/dist/tui/components/widgets-view.d.ts.map +1 -0
  37. package/dist/tui/components/widgets-view.js +270 -0
  38. package/dist/tui/components/widgets-view.js.map +1 -0
  39. package/dist/tui/hooks/use-conversation.d.ts +4 -0
  40. package/dist/tui/hooks/use-conversation.d.ts.map +1 -1
  41. package/dist/tui/hooks/use-conversation.js +316 -109
  42. package/dist/tui/hooks/use-conversation.js.map +1 -1
  43. package/dist/tui/utils/avatar.d.ts +27 -0
  44. package/dist/tui/utils/avatar.d.ts.map +1 -0
  45. package/dist/tui/utils/avatar.js +96 -0
  46. package/dist/tui/utils/avatar.js.map +1 -0
  47. package/dist/tui/utils/bundle-loader.d.ts +3 -0
  48. package/dist/tui/utils/bundle-loader.d.ts.map +1 -0
  49. package/dist/tui/utils/bundle-loader.js +49 -0
  50. package/dist/tui/utils/bundle-loader.js.map +1 -0
  51. package/dist/tui/utils/integration-loader.d.ts +14 -0
  52. package/dist/tui/utils/integration-loader.d.ts.map +1 -0
  53. package/dist/tui/utils/integration-loader.js +6 -0
  54. package/dist/tui/utils/integration-loader.js.map +1 -0
  55. package/dist/tui/utils/stream.d.ts +43 -5
  56. package/dist/tui/utils/stream.d.ts.map +1 -1
  57. package/dist/tui/utils/stream.js +85 -24
  58. package/dist/tui/utils/stream.js.map +1 -1
  59. package/dist/tui/utils/widget-loader.d.ts +20 -0
  60. package/dist/tui/utils/widget-loader.d.ts.map +1 -0
  61. package/dist/tui/utils/widget-loader.js +6 -0
  62. package/dist/tui/utils/widget-loader.js.map +1 -0
  63. package/dist/types/config.d.ts +12 -0
  64. package/dist/types/config.d.ts.map +1 -1
  65. package/dist/utils/coding-agents/claude-code.d.ts +3 -1
  66. package/dist/utils/coding-agents/claude-code.d.ts.map +1 -1
  67. package/dist/utils/coding-agents/claude-code.js +35 -0
  68. package/dist/utils/coding-agents/claude-code.js.map +1 -1
  69. package/dist/utils/coding-agents/codex.d.ts +3 -1
  70. package/dist/utils/coding-agents/codex.d.ts.map +1 -1
  71. package/dist/utils/coding-agents/codex.js +40 -0
  72. package/dist/utils/coding-agents/codex.js.map +1 -1
  73. package/dist/utils/coding-agents/index.d.ts +6 -3
  74. package/dist/utils/coding-agents/index.d.ts.map +1 -1
  75. package/dist/utils/coding-agents/index.js +13 -2
  76. package/dist/utils/coding-agents/index.js.map +1 -1
  77. package/dist/utils/coding-agents/types.d.ts +14 -0
  78. package/dist/utils/coding-agents/types.d.ts.map +1 -1
  79. package/dist/utils/coding-agents/types.js.map +1 -1
  80. package/package.json +5 -3
@@ -1,144 +1,351 @@
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
- return {
10
- get conversationId() {
11
- return conversationId;
12
- },
13
- get incognito() {
14
- return incognito;
15
- },
16
- clear() {
17
- conversationId = null;
18
- },
19
- resume(id) {
20
- conversationId = id;
21
- },
22
- toggleIncognito() {
23
- incognito = !incognito;
24
- },
25
- async send(message, callbacks) {
26
- console.log(incognito);
27
- try {
28
- if (!conversationId) {
29
- conversationId = await createConversationApi(baseUrl, apiKey, message, incognito);
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');
30
84
  }
31
- const activeTools = new Map();
32
- // The currently-running container tool (gather_context / take_action)
33
- let activeParent = null;
34
- for await (const event of streamConversation(baseUrl, apiKey, conversationId, message)) {
35
- switch (event.type) {
36
- case 'text-delta': {
37
- callbacks.onTextDelta(event.delta);
38
- break;
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);
39
100
  }
40
- case 'tool-input-start': {
41
- const item = new ToolCallItem(event.toolName);
42
- activeTools.set(event.toolCallId, item);
43
- if (CONTAINER_TOOLS.has(event.toolName)) {
44
- // Container tool — show at top level, track as parent
45
- activeParent = { id: event.toolCallId, item };
46
- callbacks.onToolStart?.(event.toolCallId, event.toolName, item);
47
- }
48
- else if (activeParent) {
49
- // Nested tool — attach as child of the active container
50
- activeParent.item.addChild(item);
51
- callbacks.onRerender?.();
52
- }
53
- else {
54
- callbacks.onToolStart?.(event.toolCallId, event.toolName, item);
55
- }
56
- break;
101
+ else if (activeParent) {
102
+ activeParent.item.addChild(item);
103
+ callbacks.onRerender?.();
104
+ }
105
+ else {
106
+ callbacks.onToolStart?.(event.toolCallId, event.toolName, item);
57
107
  }
58
- case 'tool-input-delta': {
59
- activeTools
60
- .get(event.toolCallId)
61
- ?.appendArgsDelta(event.inputTextDelta);
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);
62
136
  callbacks.onRerender?.();
63
- break;
64
137
  }
65
- case 'tool-call': {
66
- // Non-streaming complete tool call
67
- const item = new ToolCallItem(event.toolName);
68
- item.setArgs(event.args);
69
- activeTools.set(event.toolCallId, item);
70
- if (CONTAINER_TOOLS.has(event.toolName)) {
71
- activeParent = { id: event.toolCallId, item };
72
- callbacks.onToolStart?.(event.toolCallId, event.toolName, item);
73
- }
74
- else if (activeParent) {
75
- item.setDone();
76
- activeParent.item.addChild(item);
77
- callbacks.onRerender?.();
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;
78
149
  }
79
- else {
80
- callbacks.onToolStart?.(event.toolCallId, event.toolName, item);
150
+ else if (event.output.toolCalls ?? event.output.toolResults ?? event.output.steps) {
151
+ parts = mastraDataToOutputParts(event.output);
81
152
  }
82
- break;
153
+ if (parts)
154
+ parentItem.updateFromOutputParts(parts);
83
155
  }
84
- case 'tool-output-available': {
85
- // Streaming output from gather_context / take_action —
86
- // output.parts[] carries nested tool states in real-time
87
- const parentItem = activeTools.get(event.toolCallId);
88
- if (parentItem && event.output?.parts) {
89
- parentItem.updateFromOutputParts(event.output.parts);
90
- }
91
- // Mark parent done on final (non-preliminary) update
92
- if (!event.preliminary && activeParent?.id === event.toolCallId) {
93
- parentItem?.setDone();
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) {
94
170
  activeParent = null;
95
171
  }
96
- callbacks.onRerender?.();
97
- break;
98
172
  }
99
- case 'tool-result': {
100
- const item = activeTools.get(event.toolCallId);
101
- if (item) {
102
- item.setDone(event.result);
103
- if (activeParent?.id === event.toolCallId) {
104
- activeParent = null;
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);
105
197
  }
198
+ break;
106
199
  }
107
- callbacks.onRerender?.();
108
- break;
109
200
  }
110
- case 'finish-step': {
111
- for (const item of activeTools.values()) {
112
- item.setDone();
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;
113
209
  }
114
- activeParent = null;
115
- activeTools.clear();
116
- callbacks.onStepFinish?.();
117
- break;
118
210
  }
119
- case 'error': {
120
- // AI SDK emits "terminated" as a normal end-of-stream signal
121
- if (event.error === 'terminated')
122
- break;
123
- callbacks.onError?.(new Error(event.error));
124
- break;
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
+ }
125
261
  }
126
- default:
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')
127
276
  break;
277
+ callbacks.onError?.(new Error(event.error));
278
+ break;
128
279
  }
280
+ default:
281
+ break;
129
282
  }
130
- // Stream ended — fire finish once
283
+ }
284
+ // Only fire finish if this wasn't an approval pause
285
+ if (!hadApprovalRequest) {
131
286
  callbacks.onFinish?.();
132
287
  }
133
- catch (err) {
134
- const message = err instanceof Error ? err.message : String(err);
135
- // undici throws "terminated" when the server closes the SSE connection normally
136
- if (message === 'terminated') {
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)
137
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
+ }
308
+ return {
309
+ get conversationId() {
310
+ return conversationId;
311
+ },
312
+ get incognito() {
313
+ return incognito;
314
+ },
315
+ abort() {
316
+ activeAbortController?.abort();
317
+ activeAbortController = null;
318
+ },
319
+ clear() {
320
+ conversationId = null;
321
+ savedAgentItem = null;
322
+ },
323
+ resume(id) {
324
+ conversationId = id;
325
+ },
326
+ toggleIncognito() {
327
+ incognito = !incognito;
328
+ },
329
+ async send(message, callbacks) {
330
+ const controller = new AbortController();
331
+ activeAbortController = controller;
332
+ if (!conversationId) {
333
+ try {
334
+ conversationId = await createConversationApi(baseUrl, apiKey, message, incognito);
335
+ }
336
+ catch (err) {
337
+ callbacks.onError?.(err instanceof Error ? err : new Error(String(err)));
138
338
  return;
139
339
  }
140
- callbacks.onError?.(err instanceof Error ? err : new Error(message));
141
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);
142
349
  },
143
350
  };
144
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