dsh-film 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  在 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) 和 VibeDev 里做片:聊天右侧的侧栏多出三个标签——**剧本、分镜画布、导演台**。左边和 Agent 聊,右边看和改成果。项目是工作区里 `film/` 下的普通文件;Agent 用专门的影视工具改剧本和分镜、调度导演台(见下),和右边看到的是同一份。
4
4
 
5
- > 0.2 仍属预览。分镜画布(含导演台)用的是 VibeDev 的原版前端,跑在插件自己的接口上;剧本标签是按 DSH 界面重写的,文件格式与 VibeDev Studio 的编剧台相同。图片、视频的生成由可选的 [dsh-media](https://github.com/CrisLIUning/dsh-media) 插件负责。
5
+ > 0.2 仍属预览。分镜画布(含导演台)用的是 VibeDev 的原版前端,跑在插件自己的接口上;剧本标签是按 DSH 界面重写的,文件格式与 VibeDev Studio 的编剧台相同。图片、视频的生成由可选的「VibeDev 账号与模型」插件 [@vibedev-si/dsh-vibedev](https://github.com/VibeDev-Si/dsh-vibedev)(原 dsh-media)负责。
6
6
 
7
7
  A film workbench for DeepSeek Harness and VibeDev: three right-sidebar tabs — script, storyboard and director desk — working on one film per workspace, kept as plain files under `film/`. In this 0.2 preview, the storyboard (with the director desk) is VibeDev's original front end running on the plugin's own API, and the script tab is a DSH-native rewrite. The agent works on the same film through its own film tools.
8
8
 
@@ -37,7 +37,7 @@ A film workbench for DeepSeek Harness and VibeDev: three right-sidebar tabs —
37
37
  **从 GitHub Release 安装**:插件页的“包名或地址”和上面的命令也接受 Release 里的 `.tgz` 直链,例如
38
38
 
39
39
  ```
40
- https://github.com/CrisLIUning/dsh-film/releases/download/v0.3.0/dsh-film-0.3.0.tgz
40
+ https://github.com/CrisLIUning/dsh-film/releases/download/v0.3.1/dsh-film-0.3.1.tgz
41
41
  ```
42
42
 
43
43
  直链不经过安装源,需要本机能直接访问 GitHub(或配好代理)。包约 3 MB。网速很慢时仍可能超过 pnpm 默认的 60 秒下载时限而失败:这时改为按包名从中国大陆镜像源安装;也可以把时限调长:pnpm 11(DeepSeek Harness 和 VibeDev 桌面版自带的就是它)不再从 `~/.npmrc` 读取这个设置,要在 pnpm 的全局配置 `config.yaml` 里加一行 `fetchTimeout: 600000`(Windows:`%LOCALAPPDATA%\pnpm\config\config.yaml`;macOS:`~/Library/Preferences/pnpm/config.yaml`;Linux:`~/.config/pnpm/config.yaml`),或设环境变量 `pnpm_config_fetch_timeout=600000`;pnpm 10 及更早的版本则在 `~/.npmrc` 里加 `fetch-timeout=600000`。
@@ -46,7 +46,7 @@ https://github.com/CrisLIUning/dsh-film/releases/download/v0.3.0/dsh-film-0.3.0.
46
46
 
47
47
  **不能从 Git 仓库安装**:不要在插件页填仓库地址 `https://github.com/CrisLIUning/dsh-film`,也不要对它运行 `dsh plugin add`。`lib/`、`client/` 和 `apps/`(分镜画布和导演台的前端)都是构建产物,不在 git 里,从仓库安装会失败(不会留下装了却用不了的插件)。
48
48
 
49
- **dsh-media 是可选的**:只有在分镜画布里生成图片和视频才需要另装 [dsh-media](https://github.com/CrisLIUning/dsh-media)(包名 `dsh-media`,装法相同;走 VibeDev 网关,按用量从 VibeDev 余额扣费)。不装也能写剧本、排分镜和调度导演台。分镜画布给每个视频模型列出的模式与 dsh-media 实际接受的一致:声明不收首帧的线路(Seedance 2.5(VibeDev)、2.5 30s(VibeDev)、2.5 480p 30s(山海)和三条 lec 线路;Seedance 2.5 特价按次收首帧,仍有图生视频)不显示“图生视频”,接一张图时改走“全能参考”,图作为参考图发送;以前保存成“图生视频”的节点在这些线路上也按全能参考生成。
49
+ **「VibeDev 账号与模型」插件是可选的**:只有在分镜画布里生成图片和视频才需要另装 [@vibedev-si/dsh-vibedev](https://github.com/VibeDev-Si/dsh-vibedev)(原 dsh-media,包名 `@vibedev-si/dsh-vibedev`,装法相同;在侧边栏底部或「设置 → VibeDev 账号」登录 VibeDev,走 VibeDev 网关,按用量从 VibeDev 余额扣费)。不装也能写剧本、排分镜和调度导演台;从 VibeDev 插件中心安装影视工作台时会把它一并装上。分镜画布给每个视频模型列出的模式与该插件实际接受的一致:声明不收首帧的线路(Seedance 2.5(VibeDev)、2.5 30s(VibeDev)、2.5 480p 30s(山海)和三条 lec 线路;Seedance 2.5 特价按次收首帧,仍有图生视频)不显示“图生视频”,接一张图时改走“全能参考”,图作为参考图发送;以前保存成“图生视频”的节点在这些线路上也按全能参考生成。
50
50
 
51
51
  装好后打开任意会话的右侧侧栏,在“开始”页点“剧本”等入口。会话需要有工作区。第一次打开任一影视标签时,插件自动在工作区里建好影片(片名取工作区文件夹名,画幅 16:9,连同一张空白分镜画布),不用填表。片名和画幅在三个标签共用的标题栏里改:点片名直接改(最多 80 字,回车或点别处保存,Esc 取消);画幅是这部片子的画面比例,分镜画布和导演台都按它来,菜单里有 16:9、9:16、1:1、4:5、21:9、2.39:1。0.1.0 建的 4:3 影片照旧保留并显示为 4:3。
52
52
 
@@ -56,13 +56,19 @@ Requires DeepSeek Harness 0.2.x or VibeDev (VibeDev Next), which is built on it.
56
56
 
57
57
  - **Plugin page** (recommended): Plugins → Add plugin → install a third-party plugin by package name, enter `dsh-film`, pick the npm registry or the China mirror under the install source, and install.
58
58
  - **Command line**: for the DeepSeek Harness desktop app, quit it fully, then run `dsh plugin --profile desktop add dsh-film` (the `dsh` command is installed from the app menu). VibeDev Next's command is `vibedev-app` (app menu → Manage vibedev-app Command…): quit the app fully, then run `vibedev-app plugin --profile desktop add dsh-film`; it keeps its data in `~/.vibedev-app`, which `dsh` does not reach. With the npm `dsh` CLI, run `dsh plugin add dsh-film`.
59
- - **GitHub Release**: the plugin page and the commands also take the release asset URL, e.g. `https://github.com/CrisLIUning/dsh-film/releases/download/v0.3.0/dsh-film-0.3.0.tgz`. It is fetched straight from GitHub, not through a registry. The file is about 3 MB; if a very slow connection still hits pnpm's default 60-second fetch timeout, install by name from the mirror instead, or raise the timeout — pnpm 11 (the one the desktop apps ship) no longer reads it from `~/.npmrc`, so add `fetchTimeout: 600000` to pnpm's global `config.yaml` (Windows `%LOCALAPPDATA%\pnpm\config\config.yaml`, macOS `~/Library/Preferences/pnpm/config.yaml`, Linux `~/.config/pnpm/config.yaml`) or set `pnpm_config_fetch_timeout=600000`; pnpm 10 and earlier take `fetch-timeout=600000` in `~/.npmrc`.
59
+ - **GitHub Release**: the plugin page and the commands also take the release asset URL, e.g. `https://github.com/CrisLIUning/dsh-film/releases/download/v0.3.1/dsh-film-0.3.1.tgz`. It is fetched straight from GitHub, not through a registry. The file is about 3 MB; if a very slow connection still hits pnpm's default 60-second fetch timeout, install by name from the mirror instead, or raise the timeout — pnpm 11 (the one the desktop apps ship) no longer reads it from `~/.npmrc`, so add `fetchTimeout: 600000` to pnpm's global `config.yaml` (Windows `%LOCALAPPDATA%\pnpm\config\config.yaml`, macOS `~/Library/Preferences/pnpm/config.yaml`, Linux `~/.config/pnpm/config.yaml`) or set `pnpm_config_fetch_timeout=600000`; pnpm 10 and earlier take `fetch-timeout=600000` in `~/.npmrc`.
60
60
  - **A fresh release**: pnpm 11 installs only versions published at least a day ago (`minimumReleaseAge`). The very first version is not held back: installing by name a package with no earlier version installs it and adds it to `minimumReleaseAgeExclude`. After each later release, an install by name gets the previous version for a day; to get the new one at once, install the exact version (`dsh-film@<version>`) or use the release URL.
61
61
  - **Not from the git repository**: `lib/`, `client/` and `apps/` (the storyboard and director desk front ends) are build outputs that are not in git, so installing from the repository URL fails (it does not leave a plugin that cannot work).
62
- - **dsh-media is optional**: only image and video generation on the storyboard needs [dsh-media](https://github.com/CrisLIUning/dsh-media). Everything else works without it. The storyboard lists for each video model the modes dsh-media accepts: lanes that declare no first frame (Seedance 2.5 (VibeDev), 2.5 30s (VibeDev), 2.5 480p 30s (山海) and the three lec lanes; Seedance 2.5 特价按次 takes a first frame and keeps image-to-video) offer no image-to-video, and a single image goes as a 全能参考 (multi-reference) reference image instead, also for nodes saved as image-to-video earlier.
62
+ - **The VibeDev account & models plugin is optional**: only image and video generation on the storyboard needs [@vibedev-si/dsh-vibedev](https://github.com/VibeDev-Si/dsh-vibedev) (formerly dsh-media; sign in to VibeDev at the bottom of the sidebar or in Settings → VibeDev account). Everything else works without it; installing the workbench from the VibeDev Plugin Center installs it too. The storyboard lists for each video model the modes that plugin accepts: lanes that declare no first frame (Seedance 2.5 (VibeDev), 2.5 30s (VibeDev), 2.5 480p 30s (山海) and the three lec lanes; Seedance 2.5 特价按次 takes a first frame and keeps image-to-video) offer no image-to-video, and a single image goes as a 全能参考 (multi-reference) reference image instead, also for nodes saved as image-to-video earlier.
63
63
 
64
64
  Then open the right sidebar of a session that has a workspace and pick a part on its start page. The first time a film tab opens, the plugin creates the film — named after the workspace folder, 16:9, with an empty storyboard — with no form to fill in. Rename it and pick its frame in the header the three tabs share: click the title to edit it (up to 80 characters; Enter or clicking away saves, Esc cancels); the frame is the film's aspect ratio, which the storyboard canvas and the director desk use (16:9, 9:16, 1:1, 4:5, 21:9, 2.39:1). A 4:3 film made by 0.1.0 keeps and shows its frame. To upgrade, install the new version over the old one (no need to uninstall first), then restart DeepSeek Harness / VibeDev: until you do, the workbench shows a banner asking for the restart and does not open the storyboard or the director desk. Your film stays in the workspace's `film/` folder either way.
65
65
 
66
+ ### 0.3.1 版本说明 · 0.3.1 release note
67
+
68
+ - **配合改名后的「VibeDev 账号与模型」插件**([@vibedev-si/dsh-vibedev](https://github.com/VibeDev-Si/dsh-vibedev),原 dsh-media):未登录时的提示改为指向侧边栏底部「登录 VibeDev」和「设置 → VibeDev 账号」(dsh-media 的设置页里并没有登录入口);缺少插件时的提示写明新的插件名和包名;Agent 工具说明里的 dsh-media 改称 VibeDev 插件。功能没有变化:分镜画布照旧通过 `vibedevMedia` 服务生成,新旧两个插件都提供这个服务。
69
+
70
+ - **For the renamed VibeDev Account & Models plugin** ([@vibedev-si/dsh-vibedev](https://github.com/VibeDev-Si/dsh-vibedev), formerly dsh-media): the signed-out hint now points to "Sign in to VibeDev" at the bottom of the sidebar and to Settings → VibeDev account (dsh-media's settings page had no sign-in); the missing-plugin hint names the new plugin and package; the agent tool descriptions call it the VibeDev plugin. Nothing else changes: the storyboard still generates through the `vibedevMedia` service, which both the old and the new plugin provide.
71
+
66
72
  ### 0.3.0 版本说明 · 0.3.0 release note
67
73
 
68
74
  - **视频节点上直接剪**:裁剪条(入点出点、磁吸、0.1 秒微调)、在播放头切开、“剪辑”面板一次截多段或多点截帧、选中多个视频拼接(编码一致时插件无损拼接,否则在页面里重新编码)、分离音频、音频截取。生成、下载、存素材都自动用裁剪后的片段;参考视频超出所选模型的限制时,提示“截取前 N 秒 / 选择片段”,不会自动提交。
@@ -107,7 +113,7 @@ Then open the right sidebar of a session that has a workspace and pick a part on
107
113
  film/canvas/media/ 生成、导入的素材
108
114
  film/canvas/models/ 从工作区导入的模型(GLB、FBX、OBJ)
109
115
  film/canvas/imports.json 从工作区导入过的文件(没改过的不再列为可导入)
110
- media/ dsh-media 生成的素材;和工作区里其他素材一样,用到时放进 film/
116
+ media/ VibeDev 插件(dsh-vibedev)生成的素材;和工作区里其他素材一样,用到时放进 film/
111
117
  ```
112
118
 
113
119
  一个工作区放一部片。已有的 `film/film.json` 不会被覆盖;建影片时已有的画布(哪怕读不出来)不会被覆盖,工作区里原有的画布会沿用它的 id。删除画布留下的记录只挡住被删的那块画布:删掉影片后再建的新片有新 id,照常带上自己的空白画布。工作区在隐藏文件夹(名字以 `.` 开头)或 `.ssh`、`.aws` 等凭据文件夹里时不建片,也不播放、不导入那里的素材。
@@ -169,7 +175,7 @@ The agent can do the same with the cutting group (see below): `video_clip` sets
169
175
  - **剧本** `story_query` `story_asset_bindings` `story_create` `story_apply_ops` `story_history` `story_checkpoint` `story_restore` `story_revert`:和剧本标签用同一套接口,按保存的版本号写入(先 dryRun 预览),每次写入都有版本和操作记录,可以单独撤回某次操作。`story_asset_bindings` 给人物、地点、道具和镜头绑定参考图(只认选中的那份字节,五种解析结果分开报告),工作区里 `film/` 以外的图片先放进影片再绑定。
170
176
  - **导入导出** `story_import` `story_export`:先预览再导入为新副本(从不覆盖);导出完整 Markdown、仅正文,或连同参考图打成素材包存到 `film/story-exports/`。
171
177
  - **剧本到分镜** `story_source` `story_handoff` `story_adopt` `story_impact` `story_director_links`:把保存的人物、场景、道具、场次或镜头读成制作素材,送到画布成为独立的剧本来源卡(可同时准备一个连好线、只待确认提示词的图片节点,不会自动生成);按节点保存的字段显式采用描述或参考图(参考图另存一份字节快照);剧本改动后查看影响了哪些采用、产物和导演镜头;给导演台已保存的机位记下剧本来源。分镜标签不开也能用。
172
- - **分镜画布** `canvas_list_clients` `canvas_get_state` `canvas_get_selection` `canvas_read_node` `canvas_get_generation_status` `canvas_get_document` `canvas_create_text_nodes` `canvas_create_generation_flow` `canvas_generation_options` `canvas_set_generation_options` `canvas_run_generation` `canvas_connect_nodes` `canvas_delete_nodes` `canvas_apply_ops` `canvas_attach_media`:分镜标签开着时,改动交给页面执行,用户看着它出现,也能撤销;没开时,改动写进保存的画布,下次打开就在。运行生成要分镜页开着。`canvas_attach_media` 把已经生成好的文件(如 dsh-media 存在 `media/` 的图片,或工作区里别处的图片、视频、音频)放进指定节点,不重复生成。`canvas_generation_options` 和 `canvas_set_generation_options` 列出、设置或清除节点的运镜、相机、提示词技能(含技能节点)、首尾帧和预设(见上文“运镜与相机”“提示词技能与生成预设”),只改节点设置,不发起生成。`canvas_get_generation_status` 还带上页面记在节点上的原因(`error`):批量或 Agent 发起的生成在发出请求前被拒(如参考视频超限、提示词超长),或生成配置节点的输出全部失败;`canvas_get_document` 的节点摘要带上运镜、相机、技能、首尾帧和技能节点的技能。
178
+ - **分镜画布** `canvas_list_clients` `canvas_get_state` `canvas_get_selection` `canvas_read_node` `canvas_get_generation_status` `canvas_get_document` `canvas_create_text_nodes` `canvas_create_generation_flow` `canvas_generation_options` `canvas_set_generation_options` `canvas_run_generation` `canvas_connect_nodes` `canvas_delete_nodes` `canvas_apply_ops` `canvas_attach_media`:分镜标签开着时,改动交给页面执行,用户看着它出现,也能撤销;没开时,改动写进保存的画布,下次打开就在。运行生成要分镜页开着。`canvas_attach_media` 把已经生成好的文件(如 VibeDev 插件存在 `media/` 的图片,或工作区里别处的图片、视频、音频)放进指定节点,不重复生成。`canvas_generation_options` 和 `canvas_set_generation_options` 列出、设置或清除节点的运镜、相机、提示词技能(含技能节点)、首尾帧和预设(见上文“运镜与相机”“提示词技能与生成预设”),只改节点设置,不发起生成。`canvas_get_generation_status` 还带上页面记在节点上的原因(`error`):批量或 Agent 发起的生成在发出请求前被拒(如参考视频超限、提示词超长),或生成配置节点的输出全部失败;`canvas_get_document` 的节点摘要带上运镜、相机、技能、首尾帧和技能节点的技能。
173
179
  - **影片任务** `media_get_task` `media_cancel_task`:读取或取消分镜画布的生成任务(`canvas_get_generation_status` 在 `outputs[].task` 里给出的任务号),以及剪切组发起的出片、拼接和分离音频(完成后 `file.landedNodeId` 是落到画板上的新节点,`file.derivedFrom` 列出各来源实际用到的区间;取消的剪切不留半个文件)。
174
180
  - **导演组(按需)** `director_query` `director_models` `director_stage` `director_render` `director_render_status` `director_render_cancel` `director_inspect_model` `director_review` `director_compile_motion` `director_modeling_brief`:读导演台场景(结构、采样、事件、诊断、动作),列出能用的模型文件和尺寸,按指纹分步调度(先 dryRun;`place_model` 按真实尺寸放入模型,见下文“导演台里的模型”),编译动作,管理审阅版本(审阅版只能交给画布生成)。查询和调度在导演标签关着时作用于保存的节点,开着时作用于桌面上的实时场景;渲染、检视模型和审阅版本要导演标签开着。后台无头渲染暂未接入。
175
181
  - **建模组(按需)** `space_plan_compile` `model_brief` `model_review` `model_adopt` `model_status` `model_report` `model_cancel`:按毫米写平面,编译成 `film/spaces/` 下导演台能打开的 GLB(先 dryRun 看尺寸、警告和楼梯可达性);为程序化模型准备建模任务,读 `film/models/<id>/model.json` 里的记录、写审阅、记录用户采用的版本。运行模型、拍检查图、导出和回读 GLB 需要无头浏览器,暂未接入。
@@ -693,7 +693,7 @@ window.__ModuleLoader__.load({ id: "dsh-film", chunk: "client.workbench.js", fac
693
693
  * an older dictionary, whose translate function echoes keys it lacks.
694
694
  */
695
695
  /** The version this bundle was built as (tsdown defines it); `dev` where nothing does (node tests). */
696
- const CLIENT_VERSION = "0.3.0";
696
+ const CLIENT_VERSION = "0.3.1";
697
697
  /**
698
698
  * Whether the page should ask for a restart.
699
699
  * @param client - the version this page was built as.
@@ -75,8 +75,8 @@ export function mediaTaskTools(services) {
75
75
  description: 'Read one film task by its taskId — a storyboard generation of this workbench (the id canvas_get_generation_status reports as '
76
76
  + 'outputs[].task), or a cut, join or sound copy a video_* tool started: status, the last progress line, the error (with reasons when the Host could '
77
77
  + 'not copy a file), and its file. A finished edit\'s file.landedNodeId is the node it put on the board (file.landError says why it could not), and '
78
- + 'file.derivedFrom lists its sources with the range of each it holds (atMs: where that range starts in the result). Film tasks only — dsh-media\'s '
79
- + 'media_tasks lists a different kind of task.',
78
+ + 'file.derivedFrom lists its sources with the range of each it holds (atMs: where that range starts in the result). Film tasks only — the VibeDev plugin\'s '
79
+ + '(dsh-vibedev, formerly dsh-media) media_tasks lists a different kind of task.',
80
80
  parameters: {
81
81
  taskId: { type: 'string', required: true },
82
82
  },
@@ -91,7 +91,7 @@ export function mediaTaskTools(services) {
91
91
  name: 'media_cancel_task',
92
92
  description: 'Cancel one film task by its taskId (a storyboard generation of this workbench, as canvas_get_generation_status reports it in '
93
93
  + 'outputs[].task, or an edit a video_* tool started); a finished task is left as it is. A cancelled edit leaves no partial file; one whose result '
94
- + 'file is already written finishes as done. Film tasks only, not dsh-media\'s media_tasks.',
94
+ + 'file is already written finishes as done. Film tasks only, not the VibeDev plugin\'s media_tasks.',
95
95
  parameters: {
96
96
  taskId: { type: 'string', required: true },
97
97
  },
@@ -159,7 +159,7 @@ function sizeFor(aspect) {
159
159
  * dsh-media's own messages are written for the agent.
160
160
  */
161
161
  const USER_MESSAGES = {
162
- NOT_SIGNED_IN: '生成需要登录 VibeDev 账号:在插件页打开 dsh-media 的设置登录。在 VibeDev 应用里会直接使用应用登录的账号。',
162
+ NOT_SIGNED_IN: '生成需要登录 VibeDev 账号:在侧边栏底部「登录 VibeDev」或「设置 → VibeDev 账号」中登录。在 VibeDev 应用里会直接使用应用登录的账号。',
163
163
  INSUFFICIENT_BALANCE: 'VibeDev 余额不足,充值后再试。',
164
164
  SPENDING_DECLINED: '已取消,没有扣费。',
165
165
  ABORTED: '已取消。',
@@ -282,7 +282,7 @@ export class FilmMediaTasks {
282
282
  service() {
283
283
  const media = this.media();
284
284
  if (media === undefined)
285
- throw new FilmMediaError(503, 'MEDIA_SERVICE_UNAVAILABLE', '生成需要 dsh-media 插件(VibeDev 媒体生成)。请在插件页安装并启用它。');
285
+ throw new FilmMediaError(503, 'MEDIA_SERVICE_UNAVAILABLE', '生成需要「VibeDev 账号与模型」插件(@vibedev-si/dsh-vibedev,原 dsh-media)。请在插件页安装并启用它。');
286
286
  return media;
287
287
  }
288
288
  /**
@@ -22,14 +22,14 @@ export function addMediaRoutes(router, tasks, media) {
22
22
  router.add('GET', '/api/media/models', async (request) => {
23
23
  const service = media();
24
24
  if (service === undefined) {
25
- return { ...canvasCatalogue([]), providers: [{ id: GATEWAY_PROVIDER, label: 'VibeDev', integrated: false, configured: false, hint: '生成需要 dsh-media 插件(VibeDev 媒体生成)。' }] };
25
+ return { ...canvasCatalogue([]), providers: [{ id: GATEWAY_PROVIDER, label: 'VibeDev', integrated: false, configured: false, hint: '生成需要「VibeDev 账号与模型」插件(@vibedev-si/dsh-vibedev,原 dsh-media)。' }] };
26
26
  }
27
27
  try {
28
28
  return canvasCatalogue(await service.models(request.raw.signal));
29
29
  }
30
30
  catch (error) {
31
31
  const code = error?.code;
32
- const hint = code === 'NOT_SIGNED_IN' ? '请先登录 VibeDev 账号(插件页的 dsh-media 设置)。' : `暂时读不到模型目录:${error instanceof Error ? error.message : String(error)}`;
32
+ const hint = code === 'NOT_SIGNED_IN' ? '请先登录 VibeDev 账号(侧边栏底部「登录 VibeDev」或「设置 → VibeDev 账号」)。' : `暂时读不到模型目录:${error instanceof Error ? error.message : String(error)}`;
33
33
  return { ...canvasCatalogue([]), providers: [{ id: GATEWAY_PROVIDER, label: 'VibeDev', integrated: true, configured: false, hint }] };
34
34
  }
35
35
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-film",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "VibeDev 影视工作台:在 DeepSeek Harness 和 VibeDev 的右侧侧栏里写剧本、排分镜和调度导演台,Agent 用影视工具协同改片 · Film workbench for DeepSeek Harness and VibeDev: screenplay, storyboard canvas and director desk in the right sidebar, with film tools for the agent",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",