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.
- package/README.md +103 -0
- package/dist/context/prompts.js +4 -0
- package/dist/context/prompts.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/repl/index.js +11 -0
- package/dist/repl/index.js.map +1 -1
- package/dist/session/simple-session-runtime.d.ts +74 -0
- package/dist/session/simple-session-runtime.js +171 -0
- package/dist/session/simple-session-runtime.js.map +1 -0
- package/dist/tools/builtins/image-generation-tool.d.ts +51 -0
- package/dist/tools/builtins/image-generation-tool.js +298 -0
- package/dist/tools/builtins/image-generation-tool.js.map +1 -0
- package/dist/tools/registry.d.ts +1 -0
- package/dist/tools/registry.js +11 -0
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/run-tool-use.js +1 -1
- package/dist/tools/run-tool-use.js.map +1 -1
- package/dist/tools/tool.d.ts +1 -1
- package/dist/ui/display-message.d.ts +101 -0
- package/dist/ui/display-message.js +113 -0
- package/dist/ui/display-message.js.map +1 -0
- package/dist/web/html.js +20 -2
- package/dist/web/html.js.map +1 -1
- package/dist/web/index.js +48 -3
- package/dist/web/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -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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"}
|
package/dist/tools/tool.d.ts
CHANGED
|
@@ -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
|
-
|
|
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 => ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }[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());
|
package/dist/web/html.js.map
CHANGED
|
@@ -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
|
|
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
|
|
1329
|
-
if (
|
|
1341
|
+
const line = imageLineForBlock(message.role, block);
|
|
1342
|
+
if (!line)
|
|
1330
1343
|
continue;
|
|
1331
|
-
append(
|
|
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;
|