@mokuyoaxis/dsh-iris 0.1.0 → 0.1.2
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/CHANGELOG.md +72 -1
- package/README.en.md +245 -0
- package/README.md +81 -13
- package/cordis.patch.yml +1 -1
- package/docs/ROADMAP.md +49 -21
- package/docs/assets/diagrams/iris-architecture.drawio +1 -0
- package/docs/assets/diagrams/iris-architecture.png +0 -0
- package/docs/assets/diagrams/iris-architecture.svg +63 -0
- package/docs/assets/diagrams/iris-task-lifecycle.drawio +1 -0
- package/docs/assets/diagrams/iris-task-lifecycle.png +0 -0
- package/docs/assets/diagrams/iris-task-lifecycle.svg +64 -0
- package/docs/assets/diagrams/iris-workflow-compose.drawio +1 -0
- package/docs/assets/diagrams/iris-workflow-compose.png +0 -0
- package/docs/assets/diagrams/iris-workflow-compose.svg +41 -0
- package/docs/assets/examples/iris-flower-generated.webp +0 -0
- package/docs/assets/screenshots/image-task-succeeded.webp +0 -0
- package/docs/assets/screenshots/prompt-general-after.webp +0 -0
- package/docs/assets/screenshots/prompt-general-before.webp +0 -0
- package/docs/assets/screenshots/prompt-general-preview.webp +0 -0
- package/docs/assets/screenshots/prompt-image-before.webp +0 -0
- package/docs/assets/screenshots/prompt-image-preview.webp +0 -0
- package/docs/releases/0.1.1.md +51 -0
- package/docs/releases/0.1.2.md +26 -0
- package/docs/screenshots.md +34 -0
- package/lib/actions.js +33 -27
- package/lib/adapters.js +42 -26
- package/lib/api.js +73 -20
- package/lib/bundled-skills.js +62 -0
- package/lib/capability.js +1 -1
- package/lib/client.js +378 -26
- package/lib/config.js +56 -22
- package/lib/guard.js +37 -24
- package/lib/index.js +21 -9
- package/lib/locate.js +1 -1
- package/lib/media-probe.js +4 -4
- package/lib/media.js +1 -1
- package/lib/private-storage.js +77 -0
- package/lib/prompt-optimizer-config.js +170 -0
- package/lib/prompt-optimizer.js +244 -0
- package/lib/provider-protocol.js +25 -0
- package/lib/render.js +3 -2
- package/lib/tasks.js +21 -13
- package/lib/vision.js +2 -2
- package/package.json +25 -17
- package/screenshots.json +6 -0
- package/user_guide.md +97 -11
package/docs/ROADMAP.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 路线图
|
|
2
2
|
|
|
3
|
-
dsh-iris
|
|
3
|
+
dsh-iris 已具备媒体生成、视觉处理和任务管理主流程。长期方向是宿主无关的多模态生产运行时,DSH 是首个受支持宿主。当前仍通过 DSH 插件使用,独立 Core、CLI 和工作台尚未实现。
|
|
4
4
|
|
|
5
5
|
变更详情见[变更记录](../CHANGELOG.md),完整工具清单见[README](../README.md)。
|
|
6
6
|
|
|
@@ -15,42 +15,67 @@ dsh-iris 已具备完整的媒体生成、视觉处理和任务管理主流程
|
|
|
15
15
|
- 浏览器上传、会话附件和宿主路径输入
|
|
16
16
|
- 异步任务恢复、取消传播、SSE 状态更新和授权媒体链接
|
|
17
17
|
- 面向 Agent 与用户的统一视频生成实现
|
|
18
|
-
-
|
|
18
|
+
- 两个随包 Agent Skills:UI 视觉验收与多步骤媒体编排;0.1.2 会在插件启用时自动注册
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
当前发布版本为 `v0.1.2`。0.1.1 完成配置独立、安全与工程收口,并把 Web loader 适配固定到已验证的 DSH `0.1.2-rc.1` 接口;更高预览版在进入支持范围前需要重新运行宿主 canary。
|
|
21
21
|
|
|
22
|
-
##
|
|
22
|
+
## 已完成:0.1.1
|
|
23
|
+
|
|
24
|
+
### 配置独立与工程收口
|
|
25
|
+
|
|
26
|
+
- 对齐公开文档和已发布标签,明确当前能力与未来方向。
|
|
27
|
+
- Iris 独立保存配置;ai-paint 仅作为维护者未公开的本地前身和可选迁移来源,不是用户依赖。停止默认读取,仅保留显式指定本地来源的一次性安全导入。
|
|
28
|
+
- 用 Node.js 调度测试,去除对 POSIX Shell 循环的依赖。
|
|
29
|
+
- 绑定供应商凭据与协议端点,统一私有存储权限和流式原子落盘,并验证损坏配置恢复。
|
|
30
|
+
- 将付费能力实测改为单项显式确认,视频与转写不做空样本自动探针。
|
|
31
|
+
- 默认将 Iris HTTP 路由限制在回环 Host,为反代提供显式信任列表和认证部署说明。
|
|
32
|
+
- 增加 Linux/Windows 与 Node.js 20.10/22 CI 矩阵、发布前测试护栏,并以当前 DSH 预览版完成宿主烟测。
|
|
33
|
+
- 核对打包清单,记录真实环境和未验证平台。
|
|
34
|
+
|
|
35
|
+
## 发布候选
|
|
23
36
|
|
|
24
|
-
### 0.2
|
|
37
|
+
### 0.1.2:可见、可达与唯一身份
|
|
38
|
+
|
|
39
|
+
- 保留 npm 包名 `@mokuyoaxis/dsh-iris`,以 “Iris Media for DSH” 作为展示名,并使用唯一 Cordis 行 ID 避免与另一款 `dsh-iris` 同装冲突。
|
|
40
|
+
- 插件启用时自动注册两项随包 Skill,不要求用户克隆仓库、切换 cwd 或修改默认 Skill 搜索目录。
|
|
41
|
+
- 中英文 README 直接展示已脱敏的 Android 真机截图与代表性生成图,完整流程保留独立画廊;根目录 `screenshots.json` 控制插件市场展示顺序。
|
|
42
|
+
- 在 DSH 对话输入框提供可独立关闭的无框 🫧 提示词优化入口:使用半透明玻璃悬浮窗和窄屏底部面板,支持当前会话/固定模型路由、独立 thinking 策略与保守输出预算、预览写回,以及 JSON 导入导出和恢复默认。
|
|
43
|
+
- 泡泡快捷历史只展示运行中任务与成功产物;功能状态灯不再依赖用户逐张点开卡片。
|
|
44
|
+
- 本版不新增供应商分支,也不声称已完成独立 Core、任务语义 v2 或离线诊断。
|
|
45
|
+
|
|
46
|
+
## 下一步
|
|
25
47
|
|
|
26
|
-
|
|
27
|
-
- 在全新 DeepSeek Harness 环境验证插件装载、客户端入口、工具注册和路由注册。
|
|
28
|
-
- 检查 npm 包内容、公开文档链接和最低 Node.js 版本。
|
|
29
|
-
- 整理版本号、发布日期和升级说明后再创建正式发布。
|
|
48
|
+
### 0.1.3:可信任务与适配边界
|
|
30
49
|
|
|
31
|
-
|
|
50
|
+
- 区分提交未受理、已受理与受理未知,完善 Attempt、取消和恢复语义。
|
|
51
|
+
- 用故障注入验证提交响应丢失、下载和落盘失败时不会重复提交。
|
|
52
|
+
- 定义最小 Host/Provider Adapter 契约、conformance fixture 与 Core 依赖方向守卫。
|
|
53
|
+
- 提供不发送计费请求的离线 `iris doctor`,并公开任务、安全与架构契约。
|
|
54
|
+
- 在具备稳定录制条件后补充真实短视频证据;不以伪造或不稳定链接阻塞 0.1.2。
|
|
32
55
|
|
|
33
|
-
|
|
34
|
-
- 评估按媒体类型调整上传上限,兼顾大视频与远程部署。
|
|
35
|
-
- 在真实 DSH 会话验证 `iris-compose-media` 的触发与停止边界,再决定两个仓库级 Skills 的自动注册方式。
|
|
56
|
+
### 0.2.0:独立 Core 与产物记录
|
|
36
57
|
|
|
37
|
-
|
|
58
|
+
- 统一 Agent、工作台与 CLI 的命令执行核心,将 DSH 集成集中到宿主适配器。
|
|
59
|
+
- 为产物保存内容哈希、来源和派生关系,支持检查与导出。
|
|
60
|
+
- 在未安装 DSH 的干净环境完成本地动作和供应商任务验收。
|
|
61
|
+
- 建立 Iris 正式产品视觉身份:以简约鸢尾花和泡泡为核心母题,完成可缩放 Logo、图标、单色版与深浅色适配,并替换临时字标。
|
|
62
|
+
- 在统一 Provider Adapter 与 conformance 测试稳定后,依次接入 Gemini、Fal,并把 Replicate 排入后续 0.2.x。
|
|
38
63
|
|
|
39
|
-
|
|
64
|
+
### 后续方向
|
|
40
65
|
|
|
41
|
-
-
|
|
42
|
-
-
|
|
43
|
-
-
|
|
44
|
-
- 最近使用文件和更易发现的历史产物入口
|
|
66
|
+
- 0.3:有界、可恢复的媒体工作流,以及用户显式启动的本地 API 和最小独立工作台。
|
|
67
|
+
- 0.4:根据真实消费者需要开放供应商和宿主适配契约。
|
|
68
|
+
- 1.0:冻结经过验证的公共契约和升级策略。版本表示目标聚合点,不代表发布日期承诺。
|
|
45
69
|
|
|
46
70
|
## 兼容性与限制
|
|
47
71
|
|
|
48
|
-
- Node.js 最低版本为 20.
|
|
72
|
+
- Node.js 最低版本为 20.10。
|
|
49
73
|
- 图片处理依赖 `sharp`,非标准 libc 或移动终端环境可能没有可用的预编译包。
|
|
50
74
|
- 视频抽帧与视频摘要依赖 `ffmpeg` 和 `ffprobe`。
|
|
51
75
|
- WSL、远程浏览器和容器部署应优先使用上传或会话附件,避免混淆浏览器路径与宿主路径。
|
|
52
76
|
- HTML 截图运行在离线沙箱中,远程资源和页面脚本不可用。
|
|
53
77
|
- 模型发现只能列出候选项,具体能力需要通过实际请求确认。
|
|
78
|
+
- Node 测试调度器不依赖 Bash;原生 Windows/WSL 完整测试与 DSH 冒烟尚待验证,不因调度器改写而宣称已支持全部平台。
|
|
54
79
|
|
|
55
80
|
## 质量要求
|
|
56
81
|
|
|
@@ -67,6 +92,9 @@ dsh-iris 已具备完整的媒体生成、视觉处理和任务管理主流程
|
|
|
67
92
|
|
|
68
93
|
- 在插件内实现账号、权限或多租户系统。
|
|
69
94
|
- 接管 DeepSeek Harness 的通用聊天模型配置。
|
|
70
|
-
-
|
|
95
|
+
- 由 DSH 插件隐式启动独立后台服务或额外监听端口。
|
|
96
|
+
- 在本地工作台阶段建设公网 SaaS、组织账号和多租户系统。
|
|
71
97
|
- 自动探测全部模型能力并触发可能计费的请求。
|
|
72
98
|
- 仅为未来可能使用的供应商预建没有调用方的适配层。
|
|
99
|
+
- 为 0.1.2 临时接入尚无统一契约与测试基线的新供应商。
|
|
100
|
+
- 为展示效果伪造实机截图、生成结果或短视频证据。
|
|
@@ -0,0 +1 @@
|
|
|
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>
|
|
Binary file
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1180" height="800" viewBox="0 0 1180 800" role="img" aria-label="Iris 架构总览(DSH 插件形态)">
|
|
2
|
+
<defs><marker id="arr" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,0 L10,5 L0,10 z" fill="#6b7686"/></marker></defs>
|
|
3
|
+
<rect width="1180" height="800" fill="#ffffff"/>
|
|
4
|
+
<text x="48" y="52" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="21" font-weight="700" fill="#1f2328">Iris 架构总览(DSH 插件形态)</text>
|
|
5
|
+
<text x="48" y="78" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="13" fill="#5b6472">三个入口共用同一套动作实现;凭据与数据只留在宿主侧,插件不额外监听端口</text>
|
|
6
|
+
<rect x="36" y="96" width="1108" height="560" rx="10" fill="none" stroke="#b9c2ce" stroke-width="1.4"/>
|
|
7
|
+
<text x="50" y="120" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12.5" fill="#5b6472">DeepSeek Harness 宿主进程 · Iris 插件(复用宿主工具 / 路由 / 生命周期服务)</text>
|
|
8
|
+
<path d="M216,210 L216,239 L308,239 L308,268" fill="none" stroke="#6b7686" stroke-width="1.6" marker-end="url(#arr)"/>
|
|
9
|
+
<path d="M590,210 L590,239 L470,239 L470,268" fill="none" stroke="#6b7686" stroke-width="1.6" marker-end="url(#arr)"/>
|
|
10
|
+
<path d="M848,210 L848,239 L740,239 L740,268" fill="none" stroke="#6b7686" stroke-width="1.6" marker-end="url(#arr)"/>
|
|
11
|
+
<path d="M362,342 L362,369 L281,369 L281,396" fill="none" stroke="#6b7686" stroke-width="1.6" marker-end="url(#arr)"/>
|
|
12
|
+
<rect x="321" y="346" width="82" height="19" rx="4" fill="#ffffff"/>
|
|
13
|
+
<text x="362" y="359.5" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" fill="#5b6472">选择候选模型</text>
|
|
14
|
+
<path d="M578,342 L578,369 L765,369 L765,396" fill="none" stroke="#6b7686" stroke-width="1.6" marker-end="url(#arr)"/>
|
|
15
|
+
<path d="M496,433 L550,433" fill="none" stroke="#6b7686" stroke-width="1.6" marker-end="url(#arr)"/>
|
|
16
|
+
<path d="M524,342 L524,480 L236,480 L236,524" fill="none" stroke="#6b7686" stroke-width="1.6" marker-end="url(#arr)"/>
|
|
17
|
+
<rect x="353" y="488.5" width="58" height="19" rx="4" fill="#ffffff"/>
|
|
18
|
+
<text x="382" y="502" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" fill="#5b6472">创建任务</text>
|
|
19
|
+
<path d="M406,561 L430,561" fill="none" stroke="#6b7686" stroke-width="1.6" marker-end="url(#arr)"/>
|
|
20
|
+
<path d="M236,598 L236,640 L935,640 L935,598" fill="none" stroke="#6b7686" stroke-width="1.6" stroke-dasharray="5 4" marker-end="url(#arr)"/>
|
|
21
|
+
<rect x="351" y="620.5" width="58" height="19" rx="4" fill="#ffffff"/>
|
|
22
|
+
<text x="380" y="634" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" fill="#5b6472">状态事件</text>
|
|
23
|
+
<path d="M935,210 L935,268" fill="none" stroke="#6b7686" stroke-width="1.6" stroke-dasharray="5 4" marker-end="url(#arr)"/>
|
|
24
|
+
<path d="M765,470 L765,676 L860,676 L860,706" fill="none" stroke="#6b7686" stroke-width="1.6" marker-end="url(#arr)"/>
|
|
25
|
+
<rect x="790.2" y="666.5" width="43.6" height="19" rx="4" fill="#ffffff"/>
|
|
26
|
+
<text x="812" y="680" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" fill="#5b6472">HTTPS</text>
|
|
27
|
+
<rect x="66" y="138" width="300" height="72" rx="9" fill="#f5f6f8" stroke="#b9c2ce" stroke-width="1.6"/>
|
|
28
|
+
<text x="216" y="170" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="14.5" font-weight="600" fill="#1f2328">Agent 工具(14 个)</text>
|
|
29
|
+
<text x="216" y="190.5" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" font-weight="400" fill="#5b6472">iris_draw_image · iris_generate_video · …</text>
|
|
30
|
+
<rect x="440" y="138" width="300" height="72" rx="9" fill="#f5f6f8" stroke="#b9c2ce" stroke-width="1.6"/>
|
|
31
|
+
<text x="590" y="170" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="14.5" font-weight="600" fill="#1f2328">GUI 动作卡</text>
|
|
32
|
+
<text x="590" y="190.5" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" font-weight="400" fill="#5b6472">会话内的 Iris 操作入口</text>
|
|
33
|
+
<rect x="790" y="138" width="290" height="72" rx="9" fill="#f5f6f8" stroke="#b9c2ce" stroke-width="1.6"/>
|
|
34
|
+
<text x="935" y="170" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="14.5" font-weight="600" fill="#1f2328">Iris 工作台(三座位)</text>
|
|
35
|
+
<text x="935" y="190.5" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" font-weight="400" fill="#5b6472">设置 · 进度 · 悬浮泡泡</text>
|
|
36
|
+
<rect x="200" y="268" width="540" height="74" rx="9" fill="#eef3ff" stroke="#4d6bfe" stroke-width="1.6"/>
|
|
37
|
+
<text x="470" y="301" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="14.5" font-weight="600" fill="#1f2328">统一动作层 · lib/actions.js</text>
|
|
38
|
+
<text x="470" y="321.5" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" font-weight="400" fill="#5b6472">参数校验 · 输入解析(上传 / 会话附件 / 宿主路径)· failover 编排</text>
|
|
39
|
+
<rect x="66" y="396" width="430" height="74" rx="9" fill="#eef3ff" stroke="#4d6bfe" stroke-width="1.6"/>
|
|
40
|
+
<text x="281" y="429" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="14.5" font-weight="600" fill="#1f2328">模型池 · lib/models.js + capability.js</text>
|
|
41
|
+
<text x="281" y="449.5" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" font-weight="400" fill="#5b6472">providerId::modelId 复合身份 · 能力分配 · 有序候选</text>
|
|
42
|
+
<rect x="550" y="396" width="430" height="74" rx="9" fill="#eef3ff" stroke="#4d6bfe" stroke-width="1.6"/>
|
|
43
|
+
<text x="765" y="429" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="14.5" font-weight="600" fill="#1f2328">Provider 适配 · lib/adapters.js</text>
|
|
44
|
+
<text x="765" y="449.5" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" font-weight="400" fill="#5b6472">DashScope 媒体协议 · OpenAI Images 兼容</text>
|
|
45
|
+
<rect x="66" y="524" width="340" height="74" rx="9" fill="#eaf7ef" stroke="#2e9e5b" stroke-width="1.6"/>
|
|
46
|
+
<text x="236" y="557" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="14.5" font-weight="600" fill="#1f2328">任务系统 · lib/tasks.js</text>
|
|
47
|
+
<text x="236" y="577.5" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" font-weight="400" fill="#5b6472">异步轮询 · 重启恢复 · 取消传播</text>
|
|
48
|
+
<rect x="430" y="524" width="300" height="74" rx="9" fill="#eaf7ef" stroke="#2e9e5b" stroke-width="1.6"/>
|
|
49
|
+
<text x="580" y="557" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="14.5" font-weight="600" fill="#1f2328">文件与媒体 · lib/media.js</text>
|
|
50
|
+
<text x="580" y="577.5" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" font-weight="400" fill="#5b6472">uploads/ outputs/ · 令牌媒体链接 · Range 流式</text>
|
|
51
|
+
<rect x="790" y="524" width="290" height="74" rx="9" fill="#eef3ff" stroke="#4d6bfe" stroke-width="1.6"/>
|
|
52
|
+
<text x="935" y="557" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="14.5" font-weight="600" fill="#1f2328">Web 客户端 · lib/client.js</text>
|
|
53
|
+
<text x="935" y="577.5" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" font-weight="400" fill="#5b6472">三座位 UI · 共享状态订阅 + SSE</text>
|
|
54
|
+
<rect x="790" y="268" width="290" height="74" rx="9" fill="#f5f6f8" stroke="#b9c2ce" stroke-width="1.6"/>
|
|
55
|
+
<text x="935" y="301" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="14.5" font-weight="600" fill="#1f2328">Skill registry</text>
|
|
56
|
+
<text x="935" y="321.5" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" font-weight="400" fill="#5b6472">随包注册 iris-verify-ui / iris-compose-media</text>
|
|
57
|
+
<rect x="66" y="690" width="470" height="56" rx="8" fill="#ffffff" stroke="#b9c2ce" stroke-width="1.3" stroke-dasharray="5 4"/>
|
|
58
|
+
<text x="301" y="714" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="14.5" font-weight="600" fill="#1f2328">本地数据 · $DSH_HOME/iris/v1/</text>
|
|
59
|
+
<text x="301" y="734.5" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" font-weight="400" fill="#5b6472">providers.json · tasks.json · uploads/ · outputs/(POSIX 0700 / 0600)</text>
|
|
60
|
+
<rect x="580" y="706" width="560" height="64" rx="9" fill="#f5f6f8" stroke="#b9c2ce" stroke-width="1.6"/>
|
|
61
|
+
<text x="860" y="734" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="14.5" font-weight="600" fill="#1f2328">媒体 / 视觉服务商</text>
|
|
62
|
+
<text x="860" y="754.5" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" font-weight="400" fill="#5b6472">DashScope 百炼 · OpenAI Images 兼容服务(凭据只发往官方 HTTPS 域名)</text>
|
|
63
|
+
</svg>
|
|
@@ -0,0 +1 @@
|
|
|
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>
|
|
Binary file
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1240" height="740" viewBox="0 0 1240 740" role="img" aria-label="生成任务生命周期与受理边界">
|
|
2
|
+
<defs><marker id="arr" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,0 L10,5 L0,10 z" fill="#6b7686"/></marker></defs>
|
|
3
|
+
<rect width="1240" height="740" fill="#ffffff"/>
|
|
4
|
+
<text x="48" y="52" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="21" font-weight="700" fill="#1f2328">生成任务生命周期与受理边界</text>
|
|
5
|
+
<text x="48" y="78" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="13" fill="#5b6472">failover 只发生在上传 / 提交 / 同步生成阶段;远端一旦受理,绝不自动重提</text>
|
|
6
|
+
<path d="M220,330 L268,330" fill="none" stroke="#6b7686" stroke-width="1.6" marker-end="url(#arr)"/>
|
|
7
|
+
<path d="M448,330 L496,330" fill="none" stroke="#6b7686" stroke-width="1.6" marker-end="url(#arr)"/>
|
|
8
|
+
<path d="M716,330 L764,330" fill="none" stroke="#6b7686" stroke-width="1.6" marker-end="url(#arr)"/>
|
|
9
|
+
<path d="M944,330 L996,330" fill="none" stroke="#6b7686" stroke-width="1.6" marker-end="url(#arr)"/>
|
|
10
|
+
<rect x="959" y="320.5" width="22" height="19" rx="4" fill="#ffffff"/>
|
|
11
|
+
<text x="970" y="334" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" fill="#5b6472">是</text>
|
|
12
|
+
<path d="M854,280 L854,169 L716,169 L716,169" fill="none" stroke="#6b7686" stroke-width="1.6" marker-end="url(#arr)"/>
|
|
13
|
+
<rect x="843" y="215" width="22" height="19" rx="4" fill="#ffffff"/>
|
|
14
|
+
<text x="854" y="228.5" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" fill="#5b6472">否</text>
|
|
15
|
+
<path d="M606,198 L606,298" fill="none" stroke="#6b7686" stroke-width="1.6" marker-end="url(#arr)"/>
|
|
16
|
+
<rect x="577" y="238.5" width="58" height="19" rx="4" fill="#ffffff"/>
|
|
17
|
+
<text x="606" y="252" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" fill="#5b6472">重试提交</text>
|
|
18
|
+
<path d="M496,169 L440,169" fill="none" stroke="#6b7686" stroke-width="1.6" marker-end="url(#arr)"/>
|
|
19
|
+
<path d="M1096,360 L1096,468 L940,468 L940,468" fill="none" stroke="#6b7686" stroke-width="1.6" marker-end="url(#arr)"/>
|
|
20
|
+
<rect x="1067" y="404.5" width="58" height="19" rx="4" fill="#ffffff"/>
|
|
21
|
+
<text x="1096" y="418" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" fill="#5b6472">转入盯守</text>
|
|
22
|
+
<path d="M820,496 L820,560" fill="none" stroke="#6b7686" stroke-width="1.6" marker-end="url(#arr)"/>
|
|
23
|
+
<path d="M760,496 L760,534 L555,534 L555,560" fill="none" stroke="#6b7686" stroke-width="1.6" stroke-dasharray="5 4" marker-end="url(#arr)"/>
|
|
24
|
+
<path d="M700,468 L660,468 L660,524 L320,524 L320,560" fill="none" stroke="#6b7686" stroke-width="1.6" stroke-dasharray="5 4" marker-end="url(#arr)"/>
|
|
25
|
+
<rect x="416.84000000000003" y="508.5" width="146.32" height="19" rx="4" fill="#ffffff"/>
|
|
26
|
+
<text x="490" y="522" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" fill="#5b6472">轮询耗尽 / 取消 / 错误</text>
|
|
27
|
+
<rect x="40" y="300" width="180" height="60" rx="30" fill="#eef3ff" stroke="#4d6bfe" stroke-width="1.6"/>
|
|
28
|
+
<text x="130" y="326" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="14.5" font-weight="600" fill="#1f2328">Agent 工具 / GUI 动作卡</text>
|
|
29
|
+
<text x="130" y="346.5" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" font-weight="400" fill="#5b6472">提交生成请求</text>
|
|
30
|
+
<rect x="268" y="300" width="180" height="60" rx="9" fill="#eef3ff" stroke="#4d6bfe" stroke-width="1.6"/>
|
|
31
|
+
<text x="358" y="326" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="14.5" font-weight="600" fill="#1f2328">创建本地任务</text>
|
|
32
|
+
<text x="358" y="346.5" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" font-weight="400" fill="#5b6472">status = running</text>
|
|
33
|
+
<rect x="496" y="298" width="220" height="64" rx="9" fill="#fff6e5" stroke="#c98a1b" stroke-width="1.6"/>
|
|
34
|
+
<text x="606" y="326" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="14.5" font-weight="600" fill="#1f2328">提交供应商(Attempt)</text>
|
|
35
|
+
<text x="606" y="346.5" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" font-weight="400" fill="#5b6472">上传 · 提交 · 同步生成</text>
|
|
36
|
+
<path d="M854,280 L944,330 L854,380 L764,330 Z" fill="#eef3ff" stroke="#4d6bfe" stroke-width="1.6"/>
|
|
37
|
+
<text x="854" y="335.25" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="14.5" font-weight="600" fill="#1f2328">远端受理?</text>
|
|
38
|
+
<rect x="996" y="300" width="200" height="60" rx="9" fill="#eaf7ef" stroke="#2e9e5b" stroke-width="1.6"/>
|
|
39
|
+
<text x="1096" y="326" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="14.5" font-weight="600" fill="#1f2328">已受理</text>
|
|
40
|
+
<text x="1096" y="346.5" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" font-weight="400" fill="#5b6472">remoteTaskId 落盘</text>
|
|
41
|
+
<rect x="496" y="140" width="220" height="58" rx="9" fill="#fceded" stroke="#c94f4f" stroke-width="1.6"/>
|
|
42
|
+
<text x="606" y="174.25" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="14.5" font-weight="600" fill="#1f2328">failover:切换下一候选模型</text>
|
|
43
|
+
<rect x="240" y="141" width="200" height="56" rx="9" fill="#fceded" stroke="#c94f4f" stroke-width="1.6"/>
|
|
44
|
+
<text x="340" y="165" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="14.5" font-weight="600" fill="#1f2328">候选耗尽</text>
|
|
45
|
+
<text x="340" y="185.5" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" font-weight="400" fill="#5b6472">任务失败</text>
|
|
46
|
+
<rect x="700" y="440" width="240" height="56" rx="9" fill="#eef3ff" stroke="#4d6bfe" stroke-width="1.6"/>
|
|
47
|
+
<text x="820" y="464" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="14.5" font-weight="600" fill="#1f2328">后台轮询盯守</text>
|
|
48
|
+
<text x="820" y="484.5" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" font-weight="400" fill="#5b6472">重启后自动接管 running 任务</text>
|
|
49
|
+
<rect x="700" y="560" width="240" height="60" rx="9" fill="#eaf7ef" stroke="#2e9e5b" stroke-width="1.6"/>
|
|
50
|
+
<text x="820" y="586" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="14.5" font-weight="600" fill="#1f2328">succeeded</text>
|
|
51
|
+
<text x="820" y="606.5" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" font-weight="400" fill="#5b6472">产物转存 DSH 附件 + 令牌媒体链接</text>
|
|
52
|
+
<rect x="460" y="560" width="190" height="60" rx="9" fill="#fceded" stroke="#c94f4f" stroke-width="1.6"/>
|
|
53
|
+
<text x="555" y="586" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="14.5" font-weight="600" fill="#1f2328">failed</text>
|
|
54
|
+
<text x="555" y="606.5" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" font-weight="400" fill="#5b6472">保留错误说明</text>
|
|
55
|
+
<rect x="230" y="560" width="180" height="60" rx="9" fill="#f5f6f8" stroke="#b9c2ce" stroke-width="1.6"/>
|
|
56
|
+
<text x="320" y="586" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="14.5" font-weight="600" fill="#1f2328">canceled</text>
|
|
57
|
+
<text x="320" y="606.5" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" font-weight="400" fill="#5b6472">取消信号传播</text>
|
|
58
|
+
<rect x="40" y="650" width="560" height="64" rx="8" fill="#ffffff" stroke="#b9c2ce" stroke-width="1.3" stroke-dasharray="5 4"/>
|
|
59
|
+
<text x="320" y="678" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="14.5" font-weight="600" fill="#1f2328">黄金规则:远端受理后绝不自动重提</text>
|
|
60
|
+
<text x="320" y="698.5" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" font-weight="400" fill="#5b6472">重提只发生在提交阶段的模型候选切换,避免重复计费</text>
|
|
61
|
+
<rect x="640" y="650" width="556" height="64" rx="8" fill="#ffffff" stroke="#b9c2ce" stroke-width="1.3" stroke-dasharray="5 4"/>
|
|
62
|
+
<text x="918" y="678" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="14.5" font-weight="600" fill="#1f2328">启动恢复与取消</text>
|
|
63
|
+
<text x="918" y="698.5" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" font-weight="400" fill="#5b6472">有 remoteTaskId 的任务继续盯守;孤儿提交清理为 failed;取消传播到本地等待与轮询</text>
|
|
64
|
+
</svg>
|
|
@@ -0,0 +1 @@
|
|
|
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>
|
|
Binary file
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1150" height="500" viewBox="0 0 1150 500" role="img" aria-label="组合工作流示例:看图 → 重绘 → 自检">
|
|
2
|
+
<defs><marker id="arr" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M0,0 L10,5 L0,10 z" fill="#6b7686"/></marker></defs>
|
|
3
|
+
<rect width="1150" height="500" fill="#ffffff"/>
|
|
4
|
+
<text x="48" y="52" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="21" font-weight="700" fill="#1f2328">组合工作流示例:看图 → 重绘 → 自检</text>
|
|
5
|
+
<text x="48" y="78" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="13" fill="#5b6472">来自随包 Skill「iris-compose-media」:先理解,再生成,复核针对具体偏差,重试有界</text>
|
|
6
|
+
<path d="M230,149 L280,149" fill="none" stroke="#6b7686" stroke-width="1.6" marker-end="url(#arr)"/>
|
|
7
|
+
<path d="M530,149 L580,149" fill="none" stroke="#6b7686" stroke-width="1.6" marker-end="url(#arr)"/>
|
|
8
|
+
<path d="M830,149 L880,149" fill="none" stroke="#6b7686" stroke-width="1.6" marker-end="url(#arr)"/>
|
|
9
|
+
<path d="M995,182 L995,286" fill="none" stroke="#6b7686" stroke-width="1.6" marker-end="url(#arr)"/>
|
|
10
|
+
<rect x="966" y="224.5" width="58" height="19" rx="4" fill="#ffffff"/>
|
|
11
|
+
<text x="995" y="238" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" fill="#5b6472">需要复核</text>
|
|
12
|
+
<path d="M880,319 L780,319" fill="none" stroke="#6b7686" stroke-width="1.6" marker-end="url(#arr)"/>
|
|
13
|
+
<path d="M600,319 L540,319" fill="none" stroke="#6b7686" stroke-width="1.6" marker-end="url(#arr)"/>
|
|
14
|
+
<rect x="553" y="309.5" width="34" height="19" rx="4" fill="#ffffff"/>
|
|
15
|
+
<text x="570" y="323" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" fill="#5b6472">一致</text>
|
|
16
|
+
<path d="M690,272 L690,232 L705,232 L705,182" fill="none" stroke="#6b7686" stroke-width="1.6" stroke-dasharray="5 4" marker-end="url(#arr)"/>
|
|
17
|
+
<rect x="606.92" y="222.5" width="186.16" height="19" rx="4" fill="#ffffff"/>
|
|
18
|
+
<text x="700" y="236" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" fill="#5b6472">不一致 · 仅针对具体偏差重生成</text>
|
|
19
|
+
<rect x="40" y="116" width="190" height="66" rx="33" fill="#eef3ff" stroke="#4d6bfe" stroke-width="1.6"/>
|
|
20
|
+
<text x="135" y="145" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="14.5" font-weight="600" fill="#1f2328">源图片</text>
|
|
21
|
+
<text x="135" y="165.5" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" font-weight="400" fill="#5b6472">宿主路径 / 会话附件</text>
|
|
22
|
+
<rect x="280" y="116" width="250" height="66" rx="9" fill="#eef3ff" stroke="#4d6bfe" stroke-width="1.6"/>
|
|
23
|
+
<text x="405" y="145" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="14.5" font-weight="600" fill="#1f2328">iris_look_at_image</text>
|
|
24
|
+
<text x="405" y="165.5" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" font-weight="400" fill="#5b6472">结构化观察:主体 · 构图 · 色彩 · 文字</text>
|
|
25
|
+
<rect x="580" y="116" width="250" height="66" rx="9" fill="#eef3ff" stroke="#4d6bfe" stroke-width="1.6"/>
|
|
26
|
+
<text x="705" y="145" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="14.5" font-weight="600" fill="#1f2328">生成自包含提示词</text>
|
|
27
|
+
<text x="705" y="165.5" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" font-weight="400" fill="#5b6472">区分原图事实与本次改动要求</text>
|
|
28
|
+
<rect x="880" y="116" width="230" height="66" rx="9" fill="#fff6e5" stroke="#c98a1b" stroke-width="1.6"/>
|
|
29
|
+
<text x="995" y="145" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="14.5" font-weight="600" fill="#1f2328">iris_draw_image</text>
|
|
30
|
+
<text x="995" y="165.5" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" font-weight="400" fill="#5b6472">付费步骤 · 按产物数计</text>
|
|
31
|
+
<rect x="880" y="286" width="230" height="66" rx="9" fill="#eef3ff" stroke="#4d6bfe" stroke-width="1.6"/>
|
|
32
|
+
<text x="995" y="315" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="14.5" font-weight="600" fill="#1f2328">iris_relook_attachment</text>
|
|
33
|
+
<text x="995" y="335.5" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" font-weight="400" fill="#5b6472">对照原始需求逐项复核</text>
|
|
34
|
+
<path d="M690,272 L780,319 L690,366 L600,319 Z" fill="#eef3ff" stroke="#4d6bfe" stroke-width="1.6"/>
|
|
35
|
+
<text x="690" y="324.25" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="14.5" font-weight="600" fill="#1f2328">与需求一致?</text>
|
|
36
|
+
<rect x="320" y="278" width="220" height="82" rx="9" fill="#eaf7ef" stroke="#2e9e5b" stroke-width="1.6"/>
|
|
37
|
+
<text x="430" y="315" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="14.5" font-weight="600" fill="#1f2328">交付产物</text>
|
|
38
|
+
<text x="430" y="335.5" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="12" font-weight="400" fill="#5b6472">attachment id + 任务记录 + 媒体链接</text>
|
|
39
|
+
<rect x="40" y="408" width="1070" height="40" rx="8" fill="#ffffff" stroke="#b9c2ce" stroke-width="1.3" stroke-dasharray="5 4"/>
|
|
40
|
+
<text x="575" y="433.25" text-anchor="middle" font-family="'PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Noto Sans SC','Microsoft YaHei',sans-serif" font-size="14.5" font-weight="600" fill="#1f2328">纪律:只在缺失会改变结果时提问;复核不通过才重绘;生成前明确用途与比例;保留 attachment id 与任务记录供后续步骤复用</text>
|
|
41
|
+
</svg>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,51 @@
|
|
|
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
|
|
@@ -0,0 +1,26 @@
|
|
|
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.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Iris Android 真机截图 / Android screenshots
|
|
2
|
+
|
|
3
|
+
这些画面来自 Android 16 浏览器,访问运行在 Termux/PRoot Debian ARM64 中的 DSH;界面使用 DSH 默认皮肤。截图与生成图均为 2026-09-06 的真实操作结果,公开副本已重新编码并移除 EXIF、XMP 与 IPTC 元数据。
|
|
4
|
+
|
|
5
|
+
These captures were taken in an Android 16 browser connected to DSH running under Termux/PRoot Debian ARM64, with the default DSH skin. They show real interactions from 2026-09-06. Public copies were re-encoded without EXIF, XMP, or IPTC metadata.
|
|
6
|
+
|
|
7
|
+
## 通用提示词优化 / General prompt optimization
|
|
8
|
+
|
|
9
|
+
| 优化前 / Before | 优化预览 / Preview |
|
|
10
|
+
|---|---|
|
|
11
|
+
|  |  |
|
|
12
|
+
|
|
13
|
+
优化结果只会先进入预览。点击“写回输入框”后,Iris 更新当前草稿,但不会自动发送消息。
|
|
14
|
+
|
|
15
|
+

