开发文档

本地后端代码地图

BeefTV 是单用户、本地优先的桌面应用。项目、画布、素材和任务落到本地 SQLite 与工作区目录;模型生成仍可通过 Provider/Protocol 适配器访问外部 API。旧内置 Agent 已从产品运行面退场,其历史运行/偏好/记忆数据仍保留在本地数据库。

运行链路

模型服务设置由 web/src/pages/settings/model-service-editor.tsx 管理添加和编辑草稿;model-service-presets.ts 依据已启用的协议插件填写初始配置。model-connection-test.ts 通过正常后端生成任务验证结果。internal/workspace/provider_config.go 持有配置版本、保存冲突和文件读写,internal/localcrypto 统一工作区凭据加解密格式。

Wails / local dev
  -> internal/bootstrap        组合根、数据库、HTTP 生命周期
  -> internal/localapp        本地能力端口
  -> internal/{task,asset,project,workspace}
  -> internal/app             跨域编排与尚未拆分的核心实现
  -> internal/{generation,provider,protocol,outbound}
  -> external model APIs

主要目录

边界位置职责
组合根backend/internal/bootstrap打开本地数据、组合窄服务、启停 HTTP 与 worker
本地应用backend/internal/localapp定义 workspace/project/asset/task/generation/provider-config 端口(旧 Agent 空端口已移除)
工作区backend/internal/workspace本地身份、模型配置快照;ZIP 导入导出不在此包
任务域backend/internal/task本地任务命令、列表读模型、生命周期,以及本机 ffmpeg/转写/深度捕捉的准入
生成结果交付backend/internal/taskdelivery第一段把生成 dataURL/字节写入本地资源并改写 ResultJSON;第二段在任务成功后物化素材。不发起新的上游生成。远端产物经 outbound.DownloadResumable 断点续传下载:无总超时,只有头部与空闲超时,半成品在 <data>/cache/artifact-downloads 下按身份复用
生成结果绑定backend/internal/taskbinding将已交付产物绑定到原先指定的画布节点;多张图片按创建前记录的 outputNodeIds 与输出序号逐项核对,不新建上游任务
生成域backend/internal/generation统一生成输入、引用、能力、registry 协议调度和失败归类
Seedream 图片结果backend/internal/generation/image_seedream.go专用协议请求 URL,保留原来的组图、图层和透明 PNG 参数;内置渠道可经 CF 转存到 COS。返回的 URL 下载成原始图片后交给本地资源保存,仍接受旧 Base64 响应。媒体下载只在同 origin 携带供应商请求头,跨 origin 重定向后清除且不恢复;Agent Plan 插件与通用图片协议不受此默认值影响
视频结果取回backend/internal/generation/video_delivery.go所有视频入口共用下载重试、10 秒无进展检测和原任务结果刷新;内置渠道取备用存储,自接供应商只查询自己的原任务。认证由所选协议提供,跨域媒体请求清除供应商凭据
供应商适配backend/internal/provider, protocol, outbound外部模型 API、自定义渠道和插件协议
模型目录backend/internal/modelcatalog能力合同、渠道目录校验/解析/合并与内置渠道/WhatsToken overlay;出站 HTTP 仍走 outbound
协议插件backend/internal/pluginsregistry、安装/启用和渠道设置用的 provider 能力目录;live 快照按 Runtime 隔离
Seedance 参考素材预上传backend/internal/app(素材预上传实现)仅内置渠道的 Seedance:本机后端把参考图片/视频/音频换成短期 HTTPS 链接后再提交 /v1/videos;本机文件在上传完成前保持本地引用
数据backend/internal/database, repositorySQLite schema、迁移和持久化
支持诊断backend/internal/diagnostics、supporttrace、assistantdiagnosticsschema 3 脱敏 ZIP、各来源完整性、本地 OTel 记录、只读官方助手元数据及离线阶段分析;不参与生成、重试或恢复决策
剪辑语义计划backend/internal/editing版本化时间线渲染计划:选择、顺序、空隙、裁剪、音量、字幕与输出宽高/帧率/采样率。不依赖 internal/app,不接受本地路径或 ffmpeg 参数
视频预览与工具backend/internal/playback、backend/internal/mediatools按需 H.264 预览、单任务转码、用户预览缓存清理;播放和剪辑共用随包 FFmpeg 解析,显式路径优先于随包工具,最后查 PATH
HTTPbackend/internal/handler本地 /api 合同、输入限制和响应封装
企业连接backend/internal(内置连接包)设备授权、本机密钥和连接状态
本机 MCPbackend/cmd/beeftvbeeftv mcp serve 使用官方 MCP SDK,经 /api/ops 访问本机工作区;底层业务接口默认经 business.list / business.call 两个入口调用(business.go),媒体读取结果按 MCP 图片、音频内容返回(mcp_content.go)
远程 Skill 市场backend/internal/skillhub、skillhubclibeeftv skills 直接访问统一市场,不发现或连接本地运行时;共享版本清单、完整性校验与专用投稿授权
内置 Skill 接入backend/internal/skills/market*.go、operations/skill*.go、assistantturns/skill_context.goGo 管理本地安装、确切版本、活动上下文和投稿确认;模型只获得查询、草稿和准备操作
桌面更新发布backend/cmd/update-release生成更新密钥、打包 zip、签署 desktop-update.json
前端web/srcReact 画布、项目、素材、模型配置与插件 UI

硬边界

  • 不提供登录、注册、计费、支付、公开分享或云存储路由。
  • 内置渠道密钥保存在本机加密连接存储中;其他手动渠道密钥仍在本地模型配置中。密钥不进入画布快照或日志响应。
  • 外部 API 是生成能力,不是 SaaS 数据面;不得在“本地化清理”中删除 Provider、Protocol、自定义渠道或插件扩展点。
  • worker 并发策略由任务运行时管理,架构整理不得顺带改变其行为。

HTTP 稳定合同见 HTTP API 和 backend/internal/handler/openapi.yaml。

本页内容