neoctl 0.1.12 → 0.1.14
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 +172 -10
- package/dist/context/prompts.js +4 -0
- package/dist/context/prompts.js.map +1 -1
- package/dist/core/query.js +23 -4
- package/dist/core/query.js.map +1 -1
- package/dist/core/smoke-core-loop.js +43 -1
- package/dist/core/smoke-core-loop.js.map +1 -1
- package/dist/index.d.ts +23 -0
- package/dist/index.js +23 -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/skills/skill-filesystem.d.ts +32 -0
- package/dist/skills/skill-filesystem.js +371 -0
- package/dist/skills/skill-filesystem.js.map +1 -0
- package/dist/skills/skill-management-tools.d.ts +36 -0
- package/dist/skills/skill-management-tools.js +188 -0
- package/dist/skills/skill-management-tools.js.map +1 -0
- package/dist/skills/skill-tool.d.ts +85 -5
- package/dist/skills/skill-tool.js +173 -14
- package/dist/skills/skill-tool.js.map +1 -1
- package/dist/skills/smoke-skills.js +53 -4
- package/dist/skills/smoke-skills.js.map +1 -1
- 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 +9 -1
- package/dist/tools/tool.js.map +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/index.js +11 -0
- package/dist/web/index.js.map +1 -1
- package/package.json +19 -1
package/dist/tools/tool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/tools/tool.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/tools/tool.ts"],"names":[],"mappings":"AAgJA,MAAM,UAAU,sBAAsB,CAAC,IAAU,EAAE,OAAwB;IACzE,OAAO,OAAO,IAAI,CAAC,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;AAC1G,CAAC"}
|
|
@@ -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/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 });
|
|
@@ -1007,6 +1017,7 @@ async function handleModelCommand(command, runtime) {
|
|
|
1007
1017
|
runtime.modelGateway.setInner(innerGateway);
|
|
1008
1018
|
runtime.agentRuntime.modelGateway = runtime.modelGateway;
|
|
1009
1019
|
runtime.engine.setModelProvider({ modelGateway: runtime.modelGateway, model: config.model, fallbackModel: config.fallbackModel, reasoning: config.defaultReasoning });
|
|
1020
|
+
syncImageGenerationTool(runtime, config.provider);
|
|
1010
1021
|
runtime.defaultReasoning = config.defaultReasoning;
|
|
1011
1022
|
}
|
|
1012
1023
|
}
|