@mokuyoaxis/dsh-iris 0.1.1 → 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 +42 -1
- package/README.en.md +245 -0
- package/README.md +55 -6
- package/cordis.patch.yml +1 -1
- package/docs/ROADMAP.md +22 -5
- 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.2.md +26 -0
- package/docs/screenshots.md +34 -0
- package/lib/api.js +42 -11
- package/lib/bundled-skills.js +62 -0
- package/lib/client.js +352 -9
- package/lib/index.js +11 -1
- package/lib/prompt-optimizer-config.js +170 -0
- package/lib/prompt-optimizer.js +244 -0
- package/package.json +7 -3
- package/screenshots.json +6 -0
- package/user_guide.md +64 -3
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,46 @@
|
|
|
6
6
|
|
|
7
7
|
当前没有尚未发布的用户可见变更。
|
|
8
8
|
|
|
9
|
+
## [0.1.2] - 2026-09-06
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
|
|
13
|
+
- 提示词优化器不再默认继承主会话的 High/Low thinking 档位;新增 `generation.reasoningEffort` 策略,默认在模型元数据明确支持时关闭推理,并在面板显示思考策略与输出预算,降低推理 token 挤占正文和意外增费的风险。
|
|
14
|
+
|
|
15
|
+
- 提示词优化器按 DSH `modelSelection.current` 投影读取当前会话模型,避免界面已有选择时仍误回退为“DSH 默认模型”。
|
|
16
|
+
|
|
17
|
+
- 对外展示名使用 “Iris Media for DSH”,npm 包名继续保留为 `@mokuyoaxis/dsh-iris`,安装文档始终使用完整 scoped 名称。
|
|
18
|
+
|
|
19
|
+
### Added
|
|
20
|
+
|
|
21
|
+
- 新增独立于 Iris 工作台的 DSH 对话框提示词优化器:输入区只保留无边框、无文字的 🫧 入口,进入带背景模糊和柔和光影的半透明玻璃悬浮窗;窄屏自动切换为安全区自适应、可内部滚动的底部面板。支持通用、图片、视频和首尾帧视频目标,默认使用当前会话模型,先预览后写回且绝不自动发送。
|
|
22
|
+
|
|
23
|
+
- 新增独立的 `prompt-optimizer.json` 配置:面板可导入/导出 JSON、固定其他 DSH provider/model、一键恢复 Iris 默认 Prompt,并可单独关闭对话入口;入口关闭后工作台、Agent 工具和任务后台继续运行。
|
|
24
|
+
|
|
25
|
+
- 插件启用时通过 DSH Skill registry 自动注册随包的 `iris-verify-ui` 与 `iris-compose-media`;用户无需克隆本仓库或把会话工作目录切到 Iris。
|
|
26
|
+
|
|
27
|
+
- README 首屏新增一张可追溯到供应商、模型与提示词的真实 Iris 生成图片。
|
|
28
|
+
|
|
29
|
+
- 新增 Android 16 真机截图画廊,记录通用提示词优化、图片 Prompt 优化、写回、任务成功和实际产物;公开副本统一移除 EXIF/XMP/IPTC 元数据。中英文 README 直接展示三张关键截图,根目录 `screenshots.json` 为插件市场声明四张精选素材。
|
|
30
|
+
|
|
31
|
+
- README 新增三张示意图:插件架构总览、生成任务生命周期与受理边界,以及「看图 → 重绘 → 自检」组合工作流示例(附 SVG 与可编辑 drawio 源文件)。
|
|
32
|
+
|
|
33
|
+
- 新增英文版 `README.en.md` 并在两份 README 顶部互设语言切换链接;npm 包清单纳入英文版。
|
|
34
|
+
|
|
35
|
+
- 新增 `scripts/gen-diagrams.mjs`:README 三张示意图由单一脚本再生成,每次运行同步产出 PNG、SVG 与可编辑 drawio 源文件。
|
|
36
|
+
|
|
37
|
+
### Fixed
|
|
38
|
+
|
|
39
|
+
- 泡泡快捷任务不再混入失败、取消或无产物的旧记录,只显示当前运行任务与最近成功产物;完整历史和错误仍保留在 Iris 工作台。
|
|
40
|
+
|
|
41
|
+
- 常用区与 Iris 工作台的功能状态灯改为挂载后直接读取共享供应商状态:启用的 API 且具备相应能力时常驻绿色,不再要求逐张点开卡片;当前执行报错后立即变暗。
|
|
42
|
+
|
|
43
|
+
- Cordis 运行时行 ID 改为唯一的 `mokuyoaxis-dsh-iris`,避免与另一款 `dsh-iris` 插件同装时按短 ID 相互覆盖;文档说明手动 profile 覆盖的迁移方式。
|
|
44
|
+
|
|
45
|
+
### Security
|
|
46
|
+
|
|
47
|
+
- 随包 Skill 直接从已安装的 Iris 包读取,不扫描额外项目或用户目录,也不改变默认 filesystem Skill provider 配置。
|
|
48
|
+
|
|
9
49
|
## [0.1.1] - 2026-09-05
|
|
10
50
|
|
|
11
51
|
### Changed
|
|
@@ -78,6 +118,7 @@
|
|
|
78
118
|
- 上传采用流式限额、临时 `.part` 文件和原子落盘,失败时会清理未完成文件。
|
|
79
119
|
- 修改状态的路由拒绝明确的跨站请求,媒体文件继续使用随机能力令牌访问。
|
|
80
120
|
|
|
81
|
-
[Unreleased]: https://github.com/mokuyoaxis/dsh-iris/compare/v0.1.
|
|
121
|
+
[Unreleased]: https://github.com/mokuyoaxis/dsh-iris/compare/v0.1.2...HEAD
|
|
122
|
+
[0.1.2]: https://github.com/mokuyoaxis/dsh-iris/compare/v0.1.1...v0.1.2
|
|
82
123
|
[0.1.1]: https://github.com/mokuyoaxis/dsh-iris/compare/v0.1.0...v0.1.1
|
|
83
124
|
[0.1.0]: https://github.com/mokuyoaxis/dsh-iris/releases/tag/v0.1.0
|
package/README.en.md
ADDED
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<sub><a href="README.md">简体中文</a> | English</sub>
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<p align="center">
|
|
6
|
+
<img src="docs/assets/iris-wordmark.svg" width="520" alt="IRIS wordmark">
|
|
7
|
+
</p>
|
|
8
|
+
|
|
9
|
+
<h1 align="center">Iris Media for DSH</h1>
|
|
10
|
+
|
|
11
|
+
<p align="center"><strong>A multimodal media production runtime · currently shipped as a DeepSeek Harness plugin</strong></p>
|
|
12
|
+
|
|
13
|
+
<p align="center">
|
|
14
|
+
<a href="#deepseek-harness-adaptation"><img alt="DeepSeek Harness compatible" src="https://img.shields.io/badge/DeepSeek%20Harness-compatible-4D6BFE.svg?style=flat-square"></a>
|
|
15
|
+
<a href="https://www.npmjs.com/package/@mokuyoaxis/dsh-iris"><img alt="npm version" src="https://img.shields.io/npm/v/%40mokuyoaxis%2Fdsh-iris.svg?style=flat-square"></a>
|
|
16
|
+
<a href="https://nodejs.org/"><img alt="Node.js 20.10 or newer" src="https://img.shields.io/badge/Node.js-%3E%3D20.10-339933.svg?style=flat-square&logo=nodedotjs&logoColor=white"></a>
|
|
17
|
+
<a href="https://github.com/mokuyoaxis/dsh-iris/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/mokuyoaxis/dsh-iris/actions/workflows/ci.yml/badge.svg"></a>
|
|
18
|
+
<a href="LICENSE"><img alt="MIT License" src="https://img.shields.io/badge/license-MIT-1689FF.svg?style=flat-square"></a>
|
|
19
|
+
</p>
|
|
20
|
+
|
|
21
|
+
dsh-iris gives agents and the Iris workbench image, video, speech, and visual understanding capabilities, and it can optimize any draft directly in the DSH composer. It connects to Alibaba Cloud DashScope (Bailian) and to OpenAI Images–compatible services. Configuration and task management live in the Iris workbench, and a floating Iris bubble in the bottom-right corner is the quick entry point.
|
|
22
|
+
|
|
23
|
+
## A real generation example
|
|
24
|
+
|
|
25
|
+
<p align="center">
|
|
26
|
+
<img src="docs/assets/examples/iris-flower-generated.webp" width="720" alt="A violet-blue iris generated from a prompt optimized by Iris">
|
|
27
|
+
</p>
|
|
28
|
+
|
|
29
|
+
> Starting from the two-character draft “鸢尾花”: Iris composer optimization (`deepseek-v4-flash`, thinking `off`) → Alibaba Cloud Bailian `qwen-image-3.0-pro` generation · 2048×2048
|
|
30
|
+
|
|
31
|
+
## Android 16 live UI
|
|
32
|
+
|
|
33
|
+
These captures come from an Android browser connected to DSH under Termux/PRoot Debian ARM64, using the default DSH skin. Public copies have no EXIF, XMP, or IPTC metadata.
|
|
34
|
+
|
|
35
|
+
| 🫧 in the conversation composer | Optimized draft written back |
|
|
36
|
+
|---|---|
|
|
37
|
+
|  |  |
|
|
38
|
+
|
|
39
|
+
<p align="center">
|
|
40
|
+
<img src="docs/assets/screenshots/image-task-succeeded.webp" width="520" alt="Succeeded image task in the Iris workbench">
|
|
41
|
+
</p>
|
|
42
|
+
|
|
43
|
+
> [See the complete six-image workflow: before, glass preview panel, write-back, succeeded task, and artifact](docs/screenshots.md)
|
|
44
|
+
|
|
45
|
+
The project is at an early stage; interfaces and configuration formats may still change between releases.
|
|
46
|
+
|
|
47
|
+
Iris's long-term direction is a media production core that can run on its own and plug into different agent hosts. DeepSeek Harness is the first supported host, and the current version still requires DSH — a standalone Core, CLI, and workbench are on the roadmap but not yet available.
|
|
48
|
+
|
|
49
|
+
## Relationship with ai-paint
|
|
50
|
+
|
|
51
|
+
`ai-paint` is the maintainer's local, unpublished predecessor of Iris. It is not a public dependency, and users never need to download, install, or create it. Without that project, simply configure providers in the Iris workbench as described below.
|
|
52
|
+
|
|
53
|
+
Early versions read models and credentials from the maintainer's local ai-paint configuration — partly to migrate the predecessor project, and partly so the host process could reuse an existing API key locally instead of pasting keys into agent sessions, command-line arguments, or documents. Version 0.1.1 separates the two configurations completely: Iris uses only its own configuration. The old one can be imported exactly once, and only by explicitly setting `IRIS_IMPORT_WORKBENCH_CONFIG` to the absolute path of the local config file. Iris never scans for ai-paint by default and never syncs the two sides. The variable carries a file path, not an API key, and the source file is left untouched. See the [user guide](user_guide.md) for details.
|
|
54
|
+
|
|
55
|
+
## Quickest start
|
|
56
|
+
|
|
57
|
+
With DeepSeek Harness `0.1.2-rc.1` installed and `pnpm` on your PATH, add Iris to the Web profile:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
dsh plugin --profile web add @mokuyoaxis/dsh-iris
|
|
61
|
+
dsh web
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
> The unscoped `dsh-iris` on npm belongs to a different plugin. Always keep the fully scoped name `@mokuyoaxis/dsh-iris` when installing or updating Iris Media.
|
|
65
|
+
|
|
66
|
+
To try it from a source checkout, replace `@mokuyoaxis/dsh-iris` in the first command with `.`. The plugin loads the next time DSH starts; the web UI defaults to `http://127.0.0.1:3080`.
|
|
67
|
+
|
|
68
|
+
After the first start, open "Settings → Iris workbench → + Add provider", enter your DashScope base URL and API key, then click "Discover models". A single provider can start with automatic capability assignment. Full steps, OpenAI Images–compatible configuration, and failover notes are in the [user guide](user_guide.md) (Chinese).
|
|
69
|
+
|
|
70
|
+
Once configured, minimal instructions can be as simple as:
|
|
71
|
+
|
|
72
|
+
```text
|
|
73
|
+
Use iris_draw_image: draw a white cat sitting by a blue window.
|
|
74
|
+
Summarize the image I just uploaded.
|
|
75
|
+
Summarize /absolute/path/demo.mp4 with Iris, then turn the summary into speech.
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
DSH profiles and plugin commands follow the [official installation docs](https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/user/develop/basic/publish.md). Generating images, videos, or speech may incur provider charges.
|
|
79
|
+
|
|
80
|
+
## Feature overview
|
|
81
|
+
|
|
82
|
+

|
|
83
|
+
|
|
84
|
+
- Image generation, text-to-video, image-to-video, and S2V digital-human video
|
|
85
|
+
- Text-to-speech and audio transcription
|
|
86
|
+
- Visual question answering, long-image OCR, target grounding, cropping, and pixel-diff analysis
|
|
87
|
+
- Video frame extraction and multimodal video summarization
|
|
88
|
+
- Asynchronous task tracking, restart recovery, and token-authorized media playback
|
|
89
|
+
- A multi-provider model pool with per `provider + model` capability assignment
|
|
90
|
+
- Three file sources: browser upload, session attachments, and host paths
|
|
91
|
+
- Workbench-independent composer prompt optimization with current-session and JSON-configured fixed model routing
|
|
92
|
+
|
|
93
|
+
## Prerequisites
|
|
94
|
+
|
|
95
|
+
- A Node.js version that satisfies your DeepSeek Harness release's requirement; dsh-iris itself requires at least 20.10
|
|
96
|
+
- A working DeepSeek Harness environment with `pnpm` on the PATH
|
|
97
|
+
- At least one supported media or vision provider
|
|
98
|
+
- `ffmpeg` and `ffprobe` on the system, for video frame extraction and video summaries
|
|
99
|
+
|
|
100
|
+
After installing the plugin, add a provider in the Iris workbench and assign models to the capabilities you need. Provider keys are kept in Iris's host-side configuration; on POSIX systems, Iris's own directories and files are tightened to `0700` and `0600` respectively, and neither the UI nor the API ever returns full keys. On Windows, file modes are not equivalent to ACLs — keep relying on your user directory and system account permissions.
|
|
101
|
+
|
|
102
|
+
## DeepSeek Harness adaptation
|
|
103
|
+
|
|
104
|
+
dsh-iris ships as a native DSH plugin with a server side and a web client. The server registers 14 agent tools and reuses the host's tool, routing, and lifecycle services; the client hooks into the settings page, the conversation input area, and the global floating layer through DSH's module loader. The plugin never starts a separate service or listens on an extra port.
|
|
105
|
+
|
|
106
|
+
Automated tests currently cover plugin loading, tool registration, client seats, and routing behavior. Version 0.1.1 completed host smoke tests on Linux ARM64 — in both a clean and a real web profile — against DSH `0.1.2-rc.1` on Node.js `22.23.2`: the browser startup graph, the full combined bundle, the Iris client factory, and the three UI seats present at that time were verified. The fourth prompt-optimizer seat added in 0.1.2 has now been rendered in a live Android browser; configuration loading, a real session-model optimization with thinking actually `off`, preview write-back, independent disabling and re-enabling, and the loop from a short draft to a succeeded image-generation task are verified. Browser-side cancellation and JSON operations have automated HTTP/configuration coverage; a step-by-step live-device record is still pending. Iris itself keeps Node.js `>=20.10` as its own floor.
|
|
107
|
+
|
|
108
|
+
Iris 0.1.1–0.1.2 explicitly supports DSH `>=0.1.2-rc.1 <0.1.3-0` and no longer works with the legacy client runtime of DSH 0.1.0/0.1.1. DSH is still evolving quickly; later preview versions must pass verification before the supported range widens, and the compatibility badge is not an official certification. If DSH requires a newer Node.js, DSH wins.
|
|
109
|
+
|
|
110
|
+
## Tools
|
|
111
|
+
|
|
112
|
+
### Generation, speech, and tasks
|
|
113
|
+
|
|
114
|
+
| Tool | Purpose |
|
|
115
|
+
|---|---|
|
|
116
|
+
| `iris_draw_image` | Generate images from a prompt |
|
|
117
|
+
| `iris_generate_video` | Text-to-video, image-to-video, or S2V digital-human video |
|
|
118
|
+
| `iris_speak_text` | Synthesize speech from text |
|
|
119
|
+
| `iris_transcribe_audio` | Transcribe audio to text |
|
|
120
|
+
| `iris_task_status` | Check the status and outputs of one task or the recent tasks |
|
|
121
|
+
|
|
122
|
+
### Vision and image processing
|
|
123
|
+
|
|
124
|
+
| Tool | Purpose |
|
|
125
|
+
|---|---|
|
|
126
|
+
| `iris_look_at_image` | Ask a question about an image and get a vision model's answer |
|
|
127
|
+
| `iris_relook_attachment` | Re-inspect an image attachment from the session with a new question |
|
|
128
|
+
| `iris_long_ocr` | Recognize text in tall screenshots or long images, chunk by chunk |
|
|
129
|
+
| `iris_locate` | Ground a target in an image and return pixel coordinates |
|
|
130
|
+
| `iris_crop` | Crop an image by pixel region |
|
|
131
|
+
| `iris_pixel_diff` | Compare two images and produce diff statistics and a heatmap |
|
|
132
|
+
| `iris_html_screenshot` | Render an HTML string to a screenshot in a restricted environment |
|
|
133
|
+
|
|
134
|
+
### Video processing
|
|
135
|
+
|
|
136
|
+
| Tool | Purpose |
|
|
137
|
+
|---|---|
|
|
138
|
+
| `iris_video_frames` | Extract frames evenly from a video |
|
|
139
|
+
| `iris_media_summarize` | Summarize a video from sampled frames plus optional audio transcription |
|
|
140
|
+
|
|
141
|
+
## File inputs
|
|
142
|
+
|
|
143
|
+
Iris accepts three file sources, in the recommended order:
|
|
144
|
+
|
|
145
|
+
1. **Browser upload** — best for local files and cross-environment access; 64 MB per file.
|
|
146
|
+
2. **Session attachments** — best for reusing media already uploaded or generated in the current session.
|
|
147
|
+
3. **Host paths** — best for large files the host can read directly. Enter the path as seen by the host process; it is not always the path on the machine your browser runs on.
|
|
148
|
+
|
|
149
|
+
Uploads are stored under `$DSH_HOME/iris/v1/uploads/` and kept for 7 days by default. For path-picking advice on different platforms, see [File access across environments](docs/file-access-across-environments.md) (Chinese).
|
|
150
|
+
|
|
151
|
+
## Conversation prompt optimization
|
|
152
|
+
|
|
153
|
+
Iris adds a borderless, text-free “🫧” control directly to the DSH composer, so the workbench does not need to be open. It opens a translucent glass panel with background blur and soft depth; on narrow screens and Android browsers it becomes a safe-area-aware, internally scrollable bottom sheet to prevent overlap and overflow. It reads only the current unsent plain-text draft and offers general, image, video, and start-to-end-frame video targets. The result is previewed first and is written back only after confirmation; Iris never sends it automatically. Drafts containing structured `@` or `/` references are left untouched for now so their identities are not lost.
|
|
154
|
+
|
|
155
|
+
By default, the optimizer uses the model selected for the current session and falls back to DSH's default model when the session has none. The request carries no chat history, tools, attachments, or workspace content—only the current draft and target template. To prevent reasoning tokens from exhausting the generation budget before visible text is complete, `generation.reasoningEffort` defaults to `off-if-supported`: reasoning is disabled only when DSH model metadata explicitly advertises such an effort; otherwise the provider default is used, and the session High/Low setting is not inherited. JSON may select `provider-default`, `inherit`, or an exact effort ID advertised by the model. For predictable cost and latency, use a `fixed` route with a lightweight non-reasoning model. You can also export `prompt-optimizer.json`, change `route.mode` to `fixed`, name another `provider` and `model` already registered in DSH, and import it again. “Reset to defaults” restores Iris's built-in prompt, target templates, session-model routing, and generation settings. The composer control can be disabled independently and re-enabled from the Iris workbench; disabling it does not stop the workbench, agent tools, or task runtime. An optimization call may incur charges from the selected text model.
|
|
156
|
+
|
|
157
|
+
## Model assignment and failover
|
|
158
|
+
|
|
159
|
+
Capability assignment uses `providerId::modelId` as the model identity. The same model name from a different provider or account counts as two independent options.
|
|
160
|
+
|
|
161
|
+
Generation capabilities accept multiple candidate models. Iris only tries the next candidate when the upload, the submission, or a synchronous generation fails; once a remote service has accepted a task, Iris never resubmits it automatically — that is how duplicate tasks and double billing are avoided. Accepted asynchronous tasks remain under the task system's watch.
|
|
162
|
+
|
|
163
|
+

|
|
164
|
+
|
|
165
|
+
Transcription is a separate `transcribe` capability and does not consume the TTS or vision model configuration.
|
|
166
|
+
|
|
167
|
+
## Composed workflow example
|
|
168
|
+
|
|
169
|
+
Iris ships two agent skills (`iris-verify-ui` and `iris-compose-media`) that chain multiple tools into bounded, reviewable media workflows. The example below is "look → redraw → self-check": understand the source image first, then generate, review against concrete mismatches, and only deliver once the review passes.
|
|
170
|
+
|
|
171
|
+

|
|
172
|
+
|
|
173
|
+
SVG versions and editable drawio sources of the figures above live in [`docs/assets/diagrams/`](docs/assets/diagrams/). Diagram labels are currently in Chinese.
|
|
174
|
+
|
|
175
|
+
## Data and tasks
|
|
176
|
+
|
|
177
|
+
Runtime data lives under `$DSH_HOME/iris/v1/` by default:
|
|
178
|
+
|
|
179
|
+
| Location | Contents |
|
|
180
|
+
|---|---|
|
|
181
|
+
| `providers.json` | Providers and capability assignments; file mode 0600 |
|
|
182
|
+
| `prompt-optimizer.json` | Imported optimizer prompt, target templates, model route, and generation settings; file mode 0600 |
|
|
183
|
+
| `tasks.json` | Task metadata and attachment indexes; up to 500 records |
|
|
184
|
+
| `outputs/` | Generated and processed media |
|
|
185
|
+
| `uploads/` | Temporary copies of browser uploads |
|
|
186
|
+
|
|
187
|
+
On first load, 0.1.1 tightens POSIX permissions across an existing `$DSH_HOME/iris/v1/` tree without modifying file contents or following symlinks. Large media downloads stream to a private temporary file and are moved into place atomically, instead of loading a whole video into memory.
|
|
188
|
+
|
|
189
|
+
Asynchronous tasks are polled in the background. After a plugin restart, Iris can re-adopt tasks that are still running remotely. Cancellation signals propagate through local waits and polling; whether the remote computation itself can be cancelled depends on the provider's API.
|
|
190
|
+
|
|
191
|
+
Audio and video are served through Iris media links that carry random capability tokens. Images are, wherever possible, also saved as DSH durable attachments so they stay usable in the conversation.
|
|
192
|
+
|
|
193
|
+
## Security notes
|
|
194
|
+
|
|
195
|
+
- Provider keys are never returned by status endpoints.
|
|
196
|
+
- The DashScope media protocol only sends keys to official Alibaba Cloud HTTPS domains; any other base URL defaults to the OpenAI Images–compatible protocol.
|
|
197
|
+
- `/iris/*` accepts loopback Host headers only by default; LAN or reverse-proxy deployments must set `IRIS_TRUSTED_HOSTS` explicitly, and state-changing requests are also checked against cross-site origins.
|
|
198
|
+
- `IRIS_TRUSTED_HOSTS` is not an authentication mechanism. When exposing DSH to the public internet or an untrusted network, configure authentication and HTTPS at the reverse proxy or host layer.
|
|
199
|
+
- Paid model probes run one capability at a time and always confirm before a real provider call; video and transcription never submit empty-sample paid probes automatically.
|
|
200
|
+
- HTML screenshots render inside a sandboxed page without same-origin privileges; scripts and external network access are disabled by default.
|
|
201
|
+
- Media links use random capability tokens, and file paths are resolved only from task records.
|
|
202
|
+
- Iris provides no account system of its own; multi-user isolation and access control are the responsibility of the DeepSeek Harness deployment.
|
|
203
|
+
|
|
204
|
+
## Known limitations
|
|
205
|
+
|
|
206
|
+
- `sharp` bundles native components; glibc Linux, Windows, and macOS are the primary targets. Non-standard environments such as bare Termux may need extra work.
|
|
207
|
+
- Video frame extraction and video summaries require system-installed `ffmpeg` and `ffprobe`.
|
|
208
|
+
- HTML screenshots load no remote scripts, fonts, or images; inline the resources you need first.
|
|
209
|
+
- Under WSL, containers, and remote deployments, browser paths usually cannot be handed to the host directly — prefer uploading files.
|
|
210
|
+
- Provider model lists are candidate sets only; whether a model truly supports a capability is settled by real calls.
|
|
211
|
+
|
|
212
|
+
## Agent Skills
|
|
213
|
+
|
|
214
|
+
When the plugin is enabled, it automatically registers the two bundled skills through the DSH skill registry:
|
|
215
|
+
|
|
216
|
+
| Skill | When to use |
|
|
217
|
+
|---|---|
|
|
218
|
+
| [`iris-verify-ui`](.dsh/skills/iris-verify-ui/SKILL.md) | Combine screenshots, semantic inspection, element grounding, cropping, and pixel comparison into evidence-based UI acceptance |
|
|
219
|
+
| [`iris-compose-media`](.dsh/skills/iris-compose-media/SKILL.md) | Chain two or more Iris tools into media workflows: inspect-then-draw, image-to-video, video summary with narration, S2V, and more |
|
|
220
|
+
|
|
221
|
+
From 0.1.2, as long as the host provides the DSH skill registry, regular npm installs can discover and load both skills from any project directory — no need to clone this repository or configure a skill search path. When the project directory contains same-name skills, DSH's native precedence keeps using the project versions; if the skill registry is unavailable, the 14 Iris tools still load on their own.
|
|
222
|
+
|
|
223
|
+
## Development and verification
|
|
224
|
+
|
|
225
|
+
Run in the project directory:
|
|
226
|
+
|
|
227
|
+
npm test
|
|
228
|
+
|
|
229
|
+
Tests cover config merging, model identity, task lifecycle, generation actions, HTTP/SSE routing, client interactions, and security boundaries. The project is pure ES Modules with no build step.
|
|
230
|
+
|
|
231
|
+
The test scheduler runs on Node.js, launching one process per file and stopping at the first failure — no Bash involved. Temporary directories use system APIs and are cleaned up on exit. GitHub Actions defines a Linux/Windows × Node.js 20.10/22 matrix, and a pre-release hook re-runs the full suite. DSH host smoke tests on native Windows/WSL are still pending real-machine verification.
|
|
232
|
+
|
|
233
|
+
Releases are triggered by `v*` tags through `.github/workflows/release.yml`: the full test suite runs first, then the tarball is packaged, a GitHub Release is created with the workflow's built-in `GITHUB_TOKEN` (tarball attached; release notes taken from the matching CHANGELOG section), and npm publish happens when an `NPM_TOKEN` secret is configured. No local GitHub credentials are needed.
|
|
234
|
+
|
|
235
|
+
## Documentation
|
|
236
|
+
|
|
237
|
+
- [User guide](user_guide.md) (Chinese)
|
|
238
|
+
- [Changelog](CHANGELOG.md) (Chinese)
|
|
239
|
+
- [Roadmap](docs/ROADMAP.md) (Chinese)
|
|
240
|
+
- [File access across environments](docs/file-access-across-environments.md) (Chinese)
|
|
241
|
+
- [Android 16 screenshot gallery](docs/screenshots.md)
|
|
242
|
+
|
|
243
|
+
## License
|
|
244
|
+
|
|
245
|
+
[MIT](LICENSE)
|
package/README.md
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<sub>简体中文 | <a href="README.en.md">English</a></sub>
|
|
3
|
+
</p>
|
|
4
|
+
|
|
1
5
|
<p align="center">
|
|
2
6
|
<img src="docs/assets/iris-wordmark.svg" width="520" alt="IRIS 彩色字标">
|
|
3
7
|
</p>
|
|
4
8
|
|
|
5
|
-
<h1 align="center">
|
|
9
|
+
<h1 align="center">Iris Media for DSH</h1>
|
|
6
10
|
|
|
7
11
|
<p align="center"><strong>Iris 多模态生产运行时 · 当前通过 DeepSeek Harness 插件使用</strong></p>
|
|
8
12
|
|
|
@@ -14,7 +18,29 @@
|
|
|
14
18
|
<a href="LICENSE"><img alt="MIT License" src="https://img.shields.io/badge/license-MIT-1689FF.svg?style=flat-square"></a>
|
|
15
19
|
</p>
|
|
16
20
|
|
|
17
|
-
dsh-iris 为 Agent 和 Iris
|
|
21
|
+
dsh-iris 为 Agent 和 Iris 工作台提供图像、视频、语音与视觉理解能力,也能直接优化 DSH 对话框中的任意提示词。它可以连接 DashScope 百炼及 OpenAI Images 兼容服务;完整配置和任务管理集中在 Iris 工作台,右下角的 Iris 泡泡提供快捷入口。
|
|
22
|
+
|
|
23
|
+
## 实际生成示例
|
|
24
|
+
|
|
25
|
+
<p align="center">
|
|
26
|
+
<img src="docs/assets/examples/iris-flower-generated.webp" width="720" alt="由 Iris 优化提示词并生成的蓝紫色鸢尾花">
|
|
27
|
+
</p>
|
|
28
|
+
|
|
29
|
+
> 从一句“鸢尾花”开始:Iris 对话框优化 Prompt(`deepseek-v4-flash`,thinking `off`)→ 阿里云百炼 `qwen-image-3.0-pro` 生成 · 2048×2048
|
|
30
|
+
|
|
31
|
+
## Android 16 真机界面
|
|
32
|
+
|
|
33
|
+
以下截图来自 Android 浏览器连接 Termux/PRoot Debian ARM64 中的 DSH,使用 DSH 默认皮肤;公开图片均已移除 EXIF/XMP/IPTC 元数据。
|
|
34
|
+
|
|
35
|
+
| 对话输入区的 🫧 入口 | 优化结果写回输入框 |
|
|
36
|
+
|---|---|
|
|
37
|
+
|  |  |
|
|
38
|
+
|
|
39
|
+
<p align="center">
|
|
40
|
+
<img src="docs/assets/screenshots/image-task-succeeded.webp" width="520" alt="Iris 工作台中的图片任务成功详情">
|
|
41
|
+
</p>
|
|
42
|
+
|
|
43
|
+
> [查看完整六图流程:优化前、玻璃预览窗、写回、任务成功与实际产物](docs/screenshots.md)
|
|
18
44
|
|
|
19
45
|
项目目前处于早期版本,接口和配置格式仍可能随版本迭代调整。
|
|
20
46
|
|
|
@@ -35,6 +61,8 @@ dsh plugin --profile web add @mokuyoaxis/dsh-iris
|
|
|
35
61
|
dsh web
|
|
36
62
|
```
|
|
37
63
|
|
|
64
|
+
> npm 上无 scope 的 `dsh-iris` 属于另一款插件。安装和更新 Iris Media 时必须保留完整包名 `@mokuyoaxis/dsh-iris`。
|
|
65
|
+
|
|
38
66
|
从当前源码目录试用时,把第一条命令中的 `@mokuyoaxis/dsh-iris` 换成 `.`。插件会在下一次 DSH 启动时装载,Web UI 默认位于 `http://127.0.0.1:3080`。
|
|
39
67
|
|
|
40
68
|
首次启动后,打开“设置 → Iris 工作台 → + 添加供应商”,填入 DashScope Base URL 和 API Key,再点“发现模型”。单供应商可以先使用自动能力分配。完整步骤、OpenAI Images 兼容配置和故障转移说明见[用户指南](user_guide.md)。
|
|
@@ -51,6 +79,8 @@ DSH 的 profile 与插件命令由[官方安装说明](https://github.com/deepse
|
|
|
51
79
|
|
|
52
80
|
## 功能概览
|
|
53
81
|
|
|
82
|
+

|
|
83
|
+
|
|
54
84
|
- 图像生成、文生视频、图生视频和 S2V 数字人视频
|
|
55
85
|
- 文本转语音与音频转写
|
|
56
86
|
- 看图问答、长图 OCR、目标定位、裁剪和像素差异分析
|
|
@@ -58,6 +88,7 @@ DSH 的 profile 与插件命令由[官方安装说明](https://github.com/deepse
|
|
|
58
88
|
- 异步任务跟踪、重启恢复和带授权令牌的媒体播放
|
|
59
89
|
- 多供应商模型池,以及按 `供应商 + 模型` 分配能力
|
|
60
90
|
- 浏览器上传、会话附件和宿主路径三种文件来源
|
|
91
|
+
- 独立于工作台的对话框提示词优化,支持当前会话模型与 JSON 固定模型路由
|
|
61
92
|
|
|
62
93
|
## 使用前准备
|
|
63
94
|
|
|
@@ -72,9 +103,9 @@ DSH 的 profile 与插件命令由[官方安装说明](https://github.com/deepse
|
|
|
72
103
|
|
|
73
104
|
dsh-iris 按 DeepSeek Harness 插件形态提供服务端与 Web 客户端入口:服务端注册 14 个 Agent 工具,并复用宿主的工具、路由和生命周期服务;客户端通过 DSH 模块加载器接入设置页、会话输入区和全局悬浮层。插件不会启动独立服务或额外监听端口。
|
|
74
105
|
|
|
75
|
-
当前自动化测试覆盖插件装载、工具注册、客户端槽位和路由行为。0.1.1 已在 Linux ARM64 的干净与真实 Web profile 中,使用 DSH `0.1.2-rc.1`、Node.js `22.23.2` 完成宿主烟测;浏览器启动图、完整组合 bundle、Iris
|
|
106
|
+
当前自动化测试覆盖插件装载、工具注册、客户端槽位和路由行为。0.1.1 已在 Linux ARM64 的干净与真实 Web profile 中,使用 DSH `0.1.2-rc.1`、Node.js `22.23.2` 完成宿主烟测;浏览器启动图、完整组合 bundle、Iris 客户端工厂和当时的三个 UI 座位均已验证。0.1.2 新增的第四个提示词优化座位已在 Android 浏览器真机确认渲染,配置读取、真实会话模型优化(实际 thinking `off`)、预览写回、独立关闭与重新启用,以及从短草稿到图片生成任务成功的闭环均已验证;浏览器端取消和 JSON 操作已有自动化 HTTP/配置覆盖,尚待补充真机逐项记录。Iris 自身仍以 Node.js `>=20.10` 为最低基线。
|
|
76
107
|
|
|
77
|
-
0.1.1 明确支持 DSH `>=0.1.2-rc.1 <0.1.3-0`,不再兼容 0.1.0/0.1.1 的旧客户端 Runtime。DSH 仍在快速演进,后续预览版须经验证后再扩大范围;兼容徽章不代表官方认证。若 DSH 要求更高 Node 版本,以 DSH 为准。
|
|
108
|
+
Iris 0.1.1–0.1.2 明确支持 DSH `>=0.1.2-rc.1 <0.1.3-0`,不再兼容 0.1.0/0.1.1 的旧客户端 Runtime。DSH 仍在快速演进,后续预览版须经验证后再扩大范围;兼容徽章不代表官方认证。若 DSH 要求更高 Node 版本,以 DSH 为准。
|
|
78
109
|
|
|
79
110
|
## 工具
|
|
80
111
|
|
|
@@ -117,14 +148,30 @@ Iris 支持三种文件来源,推荐顺序如下:
|
|
|
117
148
|
|
|
118
149
|
上传内容保存在 `$DSH_HOME/iris/v1/uploads/`,默认保留 7 天。不同系统下的路径选择建议见[文件访问与跨环境](docs/file-access-across-environments.md)。
|
|
119
150
|
|
|
151
|
+
## 对话框提示词优化
|
|
152
|
+
|
|
153
|
+
Iris 会在 DSH 对话输入区提供一个无边框、无文字的“🫧”入口,不需要打开 Iris 工作台。点击后打开带背景模糊、半透明层次和柔和光影的玻璃悬浮窗;桌面端靠近输入区显示,窄屏与 Android 浏览器自动切换为带安全区和内部滚动的底部面板,避免遮挡、溢出或控件挤叠。它只读取当前未发送的纯文本草稿,并提供通用、图片、视频和首尾帧视频四种目标模板;结果先预览,用户确认后才写回输入框,不会自动发送。含 `@` 或 `/` 结构化引用的草稿暂不改写,以免引用身份丢失。
|
|
154
|
+
|
|
155
|
+
默认使用当前会话选中的主模型;会话尚未选定模型时回退到 DSH 默认模型。优化请求不携带聊天历史、工具、附件或工作区,只发送当前草稿与目标模板。为避免推理模型在正文前耗尽生成预算,默认 `generation.reasoningEffort` 为 `off-if-supported`:仅在 DSH 模型元数据明确支持关闭 thinking 时禁用推理,否则使用供应商默认值,并且不再继承主会话的 High/Low 档位。可在 JSON 中改为 `provider-default`、`inherit` 或模型声明的具体 effort ID;成本与稳定性优先时,建议使用 `fixed` 路由指定轻量非思考模型。用户也可以导出 `prompt-optimizer.json`,将 `route.mode` 改为 `fixed` 并指定其他已在 DSH 注册的 `provider` 与 `model`,然后从面板重新导入。面板提供“恢复默认”,可还原 Iris 内置 Prompt、目标模板、会话模型路由和生成参数。该对话入口可以单独关闭,并从 Iris 工作台重新启用;关闭不会停用工作台、Agent 工具或任务后台。优化调用可能产生对应文本模型的费用。
|
|
156
|
+
|
|
120
157
|
## 模型分配与故障转移
|
|
121
158
|
|
|
122
159
|
能力分配使用 `providerId::modelId` 作为模型身份。同名模型如果来自不同供应商或不同账号,会被视为两个独立选项。
|
|
123
160
|
|
|
124
161
|
生成类能力可以配置多个候选模型。Iris 只会在上传、提交或同步生成阶段失败时尝试下一个候选项;远端服务一旦受理任务,就不会自动重新提交,以免产生重复任务或重复计费。已经受理的异步任务由任务系统继续跟踪。
|
|
125
162
|
|
|
163
|
+

|
|
164
|
+
|
|
126
165
|
转写是独立的 `transcribe` 能力,不会占用 TTS 或视觉能力的模型配置。
|
|
127
166
|
|
|
167
|
+
## 组合工作流示例
|
|
168
|
+
|
|
169
|
+
Iris 自带两个 Agent Skills(`iris-verify-ui` 与 `iris-compose-media`),把多个工具编排成有界、可复核的媒体工作流。下例是「看图 → 重绘 → 自检」:先理解原图,再生成,复核针对具体偏差,只有复核通过才交付。
|
|
170
|
+
|
|
171
|
+

|
|
172
|
+
|
|
173
|
+
图的 SVG 版本与可编辑 drawio 源文件位于 [`docs/assets/diagrams/`](docs/assets/diagrams/)。
|
|
174
|
+
|
|
128
175
|
## 数据与任务
|
|
129
176
|
|
|
130
177
|
运行数据默认位于 `$DSH_HOME/iris/v1/`:
|
|
@@ -132,6 +179,7 @@ Iris 支持三种文件来源,推荐顺序如下:
|
|
|
132
179
|
| 位置 | 内容 |
|
|
133
180
|
|---|---|
|
|
134
181
|
| `providers.json` | 供应商和能力分配,文件权限为 0600 |
|
|
182
|
+
| `prompt-optimizer.json` | 用户导入的优化 Prompt、目标模板、模型路由和生成参数,文件权限为 0600 |
|
|
135
183
|
| `tasks.json` | 任务元数据和附件索引,最多保留 500 条 |
|
|
136
184
|
| `outputs/` | 生成和处理后的媒体文件 |
|
|
137
185
|
| `uploads/` | 浏览器上传的临时输入副本 |
|
|
@@ -163,14 +211,14 @@ Iris 支持三种文件来源,推荐顺序如下:
|
|
|
163
211
|
|
|
164
212
|
## Agent Skills
|
|
165
213
|
|
|
166
|
-
|
|
214
|
+
插件启用时会通过 DSH Skill registry 自动注册两个随包 Skill:
|
|
167
215
|
|
|
168
216
|
| Skill | 适用场景 |
|
|
169
217
|
|---|---|
|
|
170
218
|
| [`iris-verify-ui`](.dsh/skills/iris-verify-ui/SKILL.md) | 组合截图、语义检查、元素定位、裁剪和像素比较,完成有证据的 UI 验收 |
|
|
171
219
|
| [`iris-compose-media`](.dsh/skills/iris-compose-media/SKILL.md) | 组合两个以上 Iris 工具,完成看图后绘图、图片转视频、视频总结配旁白或 S2V 等媒体工作流 |
|
|
172
220
|
|
|
173
|
-
|
|
221
|
+
从 0.1.2 起,只要宿主提供 DSH Skill registry,普通 npm 安装用户在任意项目目录中都能发现并加载它们,不需要克隆本仓库或另外配置 Skill 搜索目录。项目目录中存在同名 Skill 时,仍按 DSH 原生优先级使用项目版本;Skill registry 不可用时,14 个 Iris 工具仍可独立装载。
|
|
174
222
|
|
|
175
223
|
## 开发与验证
|
|
176
224
|
|
|
@@ -190,6 +238,7 @@ Iris 支持三种文件来源,推荐顺序如下:
|
|
|
190
238
|
- [变更记录](CHANGELOG.md)
|
|
191
239
|
- [路线图](docs/ROADMAP.md)
|
|
192
240
|
- [文件访问与跨环境](docs/file-access-across-environments.md)
|
|
241
|
+
- [Android 16 真机截图画廊](docs/screenshots.md)
|
|
193
242
|
|
|
194
243
|
## License
|
|
195
244
|
|
package/cordis.patch.yml
CHANGED
package/docs/ROADMAP.md
CHANGED
|
@@ -15,9 +15,9 @@ 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
23
|
|
|
@@ -29,22 +29,37 @@ dsh-iris 已具备媒体生成、视觉处理和任务管理主流程。长期
|
|
|
29
29
|
- 绑定供应商凭据与协议端点,统一私有存储权限和流式原子落盘,并验证损坏配置恢复。
|
|
30
30
|
- 将付费能力实测改为单项显式确认,视频与转写不做空样本自动探针。
|
|
31
31
|
- 默认将 Iris HTTP 路由限制在回环 Host,为反代提供显式信任列表和认证部署说明。
|
|
32
|
-
- 增加 Linux/Windows 与 Node.js 20.
|
|
32
|
+
- 增加 Linux/Windows 与 Node.js 20.10/22 CI 矩阵、发布前测试护栏,并以当前 DSH 预览版完成宿主烟测。
|
|
33
33
|
- 核对打包清单,记录真实环境和未验证平台。
|
|
34
34
|
|
|
35
|
+
## 发布候选
|
|
36
|
+
|
|
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
|
+
|
|
35
46
|
## 下一步
|
|
36
47
|
|
|
37
|
-
###
|
|
48
|
+
### 0.1.3:可信任务与适配边界
|
|
38
49
|
|
|
39
50
|
- 区分提交未受理、已受理与受理未知,完善 Attempt、取消和恢复语义。
|
|
40
51
|
- 用故障注入验证提交响应丢失、下载和落盘失败时不会重复提交。
|
|
41
|
-
-
|
|
52
|
+
- 定义最小 Host/Provider Adapter 契约、conformance fixture 与 Core 依赖方向守卫。
|
|
53
|
+
- 提供不发送计费请求的离线 `iris doctor`,并公开任务、安全与架构契约。
|
|
54
|
+
- 在具备稳定录制条件后补充真实短视频证据;不以伪造或不稳定链接阻塞 0.1.2。
|
|
42
55
|
|
|
43
56
|
### 0.2.0:独立 Core 与产物记录
|
|
44
57
|
|
|
45
58
|
- 统一 Agent、工作台与 CLI 的命令执行核心,将 DSH 集成集中到宿主适配器。
|
|
46
59
|
- 为产物保存内容哈希、来源和派生关系,支持检查与导出。
|
|
47
60
|
- 在未安装 DSH 的干净环境完成本地动作和供应商任务验收。
|
|
61
|
+
- 建立 Iris 正式产品视觉身份:以简约鸢尾花和泡泡为核心母题,完成可缩放 Logo、图标、单色版与深浅色适配,并替换临时字标。
|
|
62
|
+
- 在统一 Provider Adapter 与 conformance 测试稳定后,依次接入 Gemini、Fal,并把 Replicate 排入后续 0.2.x。
|
|
48
63
|
|
|
49
64
|
### 后续方向
|
|
50
65
|
|
|
@@ -81,3 +96,5 @@ dsh-iris 已具备媒体生成、视觉处理和任务管理主流程。长期
|
|
|
81
96
|
- 在本地工作台阶段建设公网 SaaS、组织账号和多租户系统。
|
|
82
97
|
- 自动探测全部模型能力并触发可能计费的请求。
|
|
83
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
|