@yanickxia/agent-vision 0.1.0 → 0.3.0

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/dist/config.js CHANGED
@@ -1,4 +1,8 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import path from "node:path";
1
4
  import { VisionError } from "./errors.js";
5
+ export const VOLCENGINE_ARK_BASE_URL = "https://ark.cn-beijing.volces.com/api/v3";
2
6
  function firstNonEmpty(env, names) {
3
7
  for (const name of names) {
4
8
  const value = env[name]?.trim();
@@ -17,29 +21,188 @@ function positiveInteger(env, name, fallback) {
17
21
  }
18
22
  return value;
19
23
  }
20
- function parseHeaders(raw) {
24
+ function stringRecord(value, where) {
25
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
26
+ throw new VisionError("CONFIG_ERROR", `${where} must be an object`);
27
+ }
28
+ const headers = {};
29
+ for (const [key, entry] of Object.entries(value)) {
30
+ if (typeof entry !== "string") {
31
+ throw new VisionError("CONFIG_ERROR", `${where}.${key} must be a string`);
32
+ }
33
+ headers[key] = entry;
34
+ }
35
+ return headers;
36
+ }
37
+ function parseHeaders(raw, name = "AGENT_VISION_HEADERS") {
21
38
  if (!raw?.trim())
22
39
  return {};
23
40
  try {
24
- const value = JSON.parse(raw);
25
- if (!value || Array.isArray(value) || typeof value !== "object") {
26
- throw new Error("expected a JSON object");
27
- }
28
- const headers = {};
29
- for (const [key, headerValue] of Object.entries(value)) {
30
- if (typeof headerValue !== "string") {
31
- throw new Error(`header ${key} must be a string`);
32
- }
33
- headers[key] = headerValue;
34
- }
35
- return headers;
41
+ return stringRecord(JSON.parse(raw), name);
42
+ }
43
+ catch (error) {
44
+ if (error instanceof VisionError)
45
+ throw error;
46
+ const detail = error instanceof Error ? error.message : String(error);
47
+ throw new VisionError("CONFIG_ERROR", `${name} must be a JSON object of string values: ${detail}`);
48
+ }
49
+ }
50
+ function expandConfigPath(raw) {
51
+ if (raw === "~")
52
+ return homedir();
53
+ if (raw.startsWith("~/"))
54
+ return path.join(homedir(), raw.slice(2));
55
+ return path.resolve(raw);
56
+ }
57
+ function resolveSettingsPath(env) {
58
+ const explicit = env.AGENT_VISION_CONFIG?.trim();
59
+ if (explicit)
60
+ return { path: expandConfigPath(explicit), explicit: true };
61
+ const configRoot = env.XDG_CONFIG_HOME?.trim() || path.join(homedir(), ".config");
62
+ return { path: path.join(configRoot, "agent-vision", "settings.json"), explicit: false };
63
+ }
64
+ function defaultSettingsReader(filePath) {
65
+ try {
66
+ return readFileSync(filePath, "utf8");
36
67
  }
37
68
  catch (error) {
69
+ if (error.code === "ENOENT")
70
+ return undefined;
38
71
  const detail = error instanceof Error ? error.message : String(error);
39
- throw new VisionError("CONFIG_ERROR", `AGENT_VISION_HEADERS must be a JSON object of string values: ${detail}`);
72
+ throw new VisionError("CONFIG_ERROR", `Could not read settings file ${filePath}: ${detail}`);
73
+ }
74
+ }
75
+ function positiveFileNumber(file, key, filePath) {
76
+ const raw = file[key];
77
+ if (raw === undefined)
78
+ return undefined;
79
+ if (typeof raw !== "number" || !Number.isSafeInteger(raw) || raw <= 0) {
80
+ throw new VisionError("CONFIG_ERROR", `${filePath}: ${key} must be a positive integer`);
40
81
  }
82
+ return raw;
83
+ }
84
+ function parseProvider(entry, filePath) {
85
+ if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
86
+ throw new VisionError("CONFIG_ERROR", `${filePath}: each provider must be an object`);
87
+ }
88
+ const record = entry;
89
+ const baseUrl = record.baseUrl;
90
+ if (typeof baseUrl !== "string" || !baseUrl.trim()) {
91
+ throw new VisionError("CONFIG_ERROR", `${filePath}: every provider needs a baseUrl string`);
92
+ }
93
+ let parsedUrl;
94
+ try {
95
+ parsedUrl = new URL(baseUrl);
96
+ }
97
+ catch {
98
+ throw new VisionError("CONFIG_ERROR", `${filePath}: invalid provider baseUrl: ${baseUrl}`);
99
+ }
100
+ if (parsedUrl.protocol !== "http:" && parsedUrl.protocol !== "https:") {
101
+ throw new VisionError("CONFIG_ERROR", `${filePath}: provider baseUrl must use http or https: ${baseUrl}`);
102
+ }
103
+ const models = record.models;
104
+ if (!Array.isArray(models) ||
105
+ models.length === 0 ||
106
+ models.some((model) => typeof model !== "string" || !model.trim())) {
107
+ throw new VisionError("CONFIG_ERROR", `${filePath}: every provider needs a non-empty models array of strings`);
108
+ }
109
+ const name = record.name;
110
+ if (name !== undefined && (typeof name !== "string" || !name.trim())) {
111
+ throw new VisionError("CONFIG_ERROR", `${filePath}: provider name must be a non-empty string`);
112
+ }
113
+ const apiKey = record.apiKey;
114
+ if (apiKey !== undefined && typeof apiKey !== "string") {
115
+ throw new VisionError("CONFIG_ERROR", `${filePath}: provider apiKey must be a string`);
116
+ }
117
+ const headers = record.headers === undefined
118
+ ? undefined
119
+ : stringRecord(record.headers, `${filePath}: provider headers`);
120
+ return {
121
+ ...(name !== undefined ? { name } : {}),
122
+ baseUrl,
123
+ ...(apiKey !== undefined ? { apiKey } : {}),
124
+ models: models,
125
+ ...(headers !== undefined ? { headers } : {}),
126
+ };
127
+ }
128
+ function generationProviderType(value, where) {
129
+ if (value === undefined)
130
+ return "openai-images";
131
+ if (value === "openai-images" || value === "volcengine-ark")
132
+ return value;
133
+ throw new VisionError("CONFIG_ERROR", `${where} must be openai-images or volcengine-ark`);
41
134
  }
