feat(canvas): 云端 Agent - 完成策略分层、节点能力注册与可解释审批改造

This commit is contained in:
ddCat committed 2026-09-14 17:58:21 +08:00
1 parent 4b0e9d8965
commit 01486872c4
65 files changed
+5347 -918

No files matched your search

+12 -9
View File
@@ -258,17 +258,24 @@ for (const [id, name, vendor, baseUrl] of [
add({
id: "openai-images", providerId: "openai-image", name: "OpenAI Images", vendor: "OpenAI", capability: "image",
baseUrl: "https://api.openai.com", auth: bearer, params: imageParams,
notes: "无参考图走 JSON generations;有参考图或蒙版走 multipart edits。quality 的 1k/2k/4k 映射为 OpenAI low/medium/high。",
baseUrl: "https://api.openai.com", auth: bearer, params: imageParams, requiresPublicMediaUrls: true,
notes: "无参考图走 JSON generations;有参考图或蒙版走 JSON edits,并按官方 images 数组传入多张 image_url。quality 的 1k/2k/4k 映射为 OpenAI low/medium/high。",
create: {
method: "POST",
path: "/v1/images/generations",
pathTemplate: conditional(gt(len(ref("request.images")), 0), "/v1/images/edits", "/v1/images/generations"),
contentType: "application/json",
contentTypeTemplate: conditional(gt(len(ref("request.images")), 0), "multipart/form-data", "application/json"),
body: {
model: ref("request.model"),
prompt: ref("request.prompt"),
images: omit(conditional(gt(len(ref("request.images")), 0), map(
filter(sorted(ref("request.images")), "media", ne(ref("media.role"), "mask")),
"media",
{ image_url: ref("media.value") }
))),
mask: omit(conditional(gt(len(filter(ref("request.images"), "media", eq(ref("media.role"), "mask"))), 0), {
image_url: first(map(filter(sorted(ref("request.images")), "media", eq(ref("media.role"), "mask")), "media", ref("media.value")))
})),
n: omit(conditional(gt(ref("request.imageCount"), 0), ref("request.imageCount"), 1)),
size: omit(conditional({ $in: [lower(trim(ref("request.aspectRatio"))), ["", "auto"]] }, null, ref("request.aspectRatio"))),
quality: omit({
@@ -289,14 +296,10 @@ add({
output_format: omit(coalesce(ref("request.providerOptions.openai-image.output_format"), "png")),
output_compression: omit(ref("request.providerOptions.openai-image.output_compression")),
moderation: omit(ref("request.providerOptions.openai-image.moderation")),
response_format: omit(coalesce(ref("request.providerOptions.openai-image.response_format"), "b64_json")),
response_format: omit(ref("request.providerOptions.openai-image.response_format")),
style: omit(ref("request.providerOptions.openai-image.style")),
user: omit(ref("request.providerOptions.openai-image.user"))
},
files: [
{ name: "image", source: filter(ref("request.images"), "media", ne(ref("media.role"), "mask")), filename: "source.png" },
{ name: "mask", source: filter(ref("request.images"), "media", eq(ref("media.role"), "mask")), filename: "mask.png" }
]
}
},
response: {
status: "succeeded",