neoctl 0.1.13 → 0.1.16

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.
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"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"}
@@ -37,7 +37,7 @@ export async function runToolUse(request, context, options = {}) {
37
37
  onProgress,
38
38
  });
39
39
  const output = await processToolOutput(tool, request, result, contextWithToolUseId);
40
- const resultMessage = tool.renderToolResultMessage?.(result) ?? createToolResultMessage(request, result.ok, output);
40
+ const resultMessage = tool.renderToolResultMessage?.(result, request) ?? createToolResultMessage(request, result.ok, output);
41
41
  updates.push({ message: resultMessage, context: result.contextModifier?.(contextWithToolUseId) });
42
42
  for (const message of result.newMessages ?? []) {
43
43
  updates.push({ message });
@@ -1 +1 @@
1
- {"version":3,"file":"run-tool-use.js","sourceRoot":"","sources":["../../src/tools/run-tool-use.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-tool-use.js","sourceRoot":"","sources":["../../src/tools/run-tool-use.ts"],"names":[],"mappings":"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"}
@@ -123,7 +123,7 @@ export interface Tool<TInput = unknown> {
123
123
  call?(input: TInput, context: ToolUseContext, options: ToolCallOptions<TInput>): Promise<ToolResult>;
124
124
  mapResult?(result: ToolResult, request: ToolUseRequest): unknown;
125
125
  renderToolUseMessage?(input: TInput): Message | undefined;
126
- renderToolResultMessage?(result: ToolResult): Message | undefined;
126
+ renderToolResultMessage?(result: ToolResult, request?: ToolUseRequest): Message | undefined;
127
127
  renderToolProgressMessage?(progress: ToolProgressEvent): Message | undefined;
128
128
  }
129
129
  export declare function resolveToolDescription(tool: Tool, context?: ToolUseContext): string;
@@ -0,0 +1,101 @@
1
+ import type { AgentEvent } from "../types/events.js";
2
+ import type { Message, MessageBlock } from "../types/messages.js";
3
+ export type DisplayImageMode = "data-url" | "metadata-only" | "omit";
4
+ export interface DisplayMessageOptions {
5
+ /**
6
+ * Controls how image blocks are represented for UI consumers.
7
+ * - data-url: include data URLs that can be assigned directly to <img src>.
8
+ * - metadata-only: include image metadata without embedding base64 image data.
9
+ * - omit: omit image blocks from the projected message.
10
+ */
11
+ imageMode?: DisplayImageMode;
12
+ /**
13
+ * Include thinking blocks in the projected message. Defaults to true.
14
+ */
15
+ includeThinking?: boolean;
16
+ /**
17
+ * Include tool use blocks in the projected message. Defaults to true.
18
+ */
19
+ includeToolUse?: boolean;
20
+ /**
21
+ * Include tool result blocks in the projected message. Defaults to true.
22
+ */
23
+ includeToolResult?: boolean;
24
+ }
25
+ export type DisplayMessageBlock = {
26
+ type: "text";
27
+ text: string;
28
+ } | DisplayImageBlock | {
29
+ type: "thinking";
30
+ text: string;
31
+ signature?: string;
32
+ } | {
33
+ type: "tool_use";
34
+ id: string;
35
+ name: string;
36
+ input: unknown;
37
+ } | {
38
+ type: "tool_result";
39
+ toolUseId: string;
40
+ name: string;
41
+ ok: boolean;
42
+ output: unknown;
43
+ };
44
+ export interface DisplayImageBlock {
45
+ type: "image";
46
+ label?: string;
47
+ mimeType: string;
48
+ /** Approximate original payload size decoded from base64, when available. */
49
+ sizeBytes?: number;
50
+ thumbnail?: DisplayImageSource;
51
+ original?: DisplayImageSource;
52
+ }
53
+ export interface DisplayImageSource {
54
+ /** Directly assignable to an <img src> attribute when imageMode is "data-url". */
55
+ src: string;
56
+ mimeType: string;
57
+ }
58
+ export interface DisplayMessage {
59
+ id: string;
60
+ role: Message["role"];
61
+ createdAt: string;
62
+ blocks: DisplayMessageBlock[];
63
+ providerMessageId?: string;
64
+ requestId?: string;
65
+ usage?: Message["usage"];
66
+ isMeta?: boolean;
67
+ isApiErrorMessage?: boolean;
68
+ metadata?: Message["metadata"];
69
+ }
70
+ export type DisplayAgentEvent = Exclude<AgentEvent, {
71
+ type: "message";
72
+ }> | {
73
+ type: "message";
74
+ message: DisplayMessage;
75
+ };
76
+ export interface DisplayImageAttachment {
77
+ messageId: string;
78
+ role: DisplayMessage["role"];
79
+ createdAt: string;
80
+ index: number;
81
+ label?: string;
82
+ mimeType: string;
83
+ sizeBytes?: number;
84
+ src?: string;
85
+ thumbnailSrc?: string;
86
+ originalSrc?: string;
87
+ }
88
+ export declare function imageBlockToDataUrl(block: Extract<MessageBlock, {
89
+ type: "image";
90
+ }>): string;
91
+ export declare function toDisplayAgentEvent(event: AgentEvent, options?: DisplayMessageOptions): DisplayAgentEvent;
92
+ export declare function toDisplayAgentEvents(events: readonly AgentEvent[], options?: DisplayMessageOptions): DisplayAgentEvent[];
93
+ export declare function toDisplayMessages(messages: readonly Message[], options?: DisplayMessageOptions): DisplayMessage[];
94
+ export declare function toDisplayMessage(message: Message, options?: DisplayMessageOptions): DisplayMessage;
95
+ export declare function toDisplayMessageBlock(block: MessageBlock, options?: DisplayMessageOptions): DisplayMessageBlock | undefined;
96
+ export declare function toDisplayImageBlock(block: Extract<MessageBlock, {
97
+ type: "image";
98
+ }>, options?: DisplayMessageOptions): DisplayImageBlock | undefined;
99
+ export declare function extractDisplayImages(messages: readonly DisplayMessage[]): DisplayImageAttachment[];
100
+ export declare function extractMessageImages(messages: readonly Message[], options?: DisplayMessageOptions): DisplayImageAttachment[];
101
+ export declare function estimateBase64DecodedBytes(data: string): number | undefined;
@@ -0,0 +1,113 @@
1
+ export function imageBlockToDataUrl(block) {
2
+ if (block.data.startsWith("data:"))
3
+ return block.data;
4
+ return `data:${block.mimeType};base64,${block.data}`;
5
+ }
6
+ export function toDisplayAgentEvent(event, options = {}) {
7
+ if (event.type !== "message")
8
+ return event;
9
+ return { ...event, message: toDisplayMessage(event.message, options) };
10
+ }
11
+ export function toDisplayAgentEvents(events, options = {}) {
12
+ return events.map((event) => toDisplayAgentEvent(event, options));
13
+ }
14
+ export function toDisplayMessages(messages, options = {}) {
15
+ return messages.map((message) => toDisplayMessage(message, options));
16
+ }
17
+ export function toDisplayMessage(message, options = {}) {
18
+ const blocks = message.blocks
19
+ .map((block) => toDisplayMessageBlock(block, options))
20
+ .filter((block) => block !== undefined);
21
+ return {
22
+ id: message.id,
23
+ role: message.role,
24
+ createdAt: message.createdAt,
25
+ blocks,
26
+ providerMessageId: message.providerMessageId,
27
+ requestId: message.requestId,
28
+ usage: message.usage,
29
+ isMeta: message.isMeta,
30
+ isApiErrorMessage: message.isApiErrorMessage,
31
+ metadata: message.metadata,
32
+ };
33
+ }
34
+ export function toDisplayMessageBlock(block, options = {}) {
35
+ if (block.type === "text")
36
+ return { type: "text", text: block.text };
37
+ if (block.type === "thinking") {
38
+ if (options.includeThinking === false)
39
+ return undefined;
40
+ return { type: "thinking", text: block.text, signature: block.signature };
41
+ }
42
+ if (block.type === "tool_use") {
43
+ if (options.includeToolUse === false)
44
+ return undefined;
45
+ return { type: "tool_use", id: block.id, name: block.name, input: block.input };
46
+ }
47
+ if (block.type === "tool_result") {
48
+ if (options.includeToolResult === false)
49
+ return undefined;
50
+ return { type: "tool_result", toolUseId: block.toolUseId, name: block.name, ok: block.ok, output: block.output };
51
+ }
52
+ if (block.type === "image")
53
+ return toDisplayImageBlock(block, options);
54
+ return undefined;
55
+ }
56
+ export function toDisplayImageBlock(block, options = {}) {
57
+ const imageMode = options.imageMode ?? "data-url";
58
+ if (imageMode === "omit")
59
+ return undefined;
60
+ const base = {
61
+ type: "image",
62
+ label: block.label,
63
+ mimeType: block.mimeType,
64
+ sizeBytes: estimateBase64DecodedBytes(normalizeBase64ImageData(block.data)),
65
+ };
66
+ if (imageMode === "metadata-only")
67
+ return base;
68
+ const src = imageBlockToDataUrl(block);
69
+ return {
70
+ ...base,
71
+ thumbnail: { src, mimeType: block.mimeType },
72
+ original: { src, mimeType: block.mimeType },
73
+ };
74
+ }
75
+ export function extractDisplayImages(messages) {
76
+ const images = [];
77
+ for (const message of messages) {
78
+ message.blocks.forEach((block, index) => {
79
+ if (block.type !== "image")
80
+ return;
81
+ images.push({
82
+ messageId: message.id,
83
+ role: message.role,
84
+ createdAt: message.createdAt,
85
+ index,
86
+ label: block.label,
87
+ mimeType: block.mimeType,
88
+ sizeBytes: block.sizeBytes,
89
+ src: block.original?.src ?? block.thumbnail?.src,
90
+ thumbnailSrc: block.thumbnail?.src,
91
+ originalSrc: block.original?.src,
92
+ });
93
+ });
94
+ }
95
+ return images;
96
+ }
97
+ export function extractMessageImages(messages, options = {}) {
98
+ return extractDisplayImages(toDisplayMessages(messages, options));
99
+ }
100
+ export function estimateBase64DecodedBytes(data) {
101
+ const normalized = normalizeBase64ImageData(data).trim().replace(/\s+/g, "");
102
+ if (!normalized)
103
+ return 0;
104
+ if (!/^[A-Za-z0-9+/]*={0,2}$/.test(normalized) || normalized.length % 4 !== 0)
105
+ return undefined;
106
+ const padding = normalized.endsWith("==") ? 2 : normalized.endsWith("=") ? 1 : 0;
107
+ return Math.max(0, (normalized.length / 4) * 3 - padding);
108
+ }
109
+ function normalizeBase64ImageData(data) {
110
+ const match = /^data:[^;]+;base64,(.*)$/i.exec(data.trim());
111
+ return match?.[1] ?? data;
112
+ }
113
+ //# sourceMappingURL=display-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"display-message.js","sourceRoot":"","sources":["../../src/ui/display-message.ts"],"names":[],"mappings":"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"}
package/dist/web/html.js CHANGED
@@ -51,6 +51,9 @@ export const WEB_HTML = String.raw `<!doctype html>
51
51
  .kind-tool.collapsible .content { padding-right: 78px; }
52
52
  .tool-body { position: relative; }
53
53
  .kind-tool.collapsed .tool-body { max-height: calc(1.45em * 6); overflow: hidden; opacity: .72; mask-image: linear-gradient(to bottom, rgba(0,0,0,1) 0%, rgba(0,0,0,.84) 42%, rgba(0,0,0,.42) 76%, rgba(0,0,0,0) 100%); -webkit-mask-image: linear-gradient(to bottom, rgba(0,0,0,1) 0%, rgba(0,0,0,.84) 42%, rgba(0,0,0,.42) 76%, rgba(0,0,0,0) 100%); }
54
+ .message-image { display: block; margin-top: 8px; max-width: min(100%, 760px); }
55
+ .message-image img { display: block; max-width: 100%; max-height: 70vh; border: 1px solid #202635; border-radius: 10px; background: #0c1018; box-shadow: 0 10px 30px rgba(0,0,0,.28); object-fit: contain; }
56
+ .message-image figcaption { margin-top: 5px; color: var(--muted); font-size: 12px; }
54
57
  .tool-toggle { position: absolute; top: 0; right: 0; opacity: 0; pointer-events: none; border: 1px solid #263043; border-radius: 999px; padding: 1px 8px; background: rgba(15, 23, 42, .92); color: var(--muted); font: inherit; font-size: 11px; line-height: 17px; cursor: pointer; transition: opacity .12s ease, color .12s ease, border-color .12s ease; }
55
58
  .kind-tool.collapsible:hover .tool-toggle, .kind-tool.collapsible:focus-within .tool-toggle { opacity: 1; pointer-events: auto; }
56
59
  .tool-toggle:hover { color: var(--cyan); border-color: #31556b; }
@@ -298,7 +301,7 @@ function updateLineElement(element, line) {
298
301
  const markdown = shouldRenderMarkdown(line);
299
302
  const cls = ['block', 'kind-' + kind, line.live ? 'live' : '', line.previewStyle === 'summary' ? 'summary-block' : '', collapsible ? 'collapsible' : '', collapsed ? 'collapsed' : '', expanded ? 'expanded' : ''].filter(Boolean).join(' ');
300
303
  const contentCls = ['content', markdown ? 'markdown' : 'plain', line.previewStyle === 'summary' ? 'summary' : ''].filter(Boolean).join(' ');
301
- const body = '<div class="tool-body">' + bodyTitle + renderText(line.text || '', line.format, markdown) + '</div>';
304
+ const body = '<div class="tool-body">' + bodyTitle + renderText(line.text || '', line.format, markdown) + renderLineImage(line.image) + '</div>';
302
305
  const toggle = collapsible ? '<button class="tool-toggle" type="button" data-line-id="' + String(line.id) + '" aria-expanded="' + (expanded ? 'true' : 'false') + '">' + (expanded ? 'collapse' : 'expand') + '</button>' : '';
303
306
  element.className = cls;
304
307
  element.innerHTML = '<div class="marker ' + markerCls + '">' + marker + '</div><div class="' + contentCls + '">' + title + body + toggle + '</div>';
@@ -307,7 +310,8 @@ function lineRenderKey(line) {
307
310
  const kind = line.kind || 'system';
308
311
  const expanded = state.expandedToolLines.has(line.id);
309
312
  const collapsible = kind === 'tool' && line.collapsible !== false && hasMoreThanLines(line.text || '', TOOL_COLLAPSED_LINES);
310
- return [kind, line.text || '', line.title || '', line.bodyTitle || '', line.titleStatus || '', line.format || '', line.previewStyle || '', line.summaryMaxLines || '', line.live ? '1' : '0', line.pendingReplacement ? '1' : '0', collapsible ? '1' : '0', expanded ? '1' : '0'].join('\u001f');
313
+ const image = line.image ? [line.image.src || '', line.image.label || '', line.image.mimeType || ''].join('\u001e') : '';
314
+ return [kind, line.text || '', line.title || '', line.bodyTitle || '', line.titleStatus || '', line.format || '', line.previewStyle || '', line.summaryMaxLines || '', line.live ? '1' : '0', line.pendingReplacement ? '1' : '0', collapsible ? '1' : '0', expanded ? '1' : '0', image].join('\u001f');
311
315
  }
312
316
  function markerForLine(line, kind) {
313
317
  if (kind === 'tool') return line.live || line.pendingReplacement ? '◇' : '◆';
@@ -332,6 +336,12 @@ function renderText(text, format, markdown) {
332
336
  if (!markdown) return linkify(esc(text));
333
337
  return sanitizeMarkdownHtml(marked.parse(text || ''));
334
338
  }
339
+ function renderLineImage(image) {
340
+ if (!image || !safeImageSrc(image.src)) return '';
341
+ const label = image.label || 'image';
342
+ const caption = [label, image.mimeType].filter(Boolean).join(' · ');
343
+ return '<figure class="message-image"><img src="' + esc(image.src) + '" alt="' + esc(label) + '" loading="lazy" decoding="async" />' + (caption ? '<figcaption>' + esc(caption) + '</figcaption>' : '') + '</figure>';
344
+ }
335
345
  function renderDiffText(text) {
336
346
  const lines = String(text || '').split('\n');
337
347
  return '<span class="diff">' + lines.map((line) => {
@@ -829,6 +839,14 @@ function safeHref(value) {
829
839
  return url.protocol === 'http:' || url.protocol === 'https:' || url.protocol === 'mailto:';
830
840
  } catch { return false; }
831
841
  }
842
+ function safeImageSrc(value) {
843
+ if (typeof value !== 'string') return false;
844
+ if (/^data:image\/[a-z0-9.+-]+;base64,[a-z0-9+/=\s]+$/i.test(value)) return true;
845
+ try {
846
+ const url = new URL(value, window.location.href);
847
+ return url.protocol === 'http:' || url.protocol === 'https:';
848
+ } catch { return false; }
849
+ }
832
850
  function esc(value) { return String(value).replace(/[&<>"']/g, c => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#39;' }[c])); }
833
851
  function linkify(value) { return value.replace(/(https?:\/\/[^\s<]+)/g, '<a style="color:var(--cyan)" target="_blank" href="$1">$1</a>'); }
834
852
  document.getElementById('app').classList.toggle('sessions-page', sessionsPage());
@@ -1 +1 @@
1
- {"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/web/html.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAu0B1B,CAAC"}
1
+ {"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/web/html.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAy1B1B,CAAC"}
package/dist/web/index.js CHANGED
@@ -19,6 +19,7 @@ import { listDirectoryTool, readFileTool } from "../tools/builtins/filesystem-to
19
19
  import { grepTool } from "../tools/builtins/grep-tool.js";
20
20
  import { searchTool } from "../tools/builtins/search-tool.js";
21
21
  import { planTool } from "../tools/builtins/plan-tool.js";
22
+ import { createOpenAIImageGenerationTool } from "../tools/builtins/image-generation-tool.js";
22
23
  import { createAgentTool, resumeAgentTask } from "../agents/agent-tool.js";
23
24
  import { createTaskTools } from "../tasks/task-tools.js";
24
25
  import { TaskStore } from "../tasks/task-store.js";
@@ -119,6 +120,8 @@ async function createRuntime() {
119
120
  tools.register(readFileTool);
120
121
  tools.register(grepTool);
121
122
  tools.register(searchTool);
123
+ if (modelConfig?.provider === "openai")
124
+ tools.register(createOpenAIImageGenerationTool());
122
125
  tools.register(planTool);
123
126
  const agentRuntime = { modelGateway, tools, taskStore };
124
127
  tools.register(createAgentTool(agentRuntime));
@@ -160,6 +163,7 @@ async function createRuntime() {
160
163
  agentRuntime,
161
164
  usage: new SessionUsageTracker(),
162
165
  taskStore,
166
+ tools,
163
167
  initialMetrics,
164
168
  defaultReasoning: modelConfig?.defaultReasoning,
165
169
  envPath: process.env.NEO_ENV_FILE?.trim() ? path.resolve(process.env.NEO_ENV_FILE.trim()) : envLoad.userDotEnvPath,
@@ -182,6 +186,11 @@ function createTaskNotificationSource(taskStore) {
182
186
  },
183
187
  };
184
188
  }
189
+ function syncImageGenerationTool(runtime, provider) {
190
+ runtime.tools.unregister("image2");
191
+ if (provider === "openai")
192
+ runtime.tools.register(createOpenAIImageGenerationTool());
193
+ }
185
194
  function formatCreatedEnvNotice(dotEnvPath) {
186
195
  return `Created default config file: ${dotEnvPath}\nSet MODEL_PROVIDER and the matching provider section (for example OPENAI_API_KEY or KIMI_API_KEY), then restart neo.`;
187
196
  }
@@ -372,6 +381,7 @@ class WebRepl {
372
381
  this.runtime.modelGateway.setInner(innerGateway);
373
382
  this.runtime.agentRuntime.modelGateway = this.runtime.modelGateway;
374
383
  this.runtime.engine.setModelProvider({ modelGateway: this.runtime.modelGateway, model: config.model, fallbackModel: config.fallbackModel, reasoning: config.defaultReasoning });
384
+ syncImageGenerationTool(this.runtime, config.provider);
375
385
  this.runtime.defaultReasoning = config.defaultReasoning;
376
386
  const metrics = await this.runtime.engine.contextMetrics();
377
387
  this.setStatus({ ...this.status, metrics, activityTick: this.status.activityTick + 1 });
@@ -546,11 +556,13 @@ class WebRepl {
546
556
  }
547
557
  }
548
558
  if (replacedStreamingContent) {
559
+ renderMessageImages(event.message, (line) => this.append(line));
549
560
  this.broadcastSync();
550
561
  return;
551
562
  }
552
563
  if (event.message.role === "tool_result") {
553
564
  renderToolResultMessage(event.message, (line) => this.append(line), (id, patch) => this.replaceLine(id, patch), this.toolLineIds);
565
+ renderMessageImages(event.message, (line) => this.append(line));
554
566
  return;
555
567
  }
556
568
  if (event.message.role !== "assistant") {
@@ -1007,6 +1019,7 @@ async function handleModelCommand(command, runtime) {
1007
1019
  runtime.modelGateway.setInner(innerGateway);
1008
1020
  runtime.agentRuntime.modelGateway = runtime.modelGateway;
1009
1021
  runtime.engine.setModelProvider({ modelGateway: runtime.modelGateway, model: config.model, fallbackModel: config.fallbackModel, reasoning: config.defaultReasoning });
1022
+ syncImageGenerationTool(runtime, config.provider);
1010
1023
  runtime.defaultReasoning = config.defaultReasoning;
1011
1024
  }
1012
1025
  }
@@ -1325,10 +1338,10 @@ function renderMessage(message, append, activeAssistantId, options = {}) {
1325
1338
  rendered = true;
1326
1339
  }
1327
1340
  else if (block.type === "image") {
1328
- const kind = kindForRole(message.role);
1329
- if (kind === "meta")
1341
+ const line = imageLineForBlock(message.role, block);
1342
+ if (!line)
1330
1343
  continue;
1331
- append({ kind, text: block.label ?? `[image ${block.mimeType}]` });
1344
+ append(line);
1332
1345
  rendered = true;
1333
1346
  }
1334
1347
  else if (block.type === "thinking") {
@@ -1363,6 +1376,38 @@ function renderToolResultMessage(message, append, replaceLine, activeToolLineIds
1363
1376
  }
1364
1377
  return rendered;
1365
1378
  }
1379
+ function renderMessageImages(message, append) {
1380
+ let rendered = false;
1381
+ for (const block of message.blocks) {
1382
+ if (block.type !== "image")
1383
+ continue;
1384
+ const line = imageLineForBlock(message.role, block);
1385
+ if (!line)
1386
+ continue;
1387
+ append(line);
1388
+ rendered = true;
1389
+ }
1390
+ return rendered;
1391
+ }
1392
+ function imageLineForBlock(role, block) {
1393
+ const kind = kindForRole(role);
1394
+ if (kind === "meta")
1395
+ return undefined;
1396
+ return {
1397
+ kind,
1398
+ text: block.label ?? `[image ${block.mimeType}]`,
1399
+ image: {
1400
+ src: imageBlockToDataUrl(block),
1401
+ label: block.label,
1402
+ mimeType: block.mimeType,
1403
+ },
1404
+ };
1405
+ }
1406
+ function imageBlockToDataUrl(block) {
1407
+ if (block.data.startsWith("data:"))
1408
+ return block.data;
1409
+ return `data:${block.mimeType};base64,${block.data}`;
1410
+ }
1366
1411
  function assistantText(message) {
1367
1412
  const text = message.blocks.filter((block) => block.type === "text").map((block) => block.text).join("");
1368
1413
  return text.length > 0 ? text : undefined;