From 2ed4acb564674a1ee232940877a94d26b8c28e95 Mon Sep 17 00:00:00 2001 From: ddCat <2695092045@qq.com> Date: Tue, 28 Jul 2026 20:27:09 +0800 Subject: [PATCH] =?UTF-8?q?chore(release):=20=E7=89=88=E6=9C=AC=E5=8F=91?= =?UTF-8?q?=E5=B8=83=20-=20publish=20v1.0.10?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 6 +++++ VERSION | 2 +- backend/internal/service/analytics.go | 2 +- .../components/canvas/canvas-script-node.tsx | 24 +++++++++++++++++-- web/src/pages/canvas/project.tsx | 1 + 5 files changed, 31 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ae468da0f..978be42fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ ## Unreleased +## v1.0.10 + +- 运维后台请求明细按真实调用聚合视频轮询,补充用户账号、状态、错误、耗时、计费和 Token,并仅在详情中展示脱敏后的请求与响应报文。 +- 修复请求明细用户信息装配函数返回值不匹配导致的后端构建失败。 +- 分镜脚本 Composer 支持选择并保存文本模型,首次生成和失败重试均使用节点所选模型。 + ## v1.0.9 - 修复 Seedance `/videos` 请求遗漏声音生成参数的问题,启用声音时生成结果会包含上游音轨。 diff --git a/VERSION b/VERSION index e04e39c60..62ffa11b2 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v1.0.9 +v1.0.10 diff --git a/backend/internal/service/analytics.go b/backend/internal/service/analytics.go index 6940ff982..ad08dd35f 100644 --- a/backend/internal/service/analytics.go +++ b/backend/internal/service/analytics.go @@ -214,7 +214,7 @@ func (s *Service) decorateAPICallLogs(logs []model.ApiCallLog) error { // 历史日志允许读取逻辑删除渠道的名称,但不读取或返回渠道密钥。 channels, err := s.repo.HistoricalSystemChannelReferences() if err != nil { - return nil, err + return err } channelNames := make(map[string]string, len(channels)) for _, channel := range channels { diff --git a/web/src/components/canvas/canvas-script-node.tsx b/web/src/components/canvas/canvas-script-node.tsx index 53f96bfef..6bd0154f7 100644 --- a/web/src/components/canvas/canvas-script-node.tsx +++ b/web/src/components/canvas/canvas-script-node.tsx @@ -4,10 +4,14 @@ import type { ColumnsType } from "antd/es/table"; import { ChevronDown, ChevronUp, Clapperboard, Copy, Expand, Film, Grid3X3, Image as ImageIcon, ListTree, Merge, Minus, Plus, RefreshCw, Send, Square, Trash2, Video, X } from "lucide-react"; import { CanvasResourceMentionTextarea } from "@/components/canvas/canvas-resource-mention-textarea"; +import { ModelPicker } from "@/components/model-picker"; +import { buildGenerationConfig } from "@/lib/canvas/canvas-project-generation"; import type { CanvasResourceReference } from "@/lib/canvas/canvas-resource-references"; import { pipelineStatusLabel, type CanvasStoryboardPipelineProgress, type StoryboardPipelineStage } from "@/lib/canvas/canvas-storyboard-progress"; import { isContentModerationError } from "@/lib/generation-error"; +import { navigateToSettings } from "@/lib/settings-navigation"; import { canvasThemes } from "@/lib/canvas-theme"; +import { useEffectiveConfig } from "@/stores/use-config-store"; import { useThemeStore } from "@/stores/use-theme-store"; import type { CanvasGenerationBatch, CanvasGenerationBatchItem, CanvasGenerationBatchItemStatus, CanvasNodeData, CanvasNodeStatus, CanvasWorkspaceMode, StoryboardColumn, StoryboardRow, StoryboardShotCount, StoryboardShotDuration } from "@/types/canvas"; @@ -51,7 +55,7 @@ const columnOptions: Array<{ label: string; value: StoryboardColumn }> = [ { label: "负面要求", value: "negativePrompt" }, ]; -export function CanvasScriptNodeContent({ node, batch, pipeline, scale, mentionReferences, onOpen, onCreateImageNodes, onCreateVideoNodes, onGenerateImages, onGenerateVideos, onMergeVideos, onCreateActionBoards, onRetryBatch, onRetryBatchItem, onStopBatch, onCancelBatchItem, onAddRow, onRemoveRow, onUpdateRow, onPromptChange, onGenerateScript, onShotDurationChange, onShotCountChange, onComposerHeightChange, onConnectStart, onScrollTopChange, workspaceMode = "professional" }: { +export function CanvasScriptNodeContent({ node, batch, pipeline, scale, mentionReferences, onOpen, onCreateImageNodes, onCreateVideoNodes, onGenerateImages, onGenerateVideos, onMergeVideos, onCreateActionBoards, onRetryBatch, onRetryBatchItem, onStopBatch, onCancelBatchItem, onAddRow, onRemoveRow, onUpdateRow, onPromptChange, onGenerateScript, onModelChange, onShotDurationChange, onShotCountChange, onComposerHeightChange, onConnectStart, onScrollTopChange, workspaceMode = "professional" }: { node: CanvasNodeData; batch?: CanvasGenerationBatch; pipeline: CanvasStoryboardPipelineProgress; @@ -73,6 +77,7 @@ export function CanvasScriptNodeContent({ node, batch, pipeline, scale, mentionR onUpdateRow: (rowId: string, patch: Partial) => void; onPromptChange: (prompt: string) => void; onGenerateScript: (prompt: string) => void; + onModelChange: (model: string) => void; onShotDurationChange: (duration: StoryboardShotDuration) => void; onShotCountChange: (count: StoryboardShotCount) => void; onComposerHeightChange: (height: number) => void; @@ -81,6 +86,8 @@ export function CanvasScriptNodeContent({ node, batch, pipeline, scale, mentionR workspaceMode?: CanvasWorkspaceMode; }) { const theme = canvasThemes[useThemeStore((state) => state.theme)]; + const effectiveConfig = useEffectiveConfig(); + const generationConfig = buildGenerationConfig(effectiveConfig, node, "text"); const simpleMode = workspaceMode === "simple"; const rows = node.metadata?.storyboard?.rows || []; const [prompt, setPrompt] = useState(node.metadata?.composerContent || ""); @@ -203,7 +210,20 @@ export function CanvasScriptNodeContent({ node, batch, pipeline, scale, mentionR onWheel={(event) => event.stopPropagation()} />
event.stopPropagation()} onPointerDown={(event) => event.stopPropagation()}> - {simpleMode ? 自动拆分镜头 · 默认时长 : +
+ navigateToSettings({ continueCreation: true })} + /> +
+ {simpleMode ? 自动拆分 · 默认时长 : className="min-w-32" size="small" value={shotCount} diff --git a/web/src/pages/canvas/project.tsx b/web/src/pages/canvas/project.tsx index ce369f192..01e6058c7 100644 --- a/web/src/pages/canvas/project.tsx +++ b/web/src/pages/canvas/project.tsx @@ -1253,6 +1253,7 @@ function InfiniteCanvasPage() { onUpdateRow={(rowId, patch) => updateScriptRow(contentNode.id, rowId, patch)} onPromptChange={(composerContent) => handleConfigNodeChange(contentNode.id, { composerContent })} onGenerateScript={(prompt) => void generateScriptRows(contentNode.id, prompt)} + onModelChange={(model) => handleConfigNodeChange(contentNode.id, { model })} onShotDurationChange={(duration: StoryboardShotDuration) => handleConfigNodeChange(contentNode.id, { storyboardShotDuration: duration })} onShotCountChange={(count: StoryboardShotCount) => handleConfigNodeChange(contentNode.id, { storyboardShotCount: count })} workspaceMode={workspaceMode}