dsh-cliproxyapi-pro 1.7.0 → 1.9.0

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
@@ -13,7 +13,7 @@
13
13
  - **多账号**:每个账号独立的地址、密钥、模型勾选和参数,互不影响,可随时停用。
14
14
  - **开箱即用**:首次连接时按该服务自己的模型目录,为每个模型家族勾选最新的一个(最多 12 个),模型选择器不会被上百个模型淹没。
15
15
  - **原生协议**:Claude 走 Anthropic Messages,GPT / Codex / Grok 走 OpenAI Responses,其余走 OpenAI Chat,减少 CPA 的协议转换。
16
- - **可视化管理**:设置面板里勾选模型、编辑单个模型的参数。插件不注册 Agent 工具,不占用模型上下文。
16
+ - **可视化管理**:设置面板里勾选模型、编辑单个模型的参数。默认不注册 Agent 工具,不占用模型上下文(可选的生成工具 `generate_media` 需在「生成」标签手动打开)。
17
17
  - **插件更新**:自动检查稳定 / Beta / 开发通道,可选择全球 / 中国大陆下载源;装有 [DSH 插件市场(dshmarket)](https://github.com/dsh-market/dsh-market) 时可一键或自动安装新版本,否则下载校验离线包,在关闭 DSH 后手动升级。
18
18
  - **安全**:API Key 只保存在 DSH 凭证服务里,不写入任何配置文件。
19
19
  - **零依赖**:不依赖任何 npm 包,无需构建,安装几秒完成。
@@ -49,7 +49,7 @@
49
49
  dsh-cliproxyapi-pro
50
50
  ```
51
51
 
52
- 需要固定版本时可以写成 `dsh-cliproxyapi-pro@1.7.0`。
52
+ 需要固定版本时可以写成 `dsh-cliproxyapi-pro@1.9.0`。
53
53
  4. 点击 **安装**,完成后点击 **立即启用**。
54
54
 
55
55
  > 在中国大陆下载慢,可以点输入框旁的 **安装源**,切换到 **中国大陆镜像源**。
@@ -78,7 +78,7 @@ dsh plugin --profile <profile 名称> add dsh-cliproxyapi-pro
78
78
 
79
79
  | 来源 | 填写内容 |
80
80
  |---|---|
81
- | 某个发布版本 | `git+https://github.com/TinyBOOOOM/dsh-cliproxyapi-pro.git#v1.7.0` |
81
+ | 某个发布版本 | `git+https://github.com/TinyBOOOOM/dsh-cliproxyapi-pro.git#v1.9.0` |
82
82
  | 最新开发版 | `git+https://github.com/TinyBOOOOM/dsh-cliproxyapi-pro.git#main` |
83
83
  | 离线安装包 | 下载 [`dsh-cliproxyapi-pro.tgz`](https://github.com/TinyBOOOOM/dsh-cliproxyapi-pro/releases/latest/download/dsh-cliproxyapi-pro.tgz)(始终是最新版),填写它的本地绝对路径 |
84
84
  | 本地源码(开发用) | 克隆后的仓库目录绝对路径;以链接方式安装,改代码后重载插件即生效 |
@@ -96,29 +96,37 @@ CPA 就在本机默认端口 `8317` 且没有设置密钥时,什么都不用
96
96
 
97
97
  ## 截图
98
98
 
99
- 图 1–5 是离线组件渲染:用本插件的真实界面代码加示例数据(`example.com` 地址、虚构账号)在浏览器中渲染,配色按 DSH 深色主题近似,实际颜色跟随你的 DSH 主题。图 6 是 1.6.0 在 DSH 桌面版中的实际截图。
99
+ 图 1–7 是离线组件渲染:用本插件的真实界面代码加示例数据(`example.com` 地址、虚构账号)在浏览器中渲染,配色按 DSH 深色主题近似,实际颜色跟随你的 DSH 主题。图 8 是 1.6.0 在 DSH 桌面版中的实际截图。
100
100
 
101
- **1. 账号与连接。** 设置左侧导航的 **CLIProxyAPI** 页:顶部账号栏三个标签共用;账号标题下是连接状态、地址和模型数,右侧「启用」开关立即生效,「⋯」菜单里是「立即探测刷新」和「删除此账号」。「连接」标签里每项一行,地址旁可「测试连接」(用正在编辑的值,不保存),次要说明在 ⓘ 里。
101
+ **1. 账号与连接。** 设置左侧导航的 **CLIProxyAPI** 页:顶部账号栏四个标签(连接 / 模型 / 生成 / 额度)共用;账号标题下是连接状态、地址和模型数,右侧「启用」开关立即生效,「⋯」菜单里是「立即探测刷新」和「删除此账号」。「连接」标签里每项一行,地址旁可「测试连接」(用正在编辑的值,不保存),次要说明在 ⓘ 里。
102
102
 
103
103
  ![账号栏、账号标题与连接标签(离线渲染)](https://raw.githubusercontent.com/TinyBOOOOM/dsh-cliproxyapi-pro/main/assets/screenshots/connection.png)
104
104
 
105
- **2. 模型与统一保存。** 「模型」标签列出该 CPA 上的全部模型:全部 / 已勾选 / 未勾选、家族筛选、搜索、批量操作与「恢复推荐精选」;勾选的模型显示将使用的协议,可「编辑参数」。连接和模型的改动统一记录,底部出现「有未保存的更改 · 放弃更改 / 保存并应用」。
105
+ **2. 模型与统一保存。** 「模型」标签列出该 CPA 上的全部对话模型:全部 / 已勾选 / 未勾选、家族筛选、搜索、批量操作与「恢复推荐精选」;勾选的模型显示将使用的协议,可「编辑参数」。连接和模型的改动统一记录,底部出现「有未保存的更改 · 放弃更改 / 保存并应用」。
106
106
 
107
107
  ![模型标签与底部保存栏(离线渲染)](https://raw.githubusercontent.com/TinyBOOOOM/dsh-cliproxyapi-pro/main/assets/screenshots/model-filter.png)
108
108
 
109
- **3. 额度。** 「额度」标签:管理密钥、额度数据与刷新、凭证分布条,按渠道分组的凭证(套餐、前缀、状态、5 小时 / 每日 / 每周等额度条与重置时间;Devin 显示每日 / 每周额度,所有 Devin 模型共用;没有额度接口的渠道只显示状态与近期请求),以及可展开的「模型 → 渠道」表。标签上显示该账号可用凭证中最低的剩余额度。
109
+ **3. 生图 / 生视频。** 「生成」标签顶部是总开关「启用图片和视频生成」(对所有账号生效,新安装默认关闭;关闭时这一页只剩这个开关,输入框旁的生成按钮和生成命令都不出现)。打开后分组列出生图 / 生视频模型,每个模型可单独开关、改类型;下面是标记漏识别的模型、保存位置、视频默认值和 agent 生成设置。
110
+
111
+ ![生成标签:总开关、生图 / 生视频模型与生成设置(离线渲染)](https://raw.githubusercontent.com/TinyBOOOOM/dsh-cliproxyapi-pro/main/assets/screenshots/generation.png)
112
+
113
+ **4. 额度。** 「额度」标签:管理密钥、额度数据与刷新、凭证分布条,按渠道分组的凭证(套餐、前缀、状态、5 小时 / 每日 / 每周等额度条与重置时间;Devin 显示每日 / 每周额度,所有 Devin 模型共用;没有额度接口的渠道只显示状态与近期请求),以及可展开的「模型 → 渠道」表。标签上显示该账号可用凭证中最低的剩余额度。
110
114
 
111
115
  ![额度标签:分布条与按渠道分组的凭证额度(离线渲染)](https://raw.githubusercontent.com/TinyBOOOOM/dsh-cliproxyapi-pro/main/assets/screenshots/quota.png)
112
116
 
113
- **4. 对话框里的额度。** 模型选择器左侧的徽标显示当前模型可用凭证中最充足的剩余额度;点击后列出服务该模型的每个凭证及其额度窗口。只对本插件同步、且所属账号已填写管理密钥的模型显示。
117
+ **5. 管理密钥被拒绝。** 密钥连续 3 次被 CPA 拒绝(401/403)后停止自动查询,以免 CPA 封禁本机地址;页面说明原因,保留上次成功读取的数据。保存新的管理密钥后恢复,手动「刷新额度」只再试一次。
118
+
119
+ ![额度标签:管理密钥连续 3 次被拒绝后停止自动查询(离线渲染)](https://raw.githubusercontent.com/TinyBOOOOM/dsh-cliproxyapi-pro/main/assets/screenshots/quota-key-stopped.png)
120
+
121
+ **6. 对话框里的额度。** 模型选择器左侧的徽标显示当前模型可用凭证中最充足的剩余额度;点击后列出服务该模型的每个凭证及其额度窗口。只对本插件同步、且所属账号已填写管理密钥的模型显示。
114
122
 
115
123
  ![模型选择器旁的额度徽标与弹出列表(离线渲染)](https://raw.githubusercontent.com/TinyBOOOOM/dsh-cliproxyapi-pro/main/assets/screenshots/quota-badge.png)
116
124
 
117
- **5. 添加账号。** 填名称、地址和 API Key 后点「连接」:先测试,成功才创建并启用账号;失败时显示原因,可选「仍然添加(不启用)」。
125
+ **7. 添加账号。** 填名称、地址和 API Key 后点「连接」:先测试,成功才创建并启用账号;失败时显示原因,可选「仍然添加(不启用)」。
118
126
 
119
127
  ![添加账号表单(离线渲染)](https://raw.githubusercontent.com/TinyBOOOOM/dsh-cliproxyapi-pro/main/assets/screenshots/add-account.png)
120
128
 
121
- **6. 内置插件里的插件更新页**(1.6.0 实际截图)。**设置** → **内置插件** → **CLIProxyAPI** 标签页只有插件更新:检查更新与离线下载、检测到 DSH 插件市场后的「立即更新」、更新通道、下载区域,以及自动检查 / 自动下载 / 自动安装开关。图中已是稳定通道最新版本,所以「立即更新」不可用。
129
+ **8. 内置插件里的插件更新页**(1.6.0 实际截图)。**设置** → **内置插件** → **CLIProxyAPI** 标签页只有插件更新:检查更新与离线下载、检测到 DSH 插件市场后的「立即更新」、更新通道、下载区域,以及自动检查 / 自动下载 / 自动安装开关。图中已是稳定通道最新版本,所以「立即更新」不可用。
122
130
 
123
131
  ![内置插件中的 CLIProxyAPI 更新页:版本状态、插件市场更新、通道、区域与自动开关](https://raw.githubusercontent.com/TinyBOOOOM/dsh-cliproxyapi-pro/main/assets/screenshots/updates.png)
124
132
 
@@ -128,7 +136,8 @@ CPA 就在本机默认端口 `8317` 且没有设置密钥时,什么都不用
128
136
 
129
137
  - 服务地址可以是本地或远程,`/v1`、`/v1/chat/completions`、`/v1/messages` 等后缀会自动去掉。
130
138
  - 地址留空时,依次尝试:已有路由的地址、环境变量 `CLIPROXYAPI_BASE_URL`、本机 `127.0.0.1:8317`。
131
- - 读取 `/v1/models?client_version=pi` 的富元数据目录(也兼容标准 OpenAI `data[]` 格式),并用 `/v1/models` 的 `owned_by` 判断模型家族。
139
+ - 读取 `/v1/models?client_version=pi` 的富元数据目录(也兼容标准 OpenAI `data[]` 格式),并用 `/v1/models` 的 `owned_by` 判断模型家族、用其中的 `type` 识别生图模型。
140
+ - 生图 / 生视频模型不会写入对话路由,见 [生图 / 生视频模型](#生图--生视频模型生成标签页)。
132
141
  - 所有账号按统一间隔自动刷新(默认 300 秒);模型目录没有变化时不写入任何设置。
133
142
 
134
143
  ### 模型勾选
@@ -146,7 +155,7 @@ CPA 就在本机默认端口 `8317` 且没有设置密钥时,什么都不用
146
155
  - 每个账号写入自己的一组路由:第一个账号为 `cli-proxy` / `cli-proxy-responses` / `cli-proxy-messages`,之后依次为 `cli-proxy-2*`、`cli-proxy-3*`……;密钥引用名依次为 `CLI_PROXY_API_KEY`、`CLI_PROXY_API_KEY_2`……。模型选择器按账号名称分组。
147
156
  - **停用**账号:保留全部配置,但移除它的路由,模型从选择器中消失;其他账号不受影响。
148
157
  - **新增**账号:「+ 添加账号」先用填写的地址和密钥测试连接,成功才创建并启用;也可以选择「仍然添加(不启用)」。
149
- - 每个账号的页面分 **连接 / 模型 / 额度** 三个标签,顶部账号栏对三个标签共用。账号标题旁的「启用」开关立即生效;「⋯」菜单里是「立即探测刷新」和「删除此账号」。
158
+ - 每个账号的页面分 **连接 / 模型 / 生成 / 额度** 四个标签,顶部账号栏对所有标签共用。账号标题旁的「启用」开关立即生效;「⋯」菜单里是「立即探测刷新」和「删除此账号」。
150
159
  - 连接和模型的改动统一记录,底部出现「有未保存的更改 · 放弃更改 / 保存并应用」;切换账号前会提醒未保存的更改。「测试连接」用正在编辑的地址和密钥探测,不保存任何内容。
151
160
  - 次要说明收进标签旁的 ⓘ 提示(悬停、键盘聚焦或点击打开)。
152
161
  - 填写了服务地址的账号**只连接该地址**,连不上就报错,不会悄悄改连本地 `:8317`,避免两个账号指向同一个服务。
@@ -171,7 +180,7 @@ CPA 对每个模型同时提供 OpenAI Chat、OpenAI Responses、Anthropic Messa
171
180
 
172
181
  ### 渠道额度(「额度」标签页与对话框额度徽标)
173
182
 
174
- 每个账号的 **额度** 标签(与 **连接**、**模型** 并列)显示该账号的渠道额度;标签上显示该账号可用凭证中最低的剩余额度。
183
+ 每个账号的 **额度** 标签(与 **连接**、**模型**、**生成** 并列)显示该账号的渠道额度;标签上显示该账号可用凭证中最低的剩余额度。
175
184
 
176
185
  - **填写管理密钥**:在「额度」标签里为每个账号填写 CPA 的管理密钥(CPA 配置里的 `remote-management.secret-key`;远程 CPA 还需开启 `remote-management.allow-remote`)。密钥保存在 DSH 凭证服务中,引用名第一个账号为 `CLI_PROXY_MANAGEMENT_KEY`,其他账号为 `CLI_PROXY_MANAGEMENT_KEY_<账号 ID>`(如 `CLI_PROXY_MANAGEMENT_KEY_ACCOUNT_2`);不会写入 `state.json`、设置或日志,也不会返回给页面。
177
186
  - **由宿主读取**:宿主用管理接口读取该 CPA 的全部凭证(`/v0/management/auth-files`)、每个凭证服务的模型列表,并经 `/v0/management/api-call` 查询上游额度:Codex、Claude、Antigravity、Gemini CLI、Kimi(含 Kimi 国际版 kimi.ai)、xAI、Devin、Meta。CPA 插件提供的渠道(凭证标记了 `supports_quota`)改走 CPA 自己的 `/v0/management/quota/fetch`。Devin 的每日 / 每周额度是整个账号共用的,所有 `devin/…` 模型显示同一组额度。Meta 的额度接口需要凭证文件里的 `dca_token`,宿主每次查询时经管理接口读取,只用于这一次请求,不保存、不记录。API Key 类渠道(OpenAI 兼容、Gemini / Claude / Codex API Key)和 Vertex 没有额度接口(CPA 自带面板同样不显示),只显示账号状态与近期请求数;xAI 付费账号也没有额度计数(CPA 面板为此会真实发一次对话请求探测,本插件不这样做,以免后台刷新产生费用)。
@@ -179,7 +188,103 @@ CPA 对每个模型同时提供 OpenAI Chat、OpenAI Responses、Anthropic Messa
179
188
  - **对话框徽标**:模型选择器左侧的小徽标(信号格 + 百分比)显示当前所选模型可用凭证中最充足的剩余额度,点击可查看每个凭证的额度。只对本插件同步、且所属账号已填写管理密钥的模型显示;没有管理密钥时不显示徽标。在新建对话页(输入栏尚未接管会话时),徽标显示在输入框上方工作区一行的右侧。
180
189
  - **精确匹配**:只在所选模型所属的账号(按路由 `cli-proxy*`、`cli-proxy-2*`…)里找凭证;带前缀的模型(如 `devin/claude-opus-5-5`)只匹配该前缀的凭证;不带前缀的同名模型(如 `claude-opus-5-5`)优先匹配不带前缀的凭证,Claude 渠道与 Devin 渠道不会混用。Antigravity 等按模型分组的额度窗口只取与当前模型相符的那一组。
181
190
  - **排查**:`/cpa-status` 会附带额度摘要:每个账号的管理密钥状态、额度状态、凭证数,以及模型选择器中每个模型匹配到的凭证和剩余额度(不输出密钥)。
182
- - **刷新**:结果在宿主端缓存 5 分钟;有页面在看时才在后台刷新过期账号,也可手动「刷新额度」。管理密钥被拒(401/403)后暂停该账号的自动刷新,直到更新密钥或手动刷新,避免触发 CPA 的错误密钥封禁。
191
+ - **刷新**:结果在宿主端缓存 5 分钟;有页面在看时才在后台刷新过期账号,也可手动「刷新额度」。管理密钥被拒(401/403)时,后台按 5 分钟周期继续尝试,连续 3 次被拒绝后停止该账号的自动查询,避免触发 CPA 的错误密钥封禁(同一地址累计 5 次错误会被封 30 分钟)。失败次数保存在 `.dsh-cliproxyapi/quota-state.json`(不含密钥),重启 DSH 后继续计数;保存新的管理密钥(包括在 DSH 凭证页修改)、清除密钥或一次成功的查询会清零。停止后手动刷新只再试一次,再被拒绝立即停止。额度页和徽标会显示已被拒绝的次数或已停止的说明。
192
+
193
+ ### 生图 / 生视频模型(「生成」标签页)
194
+
195
+ CPA 通过 `/v1/images/*` 和 `/v1/videos/*` 提供生图、生视频模型(如 Grok Imagine)。这些模型不能用于对话,所以插件会把它们识别出来,不放进对话模型选择器。
196
+
197
+ - **总开关**:「生成」标签顶部的「启用图片和视频生成」对所有账号生效。关闭时输入框旁不显示生成按钮,`/cpa-image`、`/cpa-video`、`/cpa-video-edit`、`/cpa-video-extend`、`/cpa-video-status` 不注册,agent 生成工具也不注册,「生成」标签只显示这个开关;已提交的视频照常完成,聊天记录里已生成的结果仍可查看(不提供编辑 / 延长按钮)。新安装默认关闭;已有 `media-settings.json` 或用过生成的配置升级后保持开启。不论开关如何,生成模型都不会进入对话模型选择器。下面介绍的功能都需要先打开它。
198
+ - **识别规则**(按顺序):你在「生成」标签里手动指定的类型;模型目录里的 `type`(`openai-image` 为生图)或输出模态(只输出图片为生图,输出视频为生视频);CPA 分流到图片 / 视频接口的模型族,按前缀匹配:以 `grok-imagine-image` 或 `gpt-image-` 开头为生图,以 `grok-imagine-video` 开头或 `sora-2*` 为生视频。其余都是对话模型(如 `gemini-3.1-flash-image`:CPA 只通过对话接口提供它,DSH 也不能显示对话中返回的图片)。只出现在 `/v1/models` 普通列表里的生成模型也会被收录。模型目录可能列出 CPA 生成接口暂不接受的变体(例如 `grok-imagine-video-1.5-lite`),它们同样不能对话,因此归为生成模型;用它们生成时会显示 CPA 返回的错误。
199
+ - **不进入模型选择器**:生成模型不会写入任何对话路由,也不参与首次推荐勾选;即使旧的勾选里含有它们,也不会被同步(勾选本身保持不变)。「模型」标签只列对话模型。
200
+ - **「生成」标签**(与 连接 / 模型 / 额度 并列):分「生图模型」「生视频模型」两组列出,修改立即保存。每个模型可以用开关决定是否提供给生成功能(新出现的模型默认开启),用类型下拉框改为生图 / 生视频 / 对话模型;手动指定的类型可以恢复为自动识别。识别漏掉的模型可以在「把其他模型标记为生成模型」里手动标记。改动类型会立即重新同步该账号的路由。`sora-2*` 标注为「→ grok-imagine-video」:CPA 会把它改写为 Grok 视频模型调用。
201
+ - **只读诊断**:「运行诊断」只发送 GET 请求:用该账号的 Key 读取两份模型目录,列出疑似生成模型及其 `type`、模态等描述字段;再**不带 Key** 探测 `GET /v1/videos/{id}` 和 `GET /openai/v1/videos/{id}/content` 是否存在(存在的接口直接返回 401,不存在时返回 CPA 的 404)。不会生成内容,也不会消耗额度;CPA 未要求 Key 时,探测会用一个不存在的任务 id 查询一次,仍是只读请求。结果可复制,不含 Key。
202
+ - **保存位置**:「生成」标签底部可以修改生成文件的保存位置(默认 `generated`),相对路径以会话的工作目录为基准,也可以填写绝对路径;所有账号共用。
203
+ - **agent 生成**:「允许 agent 生成图片 / 视频」开关(默认关闭)、agent 生成视频 / 图片时的确认方式、每个会话的 agent 视频秒数上限,见下文「让 agent 生成」。
204
+ - **视频默认值**:账号有生视频模型时,「生成」标签里可以设置 `/cpa-video` 默认的时长(1–15 秒,默认 6 秒)和分辨率(480p / 720p,默认 720p);所有账号共用,修改立即保存。
205
+
206
+ #### 生成图片(`/cpa-image`)
207
+
208
+ 在对话输入框里输入:
209
+
210
+ ```text
211
+ /cpa-image 一只橘猫在雨夜的霓虹街头
212
+ /cpa-image -m quality --aspect 16:9 -n 2 一只橘猫在雨夜的霓虹街头
213
+ ```
214
+
215
+ - **选项**(写在提示词前面):`-m <模型>` 临时指定模型,可以写完整的 `账号id/模型id`、模型 id,或能唯一匹配的片段(如 `quality`),匹配到多个时报错并列出候选,不会替你猜;`--aspect <比例>` 可选 `1:1`、`16:9`、`9:16`、`4:3`、`3:4`、`3:2`、`2:3`、`9:20`、`20:9`;`-n <1-4>` 生成张数。也可以直接写在提示词开头或结尾,作为独立的词(用空格或逗号隔开):`16:9`、`竖屏`(9:16)、`横屏`(16:9)、`方形`(1:1)、`2张`,例如 `/cpa-image 2张 竖屏 一只橘猫`;`-n` 等选项写了时以选项为准。`--` 之后的内容一律当作提示词。
216
+ - **改图**:在输入框附带 1–4 张图片再执行命令,会改用 CPA 的 `/v1/images/edits`,图片作为参考图发送(合计不超过约 1.4 MB)。只接受图片附件。附带的图片以 base64 放在请求里,而上游限制请求大小(约 2 MiB,超出时 xAI 返回「Failed to read request body: length limit exceeded」),所以过大的图片会先缩小:PNG 由插件自己转成 JPEG(透明部分填白,长边不超过 1280),其他格式请 DSH 的附件服务生成较小的版本;仍然缩不下时命令直接报错。
217
+ - **保存**:文件写入会话工作目录下的保存位置,文件名形如 `20261022-133000-grok-imagine-image-一只橘猫在雨夜的霓虹街头.png`(取提示词前 24 个字符);同名文件不会被覆盖,而是加序号。会话的工作目录必须是本机文件夹。
218
+ - **提交后**:命令检查完选项、模型、保存目录和参考图就立即返回,输入框随即清空;生成在后台继续,期间工作区的会话列表把这个会话显示为「进行中」,在其他会话时完成会显示「已完成」提示。DSH 本身只把智能体的对话轮次算作运行中,所以插件在生成期间自己发送 DSH 的会话状态事件(`api-session/status`),每 5 秒重发一次。生成期间输入框会出现「停止」按钮,但它停不下生成(上游也不支持取消);这时照常发消息即可,智能体会正常回复。插件重新加载或 DSH 关闭会中断进行中的生成。
219
+ - **结果**:对话里 `/cpa-image` 这一行显示成一问一答:右侧气泡是你的提示词(下方标出比例、张数、参考图数量),左侧是回复:模型和账号、状态,生成中显示按比例排好的占位框和计时,完成后显示图片(单张按原比例显示,多张为方形缩略图),点击放大;底部写着耗时和保存目录(工作目录内的相对路径,或文件夹名),展开「详情」可以看到保存目录的完整路径和文件名(点击即用系统打开),上游改写过提示词时也会显示;失败时以红字显示原因。之前的生成记录同样会显示,前提是文件还在、记录还没被挤出(每个会话保留最近 48 次生成和 48 个文件)。图片只在页面上显示,不会发送给对话模型。
220
+ - **图片操作**:在图片上点右键,菜单列出本机能打开这张图片的应用(默认应用排在最前,带「默认」标记,和右侧文档预览的「打开」菜单一致),然后是「在文件资源管理器中显示」(macOS 为「在访达中显示」,Linux 为「在文件管理器中显示」),最后是「复制图片」「复制文件路径」。放大图片后下方按钮提供「用默认应用打开」、在文件管理器中显示和两个复制操作。打开和显示位置通过 DSH 自己的会话接口完成(与文档预览相同,由 DSH 再次校验路径),DSH 不支持打开本机路径时这些项不显示;复制图片总是以 PNG 写入剪贴板(其他格式会先转成 PNG)。
221
+ - **请求细节**:向该模型所属账号的 CPA 发送一次 `POST /v1/images/generations`(或 `/edits`),只用这个账号的地址和 Key,不跨账号重试;要求返回 `b64_json`。如果 CPA 只返回图片链接,插件会下载它:只接受 `data:` 或 HTTPS 链接,单张最多 32 MiB,下载请求不带 Key。最多等待 3 分钟。失败时显示 CPA 的错误摘要(截断,并去掉其中的链接)。生图会消耗该账号上游的额度。
222
+
223
+ #### 生成视频(`/cpa-video`)
224
+
225
+ ```text
226
+ /cpa-video 海浪在日落时拍打沙滩
227
+ /cpa-video -s 8 -r 480p --aspect 9:16 一只猫在冲浪
228
+ ```
229
+
230
+ - **选项**(写在提示词前面):`-m <模型>` 临时指定模型(规则同 `/cpa-image`);`-s <1-15>` 时长(秒);`-r <480p|720p>` 分辨率;`--aspect <比例>` 可选 `1:1`、`16:9`、`9:16`、`4:3`、`3:4`、`3:2`、`2:3`,不写时由 xAI 决定(通常为 16:9,有首帧图时按首帧图的比例)。这些参数也可以直接写在提示词开头或结尾,作为独立的词:`10秒` / `10 秒` / `10s`、`480p` / `720p`、`16:9`、`竖屏`、`横屏`、`方形`,例如 `/cpa-video 10秒 480p 这个角色跳社会摇`;只有紧跟空格、逗号或结尾时才算参数,所以「3 秒后爆炸」仍是提示词,写在句子中间的也不会被识别。`-s` 等选项写了时以选项为准。都没写时用「生成」标签里的视频默认值。`--` 之后的内容一律当作提示词。
231
+ - **附带图片的用法**(只接受图片,过大的按上面「改图」里的方式缩小;实测 CPA 的视频生成接口只读约 1 MiB 的请求体,所以所有附带图片合计约 750 KB,超出的先缩小):
232
+ - 1 张:默认作为**首帧**(图生视频);加 `--ref`(或写「参考图」)作为**参考图**;加 `--last`(或写「尾帧」)作为**尾帧**,视频最后停在这张图上。
233
+ - 2 张:默认作为**参考图**;加 `--first-last`(或写「首尾帧」)则第 1 张是首帧、第 2 张是尾帧,模型补出中间过程。
234
+ - 3 张及以上:**参考图**,`grok-imagine-video-1.5` 最多 14 张,其他视频模型最多 7 张。参考图用来带入人物、服装、物品等,不锁定第一帧;提示词里可以用 `<IMAGE_0>`、`<IMAGE_1>`… 按顺序指代。
235
+ - 首帧 / 尾帧固定只支持 `grok-imagine-video-1.5`。字段按 xAI 文档发送:`image`、`last_frame`、`reference_images`。
236
+ - **无法取消**:视频一旦提交就无法撤回(CPA 和 xAI 都没有取消接口),会照常计费;生成期间输入框的「停止」按钮停不下它。
237
+ - **请求细节**:向该模型所属账号的 CPA 发送一次 `POST /v1/videos/generations`(xAI 原生格式:`model`、`prompt`、`duration`、`resolution`,以及可选的 `aspect_ratio`、`image.url`;`sora-2*` 按 CPA 的规则改写为 `grok-imagine-video`),然后查询 `GET /v1/videos/{请求 id}`:开始 1 分钟内每 5 秒、3 分钟内每 10 秒、之后每 15 秒一次。完成后通过 CPA 的 `GET /openai/v1/videos/{请求 id}/content` 下载(CPA 用该凭据自己的代理去取文件,插件不直接访问上游地址),边下载边写入保存位置,最大 200 MiB,只接受 MP4 / MOV / WebM,同名不覆盖。
238
+ - **后台与恢复**:提交成功后,任务记录在 `media-jobs.json` 里。重载插件或重启 DSH 只会暂停等待:下次启动时继续查询并保存;但 CPA 只在 3 小时内记得这个视频由哪个凭据生成,超过 3 小时仍未完成的任务标记为「已过期」,不再查询。还没拿到请求 id 就被重载打断的,记为「已中断」(可能已经提交,无法确认)。期间会话同样显示为「进行中」。
239
+ - **结果**:对话里 `/cpa-video` 这一行同样显示成一问一答(标签行末尾的「复制原始输入」可复制当时输入的整条命令;回复里模型名下方一行写明实际使用的模式,例如「模式:参考图 ×3 — 带入图中的人物、服装、物品,不锁定第一帧」「模式:首帧 — 附带的图片就是视频的第一帧」,编辑 / 延长还写明原视频来自哪里:上传的本地文件、公开链接或本会话的视频):右侧是提示词和时长、分辨率、比例、首帧图标签;左侧显示排队 / 生成进度(CPA 返回进度时显示百分比)/ 保存中和计时,完成后直接显示可播放的视频(支持拖动进度),下方按钮和右键菜单可以用其他应用打开、在文件资源管理器中显示、复制文件路径。
240
+ - `/cpa-video-status` 列出本会话最近 20 个视频任务的状态和请求 id。
241
+
242
+ #### 编辑 / 延长视频(`/cpa-video-edit`、`/cpa-video-extend`)
243
+
244
+ ```text
245
+ /cpa-video-edit 把衣服换成红色,其他保持不变
246
+ /cpa-video-extend 4秒 她转身走出画面
247
+ /cpa-video-extend --from cmd-xxxx-3 -s 6 镜头慢慢拉远
248
+ /cpa-video-edit --video "D:\素材\街景.mp4" 换成雨夜
249
+ /cpa-video-extend --url https://example.com/clip.mp4 -s 4 镜头拉远
250
+ ```
251
+
252
+ - 视频完成后,下方会出现「编辑视频…」「延长视频…」按钮,点开写一句话即可提交,结果出现在对话下方新的一行。也可以直接输入命令。
253
+ - **原视频**(任选其一):在输入框**附带一个 MP4 文件**;`--video <路径>`(相对路径按会话工作目录,含空格时加引号);`--url <公开链接>`(http/https,由 xAI 自己下载,大小不受限制);`--from <命令 id>`(本会话插件生成的视频);都不写时用本会话最新生成的视频。视频路径也可以不写 `--video`,直接放在提示词开头或结尾(可带引号或 `@`,以 `.mp4` / `.mov` / `.m4v` 结尾),例如 `/cpa-video-edit D:\素材\a.mp4 换成雪夜`。编辑 / 延长沿用原视频的分辨率和比例(编辑还沿用时长),所以提示词开头或结尾的 `480p`、`16:9`、`竖屏`(编辑时还有 `4秒`)等会被去掉,不发给 xAI,并在对话里标出「已忽略」。`-m <模型>` 可指定用哪个账号的视频模型(默认用本会话选中的视频模型;插件生成的视频默认用生成它的账号)。
254
+ - **原理**:xAI 的编辑(`/v1/videos/edits`)和延长(`/v1/videos/extensions`)接受任意 MP4,可以是公开链接,也可以是 base64 数据。CPA 没有 xAI 的文件上传接口,所以本地视频以 base64 放在请求里发送(实测编辑接口能读 20 MiB 的请求体,因此本地视频最大 14 MiB;更大的请压缩、裁短,或改用 `--url`)。插件自己生成的视频在约 1 小时内直接把 xAI 结果自带的短期链接交给 xAI(链接只保存在内存里,不写入文件、日志,也不发给页面),之后或插件重载后改为发送已保存的文件,所以按钮在文件还在时一直可用。发送前插件读取 MP4 里记录的时长,不符合下面的限制时直接提示,不会发出请求。
255
+ - **限制**(xAI 文档):都使用 `grok-imagine-video`;编辑要求原视频不超过 8.7 秒,输出保持原时长、比例和分辨率(最高 720p);延长要求原视频 2–15 秒,`-s` 指定新增的 2–10 秒(默认 6 秒,也可以写「4秒」),输出是原视频加新增部分。
256
+ - **服务器不支持时**:有的 CPA 服务器的上游没有延长接口(测试中遇到过返回 HTTP 405 的服务器)。这时这次任务显示「上游不提供视频延长(HTTP 405)」,同一账号之后的延长会直接提示、不再发请求,「延长视频…」按钮也会隐藏,直到插件重载。CPA 收到 405 后会让该凭据的这个模型暂停约 1 分钟。
257
+ - 编辑和延长同样提交后无法取消、照常计费,后台等待、重载后继续、按钮操作都与 `/cpa-video` 相同。
258
+
259
+ #### 用对话模型理解自然语言参数
260
+
261
+ `/cpa-image`、`/cpa-video`、`/cpa-video-edit`、`/cpa-video-extend` 每次执行时,插件会把(去掉选项后的)提示词交给**当前会话正在用的对话模型**,请它读出没写成选项的参数,例如「做成十秒钟的竖版高清视频」「第二张当结尾」「来三张横版的」「再加五秒」。
262
+
263
+ - **读什么**:生图读比例、张数;生视频读时长、分辨率、比例,以及附带图片的用法(首帧 / 参考图 / 首尾帧 / 尾帧);延长读新增的秒数;编辑没有可读的参数,只整理提示词。
264
+ - **优先级**:命令里写的选项(`-s`、`-r`、`--aspect`、`-n`、`--ref` 等)和开头 / 结尾能直接识别的词始终优先,对话模型只补充没写的参数;它给出的每个值都会按允许范围检查,不合法的丢弃。
265
+ - **提示词只删不改**:对话模型要返回去掉参数说法后的提示词;插件检查结果只能是原文删掉部分文字得到的(不能改写、翻译或扩写,也不能删掉大半),否则仍发送原文。
266
+ - **模型和用量**:用会话最近一次请求的模型(没有时用 agent 设置或默认模型),每次约几百个 token,多 2–5 秒(最多等 30 秒);只发送提示词文字和附带图片的数量,不发送图片。这一步在后台进行,输入框照常立即清空,对话行显示「正在理解参数」。
267
+ - **结果可见**:回复里写明「参数由 <模型> 从提示词中读出:10s · 9:16 · first-last」,去掉了提示词里的说法时也会注明;对话模型不可用或回答无法解析时显示「参数解读失败」,并按命令里的选项和原文发送,不影响生成。
268
+
269
+ #### 让 agent 生成(`generate_media` 工具,默认关闭)
270
+
271
+ 在「生成」标签打开 **允许 agent 生成图片 / 视频** 后,对话里的 agent 可以调用 `generate_media` 工具生图、生视频、编辑或延长视频。关闭时(默认)不注册这个工具,不占用模型上下文;打开后,且总开关「启用图片和视频生成」打开、至少有一个启用的生成模型时才注册,工具说明保持精简,不列模型清单。
272
+
273
+ - **能做什么**:参数为 `kind`(image / video)、`prompt`,可选 `mode`(generate / edit / extend)、`model`、`images`(本地图片路径:生图时改图 / 合成,生视频时 1 张为首帧、2 张以上为参考图)、`frames`(首帧 / 参考图 / 首尾帧 / 尾帧)、`video`(编辑 / 延长的原视频:本地 MP4 路径或公开链接,不写时用本会话最新生成的视频)、`aspect`、`seconds`、`resolution`、`count`。可选字段可以省略或填 `null`(兼容 Responses 严格参数模式);视频的 `count` 应填 `null`,一次只生成一个视频。没写 `model` 或填 `null` / 空字符串时,用输入框旁按钮里本会话选中的模型(子 agent 用其所属会话的选择)。处理方式与对应的斜杠命令相同,但提示词**原样发送**:不识别提示词里的「10秒」「竖屏」等词,也不请对话模型解读参数。工具说明同时要求 agent 使用用户自己的措辞和细节,不要扩写成更长的场景描写,也不要添加用户没有要求的镜头、光线、风格、人物或环境细节。
274
+ - **结果**:文件保存到保存位置,工具返回文件路径、模型和实际参数。生图时,如果当前对话模型能看图,还会把生成的图片(DSH 自动缩小)一起交给它。对话根据工具调用的原始记录显示一条**独立的生成行**,放在思考过程之外,和斜杠命令一样显示一问一答(进度、图片 / 可播放的视频、打开 / 显示文件夹 / 复制,视频下方同样有「编辑视频…」「延长视频…」);不需要展开思考过程,不再额外伪造用户命令,也不会重复显示已有对应生成行的工具卡片或旧版镜像命令卡片。
275
+ - **确认**:视频默认**每次先问你**;图片默认直接生成,也可以改成每次先问。确认独立显示在所属根会话的输入框处,使用 DSH 的原生提问界面,写明账号、模型、时长、分辨率 / 比例、提示词开头、附图数量、「提交后无法取消」和本会话已用秒数;选项为双语的 **Allow / 允许**、**Decline / 拒绝**。这是生成费用确认,与 DSH 的执行审批权限无关,「完全访问」也不会跳过它。只有明确选择允许才会发送,拒绝时 agent 会收到「不要重试」的说明;10 分钟未回答、停止等待、关闭工具或重载 / 卸载插件均不放行,原生提问出错也不会自动放行。只有 DSH 缺少原生提问服务时,才改在所属根会话的输入框旁显示兼容确认区;生成行本身不放确认按钮。
276
+ - **秒数上限**:agent 提交的视频按秒累计到会话上(子 agent 计入所属会话),默认每个会话 60 秒,可设为 30 秒到 1 小时或不限。只在「直接生成」时拦截超出上限的视频;「每次先问我」时只计数。编辑按原视频时长计、延长按新增秒数计。CPA 当场拒绝(没有建立任务)时退回秒数;上游生成失败不退回。修改上限、或从「每次先问我」改为「直接生成」时重新计数。你手动执行的 `/cpa-video` 等命令不计数、不确认。
277
+ - **按会话单独设置**:工具打开时,任一模型菜单底部的「agent 生成设置」按钮会打开二级菜单:视频 / 图片的确认方式和视频上限可以跟随全局或单独设置,并显示「本会话 agent 已用视频 X / N 秒」。
278
+ - **等待**:工具最多等 10 分钟。超时或你停止这一轮时,视频仍在后台生成(照常计费),完成后保存到保存位置并显示在这一行里;agent 会收到「仍在后台生成」的说明。
279
+
280
+ #### 输入框旁的生成模型按钮
281
+
282
+ 有可用的生图或生视频模型时,输入框里模型选择器左侧会出现两个生成模型按钮,分别显示当前用于生图(图片图标)和生视频(摄像机图标)的模型。
283
+
284
+ - 生图按钮只打开生图模型菜单,生视频按钮只打开生视频模型菜单;两个菜单都按账号列出所有启用的该类型模型,点一下就切换。模型菜单底部的「agent 生成设置」打开二级菜单,本会话 agent 的确认方式和视频秒数上限都收在那里。**选择按会话保存**,同时记为「上一次选择」:还没单独选过的会话(包括新建会话)沿用上一次的选择。
285
+ - `/cpa-image` / `/cpa-video` 选模型的顺序:`-m` 指定的模型 → 本会话的选择 → 上一次的选择 → 只有一个可用模型时用它;有多个模型却都没选过时,命令会报错并提示先选择。
286
+ - 两个按钮在加载、切换会话和每次打开菜单时读取数据,不在后台轮询;读取时如果还没有任何可用的生成模型、而某个启用的账号还没读到模型目录(例如 DSH 刚启动),或者账号上次没读到普通模型列表(只出现在该列表里的生图模型会缺失),插件会先同步一次;仍不完整时按 3 秒、10 秒、之后每 30 秒重试,读到后停止。
287
+ - `/cpa-image` 找不到生图模型、而某个启用的账号还没读到模型目录时,会先同步一次再判断;仍然没有时,错误信息会列出每个账号的状态和模型数量。
183
288
 
184
289
  ## 插件自身更新
185
290
 
@@ -229,12 +334,18 @@ CPA 对每个模型同时提供 OpenAI Chat、OpenAI Responses、Anthropic Messa
229
334
 
230
335
  ## 斜杠命令与 HTTP 接口
231
336
 
232
- 本插件不注册任何 Agent 工具,不占用模型上下文。账号与模型在 **设置** → **CLIProxyAPI** 页管理,也可以用下面的斜杠命令查看和刷新。
337
+ 除了默认关闭的生成工具 `generate_media`(见上文),本插件不注册 Agent 工具,不占用模型上下文。账号与模型在 **设置** → **CLIProxyAPI** 页管理,也可以用下面的斜杠命令查看和刷新。
233
338
 
234
339
  ### 斜杠命令
235
340
 
236
- - `/cpa-status`:显示所有账号的状态。
341
+ - `/cpa-status`:显示所有账号的状态(含识别出的生图 / 生视频模型数量)。
237
342
  - `/cpa-refresh`:立即刷新所有账号(也会探测停用账号的模型列表)。
343
+ - `/cpa-image [-m 模型] [--aspect 比例] [-n 1-4] 提示词`:生成图片;附带图片时改图。见 [生成图片](#生成图片cpa-image)。
344
+ - `/cpa-video [-m 模型] [--aspect 比例] [-s 1-15] [-r 480p|720p] 提示词`:生成视频;可附带一张首帧图。提交后无法取消。见 [生成视频](#生成视频cpa-video)。
345
+ - `/cpa-video-status`:列出本会话的视频任务。
346
+ - `/cpa-video-edit [--video 路径 | --url 链接 | --from 命令id] [-m 模型] 修改说明`、`/cpa-video-extend [同上] [-s 2-10] 接下来的内容`:编辑 / 延长任意 MP4(可附带视频文件)。见 [编辑 / 延长视频](#编辑--延长视频cpa-video-editcpa-video-extend)。
347
+
348
+ `/cpa-image` 和 `/cpa-video*` 只在「生成」标签的「启用图片和视频生成」打开时存在。
238
349
 
239
350
  ### HTTP 接口
240
351
 
@@ -255,6 +366,14 @@ CPA 对每个模型同时提供 OpenAI Chat、OpenAI Responses、Anthropic Messa
255
366
  | GET | `/api/dsh-cliproxyapi/quota/status` | — | `{ ok, quota }`:缓存的额度快照;过期账号在后台刷新 |
256
367
  | POST | `/api/dsh-cliproxyapi/quota/refresh` | `{ accountId? }` | 开始刷新一个或全部账号的额度并立即返回(快照中 `refreshing` 为真) |
257
368
  | POST | `/api/dsh-cliproxyapi/quota/save` | `{ accountId, managementKey?, clear? }` | 保存或清除该账号的管理密钥,并开始刷新额度;响应不含密钥 |
369
+ | GET | `/api/dsh-cliproxyapi/media/status` | — | `{ ok, media }`:生成设置与每个账号识别出的生图 / 生视频模型;不联网 |
370
+ | POST | `/api/dsh-cliproxyapi/media/save` | `{ enabled? }`、全局字段(如 `agentTool`、`outputDir`),或 `{ account: { accountId, disabledModels?, kindOverrides? } }` | `enabled` 打开 / 关闭生成总开关(随即注册或移除生成命令和 agent 工具);保存某账号关闭的生成模型(整表替换)或类型覆盖(按模型合并,`null` 表示恢复自动识别);类型变化时重新同步该账号并在响应中附带 `status`。无效值返回 400 和错误码,如 `invalid-enabled`、`invalid-account`、`invalid-kind` |
371
+ | POST | `/api/dsh-cliproxyapi/media/diagnose` | `{ accountId }` | 只读诊断(见上文),返回 `{ ok, diagnostic }`,不含 Key |
372
+ | GET | `/api/dsh-cliproxyapi/media/session?sessionId=` | — | `{ ok, session }`:可选的生图 / 生视频模型、当前选择及其来源(`session` / `last` / `only`)、本会话最近生成的文件(只有文件名和 id,不含路径);`pendingConfirmations` 仅列出缺少原生提问服务时、属于这个确切会话的待确认项 `{ commandId, kind, en, zh, expiresAt }`,原生提问不在其中;不联网 |
373
+ | POST | `/api/dsh-cliproxyapi/media/session/save` | `{ sessionId?, kind: "image" \| "video", ref }` | 为会话选择模型(`ref` 为 `账号id/模型id`,`null` 清除本会话的选择),并记为上一次选择;不在可选列表里的模型返回 400 `invalid-model`。也可以只传 `{ sessionId, videoConfirm?, imageConfirm?, videoBudget? }`(`ask` / `auto` / `inherit`,上限为 `{ mode: "limited", seconds }` / `{ mode: "unlimited" }` / `inherit`)修改本会话的 agent 生成设置 |
374
+ | POST | `/api/dsh-cliproxyapi/media/confirm` | `{ sessionId, commandId, allow }` | 仅回答缺少原生提问服务时、输入框旁兼容确认区中的 `generate_media` 确认(每 2 秒读取 `media/session`);不用于原生提问,与执行审批权限无关。只有该确认所属的确切根会话能回答,已回答或已过期返回 400 `confirm-expired` |
375
+ | GET | `/api/dsh-cliproxyapi/media/file?sessionId=&id=` | — | 返回插件为该会话记录过的生成文件;其他文件或其他会话一律 404。视频以流的形式返回,支持单个 `Range` 区间(206),便于播放器拖动 |
376
+ | GET | `/api/dsh-cliproxyapi/media/command?sessionId=&commandId=` | — | `{ ok, run, files }`:该会话中某次命令的生成记录(状态 `running` / `done` / `error`、模型、提示词、比例、张数、参考图数量、起止时间、保存目录的显示名、错误代码和摘要)和生成的文件(id、文件名和完整路径,以及保存目录 `folderPath`、Host 的文件管理器类型 `desktop`:`explorer` / `finder` / `filemanager`),供对话里的命令行显示和打开文件;视频记录另有时长、分辨率、请求 id、方式 `mode`(`text` / `first-frame` / `reference` / `first-last` / `last-frame` / `edit` / `extend`)和来源命令 id;还能编辑 / 延长时附带 `actions: { edit, extend, expiresAt }`(不含链接);进行中时附带阶段 `phase`(`submitting` / `queued` / `running` / `downloading`)和 CPA 返回的进度 `progress`;记录为进行中、但当前没有对应后台任务的(插件重载或崩溃)报告为 `interrupted` |
258
377
 
259
378
  更新接口的操作响应采用 `{ ok, update }`,状态包含 `currentVersion`、`latestVersion`、`available`、`channel`、`region`、`effectiveRegion`、`autoCheck`、`autoDownload`、`autoInstall`、`checking`、`downloading`、`lastCheckedAt`、`error` / `errorCode`、`blockedReason`、`downloadedVersion`、`downloadPath` 与 `upgradeCommand`。未检查或未下载的相关字段为 `null`。`channel` 为 `stable` / `beta` / `dev`,`region` 为 `auto` / `global` / `cn`;`effectiveRegion` 为本次成功检查使用的 `global` / `cn`(此前为 `null`)。
260
379
 
@@ -296,6 +415,29 @@ CPA 对每个模型同时提供 OpenAI Chat、OpenAI Responses、Anthropic Messa
296
415
  ```
297
416
 
298
417
  设置通过面板保存后立即应用。手动编辑此文件后需重载插件或重启 DSH 才会重新读取;文件损坏、结构 / 字段无效或无法读取时采用关闭自动联网检查的安全默认值。版本检查结果、候选版本、下载完成提示与命令只在内存中,插件重载后重新检查;下载包仍位于独立的 `updates` 子目录,由用户按需清理。
418
+ - **生成设置**:独立保存在 `<Profile 目录>/.dsh-cliproxyapi/media-settings.json`,不改动 `state.json`。没有此文件时使用默认值(`enabled: false`,生成关闭;但已存在 `media-sessions.json` 或 `media-jobs.json` 时视为开启);文件里没有 `enabled` 字段(总开关出现之前写入的文件)时视为开启。文件损坏时也使用默认值并在日志中提示,下次保存前会把损坏的文件另存为 `media-settings.corrupt-<时间>.json`。各字段:`enabled`(总开关)、`agentTool`(agent 生成工具)、`outputDir`(保存位置)、`defaultVideoSeconds` / `defaultVideoResolution`(视频默认值)、`imageConfirm` / `videoConfirm` / `videoBudget`(agent 生成的确认方式和秒数上限)、`lastSelection`(上一次选择的模型),以及每个账号的 `disabledModels`(关闭的生成模型)和 `kindOverrides`(手动指定的类型):
419
+
420
+ ```json
421
+ {
422
+ "version": 1,
423
+ "enabled": true,
424
+ "agentTool": false,
425
+ "outputDir": "generated",
426
+ "defaultVideoSeconds": 6,
427
+ "defaultVideoResolution": "720p",
428
+ "imageConfirm": "auto",
429
+ "videoConfirm": "ask",
430
+ "videoBudget": { "mode": "limited", "seconds": 60 },
431
+ "lastSelection": {},
432
+ "accounts": {
433
+ "default": { "disabledModels": [], "kindOverrides": { "my-painter": "image" } }
434
+ }
435
+ }
436
+ ```
437
+
438
+ - **会话生成记录**:`<Profile 目录>/.dsh-cliproxyapi/media-sessions.json` 保存每个会话选择的生成模型、最近 48 次生成的记录(状态、模型、提示词、选项、起止时间、保存目录显示名、错误摘要),以及最近生成的最多 48 个文件路径和生成它们的命令 id(供对话里的命令行显示图片),只保留最近更新的 500 个会话。删除它只会清空这些选择和记录,不会删除已生成的文件。文件损坏时按空记录处理,下次写入前另存为 `media-sessions.corrupt-<时间>.json`。
439
+ - **视频任务**:`<Profile 目录>/.dsh-cliproxyapi/media-jobs.json` 保存已提交的视频任务(CPA 请求 id、账号、模型、会话和命令 id、工作目录与保存位置、提示词、时长、提交时间、状态),用于重载或重启后继续等待;最多 200 个,已结束的保留 7 天。不含 Key 和视频地址。文件损坏时按空处理,下次写入前另存为 `media-jobs.corrupt-<时间>.json`。
440
+ - **管理密钥失败次数**:`<Profile 目录>/.dsh-cliproxyapi/quota-state.json` 记录每个账号连续被 CPA 管理接口拒绝(401/403)的次数、最后的错误码和时间,用来在 3 次后停止自动查询;不含密钥。删除它只会清零计数。
299
441
  - **密钥**:通过 DSH 的 `credentials` 服务按引用名存取;凭证服务里没有时,回退读取同名环境变量。
300
442
  - **环境变量**:`CLIPROXYAPI_BASE_URL` 只用于服务地址留空的账号的自动发现。
301
443
  - **插件行配置**:`cordis.patch.yml` 中本插件行的 `config` 会在启动时叠加到状态文件上:包含 `accounts` 时替换账号列表,否则其中的字段作用于第一个账号。一般保持 `{}`,用设置面板配置即可。
@@ -339,7 +481,7 @@ DSH 使用的 pnpm 可能设置了新版本发布后的等待期(`minimumRelea
339
481
  > 给 DeepSeek Harness 中的 AI Agent:用户要求安装或配置本插件时按以下步骤执行。本包没有 npm 依赖,也没有构建脚本。
340
482
 
341
483
  1. **安装**:调用 `plugin_manager`:`{"action": "install_bundle", "target": "dsh-cliproxyapi-pro", "enabled": true}`。查看结果中的 `application` 与 `warnings`;`restart-required` 表示需要重启 DSH 后新代码才会运行。
342
- 2. **配置**:本插件不提供 Agent 工具,账号由用户在界面里配置。CPA 在本机 `http://127.0.0.1:8317` 且无鉴权时无需配置,插件启动后会自动发现;否则请用户打开 **设置** 左侧导航的 **CLIProxyAPI** 页,点 **+ 添加账号** 并填写服务地址和 API Key,再在 **模型** 标签勾选需要的模型。
484
+ 2. **配置**:账号由用户在界面里配置(本插件不提供管理账号的 Agent 工具)。CPA 在本机 `http://127.0.0.1:8317` 且无鉴权时无需配置,插件启动后会自动发现;否则请用户打开 **设置** 左侧导航的 **CLIProxyAPI** 页,点 **+ 添加账号** 并填写服务地址和 API Key,再在 **模型** 标签勾选需要的模型。
343
485
  3. **验证**:请用户运行 `/cpa-status`,每个启用的账号应为 `connected` 且模型数大于 0。告诉用户模型已出现在 DSH 模型选择器中(按账号名称分组)。
344
486
 
345
487
  不要向用户索要 API Key,也不要把它写入任何文件;密钥只在设置页填写。