mirror of
https://github.com/hansjone/oclaw.git
synced 2026-10-09 04:40:45 +08:00
feat(video): DashScope video specialist with correct i2v request bodies
- Add video_generation_client: async video-synthesis, t2v vs i2v (Wan 2.7 input.media first_frame vs legacy img_url). - Coerce *-t2v* to *-i2v* when first frame present; AIA_VIDEO_I2V_INPUT_STYLE / I2V_MODEL overrides. - Gateway/direct_loop early return for video specialist; workspace video + factory allowlist. - Normalize WS and admin chat attachments (image_ref parity); mp4 attachment store roundtrip tests. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
398d85ba06
commit
4335040a27
21 changed files with 1152 additions and 56 deletions
|
|
@ -168,6 +168,7 @@ const I18N = {
|
|||
"chat.specialistGeneralistShort": "通用",
|
||||
"chat.specialistOpsShort": "运维",
|
||||
"chat.specialistImageShort": "图像",
|
||||
"chat.specialistVideoShort": "视频",
|
||||
"chat.specialistMemoryShort": "记忆",
|
||||
"chat.specialistManagerSelfShort": "全能者",
|
||||
"chat.attachment.download": "下载",
|
||||
|
|
@ -344,6 +345,7 @@ const I18N = {
|
|||
"chat.specialistGeneralistShort": "Generalist",
|
||||
"chat.specialistOpsShort": "Ops",
|
||||
"chat.specialistImageShort": "Image",
|
||||
"chat.specialistVideoShort": "Video",
|
||||
"chat.specialistMemoryShort": "Memory",
|
||||
"chat.specialistManagerSelfShort": "Manager",
|
||||
"chat.attachment.download": "Download",
|
||||
|
|
@ -649,6 +651,7 @@ function specialistLabel(specialist) {
|
|||
if (s === "manager_self") return t("chat.specialistManagerSelfShort");
|
||||
if (s === "ops") return t("chat.specialistOpsShort");
|
||||
if (s === "image") return t("chat.specialistImageShort");
|
||||
if (s === "video") return t("chat.specialistVideoShort");
|
||||
if (s === "memory") return t("chat.specialistMemoryShort");
|
||||
return t("chat.specialistGeneralistShort");
|
||||
}
|
||||
|
|
@ -2190,6 +2193,39 @@ async function renderAttachmentsEl(raw) {
|
|||
text: t("chat.attachment.download"),
|
||||
}),
|
||||
);
|
||||
if (String(typ || "") === "video_ref" && mime.toLowerCase().startsWith("video/")) {
|
||||
card.appendChild(
|
||||
el("video", {
|
||||
class: "chat-att-video",
|
||||
controls: true,
|
||||
preload: "metadata",
|
||||
style: "max-width:100%;max-height:420px;margin-top:8px;border-radius:8px;",
|
||||
src: url,
|
||||
}),
|
||||
);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
const remote = String(att.url || "").trim();
|
||||
if (remote && String(typ || "") === "video_ref" && mime.toLowerCase().startsWith("video/")) {
|
||||
card.appendChild(
|
||||
el("video", {
|
||||
class: "chat-att-video",
|
||||
controls: true,
|
||||
preload: "metadata",
|
||||
style: "max-width:100%;max-height:420px;margin-top:8px;border-radius:8px;",
|
||||
src: remote,
|
||||
}),
|
||||
);
|
||||
card.appendChild(
|
||||
el("a", {
|
||||
class: "chat-att-ref__link",
|
||||
href: remote,
|
||||
target: "_blank",
|
||||
rel: "noopener noreferrer",
|
||||
text: t("chat.attachment.download"),
|
||||
}),
|
||||
);
|
||||
}
|
||||
}
|
||||
const canPreviewText = !!aid && (String(typ || "") === "text_ref" || isTextLikeMime(mime));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue