@evolinkai/mcp 0.0.0-stage → 1.4.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/LICENSE +178 -0
- package/README.md +67 -2
- package/dist/core/src/branding.d.ts +3 -0
- package/dist/core/src/branding.d.ts.map +1 -0
- package/dist/core/src/branding.js +8 -0
- package/dist/core/src/branding.js.map +1 -0
- package/dist/core/src/config.d.ts +19 -0
- package/dist/core/src/config.d.ts.map +1 -0
- package/dist/core/src/config.js +90 -0
- package/dist/core/src/config.js.map +1 -0
- package/dist/core/src/data/model-params.d.ts +49 -0
- package/dist/core/src/data/model-params.d.ts.map +1 -0
- package/dist/core/src/data/model-params.generated.d.ts +2 -0
- package/dist/core/src/data/model-params.generated.d.ts.map +1 -0
- package/dist/core/src/data/model-params.generated.js +3 -0
- package/dist/core/src/data/model-params.generated.js.map +1 -0
- package/dist/core/src/data/model-params.js +22 -0
- package/dist/core/src/data/model-params.js.map +1 -0
- package/dist/core/src/request-context.d.ts +79 -0
- package/dist/core/src/request-context.d.ts.map +1 -0
- package/dist/core/src/request-context.js +52 -0
- package/dist/core/src/request-context.js.map +1 -0
- package/dist/core/src/server.d.ts +36 -0
- package/dist/core/src/server.d.ts.map +1 -0
- package/dist/core/src/server.js +123 -0
- package/dist/core/src/server.js.map +1 -0
- package/dist/core/src/services/api-client.d.ts +142 -0
- package/dist/core/src/services/api-client.d.ts.map +1 -0
- package/dist/core/src/services/api-client.js +179 -0
- package/dist/core/src/services/api-client.js.map +1 -0
- package/dist/core/src/services/error-handler.d.ts +51 -0
- package/dist/core/src/services/error-handler.d.ts.map +1 -0
- package/dist/core/src/services/error-handler.js +403 -0
- package/dist/core/src/services/error-handler.js.map +1 -0
- package/dist/core/src/services/file-client.d.ts +54 -0
- package/dist/core/src/services/file-client.d.ts.map +1 -0
- package/dist/core/src/services/file-client.js +131 -0
- package/dist/core/src/services/file-client.js.map +1 -0
- package/dist/core/src/services/http-policy.d.ts +40 -0
- package/dist/core/src/services/http-policy.d.ts.map +1 -0
- package/dist/core/src/services/http-policy.js +120 -0
- package/dist/core/src/services/http-policy.js.map +1 -0
- package/dist/core/src/services/media-preview.d.ts +24 -0
- package/dist/core/src/services/media-preview.d.ts.map +1 -0
- package/dist/core/src/services/media-preview.js +155 -0
- package/dist/core/src/services/media-preview.js.map +1 -0
- package/dist/core/src/services/model-catalog.d.ts +24 -0
- package/dist/core/src/services/model-catalog.d.ts.map +1 -0
- package/dist/core/src/services/model-catalog.js +45 -0
- package/dist/core/src/services/model-catalog.js.map +1 -0
- package/dist/core/src/services/param-validator.d.ts +21 -0
- package/dist/core/src/services/param-validator.d.ts.map +1 -0
- package/dist/core/src/services/param-validator.js +164 -0
- package/dist/core/src/services/param-validator.js.map +1 -0
- package/dist/core/src/services/preview-download.d.ts +11 -0
- package/dist/core/src/services/preview-download.d.ts.map +1 -0
- package/dist/core/src/services/preview-download.js +106 -0
- package/dist/core/src/services/preview-download.js.map +1 -0
- package/dist/core/src/services/pricing-client.d.ts +95 -0
- package/dist/core/src/services/pricing-client.d.ts.map +1 -0
- package/dist/core/src/services/pricing-client.js +396 -0
- package/dist/core/src/services/pricing-client.js.map +1 -0
- package/dist/core/src/services/upload-policy.d.ts +19 -0
- package/dist/core/src/services/upload-policy.d.ts.map +1 -0
- package/dist/core/src/services/upload-policy.js +168 -0
- package/dist/core/src/services/upload-policy.js.map +1 -0
- package/dist/core/src/services/upload-slots.d.ts +63 -0
- package/dist/core/src/services/upload-slots.d.ts.map +1 -0
- package/dist/core/src/services/upload-slots.js +24 -0
- package/dist/core/src/services/upload-slots.js.map +1 -0
- package/dist/core/src/services/utm.d.ts +29 -0
- package/dist/core/src/services/utm.d.ts.map +1 -0
- package/dist/core/src/services/utm.js +64 -0
- package/dist/core/src/services/utm.js.map +1 -0
- package/dist/core/src/tool-guidance.d.ts +6 -0
- package/dist/core/src/tool-guidance.d.ts.map +1 -0
- package/dist/core/src/tool-guidance.js +49 -0
- package/dist/core/src/tool-guidance.js.map +1 -0
- package/dist/core/src/tools/check-balance.d.ts +4 -0
- package/dist/core/src/tools/check-balance.d.ts.map +1 -0
- package/dist/core/src/tools/check-balance.js +82 -0
- package/dist/core/src/tools/check-balance.js.map +1 -0
- package/dist/core/src/tools/estimate-cost.d.ts +4 -0
- package/dist/core/src/tools/estimate-cost.d.ts.map +1 -0
- package/dist/core/src/tools/estimate-cost.js +131 -0
- package/dist/core/src/tools/estimate-cost.js.map +1 -0
- package/dist/core/src/tools/generate.d.ts +4 -0
- package/dist/core/src/tools/generate.d.ts.map +1 -0
- package/dist/core/src/tools/generate.js +221 -0
- package/dist/core/src/tools/generate.js.map +1 -0
- package/dist/core/src/tools/get-model.d.ts +5 -0
- package/dist/core/src/tools/get-model.d.ts.map +1 -0
- package/dist/core/src/tools/get-model.js +117 -0
- package/dist/core/src/tools/get-model.js.map +1 -0
- package/dist/core/src/tools/get-task.d.ts +7 -0
- package/dist/core/src/tools/get-task.d.ts.map +1 -0
- package/dist/core/src/tools/get-task.js +56 -0
- package/dist/core/src/tools/get-task.js.map +1 -0
- package/dist/core/src/tools/list-tasks.d.ts +6 -0
- package/dist/core/src/tools/list-tasks.d.ts.map +1 -0
- package/dist/core/src/tools/list-tasks.js +149 -0
- package/dist/core/src/tools/list-tasks.js.map +1 -0
- package/dist/core/src/tools/prepare-upload.d.ts +6 -0
- package/dist/core/src/tools/prepare-upload.d.ts.map +1 -0
- package/dist/core/src/tools/prepare-upload.js +134 -0
- package/dist/core/src/tools/prepare-upload.js.map +1 -0
- package/dist/core/src/tools/search-models.d.ts +5 -0
- package/dist/core/src/tools/search-models.d.ts.map +1 -0
- package/dist/core/src/tools/search-models.js +97 -0
- package/dist/core/src/tools/search-models.js.map +1 -0
- package/dist/core/src/tools/shared.d.ts +55 -0
- package/dist/core/src/tools/shared.d.ts.map +1 -0
- package/dist/core/src/tools/shared.js +137 -0
- package/dist/core/src/tools/shared.js.map +1 -0
- package/dist/core/src/tools/task-format.d.ts +48 -0
- package/dist/core/src/tools/task-format.d.ts.map +1 -0
- package/dist/core/src/tools/task-format.js +212 -0
- package/dist/core/src/tools/task-format.js.map +1 -0
- package/dist/core/src/tools/upload-file.d.ts +17 -0
- package/dist/core/src/tools/upload-file.d.ts.map +1 -0
- package/dist/core/src/tools/upload-file.js +134 -0
- package/dist/core/src/tools/upload-file.js.map +1 -0
- package/dist/core/src/version.d.ts +3 -0
- package/dist/core/src/version.d.ts.map +1 -0
- package/dist/core/src/version.js +3 -0
- package/dist/core/src/version.js.map +1 -0
- package/dist/evolink-media/src/index.d.ts +3 -0
- package/dist/evolink-media/src/index.d.ts.map +1 -0
- package/dist/evolink-media/src/index.js +18 -0
- package/dist/evolink-media/src/index.js.map +1 -0
- package/package.json +46 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../../../../core/src/services/error-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EVOLINK_FILES_BASE_URL points uploads at a staging files-api. HTTPS is
|
|
3
|
+
* required except for loopback development hosts.
|
|
4
|
+
*/
|
|
5
|
+
export declare function filesApiBaseUrl(): string;
|
|
6
|
+
/**
|
|
7
|
+
* The credential sent to files-api. Absent: the caller's own API key. Signed-in
|
|
8
|
+
* hosted connections have no key of their own, so they pass a short-lived
|
|
9
|
+
* upload token from the gateway (POST /v1/files/upload-token) instead.
|
|
10
|
+
*/
|
|
11
|
+
export interface FileUploadAuth {
|
|
12
|
+
bearer: string;
|
|
13
|
+
}
|
|
14
|
+
export interface FileUploadData {
|
|
15
|
+
file_id: string;
|
|
16
|
+
file_name: string;
|
|
17
|
+
original_name: string;
|
|
18
|
+
file_size: number;
|
|
19
|
+
mime_type: string;
|
|
20
|
+
upload_path: string;
|
|
21
|
+
file_url: string;
|
|
22
|
+
download_url: string;
|
|
23
|
+
upload_time: string;
|
|
24
|
+
expires_at: string;
|
|
25
|
+
}
|
|
26
|
+
interface FileApiResponse<T = unknown> {
|
|
27
|
+
success: boolean;
|
|
28
|
+
code: number;
|
|
29
|
+
msg: string;
|
|
30
|
+
data?: T;
|
|
31
|
+
request_id?: string;
|
|
32
|
+
}
|
|
33
|
+
export declare function fileBase64Upload(base64Data: string, uploadPath?: string, fileName?: string, auth?: FileUploadAuth): Promise<FileApiResponse<FileUploadData>>;
|
|
34
|
+
export interface StreamUploadOptions {
|
|
35
|
+
uploadPath?: string;
|
|
36
|
+
fileName?: string;
|
|
37
|
+
auth?: FileUploadAuth;
|
|
38
|
+
/** Tool name sent as X-Evo-Tool. */
|
|
39
|
+
tool?: string;
|
|
40
|
+
/** Aborts the upload, for example when the incoming body turns out too large. */
|
|
41
|
+
signal?: AbortSignal;
|
|
42
|
+
/** Overall timeout; defaults to EVOLINK_MCP_WRITE_TIMEOUT_MS. */
|
|
43
|
+
timeoutMs?: number;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Streams a file to files-api as multipart/form-data without holding it in
|
|
47
|
+
* memory. With a known size the request carries Content-Length; otherwise it
|
|
48
|
+
* is sent chunked.
|
|
49
|
+
*/
|
|
50
|
+
export declare function fileStreamUploadFrom(source: AsyncIterable<Uint8Array>, size: number | undefined, mime: string, originalName: string, options?: StreamUploadOptions): Promise<FileApiResponse<FileUploadData>>;
|
|
51
|
+
export declare function fileStreamUpload(filePath: string, fileSize: number, mime: string, originalName: string, uploadPath?: string, fileName?: string, auth?: FileUploadAuth): Promise<FileApiResponse<FileUploadData>>;
|
|
52
|
+
export declare function fileUrlUpload(fileUrl: string, uploadPath?: string, fileName?: string, auth?: FileUploadAuth): Promise<FileApiResponse<FileUploadData>>;
|
|
53
|
+
export {};
|
|
54
|
+
//# sourceMappingURL=file-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-client.d.ts","sourceRoot":"","sources":["../../../../../core/src/services/file-client.ts"],"names":[],"mappings":"AAmBA;;;GAGG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAcxC;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,eAAe,CAAC,CAAC,GAAG,OAAO;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAwCD,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAK1C;AAUD,MAAM,WAAW,mBAAmB;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,oCAAoC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iFAAiF;IACjF,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,EACjC,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAuC1C;AAED,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAE1C;AAED,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAK1C"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { createReadStream } from 'node:fs';
|
|
3
|
+
import { Readable } from 'node:stream';
|
|
4
|
+
import { getApiKey } from '../config.js';
|
|
5
|
+
import { ApiHttpError } from './api-client.js';
|
|
6
|
+
import { classifyGatewayError, formatGatewayError } from './error-handler.js';
|
|
7
|
+
import { DEFAULT_WRITE_TIMEOUT_MS, evoHeaders, fetchWithTimeout, newRunId, parseRetryAfter, readJsonBody, responseRequestId, timeoutFromEnv, } from './http-policy.js';
|
|
8
|
+
const DEFAULT_FILES_API_BASE_URL = 'https://files-api.evolink.ai';
|
|
9
|
+
/**
|
|
10
|
+
* EVOLINK_FILES_BASE_URL points uploads at a staging files-api. HTTPS is
|
|
11
|
+
* required except for loopback development hosts.
|
|
12
|
+
*/
|
|
13
|
+
export function filesApiBaseUrl() {
|
|
14
|
+
const override = (process.env.EVOLINK_FILES_BASE_URL ?? '').trim().replace(/\/+$/, '');
|
|
15
|
+
if (!override)
|
|
16
|
+
return DEFAULT_FILES_API_BASE_URL;
|
|
17
|
+
let parsed;
|
|
18
|
+
try {
|
|
19
|
+
parsed = new URL(override);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
throw new Error(`EVOLINK_FILES_BASE_URL is not a valid URL: ${override}`);
|
|
23
|
+
}
|
|
24
|
+
const loopback = parsed.hostname === 'localhost' || parsed.hostname === '127.0.0.1';
|
|
25
|
+
if (parsed.protocol !== 'https:' && !(parsed.protocol === 'http:' && loopback)) {
|
|
26
|
+
throw new Error('EVOLINK_FILES_BASE_URL must use HTTPS (or HTTP on localhost).');
|
|
27
|
+
}
|
|
28
|
+
return override;
|
|
29
|
+
}
|
|
30
|
+
function requestHeaders(tool, auth) {
|
|
31
|
+
const runId = newRunId();
|
|
32
|
+
return {
|
|
33
|
+
'Authorization': `Bearer ${auth?.bearer ?? getApiKey()}`,
|
|
34
|
+
...evoHeaders(tool),
|
|
35
|
+
'Idempotency-Key': runId,
|
|
36
|
+
'X-Evo-Run-Id': runId,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function apiError(status, data, headers) {
|
|
40
|
+
const retryAfterMs = parseRetryAfter(headers.get('retry-after'));
|
|
41
|
+
const info = classifyGatewayError(status, data, retryAfterMs, responseRequestId(headers));
|
|
42
|
+
return new ApiHttpError(status, formatGatewayError(info), retryAfterMs, info.request_id, info);
|
|
43
|
+
}
|
|
44
|
+
async function parseResponse(response) {
|
|
45
|
+
const data = await readJsonBody(response);
|
|
46
|
+
if (!response.ok)
|
|
47
|
+
throw apiError(response.status, data, response.headers);
|
|
48
|
+
const body = data;
|
|
49
|
+
if (body.success === false) {
|
|
50
|
+
const status = typeof body.code === 'number' && body.code >= 400 && body.code < 600 ? body.code : 400;
|
|
51
|
+
throw apiError(status, data, response.headers);
|
|
52
|
+
}
|
|
53
|
+
const requestId = responseRequestId(response.headers);
|
|
54
|
+
if (!body.request_id && requestId)
|
|
55
|
+
body.request_id = requestId;
|
|
56
|
+
return body;
|
|
57
|
+
}
|
|
58
|
+
async function jsonUpload(path, body, auth) {
|
|
59
|
+
const response = await fetchWithTimeout(`${filesApiBaseUrl()}${path}`, {
|
|
60
|
+
method: 'POST',
|
|
61
|
+
headers: { ...requestHeaders('upload_file', auth), 'Content-Type': 'application/json' },
|
|
62
|
+
body: JSON.stringify(body),
|
|
63
|
+
}, timeoutFromEnv('EVOLINK_MCP_WRITE_TIMEOUT_MS', DEFAULT_WRITE_TIMEOUT_MS));
|
|
64
|
+
return parseResponse(response);
|
|
65
|
+
}
|
|
66
|
+
export async function fileBase64Upload(base64Data, uploadPath, fileName, auth) {
|
|
67
|
+
const body = { base64_data: base64Data };
|
|
68
|
+
if (uploadPath)
|
|
69
|
+
body.upload_path = uploadPath;
|
|
70
|
+
if (fileName)
|
|
71
|
+
body.file_name = fileName;
|
|
72
|
+
return jsonUpload('/api/v1/files/upload/base64', body, auth);
|
|
73
|
+
}
|
|
74
|
+
function multipartField(name, value) {
|
|
75
|
+
return Buffer.from(`Content-Disposition: form-data; name="${name}"\r\n\r\n${value}\r\n`);
|
|
76
|
+
}
|
|
77
|
+
function safeDispositionValue(value) {
|
|
78
|
+
return value.replaceAll(/["\r\n]/g, '_');
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Streams a file to files-api as multipart/form-data without holding it in
|
|
82
|
+
* memory. With a known size the request carries Content-Length; otherwise it
|
|
83
|
+
* is sent chunked.
|
|
84
|
+
*/
|
|
85
|
+
export async function fileStreamUploadFrom(source, size, mime, originalName, options = {}) {
|
|
86
|
+
const boundary = `----evolink-${randomUUID()}`;
|
|
87
|
+
const prefix = Buffer.from(`--${boundary}\r\nContent-Disposition: form-data; name="file"; filename="${safeDispositionValue(originalName)}"\r\nContent-Type: ${mime}\r\n\r\n`);
|
|
88
|
+
const fields = [];
|
|
89
|
+
if (options.uploadPath)
|
|
90
|
+
fields.push(multipartField('uploadPath', options.uploadPath));
|
|
91
|
+
if (options.fileName)
|
|
92
|
+
fields.push(multipartField('fileName', options.fileName));
|
|
93
|
+
const tailParts = [Buffer.from('\r\n')];
|
|
94
|
+
for (const field of fields) {
|
|
95
|
+
tailParts.push(Buffer.from(`--${boundary}\r\n`), field);
|
|
96
|
+
}
|
|
97
|
+
tailParts.push(Buffer.from(`--${boundary}--\r\n`));
|
|
98
|
+
const suffix = Buffer.concat(tailParts);
|
|
99
|
+
async function* multipartBody() {
|
|
100
|
+
yield prefix;
|
|
101
|
+
for await (const chunk of source) {
|
|
102
|
+
yield Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
|
|
103
|
+
}
|
|
104
|
+
yield suffix;
|
|
105
|
+
}
|
|
106
|
+
const headers = requestHeaders(options.tool ?? 'upload_file', options.auth);
|
|
107
|
+
headers['Content-Type'] = `multipart/form-data; boundary=${boundary}`;
|
|
108
|
+
if (size !== undefined)
|
|
109
|
+
headers['Content-Length'] = String(prefix.length + size + suffix.length);
|
|
110
|
+
const init = {
|
|
111
|
+
method: 'POST',
|
|
112
|
+
headers,
|
|
113
|
+
body: Readable.from(multipartBody()),
|
|
114
|
+
duplex: 'half',
|
|
115
|
+
signal: options.signal,
|
|
116
|
+
};
|
|
117
|
+
const response = await fetchWithTimeout(`${filesApiBaseUrl()}/api/v1/files/upload/stream`, init, options.timeoutMs ?? timeoutFromEnv('EVOLINK_MCP_WRITE_TIMEOUT_MS', DEFAULT_WRITE_TIMEOUT_MS));
|
|
118
|
+
return parseResponse(response);
|
|
119
|
+
}
|
|
120
|
+
export async function fileStreamUpload(filePath, fileSize, mime, originalName, uploadPath, fileName, auth) {
|
|
121
|
+
return fileStreamUploadFrom(createReadStream(filePath), fileSize, mime, originalName, { uploadPath, fileName, auth });
|
|
122
|
+
}
|
|
123
|
+
export async function fileUrlUpload(fileUrl, uploadPath, fileName, auth) {
|
|
124
|
+
const body = { file_url: fileUrl };
|
|
125
|
+
if (uploadPath)
|
|
126
|
+
body.upload_path = uploadPath;
|
|
127
|
+
if (fileName)
|
|
128
|
+
body.file_name = fileName;
|
|
129
|
+
return jsonUpload('/api/v1/files/upload/url', body, auth);
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=file-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-client.js","sourceRoot":"","sources":["../../../../../core/src/services/file-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export declare const DEFAULT_READ_TIMEOUT_MS = 15000;
|
|
2
|
+
export declare const DEFAULT_WRITE_TIMEOUT_MS = 120000;
|
|
3
|
+
/** A generation submit only queues a task; keep it well inside the ~60 s tool-call limit of Codex and Cursor. */
|
|
4
|
+
export declare const DEFAULT_SUBMIT_TIMEOUT_MS = 30000;
|
|
5
|
+
export declare const MAX_RETRY_DELAY_MS = 30000;
|
|
6
|
+
/** Public site for console links in errors and results. */
|
|
7
|
+
export declare const EVOLINK_SITE = "https://evolink.ai";
|
|
8
|
+
export declare const TOP_UP_URL = "https://evolink.ai/dashboard/credits";
|
|
9
|
+
export declare const API_KEYS_URL = "https://evolink.ai/dashboard/keys";
|
|
10
|
+
/**
|
|
11
|
+
* Where a signed-in user manages the EvoLink MCP limit and pause. Until the
|
|
12
|
+
* console has an MCP section, the account's internal MCP key is listed under
|
|
13
|
+
* API Keys (as MCP_KEY_NAME) and its limit and on/off switch are set there.
|
|
14
|
+
* The gateway's action_url, when it sends one, takes precedence.
|
|
15
|
+
*/
|
|
16
|
+
export declare const MCP_CONSOLE_URL = "https://evolink.ai/dashboard/keys";
|
|
17
|
+
/** Name of the account's internal MCP key in the API Keys list (set by the gateway). */
|
|
18
|
+
export declare const MCP_KEY_NAME = "EvoLink MCP (OAuth)";
|
|
19
|
+
/** The gateway accepts Idempotency-Key values of 16–96 characters from this set. */
|
|
20
|
+
export declare const CLIENT_REQUEST_ID_PATTERN: RegExp;
|
|
21
|
+
export declare class RequestTimeoutError extends Error {
|
|
22
|
+
readonly timeoutMs: number;
|
|
23
|
+
constructor(timeoutMs: number);
|
|
24
|
+
}
|
|
25
|
+
export declare class PaidRequestOutcomeUnknownError extends Error {
|
|
26
|
+
readonly cause: unknown;
|
|
27
|
+
readonly idempotencyKey?: string | undefined;
|
|
28
|
+
constructor(cause: unknown, idempotencyKey?: string | undefined);
|
|
29
|
+
}
|
|
30
|
+
export declare function newRunId(): string;
|
|
31
|
+
/** Headers that tell the gateway this call came from the MCP server, which tool and which assistant. */
|
|
32
|
+
export declare function evoHeaders(tool: string): Record<string, string>;
|
|
33
|
+
/** Turns a console path such as /dashboard/credits into a full link; full https links pass through. */
|
|
34
|
+
export declare function siteUrl(pathOrUrl: string | undefined, fallback: string): string;
|
|
35
|
+
export declare function timeoutFromEnv(name: string, fallback: number): number;
|
|
36
|
+
export declare function parseRetryAfter(value: string | null, nowMs?: number): number | undefined;
|
|
37
|
+
export declare function responseRequestId(headers: Headers): string | undefined;
|
|
38
|
+
export declare function fetchWithTimeout(url: string, init: RequestInit, timeoutMs: number, fetchImpl?: typeof fetch): Promise<Response>;
|
|
39
|
+
export declare function readJsonBody(response: Response): Promise<unknown>;
|
|
40
|
+
//# sourceMappingURL=http-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-policy.d.ts","sourceRoot":"","sources":["../../../../../core/src/services/http-policy.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAC9C,eAAO,MAAM,wBAAwB,SAAU,CAAC;AAChD,iHAAiH;AACjH,eAAO,MAAM,yBAAyB,QAAS,CAAC;AAChD,eAAO,MAAM,kBAAkB,QAAS,CAAC;AAEzC,2DAA2D;AAC3D,eAAO,MAAM,YAAY,uBAAuB,CAAC;AACjD,eAAO,MAAM,UAAU,yCAAsC,CAAC;AAC9D,eAAO,MAAM,YAAY,sCAAmC,CAAC;AAC7D;;;;;GAKG;AACH,eAAO,MAAM,eAAe,sCAAe,CAAC;AAC5C,wFAAwF;AACxF,eAAO,MAAM,YAAY,wBAAwB,CAAC;AAElD,oFAAoF;AACpF,eAAO,MAAM,yBAAyB,QAA4B,CAAC;AAEnE,qBAAa,mBAAoB,SAAQ,KAAK;aAChB,SAAS,EAAE,MAAM;gBAAjB,SAAS,EAAE,MAAM;CAI9C;AAED,qBAAa,8BAA+B,SAAQ,KAAK;aAC3B,KAAK,EAAE,OAAO;aAAkB,cAAc,CAAC,EAAE,MAAM;gBAAvD,KAAK,EAAE,OAAO,EAAkB,cAAc,CAAC,EAAE,MAAM,YAAA;CAIpF;AAED,wBAAgB,QAAQ,IAAI,MAAM,CAEjC;AAED,wGAAwG;AACxG,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAS/D;AAED,uGAAuG;AACvG,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAK/E;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQrE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,SAAa,GAAG,MAAM,GAAG,SAAS,CAS5F;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAItE;AAED,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,WAAW,EACjB,SAAS,EAAE,MAAM,EACjB,SAAS,GAAE,OAAO,KAAa,GAC9B,OAAO,CAAC,QAAQ,CAAC,CAanB;AAED,wBAAsB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAQvE"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { currentClientName } from '../request-context.js';
|
|
3
|
+
import { MCP_VERSION } from '../version.js';
|
|
4
|
+
export const DEFAULT_READ_TIMEOUT_MS = 15_000;
|
|
5
|
+
export const DEFAULT_WRITE_TIMEOUT_MS = 120_000;
|
|
6
|
+
/** A generation submit only queues a task; keep it well inside the ~60 s tool-call limit of Codex and Cursor. */
|
|
7
|
+
export const DEFAULT_SUBMIT_TIMEOUT_MS = 30_000;
|
|
8
|
+
export const MAX_RETRY_DELAY_MS = 30_000;
|
|
9
|
+
/** Public site for console links in errors and results. */
|
|
10
|
+
export const EVOLINK_SITE = 'https://evolink.ai';
|
|
11
|
+
export const TOP_UP_URL = `${EVOLINK_SITE}/dashboard/credits`;
|
|
12
|
+
export const API_KEYS_URL = `${EVOLINK_SITE}/dashboard/keys`;
|
|
13
|
+
/**
|
|
14
|
+
* Where a signed-in user manages the EvoLink MCP limit and pause. Until the
|
|
15
|
+
* console has an MCP section, the account's internal MCP key is listed under
|
|
16
|
+
* API Keys (as MCP_KEY_NAME) and its limit and on/off switch are set there.
|
|
17
|
+
* The gateway's action_url, when it sends one, takes precedence.
|
|
18
|
+
*/
|
|
19
|
+
export const MCP_CONSOLE_URL = API_KEYS_URL;
|
|
20
|
+
/** Name of the account's internal MCP key in the API Keys list (set by the gateway). */
|
|
21
|
+
export const MCP_KEY_NAME = 'EvoLink MCP (OAuth)';
|
|
22
|
+
/** The gateway accepts Idempotency-Key values of 16–96 characters from this set. */
|
|
23
|
+
export const CLIENT_REQUEST_ID_PATTERN = /^[A-Za-z0-9._-]{16,96}$/;
|
|
24
|
+
export class RequestTimeoutError extends Error {
|
|
25
|
+
timeoutMs;
|
|
26
|
+
constructor(timeoutMs) {
|
|
27
|
+
super(`request timed out after ${timeoutMs}ms`);
|
|
28
|
+
this.timeoutMs = timeoutMs;
|
|
29
|
+
this.name = 'RequestTimeoutError';
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export class PaidRequestOutcomeUnknownError extends Error {
|
|
33
|
+
cause;
|
|
34
|
+
idempotencyKey;
|
|
35
|
+
constructor(cause, idempotencyKey) {
|
|
36
|
+
super('paid request outcome is unknown after the bounded idempotent retry; do not create a new paid intent');
|
|
37
|
+
this.cause = cause;
|
|
38
|
+
this.idempotencyKey = idempotencyKey;
|
|
39
|
+
this.name = 'PaidRequestOutcomeUnknownError';
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export function newRunId() {
|
|
43
|
+
return `run_${randomUUID().replaceAll('-', '')}`;
|
|
44
|
+
}
|
|
45
|
+
/** Headers that tell the gateway this call came from the MCP server, which tool and which assistant. */
|
|
46
|
+
export function evoHeaders(tool) {
|
|
47
|
+
const headers = {
|
|
48
|
+
'X-Evo-Client': 'mcp',
|
|
49
|
+
'X-Evo-Client-Version': MCP_VERSION,
|
|
50
|
+
'X-Evo-Tool': tool,
|
|
51
|
+
};
|
|
52
|
+
const clientName = currentClientName();
|
|
53
|
+
if (clientName)
|
|
54
|
+
headers['X-Evo-Client-Name'] = clientName;
|
|
55
|
+
return headers;
|
|
56
|
+
}
|
|
57
|
+
/** Turns a console path such as /dashboard/credits into a full link; full https links pass through. */
|
|
58
|
+
export function siteUrl(pathOrUrl, fallback) {
|
|
59
|
+
const value = (pathOrUrl ?? '').trim();
|
|
60
|
+
if (value.startsWith('https://'))
|
|
61
|
+
return value;
|
|
62
|
+
if (value.startsWith('/') && !value.startsWith('//'))
|
|
63
|
+
return `${EVOLINK_SITE}${value}`;
|
|
64
|
+
return fallback;
|
|
65
|
+
}
|
|
66
|
+
export function timeoutFromEnv(name, fallback) {
|
|
67
|
+
const raw = process.env[name];
|
|
68
|
+
if (!raw)
|
|
69
|
+
return fallback;
|
|
70
|
+
const parsed = Number(raw);
|
|
71
|
+
if (!Number.isInteger(parsed) || parsed < 1_000 || parsed > 600_000) {
|
|
72
|
+
throw new Error(`${name} must be an integer between 1000 and 600000 milliseconds`);
|
|
73
|
+
}
|
|
74
|
+
return parsed;
|
|
75
|
+
}
|
|
76
|
+
export function parseRetryAfter(value, nowMs = Date.now()) {
|
|
77
|
+
if (!value)
|
|
78
|
+
return undefined;
|
|
79
|
+
const seconds = Number(value.trim());
|
|
80
|
+
if (Number.isFinite(seconds) && seconds >= 0) {
|
|
81
|
+
return Math.min(Math.ceil(seconds * 1000), MAX_RETRY_DELAY_MS);
|
|
82
|
+
}
|
|
83
|
+
const dateMs = Date.parse(value);
|
|
84
|
+
if (!Number.isFinite(dateMs))
|
|
85
|
+
return undefined;
|
|
86
|
+
return Math.min(Math.max(0, dateMs - nowMs), MAX_RETRY_DELAY_MS);
|
|
87
|
+
}
|
|
88
|
+
export function responseRequestId(headers) {
|
|
89
|
+
return headers.get('x-request-id')?.trim()
|
|
90
|
+
|| headers.get('x-oneapi-request-id')?.trim()
|
|
91
|
+
|| undefined;
|
|
92
|
+
}
|
|
93
|
+
export async function fetchWithTimeout(url, init, timeoutMs, fetchImpl = fetch) {
|
|
94
|
+
const controller = new AbortController();
|
|
95
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
96
|
+
try {
|
|
97
|
+
return await fetchImpl(url, { ...init, signal: controller.signal });
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
if (controller.signal.aborted) {
|
|
101
|
+
throw new RequestTimeoutError(timeoutMs);
|
|
102
|
+
}
|
|
103
|
+
throw error;
|
|
104
|
+
}
|
|
105
|
+
finally {
|
|
106
|
+
clearTimeout(timer);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
export async function readJsonBody(response) {
|
|
110
|
+
const text = await response.text();
|
|
111
|
+
if (!text)
|
|
112
|
+
return {};
|
|
113
|
+
try {
|
|
114
|
+
return JSON.parse(text);
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
return { message: text.slice(0, 2_000) };
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=http-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-policy.js","sourceRoot":"","sources":["../../../../../core/src/services/http-policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
export declare const PREVIEW_LIMITS: {
|
|
3
|
+
readonly count: 2;
|
|
4
|
+
readonly edge: 384;
|
|
5
|
+
readonly outputBytes: number;
|
|
6
|
+
readonly imageBytes: number;
|
|
7
|
+
readonly videoBytes: number;
|
|
8
|
+
readonly timeoutMs: 15000;
|
|
9
|
+
readonly callBudgetMs: 55000;
|
|
10
|
+
};
|
|
11
|
+
export interface PreviewSource {
|
|
12
|
+
taskId: string;
|
|
13
|
+
url: string;
|
|
14
|
+
kind: 'image' | 'video';
|
|
15
|
+
}
|
|
16
|
+
export type Thumbnailer = (source: PreviewSource, signal: AbortSignal) => Promise<Buffer | undefined>;
|
|
17
|
+
/** Force a known local demuxer: do not let a mislabeled HTML, SVG or playlist choose its own decoder. */
|
|
18
|
+
export declare function previewFormat(data: Buffer, kind: PreviewSource['kind']): string | undefined;
|
|
19
|
+
/** Render only a small JPEG preview; the original file is never modified or replaced. */
|
|
20
|
+
export declare function decodePreview(data: Buffer, kind: PreviewSource['kind'], signal: AbortSignal): Promise<Buffer | undefined>;
|
|
21
|
+
export declare const createThumbnail: Thumbnailer;
|
|
22
|
+
/** Optional user-facing image blocks accompany, rather than replace, the original text and resource links. */
|
|
23
|
+
export declare function addResultPreviews(result: CallToolResult, thumbnailer?: Thumbnailer, parentSignal?: AbortSignal, remainingMs?: number): Promise<CallToolResult>;
|
|
24
|
+
//# sourceMappingURL=media-preview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-preview.d.ts","sourceRoot":"","sources":["../../../../../core/src/services/media-preview.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAgB,MAAM,oCAAoC,CAAC;AAGvF,eAAO,MAAM,cAAc;;;;;;;;CAIjB,CAAC;AAEX,MAAM,WAAW,aAAa;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAA;CAAE;AACvF,MAAM,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AAEtG,yGAAyG;AACzG,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,SAAS,CAW3F;AAED,yFAAyF;AACzF,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAoC/H;AAGD,eAAO,MAAM,eAAe,EAAE,WAQ7B,CAAC;AAoBF,8GAA8G;AAC9G,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE,WAAW,GAAE,WAA6B,EAAE,YAAY,CAAC,EAAE,WAAW,EAAE,WAAW,GAAE,MAAiC,GAAG,OAAO,CAAC,cAAc,CAAC,CAmC/M"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { mkdtemp, writeFile, rm } from 'node:fs/promises';
|
|
3
|
+
import { tmpdir } from 'node:os';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { downloadPreview } from './preview-download.js';
|
|
6
|
+
export const PREVIEW_LIMITS = {
|
|
7
|
+
count: 2, edge: 384, outputBytes: 96 * 1024,
|
|
8
|
+
imageBytes: 8 * 1024 * 1024, videoBytes: 32 * 1024 * 1024,
|
|
9
|
+
timeoutMs: 15_000, callBudgetMs: 55_000,
|
|
10
|
+
};
|
|
11
|
+
/** Force a known local demuxer: do not let a mislabeled HTML, SVG or playlist choose its own decoder. */
|
|
12
|
+
export function previewFormat(data, kind) {
|
|
13
|
+
if (kind === 'image') {
|
|
14
|
+
if (data.subarray(0, 8).equals(Buffer.from([137, 80, 78, 71, 13, 10, 26, 10])))
|
|
15
|
+
return 'png_pipe';
|
|
16
|
+
if (data[0] === 0xff && data[1] === 0xd8 && data[2] === 0xff)
|
|
17
|
+
return 'jpeg_pipe';
|
|
18
|
+
if (data.toString('ascii', 0, 4) === 'RIFF' && data.toString('ascii', 8, 12) === 'WEBP')
|
|
19
|
+
return 'webp_pipe';
|
|
20
|
+
if (/^GIF8[79]a$/.test(data.toString('ascii', 0, 6)))
|
|
21
|
+
return 'gif';
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
if (['ftyp', 'moov', 'mdat', 'wide', 'free'].includes(data.toString('ascii', 4, 8)))
|
|
25
|
+
return 'mov';
|
|
26
|
+
if (data.subarray(0, 4).equals(Buffer.from([0x1a, 0x45, 0xdf, 0xa3])))
|
|
27
|
+
return 'matroska';
|
|
28
|
+
}
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
/** Render only a small JPEG preview; the original file is never modified or replaced. */
|
|
32
|
+
export async function decodePreview(data, kind, signal) {
|
|
33
|
+
const format = previewFormat(data, kind);
|
|
34
|
+
if (!format || signal.aborted)
|
|
35
|
+
return undefined;
|
|
36
|
+
const directory = await mkdtemp(join(tmpdir(), 'evolink-preview-'));
|
|
37
|
+
try {
|
|
38
|
+
const input = join(directory, 'source');
|
|
39
|
+
await writeFile(input, data, { mode: 0o600 });
|
|
40
|
+
signal.throwIfAborted();
|
|
41
|
+
return await new Promise(resolve => {
|
|
42
|
+
const child = spawn('ffmpeg', [
|
|
43
|
+
'-hide_banner', '-loglevel', 'error', '-nostdin', '-max_alloc', '67108864',
|
|
44
|
+
'-threads', '1', '-filter_threads', '1', '-protocol_whitelist', 'file,pipe',
|
|
45
|
+
'-max_pixels', '16777216', '-f', format, '-i', input,
|
|
46
|
+
'-map', '0:v:0', '-frames:v', '1', '-an', '-sn', '-dn',
|
|
47
|
+
'-vf', `scale=w='min(${PREVIEW_LIMITS.edge},iw)':h='min(${PREVIEW_LIMITS.edge},ih)':force_original_aspect_ratio=decrease`,
|
|
48
|
+
'-threads', '1', '-c:v', 'mjpeg', '-q:v', '7', '-f', 'image2pipe', 'pipe:1',
|
|
49
|
+
], { stdio: ['ignore', 'pipe', 'ignore'] });
|
|
50
|
+
const chunks = [];
|
|
51
|
+
let size = 0, oversized = false;
|
|
52
|
+
const abort = () => child.kill('SIGKILL');
|
|
53
|
+
signal.addEventListener('abort', abort, { once: true });
|
|
54
|
+
if (signal.aborted)
|
|
55
|
+
abort();
|
|
56
|
+
child.stdout.on('data', (chunk) => {
|
|
57
|
+
size += chunk.length;
|
|
58
|
+
if (size > PREVIEW_LIMITS.outputBytes) {
|
|
59
|
+
oversized = true;
|
|
60
|
+
abort();
|
|
61
|
+
}
|
|
62
|
+
else
|
|
63
|
+
chunks.push(chunk);
|
|
64
|
+
});
|
|
65
|
+
child.on('error', () => { signal.removeEventListener('abort', abort); resolve(undefined); });
|
|
66
|
+
child.on('close', code => {
|
|
67
|
+
signal.removeEventListener('abort', abort);
|
|
68
|
+
resolve(code === 0 && !signal.aborted && !oversized ? Buffer.concat(chunks) : undefined);
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
finally {
|
|
73
|
+
await rm(directory, { recursive: true, force: true });
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
let inFlight = 0;
|
|
77
|
+
export const createThumbnail = async (source, signal) => {
|
|
78
|
+
// Extra previews are skipped during bursts; original delivery never queues behind a decoder.
|
|
79
|
+
if (inFlight >= 4)
|
|
80
|
+
return undefined;
|
|
81
|
+
inFlight++;
|
|
82
|
+
try {
|
|
83
|
+
const data = await downloadPreview(source.url, source.kind === 'image' ? PREVIEW_LIMITS.imageBytes : PREVIEW_LIMITS.videoBytes, signal);
|
|
84
|
+
return await decodePreview(data, source.kind, signal);
|
|
85
|
+
}
|
|
86
|
+
finally {
|
|
87
|
+
inFlight--;
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
function sourcesOf(result) {
|
|
91
|
+
const structured = result.structuredContent;
|
|
92
|
+
if (!structured || result.isError || structured.ok === false)
|
|
93
|
+
return [];
|
|
94
|
+
const tasks = Array.isArray(structured.tasks) ? structured.tasks : [structured];
|
|
95
|
+
const sources = [];
|
|
96
|
+
const seen = new Set();
|
|
97
|
+
for (const task of tasks) {
|
|
98
|
+
if (!task || typeof task !== 'object' || task.status !== 'completed' || !Array.isArray(task.results))
|
|
99
|
+
continue;
|
|
100
|
+
for (const link of task.results) {
|
|
101
|
+
if (!link || typeof link.url !== 'string' || !['image', 'video'].includes(link.kind) || seen.has(link.url))
|
|
102
|
+
continue;
|
|
103
|
+
seen.add(link.url);
|
|
104
|
+
sources.push({ taskId: task.task_id, url: link.url, kind: link.kind });
|
|
105
|
+
if (sources.length === PREVIEW_LIMITS.count)
|
|
106
|
+
return sources;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return sources;
|
|
110
|
+
}
|
|
111
|
+
/** Optional user-facing image blocks accompany, rather than replace, the original text and resource links. */
|
|
112
|
+
export async function addResultPreviews(result, thumbnailer = createThumbnail, parentSignal, remainingMs = PREVIEW_LIMITS.timeoutMs) {
|
|
113
|
+
const sources = sourcesOf(result);
|
|
114
|
+
if (!sources.length || parentSignal?.aborted || remainingMs <= 0)
|
|
115
|
+
return result;
|
|
116
|
+
const controller = new AbortController();
|
|
117
|
+
const abort = () => controller.abort();
|
|
118
|
+
parentSignal?.addEventListener('abort', abort, { once: true });
|
|
119
|
+
const timeout = setTimeout(abort, Math.min(PREVIEW_LIMITS.timeoutMs, remainingMs));
|
|
120
|
+
const images = [];
|
|
121
|
+
const metadata = [];
|
|
122
|
+
try {
|
|
123
|
+
for (const source of sources) {
|
|
124
|
+
if (controller.signal.aborted)
|
|
125
|
+
break;
|
|
126
|
+
try {
|
|
127
|
+
const data = await new Promise((resolve, reject) => {
|
|
128
|
+
const cancelled = () => resolve(undefined);
|
|
129
|
+
controller.signal.addEventListener('abort', cancelled, { once: true });
|
|
130
|
+
Promise.resolve().then(() => thumbnailer(source, controller.signal)).then(resolve, reject)
|
|
131
|
+
.finally(() => controller.signal.removeEventListener('abort', cancelled));
|
|
132
|
+
if (controller.signal.aborted)
|
|
133
|
+
cancelled();
|
|
134
|
+
});
|
|
135
|
+
if (!data || controller.signal.aborted || data.length > PREVIEW_LIMITS.outputBytes || previewFormat(data, 'image') !== 'jpeg_pipe')
|
|
136
|
+
continue;
|
|
137
|
+
const contentIndex = result.content.length + images.length;
|
|
138
|
+
images.push({ type: 'image', data: data.toString('base64'), mimeType: 'image/jpeg', annotations: { audience: ['user'], priority: 0.6 } });
|
|
139
|
+
metadata.push({ task_id: source.taskId, source_url: source.url, kind: source.kind === 'video' ? 'video_poster' : 'image_thumbnail', content_index: contentIndex, mime_type: 'image/jpeg' });
|
|
140
|
+
}
|
|
141
|
+
catch { /* A preview failure must not hide a successful paid generation or prompt a retry. */ }
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
finally {
|
|
145
|
+
clearTimeout(timeout);
|
|
146
|
+
parentSignal?.removeEventListener('abort', abort);
|
|
147
|
+
}
|
|
148
|
+
if (!images.length)
|
|
149
|
+
return result;
|
|
150
|
+
return {
|
|
151
|
+
...result, content: [...result.content, ...images],
|
|
152
|
+
structuredContent: { ...result.structuredContent, previews: metadata, preview_note: 'Small JPEG previews of the original results; video previews are still cover frames. Use the original links to view or download full-quality media. Preview display depends on the client.' },
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=media-preview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-preview.js","sourceRoot":"","sources":["../../../../../core/src/services/media-preview.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type MediaKind, type ModelParams } from '../data/model-params.js';
|
|
2
|
+
import { type PricedModel } from './pricing-client.js';
|
|
3
|
+
/** A model as the tools see it: documented parameters, published prices, or both. */
|
|
4
|
+
export interface CatalogEntry {
|
|
5
|
+
id: string;
|
|
6
|
+
kind: MediaKind;
|
|
7
|
+
spec?: ModelParams;
|
|
8
|
+
priced?: PricedModel;
|
|
9
|
+
}
|
|
10
|
+
export interface Catalog {
|
|
11
|
+
entries: CatalogEntry[];
|
|
12
|
+
/** Why prices are missing, when the pricing list could not be loaded. */
|
|
13
|
+
pricingWarning?: string;
|
|
14
|
+
}
|
|
15
|
+
/** Merges the bundled parameter index with the live price list; works without prices if the list is unreachable. */
|
|
16
|
+
export declare function loadCatalog(): Promise<Catalog>;
|
|
17
|
+
export declare function findEntry(catalog: Catalog, id: string): CatalogEntry | undefined;
|
|
18
|
+
export declare function suggestModels(catalog: Catalog, id: string, kind?: MediaKind): string[];
|
|
19
|
+
/** Looks a model up for one request; prices are best effort. */
|
|
20
|
+
export declare function resolveModel(id: string): Promise<{
|
|
21
|
+
catalog: Catalog;
|
|
22
|
+
entry?: CatalogEntry;
|
|
23
|
+
}>;
|
|
24
|
+
//# sourceMappingURL=model-catalog.d.ts.map
|