neoctl 0.1.18 → 0.1.19

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 (121) hide show
  1. package/dist/agents/local-agent-task.js +1 -2
  2. package/dist/agents/local-agent-task.js.map +1 -1
  3. package/dist/agents/smoke-agents.js +4 -21
  4. package/dist/agents/smoke-agents.js.map +1 -1
  5. package/dist/context/prompts.js +0 -4
  6. package/dist/context/prompts.js.map +1 -1
  7. package/dist/core/query-engine.d.ts +1 -22
  8. package/dist/core/query-engine.js +12 -106
  9. package/dist/core/query-engine.js.map +1 -1
  10. package/dist/core/query.d.ts +1 -2
  11. package/dist/core/query.js +5 -59
  12. package/dist/core/query.js.map +1 -1
  13. package/dist/core/smoke-core-loop.js +6 -95
  14. package/dist/core/smoke-core-loop.js.map +1 -1
  15. package/dist/index.d.ts +1 -25
  16. package/dist/index.js +1 -25
  17. package/dist/index.js.map +1 -1
  18. package/dist/model/communication-logger.d.ts +1 -2
  19. package/dist/model/communication-logger.js +0 -3
  20. package/dist/model/communication-logger.js.map +1 -1
  21. package/dist/model/config.d.ts +4 -10
  22. package/dist/model/config.js +12 -61
  23. package/dist/model/config.js.map +1 -1
  24. package/dist/model/context-window.js +0 -1
  25. package/dist/model/context-window.js.map +1 -1
  26. package/dist/model/env.js +19 -35
  27. package/dist/model/env.js.map +1 -1
  28. package/dist/model/model-metadata.json +677 -726
  29. package/dist/model/openai-adapter.d.ts +1 -1
  30. package/dist/model/openai-chat-mapper.d.ts +1 -4
  31. package/dist/model/openai-chat-mapper.js +8 -30
  32. package/dist/model/openai-chat-mapper.js.map +1 -1
  33. package/dist/model/openai-mappers.d.ts +2 -5
  34. package/dist/model/openai-mappers.js +4 -17
  35. package/dist/model/openai-mappers.js.map +1 -1
  36. package/dist/model/openai-responses-mapper.d.ts +1 -1
  37. package/dist/model/openai-responses-mapper.js +1 -2
  38. package/dist/model/openai-responses-mapper.js.map +1 -1
  39. package/dist/model/provider-factory.js +0 -32
  40. package/dist/model/provider-factory.js.map +1 -1
  41. package/dist/model/smoke-openai.js +1 -1
  42. package/dist/model/smoke-openai.js.map +1 -1
  43. package/dist/model/smoke-responses-mapper.js +6 -6
  44. package/dist/model/smoke-responses-mapper.js.map +1 -1
  45. package/dist/repl/commands.d.ts +0 -15
  46. package/dist/repl/commands.js +0 -58
  47. package/dist/repl/commands.js.map +1 -1
  48. package/dist/repl/index.js +144 -974
  49. package/dist/repl/index.js.map +1 -1
  50. package/dist/repl/render.js +2 -0
  51. package/dist/repl/render.js.map +1 -1
  52. package/dist/repl/status-line.d.ts +1 -0
  53. package/dist/repl/status-line.js +34 -27
  54. package/dist/repl/status-line.js.map +1 -1
  55. package/dist/session/session-store.js +2 -2
  56. package/dist/session/session-store.js.map +1 -1
  57. package/dist/session/smoke-session.js +1 -22
  58. package/dist/session/smoke-session.js.map +1 -1
  59. package/dist/skills/skill-tool.d.ts +5 -85
  60. package/dist/skills/skill-tool.js +14 -173
  61. package/dist/skills/skill-tool.js.map +1 -1
  62. package/dist/skills/smoke-skills.js +5 -54
  63. package/dist/skills/smoke-skills.js.map +1 -1
  64. package/dist/tools/builtins/search-providers.d.ts +1 -15
  65. package/dist/tools/builtins/search-providers.js +1 -195
  66. package/dist/tools/builtins/search-providers.js.map +1 -1
  67. package/dist/tools/builtins/search-tool.js +2 -2
  68. package/dist/tools/builtins/search-tool.js.map +1 -1
  69. package/dist/tools/registry.d.ts +0 -1
  70. package/dist/tools/registry.js +0 -11
  71. package/dist/tools/registry.js.map +1 -1
  72. package/dist/tools/run-tool-use.js +1 -1
  73. package/dist/tools/run-tool-use.js.map +1 -1
  74. package/dist/tools/smoke-tool-system.js +9 -43
  75. package/dist/tools/smoke-tool-system.js.map +1 -1
  76. package/dist/tools/tool.d.ts +1 -9
  77. package/dist/tools/tool.js.map +1 -1
  78. package/package.json +1 -1
  79. package/scripts/build-standalone.mjs +139 -139
  80. package/dist/model/deepseek-adapter.d.ts +0 -29
  81. package/dist/model/deepseek-adapter.js +0 -108
  82. package/dist/model/deepseek-adapter.js.map +0 -1
  83. package/dist/model/kimi-adapter.d.ts +0 -29
  84. package/dist/model/kimi-adapter.js +0 -108
  85. package/dist/model/kimi-adapter.js.map +0 -1
  86. package/dist/model/smoke-deepseek-mapper.d.ts +0 -1
  87. package/dist/model/smoke-deepseek-mapper.js +0 -65
  88. package/dist/model/smoke-deepseek-mapper.js.map +0 -1
  89. package/dist/open-directory.d.ts +0 -1
  90. package/dist/open-directory.js +0 -26
  91. package/dist/open-directory.js.map +0 -1
  92. package/dist/paths.d.ts +0 -7
  93. package/dist/paths.js +0 -12
  94. package/dist/paths.js.map +0 -1
  95. package/dist/session/session-export.d.ts +0 -33
  96. package/dist/session/session-export.js +0 -351
  97. package/dist/session/session-export.js.map +0 -1
  98. package/dist/session/simple-session-runtime.d.ts +0 -74
  99. package/dist/session/simple-session-runtime.js +0 -171
  100. package/dist/session/simple-session-runtime.js.map +0 -1
  101. package/dist/skills/skill-filesystem.d.ts +0 -32
  102. package/dist/skills/skill-filesystem.js +0 -371
  103. package/dist/skills/skill-filesystem.js.map +0 -1
  104. package/dist/skills/skill-management-tools.d.ts +0 -36
  105. package/dist/skills/skill-management-tools.js +0 -188
  106. package/dist/skills/skill-management-tools.js.map +0 -1
  107. package/dist/tips.d.ts +0 -10
  108. package/dist/tips.js +0 -168
  109. package/dist/tips.js.map +0 -1
  110. package/dist/tools/builtins/image-generation-tool.d.ts +0 -96
  111. package/dist/tools/builtins/image-generation-tool.js +0 -471
  112. package/dist/tools/builtins/image-generation-tool.js.map +0 -1
  113. package/dist/ui/display-message.d.ts +0 -101
  114. package/dist/ui/display-message.js +0 -113
  115. package/dist/ui/display-message.js.map +0 -1
  116. package/dist/web/html.d.ts +0 -1
  117. package/dist/web/html.js +0 -858
  118. package/dist/web/html.js.map +0 -1
  119. package/dist/web/index.d.ts +0 -2
  120. package/dist/web/index.js +0 -1814
  121. package/dist/web/index.js.map +0 -1