|
|
16
|
+
|
|
17
|
+
## 图片生成闭环 / Image-generation loop
|
|
18
|
+
|
|
19
|
+
| 一句话草稿 / Short draft | 图片 Prompt 预览 / Image prompt preview |
|
|
20
|
+
|---|---|
|
|
21
|
+
|  |  |
|
|
22
|
+
|
|
23
|
+
优化后的 Prompt 写回输入框并交给 DSH Agent 后,Iris 使用阿里云百炼的 `qwen-image-3.0-pro` 完成生成任务。任务详情和实际产物如下。
|
|
24
|
+
|
|
25
|
+
| 成功任务 / Succeeded task | 实际产物 / Generated artifact |
|
|
26
|
+
|---|---|
|
|
27
|
+
|  |  |
|
|
28
|
+
|
|
29
|
+
原始草稿:`鸢尾花`
|
|
30
|
+
|
|
31
|
+
提示词优化模型:`deepseek-official / deepseek-v4-flash`,实际思考档位 `off`
|
|
32
|
+
图片生成供应商与模型:阿里云百炼 / `qwen-image-3.0-pro`
|
|
33
|
+
|
|
34
|
+
截图中的任务 ID 是本地任务标识,不是媒体访问令牌;画面不包含 API Key、账户信息、私有绝对路径或认证 URL。
|