@mokuyoaxis/dsh-iris 0.1.2 → 0.1.4
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/.dsh/skills/iris-compose-media/SKILL.md +23 -49
- package/.dsh/skills/iris-compose-media/references/task-v2-recovery.md +30 -0
- package/.dsh/skills/iris-compose-media/references/workflows.md +38 -0
- package/.dsh/skills/iris-verify-ui/SKILL.md +3 -25
- package/.dsh/skills/iris-verify-ui/agents/openai.yaml +4 -0
- package/.dsh/skills/iris-verify-ui/references/verdict-and-degradation.md +31 -0
- package/CHANGELOG.md +57 -2
- package/README.en.md +43 -7
- package/README.md +43 -7
- package/bin/dsh-iris.js +23 -0
- package/docs/ARCHITECTURE.md +95 -0
- package/docs/ARTIFACT_LIBRARY.md +24 -0
- package/docs/FAULT_INJECTION.md +26 -0
- package/docs/HOST_ADAPTER_CONTRACT.md +86 -0
- package/docs/HOST_DOCTOR.md +47 -0
- package/docs/PROVIDER_ADAPTER_CONTRACT.md +97 -0
- package/docs/PROVIDER_HEALTH.md +39 -0
- package/docs/PROVIDER_SUBMISSION_CONTRACT.md +60 -0
- package/docs/ROADMAP.md +21 -11
- package/docs/SECURITY.md +57 -0
- package/docs/TASK_SEMANTICS.md +148 -0
- package/docs/assets/diagrams/iris-architecture.png +0 -0
- package/docs/assets/diagrams/iris-architecture.svg +5 -5
- package/docs/releases/0.1.4.md +59 -0
- package/lib/actions.js +860 -290
- package/lib/adapters.js +7 -7
- package/lib/api.js +110 -18
- package/lib/artifacts.js +239 -0
- package/lib/bundled-skills.js +5 -5
- package/lib/client.js +478 -68
- package/lib/config.js +192 -9
- package/lib/doctor.js +414 -0
- package/lib/dsh-host-adapter.js +189 -0
- package/lib/host-contract.js +131 -0
- package/lib/host-runtime.js +156 -0
- package/lib/index.js +142 -157
- package/lib/locate.js +1 -1
- package/lib/media.js +16 -6
- package/lib/prompt-optimizer.js +10 -20
- package/lib/provider-adapter.js +371 -0
- package/lib/provider-adapters.js +279 -0
- package/lib/provider-contract.js +234 -0
- package/lib/provider-health.js +59 -0
- package/lib/render.js +43 -12
- package/lib/task-semantics.js +209 -0
- package/lib/tasks.js +500 -32
- package/lib/vision.js +23 -49
- package/package.json +19 -8
- package/user_guide.md +62 -2
- package/docs/assets/diagrams/iris-architecture.drawio +0 -1
- package/docs/assets/diagrams/iris-task-lifecycle.drawio +0 -1
- package/docs/assets/diagrams/iris-workflow-compose.drawio +0 -1
- package/docs/releases/0.1.1.md +0 -51
- package/docs/releases/0.1.2.md +0 -26
package/lib/vision.js
CHANGED
|
@@ -5,12 +5,13 @@
|
|
|
5
5
|
* 把“识图”拆成「VisionBackend 接口 +
|
|
6
6
|
* 两个实现」,让自持栈与 DSH 全局模型可替换、按序降级。
|
|
7
7
|
* - SelfStackVisionBackend:自持栈(OpenAI 兼容 /chat/completions,qwen-vl)
|
|
8
|
-
* -
|
|
8
|
+
* - HostVisionBackend:由 Host Adapter 提供的可选视觉模型
|
|
9
9
|
*
|
|
10
|
-
* 调用方(工具)不感知底层:
|
|
10
|
+
* 调用方(工具)不感知底层:buildVisionBackendsFromHost 按 provider 顺序组装,
|
|
11
11
|
* askWithBackends 依次尝试、保留每个后端的失败现场。
|
|
12
12
|
*/
|
|
13
13
|
import * as adapters from './adapters.js';
|
|
14
|
+
import { hasHostPort } from './host-contract.js';
|
|
14
15
|
|
|
15
16
|
/** 后端接口约定:id / kind / model 只读,analyze(request) → Promise<string> */
|
|
16
17
|
|
|
@@ -39,52 +40,16 @@ export class SelfStackVisionBackend {
|
|
|
39
40
|
}
|
|
40
41
|
}
|
|
41
42
|
|
|
42
|
-
export class
|
|
43
|
-
constructor({
|
|
44
|
-
|
|
45
|
-
}
|
|
46
|
-
get
|
|
47
|
-
|
|
48
|
-
}
|
|
49
|
-
get kind() {
|
|
50
|
-
return 'global';
|
|
51
|
-
}
|
|
52
|
-
get model() {
|
|
53
|
-
return '全局视觉模型';
|
|
54
|
-
}
|
|
55
|
-
async analyze({ question, ref, signal }) {
|
|
56
|
-
const chunks = [];
|
|
57
|
-
for await (const chunk of this.llm.stream({
|
|
58
|
-
sessionId: undefined,
|
|
59
|
-
provider: undefined,
|
|
60
|
-
model: undefined,
|
|
61
|
-
signal,
|
|
62
|
-
messages: [
|
|
63
|
-
{
|
|
64
|
-
role: 'user',
|
|
65
|
-
content: [
|
|
66
|
-
{ type: 'text', text: question },
|
|
67
|
-
{ type: 'image', attachment: ref }
|
|
68
|
-
]
|
|
69
|
-
}
|
|
70
|
-
]
|
|
71
|
-
})) {
|
|
72
|
-
const t = chunk && chunk.delta;
|
|
73
|
-
if (typeof t === 'string' && t) chunks.push(t);
|
|
74
|
-
if (chunks.join('').length > 6000) break;
|
|
75
|
-
}
|
|
76
|
-
return chunks.join('').trim();
|
|
77
|
-
}
|
|
43
|
+
export class HostVisionBackend {
|
|
44
|
+
constructor({ port }) { this.port = port; }
|
|
45
|
+
get id() { return this.port.id || 'host-vision'; }
|
|
46
|
+
get kind() { return this.port.kind || 'global'; }
|
|
47
|
+
get model() { return this.port.model || '宿主视觉模型'; }
|
|
48
|
+
async analyze(request) { return this.port.analyze(request); }
|
|
78
49
|
}
|
|
79
50
|
|
|
80
|
-
/**
|
|
81
|
-
|
|
82
|
-
* 只接受已声明/推断 vision 能力的 provider(由调用方用 capability 过滤)。
|
|
83
|
-
* @param {object} ctx DSH ctx(用于取 llm 服务)
|
|
84
|
-
* @param {{providers: Array, model?: string}} opts model 覆盖全部自持栈的 vision 模型
|
|
85
|
-
* @returns {Array} 有序后端
|
|
86
|
-
*/
|
|
87
|
-
export function buildVisionBackends(ctx, { providers, model }) {
|
|
51
|
+
/** Host Adapter 入口;Command 不读取 DSH ctx。 */
|
|
52
|
+
export function buildVisionBackendsFromHost(host, { providers, model }) {
|
|
88
53
|
const backends = [];
|
|
89
54
|
for (const p of providers || []) {
|
|
90
55
|
if (p && p.type === 'openai') {
|
|
@@ -92,8 +57,9 @@ export function buildVisionBackends(ctx, { providers, model }) {
|
|
|
92
57
|
backends.push(new SelfStackVisionBackend({ provider }));
|
|
93
58
|
}
|
|
94
59
|
}
|
|
95
|
-
|
|
96
|
-
|
|
60
|
+
if (hasHostPort(host, 'visionModel') && typeof host.ports.visionModel.analyze === 'function') {
|
|
61
|
+
backends.push(new HostVisionBackend({ port: host.ports.visionModel }));
|
|
62
|
+
}
|
|
97
63
|
return backends;
|
|
98
64
|
}
|
|
99
65
|
|
|
@@ -116,6 +82,7 @@ export async function askWithBackends(backends, request) {
|
|
|
116
82
|
errors.push({
|
|
117
83
|
backendId: b.id,
|
|
118
84
|
kind: b.kind,
|
|
85
|
+
model: b.model,
|
|
119
86
|
category: err && err.category,
|
|
120
87
|
status: err && err.status,
|
|
121
88
|
message: String((err && err.message) || err)
|
|
@@ -164,7 +131,14 @@ export async function testVisionCapability(backend, { timeoutMs = 10000, signal
|
|
|
164
131
|
const ok = RED_HINTS.test(String(answer || ''));
|
|
165
132
|
return { ok, answer: String(answer || '') };
|
|
166
133
|
} catch (err) {
|
|
167
|
-
return {
|
|
134
|
+
return {
|
|
135
|
+
ok: false,
|
|
136
|
+
answer: '',
|
|
137
|
+
error: String((err && err.message) || err),
|
|
138
|
+
timedOut: !!err.timedOut,
|
|
139
|
+
category: err && err.category,
|
|
140
|
+
status: err && err.status
|
|
141
|
+
};
|
|
168
142
|
} finally {
|
|
169
143
|
if (timer) clearTimeout(timer);
|
|
170
144
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mokuyoaxis/dsh-iris",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "Multi-provider
|
|
3
|
+
"version": "0.1.4",
|
|
4
|
+
"description": "Multi-provider image, video, and speech generation, transcription, visual understanding, and prompt optimization with an integrated Iris workbench for DeepSeek Harness.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.js",
|
|
7
7
|
"exports": {
|
|
@@ -11,10 +11,12 @@
|
|
|
11
11
|
"default": "./lib/client.js"
|
|
12
12
|
},
|
|
13
13
|
"./cordis.patch.yml": "./cordis.patch.yml",
|
|
14
|
-
"./package.json": "./package.json"
|
|
14
|
+
"./package.json": "./package.json",
|
|
15
|
+
"./doctor": "./lib/doctor.js"
|
|
15
16
|
},
|
|
16
17
|
"files": [
|
|
17
18
|
"lib",
|
|
19
|
+
"bin",
|
|
18
20
|
"cordis.patch.yml",
|
|
19
21
|
"README.md",
|
|
20
22
|
"README.en.md",
|
|
@@ -22,13 +24,16 @@
|
|
|
22
24
|
"CHANGELOG.md",
|
|
23
25
|
"screenshots.json",
|
|
24
26
|
"docs",
|
|
25
|
-
"!docs/assets/
|
|
27
|
+
"!docs/assets/diagrams/*.drawio",
|
|
28
|
+
"!docs/releases/0.1.1.md",
|
|
29
|
+
"!docs/releases/0.1.2.md",
|
|
30
|
+
"!docs/releases/0.1.3.md",
|
|
26
31
|
".dsh/skills/iris-verify-ui",
|
|
27
32
|
".dsh/skills/iris-compose-media"
|
|
28
33
|
],
|
|
29
34
|
"dsh": {
|
|
30
35
|
"engines": {
|
|
31
|
-
"dsh": ">=0.1.2-rc.1 <0.1.3-0"
|
|
36
|
+
"dsh": ">=0.1.2-rc.1 <0.1.3-0 || 0.1.5-rc.1"
|
|
32
37
|
},
|
|
33
38
|
"bundle": {
|
|
34
39
|
"patch": "./cordis.patch.yml"
|
|
@@ -47,11 +52,14 @@
|
|
|
47
52
|
"keywords": [
|
|
48
53
|
"deepseek-harness",
|
|
49
54
|
"dsh-plugin",
|
|
50
|
-
"vision",
|
|
51
55
|
"image-generation",
|
|
56
|
+
"video-generation",
|
|
57
|
+
"text-to-speech",
|
|
58
|
+
"transcription",
|
|
59
|
+
"vision",
|
|
52
60
|
"dashscope",
|
|
53
|
-
"
|
|
54
|
-
"
|
|
61
|
+
"prompt-optimization",
|
|
62
|
+
"media-workbench"
|
|
55
63
|
],
|
|
56
64
|
"license": "MIT",
|
|
57
65
|
"engines": {
|
|
@@ -99,5 +107,8 @@
|
|
|
99
107
|
"homepage": "https://github.com/mokuyoaxis/dsh-iris#readme",
|
|
100
108
|
"bugs": {
|
|
101
109
|
"url": "https://github.com/mokuyoaxis/dsh-iris/issues"
|
|
110
|
+
},
|
|
111
|
+
"bin": {
|
|
112
|
+
"dsh-iris": "bin/dsh-iris.js"
|
|
102
113
|
}
|
|
103
114
|
}
|
package/user_guide.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
## 安装
|
|
6
6
|
|
|
7
|
-
你需要 DeepSeek Harness `>=0.1.2-rc.1 <0.1.3-0
|
|
7
|
+
你需要 DeepSeek Harness `>=0.1.2-rc.1 <0.1.3-0` 或 `0.1.5-rc.1`(这两个是已实测窗口,其余预览版未经验证)、PATH 中的 `pnpm`,以及至少一个媒体或视觉服务供应商。dsh-iris 自身要求 Node.js 20.10 或更高版本;如果所用 DSH 版本要求更高,以 DSH 为准。Iris 0.1.1 及后续 0.1.x 不兼容 DSH 0.1.0/0.1.1 的旧客户端 Runtime。
|
|
8
8
|
|
|
9
9
|
从 npm 安装到 Web profile:
|
|
10
10
|
|
|
@@ -82,7 +82,22 @@ Iris 当前支持两类调用路径:
|
|
|
82
82
|
- 视频不会自动提交探针,因为“只确认受理”也可能创建计费任务;应通过“视频生成”操作验证。
|
|
83
83
|
- 转写不使用空样本探针,应通过“音频转写”操作用真实音频验证。
|
|
84
84
|
|
|
85
|
-
|
|
85
|
+
模型不必经过“测”才能使用;正常的真实任务成功也会形成健康证据。模型池按钮只测试被点击的“供应商 × 模型 × 能力”,不会顺带验证同名模型或其他能力。
|
|
86
|
+
|
|
87
|
+
### 健康颜色与时间
|
|
88
|
+
|
|
89
|
+
工作台顶部、功能卡片、模型池和主泡泡共享同一份持久健康快照:
|
|
90
|
+
|
|
91
|
+
| 颜色 | 状态 | 如何得到 |
|
|
92
|
+
|---|---|---|
|
|
93
|
+
| 灰色 | 未配置 | 没有启用且带 API Key 的当前候选;移除 Key 后也回到灰色 |
|
|
94
|
+
| 蓝色 | 已配置,待验证 | 配置可用于路由,但尚无 7 天内成功证据,或旧成功已经过期 |
|
|
95
|
+
| 绿色 | 近期验证成功 | 显式实测或真实任务在 7 天内成功 |
|
|
96
|
+
| 暗红色 | 认证失败 | 最近出现明确 401、403 或认证/权限错误 |
|
|
97
|
+
|
|
98
|
+
绿色旁显示的是最近成功时间,红色旁显示的是最近决定性认证失败时间。修改 API Key、Base URL、协议、供应商类型或能力模型会使相关旧证据失效。429/额度限制、网络、5xx、内容安全、取消和受理未知不会把近期绿色改红;Iris 也不会定时后台探测或为了点亮状态产生隐形费用。
|
|
99
|
+
|
|
100
|
+
有多条 failover 路径时,只要一条近期成功,能力就是绿色;没有绿色但有待验证路径时为蓝色;只有全部已配置路径都明确认证失败时才为暗红。没有路径则为灰色。完整契约见 [Provider 与能力健康状态](docs/PROVIDER_HEALTH.md)。
|
|
86
101
|
|
|
87
102
|
## 能力分配和故障转移
|
|
88
103
|
|
|
@@ -184,6 +199,16 @@ Iris 工作台中的文件字段提供三种方式:
|
|
|
184
199
|
|
|
185
200
|
从 0.1.2 起,插件会在 DSH Skill registry 可用时自动注册 `iris-verify-ui` 和 `iris-compose-media`,不要求会话工作区位于本仓库,也不需要用户复制 `.dsh/skills/`。项目目录中存在同名 Skill 时,DSH 仍优先使用项目版本;宿主未提供 Skill registry 时不影响 14 个 Iris 工具。
|
|
186
201
|
|
|
202
|
+
用户想稳定指定方法时,可直接用 DSH 的 `/name` 形式:
|
|
203
|
+
|
|
204
|
+
```text
|
|
205
|
+
/iris-compose-media 分析我上传的产品照,生成同构图海报,再检查是否符合要求
|
|
206
|
+
|
|
207
|
+
/iris-verify-ui 对比当前截图和参考图,定位偏差并给出有证据的结论
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
也可以继续用自然语言让 Agent 自动发现。单步绘图、OCR、转写等无需强行唤起组合 Skill,直接说需求或指定对应 Iris 工具即可。Skill 只规划工具链,不会绕过 Iris 的任务、费用确认和安全边界。
|
|
211
|
+
|
|
187
212
|
## 对话框提示词优化
|
|
188
213
|
|
|
189
214
|
安装并启用 Iris 后,DSH 对话输入区会出现一个没有边框、底色和文字的“🫧”入口。点击后打开半透明玻璃悬浮窗;桌面端靠近输入区,手机窄屏自动变为底部面板,并适配浏览器安全区、可用高度和内部滚动。它独立于 Iris 工作台,可用于普通问答、写作、编程以及图片/视频生成提示词。[查看 Android 16 真机完整流程](docs/screenshots.md)。
|
|
@@ -242,6 +267,21 @@ Iris 工作台中的文件字段提供三种方式:
|
|
|
242
267
|
|
|
243
268
|
Iris 会在会话输入区显示运行中任务,并在 Iris 工作台保留最近任务。长时间生成转入后台后,可以让 Agent 调用 `iris_task_status`,或在工作台中打开任务详情。
|
|
244
269
|
|
|
270
|
+
Task v2 将“供应商是否受理、观察是否继续、远端结果和本地交付”分开记录。观察暂停、受理/结果未知,以及生成成功但交付失败会进入“需要处理”:
|
|
271
|
+
|
|
272
|
+
- **重新观察**:只恢复已有远端任务的轮询,绝不提交新的生成请求。
|
|
273
|
+
- **重新交付**:只重新查询并下载已经成功的远端产物;同步结果没有远端任务 ID 时会拒绝伪恢复。
|
|
274
|
+
- **知情重试**:新建一次可能收费的生成任务,必须独立确认,并在新旧 Task 间记录关联。创建新任务后,原提醒自动归档为“已通过重试处理”,不会继续占用泡泡角标。当前只为能无损还原输入的文生图和文生视频提供按钮;文件输入和可能被截断的文本应从原始输入重新发起。
|
|
275
|
+
- **标为已读 / 恢复提醒**:用户可以隐藏已经理解但暂不处理的提醒,并从历史详情重新打开。已读只影响提醒队列,不会把受理未知伪造成成功、失败或未受理。
|
|
276
|
+
|
|
277
|
+
旧版任务会明确显示“旧任务 · 只读”。只有服务端明确返回 `schemaVersion=1` 才使用该标签;客户端与服务端热更新暂时不同步时,不会把字段缺失的新任务误判为旧任务。
|
|
278
|
+
|
|
279
|
+
### 清除历史与作品库
|
|
280
|
+
|
|
281
|
+
工作台中的作品库独立于任务历史。新落盘媒体会自动入库;首次升级会接回已有 `outputs/`,也可以随时点击“找回本地作品”重新扫描。清空已完成任务或清理旧任务只删除任务状态、Prompt、错误与重试记录,作品仍可在工作台和泡泡打开。
|
|
282
|
+
|
|
283
|
+
删除单件作品或清空作品库会删除实际媒体文件,需要独立确认;相关任务记录不会连带删除,但其中的媒体会无法打开。“删除孤儿产物”不会触碰已入库作品。重要作品仍应另行备份,详见[作品库 v0](docs/ARTIFACT_LIBRARY.md)。收藏、标签和搜索将在完整 Artifact Manifest 之后实现。
|
|
284
|
+
|
|
245
285
|
默认数据目录:
|
|
246
286
|
|
|
247
287
|
| 路径 | 内容 |
|
|
@@ -249,6 +289,7 @@ Iris 会在会话输入区显示运行中任务,并在 Iris 工作台保留最
|
|
|
249
289
|
| `$DSH_HOME/iris/v1/outputs/` | 图片、音频和视频产物 |
|
|
250
290
|
| `$DSH_HOME/iris/v1/uploads/` | 浏览器上传的临时输入 |
|
|
251
291
|
| `$DSH_HOME/iris/v1/tasks.json` | 任务状态与附件索引 |
|
|
292
|
+
| `$DSH_HOME/iris/v1/artifacts.json` | 作品库最小索引与随机访问令牌,不含 Prompt 和任务关系 |
|
|
252
293
|
| `$DSH_HOME/iris/v1/providers.json` | 供应商、模型池和能力分配 |
|
|
253
294
|
| `$DSH_HOME/iris/v1/prompt-optimizer.json` | 提示词优化器的用户 JSON 配置 |
|
|
254
295
|
|
|
@@ -260,6 +301,25 @@ IRIS_TRUSTED_HOSTS="dsh.example.com" DSH_WEB_BASE="https://dsh.example.com" dsh
|
|
|
260
301
|
|
|
261
302
|
列表用逗号分隔,可填写 `host` 或精确的 `host:port`;反向代理应保留正确的 Host。`IRIS_TRUSTED_HOSTS` 只防止意外 Host 暴露,不验证用户身份。只要服务位于公网或不可信网络,就必须由反向代理或 DSH 部署层提供 HTTPS 和认证,不能把随机媒体令牌当作登录机制。
|
|
262
303
|
|
|
304
|
+
## 离线 Doctor
|
|
305
|
+
|
|
306
|
+
运行以下命令不会启动 DSH,也不会发送任何供应商请求:
|
|
307
|
+
|
|
308
|
+
```bash
|
|
309
|
+
npx @mokuyoaxis/dsh-iris doctor
|
|
310
|
+
npx @mokuyoaxis/dsh-iris doctor --json
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
已安装包也可以直接运行 `dsh-iris doctor`。退出码为 `0`(正常)、`1`(警告)和 `2`(硬错误)。Doctor 会执行一个随后立即删除的本地写入探针,并检查配置、任务、能力分配、临时文件和产物引用;输出不含完整 API Key。离线模式无法检查 DSH 工具/客户端是否已经装载,也不会用付费请求验证 Provider。
|
|
314
|
+
|
|
315
|
+
## Host Doctor
|
|
316
|
+
|
|
317
|
+
DSH 运行后,打开“设置 → Iris 工作台 → 宿主诊断”。卡片会自动检查当前 DSH 版本、Iris 服务端和客户端版本、14 个工具、两项随包 Skill、四组 Web 路由、四个 UI Slot,以及 Browser、附件、会话和宿主模型端口;点击“刷新”可重新读取,展开项可查看全部结果。需要原始 JSON 时,可在已经完成 DSH Web 认证的同一浏览器访问 `/iris/api/doctor`。
|
|
318
|
+
|
|
319
|
+
Host Doctor 不打开 Browser、不读取附件或会话、不调用模型,也不请求供应商。报告中的 `exitCode` 是诊断严重度,不是 HTTP 状态:`0` 全部健康,`1` 有可降级警告,`2` 有硬错误。未安装 HTML Browser 时出现一条 Browser 警告是预期降级;如果提示尚未收到客户端握手,刷新 DSH 页面后再点“刷新”。若显示 `not found`,通常是前端已更新而 DSH 后端仍运行旧插件代码,应重启 DSH 后再刷新页面。
|
|
320
|
+
|
|
321
|
+
Host Doctor 显示通过,只代表“插件与宿主接口已正确装载”,不代表 API Key 或某个模型可调用。供应商侧应看四色能力健康,并在模型池中显式实测或完成一项真实任务。完整字段和安全边界见 [Host Doctor](docs/HOST_DOCTOR.md),两类检查的区别见 [Provider 与能力健康状态](docs/PROVIDER_HEALTH.md)。
|
|
322
|
+
|
|
263
323
|
## 可选依赖
|
|
264
324
|
|
|
265
325
|
视频抽帧和视频摘要依赖 PATH 中的 `ffmpeg` 与 `ffprobe`。缺少它们只会禁用这两项能力,不影响生成、看图、OCR 或语音工具。
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<mxfile host="iris-docs"><diagram id="iris-architecture" name="页 1"><mxGraphModel dx="1000" dy="700" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1180" pageHeight="800" math="0" shadow="0"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="host" value="DeepSeek Harness 宿主进程 · Iris 插件(复用宿主工具 / 路由 / 生命周期服务)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#b9c2ce;verticalAlign=top;align=left;spacingLeft=10;spacingTop=6;fontColor=#5b6472;fontSize=12;" vertex="1" parent="1"><mxGeometry x="36" y="96" width="1108" height="560" as="geometry"/></mxCell><mxCell id="tools" value="Agent 工具(14 个)<br>iris_draw_image · iris_generate_video · …" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f6f8;strokeColor=#b9c2ce;fontColor=#1f2328;fontSize=12;" vertex="1" parent="1"><mxGeometry x="66" y="138" width="300" height="72" as="geometry"/></mxCell><mxCell id="cards" value="GUI 动作卡<br>会话内的 Iris 操作入口" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f6f8;strokeColor=#b9c2ce;fontColor=#1f2328;fontSize=12;" vertex="1" parent="1"><mxGeometry x="440" y="138" width="300" height="72" as="geometry"/></mxCell><mxCell id="bench" value="Iris 工作台(三座位)<br>设置 · 进度 · 悬浮泡泡" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f6f8;strokeColor=#b9c2ce;fontColor=#1f2328;fontSize=12;" vertex="1" parent="1"><mxGeometry x="790" y="138" width="290" height="72" as="geometry"/></mxCell><mxCell id="actions" value="统一动作层 · lib/actions.js<br>参数校验 · 输入解析(上传 / 会话附件 / 宿主路径)· failover 编排" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef3ff;strokeColor=#4d6bfe;fontColor=#1f2328;fontSize=12;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="200" y="268" width="540" height="74" as="geometry"/></mxCell><mxCell id="models" value="模型池 · lib/models.js + capability.js<br>providerId::modelId 复合身份 · 能力分配 · 有序候选" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef3ff;strokeColor=#4d6bfe;fontColor=#1f2328;fontSize=12;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="66" y="396" width="430" height="74" as="geometry"/></mxCell><mxCell id="adapters" value="Provider 适配 · lib/adapters.js<br>DashScope 媒体协议 · OpenAI Images 兼容" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef3ff;strokeColor=#4d6bfe;fontColor=#1f2328;fontSize=12;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="550" y="396" width="430" height="74" as="geometry"/></mxCell><mxCell id="tasks" value="任务系统 · lib/tasks.js<br>异步轮询 · 重启恢复 · 取消传播" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eaf7ef;strokeColor=#2e9e5b;fontColor=#1f2328;fontSize=12;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="66" y="524" width="340" height="74" as="geometry"/></mxCell><mxCell id="files" value="文件与媒体 · lib/media.js<br>uploads/ outputs/ · 令牌媒体链接 · Range 流式" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eaf7ef;strokeColor=#2e9e5b;fontColor=#1f2328;fontSize=12;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="430" y="524" width="300" height="74" as="geometry"/></mxCell><mxCell id="client" value="Web 客户端 · lib/client.js<br>三座位 UI · 共享状态订阅 + SSE" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef3ff;strokeColor=#4d6bfe;fontColor=#1f2328;fontSize=12;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="790" y="524" width="290" height="74" as="geometry"/></mxCell><mxCell id="skillreg" value="Skill registry<br>随包注册 iris-verify-ui / iris-compose-media" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f6f8;strokeColor=#b9c2ce;fontColor=#1f2328;fontSize=12;" vertex="1" parent="1"><mxGeometry x="790" y="268" width="290" height="74" as="geometry"/></mxCell><mxCell id="datanote" value="本地数据 · $DSH_HOME/iris/v1/<br>providers.json · tasks.json · uploads/ · outputs/(POSIX 0700 / 0600)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#b9c2ce;fontColor=#5b6472;fontSize=11;dashed=1;" vertex="1" parent="1"><mxGeometry x="66" y="690" width="470" height="56" as="geometry"/></mxCell><mxCell id="providers" value="媒体 / 视觉服务商<br>DashScope 百炼 · OpenAI Images 兼容服务(凭据只发往官方 HTTPS 域名)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f6f8;strokeColor=#b9c2ce;fontColor=#1f2328;fontSize=12;" vertex="1" parent="1"><mxGeometry x="580" y="706" width="560" height="64" as="geometry"/></mxCell><mxCell id="c1" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#6b7686;strokeWidth=1.5;fontColor=#5b6472;fontSize=11;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=0.5;entryY=0;exitDx=0;exitDy=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="tools" target="actions"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="216" y="239"/><mxPoint x="308" y="239"/></Array></mxGeometry></mxCell><mxCell id="c2" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#6b7686;strokeWidth=1.5;fontColor=#5b6472;fontSize=11;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=0.5;entryY=0;exitDx=0;exitDy=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="cards" target="actions"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="590" y="239"/><mxPoint x="470" y="239"/></Array></mxGeometry></mxCell><mxCell id="c3" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#6b7686;strokeWidth=1.5;fontColor=#5b6472;fontSize=11;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=0.5;entryY=0;exitDx=0;exitDy=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="bench" target="actions"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="848" y="239"/><mxPoint x="740" y="239"/></Array></mxGeometry></mxCell><mxCell id="c4" value="选择候选模型" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#6b7686;strokeWidth=1.5;fontColor=#5b6472;fontSize=11;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=0.5;entryY=0;exitDx=0;exitDy=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="actions" target="models"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="362" y="369"/><mxPoint x="281" y="369"/></Array></mxGeometry></mxCell><mxCell id="c5" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#6b7686;strokeWidth=1.5;fontColor=#5b6472;fontSize=11;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=0.5;entryY=0;exitDx=0;exitDy=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="actions" target="adapters"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="578" y="369"/><mxPoint x="765" y="369"/></Array></mxGeometry></mxCell><mxCell id="c6" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#6b7686;strokeWidth=1.5;fontColor=#5b6472;fontSize=11;labelBackgroundColor=#ffffff;exitX=1;exitY=0.5;entryX=0;entryY=0.5;exitDx=0;exitDy=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="models" target="adapters"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="c7" value="创建任务" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#6b7686;strokeWidth=1.5;fontColor=#5b6472;fontSize=11;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=0.5;entryY=0;exitDx=0;exitDy=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="actions" target="tasks"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="524" y="480"/><mxPoint x="236" y="480"/></Array></mxGeometry></mxCell><mxCell id="c8" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#6b7686;strokeWidth=1.5;fontColor=#5b6472;fontSize=11;labelBackgroundColor=#ffffff;exitX=1;exitY=0.5;entryX=0;entryY=0.5;exitDx=0;exitDy=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="tasks" target="files"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="c9" value="状态事件" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#6b7686;strokeWidth=1.5;fontColor=#5b6472;fontSize=11;labelBackgroundColor=#ffffff;dashed=1;exitX=0.5;exitY=1;entryX=0.5;entryY=1;exitDx=0;exitDy=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="tasks" target="client"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="236" y="640"/><mxPoint x="935" y="640"/></Array></mxGeometry></mxCell><mxCell id="c10" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#6b7686;strokeWidth=1.5;fontColor=#5b6472;fontSize=11;labelBackgroundColor=#ffffff;dashed=1;exitX=0.5;exitY=1;entryX=0.5;entryY=0;exitDx=0;exitDy=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="bench" target="skillreg"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="c11" value="HTTPS" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#6b7686;strokeWidth=1.5;fontColor=#5b6472;fontSize=11;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=0.5;entryY=0;exitDx=0;exitDy=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="adapters" target="providers"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="765" y="676"/><mxPoint x="860" y="676"/></Array></mxGeometry></mxCell></root></mxGraphModel></diagram></mxfile>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<mxfile host="iris-docs"><diagram id="iris-task-lifecycle" name="页 1"><mxGraphModel dx="1000" dy="700" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1240" pageHeight="740" math="0" shadow="0"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="start" value="Agent 工具 / GUI 动作卡<br>提交生成请求" style="rounded=1;arcSize=50;whiteSpace=wrap;html=1;fillColor=#f5f6f8;strokeColor=#b9c2ce;fontColor=#1f2328;fontSize=12;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="40" y="300" width="180" height="60" as="geometry"/></mxCell><mxCell id="create" value="创建本地任务<br>status = running" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef3ff;strokeColor=#4d6bfe;fontColor=#1f2328;fontSize=12;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="268" y="300" width="180" height="60" as="geometry"/></mxCell><mxCell id="attempt" value="提交供应商(Attempt)<br>上传 · 提交 · 同步生成" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff6e5;strokeColor=#c98a1b;fontColor=#1f2328;fontSize=12;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="496" y="298" width="220" height="64" as="geometry"/></mxCell><mxCell id="decide" value="远端受理?" style="rhombus;whiteSpace=wrap;html=1;fillColor=#eef3ff;strokeColor=#4d6bfe;fontColor=#1f2328;fontSize=12;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="764" y="280" width="180" height="100" as="geometry"/></mxCell><mxCell id="accepted" value="已受理<br>remoteTaskId 落盘" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eaf7ef;strokeColor=#2e9e5b;fontColor=#1f2328;fontSize=12;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="996" y="300" width="200" height="60" as="geometry"/></mxCell><mxCell id="failover" value="failover:切换下一候选模型" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fceded;strokeColor=#c94f4f;fontColor=#1f2328;fontSize=12;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="496" y="140" width="220" height="58" as="geometry"/></mxCell><mxCell id="exhausted" value="候选耗尽<br>任务失败" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fceded;strokeColor=#c94f4f;fontColor=#1f2328;fontSize=12;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="240" y="141" width="200" height="56" as="geometry"/></mxCell><mxCell id="watch" value="后台轮询盯守<br>重启后自动接管 running 任务" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef3ff;strokeColor=#4d6bfe;fontColor=#1f2328;fontSize=12;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="700" y="440" width="240" height="56" as="geometry"/></mxCell><mxCell id="succeeded" value="succeeded<br>产物转存 DSH 附件 + 令牌媒体链接" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eaf7ef;strokeColor=#2e9e5b;fontColor=#1f2328;fontSize=12;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="700" y="560" width="240" height="60" as="geometry"/></mxCell><mxCell id="failed" value="failed<br>保留错误说明" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fceded;strokeColor=#c94f4f;fontColor=#1f2328;fontSize=12;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="460" y="560" width="190" height="60" as="geometry"/></mxCell><mxCell id="canceled" value="canceled<br>取消信号传播" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f6f8;strokeColor=#b9c2ce;fontColor=#1f2328;fontSize=12;" vertex="1" parent="1"><mxGeometry x="230" y="560" width="180" height="60" as="geometry"/></mxCell><mxCell id="note1" value="黄金规则:远端受理后绝不自动重提<br>重提只发生在提交阶段的模型候选切换,避免重复计费" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#b9c2ce;fontColor=#5b6472;fontSize=11;dashed=1;" vertex="1" parent="1"><mxGeometry x="40" y="650" width="560" height="64" as="geometry"/></mxCell><mxCell id="note2" value="启动恢复与取消<br>有 remoteTaskId 的任务继续盯守;孤儿提交清理为 failed;取消传播到本地等待与轮询" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#b9c2ce;fontColor=#5b6472;fontSize=11;dashed=1;" vertex="1" parent="1"><mxGeometry x="640" y="650" width="556" height="64" as="geometry"/></mxCell><mxCell id="c1" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#6b7686;strokeWidth=1.5;fontColor=#5b6472;fontSize=11;labelBackgroundColor=#ffffff;exitX=1;exitY=0.5;entryX=0;entryY=0.5;exitDx=0;exitDy=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="start" target="create"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="c2" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#6b7686;strokeWidth=1.5;fontColor=#5b6472;fontSize=11;labelBackgroundColor=#ffffff;exitX=1;exitY=0.5;entryX=0;entryY=0.5;exitDx=0;exitDy=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="create" target="attempt"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="c3" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#6b7686;strokeWidth=1.5;fontColor=#5b6472;fontSize=11;labelBackgroundColor=#ffffff;exitX=1;exitY=0.5;entryX=0;entryY=0.5;exitDx=0;exitDy=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="attempt" target="decide"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="c4" value="是" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#6b7686;strokeWidth=1.5;fontColor=#5b6472;fontSize=11;labelBackgroundColor=#ffffff;exitX=1;exitY=0.5;entryX=0;entryY=0.5;exitDx=0;exitDy=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="decide" target="accepted"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="c5" value="否" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#6b7686;strokeWidth=1.5;fontColor=#5b6472;fontSize=11;labelBackgroundColor=#ffffff;exitX=0.5;exitY=0;entryX=1;entryY=0.5;exitDx=0;exitDy=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="decide" target="failover"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="854" y="169"/><mxPoint x="716" y="169"/></Array></mxGeometry></mxCell><mxCell id="c6" value="重试提交" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#6b7686;strokeWidth=1.5;fontColor=#5b6472;fontSize=11;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=0.5;entryY=0;exitDx=0;exitDy=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="failover" target="attempt"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="c7" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#6b7686;strokeWidth=1.5;fontColor=#5b6472;fontSize=11;labelBackgroundColor=#ffffff;exitX=0;exitY=0.5;entryX=1;entryY=0.5;exitDx=0;exitDy=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="failover" target="exhausted"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="c8" value="转入盯守" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#6b7686;strokeWidth=1.5;fontColor=#5b6472;fontSize=11;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=1;entryY=0.5;exitDx=0;exitDy=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="accepted" target="watch"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="1096" y="468"/><mxPoint x="940" y="468"/></Array></mxGeometry></mxCell><mxCell id="c9" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#6b7686;strokeWidth=1.5;fontColor=#5b6472;fontSize=11;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=0.5;entryY=0;exitDx=0;exitDy=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="watch" target="succeeded"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="c10" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#6b7686;strokeWidth=1.5;fontColor=#5b6472;fontSize=11;labelBackgroundColor=#ffffff;dashed=1;exitX=0.5;exitY=1;entryX=0.5;entryY=0;exitDx=0;exitDy=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="watch" target="failed"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="760" y="534"/><mxPoint x="555" y="534"/></Array></mxGeometry></mxCell><mxCell id="c11" value="轮询耗尽 / 取消 / 错误" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#6b7686;strokeWidth=1.5;fontColor=#5b6472;fontSize=11;labelBackgroundColor=#ffffff;dashed=1;exitX=0;exitY=0.5;entryX=0.5;entryY=0;exitDx=0;exitDy=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="watch" target="canceled"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="660" y="468"/><mxPoint x="660" y="524"/><mxPoint x="320" y="524"/></Array></mxGeometry></mxCell></root></mxGraphModel></diagram></mxfile>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<mxfile host="iris-docs"><diagram id="iris-workflow-compose" name="页 1"><mxGraphModel dx="1000" dy="700" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1150" pageHeight="500" math="0" shadow="0"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="src" value="源图片<br>宿主路径 / 会话附件" style="rounded=1;arcSize=50;whiteSpace=wrap;html=1;fillColor=#f5f6f8;strokeColor=#b9c2ce;fontColor=#1f2328;fontSize=12;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="40" y="116" width="190" height="66" as="geometry"/></mxCell><mxCell id="look" value="iris_look_at_image<br>结构化观察:主体 · 构图 · 色彩 · 文字" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef3ff;strokeColor=#4d6bfe;fontColor=#1f2328;fontSize=12;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="280" y="116" width="250" height="66" as="geometry"/></mxCell><mxCell id="prompt" value="生成自包含提示词<br>区分原图事实与本次改动要求" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef3ff;strokeColor=#4d6bfe;fontColor=#1f2328;fontSize=12;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="580" y="116" width="250" height="66" as="geometry"/></mxCell><mxCell id="draw" value="iris_draw_image<br>付费步骤 · 按产物数计" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff6e5;strokeColor=#c98a1b;fontColor=#1f2328;fontSize=12;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="880" y="116" width="230" height="66" as="geometry"/></mxCell><mxCell id="review" value="iris_relook_attachment<br>对照原始需求逐项复核" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eef3ff;strokeColor=#4d6bfe;fontColor=#1f2328;fontSize=12;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="880" y="286" width="230" height="66" as="geometry"/></mxCell><mxCell id="decide" value="与需求一致?" style="rhombus;whiteSpace=wrap;html=1;fillColor=#eef3ff;strokeColor=#4d6bfe;fontColor=#1f2328;fontSize=12;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="600" y="272" width="180" height="94" as="geometry"/></mxCell><mxCell id="deliver" value="交付产物<br>attachment id + 任务记录 + 媒体链接" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#eaf7ef;strokeColor=#2e9e5b;fontColor=#1f2328;fontSize=12;strokeWidth=1.5;" vertex="1" parent="1"><mxGeometry x="320" y="278" width="220" height="82" as="geometry"/></mxCell><mxCell id="note1" value="纪律:只在缺失会改变结果时提问;复核不通过才重绘;生成前明确用途与比例;保留 attachment id 与任务记录供后续步骤复用" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#b9c2ce;fontColor=#5b6472;fontSize=11;dashed=1;" vertex="1" parent="1"><mxGeometry x="40" y="408" width="1070" height="40" as="geometry"/></mxCell><mxCell id="c1" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#6b7686;strokeWidth=1.5;fontColor=#5b6472;fontSize=11;labelBackgroundColor=#ffffff;exitX=1;exitY=0.5;entryX=0;entryY=0.5;exitDx=0;exitDy=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="src" target="look"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="c2" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#6b7686;strokeWidth=1.5;fontColor=#5b6472;fontSize=11;labelBackgroundColor=#ffffff;exitX=1;exitY=0.5;entryX=0;entryY=0.5;exitDx=0;exitDy=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="look" target="prompt"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="c3" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#6b7686;strokeWidth=1.5;fontColor=#5b6472;fontSize=11;labelBackgroundColor=#ffffff;exitX=1;exitY=0.5;entryX=0;entryY=0.5;exitDx=0;exitDy=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="prompt" target="draw"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="c4" value="需要复核" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#6b7686;strokeWidth=1.5;fontColor=#5b6472;fontSize=11;labelBackgroundColor=#ffffff;exitX=0.5;exitY=1;entryX=0.5;entryY=0;exitDx=0;exitDy=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="draw" target="review"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="c5" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#6b7686;strokeWidth=1.5;fontColor=#5b6472;fontSize=11;labelBackgroundColor=#ffffff;exitX=0;exitY=0.5;entryX=1;entryY=0.5;exitDx=0;exitDy=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="review" target="decide"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="c6" value="一致" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#6b7686;strokeWidth=1.5;fontColor=#5b6472;fontSize=11;labelBackgroundColor=#ffffff;exitX=0;exitY=0.5;entryX=1;entryY=0.5;exitDx=0;exitDy=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="decide" target="deliver"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="c7" value="不一致 · 仅针对具体偏差重生成" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#6b7686;strokeWidth=1.5;fontColor=#5b6472;fontSize=11;labelBackgroundColor=#ffffff;dashed=1;exitX=0.5;exitY=0;entryX=0.5;entryY=1;exitDx=0;exitDy=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="decide" target="prompt"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="690" y="232"/><mxPoint x="705" y="232"/></Array></mxGeometry></mxCell></root></mxGraphModel></diagram></mxfile>
|
package/docs/releases/0.1.1.md
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
Iris v0.1.1 is a compatibility and hardening release of the media and visual
|
|
2
|
-
workspace for DeepSeek Harness, targeting DSH `>=0.1.2-rc.1 <0.1.3-0`.
|
|
3
|
-
|
|
4
|
-
## Highlights
|
|
5
|
-
- Register the client under the full npm package name, fixing a load failure
|
|
6
|
-
on DSH 0.1.2+ Web clients.
|
|
7
|
-
- Raise the minimum Node.js to 20.10; the image dependency requires JSON
|
|
8
|
-
import attributes that 20.9 cannot parse.
|
|
9
|
-
- The workbench now auto-detects media protocols with an explicit override,
|
|
10
|
-
and probes models per capability with confirmation before any paid call.
|
|
11
|
-
|
|
12
|
-
## Reliability and data safety
|
|
13
|
-
- Corrupted persistence files are quarantined with the original evidence
|
|
14
|
-
preserved and rebuilt safely, instead of crashing or silently losing updates.
|
|
15
|
-
- Large media downloads use streaming atomic writes; failed downloads clean
|
|
16
|
-
up their temporary files.
|
|
17
|
-
- Legacy ai-paint configuration is imported only when `IRIS_IMPORT_WORKBENCH_CONFIG`
|
|
18
|
-
is set explicitly; default startup no longer reads external paths.
|
|
19
|
-
- DashScope credentials are bound to official HTTPS endpoints before any
|
|
20
|
-
request is sent.
|
|
21
|
-
- On POSIX, Iris state is stored under `0700` directories and `0600` files;
|
|
22
|
-
`/iris/*` accepts loopback hosts only unless `IRIS_TRUSTED_HOSTS` is configured.
|
|
23
|
-
|
|
24
|
-
## Testing and release pipeline
|
|
25
|
-
- The full regression suite runs on a Linux/Windows × Node.js 20.10/22 matrix,
|
|
26
|
-
with a pure Node.js scheduler, per-file isolation, and automatic temp cleanup.
|
|
27
|
-
- Windows support hardened end to end: LF-forced checkout, CRLF-tolerant
|
|
28
|
-
parsers, and cross-platform module paths.
|
|
29
|
-
- Releases are now tag-driven: pushing `vX.Y.Z` runs the full suite, verifies
|
|
30
|
-
the tag against `package.json`, creates this Release with the packaged
|
|
31
|
-
tarball, and publishes to npm with provenance.
|
|
32
|
-
|
|
33
|
-
## Install
|
|
34
|
-
```bash
|
|
35
|
-
dsh plugin --profile web add @mokuyoaxis/dsh-iris
|
|
36
|
-
dsh web
|
|
37
|
-
```
|
|
38
|
-
> Requires Node.js 20.10.0 or later and DSH `>=0.1.2-rc.1`. Video frame
|
|
39
|
-
> extraction and video summaries require ffmpeg and ffprobe.
|
|
40
|
-
|
|
41
|
-
See the [README](https://github.com/mokuyoaxis/dsh-iris#readme) and
|
|
42
|
-
[User Guide](https://github.com/mokuyoaxis/dsh-iris/blob/v0.1.1/user_guide.md)
|
|
43
|
-
for provider and model configuration.
|
|
44
|
-
|
|
45
|
-
Image, video, and speech operations may incur charges from the configured provider.
|
|
46
|
-
|
|
47
|
-
## Package
|
|
48
|
-
- npm: [@mokuyoaxis/dsh-iris](https://www.npmjs.com/package/@mokuyoaxis/dsh-iris)
|
|
49
|
-
- Changelog: [v0.1.1](https://github.com/mokuyoaxis/dsh-iris/blob/v0.1.1/CHANGELOG.md)
|
|
50
|
-
|
|
51
|
-
**Full Changelog**: https://github.com/mokuyoaxis/dsh-iris/compare/v0.1.0...v0.1.1
|
package/docs/releases/0.1.2.md
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
# Iris Media for DSH v0.1.2
|
|
2
|
-
|
|
3
|
-
This release makes Iris easier to discover and use from a normal DSH installation, while giving prompt optimization a first-class place in the conversation composer.
|
|
4
|
-
|
|
5
|
-
## Highlights
|
|
6
|
-
|
|
7
|
-
- Adds a borderless 🫧 prompt-optimization control to the DSH composer. It supports general, image, video, and S2V prompts; previews before write-back; never sends automatically; and uses a glass, mobile-safe panel.
|
|
8
|
-
- Adds an independent, private JSON configuration for optimizer prompts, target templates, model routing, reasoning strategy, and output budget, with import, export, reset, disable, and re-enable controls.
|
|
9
|
-
- Defaults optimizer reasoning to `off-if-supported`, using DSH model metadata instead of inheriting the session's High/Low setting and consuming the visible output budget.
|
|
10
|
-
- Registers the bundled `iris-verify-ui` and `iris-compose-media` Skills when the plugin starts, so npm users can discover them outside this repository.
|
|
11
|
-
- Uses the unique Cordis row ID `mokuyoaxis-dsh-iris`, avoiding collision with the unrelated unscoped `dsh-iris` package.
|
|
12
|
-
- Adds an English README, architecture and workflow diagrams, an Android 16 screenshot gallery, and a real Iris image generated through the documented prompt-to-artifact loop.
|
|
13
|
-
- Keeps the floating quick panel focused on running tasks and recent successful artifacts; failed and canceled history remains available in the full workbench.
|
|
14
|
-
- Makes capability indicators immediately reflect configured providers without requiring every action card to be opened first; an action error dims its indicator.
|
|
15
|
-
|
|
16
|
-
## Compatibility
|
|
17
|
-
|
|
18
|
-
- DeepSeek Harness: `>=0.1.2-rc.1 <0.1.3-0`
|
|
19
|
-
- Node.js: `>=20.10.0`
|
|
20
|
-
- Verified locally on Linux ARM64 under Android 16 Termux/PRoot Debian with Node.js 22.23.2 and DSH 0.1.2-rc.1.
|
|
21
|
-
|
|
22
|
-
## Upgrade note
|
|
23
|
-
|
|
24
|
-
Normal plugin upgrades need no manual migration. If a personal `cordis.patch.yml` explicitly overrides the old row ID `dsh-iris`, change that override to `mokuyoaxis-dsh-iris`.
|
|
25
|
-
|
|
26
|
-
The npm package remains `@mokuyoaxis/dsh-iris`; the unscoped `dsh-iris` name belongs to another project.
|