42
- export function loadConfig(env = process.env) {
135
+ function parseGenerationProvider(entry, filePath) {
136
+ const provider = parseProvider(entry, filePath);
137
+ const type = generationProviderType(entry.type, `${filePath}: provider type`);
138
+ return { ...provider, type };
139
+ }
140
+ function parseSettings(raw, filePath) {
141
+ let parsed;
142
+ try {
143
+ parsed = JSON.parse(raw);
144
+ }
145
+ catch (error) {
146
+ const detail = error instanceof Error ? error.message : String(error);
147
+ throw new VisionError("CONFIG_ERROR", `${filePath} is not valid JSON: ${detail}`);
148
+ }
149
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
150
+ throw new VisionError("CONFIG_ERROR", `${filePath} must contain a JSON object`);
151
+ }
152
+ const file = parsed;
153
+ function providersFor(key, parse) {
154
+ const entries = file[key];
155
+ if (entries === undefined)
156
+ return undefined;
157
+ if (!Array.isArray(entries) || entries.length === 0) {
158
+ throw new VisionError("CONFIG_ERROR", `${filePath}: ${key} must be a non-empty array`);
159
+ }
160
+ return entries.map((entry) => parse(entry, `${filePath}: ${key}`));
161
+ }
162
+ const providers = providersFor("providers", parseProvider);
163
+ const generationProviders = providersFor("generationProviders", parseGenerationProvider);
164
+ const allowPrivateUrls = file.allowPrivateUrls;
165
+ if (allowPrivateUrls !== undefined && typeof allowPrivateUrls !== "boolean") {
166
+ throw new VisionError("CONFIG_ERROR", `${filePath}: allowPrivateUrls must be a boolean`);
167
+ }
168
+ const ffmpegPath = file.ffmpegPath;
169
+ if (ffmpegPath !== undefined && (typeof ffmpegPath !== "string" || !ffmpegPath.trim())) {
170
+ throw new VisionError("CONFIG_ERROR", `${filePath}: ffmpegPath must be a non-empty string`);
171
+ }
172
+ const maxTokens = positiveFileNumber(file, "maxTokens", filePath);
173
+ const timeoutMs = positiveFileNumber(file, "timeoutMs", filePath);
174
+ const headers = file.headers === undefined
175
+ ? undefined
176
+ : stringRecord(file.headers, `${filePath}: headers`);
177
+ const maxImageMb = positiveFileNumber(file, "maxImageMb", filePath);
178
+ const maxVideoMb = positiveFileNumber(file, "maxVideoMb", filePath);
179
+ return {
180
+ ...(providers !== undefined ? { providers } : {}),
181
+ ...(generationProviders !== undefined ? { generationProviders } : {}),
182
+ ...(maxTokens !== undefined ? { maxTokens } : {}),
183
+ ...(timeoutMs !== undefined ? { timeoutMs } : {}),
184
+ ...(headers !== undefined ? { headers } : {}),
185
+ ...(maxImageMb !== undefined ? { maxImageMb } : {}),
186
+ ...(maxVideoMb !== undefined ? { maxVideoMb } : {}),
187
+ ...(allowPrivateUrls !== undefined ? { allowPrivateUrls } : {}),
188
+ ...(ffmpegPath !== undefined ? { ffmpegPath } : {}),
189
+ };
190
+ }
191
+ function hostOf(baseUrl) {
192
+ return new URL(baseUrl).host;
193
+ }
194
+ export function loadConfig(env = process.env, readSettings = defaultSettingsReader) {
195
+ const settingsLocation = resolveSettingsPath(env);
196
+ const rawSettings = readSettings(settingsLocation.path);
197
+ let settings;
198
+ let configFile;
199
+ if (rawSettings !== undefined) {
200
+ settings = parseSettings(rawSettings, settingsLocation.path);
201
+ configFile = settingsLocation.path;
202
+ }
203
+ else if (settingsLocation.explicit) {
204
+ throw new VisionError("CONFIG_ERROR", `AGENT_VISION_CONFIG file not found: ${settingsLocation.path}`);
205
+ }
43
206
  const apiKey = firstNonEmpty(env, [
44
207
  "AGENT_VISION_API_KEY",
45
208
  "VISION_API_KEY",
@@ -55,38 +218,113 @@ export function loadConfig(env = process.env) {
55
218
  "VISION_MODEL",
56
219
  "OPENAI_MODEL",
57
220
  ]) ?? "";
58
- return {
59
- ...(apiKey ? { apiKey } : {}),
60
- baseUrl,
61
- model,
62
- maxTokens: positiveInteger(env, "AGENT_VISION_MAX_TOKENS", 4096),
63
- timeoutMs: positiveInteger(env, "AGENT_VISION_TIMEOUT_MS", 120_000),
64
- headers: parseHeaders(env.AGENT_VISION_HEADERS),
65
- maxImageBytes: positiveInteger(env, "AGENT_VISION_MAX_IMAGE_MB", 20) * 1024 * 1024,
66
- maxVideoBytes: positiveInteger(env, "AGENT_VISION_MAX_VIDEO_MB", 200) * 1024 * 1024,
67
- allowPrivateUrls: env.AGENT_VISION_ALLOW_PRIVATE_URLS?.trim().toLowerCase() === "true",
221
+ const maxTokens = settings?.maxTokens ?? positiveInteger(env, "AGENT_VISION_MAX_TOKENS", 4096);
222
+ const timeoutMs = settings?.timeoutMs ?? positiveInteger(env, "AGENT_VISION_TIMEOUT_MS", 120_000);
223
+ const environmentHeaders = parseHeaders(env.AGENT_VISION_HEADERS);
224
+ const headers = { ...environmentHeaders, ...settings?.headers };
225
+ const maxImageMb = settings?.maxImageMb ?? positiveInteger(env, "AGENT_VISION_MAX_IMAGE_MB", 20);
226
+ const maxVideoMb = settings?.maxVideoMb ?? positiveInteger(env, "AGENT_VISION_MAX_VIDEO_MB", 200);
227
+ const allowPrivateUrls = settings?.allowPrivateUrls ??
228
+ env.AGENT_VISION_ALLOW_PRIVATE_URLS?.trim().toLowerCase() === "true";
229
+ const ffmpegPath = settings?.ffmpegPath?.trim() || env.AGENT_VISION_FFMPEG_PATH?.trim() || undefined;
230
+ let targets;
231
+ if (settings?.providers?.length) {
232
+ const envApiKey = apiKey;
233
+ targets = settings.providers.flatMap((provider) => provider.models.map((model) => {
234
+ const targetApiKey = provider.apiKey ?? envApiKey;
235
+ return {
236
+ label: `${provider.name ?? hostOf(provider.baseUrl)}/${model}`,
237
+ model,
238
+ baseUrl: provider.baseUrl,
239
+ ...(targetApiKey ? { apiKey: targetApiKey } : {}),
240
+ headers: { ...headers, ...provider.headers },
241
+ };
242
+ }));
243
+ }
244
+ else {
245
+ targets = model
246
+ ? [{
247
+ label: model,
248
+ model,
249
+ baseUrl,
250
+ ...(apiKey ? { apiKey } : {}),
251
+ headers,
252
+ }]
253
+ : [];
254
+ }
255
+ function generationApiKey(type) {
256
+ return firstNonEmpty(env, ["AGENT_VISION_GENERATION_API_KEY"]) ??
257
+ (type === "volcengine-ark" ? firstNonEmpty(env, ["ARK_API_KEY"]) : apiKey);
258
+ }
259
+ // Never use a vision/chat model implicitly for image generation.
260
+ const generationModel = firstNonEmpty(env, ["AGENT_VISION_GENERATION_MODEL"]);
261
+ const generationHeaders = {
262
+ ...environmentHeaders,
263
+ ...parseHeaders(env.AGENT_VISION_GENERATION_HEADERS, "AGENT_VISION_GENERATION_HEADERS"),
264
+ ...settings?.headers,
68
265
  };
69
- }
70
- export function requireModel(config) {
71
- if (!config.model) {
72
- throw new VisionError("CONFIG_ERROR", "Set AGENT_VISION_MODEL (or VISION_MODEL / OPENAI_MODEL)");
266
+ let generationTargets = [];
267
+ if (settings?.generationProviders) {
268
+ generationTargets = settings.generationProviders.flatMap((provider) => provider.models.map((model) => {
269
+ const targetApiKey = provider.apiKey ?? generationApiKey(provider.type);
270
+ return {
271
+ label: `${provider.name ?? hostOf(provider.baseUrl)}/${model}`,
272
+ type: provider.type,
273
+ model,
274
+ baseUrl: provider.baseUrl,
275
+ ...(targetApiKey ? { apiKey: targetApiKey } : {}),
276
+ headers: { ...generationHeaders, ...provider.headers },
277
+ };
278
+ }));
73
279
  }
280
+ else {
281
+ const type = generationProviderType(firstNonEmpty(env, ["AGENT_VISION_GENERATION_TYPE"]), "AGENT_VISION_GENERATION_TYPE");
282
+ if (generationModel) {
283
+ const targetApiKey = generationApiKey(type);
284
+ const generationBaseUrl = firstNonEmpty(env, ["AGENT_VISION_GENERATION_BASE_URL"]) ??
285
+ (type === "volcengine-ark" ? VOLCENGINE_ARK_BASE_URL : baseUrl);
286
+ generationTargets = [{
287
+ label: generationModel,
288
+ type,
289
+ model: generationModel,
290
+ baseUrl: generationBaseUrl,
291
+ ...(targetApiKey ? { apiKey: targetApiKey } : {}),
292
+ headers: generationHeaders,
293
+ }];
294
+ }
295
+ }
296
+ return {
297
+ targets,
298
+ generationTargets,
299
+ ...(configFile ? { configFile } : {}),
300
+ maxTokens,
301
+ timeoutMs,
302
+ headers,
303
+ maxImageBytes: maxImageMb * 1024 * 1024,
304
+ maxVideoBytes: maxVideoMb * 1024 * 1024,
305
+ allowPrivateUrls,
306
+ ...(ffmpegPath ? { ffmpegPath } : {}),
307
+ };
74
308
  }
75
309
  export function chatCompletionsUrl(baseUrl) {
310
+ return endpointUrl(baseUrl, "/chat/completions", "AGENT_VISION_BASE_URL");
311
+ }
312
+ export function imageGenerationsUrl(baseUrl) {
313
+ return endpointUrl(baseUrl, "/images/generations", "AGENT_VISION_GENERATION_BASE_URL");
314
+ }
315
+ function endpointUrl(baseUrl, endpoint, setting) {
76
316
  let url;
77
317
  try {
78
318
  url = new URL(baseUrl);
79
319
  }
80
320
  catch {
81
- throw new VisionError("CONFIG_ERROR", `Invalid AGENT_VISION_BASE_URL: ${baseUrl}`);
321
+ throw new VisionError("CONFIG_ERROR", `Invalid ${setting}: ${baseUrl}`);
82
322
  }
83
323
  if (url.protocol !== "http:" && url.protocol !== "https:") {
84
- throw new VisionError("CONFIG_ERROR", "AGENT_VISION_BASE_URL must use http or https");
85
- }
86
- const path = url.pathname.replace(/\/+$/, "");
87
- if (!path.endsWith("/chat/completions")) {
88
- url.pathname = `${path}/chat/completions`;
324
+ throw new VisionError("CONFIG_ERROR", `${setting} must use http or https`);
89
325
  }
326
+ const pathName = url.pathname.replace(/\/+$/, "");
327
+ url.pathname = pathName.endsWith(endpoint) ? pathName : `${pathName}${endpoint}`;
90
328
  return url.toString();
91
329
  }
92
330
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { type VisionConfig } from "./config.js";
2
+ import { type GenerationOptions } from "./generation-provider.js";
3
+ export type { GenerationOptions } from "./generation-provider.js";
4
+ export interface GeneratedImage {
5
+ data: string;
6
+ mimeType: string;
7
+ bytes: number;
8
+ model: string;
9
+ revisedPrompt?: string;
10
+ outputPath?: string;
11
+ }
12
+ export declare function generateImage(options: GenerationOptions & {
13
+ outputPath?: string;
14
+ config?: VisionConfig;
15
+ }): Promise<GeneratedImage>;
16
+ //# sourceMappingURL=generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"AAGA,OAAO,EAAqC,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAEnF,OAAO,EAAqB,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAIrF,YAAY,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA0GD,wBAAsB,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB,GAAG,OAAO,CAAC,cAAc,CAAC,CAqD1B"}
@@ -0,0 +1,167 @@
1
+ import { open, unlink } from "node:fs/promises";
2
+ import { homedir } from "node:os";
3
+ import path from "node:path";
4
+ import { loadConfig } from "./config.js";
5
+ import { errorMessage, VisionError } from "./errors.js";
6
+ import { generationAdapter } from "./generation-provider.js";
7
+ import { mimeFromMagic } from "./image.js";
8
+ import { fetchRemoteBuffer } from "./network.js";
9
+ async function readResponse(response, maxBytes) {
10
+ if (!response.body)
11
+ return "";
12
+ const chunks = [];
13
+ let total = 0;
14
+ const reader = response.body.getReader();
15
+ while (true) {
16
+ const { done, value } = await reader.read();
17
+ if (done)
18
+ break;
19
+ total += value.byteLength;
20
+ if (total > maxBytes) {
21
+ await reader.cancel();
22
+ throw new VisionError("SOURCE_TOO_LARGE", "Image generation API response exceeds the configured limit");
23
+ }
24
+ chunks.push(Buffer.from(value));
25
+ }
26
+ return Buffer.concat(chunks, total).toString("utf8");
27
+ }
28
+ async function requestImageGeneration(options, config, target) {
29
+ const adapter = generationAdapter(target);
30
+ const { url, body } = adapter.createRequest(target, options);
31
+ const headers = new Headers(target.headers);
32
+ headers.set("content-type", "application/json");
33
+ if (target.apiKey && !headers.has("authorization")) {
34
+ headers.set("authorization", `Bearer ${target.apiKey}`);
35
+ }
36
+ const controller = new AbortController();
37
+ const timer = setTimeout(() => controller.abort(), config.timeoutMs);
38
+ let response;
39
+ let raw;
40
+ try {
41
+ response = await fetch(url, {
42
+ method: "POST",
43
+ headers,
44
+ body: JSON.stringify(body),
45
+ signal: controller.signal,
46
+ });
47
+ // Allow base64 expansion and JSON metadata without an unbounded response.text().
48
+ raw = await readResponse(response, Math.ceil(config.maxImageBytes * 4 / 3) + 65_536);
49
+ }
50
+ catch (error) {
51
+ if (controller.signal.aborted) {
52
+ throw new VisionError("API_TIMEOUT", `Image generation API timed out after ${config.timeoutMs} ms`);
53
+ }
54
+ if (error instanceof VisionError)
55
+ throw error;
56
+ throw new VisionError("API_ERROR", "Could not reach the image generation API", { cause: error });
57
+ }
58
+ finally {
59
+ clearTimeout(timer);
60
+ }
61
+ const { source, ...metadata } = adapter.parseResponse(target, response, raw);
62
+ let buffer;
63
+ if (source.kind === "base64") {
64
+ const compact = source.value.replace(/\s/g, "");
65
+ if (compact.length % 4 !== 0 || /[^A-Za-z0-9+/=]/.test(compact)) {
66
+ throw new VisionError("API_RESPONSE_ERROR", "Image generation API returned invalid base64");
67
+ }
68
+ buffer = Buffer.from(compact, "base64");
69
+ if (buffer.toString("base64") !== compact) {
70
+ throw new VisionError("API_RESPONSE_ERROR", "Image generation API returned invalid base64");
71
+ }
72
+ }
73
+ else {
74
+ // Provider URLs are untrusted too; never treat them as local file paths or
75
+ // forward API credentials to the image host.
76
+ const remote = await fetchRemoteBuffer({
77
+ url: source.value,
78
+ maxBytes: config.maxImageBytes,
79
+ timeoutMs: config.timeoutMs,
80
+ allowPrivateUrls: config.allowPrivateUrls,
81
+ });
82
+ buffer = remote.buffer;
83
+ }
84
+ if (buffer.length > config.maxImageBytes) {
85
+ throw new VisionError("SOURCE_TOO_LARGE", "Generated image exceeds the configured limit");
86
+ }
87
+ const mimeType = mimeFromMagic(buffer);
88
+ if (!mimeType) {
89
+ throw new VisionError("UNSUPPORTED_IMAGE", "Image generation API returned an unsupported or invalid image");
90
+ }
91
+ return {
92
+ data: buffer.toString("base64"),
93
+ mimeType,
94
+ bytes: buffer.length,
95
+ ...metadata,
96
+ };
97
+ }
98
+ async function tryGenerationTargets(options, config) {
99
+ const failures = [];
100
+ for (const target of config.generationTargets) {
101
+ try {
102
+ return await requestImageGeneration(options, config, target);
103
+ }
104
+ catch (error) {
105
+ if (config.generationTargets.length === 1)
106
+ throw error;
107
+ failures.push(`${target.label}: ${errorMessage(error)}`);
108
+ }
109
+ }
110
+ throw new VisionError("API_ERROR", `All image generation model targets failed:\n${failures.join("\n")}`);
111
+ }
112
+ export async function generateImage(options) {
113
+ const prompt = options.prompt.trim();
114
+ if (!prompt)
115
+ throw new VisionError("INVALID_INPUT", "Image generation requires a non-empty prompt");
116
+ for (const key of ["size", "quality"]) {
117
+ if (options[key] !== undefined && !options[key]?.trim()) {
118
+ throw new VisionError("INVALID_INPUT", `${key} must be a non-empty string`);
119
+ }
120
+ }
121
+ const config = options.config ?? loadConfig();
122
+ if (config.generationTargets.length === 0) {
123
+ throw new VisionError("CONFIG_ERROR", "No image generation model configured. Add generationProviders to the settings file or set AGENT_VISION_GENERATION_MODEL");
124
+ }
125
+ let outputPath;
126
+ let file;
127
+ if (options.outputPath !== undefined) {
128
+ if (!options.outputPath.trim()) {
129
+ throw new VisionError("INVALID_INPUT", "outputPath must be a non-empty local file path");
130
+ }
131
+ outputPath = options.outputPath.startsWith("~/")
132
+ ? path.join(homedir(), options.outputPath.slice(2))
133
+ : path.resolve(options.outputPath);
134
+ try {
135
+ // Reserve the destination before a paid API call. Never overwrite an
136
+ // existing file or follow a symlink; the parent directory must exist.
137
+ file = await open(outputPath, "wx", 0o600);
138
+ }
139
+ catch (error) {
140
+ throw new VisionError("OUTPUT_ERROR", `Cannot create output file ${outputPath}: ${errorMessage(error)}`, { cause: error });
141
+ }
142
+ }
143
+ let saved = false;
144
+ try {
145
+ const result = await tryGenerationTargets({
146
+ prompt,
147
+ ...(options.size ? { size: options.size.trim() } : {}),
148
+ ...(options.quality ? { quality: options.quality.trim() } : {}),
149
+ }, config);
150
+ if (file) {
151
+ try {
152
+ await file.writeFile(Buffer.from(result.data, "base64"));
153
+ }
154
+ catch (error) {
155
+ throw new VisionError("OUTPUT_ERROR", `Could not write generated image to ${outputPath}`, { cause: error });
156
+ }
157
+ }
158
+ saved = true;
159
+ return { ...result, ...(outputPath ? { outputPath } : {}) };
160
+ }
161
+ finally {
162
+ await file?.close();
163
+ if (outputPath && !saved)
164
+ await unlink(outputPath);
165
+ }
166
+ }
167
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { type GenerationTarget } from "./config.js";
2
+ export interface GenerationOptions {
3
+ prompt: string;
4
+ size?: string;
5
+ quality?: string;
6
+ }
7
+ interface GenerationResponse {
8
+ source: {
9
+ kind: "base64" | "url";
10
+ value: string;
11
+ };
12
+ model: string;
13
+ revisedPrompt?: string;
14
+ }
15
+ interface GenerationAdapter {
16
+ createRequest(target: GenerationTarget, options: GenerationOptions): {
17
+ url: string;
18
+ body: Record<string, unknown>;
19
+ };
20
+ parseResponse(target: GenerationTarget, response: Response, raw: string): GenerationResponse;
21
+ }
22
+ export declare function generationAdapter(target: GenerationTarget): GenerationAdapter;
23
+ export {};
24
+ //# sourceMappingURL=generation-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generation-provider.d.ts","sourceRoot":"","sources":["../src/generation-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGzE,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,kBAAkB;IAC1B,MAAM,EAAE;QAAE,IAAI,EAAE,QAAQ,GAAG,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,iBAAiB;IACzB,aAAa,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,iBAAiB,GAAG;QACnE,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC/B,CAAC;IACF,aAAa,CAAC,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,kBAAkB,CAAC;CAC9F;AAsGD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,GAAG,iBAAiB,CAO7E"}