@@ -1,471 +0,0 @@
1
- const DEFAULT_OPENAI_BASE_URL = "https://api.openai.com";
2
- const DEFAULT_IMAGE_MODEL = "gpt-image-1";
3
- const DEFAULT_TIMEOUT_MS = 120_000;
4
- const MAX_IMAGES = 4;
5
- /**
6
- * OpenAI-only image generation tool backed by the Images API.
7
- *
8
- * The tool is intentionally exposed only when MODEL_PROVIDER=openai. Other providers
9
- * should not receive a drawable tool definition; the default system prompt tells the
10
- * model that image generation is unavailable in that configuration.
11
- */
12
- export function createOpenAIImageGenerationTool(options = {}) {
13
- return {
14
- name: "image2",
15
- aliases: ["draw_image", "generate_image", "edit_image", "modify_image"],
16
- description: "Generate or edit images with OpenAI's Images API. Use mode=generate for new images and mode=edit to modify existing images. Edit mode accepts explicit image/image(s), imageRefs for prior conversation images, or falls back to the latest prior image. Return generated/edited image data URLs in the tool result for the UI to display. This tool is available only when MODEL_PROVIDER=openai; with other providers, state that this model does not have a drawing/editing tool.",
17
- inputSchema: {
18
- type: "object",
19
- properties: {
20
- mode: { type: "string", enum: ["generate", "edit"], description: "Operation mode. generate creates a new image; edit modifies existing image(s). Defaults to generate." },
21
- prompt: { type: "string", description: "Detailed image prompt/instruction. For edit mode, describe exactly how to modify the source image(s)." },
22
- model: { type: "string", description: `Optional OpenAI image model. Defaults to OPENAI_IMAGE_MODEL or ${DEFAULT_IMAGE_MODEL}.` },
23
- size: { type: "string", enum: ["auto", "1024x1024", "1536x1024", "1024x1536"], description: "Output image size. Use 1024x1024 for square, 1536x1024 for landscape, 1024x1536 for portrait. Defaults to auto." },
24
- quality: { type: "string", enum: ["auto", "low", "medium", "high"], description: "Rendering quality. Defaults to auto." },
25
- outputFormat: { type: "string", enum: ["png", "jpeg", "webp"], description: "Returned image format. Defaults to png." },
26
- background: { type: "string", enum: ["auto", "transparent", "opaque"], description: "Background handling for supported models. Defaults to auto." },
27
- moderation: { type: "string", enum: ["auto", "low"], description: "OpenAI image moderation setting for supported models. Defaults to auto." },
28
- n: { type: "integer", description: `Number of output images, 1-${MAX_IMAGES}. Defaults to 1.` },
29
- image: { type: "object", description: "Single source image for mode=edit. Provide base64/data/dataUrl plus mimeType when not using a dataUrl.", additionalProperties: true },
30
- images: { type: "array", description: "Multiple source images for mode=edit.", items: { type: "object", additionalProperties: true } },
31
- imageRefs: { type: "array", description: "Labels of prior conversation image blocks to edit, e.g. Generated image 1 or [img#1].", items: { type: "string" } },
32
- useLatestImage: { type: "boolean", description: "In edit mode, use the latest prior conversation image when no explicit source image or imageRefs are provided. Defaults to true." },
33
- },
34
- required: ["prompt"],
35
- additionalProperties: false,
36
- },
37
- metadata: {
38
- readOnly: false,
39
- concurrent: true,
40
- visible: true,
41
- maxResultSizeChars: 24000,
42
- },
43
- validate(input) {
44
- const record = input;
45
- return {
46
- mode: record.mode ?? "generate",
47
- prompt: record.prompt ?? "",
48
- model: record.model,
49
- size: record.size ?? "auto",
50
- quality: record.quality ?? "auto",
51
- outputFormat: record.outputFormat ?? "png",
52
- background: record.background ?? "auto",
53
- moderation: record.moderation ?? "auto",
54
- n: record.n ?? 1,
55
- image: record.image,
56
- images: record.images,
57
- imageRefs: record.imageRefs,
58
- useLatestImage: record.useLatestImage ?? true,
59
- };
60
- },
61
- validateInput(input) {
62
- if (!isImageToolMode(input.mode))
63
- return { ok: false, message: "image2.mode must be generate or edit" };
64
- if (!input.prompt.trim())
65
- return { ok: false, message: "image2.prompt cannot be empty" };
66
- if (input.model !== undefined && !input.model.trim())
67
- return { ok: false, message: "image2.model cannot be empty" };
68
- if (!isImageSize(input.size))
69
- return { ok: false, message: "image2.size must be auto, 1024x1024, 1536x1024, or 1024x1536" };
70
- if (!isImageQuality(input.quality))
71
- return { ok: false, message: "image2.quality must be auto, low, medium, or high" };
72
- if (!isImageFormat(input.outputFormat))
73
- return { ok: false, message: "image2.outputFormat must be png, jpeg, or webp" };
74
- if (!isImageBackground(input.background))
75
- return { ok: false, message: "image2.background must be auto, transparent, or opaque" };
76
- if (!isImageModeration(input.moderation))
77
- return { ok: false, message: "image2.moderation must be auto or low" };
78
- const count = input.n ?? 1;
79
- if (!Number.isInteger(count) || count < 1 || count > MAX_IMAGES)
80
- return { ok: false, message: `image2.n must be between 1 and ${MAX_IMAGES}` };
81
- if (input.images !== undefined && (!Array.isArray(input.images) || input.images.length === 0))
82
- return { ok: false, message: "image2.images must be a non-empty array when provided" };
83
- if (input.imageRefs !== undefined && (!Array.isArray(input.imageRefs) || input.imageRefs.some((ref) => !ref.trim())))
84
- return { ok: false, message: "image2.imageRefs must contain non-empty strings" };
85
- return { ok: true, value: { ...input, n: count } };
86
- },
87
- isConcurrencySafe() {
88
- return true;
89
- },
90
- async call(input, context, callOptions) {
91
- const apiKey = resolveApiKey(options.apiKey);
92
- if (!apiKey) {
93
- return {
94
- ok: false,
95
- output: {
96
- provider: "openai",
97
- error: "OpenAI image generation requires OPENAI_IMAGE_API_KEY or OPENAI_API_KEY.",
98
- },
99
- };
100
- }
101
- const baseUrl = stripTrailingSlash(options.baseUrl?.trim() || process.env.OPENAI_IMAGE_BASE_URL?.trim() || process.env.OPENAI_BASE_URL?.trim() || DEFAULT_OPENAI_BASE_URL);
102
- const model = input.model?.trim() || options.model?.trim() || process.env.OPENAI_IMAGE_MODEL?.trim() || DEFAULT_IMAGE_MODEL;
103
- const timeoutMs = options.timeoutMs ?? parsePositiveNumber(process.env.OPENAI_IMAGE_TIMEOUT_MS) ?? parsePositiveNumber(process.env.MODEL_TIMEOUT_MS) ?? DEFAULT_TIMEOUT_MS;
104
- const mode = input.mode ?? "generate";
105
- callOptions.onProgress?.({ toolName: "image2", message: `${mode === "edit" ? "Editing" : "Generating"} image with OpenAI ${model}` });
106
- const startedAt = Date.now();
107
- try {
108
- const editSources = mode === "edit" ? resolveImageEditSources(input, context.messages) : [];
109
- if (mode === "edit" && editSources.length === 0) {
110
- throw new Error("image2 mode=edit requires a source image. Provide image/images/imageRefs, attach an image, or keep useLatestImage enabled with a prior image in the conversation.");
111
- }
112
- const response = mode === "edit"
113
- ? await callOpenAIImageEdit({
114
- apiKey,
115
- baseUrl,
116
- timeoutMs,
117
- signal: context.abortSignal,
118
- input: { ...input, model },
119
- images: editSources,
120
- })
121
- : await callOpenAIImageGeneration({
122
- apiKey,
123
- baseUrl,
124
- timeoutMs,
125
- signal: context.abortSignal,
126
- input: { ...input, model },
127
- });
128
- const images = extractGeneratedImages(response, input.outputFormat ?? "png");
129
- const timing = imageGenerationTiming(startedAt);
130
- const output = {
131
- ...timing,
132
- provider: "openai",
133
- mode,
134
- model,
135
- prompt: input.prompt,
136
- size: input.size ?? "auto",
137
- quality: input.quality ?? "auto",
138
- outputFormat: input.outputFormat ?? "png",
139
- background: input.background ?? "auto",
140
- returnedImages: images.length,
141
- sourceImages: mode === "edit" ? editSources.length : undefined,
142
- imageRefs: mode === "edit" ? editSources.map((source) => source.label).filter((label) => Boolean(label)) : undefined,
143
- images,
144
- raw: compactRawResponse(response),
145
- };
146
- return {
147
- ok: images.length > 0,
148
- output,
149
- summary: images.length ? `${images.length} image(s) ${mode === "edit" ? "edited" : "generated"} in ${timing.duration}ms` : `OpenAI returned no image data after ${timing.duration}ms`,
150
- };
151
- }
152
- catch (error) {
153
- return {
154
- ok: false,
155
- output: {
156
- ...imageGenerationTiming(startedAt),
157
- provider: "openai",
158
- mode,
159
- model,
160
- prompt: input.prompt,
161
- error: error instanceof Error ? error.message : String(error),
162
- },
163
- };
164
- }
165
- },
166
- mapResult(result) {
167
- return compactImageGenerationOutput(result.output);
168
- },
169
- renderToolResultMessage(result, request) {
170
- return createImageGenerationToolResultMessage(result, request?.id ?? "");
171
- },
172
- };
173
- }
174
- export const openAIImageGenerationTool = createOpenAIImageGenerationTool();
175
- async function callOpenAIImageGeneration(options) {
176
- const controller = new AbortController();
177
- const abort = () => controller.abort(options.signal?.reason);
178
- const timeout = setTimeout(() => controller.abort(new Error(`Image generation request timed out after ${options.timeoutMs}ms`)), options.timeoutMs);
179
- options.signal?.addEventListener("abort", abort, { once: true });
180
- try {
181
- const response = await fetch(`${options.baseUrl}/v1/images/generations`, {
182
- method: "POST",
183
- headers: {
184
- Accept: "application/json",
185
- "Content-Type": "application/json",
186
- Authorization: `Bearer ${options.apiKey}`,
187
- },
188
- body: JSON.stringify(buildOpenAIImageRequestBody(options.input)),
189
- signal: controller.signal,
190
- });
191
- const text = await response.text();
192
- const body = text ? parseJsonObject(text) : {};
193
- if (!response.ok) {
194
- throw new Error(`OpenAI image generation HTTP ${response.status}: ${openAIErrorMessage(body) ?? text.slice(0, 1000)}`);
195
- }
196
- return body;
197
- }
198
- finally {
199
- clearTimeout(timeout);
200
- options.signal?.removeEventListener("abort", abort);
201
- }
202
- }
203
- async function callOpenAIImageEdit(options) {
204
- const controller = new AbortController();
205
- const abort = () => controller.abort(options.signal?.reason);
206
- const timeout = setTimeout(() => controller.abort(new Error(`Image edit request timed out after ${options.timeoutMs}ms`)), options.timeoutMs);
207
- options.signal?.addEventListener("abort", abort, { once: true });
208
- try {
209
- const form = new FormData();
210
- for (const image of options.images) {
211
- form.append("image[]", base64ToBlob(image.base64, image.mimeType), image.filename);
212
- }
213
- for (const [key, value] of Object.entries(buildOpenAIImageRequestBody(options.input))) {
214
- if (value !== undefined)
215
- form.append(key, String(value));
216
- }
217
- const response = await fetch(`${options.baseUrl}/v1/images/edits`, {
218
- method: "POST",
219
- headers: {
220
- Accept: "application/json",
221
- Authorization: `Bearer ${options.apiKey}`,
222
- },
223
- body: form,
224
- signal: controller.signal,
225
- });
226
- const text = await response.text();
227
- const body = text ? parseJsonObject(text) : {};
228
- if (!response.ok) {
229
- throw new Error(`OpenAI image edit HTTP ${response.status}: ${openAIErrorMessage(body) ?? text.slice(0, 1000)}`);
230
- }
231
- return body;
232
- }
233
- finally {
234
- clearTimeout(timeout);
235
- options.signal?.removeEventListener("abort", abort);
236
- }
237
- }
238
- function buildOpenAIImageRequestBody(input) {
239
- return dropUndefined({
240
- model: input.model,
241
- prompt: input.prompt,
242
- n: input.n ?? 1,
243
- size: input.size ?? "auto",
244
- quality: input.quality ?? "auto",
245
- output_format: input.outputFormat ?? "png",
246
- background: input.background === "auto" ? undefined : input.background,
247
- moderation: input.moderation === "auto" ? undefined : input.moderation,
248
- });
249
- }
250
- function imageGenerationTiming(startedAt, finishedAt = Date.now()) {
251
- const duration = Math.max(0, finishedAt - startedAt);
252
- return {
253
- startedAt,
254
- startedAtIso: new Date(startedAt).toISOString(),
255
- finishedAt,
256
- finishedAtIso: new Date(finishedAt).toISOString(),
257
- duration,
258
- elapsed: duration,
259
- durationMs: duration,
260
- elapsedMs: duration,
261
- };
262
- }
263
- function resolveImageEditSources(input, messages) {
264
- const explicit = [input.image, ...(input.images ?? [])].filter((image) => !!image);
265
- const fromInput = explicit.map((image, index) => resolveInputImage(image, index));
266
- const fromRefs = resolveReferencedImages(messages, input.imageRefs ?? []);
267
- const shouldUseLatest = input.useLatestImage !== false && fromInput.length === 0 && fromRefs.length === 0 && (!input.imageRefs || input.imageRefs.length === 0);
268
- const latest = shouldUseLatest ? latestConversationImage(messages) : undefined;
269
- return [...fromInput, ...fromRefs, ...(latest ? [latest] : [])];
270
- }
271
- function resolveInputImage(image, index) {
272
- const parsed = parseImageData(image.dataUrl ?? image.base64 ?? image.data);
273
- const mimeType = image.mimeType?.trim() || parsed.mimeType;
274
- if (!parsed.base64)
275
- throw new Error(`image2 edit source image ${index + 1} is missing base64/data/dataUrl`);
276
- if (!mimeType)
277
- throw new Error(`image2 edit source image ${index + 1} is missing mimeType`);
278
- return {
279
- index,
280
- base64: normalizeBase64ImageData(parsed.base64),
281
- mimeType,
282
- filename: image.name?.trim() || imageFilename(mimeType, index),
283
- label: image.label,
284
- };
285
- }
286
- function resolveReferencedImages(messages, refs) {
287
- if (!messages || refs.length === 0)
288
- return [];
289
- const imageBlocks = collectConversationImages(messages);
290
- return refs.map((ref, index) => {
291
- const normalizedRef = normalizeImageRef(ref);
292
- const found = imageBlocks.find((image) => normalizeImageRef(image.label ?? "") === normalizedRef || normalizeImageRef(image.filename) === normalizedRef || String(image.index + 1) === normalizedRef);
293
- if (!found)
294
- throw new Error(`image2 could not find referenced image: ${ref}`);
295
- return { ...found, filename: found.filename || imageFilename(found.mimeType, index) };
296
- });
297
- }
298
- function latestConversationImage(messages) {
299
- const images = collectConversationImages(messages);
300
- return images[images.length - 1];
301
- }
302
- function collectConversationImages(messages) {
303
- if (!messages)
304
- return [];
305
- const images = [];
306
- for (const message of messages) {
307
- for (const block of message.blocks) {
308
- if (block.type !== "image")
309
- continue;
310
- const parsed = parseImageData(block.data);
311
- const mimeType = block.mimeType || parsed.mimeType;
312
- if (!parsed.base64 || !mimeType)
313
- continue;
314
- images.push({
315
- index: images.length,
316
- base64: normalizeBase64ImageData(parsed.base64),
317
- mimeType,
318
- filename: imageFilename(mimeType, images.length),
319
- label: block.label,
320
- });
321
- }
322
- }
323
- return images;
324
- }
325
- function parseImageData(value) {
326
- if (!value)
327
- return {};
328
- const match = /^data:([^;,]+);base64,(.*)$/su.exec(value.trim());
329
- if (match)
330
- return { mimeType: match[1], base64: match[2] };
331
- return { base64: value };
332
- }
333
- function normalizeBase64ImageData(value) {
334
- return value.replace(/^data:[^;,]+;base64,/su, "").replace(/\s+/gu, "");
335
- }
336
- function base64ToBlob(base64, mimeType) {
337
- return new Blob([Buffer.from(normalizeBase64ImageData(base64), "base64")], { type: mimeType });
338
- }
339
- function imageFilename(mimeType, index) {
340
- const subtype = mimeType.split("/")[1]?.split(";")[0]?.trim() || "png";
341
- const extension = subtype === "jpeg" ? "jpg" : subtype.replace(/[^a-z0-9]/giu, "") || "png";
342
- return `image-${index + 1}.${extension}`;
343
- }
344
- function normalizeImageRef(value) {
345
- return value.trim().toLowerCase();
346
- }
347
- function createImageGenerationToolResultMessage(result, toolUseId) {
348
- const output = result.output;
349
- const blocks = [{
350
- type: "tool_result",
351
- toolUseId,
352
- name: "image2",
353
- ok: result.ok,
354
- output: compactImageGenerationOutput(output),
355
- }];
356
- if (result.ok && isImageGenerationToolOutput(output)) {
357
- for (const image of output.images) {
358
- blocks.push({ type: "image", mimeType: image.mimeType, data: image.base64, label: `Generated image ${image.index + 1}` });
359
- }
360
- }
361
- return {
362
- id: `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`,
363
- role: "tool_result",
364
- createdAt: new Date().toISOString(),
365
- blocks,
366
- metadata: result.ok ? { generatedImages: true, tool: "image2" } : undefined,
367
- };
368
- }
369
- function compactImageGenerationOutput(output) {
370
- if (!isImageGenerationToolOutput(output))
371
- return output;
372
- return {
373
- ...output,
374
- images: output.images.map((image) => ({
375
- ...image,
376
- base64: `[base64 image omitted from model context; image ${image.index}, ${image.mimeType}]`,
377
- dataUrl: `[data URL omitted from model context; image ${image.index}, ${image.mimeType}]`,
378
- })),
379
- };
380
- }
381
- function isImageGenerationToolOutput(value) {
382
- return isRecord(value) && value.provider === "openai" && Array.isArray(value.images);
383
- }
384
- function extractGeneratedImages(response, format) {
385
- const data = Array.isArray(response.data) ? response.data : [];
386
- return data.flatMap((item, index) => {
387
- if (!isRecord(item))
388
- return [];
389
- const base64 = stringFrom(item.b64_json ?? item.image_base64 ?? item.base64_json ?? item.base64);
390
- if (!base64)
391
- return [];
392
- const mimeType = `image/${format === "jpg" ? "jpeg" : format}`;
393
- return [{
394
- index,
395
- mimeType,
396
- base64,
397
- dataUrl: `data:${mimeType};base64,${base64}`,
398
- revisedPrompt: stringFrom(item.revised_prompt),
399
- }];
400
- });
401
- }
402
- function resolveApiKey(configured) {
403
- return configured?.trim() || process.env.OPENAI_IMAGE_API_KEY?.trim() || process.env.OPENAI_API_KEY?.trim() || undefined;
404
- }
405
- function stripTrailingSlash(value) {
406
- return value.replace(/\/+$/, "");
407
- }
408
- function parsePositiveNumber(value) {
409
- if (!value)
410
- return undefined;
411
- const parsed = Number(value);
412
- return Number.isFinite(parsed) && parsed > 0 ? parsed : undefined;
413
- }
414
- function parseJsonObject(text) {
415
- try {
416
- const value = JSON.parse(text);
417
- return isRecord(value) ? value : { value };
418
- }
419
- catch {
420
- return { text };
421
- }
422
- }
423
- function openAIErrorMessage(body) {
424
- const error = isRecord(body.error) ? body.error : undefined;
425
- return stringFrom(error?.message);
426
- }
427
- function compactRawResponse(response) {
428
- const data = Array.isArray(response.data) ? response.data : undefined;
429
- return {
430
- ...response,
431
- data: data?.map((item) => {
432
- if (!isRecord(item))
433
- return item;
434
- return {
435
- ...item,
436
- b64_json: item.b64_json ? "[base64 image omitted]" : undefined,
437
- image_base64: item.image_base64 ? "[base64 image omitted]" : undefined,
438
- base64_json: item.base64_json ? "[base64 image omitted]" : undefined,
439
- base64: item.base64 ? "[base64 image omitted]" : undefined,
440
- };
441
- }),
442
- };
443
- }
444
- function dropUndefined(value) {
445
- return Object.fromEntries(Object.entries(value).filter(([, entry]) => entry !== undefined));
446
- }
447
- function stringFrom(value) {
448
- return typeof value === "string" ? value : undefined;
449
- }
450
- function isRecord(value) {
451
- return !!value && typeof value === "object" && !Array.isArray(value);
452
- }
453
- function isImageToolMode(value) {
454
- return value === "generate" || value === "edit";
455
- }
456
- function isImageSize(value) {
457
- return value === "auto" || value === "1024x1024" || value === "1536x1024" || value === "1024x1536";
458
- }
459
- function isImageQuality(value) {
460
- return value === "auto" || value === "low" || value === "medium" || value === "high";
461
- }
462
- function isImageFormat(value) {
463
- return value === "png" || value === "jpeg" || value === "webp";
464
- }
465
- function isImageBackground(value) {
466
- return value === "auto" || value === "transparent" || value === "opaque";
467
- }
468
- function isImageModeration(value) {
469
- return value === "auto" || value === "low";
470
- }
471
- //# sourceMappingURL=image-generation-tool.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"image-generation-tool.js","sourceRoot":"","sources":["../../../src/tools/builtins/image-generation-tool.ts"],"names":[],"mappings":"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"}
@@ -1,101 +0,0 @@
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;