@mokuyoaxis/dsh-iris 0.1.4 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +54 -1
- package/README.en.md +72 -15
- package/README.md +72 -15
- package/bin/dsh-iris.js +392 -13
- package/docs/AGENT_QUICKSTART.md +35 -0
- package/docs/ARCHITECTURE.md +80 -64
- package/docs/ARTIFACT_MANIFEST.md +60 -0
- package/docs/CORE_RUNTIME_CONTRACT.md +83 -0
- package/docs/DSH_CORE_MIGRATION.md +106 -0
- package/docs/DSH_RC2_ADAPTATION.md +36 -0
- package/docs/HEADLESS_CLI.md +217 -0
- package/docs/HOST_ADAPTER_CONTRACT.md +31 -12
- package/docs/HOST_DOCTOR.md +2 -0
- package/docs/MODEL_PORT_CONTRACT.md +300 -0
- package/docs/PROVIDER_ADAPTER_CONTRACT.md +51 -10
- package/docs/PROVIDER_RUNTIME_HARNESS.md +33 -0
- package/docs/PROVIDER_SUBMISSION_CONTRACT.md +1 -1
- package/docs/ROADMAP.md +42 -86
- package/docs/SECURITY.md +4 -3
- package/docs/assets/logo/README.md +55 -0
- package/docs/assets/logo/iris-bubble-concept.svg +67 -0
- package/docs/assets/logo/iris-bubble.svg +14 -0
- package/docs/assets/logo/iris-interim-flower.png +0 -0
- package/docs/assets/logo/iris-logo-mono-inverse.svg +78 -0
- package/docs/assets/logo/iris-logo-mono.svg +78 -0
- package/docs/assets/logo/iris-logo.svg +78 -0
- package/docs/assets/logo/iris-mark-mono-inverse.svg +42 -0
- package/docs/assets/logo/iris-mark-mono.svg +42 -0
- package/docs/assets/logo/iris-mark.svg +42 -0
- package/docs/releases/0.2.0.md +48 -0
- package/lib/actions.js +374 -362
- package/lib/adapters.js +52 -15
- package/lib/api.js +152 -5
- package/lib/client.js +763 -48
- package/lib/command-service.js +420 -0
- package/lib/config.js +56 -43
- package/lib/core-artifact-store.js +598 -0
- package/lib/core-artifacts.js +4 -0
- package/lib/core-attention.js +103 -0
- package/lib/core-contract.js +105 -0
- package/lib/core-doctor.js +41 -0
- package/lib/core-lease-recovery.js +170 -0
- package/lib/core-runtime.js +232 -0
- package/lib/core-tasks.js +560 -0
- package/lib/core-user-projection.js +192 -0
- package/lib/doctor.js +92 -33
- package/lib/dsh-core-adapter.js +599 -0
- package/lib/dsh-host-adapter.js +58 -7
- package/lib/generation-input.js +95 -0
- package/lib/guard.js +3 -3
- package/lib/index.js +159 -54
- package/lib/model-invoker.js +218 -0
- package/lib/model-port-contract.js +333 -0
- package/lib/models.js +97 -11
- package/lib/provider-adapter.js +49 -23
- package/lib/provider-adapters.js +84 -21
- package/lib/provider-catalog.js +171 -0
- package/lib/provider-contract.js +72 -3
- package/lib/provider-protocol.js +51 -2
- package/lib/provider-task-runner.js +328 -0
- package/lib/tasks.js +16 -4
- package/lib/vision.js +28 -7
- package/package.json +8 -8
- package/user_guide.md +27 -12
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,58 @@
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
暂无。
|
|
8
|
+
|
|
9
|
+
## [0.2.0] - 2026-10-01
|
|
10
|
+
|
|
11
|
+
Iris 0.2.0 要求 Node.js ≥ 22.0.0,DSH 插件仅支持 `0.2.0-rc.2`;旧宿主继续固定安装 `@mokuyoaxis/dsh-iris@0.1.4`。包名与仓库名保留,第二个真实 Host Adapter 完成后再更名。
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- 增加中英文 [Agent 简要 Prompt](docs/AGENT_QUICKSTART.md),按宿主版本选择固定 npm 0.2.0 或 0.1.4,并明确 CLI、profile 与任务观察的使用边界。
|
|
16
|
+
- 增加 [Text/Vision Model Port v0 内部契约](docs/MODEL_PORT_CONTRACT.md),约定共享输入、完整终态、取消/预算、安全错误与逐项迁移门禁;真实 DSH/CLI 消费者尚未切换。
|
|
17
|
+
- 实现 Text/Vision M1 纯契约与调用控制,包含单次/整体预算、显式候选策略、取消与晚到结果处理,并补 test-only Fake Port 和共用离线 conformance;真实适配器、提示词优化及视觉消费者尚未接入,未新增公开 export。
|
|
18
|
+
- 增加像素块几何母题的 IRIS 标志与图形标(彩色/单色/反白共 6 个 SVG),由 `scripts/gen-logo.mjs` 从设计矩阵可复现生成,含最小尺寸、留白与配色规范(`docs/assets/logo/`);初始泡泡采用同源内联像素图形标,后续曲线替换见下方 Changed;0.1.x 渐变临时字标不再使用,源码文件暂留作历史兼容。
|
|
19
|
+
- 增加 Core 任务的注意力处置(Host 偏好式,与 legacy 体验对齐):工作台 attention 行(失败/取回失败/受理未知)提供「不再提醒」与「移除」,已受理行提供「恢复提醒」,高级诊断保留完整记录并标注处置状态、可「恢复显示」。处置存于 `$DSH_HOME/iris/v1/core-attention.json`(0600、原子写、损坏降级为无偏好),**零 Core 写入**——任务与产物记录绝不删除。重试成功自动静默:若某 attention 任务存在 `retriedFrom` 指向它的后继且后者已成功交付,则旧任务从任务区自动静默(纯事实派生,刷新不回归;后继后续失败则静默随之撤销)。CLI 无提醒概念,不受影响。
|
|
20
|
+
|
|
21
|
+
- 发布 Headless CLI:无需加载 DSH 即可执行本地裁剪、图片 diff、视频抽帧及图片/视频/语音/转写任务,并跨进程观察任务、检查和导出 Artifact。
|
|
22
|
+
- Headless CLI 增加只读的 `providers list`、`capabilities list` 与显式数据根 Core Doctor;异常退出后可经 Doctor 核对并回显陈旧 owner PID,使用 `runtime recover` 写私有审计后释放租约。活跃或证据不完整时拒绝恢复,不自动解锁。
|
|
23
|
+
- 增加实例化 Core Runtime,提供显式数据根、单写者租约、reader、取消和有序释放。
|
|
24
|
+
|
|
25
|
+
### Changed
|
|
26
|
+
|
|
27
|
+
- 0.2.0 的 Node.js 最低要求统一为 22.0.0,npm 元数据、Doctor、README、用户指南与 CI 同步。Node 22 已包含上游退出阶段 FinalizationRegistry 无限循环修复(nodejs/node#51290);补充确定性退出回归及最低版本重复退出验证,移除临时 GDB 取证步骤。已发布 0.1.4 的历史要求不变。
|
|
28
|
+
- 0.2.0 的 DSH engines、五项可选客户端 peers 和 Host Doctor 收敛到准确的 `0.2.0-rc.2`,不再声明旧 DSH 支持;已发布 Iris 0.1.4 的历史范围不变,README 和用户指南补充 `@mokuyoaxis/dsh-iris@0.1.4` 固定安装与 npm tarball 下载方式。
|
|
29
|
+
- 悬浮泡泡以曲线鸢尾花 SVG 替换像素块剪影,采用紫色花瓣、金色花心与青绿叶片;提供透明矢量源和按钮概念预览,保留现有健康状态与交互。
|
|
30
|
+
- 适配 DSH `0.2.0-rc.2`,通过真实安装服务隔离验收;未推定其他 0.2 版本兼容,已发布 npm 0.1.4 包不包含这些后续修改。验证范围见 [rc.2 适配说明](docs/DSH_RC2_ADAPTATION.md)。
|
|
31
|
+
- CLI、DSH 与知情重试共用四类生成的参数规范化:文本修剪、图片数量、视频时长及 size/voice 长度使用同一规则,非法参数在提交前拒绝。DSH 的 diff/抽帧工具和工作台动作消费已有 Core Command,结果保存为 Artifact 并可经 CLI 导出;宿主继续负责附件展示。
|
|
32
|
+
- 协议工厂改用内部注册表;媒体协议与视觉类型分别处理。导入和重载保留用户显式配置,未知协议在联网前返回稳定错误;未知端点的自动 OpenAI Images 兼容回退带 `protocolInferred` 标记,并在供应商管理区提示确认。
|
|
33
|
+
- CLI 与 DSH 共用配置模型解析,均接受裸模型名与供应商复合引用;运行时不再注入厂商默认模型。旧裸账号的兼容目录改为在配置写入时物化,CLI 读取不迁移配置;显式空模型池仍保持为空。
|
|
34
|
+
- 模型发现改为合并更新:手工项优先、保留远端未再返回的旧项、按 ID 去重,编辑已有模型也会标记为手工配置。
|
|
35
|
+
- CLI 与 DSH 的供应商可用性及旧分配对象解析共用规则:未声明 `enabled` 时默认启用,缺少端点或必要凭据时不进入候选链;旧 `{providerId, id}` 分配格式在两入口一致生效。
|
|
36
|
+
- 临时文件上传统一经过 Provider Adapter 的可选 `prepareInput` 能力;DashScope 由协议闭包持有凭据与端点,OpenAI Images 在上传前明确拒绝。上传错误统一脱敏为未受理分类,但 Core 转写的准备失败不伪造已落盘的 Task/Attempt。
|
|
37
|
+
|
|
38
|
+
- 精简 README、路线图和 Core/Host 契约,把版本施工记录留在 CHANGELOG 与验收文档。
|
|
39
|
+
- DSH 继续加载同一个 npm 插件入口;Core 与 Host Adapter 分离,不引入额外 daemon。
|
|
40
|
+
- 阿里云百炼支持独立 Workspace `mediaBaseUrl`、官方模型目录分页与能力元数据;模型池保持有序安全 failover,并保护用户手工能力覆盖。
|
|
41
|
+
|
|
42
|
+
### Fixed
|
|
43
|
+
|
|
44
|
+
- 修复 Model Port 使用超大合法 timeout 时,deadline 浮点舍入放大剩余预算而导致端口误判为非法输入的问题;剩余预算不超过原始输入,并补确定性边界回归。
|
|
45
|
+
- 修复 DSH 会话附件扫描丢失字节数和尺寸导致真实 `readImage()` 完整性检查失败;rc.2 默认视觉候选明确绑定 Provider/模型并先确认图片能力;客户端支持主视图持有者和无参数快照通知,并随插件卸载释放会话订阅。
|
|
46
|
+
- 修复 Core 知情重试直接透传外部字段的问题:转写的 `audio_url` 和图生视频的 `img_data_url` 现在分别转换为 Adapter 所需字段,保留重新提供的音频地址与首帧;未知参数不会静默丢弃。
|
|
47
|
+
- 关闭 Runtime 时,已接纳的操作会先收到取消信号并完成收束,避免操作尚未建立上下文就被释放。
|
|
48
|
+
- Artifact 导出不覆盖已有文件,检查会拒绝缺失或大小不一致的对象。
|
|
49
|
+
- CLI 对可捕获的 SIGINT/SIGTERM 会中止在途请求并释放写者租约;`auth:'none'` 的媒体请求不再发送空的 Bearer 头或沿用旧 Key,缺省 bearer 配置仍要求 Key。
|
|
50
|
+
- 修复显式租约恢复在中途 I/O 失败时引用未定义状态变量的问题;失败仍返回稳定的恢复错误码,并尽力保留原租约与审计证据。
|
|
51
|
+
|
|
52
|
+
- 明确 0.2.0 的 Core 生命周期末端边界:DSH 工作台现有删除、清空与孤儿清理只作用于 legacy `outputs/`,DSH 与 Headless CLI 都不删除 Core Task/Artifact;Doctor 只报告孤立对象、未提交 Manifest 和未解析条目。Core 删除与清理继续列入 0.2.x,不建议手工改动 `core-v0`。
|
|
53
|
+
|
|
54
|
+
### Security
|
|
55
|
+
|
|
56
|
+
- 同一物理数据根只允许一个 writer;reader 不创建、修复或迁移数据。
|
|
57
|
+
- Headless Command 结果和错误不返回输入文件或数据根的绝对路径。
|
|
58
|
+
|
|
7
59
|
## [0.1.4] - 2026-09-10
|
|
8
60
|
|
|
9
61
|
### Added
|
|
@@ -171,7 +223,8 @@
|
|
|
171
223
|
- 上传采用流式限额、临时 `.part` 文件和原子落盘,失败时会清理未完成文件。
|
|
172
224
|
- 修改状态的路由拒绝明确的跨站请求,媒体文件继续使用随机能力令牌访问。
|
|
173
225
|
|
|
174
|
-
[Unreleased]: https://github.com/mokuyoaxis/dsh-iris/compare/v0.
|
|
226
|
+
[Unreleased]: https://github.com/mokuyoaxis/dsh-iris/compare/v0.2.0...HEAD
|
|
227
|
+
[0.2.0]: https://github.com/mokuyoaxis/dsh-iris/compare/v0.1.4...v0.2.0
|
|
175
228
|
[0.1.4]: https://github.com/mokuyoaxis/dsh-iris/compare/v0.1.3...v0.1.4
|
|
176
229
|
[0.1.3]: https://github.com/mokuyoaxis/dsh-iris/compare/v0.1.2...v0.1.3
|
|
177
230
|
[0.1.2]: https://github.com/mokuyoaxis/dsh-iris/compare/v0.1.1...v0.1.2
|
package/README.en.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
5
|
<p align="center">
|
|
6
|
-
<img src="docs/assets/iris-
|
|
6
|
+
<img src="docs/assets/logo/iris-interim-flower.png" width="400" alt="IRIS line-art iris flower (interim logo)">
|
|
7
7
|
</p>
|
|
8
8
|
|
|
9
9
|
<h1 align="center">Iris Media for DSH</h1>
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
<p align="center">
|
|
14
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
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
|
|
16
|
+
<a href="https://nodejs.org/"><img alt="Node.js 22 or newer" src="https://img.shields.io/badge/Node.js-%3E%3D22-339933.svg?style=flat-square&logo=nodedotjs&logoColor=white"></a>
|
|
17
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
18
|
<a href="LICENSE"><img alt="MIT License" src="https://img.shields.io/badge/license-MIT-1689FF.svg?style=flat-square"></a>
|
|
19
19
|
</p>
|
|
@@ -44,7 +44,23 @@ These captures come from an Android browser connected to DSH under Termux/PRoot
|
|
|
44
44
|
|
|
45
45
|
The project is at an early stage; interfaces and configuration formats may still change between releases.
|
|
46
46
|
|
|
47
|
-
Iris
|
|
47
|
+
Iris is evolving toward a media production core that can run independently and plug into different agent hosts. Version 0.2.0 provides both a DSH plugin and a headless CLI media path (crop, image/video/TTS/transcription submission, task observation, artifact export). Core internals have not been frozen as a public SDK.
|
|
48
|
+
|
|
49
|
+
> Version support: Iris `0.2.0` requires Node.js `>=22.0.0` and its DSH plugin supports only the exact host version `0.2.0-rc.2`. Older DSH hosts should pin `@mokuyoaxis/dsh-iris@0.1.4` as described below instead of following npm latest. Iris and DSH have independent version numbers.
|
|
50
|
+
|
|
51
|
+
## Two ways to use Iris
|
|
52
|
+
|
|
53
|
+
| | Path A: DSH plugin (0.2.0) | Path B: Headless CLI (0.2.0) |
|
|
54
|
+
|---|---|---|
|
|
55
|
+
| Who it's for | DeepSeek Harness users who want agent tools, the workbench, and in-chat prompt optimization | Users who want media generation, task tracking, and artifact export from the command line without DSH |
|
|
56
|
+
| Entry point | Choose a pinned release under "Quickest start" below | `dsh-iris run ...` — see [Headless CLI](docs/HEADLESS_CLI.md) |
|
|
57
|
+
| Data location | `$DSH_HOME/iris/v1/` (Core data root `core-v0`) | Any absolute path passed via `--data-root` |
|
|
58
|
+
| Automatic observation | Yes (bounded DSH host ticks + restart takeover) | No — explicit single-step `task observe` |
|
|
59
|
+
| Dependencies | DSH `0.2.0-rc.2` and Node.js ≥ 22 | Node.js ≥ 22 and `sharp` only (`ffmpeg` for video frames) |
|
|
60
|
+
|
|
61
|
+
Both paths read and write the same Core Task/Artifact facts: point the CLI at the `core-v0` data root of a DSH profile to inspect/export DSH-generated artifacts, and vice versa. Only one writer is allowed per data root.
|
|
62
|
+
|
|
63
|
+
> Install size note: image processing depends on `sharp` and its prebuilt binaries (~27 MB). On uncommon platforms (e.g. some ARM proot environments) a failed sharp install is detected by `dsh-iris doctor`; image actions become unavailable while everything else keeps working.
|
|
48
64
|
|
|
49
65
|
## Relationship with ai-paint
|
|
50
66
|
|
|
@@ -54,16 +70,47 @@ Early versions read models and credentials from the maintainer's local ai-paint
|
|
|
54
70
|
|
|
55
71
|
## Quickest start
|
|
56
72
|
|
|
57
|
-
|
|
73
|
+
Check the host with `dsh --version` and ensure `pnpm` is on your PATH. Iris and DSH have independent version numbers; choose a matching combination:
|
|
74
|
+
|
|
75
|
+
| Your DSH | Iris choice | Source |
|
|
76
|
+
|---|---|---|
|
|
77
|
+
| `0.2.0-rc.2` | `0.2.0` | Pinned npm release |
|
|
78
|
+
| `>=0.1.2-rc.1 <0.1.3-0` or `0.1.5-rc.1` | Stable `0.1.4` | Pinned npm release |
|
|
79
|
+
| Other versions | No current support claim | Check host adaptation before installing |
|
|
80
|
+
|
|
81
|
+
### Older DSH: install stable 0.1.4
|
|
82
|
+
|
|
83
|
+
For the older DSH range above, add the pinned release to the Web profile:
|
|
58
84
|
|
|
59
85
|
```bash
|
|
60
|
-
dsh plugin --profile web add @mokuyoaxis/dsh-iris
|
|
86
|
+
dsh plugin --profile web add @mokuyoaxis/dsh-iris@0.1.4
|
|
61
87
|
dsh web
|
|
62
88
|
```
|
|
63
89
|
|
|
64
|
-
|
|
90
|
+
To download the published npm package separately:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
npm pack @mokuyoaxis/dsh-iris@0.1.4
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
This writes a `.tgz` to the current directory. Use `npm install @mokuyoaxis/dsh-iris@0.1.4` if you only want a regular npm dependency; that does not add a DSH profile layer. Pinning `@0.1.4` keeps selecting the old stable release after latest changes. See [npm pack](https://docs.npmjs.com/cli/v11/commands/npm-pack/). Version 0.1.4 does not contain the 0.2.0 Core media CLI or the later DSH rc.2 adaptation.
|
|
65
97
|
|
|
66
|
-
|
|
98
|
+
### DSH 0.2.0-rc.2: install 0.2.0
|
|
99
|
+
|
|
100
|
+
Install the pinned npm release into the Web profile:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
dsh plugin --profile web add @mokuyoaxis/dsh-iris@0.2.0
|
|
104
|
+
dsh web
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
The plugin loads the next time DSH starts; the web UI defaults to `http://127.0.0.1:3080`. Open the complete URL if startup output includes authentication parameters. Version 0.2.0's compatibility metadata admits only DSH rc.2.
|
|
108
|
+
|
|
109
|
+
### Choosing a version in dsh-market
|
|
110
|
+
|
|
111
|
+
The marketplace entry should resolve to the full package name `@mokuyoaxis/dsh-iris`. Check both its displayed Iris version and your local `dsh --version` before installing: 0.2.0 is for DSH rc.2; older hosts should use the pinned `@0.1.4` commands above. Catalog and npm information may be cached. The actual npm package's `dsh.engines.dsh` and Node engines determine its declared requirements; a visible listing does not imply support for every DSH release.
|
|
112
|
+
|
|
113
|
+
> 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.
|
|
67
114
|
|
|
68
115
|
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
116
|
|
|
@@ -77,6 +124,8 @@ Summarize /absolute/path/demo.mp4 with Iris, then turn the summary into speech.
|
|
|
77
124
|
|
|
78
125
|
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
126
|
|
|
127
|
+
For a copyable installation and usage prompt, see [Agent quickstart prompt](docs/AGENT_QUICKSTART.md).
|
|
128
|
+
|
|
80
129
|
## Feature overview
|
|
81
130
|
|
|
82
131
|

|
|
@@ -93,7 +142,7 @@ DSH profiles and plugin commands follow the [official installation docs](https:/
|
|
|
93
142
|
|
|
94
143
|
## Prerequisites
|
|
95
144
|
|
|
96
|
-
- A Node.js version that satisfies your DeepSeek Harness release's requirement;
|
|
145
|
+
- A Node.js version that satisfies your DeepSeek Harness release's requirement; Iris 0.2.0 requires at least 22.0.0, while the published npm 0.1.4 historically requires 20.10.0
|
|
97
146
|
- A working DeepSeek Harness environment with `pnpm` on the PATH
|
|
98
147
|
- At least one supported media or vision provider
|
|
99
148
|
- `ffmpeg` and `ffprobe` on the system, for video frame extraction and video summaries
|
|
@@ -102,11 +151,19 @@ After installing the plugin, add a provider in the Iris workbench and assign mod
|
|
|
102
151
|
|
|
103
152
|
## DeepSeek Harness adaptation
|
|
104
153
|
|
|
105
|
-
dsh-iris
|
|
154
|
+
dsh-iris remains a native DSH plugin. Its server registers 14 agent tools and uses host-provided routing, attachment, model, and lifecycle services. The web client contributes settings, composer, and global-overlay UI. Iris does not start another service or listen on an extra port.
|
|
155
|
+
|
|
156
|
+
| Iris version | DSH range | Verification |
|
|
157
|
+
|---|---|---|
|
|
158
|
+
| Published stable `0.1.4` | `>=0.1.2-rc.1 <0.1.3-0` | Historical clean and daily Web profiles on Linux ARM64 |
|
|
159
|
+
| Published stable `0.1.4` | `0.1.5-rc.1` | Historical daily Android/Linux profile checks |
|
|
160
|
+
| `0.2.0` | Only `0.2.0-rc.2` | Installed-service isolation checks, Core diff, and SlotRegistry; user demonstration reported successful, with detailed browser actions and asynchronous restart/rollback verification continuing |
|
|
161
|
+
|
|
162
|
+
See the [rc.2 adaptation notes](docs/DSH_RC2_ADAPTATION.md) for scope. The published npm 0.1.4 package does not contain these later changes.
|
|
106
163
|
|
|
107
|
-
|
|
164
|
+
Iris 0.2.0 no longer claims older DSH support; historical validation does not automatically cover this version. DSH `0.2.0` stable and other rc versions are also outside its support range. Automated checks cover server loading, tool and Skill registration, routes, the client bundle, and UI slots separately so Doctor can identify which boundary failed.
|
|
108
165
|
|
|
109
|
-
|
|
166
|
+
Core and the DSH Adapter are being separated: DSH keeps loading the same npm package, while the Adapter maps host capabilities into Core. A DSH API change should require an Adapter or client-bridge fix, not a rewrite of Task or Artifact semantics. Version 0.2.0 includes the headless CLI. The `dsh` prefix will be removed after a second real Host Adapter is implemented and accepted, with a new npm package at that point; see the [roadmap](docs/ROADMAP.md).
|
|
110
167
|
|
|
111
168
|
## Tools
|
|
112
169
|
|
|
@@ -157,9 +214,9 @@ By default, the optimizer uses the model selected for the current session and fa
|
|
|
157
214
|
|
|
158
215
|
## Model assignment and failover
|
|
159
216
|
|
|
160
|
-
Capability assignment uses `providerId::modelId` as the model identity. The same model name from a different provider or account counts as two independent options.
|
|
217
|
+
Capability assignment uses `providerId::modelId` as the model identity. The same model name from a different provider or account counts as two independent options. Discovery prefers provider capability metadata, falls back to name rules, and preserves explicit user overrides. Alibaba Cloud media calls may use a separate Workspace `mediaBaseUrl`.
|
|
161
218
|
|
|
162
|
-
Generation capabilities accept multiple candidate models. Iris tries the next candidate only when the provider explicitly proves that the request was not accepted. A 500 response, timeout, disconnect, missing response, polling failure, or local persistence failure never authorizes automatic resubmission. Once accepted, Iris may only resume observation or delivery.
|
|
219
|
+
Generation capabilities accept multiple candidate models. Every request starts at the head of the ordered list; this is safe failover, not round-robin. Iris tries the next candidate only when the provider explicitly proves that the request was not accepted. A 500 response, timeout, disconnect, missing response, polling failure, or local persistence failure never authorizes automatic resubmission. Once accepted, Iris may only resume observation or delivery.
|
|
163
220
|
|
|
164
221
|
The workbench lists paused observation, unknown acceptance/outcome, and successful generation with failed delivery under “Needs attention.” Re-observe never submits; re-deliver never regenerates; acknowledge/restore only changes the local reminder queue; only an explicitly confirmed informed retry creates a linked new task and may incur duplicate charges. Creating that task archives the original reminder while preserving its unknown facts and audit link. See [Task semantics](docs/TASK_SEMANTICS.md), [Architecture](docs/ARCHITECTURE.md), [Security](docs/SECURITY.md), and the [Fault-injection matrix](docs/FAULT_INJECTION.md).
|
|
165
222
|
|
|
@@ -218,7 +275,7 @@ Audio and video are served through Iris media links that carry random capability
|
|
|
218
275
|
## Security notes
|
|
219
276
|
|
|
220
277
|
- Provider keys are never returned by status endpoints.
|
|
221
|
-
- The DashScope media protocol only sends keys to official Alibaba Cloud HTTPS domains;
|
|
278
|
+
- The DashScope media protocol only sends keys to official Alibaba Cloud HTTPS, regional, or Workspace domains. A separate `mediaBaseUrl` may split media from vision/chat traffic; other addresses default to the OpenAI Images–compatible protocol.
|
|
222
279
|
- `/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.
|
|
223
280
|
- `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.
|
|
224
281
|
- 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.
|
|
@@ -263,7 +320,7 @@ Run in the project directory:
|
|
|
263
320
|
|
|
264
321
|
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.
|
|
265
322
|
|
|
266
|
-
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
|
|
323
|
+
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 22.0.0/latest 22.x matrix, with repeated natural-exit checks on the minimum version, and a pre-release hook re-runs the full suite. DSH host smoke tests on native Windows/WSL are still pending real-machine verification.
|
|
267
324
|
|
|
268
325
|
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.
|
|
269
326
|
|
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
5
|
<p align="center">
|
|
6
|
-
<img src="docs/assets/iris-
|
|
6
|
+
<img src="docs/assets/logo/iris-interim-flower.png" width="400" alt="IRIS 线稿鸢尾花(临时标志)">
|
|
7
7
|
</p>
|
|
8
8
|
|
|
9
9
|
<h1 align="center">Iris Media for DSH</h1>
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
<p align="center">
|
|
14
14
|
<a href="#deepseek-harness-适配"><img alt="DeepSeek Harness compatible" src="https://img.shields.io/badge/DeepSeek%20Harness-compatible-4D6BFE.svg?style=flat-square"></a>
|
|
15
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
|
|
16
|
+
<a href="https://nodejs.org/"><img alt="Node.js 22 or newer" src="https://img.shields.io/badge/Node.js-%3E%3D22-339933.svg?style=flat-square&logo=nodedotjs&logoColor=white"></a>
|
|
17
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
18
|
<a href="LICENSE"><img alt="MIT License" src="https://img.shields.io/badge/license-MIT-1689FF.svg?style=flat-square"></a>
|
|
19
19
|
</p>
|
|
@@ -44,7 +44,23 @@ dsh-iris 为 Agent 和 Iris 工作台提供图像、视频、语音与视觉理
|
|
|
44
44
|
|
|
45
45
|
项目目前处于早期版本,接口和配置格式仍可能随版本迭代调整。
|
|
46
46
|
|
|
47
|
-
Iris 的长期方向是可独立运行、可接入不同 Agent 宿主的媒体生产核心。
|
|
47
|
+
Iris 的长期方向是可独立运行、可接入不同 Agent 宿主的媒体生产核心。0.2.0 同时提供 DSH 插件与无 DSH 的 CLI 媒体链路(crop、图片/视频/语音/转写提交、任务观察、作品导出)。Core 内部接口尚未冻结为公共 SDK。
|
|
48
|
+
|
|
49
|
+
> 版本支持:Iris `0.2.0` 要求 Node.js `>=22.0.0`,DSH 插件仅支持准确版本 `0.2.0-rc.2`。旧 DSH 使用下文列出的 `@mokuyoaxis/dsh-iris@0.1.4`,不要直接跟随 npm latest 更新。Iris 与 DSH 的版本号独立。
|
|
50
|
+
|
|
51
|
+
## 两条使用路径
|
|
52
|
+
|
|
53
|
+
| | 路径 A:DSH 插件(0.2.0) | 路径 B:Headless CLI(0.2.0) |
|
|
54
|
+
|---|---|---|
|
|
55
|
+
| 适合谁 | 已在使用 DeepSeek Harness,想要 Agent 工具、工作台和对话内提示词优化 | 想在无 DSH 环境用命令行完成媒体生成、任务跟踪和作品导出 |
|
|
56
|
+
| 入口 | 按下文「最快开始」选择固定版本 | `dsh-iris run ...`,见 [Headless CLI](docs/HEADLESS_CLI.md) |
|
|
57
|
+
| 数据位置 | `$DSH_HOME/iris/v1/`(Core 数据根 `core-v0`) | 显式 `--data-root` 指定的任意绝对路径 |
|
|
58
|
+
| 自动观察 | 有(DSH Host 有界节拍 + 重启接管) | 无,显式单步 `task observe` |
|
|
59
|
+
| 依赖 | DSH `0.2.0-rc.2`、Node.js ≥ 22 | 仅 Node.js ≥ 22 与 `sharp`(视频抽帧另需 `ffmpeg`) |
|
|
60
|
+
|
|
61
|
+
两条路径读写同一份 Core Task/Artifact 事实:CLI 指向 DSH profile 的 `core-v0` 数据根即可 inspect/export DSH 生成的作品,反之亦然。同一数据根只允许一个写者。
|
|
62
|
+
|
|
63
|
+
> 安装体积提示:图像处理依赖 `sharp` 及其预编译二进制(约 27MB)。冷门平台(如部分 ARM proot 环境)安装失败时 `dsh-iris doctor` 可检出,图像类动作不可用,其余能力不受影响。
|
|
48
64
|
|
|
49
65
|
## 与 ai-paint 的关系
|
|
50
66
|
|
|
@@ -54,16 +70,47 @@ Iris 的长期方向是可独立运行、可接入不同 Agent 宿主的媒体
|
|
|
54
70
|
|
|
55
71
|
## 最快开始
|
|
56
72
|
|
|
57
|
-
|
|
73
|
+
先用 `dsh --version` 核对宿主版本,并确认 `pnpm` 在 PATH 中。Iris 版本与 DSH 版本独立,按以下组合选择:
|
|
74
|
+
|
|
75
|
+
| 你的 DSH | Iris 选择 | 安装来源 |
|
|
76
|
+
|---|---|---|
|
|
77
|
+
| `0.2.0-rc.2` | `0.2.0` | 固定 npm 版本 |
|
|
78
|
+
| `>=0.1.2-rc.1 <0.1.3-0` 或 `0.1.5-rc.1` | 稳定版 `0.1.4` | 固定 npm 版本 |
|
|
79
|
+
| 其他版本 | 暂无当前支持声明 | 先核对宿主适配,不能按相邻版本推定兼容 |
|
|
80
|
+
|
|
81
|
+
### 旧 DSH:安装稳定版 0.1.4
|
|
82
|
+
|
|
83
|
+
在上述旧 DSH 范围内,将固定版本加入 Web profile:
|
|
58
84
|
|
|
59
85
|
```bash
|
|
60
|
-
dsh plugin --profile web add @mokuyoaxis/dsh-iris
|
|
86
|
+
dsh plugin --profile web add @mokuyoaxis/dsh-iris@0.1.4
|
|
61
87
|
dsh web
|
|
62
88
|
```
|
|
63
89
|
|
|
64
|
-
|
|
90
|
+
需要单独下载 npm 发布包时:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
npm pack @mokuyoaxis/dsh-iris@0.1.4
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
命令会在当前目录生成 `.tgz`。只需安装为普通 npm 依赖时可使用 `npm install @mokuyoaxis/dsh-iris@0.1.4`;这不会自动把插件加入 DSH profile。固定 `@0.1.4` 可在 latest 更新后继续取得旧稳定版本,见 [npm pack 文档](https://docs.npmjs.com/cli/v11/commands/npm-pack/)。0.1.4 不包含 0.2.0 的 Core 媒体 CLI,也不包含 DSH rc.2 的后续适配。
|
|
65
97
|
|
|
66
|
-
|
|
98
|
+
### DSH 0.2.0-rc.2:安装 0.2.0
|
|
99
|
+
|
|
100
|
+
从 npm 安装固定版本到 Web profile:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
dsh plugin --profile web add @mokuyoaxis/dsh-iris@0.2.0
|
|
104
|
+
dsh web
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
插件会在下一次 DSH 启动时装载,Web UI 默认位于 `http://127.0.0.1:3080`;启动输出带认证参数时请打开完整 URL。0.2.0 的兼容元数据仅放行 DSH rc.2。
|
|
108
|
+
|
|
109
|
+
### dsh-market 安装时的版本选择
|
|
110
|
+
|
|
111
|
+
市场条目应对应完整包名 `@mokuyoaxis/dsh-iris`。安装前同时核对市场显示的 Iris 版本与本机 `dsh --version`:0.2.0 仅用于 DSH rc.2;旧宿主使用上面的固定 `@0.1.4` 命令。市场目录与 npm 信息可能有缓存,以实际 npm 包的 `dsh.engines.dsh` 和 Node engines 为准;市场中可见不代表任意 DSH 版本兼容。
|
|
112
|
+
|
|
113
|
+
> npm 上无 scope 的 `dsh-iris` 属于另一款插件。安装和更新 Iris Media 时必须保留完整包名 `@mokuyoaxis/dsh-iris`。
|
|
67
114
|
|
|
68
115
|
首次启动后,打开“设置 → Iris 工作台 → + 添加供应商”,填入 DashScope Base URL 和 API Key,再点“发现模型”。单供应商可以先使用自动能力分配。完整步骤、OpenAI Images 兼容配置和故障转移说明见[用户指南](user_guide.md)。
|
|
69
116
|
|
|
@@ -77,6 +124,8 @@ dsh web
|
|
|
77
124
|
|
|
78
125
|
DSH 的 profile 与插件命令由[官方安装说明](https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/user/develop/basic/publish.md)定义。生成图片、视频或语音可能产生供应商费用。
|
|
79
126
|
|
|
127
|
+
给 AI Agent 的可复制安装与使用提示见 [Agent 简要 Prompt](docs/AGENT_QUICKSTART.md)。
|
|
128
|
+
|
|
80
129
|
## 功能概览
|
|
81
130
|
|
|
82
131
|

|
|
@@ -93,7 +142,7 @@ DSH 的 profile 与插件命令由[官方安装说明](https://github.com/deepse
|
|
|
93
142
|
|
|
94
143
|
## 使用前准备
|
|
95
144
|
|
|
96
|
-
- 满足所用 DeepSeek Harness 版本要求的 Node.js;
|
|
145
|
+
- 满足所用 DeepSeek Harness 版本要求的 Node.js;Iris 0.2.0 最低为 22.0.0,旧 npm 0.1.4 的历史要求为 20.10.0
|
|
97
146
|
- 一个可用的 DeepSeek Harness 环境,以及 PATH 中的 `pnpm`
|
|
98
147
|
- 至少一个受支持的媒体或视觉服务供应商
|
|
99
148
|
- 使用视频抽帧和视频摘要时,需要系统提供 `ffmpeg` 与 `ffprobe`
|
|
@@ -102,11 +151,19 @@ DSH 的 profile 与插件命令由[官方安装说明](https://github.com/deepse
|
|
|
102
151
|
|
|
103
152
|
## DeepSeek Harness 适配
|
|
104
153
|
|
|
105
|
-
dsh-iris
|
|
154
|
+
dsh-iris 仍按 DSH 原生插件装载。服务端注册 14 个 Agent 工具,并使用宿主提供的路由、附件、模型和生命周期能力;Web 客户端接入设置页、会话输入区与全局悬浮层。插件不会启动额外服务或监听端口。
|
|
155
|
+
|
|
156
|
+
| Iris 范围 | DSH 范围 | 验证记录 |
|
|
157
|
+
|---|---|---|
|
|
158
|
+
| 已发布稳定版 `0.1.4` | `>=0.1.2-rc.1 <0.1.3-0` | 历史 Linux ARM64 干净与日常 Web profile 验收 |
|
|
159
|
+
| 已发布稳定版 `0.1.4` | `0.1.5-rc.1` | 历史 Android/Linux 日常 profile 验收 |
|
|
160
|
+
| `0.2.0` | 仅 `0.2.0-rc.2` | 真实安装服务隔离验收、Core diff 与 SlotRegistry;已有用户实机演示反馈,逐项浏览器操作与异步重启/回退继续验收 |
|
|
161
|
+
|
|
162
|
+
rc.2 修正与验证范围见[适配说明](docs/DSH_RC2_ADAPTATION.md);已发布 npm 0.1.4 包不包含这项后续适配。
|
|
106
163
|
|
|
107
|
-
|
|
164
|
+
Iris 0.2.0 不再声明支持旧 DSH;旧版的历史验收不自动覆盖当前版本。DSH `0.2.0` 正式版及其他 rc 同样未列入支持范围。自动化测试分别检查服务端装载、工具与 Skill 注册、路由、客户端 bundle 和 Slot;其中一层失效时,Doctor 应指出具体边界。
|
|
108
165
|
|
|
109
|
-
|
|
166
|
+
Core 与 DSH Adapter 正在分离,DSH 继续加载同一个 npm 包,Adapter 把宿主能力映射给 Core。若 DSH 修改 API,修复应限制在 Adapter 和客户端桥接;Core 的任务和产物语义不随宿主版本改变。0.2.0 已提供无 DSH CLI;第二个真实 Host Adapter 完成并验收后再移除名称中的 `dsh` 前缀,届时发布新的 npm 包,见[路线图](docs/ROADMAP.md)。
|
|
110
167
|
|
|
111
168
|
## 工具
|
|
112
169
|
|
|
@@ -157,9 +214,9 @@ Iris 会在 DSH 对话输入区提供一个无边框、无文字的“🫧”入
|
|
|
157
214
|
|
|
158
215
|
## 模型分配与故障转移
|
|
159
216
|
|
|
160
|
-
能力分配使用 `providerId::modelId`
|
|
217
|
+
能力分配使用 `providerId::modelId` 作为模型身份。同名模型如果来自不同供应商或不同账号,会被视为两个独立选项。模型发现优先采用供应商返回的能力元数据,名称规则只作兜底,用户手工标注最终生效;阿里云百炼可为媒体请求单独配置 Workspace `mediaBaseUrl`。
|
|
161
218
|
|
|
162
|
-
|
|
219
|
+
生成类能力可以配置多个候选模型。每次请求都从有序列表首项开始,并非 round-robin;Iris 只有在供应商明确证明未受理时才会尝试下一个候选;500、超时、断网、响应缺失、轮询失败和本地落盘失败都不会授权自动重提。远端服务一旦受理任务,Iris 只会恢复观察或交付,以免产生重复任务或重复计费。
|
|
163
220
|
|
|
164
221
|
工作台把观察暂停、受理/结果未知和生成成功但交付失败单列为“需要处理”。“重新观察”不会提交;“重新交付”不会重新生成;“标为已读/恢复提醒”只改变本地提醒队列;只有“知情重试”会创建新任务,并要求用户逐次确认潜在重复费用。新任务创建后,原提醒自动归档但保留未知事实和新旧任务关联。任务语义、架构、安全边界与故障证据分别见 [`TASK_SEMANTICS.md`](docs/TASK_SEMANTICS.md)、[`ARCHITECTURE.md`](docs/ARCHITECTURE.md)、[`SECURITY.md`](docs/SECURITY.md) 和 [`FAULT_INJECTION.md`](docs/FAULT_INJECTION.md)。
|
|
165
222
|
|
|
@@ -218,7 +275,7 @@ Iris 自带两个 Agent Skills(`iris-verify-ui` 与 `iris-compose-media`),
|
|
|
218
275
|
## 安全说明
|
|
219
276
|
|
|
220
277
|
- 供应商密钥不会通过状态接口返回。
|
|
221
|
-
- DashScope 媒体协议只允许把密钥发送到阿里云官方 HTTPS
|
|
278
|
+
- DashScope 媒体协议只允许把密钥发送到阿里云官方 HTTPS、地域或 Workspace 域名;可用独立 `mediaBaseUrl` 与视觉/对话端点分流,其他地址默认推断为 OpenAI Images 兼容协议。
|
|
222
279
|
- `/iris/*` 默认只接受回环 Host;LAN 或反向代理必须显式设置 `IRIS_TRUSTED_HOSTS`,修改状态的请求还会检查跨站来源。
|
|
223
280
|
- `IRIS_TRUSTED_HOSTS` 不是认证机制。对公网或不可信网络开放 DSH 时,必须在反向代理或宿主层配置身份认证与 HTTPS。
|
|
224
281
|
- 模型实测只按单项能力运行,并在真实供应商调用前确认;视频和转写不会用空样本自动提交付费探针。
|
|
@@ -263,7 +320,7 @@ Iris 自带两个 Agent Skills(`iris-verify-ui` 与 `iris-compose-media`),
|
|
|
263
320
|
|
|
264
321
|
测试覆盖配置合并、模型身份、任务生命周期、生成动作、HTTP/SSE 路由、客户端交互和安全边界。项目采用 ES Modules,不需要构建步骤。
|
|
265
322
|
|
|
266
|
-
测试调度使用 Node.js,逐文件启动独立进程,首个失败即停止,不依赖 Bash;临时目录使用系统 API 并在退出时清理。GitHub Actions 定义 Linux/Windows × Node.js
|
|
323
|
+
测试调度使用 Node.js,逐文件启动独立进程,首个失败即停止,不依赖 Bash;临时目录使用系统 API 并在退出时清理。GitHub Actions 定义 Linux/Windows × Node.js 22.0.0/最新 22.x 矩阵,并在最低版本重复检查进程自然退出;发布前钩子会重新运行完整测试。原生 Windows/WSL 的 DSH 宿主烟测仍待实机验证。
|
|
267
324
|
|
|
268
325
|
发布由 `v*` 标签触发 `.github/workflows/release.yml`:跑完整测试后打包,用工作流内置 `GITHUB_TOKEN` 创建 GitHub Release(附 tarball,发布说明取自 CHANGELOG 对应章节),并在配置了 `NPM_TOKEN` secret 时发布到 npm。本机无需任何 GitHub 凭据。
|
|
269
326
|
|