@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/README.md +175 -36
- package/dist/analyze.d.ts.map +1 -1
- package/dist/analyze.js +3 -3
- package/dist/analyze.js.map +1 -1
- package/dist/cli.js +65 -9
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +19 -5
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +273 -35
- package/dist/config.js.map +1 -1
- package/dist/generate.d.ts +16 -0
- package/dist/generate.d.ts.map +1 -0
- package/dist/generate.js +167 -0
- package/dist/generate.js.map +1 -0
- package/dist/generation-provider.d.ts +24 -0
- package/dist/generation-provider.d.ts.map +1 -0
- package/dist/generation-provider.js +101 -0
- package/dist/generation-provider.js.map +1 -0
- package/dist/image.d.ts +1 -0
- package/dist/image.d.ts.map +1 -1
- package/dist/image.js +1 -1
- package/dist/image.js.map +1 -1
- package/dist/provider.d.ts +8 -1
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +69 -9
- package/dist/provider.js.map +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +37 -2
- package/dist/server.js.map +1 -1
- package/dist/video.d.ts +1 -1
- package/dist/video.d.ts.map +1 -1
- package/dist/video.js +8 -8
- package/dist/video.js.map +1 -1
- package/package.json +3 -2
- package/skills/agent-vision/SKILL.md +64 -37
- package/skills/agent-vision/references/configuration.md +156 -5
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { imageGenerationsUrl } from "./config.js";
|
|
2
|
+
import { VisionError } from "./errors.js";
|
|
3
|
+
function asRecord(value) {
|
|
4
|
+
return value && typeof value === "object" && !Array.isArray(value)
|
|
5
|
+
? value
|
|
6
|
+
: undefined;
|
|
7
|
+
}
|
|
8
|
+
function errorDetail(value, includeCode) {
|
|
9
|
+
const error = asRecord(value);
|
|
10
|
+
const code = includeCode && typeof error?.code === "string" ? error.code : undefined;
|
|
11
|
+
const message = typeof error?.message === "string" ? error.message : undefined;
|
|
12
|
+
return [code, message].filter(Boolean).join(": ") || undefined;
|
|
13
|
+
}
|
|
14
|
+
// Both protocols use a data[] envelope. Keep response normalization here,
|
|
15
|
+
// separate from image decoding, downloading, limits and output file handling.
|
|
16
|
+
function parseImagesResponse(target, response, raw, ark = false) {
|
|
17
|
+
const name = ark ? "Volcengine Ark API" : "Image generation API";
|
|
18
|
+
let payload;
|
|
19
|
+
try {
|
|
20
|
+
payload = JSON.parse(raw);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
payload = undefined;
|
|
24
|
+
}
|
|
25
|
+
const record = asRecord(payload);
|
|
26
|
+
if (!response.ok) {
|
|
27
|
+
const detail = errorDetail(record?.error, ark) ?? (raw.slice(0, 500) || response.statusText);
|
|
28
|
+
throw new VisionError("API_ERROR", `${name} returned HTTP ${response.status}: ${detail}`);
|
|
29
|
+
}
|
|
30
|
+
if (!record) {
|
|
31
|
+
throw new VisionError("API_RESPONSE_ERROR", `${name} returned invalid JSON`);
|
|
32
|
+
}
|
|
33
|
+
const first = Array.isArray(record.data) ? asRecord(record.data[0]) : undefined;
|
|
34
|
+
// Ark may report generation failures in a successful HTTP response, at the
|
|
35
|
+
// top level or on data[0]. Do not lose its diagnostic code and message.
|
|
36
|
+
if (ark && (record.error || first?.error)) {
|
|
37
|
+
const detail = errorDetail(record.error ?? first?.error, true) ?? "Unknown image generation error";
|
|
38
|
+
throw new VisionError("API_ERROR", `${name}: ${detail}`);
|
|
39
|
+
}
|
|
40
|
+
let source;
|
|
41
|
+
if (typeof first?.b64_json === "string" && first.b64_json.trim()) {
|
|
42
|
+
source = { kind: "base64", value: first.b64_json };
|
|
43
|
+
}
|
|
44
|
+
else if (typeof first?.url === "string" && first.url.trim()) {
|
|
45
|
+
source = { kind: "url", value: first.url };
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
throw new VisionError("API_RESPONSE_ERROR", `${name} response is missing data[0].b64_json or data[0].url`);
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
source,
|
|
52
|
+
model: typeof record.model === "string" ? record.model : target.model,
|
|
53
|
+
...(typeof first?.revised_prompt === "string" ? { revisedPrompt: first.revised_prompt } : {}),
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
const openaiImages = {
|
|
57
|
+
createRequest(target, options) {
|
|
58
|
+
return {
|
|
59
|
+
url: imageGenerationsUrl(target.baseUrl),
|
|
60
|
+
body: {
|
|
61
|
+
model: target.model,
|
|
62
|
+
prompt: options.prompt,
|
|
63
|
+
n: 1,
|
|
64
|
+
...(options.size ? { size: options.size } : {}),
|
|
65
|
+
...(options.quality ? { quality: options.quality } : {}),
|
|
66
|
+
// Some image models reject response_format. Accept either response form.
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
},
|
|
70
|
+
parseResponse: (target, response, raw) => parseImagesResponse(target, response, raw),
|
|
71
|
+
};
|
|
72
|
+
const volcengineArk = {
|
|
73
|
+
createRequest(target, options) {
|
|
74
|
+
if (options.quality !== undefined) {
|
|
75
|
+
throw new VisionError("INVALID_INPUT", "volcengine-ark does not support quality; omit --quality / quality and use a model-supported size instead");
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
url: imageGenerationsUrl(target.baseUrl),
|
|
79
|
+
body: {
|
|
80
|
+
model: target.model,
|
|
81
|
+
prompt: options.prompt,
|
|
82
|
+
response_format: "b64_json",
|
|
83
|
+
...(options.size ? { size: options.size } : {}),
|
|
84
|
+
// Ark defaults to one image and non-streaming output. Do not send n,
|
|
85
|
+
// quality, or model-specific sequential_image_generation / stream flags:
|
|
86
|
+
// newer Seedream models and opaque ep-* IDs need the same safe payload.
|
|
87
|
+
// Leave watermark and output_format at the provider's defaults.
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
},
|
|
91
|
+
parseResponse: (target, response, raw) => parseImagesResponse(target, response, raw, true),
|
|
92
|
+
};
|
|
93
|
+
export function generationAdapter(target) {
|
|
94
|
+
const type = target.type ?? "openai-images";
|
|
95
|
+
switch (type) {
|
|
96
|
+
case "openai-images": return openaiImages;
|
|
97
|
+
case "volcengine-ark": return volcengineArk;
|
|
98
|
+
default: throw new VisionError("CONFIG_ERROR", `Unsupported image generation provider type: ${type}`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=generation-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generation-provider.js","sourceRoot":"","sources":["../src/generation-provider.ts"],"names":[],"mappings":"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"}
|
package/dist/image.d.ts
CHANGED
|
@@ -5,5 +5,6 @@ export interface LoadedImage {
|
|
|
5
5
|
bytes: number;
|
|
6
6
|
label: string;
|
|
7
7
|
}
|
|
8
|
+
export declare function mimeFromMagic(buffer: Buffer): string | undefined;
|
|
8
9
|
export declare function loadImage(source: string, config: VisionConfig): Promise<LoadedImage>;
|
|
9
10
|
//# sourceMappingURL=image.d.ts.map
|
package/dist/image.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../src/image.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAIhD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;
|
|
1
|
+
{"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../src/image.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAIhD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAUD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAoBhE;AAgDD,wBAAsB,SAAS,CAC7B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,WAAW,CAAC,CAqCtB"}
|
package/dist/image.js
CHANGED
|
@@ -10,7 +10,7 @@ const SUPPORTED_MIME_TYPES = new Set([
|
|
|
10
10
|
"image/gif",
|
|
11
11
|
"image/bmp",
|
|
12
12
|
]);
|
|
13
|
-
function mimeFromMagic(buffer) {
|
|
13
|
+
export function mimeFromMagic(buffer) {
|
|
14
14
|
if (buffer.length >= 3 && buffer[0] === 0xff && buffer[1] === 0xd8 && buffer[2] === 0xff) {
|
|
15
15
|
return "image/jpeg";
|
|
16
16
|
}
|
package/dist/image.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image.js","sourceRoot":"","sources":["../src/image.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AASjD,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC;IACnC,YAAY;IACZ,WAAW;IACX,YAAY;IACZ,WAAW;IACX,WAAW;CACZ,CAAC,CAAC;AAEH,
|
|
1
|
+
{"version":3,"file":"image.js","sourceRoot":"","sources":["../src/image.ts"],"names":[],"mappings":"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"}
|
package/dist/provider.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { VisionConfig } from "./config.js";
|
|
1
|
+
import type { ModelTarget, VisionConfig } from "./config.js";
|
|
2
2
|
export interface VisionInputImage {
|
|
3
3
|
dataUrl: string;
|
|
4
4
|
label?: string;
|
|
@@ -9,6 +9,13 @@ export interface VisionCompletion {
|
|
|
9
9
|
usage?: Record<string, unknown>;
|
|
10
10
|
}
|
|
11
11
|
export declare function requestVisionCompletion(options: {
|
|
12
|
+
config: VisionConfig;
|
|
13
|
+
target: ModelTarget;
|
|
14
|
+
prompt: string;
|
|
15
|
+
images: VisionInputImage[];
|
|
16
|
+
signal?: AbortSignal;
|
|
17
|
+
}): Promise<VisionCompletion>;
|
|
18
|
+
export declare function raceVisionCompletions(options: {
|
|
12
19
|
config: VisionConfig;
|
|
13
20
|
prompt: string;
|
|
14
21
|
images: VisionInputImage[];
|
package/dist/provider.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI7D,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAiBD,wBAAsB,uBAAuB,CAAC,OAAO,EAAE;IACrD,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAqH5B;AAED,wBAAsB,qBAAqB,CAAC,OAAO,EAAE;IACnD,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,gBAAgB,EAAE,CAAC;CAC5B,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA6D5B"}
|
package/dist/provider.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { chatCompletionsUrl
|
|
2
|
-
import { VisionError } from "./errors.js";
|
|
1
|
+
import { chatCompletionsUrl } from "./config.js";
|
|
2
|
+
import { VisionError, errorMessage } from "./errors.js";
|
|
3
3
|
function responseText(content) {
|
|
4
4
|
if (typeof content === "string" && content.trim())
|
|
5
5
|
return content.trim();
|
|
@@ -18,7 +18,9 @@ function responseText(content) {
|
|
|
18
18
|
return parts.length > 0 ? parts.join("\n").trim() : undefined;
|
|
19
19
|
}
|
|
20
20
|
export async function requestVisionCompletion(options) {
|
|
21
|
-
|
|
21
|
+
if (!options.target.model) {
|
|
22
|
+
throw new VisionError("CONFIG_ERROR", "A vision model target is missing a model name");
|
|
23
|
+
}
|
|
22
24
|
if (options.images.length === 0) {
|
|
23
25
|
throw new VisionError("INVALID_SOURCE", "At least one image is required");
|
|
24
26
|
}
|
|
@@ -34,21 +36,26 @@ export async function requestVisionCompletion(options) {
|
|
|
34
36
|
image_url: { url: image.dataUrl, detail: "high" },
|
|
35
37
|
});
|
|
36
38
|
}
|
|
37
|
-
const headers = new Headers(options.
|
|
39
|
+
const headers = new Headers(options.target.headers);
|
|
38
40
|
headers.set("content-type", "application/json");
|
|
39
|
-
if (options.
|
|
40
|
-
headers.set("authorization", `Bearer ${options.
|
|
41
|
+
if (options.target.apiKey && !headers.has("authorization")) {
|
|
42
|
+
headers.set("authorization", `Bearer ${options.target.apiKey}`);
|
|
41
43
|
}
|
|
42
44
|
const controller = new AbortController();
|
|
43
45
|
const timer = setTimeout(() => controller.abort(), options.config.timeoutMs);
|
|
46
|
+
const external = options.signal;
|
|
47
|
+
const onExternalAbort = () => controller.abort();
|
|
48
|
+
if (external?.aborted)
|
|
49
|
+
controller.abort();
|
|
50
|
+
external?.addEventListener("abort", onExternalAbort, { once: true });
|
|
44
51
|
let response;
|
|
45
52
|
let raw;
|
|
46
53
|
try {
|
|
47
|
-
response = await fetch(chatCompletionsUrl(options.
|
|
54
|
+
response = await fetch(chatCompletionsUrl(options.target.baseUrl), {
|
|
48
55
|
method: "POST",
|
|
49
56
|
headers,
|
|
50
57
|
body: JSON.stringify({
|
|
51
|
-
model: options.
|
|
58
|
+
model: options.target.model,
|
|
52
59
|
messages: [{ role: "user", content }],
|
|
53
60
|
max_tokens: options.config.maxTokens,
|
|
54
61
|
stream: false,
|
|
@@ -58,6 +65,9 @@ export async function requestVisionCompletion(options) {
|
|
|
58
65
|
raw = await response.text();
|
|
59
66
|
}
|
|
60
67
|
catch (error) {
|
|
68
|
+
if (external?.aborted) {
|
|
69
|
+
throw new VisionError("API_ABORTED", "Request aborted because another vision model target finished first");
|
|
70
|
+
}
|
|
61
71
|
if (controller.signal.aborted) {
|
|
62
72
|
throw new VisionError("API_TIMEOUT", `Vision API timed out after ${options.config.timeoutMs} ms`);
|
|
63
73
|
}
|
|
@@ -67,6 +77,7 @@ export async function requestVisionCompletion(options) {
|
|
|
67
77
|
}
|
|
68
78
|
finally {
|
|
69
79
|
clearTimeout(timer);
|
|
80
|
+
external?.removeEventListener("abort", onExternalAbort);
|
|
70
81
|
}
|
|
71
82
|
let payload;
|
|
72
83
|
try {
|
|
@@ -106,10 +117,59 @@ export async function requestVisionCompletion(options) {
|
|
|
106
117
|
}
|
|
107
118
|
return {
|
|
108
119
|
text,
|
|
109
|
-
model: typeof record.model === "string" ? record.model : options.
|
|
120
|
+
model: typeof record.model === "string" ? record.model : options.target.model,
|
|
110
121
|
...(record.usage && typeof record.usage === "object"
|
|
111
122
|
? { usage: record.usage }
|
|
112
123
|
: {}),
|
|
113
124
|
};
|
|
114
125
|
}
|
|
126
|
+
export async function raceVisionCompletions(options) {
|
|
127
|
+
const targets = options.config.targets;
|
|
128
|
+
if (targets.length === 0) {
|
|
129
|
+
throw new VisionError("CONFIG_ERROR", "No vision model configured. Add providers to the settings file or set AGENT_VISION_MODEL (or VISION_MODEL / OPENAI_MODEL)");
|
|
130
|
+
}
|
|
131
|
+
const single = targets.length === 1 ? targets[0] : undefined;
|
|
132
|
+
if (single) {
|
|
133
|
+
return requestVisionCompletion({
|
|
134
|
+
config: options.config,
|
|
135
|
+
target: single,
|
|
136
|
+
prompt: options.prompt,
|
|
137
|
+
images: options.images,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
const attempts = targets.map((target) => {
|
|
141
|
+
const controller = new AbortController();
|
|
142
|
+
return {
|
|
143
|
+
target,
|
|
144
|
+
controller,
|
|
145
|
+
promise: requestVisionCompletion({
|
|
146
|
+
config: options.config,
|
|
147
|
+
target,
|
|
148
|
+
prompt: options.prompt,
|
|
149
|
+
images: options.images,
|
|
150
|
+
signal: controller.signal,
|
|
151
|
+
}),
|
|
152
|
+
};
|
|
153
|
+
});
|
|
154
|
+
return new Promise((resolve, reject) => {
|
|
155
|
+
let pending = attempts.length;
|
|
156
|
+
const failures = [];
|
|
157
|
+
for (const attempt of attempts) {
|
|
158
|
+
attempt.promise.then((result) => {
|
|
159
|
+
for (const other of attempts) {
|
|
160
|
+
if (other !== attempt && !other.controller.signal.aborted) {
|
|
161
|
+
other.controller.abort();
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
resolve(result);
|
|
165
|
+
}, (error) => {
|
|
166
|
+
failures.push(`${attempt.target.label}: ${errorMessage(error)}`);
|
|
167
|
+
pending -= 1;
|
|
168
|
+
if (pending === 0) {
|
|
169
|
+
reject(new VisionError("API_ERROR", `All vision model targets failed:\n${failures.join("\n")}`));
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
}
|
|
115
175
|
//# sourceMappingURL=provider.js.map
|
package/dist/provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
-
export declare const SERVER_VERSION = "0.
|
|
2
|
+
export declare const SERVER_VERSION = "0.3.0";
|
|
3
3
|
export declare function createServer(): McpServer;
|
|
4
4
|
export declare function startStdioServer(): Promise<void>;
|
|
5
5
|
//# sourceMappingURL=server.d.ts.map
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOpE,eAAO,MAAM,cAAc,UAAU,CAAC;AAStC,wBAAgB,YAAY,IAAI,SAAS,CA6FxC;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAItD"}
|
package/dist/server.js
CHANGED
|
@@ -3,7 +3,8 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
|
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import { analyzeImage, analyzeVideo } from "./analyze.js";
|
|
5
5
|
import { errorMessage } from "./errors.js";
|
|
6
|
-
|
|
6
|
+
import { generateImage } from "./generate.js";
|
|
7
|
+
export const SERVER_VERSION = "0.3.0";
|
|
7
8
|
function failure(error) {
|
|
8
9
|
return {
|
|
9
10
|
content: [{ type: "text", text: errorMessage(error) }],
|
|
@@ -17,7 +18,7 @@ export function createServer() {
|
|
|
17
18
|
});
|
|
18
19
|
server.registerTool("analyze_image", {
|
|
19
20
|
title: "Analyze image",
|
|
20
|
-
description: "Analyze an image from a local path, HTTP(S) URL, or base64 data URI. Use
|
|
21
|
+
description: "Analyze an image from a local path, HTTP(S) URL, or base64 data URI. Use ONLY when you cannot view the image yourself (no native multimodal/image input) — if you can see the image directly, answer from your own vision instead. For screenshots, UI, OCR, diagrams, photos, and visual debugging.",
|
|
21
22
|
inputSchema: z.object({
|
|
22
23
|
source: z.string().min(1).describe("Local path, HTTP(S) URL, or data:image/... URI"),
|
|
23
24
|
prompt: z.string().optional().describe("The user's specific question about the image"),
|
|
@@ -52,6 +53,40 @@ export function createServer() {
|
|
|
52
53
|
return failure(error);
|
|
53
54
|
}
|
|
54
55
|
});
|
|
56
|
+
server.registerTool("generate_image", {
|
|
57
|
+
title: "Generate image",
|
|
58
|
+
description: "Generate one image from a text prompt using configured OpenAI-compatible or Volcengine Ark (Seedream) providers. Uses the same settings as the standalone CLI. Returns image content and metadata; optionally saves to a new local file. This is image creation, not image analysis, and works regardless of native vision capability.",
|
|
59
|
+
inputSchema: z.object({
|
|
60
|
+
prompt: z.string().trim().min(1).describe("Description of the image to create"),
|
|
61
|
+
output_path: z.string().trim().min(1).optional().describe("Optional local file path; parent must exist and file must not exist"),
|
|
62
|
+
size: z.string().trim().min(1).optional().describe("Provider-supported image size, e.g. 1024x1024 or 2K for Ark; omitted uses provider default"),
|
|
63
|
+
quality: z.string().trim().min(1).optional().describe("OpenAI-compatible quality; not supported by volcengine-ark, omit for Ark"),
|
|
64
|
+
}),
|
|
65
|
+
annotations: {
|
|
66
|
+
readOnlyHint: false,
|
|
67
|
+
destructiveHint: false,
|
|
68
|
+
idempotentHint: false,
|
|
69
|
+
openWorldHint: true,
|
|
70
|
+
},
|
|
71
|
+
}, async ({ prompt, output_path, size, quality }) => {
|
|
72
|
+
try {
|
|
73
|
+
const { data, ...metadata } = await generateImage({
|
|
74
|
+
prompt,
|
|
75
|
+
...(output_path ? { outputPath: output_path } : {}),
|
|
76
|
+
...(size ? { size } : {}),
|
|
77
|
+
...(quality ? { quality } : {}),
|
|
78
|
+
});
|
|
79
|
+
return {
|
|
80
|
+
content: [
|
|
81
|
+
{ type: "text", text: JSON.stringify(metadata) },
|
|
82
|
+
{ type: "image", data, mimeType: metadata.mimeType },
|
|
83
|
+
],
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
return failure(error);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
55
90
|
return server;
|
|
56
91
|
}
|
|
57
92
|
export async function startStdioServer() {
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/video.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import type { VisionInputImage } from "./provider.js";
|
|
|
3
3
|
export interface VideoFrame extends VisionInputImage {
|
|
4
4
|
timestampSeconds: number;
|
|
5
5
|
}
|
|
6
|
-
export declare function ensureFfmpeg(): Promise<string>;
|
|
6
|
+
export declare function ensureFfmpeg(configuredPath?: string): Promise<string>;
|
|
7
7
|
export declare function extractVideoFrames(options: {
|
|
8
8
|
source: string;
|
|
9
9
|
maxFrames: number;
|
package/dist/video.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../src/video.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD,MAAM,WAAW,UAAW,SAAQ,gBAAgB;IAClD,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAoCD,wBAAgB,YAAY,
|
|
1
|
+
{"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../src/video.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD,MAAM,WAAW,UAAW,SAAQ,gBAAgB;IAClD,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAoCD,wBAAgB,YAAY,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkCrE;AAyGD,wBAAsB,kBAAkB,CAAC,OAAO,EAAE;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CA8DxB"}
|
package/dist/video.js
CHANGED
|
@@ -37,9 +37,9 @@ async function bundledFfmpeg() {
|
|
|
37
37
|
return undefined;
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
|
-
export function ensureFfmpeg() {
|
|
40
|
+
export function ensureFfmpeg(configuredPath) {
|
|
41
41
|
ffmpegReady ??= (async () => {
|
|
42
|
-
const configured = process.env.AGENT_VISION_FFMPEG_PATH?.trim();
|
|
42
|
+
const configured = configuredPath?.trim() || process.env.AGENT_VISION_FFMPEG_PATH?.trim();
|
|
43
43
|
if (configured) {
|
|
44
44
|
const resolved = path.resolve(configured);
|
|
45
45
|
if (!(await usableFile(resolved))) {
|
|
@@ -70,8 +70,8 @@ function expandLocalPath(source) {
|
|
|
70
70
|
return path.join(homedir(), source.slice(2));
|
|
71
71
|
return path.resolve(source.startsWith("@") ? source.slice(1) : source);
|
|
72
72
|
}
|
|
73
|
-
async function runFfmpeg(args, allowFailure = false, timeoutMs = 120_000) {
|
|
74
|
-
const command = await ensureFfmpeg();
|
|
73
|
+
async function runFfmpeg(args, allowFailure = false, timeoutMs = 120_000, configuredPath) {
|
|
74
|
+
const command = await ensureFfmpeg(configuredPath);
|
|
75
75
|
return new Promise((resolve, reject) => {
|
|
76
76
|
const child = spawn(command, args, { stdio: ["ignore", "ignore", "pipe"] });
|
|
77
77
|
let stderr = "";
|
|
@@ -102,8 +102,8 @@ async function runFfmpeg(args, allowFailure = false, timeoutMs = 120_000) {
|
|
|
102
102
|
});
|
|
103
103
|
});
|
|
104
104
|
}
|
|
105
|
-
async function videoDuration(filePath, timeoutMs) {
|
|
106
|
-
const output = await runFfmpeg(["-hide_banner", "-i", filePath], true, timeoutMs);
|
|
105
|
+
async function videoDuration(filePath, timeoutMs, configuredPath) {
|
|
106
|
+
const output = await runFfmpeg(["-hide_banner", "-i", filePath], true, timeoutMs, configuredPath);
|
|
107
107
|
const match = output.match(/Duration:\s*(\d+):(\d+):(\d+(?:\.\d+)?)/);
|
|
108
108
|
if (!match?.[1] || !match[2] || !match[3]) {
|
|
109
109
|
throw new VisionError("UNSUPPORTED_VIDEO", "Could not determine video duration");
|
|
@@ -155,7 +155,7 @@ export async function extractVideoFrames(options) {
|
|
|
155
155
|
const workDir = await mkdtemp(prefix);
|
|
156
156
|
try {
|
|
157
157
|
const inputPath = await prepareInput(options.source.trim(), workDir, options.config);
|
|
158
|
-
const duration = await videoDuration(inputPath, options.config.timeoutMs);
|
|
158
|
+
const duration = await videoDuration(inputPath, options.config.timeoutMs, options.config.ffmpegPath);
|
|
159
159
|
const timestamps = Array.from({ length: options.maxFrames }, (_, index) => ((index + 0.5) * duration) / options.maxFrames);
|
|
160
160
|
for (const [index, timestamp] of timestamps.entries()) {
|
|
161
161
|
const outputPath = path.join(workDir, `frame-${String(index + 1).padStart(3, "0")}.jpg`);
|
|
@@ -175,7 +175,7 @@ export async function extractVideoFrames(options) {
|
|
|
175
175
|
"3",
|
|
176
176
|
"-y",
|
|
177
177
|
outputPath,
|
|
178
|
-
], false, options.config.timeoutMs);
|
|
178
|
+
], false, options.config.timeoutMs, options.config.ffmpegPath);
|
|
179
179
|
}
|
|
180
180
|
const frameNames = (await readdir(workDir))
|
|
181
181
|
.filter((name) => /^frame-\d+\.jpg$/.test(name))
|
package/dist/video.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"video.js","sourceRoot":"","sources":["../src/video.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,SAAS,IAAI,WAAW,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAOlD,IAAI,WAAwC,CAAC;AAE7C,KAAK,UAAU,UAAU,CAAC,QAAgB;IACxC,IAAI,CAAC;QACH,MAAM,MAAM,CACV,QAAQ,EACR,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CACnE,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY;IACzB,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC9E,KAAK,MAAM,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACvE,IAAI,CAAC,SAAS;YAAE,SAAS;QACzB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QACvD,IAAI,MAAM,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;IACpD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,aAAa;IAC1B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;QAC1D,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAwC,CAAC;QACpE,OAAO,SAAS,EAAE,IAAI,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY;
|
|
1
|
+
{"version":3,"file":"video.js","sourceRoot":"","sources":["../src/video.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yanickxia/agent-vision",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "A small MCP server and Agent Skill for image and
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "A small MCP server and Agent Skill for image/video understanding and image generation.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/cli.js",
|
|
7
7
|
"bin": {
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
"agent-skills",
|
|
30
30
|
"vision",
|
|
31
31
|
"image-understanding",
|
|
32
|
+
"image-generation",
|
|
32
33
|
"video-understanding",
|
|
33
34
|
"openai-compatible"
|
|
34
35
|
],
|