import type { TaskAttachment } from '@cutie-crypto/connector-core'; export interface ResolvedAttachmentImages { /** 成功下载并转 base64 data URL 的图片,按 attachments 原始顺序排列。 */ images: string[]; /** 下载失败/跳过的图片,退化为要追加进 message 的文本附注(一行一个)。 */ fallbackNotes: string[]; /** * 本次 resolveImageInputs 调用实际耗时(含并发等待)。调用方必须从传给 * callAgentGateway 的 timeout_ms 里扣除这部分,避免下载时间侵占 server 约定 * 的 task timeout 预算(M1:51 号 review 发现下载不计入 timeout 会导致 * server 已判超时但 connector 还占着 slot 干活)。 */ elapsedMs: number; } export interface ResolveImageInputsOptions { /** 整个 task 的 timeout_ms(server task.push.timeout_seconds × 1000),用于推导下载预算上限。 */ taskTimeoutMs: number; } interface Logger { warn: (...args: unknown[]) => void; } /** * 从 attachments 中过滤 image 类型,并发下载转 base64 data URL。 * * 任何失败(超时/非 2xx/超大小/网络错误)不抛错、不崩任务:记 warning(只带 * url host 与 name,不 log 完整带签名 URL)并把该图退化为一行文本附注。 * file/github 类附件 server 已拼为文本附注进 message,这里直接忽略。 * * M1 预算纪律: * - 下载总预算 = min(MAX_TOTAL_DOWNLOAD_BUDGET_MS, taskTimeoutMs / 3),预算 < 5s * 时直接放弃全部下载(不发起 fetch),把剩余全部 timeout 让给 gateway 调用。 * - 单张图片超时 = min(DEFAULT_PER_IMAGE_TIMEOUT_MS, 下载总预算)。 * - 全部下载并发执行(Promise.all),返回顺序与输入顺序一致。 * - 附件数超过 MAX_IMAGE_ATTACHMENTS 时,多出的直接退化为文本附注,不下载。 */ export declare function resolveImageInputs(attachments: TaskAttachment[] | undefined, logger: Logger | undefined, options: ResolveImageInputsOptions): Promise; export {};