@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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Provider Adapter v0 生命周期契约
|
|
2
2
|
|
|
3
|
-
状态:**v0.1.4
|
|
3
|
+
状态:**v0.1.4 的六操作内部契约已实现;0.2.0 增加可选输入准备能力。** 这是 Iris Core 模块与供应商协议实现之间的内部边界,尚未冻结为第三方公开 SDK。当前 DashScope 与 OpenAI Images 兼容实现已经通过同一套零网络 conformance runner。
|
|
4
4
|
|
|
5
5
|
## 目标与依赖方向
|
|
6
6
|
|
|
@@ -18,11 +18,17 @@ Action / Task watcher / recovery / model discovery
|
|
|
18
18
|
|
|
19
19
|
- Action、Task 恢复、重新交付、模型发现和能力实测不得直接调用供应商生命周期 HTTP 方法。
|
|
20
20
|
- Provider Adapter 不创建或修改 Iris Task,不读取 DSH `ctx`,也不承担工作台展示。
|
|
21
|
-
- `adapters.js` 保留为协议级 HTTP transport
|
|
21
|
+
- `adapters.js` 保留为协议级 HTTP transport;凭据和实际媒体端点仅由具体 Adapter 的操作闭包捕获。配置可用 `mediaBaseUrl` 分离媒体与普通/视觉端点,空值沿用 `baseUrl`。
|
|
22
22
|
- Adapter 快照只包含稳定身份、协议、能力与 supported/unsupported 事实,不包含 API Key、Authorization、私有 URL、配置对象或 live transport。
|
|
23
23
|
|
|
24
24
|
## 描述结构
|
|
25
25
|
|
|
26
|
+
0.2.0 的协议工厂由内部注册表选择,当前仍只有 `dashscope` 和 `openai-images` 两项,不提供公开注册 API。未知的显式 `mediaProtocol` 保留原值,调用时以 `IRIS_PROVIDER_PROTOCOL_UNSUPPORTED` 在联网前拒绝;错误只包含合法协议标识,不回显端点或凭据。
|
|
27
|
+
|
|
28
|
+
未配置协议或选择 `auto` 时,官方端点可识别为对应协议;其他端点继续使用 OpenAI Images 兼容路径,并标记 `protocolInferred:true`。该标记表示尚待用户确认兼容性,不代表已经验证成功。显式选择协议会清除标记;旧记录中已保存的明确协议不追溯猜测其来源。CLI 与 DSH 共用选择逻辑,Task binding 绑定最终实际协议与端点。
|
|
29
|
+
|
|
30
|
+
视觉理解的 `type` 使用独立注册表,目前只有 `openai` 实现。导入保留显式类型;未支持类型在该后端调用前返回 `IRIS_VISION_PROTOCOL_UNSUPPORTED`,不会被静默改写为另一种协议。错误保留在后端链的 `errors` 中,既有宿主视觉降级仍可继续。`auth:'none'` 不发送认证头,缺省认证方式仍为 `bearer`。
|
|
31
|
+
|
|
26
32
|
`defineProviderAdapter()` 只接受以下顶层字段:
|
|
27
33
|
|
|
28
34
|
```js
|
|
@@ -32,12 +38,16 @@ Action / Task watcher / recovery / model discovery
|
|
|
32
38
|
protocol: 'dashscope',
|
|
33
39
|
capabilities: ['image', 'video', 'tts', 'transcribe'],
|
|
34
40
|
operations: { discover, submit, poll, download, mapError },
|
|
35
|
-
unsupported: { cancel: '经过验证的原因' }
|
|
41
|
+
unsupported: { cancel: '经过验证的原因' },
|
|
42
|
+
// 可选扩展:prepareInput 或 unsupportedPreparation,二者不能同时声明
|
|
43
|
+
prepareInput: async ({ model, filePath, signal, timeoutMs }) => ({ url: '临时地址' })
|
|
36
44
|
}
|
|
37
45
|
```
|
|
38
46
|
|
|
39
47
|
六个操作必须**恰好**出现在 `operations` 或 `unsupported` 之一。方法缺失不能被解释为临时故障;调用显式不支持的方法会得到稳定的 `IRIS_PROVIDER_OPERATION_UNSUPPORTED`。v0 要求所有 Adapter 实现 `submit` 与 `mapError`,其余操作可根据协议事实显式声明不支持。
|
|
40
48
|
|
|
49
|
+
`prepareInput` 不属于这六个生命周期操作。未提供该扩展的旧 Adapter 仍有效,能力快照中的 `inputPreparation` 会标为 unsupported;具体协议也可以用 `unsupportedPreparation` 给出受控原因。快照不包含凭据、端点或临时地址。
|
|
50
|
+
|
|
41
51
|
## 生命周期操作
|
|
42
52
|
|
|
43
53
|
| 操作 | 输入职责 | canonical 结果 |
|
|
@@ -46,10 +56,12 @@ Action / Task watcher / recovery / model discovery
|
|
|
46
56
|
| `submit` | capability、model、规范化 input、signal | `completed / accepted / not_accepted / acceptance_unknown` |
|
|
47
57
|
| `poll` | capability、remoteTaskId、signal | `pending / succeeded / failed / canceled / unknown` |
|
|
48
58
|
| `cancel` | remoteTaskId、signal | `canceled / not_supported / unknown` |
|
|
49
|
-
| `download` |
|
|
59
|
+
| `download` | 可物化 artifact、目标路径、signal | `{ bytes }` |
|
|
50
60
|
| `mapError` | 原始错误与 stage/acceptance 上下文 | 可持久化的脱敏错误记录 |
|
|
51
61
|
|
|
52
|
-
|
|
62
|
+
Core Attempt 持久化 `providerId::modelId` 复合身份,具体 Provider Adapter 的 `submit.model` 只接收供应商原始模型 ID;复合引用不得穿透到 HTTP。
|
|
63
|
+
|
|
64
|
+
`accepted` 不是独立网络操作,而是异步 `submit` 的受理结果。它必须携带非空远端任务 ID;同步成功使用 `completed`,并提供 canonical `artifacts`。迁移期仍保留可直接读取但不随 JSON 序列化的旧 `value`,供 0.1.4 调用方使用。四态提交和自动 failover 规则继续以 [Provider 提交契约 v0](PROVIDER_SUBMISSION_CONTRACT.md) 为准。
|
|
53
65
|
|
|
54
66
|
## poll、cancel 与交付事实
|
|
55
67
|
|
|
@@ -58,11 +70,15 @@ Action / Task watcher / recovery / model discovery
|
|
|
58
70
|
- `failed` 需要供应商明确的失败证据;
|
|
59
71
|
- `canceled` 需要远端确认,Task 才能写入 `cancelState=remote_confirmed`;
|
|
60
72
|
- `unknown` 只停止当前盯守并保留 `acceptance=accepted`,不得伪造失败或重提;
|
|
61
|
-
- `succeeded`
|
|
73
|
+
- `succeeded` 和图片 `completed` 使用同一可物化描述:`remote-url` 或 `inline-base64`;文本任务仍可使用 text value。生成成功先于本地物化事实落盘。
|
|
74
|
+
|
|
75
|
+
`download` 物化已经确认成功的产物:`remote-url` 执行下载,OpenAI Images 的 `inline-base64` 直接写入私有 staging。inline 正文只作为 non-enumerable 的短生命周期字段传给 Runner,不进入 JSON、Task 或 Manifest。物化失败只能改变交付状态,不能触发生成重提。OpenAI Images 当前同步返回图片,所以 `poll` 与 `cancel` 显式 unsupported;DashScope 当前没有经过验证的远端取消接口,因此 `cancel` 同样显式 unsupported,而不是伪装取消成功。
|
|
62
76
|
|
|
63
|
-
|
|
77
|
+
## 可选输入准备与上传边界
|
|
64
78
|
|
|
65
|
-
|
|
79
|
+
Host 和 CLI 通过 `prepareProviderInput(adapter, { model, filePath, signal?, timeoutMs? })` 调用可选准备能力,不能自行绕过 Adapter 上传。DashScope 的 Adapter 闭包持有实际凭据与媒体端点并实现临时上传;OpenAI Images 明确不支持。未实现时在网络调用前抛 `IRIS_PROVIDER_INPUT_PREPARATION_UNSUPPORTED`。返回的 `{url}` 只供紧随其后的提交读取,属性不参与 JSON 序列化,不能进入 Task、日志或能力快照。
|
|
80
|
+
|
|
81
|
+
上传错误经 Adapter 映射与脱敏,固定为 `stage=upload / acceptance=not_accepted`;这组字段属于返回调用方的安全错误分类,**不等于已持久化的 Core Attempt stage**。上传属于 Host/CLI 输入准备,只有随后真正调用 `submit` 才跨越可能计费的受理边界。当前 s2v 仍走 legacy 链,其 Attempt 可保存上传错误;Core 转写的 `audio_path` 在创建 Task 前上传,失败会直接返回且不创建 Core Task,也不会调用 submit。这是 D-12 当前采用的路径 B;若未来要求把准备失败纳入 Core 事实,须另行评审路径 A,不能由错误字段反推已经落盘。
|
|
66
82
|
|
|
67
83
|
## 错误与取消传播
|
|
68
84
|
|
|
@@ -78,13 +94,35 @@ Action / Task watcher / recovery / model discovery
|
|
|
78
94
|
|
|
79
95
|
| 协议 | discover | submit | poll | cancel | download | mapError |
|
|
80
96
|
|---|---:|---:|---:|---:|---:|---:|
|
|
81
|
-
| DashScope |
|
|
97
|
+
| DashScope | 支持(`/api/v1/models` 分页与能力元数据) | 图片/视频/TTS/转写 | 图片/视频/转写 | 显式不支持 | 支持 | 支持 |
|
|
82
98
|
| OpenAI Images 兼容 | 支持 | 同步图片 | 显式不支持 | 显式不支持 | 支持 | 支持 |
|
|
83
99
|
|
|
84
100
|
本表只描述协议生命周期,不扩大 0.1.4 的供应商范围。Gemini、Fal 与 Replicate 仍在 0.2.x 路线中。
|
|
85
101
|
|
|
86
102
|
## conformance runner
|
|
87
103
|
|
|
104
|
+
### 协议 Transport 接口
|
|
105
|
+
|
|
106
|
+
`provider-adapters.js` 的构造器接受可选 `transport`,默认使用 `adapters.js`。它是内部协议实现与测试 fixture 的注入边界,不是 Core API。除独立下载方法外,网络方法接收 `key`、`baseUrl`、可选 `signal`/`timeoutMs`;只有适用方法接收 `model` 或 `remoteTaskId`。
|
|
107
|
+
|
|
108
|
+
| 方法 | 额外输入 | 返回值 |
|
|
109
|
+
|---|---|---|
|
|
110
|
+
| `listModels` | 无 | 模型条目数组,保留能力元数据 |
|
|
111
|
+
| `dashscopeImageMode` | 原始模型名(位置参数) | `legacy-async` 或 `multimodal-sync`,本地判断 |
|
|
112
|
+
| `submitImage` | `prompt/size/n` | 远端任务 ID |
|
|
113
|
+
| `generateImageMultimodal` | `prompt/size/n` | 图片 URL 数组 |
|
|
114
|
+
| `openAiGenerateImage` | `prompt/size/n` | URL 或 base64 图片条目数组 |
|
|
115
|
+
| `submitVideo` | `prompt/imgDataUrl/size/duration/audioUrl/resolution` | 远端任务 ID |
|
|
116
|
+
| `submitTranscription` | `audioUrl` | 远端任务 ID |
|
|
117
|
+
| `synthesizeTts` | `text/voice` | `{audioUrl}` 或 `{audioB64}` |
|
|
118
|
+
| `pollTask/pollTranscriptionTask` | `remoteTaskId` | 协议结果,由 Adapter 归一化为 canonical poll 结果 |
|
|
119
|
+
| `uploadTempFile` | `model/filePath` | 临时输入 URL;仅由支持该扩展的协议 Adapter 调用 |
|
|
120
|
+
| `downloadTo` | URL、目标路径、选项(位置参数) | 写入字节数 |
|
|
121
|
+
|
|
122
|
+
transport 抛出的原始错误必须经 Adapter 的错误映射;提交异常不能直接授权重提。`uploadTempFile` 经过 `prepareProviderInput` 归一化错误,但仍不属于六个 canonical 操作。
|
|
123
|
+
|
|
124
|
+
### 验证方式
|
|
125
|
+
|
|
88
126
|
零网络 runner 位于 `tests/fixtures/provider-conformance.mjs`,并由 `tests/provider-adapters-conformance.mjs` 对内置实现执行。它验证:
|
|
89
127
|
|
|
90
128
|
1. 快照可序列化且不含凭据;
|
|
@@ -92,6 +130,9 @@ Action / Task watcher / recovery / model discovery
|
|
|
92
130
|
3. 每个 supported 操作都有 fixture 场景;
|
|
93
131
|
4. unsupported 调用返回稳定错误;
|
|
94
132
|
5. mapError 会清除 synthetic secret 与本地路径;
|
|
95
|
-
6.
|
|
133
|
+
6. 提交四态、轮询五态、URL/inline 物化字节数和协议特定能力符合契约;
|
|
134
|
+
7. 同步多图片进入同一 Core Task,坏同步响应保持受理未知并停止 failover。
|
|
96
135
|
|
|
97
136
|
runner 本身不访问网络;具体 Adapter 构造时注入 fake transport。新增 Provider 前,必须先通过同一 runner,再进行用户明确授权的真实供应商短验。0.1.4 不发布 Provider SDK,也不把测试 runner 当成第三方兼容性承诺。
|
|
137
|
+
|
|
138
|
+
可选准备能力另由 `tests/provider-input-preparation.mjs` 和调用方的转写/s2v 测试覆盖:包括未支持协议零网络拒绝、临时 URL 不序列化、上传错误脱敏及上传前后受理边界。
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# FakeProvider 生命周期验收器
|
|
2
|
+
|
|
3
|
+
FakeProvider harness 是 Core 的零网络生命周期验收器,不是可配置的正式供应商,也不会出现在用户模型列表中。它以脚本化 fixture 驱动真实 Provider Adapter v0、Core Runtime、Task/Attempt v0 和 Artifact v0,验证远端任务边界而不产生 API 请求或费用。
|
|
4
|
+
|
|
5
|
+
## 覆盖链路
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
Task → 写前 Attempt → submit → accepted → poll
|
|
9
|
+
├─ pending → 重启 → poll
|
|
10
|
+
├─ succeeded → download → Artifact
|
|
11
|
+
├─ failed / unknown / canceled
|
|
12
|
+
└─ cancel → confirmed / unknown
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
- `submit` 前必须先持久化稳定 Attempt ID;写前失败时 Provider 调用次数为零。
|
|
16
|
+
- 只有明确 `not_accepted` 才能进入下一候选;`accepted` 或 `acceptance_unknown` 后禁止自动重提。
|
|
17
|
+
- 已落盘 `remoteTaskId` 的任务可由新 Runtime 恢复观察;停在 `submitting` 且没有受理结果的记录只能恢复为 `unknown`。
|
|
18
|
+
- Provider 成功与本地交付是两个事实。下载失败保留 `outcome=succeeded`、`deliveryState=failed`;重新交付只执行 `poll/download`。
|
|
19
|
+
- 只有 Provider 明确返回 `canceled` 才记录 `remote_confirmed`;不支持或结果未知均保持 `outcome=unknown`。
|
|
20
|
+
- 取消响应落盘前中断会恢复为未知;待交付或下载中断保留远端成功并标记交付失败,不自动重新生成。
|
|
21
|
+
- 下载 URL 只在单次调用内存中传递,不写入 Task。成功文件进入 Core Artifact,Host URL、DSH attachment 和会话展示不属于 Core 事实。
|
|
22
|
+
|
|
23
|
+
## 当前限制
|
|
24
|
+
|
|
25
|
+
每次 `observe` 只轮询一次,不拥有后台 timer;同一 Runtime 内同一 Task 的并发操作以 `IRIS_PROVIDER_TASK_BUSY` 拒绝。交付只验收一个 `image/png` 产物;重新交付需有持久化的远端任务 ID。Task v0 尚未迁移 0.1.4 的任务文件,也未形成公开 package export。多产物、内容哈希、关系边、索引重建和孤儿回收由 Artifact Manifest 阶段完成。
|
|
26
|
+
|
|
27
|
+
运行单项验收:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
node tests/provider-task-runner.mjs
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
完整回归仍使用 `npm test` 和 `npm run lint`。
|
|
@@ -57,4 +57,4 @@ Provider `submit()` 必须返回以下四种结构之一:
|
|
|
57
57
|
|
|
58
58
|
429 等可证明未创建任务的明确 4xx 拒绝可进入下一候选;408、409、425、499、5xx、网络异常、超时和成功响应缺少必要结果一律停止并记录 `acceptance=unknown`。同步生成已经成功后,下载或落盘失败记录为 `outcome=succeeded / deliveryState=failed`,不会重新生成。
|
|
59
59
|
|
|
60
|
-
视频、转写与 TTS
|
|
60
|
+
视频、转写与 TTS 使用同一受理边界,但提交前输入准备不自动成为 Core 事实。当前 s2v 仍走 legacy 链并可在 legacy Attempt 记录上传错误;Core 转写的 `audio_path` 在 Host/CLI 边界先上传,失败以脱敏的 `stage=upload / acceptance=not_accepted` 返回调用方,零 submit、零 Core Task。准备成功后才创建 Core Task/Attempt 并进入写前 submit;TTS 同步成功则先记 `completed/accepted` 再交付音频。工作台消费稳定的人类状态,并提供重新观察、重新交付、提醒已读/恢复和需确认费用的知情重试。v0.1.4 已将 discovery、submit、poll、cancel、download 与 error mapping 收口到统一 Adapter,并由零网络 conformance runner 覆盖现有 DashScope/OpenAI Images 路径。
|
package/docs/ROADMAP.md
CHANGED
|
@@ -1,110 +1,66 @@
|
|
|
1
1
|
# 路线图
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
变更详情见[变更记录](../CHANGELOG.md),完整工具清单见[README](../README.md)。
|
|
3
|
+
Iris 正从 DSH 媒体插件演进为可独立运行、可接入不同 Agent 宿主的媒体生产核心。本文只列当前状态与后续方向;历史版本的具体改动见[变更记录](../CHANGELOG.md),内部实现顺序不在公开路线图中展开。
|
|
6
4
|
|
|
7
5
|
## 当前状态
|
|
8
6
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
- 图像、视频、语音生成和音频转写
|
|
12
|
-
- 看图问答、OCR、定位、裁剪与像素比较
|
|
13
|
-
- 视频抽帧和多模态摘要
|
|
14
|
-
- 多供应商模型池与复合模型身份
|
|
15
|
-
- 浏览器上传、会话附件和宿主路径输入
|
|
16
|
-
- 异步任务恢复、取消传播、SSE 状态更新和授权媒体链接
|
|
17
|
-
- 独立作品库 v0:清任务历史后仍可浏览媒体,并可重新索引旧 `outputs/`
|
|
18
|
-
- 面向 Agent 与用户的统一视频生成实现
|
|
19
|
-
- 两个随包 Agent Skills:UI 视觉验收与多步骤媒体编排;0.1.2 会在插件启用时自动注册
|
|
20
|
-
|
|
21
|
-
当前发布版本为 `v0.1.3`。0.1.1 完成配置独立、安全与工程收口,并把 Web loader 适配固定到已验证的 DSH `0.1.2-rc.1` 接口;0.1.4 把已验证支持窗口扩展为 `>=0.1.2-rc.1 <0.1.3-0` 与 `0.1.5-rc.1`,其余预览版在进入支持范围前仍需重新运行宿主 canary。
|
|
22
|
-
|
|
23
|
-
## 已完成:0.1.1
|
|
24
|
-
|
|
25
|
-
### 配置独立与工程收口
|
|
7
|
+
当前版本为 `0.2.0`,保留包名 `@mokuyoaxis/dsh-iris`,同时提供 DeepSeek Harness 插件和 Headless CLI。它提供:
|
|
26
8
|
|
|
27
|
-
-
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
-
|
|
31
|
-
-
|
|
32
|
-
-
|
|
33
|
-
-
|
|
34
|
-
- 核对打包清单,记录真实环境和未验证平台。
|
|
9
|
+
- 图片、视频和语音生成,音频转写;
|
|
10
|
+
- 看图问答、OCR、目标定位、裁剪、像素比较、视频抽帧和摘要;
|
|
11
|
+
- 多供应商模型池与能力分配;
|
|
12
|
+
- 可恢复的异步任务、受理边界和人工接管;
|
|
13
|
+
- 独立作品库、Iris 工作台、🫧 提示词优化入口;
|
|
14
|
+
- 两项随包 Agent Skill;
|
|
15
|
+
- Host/Provider Adapter、离线 Doctor 和零网络一致性测试。
|
|
35
16
|
|
|
36
|
-
|
|
17
|
+
0.2.0 建立实例化 Core Runtime,打通无 DSH 的 crop、四种媒体生成提交、Task 观察与 Artifact 管理,并提供带内容哈希、关系边、可重建 Index 和孤儿恢复的 Artifact Manifest v0。crop 与图片、视频、语音、转写的新任务全部落到共享 Core Task/Attempt/Artifact:Host 负责有界观察、启动接管和 attachment/UI 投影;统一作品区与五类用户状态投影覆盖四种媒体工作,CLI、DSH API 和 UI 共用同一 Command Service 的人工控制面(重新观察、重新取回、取消、重试为新任务)。迁移过程中积累了真实 Provider canary 记录,详细范围与后续待验项以验收文档为准。s2v 数字人视频、视觉理解与提示词优化仍走原有链路;Core 公开 API 未冻结,详见 [Headless CLI](HEADLESS_CLI.md)、[FakeProvider 生命周期验收器](PROVIDER_RUNTIME_HARNESS.md)、[Artifact Manifest](ARTIFACT_MANIFEST.md)和 [DSH → Core 渐进迁移](DSH_CORE_MIGRATION.md)。
|
|
37
18
|
|
|
38
|
-
|
|
19
|
+
第二个真实 Host Adapter 实现并验收后,计划将现有 GitHub 仓库更名为 Iris,并新建 `@mokuyoaxis/iris` npm 包,复用发布工作流。当前 0.2.0 保留名称;旧包后续单独维护另行决定。CLI、测试 fixture 与媒体 Provider 不算第二个 Host Adapter。
|
|
39
20
|
|
|
40
|
-
-
|
|
41
|
-
- 插件启用时自动注册两项随包 Skill,不要求用户克隆仓库、切换 cwd 或修改默认 Skill 搜索目录。
|
|
42
|
-
- 中英文 README 直接展示已脱敏的 Android 真机截图与代表性生成图,完整流程保留独立画廊;根目录 `screenshots.json` 控制插件市场展示顺序。
|
|
43
|
-
- 在 DSH 对话输入框提供可独立关闭的无框 🫧 提示词优化入口:使用半透明玻璃悬浮窗和窄屏底部面板,支持当前会话/固定模型路由、独立 thinking 策略与保守输出预算、预览写回,以及 JSON 导入导出和恢复默认。
|
|
44
|
-
- 泡泡快捷历史只展示运行中任务与成功产物;功能状态灯不再依赖用户逐张点开卡片。
|
|
45
|
-
- 本版不新增供应商分支,也不声称已完成独立 Core、任务语义 v2 或离线诊断。
|
|
21
|
+
已发布 Iris `0.1.4` 的历史 DSH 范围为 `>=0.1.2-rc.1 <0.1.3-0` 和 `0.1.5-rc.1`,旧宿主应固定安装 `@mokuyoaxis/dsh-iris@0.1.4`。Iris `0.2.0` 只声明支持准确的 DSH `0.2.0-rc.2`,已通过真实安装服务隔离验收;历史旧版验收不继承到当前版本。修正与实机待验项见 [rc.2 适配说明](DSH_RC2_ADAPTATION.md)。其他版本需先通过独立 Host canary 才会加入支持范围,具体安装与市场版本选择见 [README](../README.md#最快开始)。
|
|
46
22
|
|
|
47
23
|
## 下一步
|
|
48
24
|
|
|
49
|
-
###
|
|
25
|
+
### 后续 0.2.x
|
|
50
26
|
|
|
51
|
-
-
|
|
52
|
-
-
|
|
53
|
-
-
|
|
54
|
-
-
|
|
27
|
+
- 收藏、标签、搜索、筛选和批量导出;
|
|
28
|
+
- Artifact 关系边冻结 `retried-from` 类型,补全重试谱系(0.2.0 仅有 Task 级 `retriedFrom`);
|
|
29
|
+
- Core Task/Artifact 删除、清理与孤儿 purge(0.2.0 的 Headless CLI 和 DSH 工作台都保持 Core 只读;工作台现有删除、清空与孤儿清理只作用于 legacy `outputs/`);
|
|
30
|
+
- 鸢尾花与泡泡视觉身份;
|
|
31
|
+
- Gemini、Fal 和后续 Replicate Provider;
|
|
32
|
+
- 将提示词优化收口为 Core Prompt Engine 与共享 `prompt.optimize` Command,由 CLI 和 DSH 入口共同消费;DSH 只负责草稿读取、预览和写回;
|
|
33
|
+
- 冻结中立 TextModel Port,把 Ollama、兼容文本端点及其他文本模型后端与媒体 Provider Catalog 分离,避免通用文本模型淹没 Iris 媒体模型界面;
|
|
34
|
+
- 接入 ComfyUI、本地 TTS 等本地媒体 Provider,并补齐 `auth: none`、`billing: none`、同步完成语义和本地/远程 UI 区分;
|
|
35
|
+
- 有可信价格来源后的成本与策略展示。
|
|
55
36
|
|
|
56
|
-
###
|
|
37
|
+
### 0.3 及以后
|
|
57
38
|
|
|
58
|
-
-
|
|
59
|
-
-
|
|
60
|
-
-
|
|
61
|
-
- 已实现 [Provider 与能力健康状态](PROVIDER_HEALTH.md):按 Provider × Model × Capability 持久化实测/真实任务证据,以灰、蓝、绿、暗红四色及时间呈现,并按当前 failover 候选保守汇总;不增加后台探测。
|
|
62
|
-
- 深化现有 `iris-verify-ui`、`iris-compose-media` 两项 Skill:对齐 Task v2、增加显式调用示例、渐进资源与行为 eval;不以增加 Skill 数量为目标。
|
|
63
|
-
- 增加最小作品库索引,但继续采用渐进迁移;本版不引入完整 Artifact Manifest、standalone 服务、完整 headless 命令集或大规模目录重写。
|
|
64
|
-
|
|
65
|
-
### 0.2.0:独立 Core 与产物记录
|
|
66
|
-
|
|
67
|
-
- 统一 Agent、工作台与 CLI 的命令执行核心,将 DSH 集成集中到宿主适配器。
|
|
68
|
-
- 将作品库 v0 升级为经安全评审的 Artifact Manifest,为产物保存内容哈希、来源和派生关系,支持检查与导出。
|
|
69
|
-
- 在完整 Manifest 上增加收藏、标签、搜索、筛选和批量导出,不把这些字段塞回任务历史。
|
|
70
|
-
- 在未安装 DSH 的干净环境完成本地动作和供应商任务验收。
|
|
71
|
-
- 建立 Iris 正式产品视觉身份:以简约鸢尾花和泡泡为核心母题,完成可缩放 Logo、图标、单色版与深浅色适配,并替换临时字标。
|
|
72
|
-
- 在统一 Provider Adapter 与 conformance 测试稳定后,依次接入 Gemini、Fal,并把 Replicate 排入后续 0.2.x。
|
|
73
|
-
|
|
74
|
-
### 后续方向
|
|
75
|
-
|
|
76
|
-
- 0.3:有界、可恢复的媒体工作流,以及用户显式启动的本地 API 和最小独立工作台。
|
|
77
|
-
- 0.4:根据真实消费者需要开放供应商和宿主适配契约。
|
|
78
|
-
- 1.0:冻结经过验证的公共契约和升级策略。版本表示目标聚合点,不代表发布日期承诺。
|
|
39
|
+
- `0.3`:Recipe、可恢复 Flow、显式启动的本地 API 和最小独立工作台;
|
|
40
|
+
- `0.4`:在有真实消费者后公开 Provider/Host SDK;
|
|
41
|
+
- `1.0`:冻结经过多宿主和升级验证的公共契约。
|
|
79
42
|
|
|
80
43
|
## 兼容性与限制
|
|
81
44
|
|
|
82
|
-
- Node.js 最低版本为
|
|
83
|
-
- 图片处理依赖 `sharp
|
|
84
|
-
-
|
|
85
|
-
-
|
|
86
|
-
-
|
|
87
|
-
-
|
|
88
|
-
- Node 测试调度器不依赖 Bash,Linux/Windows × Node.js 20.10/22 自动化矩阵已经通过;原生 Windows/WSL 的 DSH 宿主实机冒烟仍待补充。
|
|
45
|
+
- Iris 0.2.0 的 Node.js 最低版本为 22.0.0;DSH 要求更高版本时以 DSH 为准。
|
|
46
|
+
- 图片处理依赖 `sharp`;视频抽帧和摘要依赖 `ffmpeg`、`ffprobe`。
|
|
47
|
+
- DSH 仍处于快速演进期。单个 Host Port 可以降级,但 DSH 若改变插件加载协议,仍需更新 DSH Adapter。
|
|
48
|
+
- 模型发现只列出候选项;真实能力必须由用户显式验证。
|
|
49
|
+
- 原生 Windows/WSL 的完整 DSH 宿主冒烟仍待补充。
|
|
50
|
+
- Headless CLI 当前开放 crop、图片/视频/语音/转写提交、Task 查询/单步观察与 Artifact 检查/导出;必须显式指定绝对数据根,且不会自动循环观察。0.2.0 的 Headless CLI 与 DSH 工作台都不提供 Core Task/Artifact 删除或清理能力;工作台现有破坏性动作只处理 legacy `outputs/`。Core 删除能力计划在 0.2.x 开放。
|
|
89
51
|
|
|
90
52
|
## 质量要求
|
|
91
53
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
-
|
|
95
|
-
-
|
|
96
|
-
-
|
|
97
|
-
- 不让局部配置更新覆盖未修改字段。
|
|
98
|
-
- 在支持的平台上保持 Agent 工具与工作台行为一致。
|
|
99
|
-
- 发布前检查 npm 包内容和公开文档中的相对链接。
|
|
54
|
+
- 已受理或受理未知的远端任务不得自动重提。
|
|
55
|
+
- 同一数据根不得出现两个写者;reader 不产生隐式写入。
|
|
56
|
+
- Core/CLI 在 DSH/Cordis 不可解析时仍能装载和运行本地动作。
|
|
57
|
+
- Task、Attempt 和 Artifact 不保存凭据、私有 URL 或不必要的宿主绝对路径。
|
|
58
|
+
- 每项新增行为需有失败路径测试;发布前执行打包、敏感信息和仓库外安装检查。
|
|
100
59
|
|
|
101
60
|
## 暂不计划
|
|
102
61
|
|
|
103
|
-
-
|
|
104
|
-
-
|
|
105
|
-
-
|
|
106
|
-
-
|
|
107
|
-
-
|
|
108
|
-
- 仅为未来可能使用的供应商预建没有调用方的适配层。
|
|
109
|
-
- 为 0.1.2 临时接入尚无统一契约与测试基线的新供应商。
|
|
110
|
-
- 为展示效果伪造实机截图、生成结果或短视频证据。
|
|
62
|
+
- 在插件中建设账号、多租户、计费或公网 SaaS;
|
|
63
|
+
- 由 DSH 插件隐式启动 daemon 或额外监听端口;
|
|
64
|
+
- 自动探测全部模型并产生不可见费用;
|
|
65
|
+
- 为没有真实调用方的 Provider 或 Host 预建空适配器;
|
|
66
|
+
- 在 Core 稳定前拆分多个 npm 包或重写技术栈。
|
package/docs/SECURITY.md
CHANGED
|
@@ -34,7 +34,8 @@ API、SSE 和 Doctor 只返回凭据存在性或掩码提示。Provider 错误
|
|
|
34
34
|
|
|
35
35
|
- 浏览器上传使用大小上限、随机文件名、`.part` 临时文件和完成后的原子改名;中断时清理临时文件,过期副本按 TTL 回收。
|
|
36
36
|
- 输出文件名由 Iris 生成或通过 `basename` 收口,API 不返回宿主绝对路径。
|
|
37
|
-
-
|
|
37
|
+
- legacy 任务与独立作品的媒体链接使用随机 128-bit 能力令牌。令牌应视为临时访问凭据,不应发布到公网。
|
|
38
|
+
- Core 媒体路由 `/iris/api/core/artifact/<artifact_id>/media` **没有独立 token**。它使用随机 96-bit Artifact ID 作为不可猜测的持有者标识,并叠加默认回环/显式 trusted Host、浏览器 `Origin`/`Sec-Fetch-Site` 拒绝跨站、`Cross-Origin-Resource-Policy: same-origin`、`Referrer-Policy: no-referrer` 与每次 SHA-256 校验。任何能访问受信 Host 且持有 Artifact ID 的客户端都能读取对应媒体;`IRIS_TRUSTED_HOSTS` 不是身份认证。不要把 Core Artifact ID 或媒体 URL 发布到不受信任位置。
|
|
38
39
|
- 清理任务元数据默认不删除作品;独立作品索引不保存 Prompt、Provider、Model 或任务关系。
|
|
39
40
|
- 删除单件作品、清空作品库或删除真正的孤儿文件都需要独立确认。作品删除会保留任务历史,但旧媒体链接将失效。
|
|
40
41
|
- 符号链接不会被私有树权限收紧逻辑跟随。Doctor 会把 Iris 数据根为符号链接视为硬错误。
|
|
@@ -48,9 +49,9 @@ API、SSE 和 Doctor 只返回凭据存在性或掩码提示。Provider 错误
|
|
|
48
49
|
|
|
49
50
|
## 离线 Doctor
|
|
50
51
|
|
|
51
|
-
`dsh-iris doctor` 不启动 DSH,不发送供应商或计费请求,也不打印 API Key
|
|
52
|
+
`dsh-iris doctor` 不启动 DSH,不发送供应商或计费请求,也不打印 API Key。默认 DSH 模式会在 Iris 数据目录或最近可写父目录创建一个随机小文件并立即删除,用于验证真实写权限;开发中的显式 `--data-root <abs>` Core 模式只读检查指定根的结构、索引、任务和租约,不做写探针,也不自动释放租约。`--json` 与文本输出使用同一结果模型,退出码为:`0` 正常、`1` 有警告、`2` 有硬错误。
|
|
52
53
|
|
|
53
|
-
Doctor 不能证明 DSH 工具注册、浏览器、附件服务、客户端资源或真实 Provider
|
|
54
|
+
Doctor 不能证明 DSH 工具注册、浏览器、附件服务、客户端资源或真实 Provider 在线;这些仍需各自验证。
|
|
54
55
|
|
|
55
56
|
## 报告问题
|
|
56
57
|
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# IRIS 视觉资产
|
|
2
|
+
|
|
3
|
+
悬浮泡泡目前采用 `iris-bubble.svg` 曲线鸢尾花(2026-09-30 概念替换)。2026-09-15 的像素块(cell)Logo 与图标集保留作为历史设计资产。旧 `docs/assets/iris-wordmark.svg` 已不再使用,源码文件暂留作历史兼容。
|
|
4
|
+
|
|
5
|
+
**当前 README 头图为 `iris-interim-flower.png`**(2026-09-17):维护者自生成素材裁剪的灰度线稿鸢尾花,仅取花形、已去除源图中的第三方字标;属临时展示标。泡泡的新概念图标与正式品牌 Logo 分别评审,未把本次泡泡替换视为完整品牌定稿。
|
|
6
|
+
|
|
7
|
+
## 悬浮泡泡概念
|
|
8
|
+
|
|
9
|
+
- [矢量图标](iris-bubble.svg):64×64 逻辑画布,透明背景、曲线花瓣、紫色层次、金色花心与青绿叶片;推荐以 26px 图元放入现有 44px 按钮。
|
|
10
|
+
- [概念展示](iris-bubble-concept.svg):放大花形、实际按钮尺寸与四种健康状态的并列预览。
|
|
11
|
+
- `lib/client.js` 的 `IRIS_MARK_PARTS` 保持相同的路径顺序与实色;内联 SVG 没有外部资源、字体、滤镜或 ID 引用。
|
|
12
|
+
- 本次只替换按钮图元;Android 浏览器的实际渲染仍需目视确认。
|
|
13
|
+
|
|
14
|
+
## 历史像素资产
|
|
15
|
+
|
|
16
|
+
设计语言:质朴、纯矩形像素块、无渐变无圆角;母题为鸢尾花(浅色旗瓣、深色垂瓣、橙色髯毛、细茎)+ 3×5 像素字 IRIS。全部资产由 `scripts/gen-logo.mjs` 从像素矩阵生成——**矩阵即设计源**,修改请先改矩阵再重新生成,保证可编辑可复现。
|
|
17
|
+
|
|
18
|
+
## 文件
|
|
19
|
+
|
|
20
|
+
| 文件 | 用途 |
|
|
21
|
+
|---|---|
|
|
22
|
+
| `iris-logo.svg`(208×80) | 主锁定标志:彩色图形标 + 字标,浅色底适用(README、文档头) |
|
|
23
|
+
| `iris-logo-mono.svg` | 单色墨(`#1E1E24`),浅底单色场景 |
|
|
24
|
+
| `iris-logo-mono-inverse.svg` | 单色反白(`#F5F3FF`),深色底场景 |
|
|
25
|
+
| `iris-mark.svg`(88×96) | 历史紧凑型像素图形标,含 1 cell 留白 |
|
|
26
|
+
| `iris-mark-mono.svg` / `iris-mark-mono-inverse.svg` | 图形标的单色与反白版 |
|
|
27
|
+
|
|
28
|
+
## 几何
|
|
29
|
+
|
|
30
|
+
- 基准单元 cell = 8 逻辑像素;`shape-rendering="crispEdges"`,缩放时保持锐利像素边缘。
|
|
31
|
+
- 图形标 9 列 × 10 行;字标每字 3×5 cell、字间距 1 cell;图形标与字标之间 2 cell;字标垂直居中于图形标。
|
|
32
|
+
- 旧 UI 内联版本曾采用同一剪影的反白像素块;当前泡泡使用上方曲线图标。
|
|
33
|
+
|
|
34
|
+
## 最小尺寸与留白
|
|
35
|
+
|
|
36
|
+
- 锁定标志最小宽度 **104px(13 cell)**;再小请改用图形标。
|
|
37
|
+
- 图形标最小 **16px**(cell ≥ 1.6px),低于此尺寸仅保留剪影亦可辨识。
|
|
38
|
+
- 四周留白 ≥ 1 cell(图形标文件已内置 1 cell,锁定标志需自行留出)。
|
|
39
|
+
- 不要拉伸、旋转、加渐变/阴影/描边,不要改配色(深浅色场景请换用对应版本,不要叠滤色变)。
|
|
40
|
+
|
|
41
|
+
## 配色
|
|
42
|
+
|
|
43
|
+
| 角色 | 色值 |
|
|
44
|
+
|---|---|
|
|
45
|
+
| 旗瓣 | `#8C77EE` |
|
|
46
|
+
| 垂瓣 | `#3F32A8` |
|
|
47
|
+
| 花心(髯毛) | `#F0B23E` |
|
|
48
|
+
| 茎 | `#4A9E6F` |
|
|
49
|
+
| 字标 | `#26204F` |
|
|
50
|
+
| 单色墨 | `#1E1E24` |
|
|
51
|
+
| 反白 | `#F5F3FF` |
|
|
52
|
+
|
|
53
|
+
## 许可证
|
|
54
|
+
|
|
55
|
+
原创美术资产,随仓库以 MIT License 发布;像素资产的来源矩阵在 `scripts/gen-logo.mjs`,新泡泡图标的矢量源在 `iris-bubble.svg`。再分发请保留来源与许可证。
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="960" height="520" viewBox="0 0 960 520" role="img" aria-label="Iris floating flower concept">
|
|
2
|
+
<title>Iris floating flower — bubble concept</title>
|
|
3
|
+
<desc>Curved iris icon, enlarged silhouette and actual 44 pixel buttons with unconfigured, configured, verified and failed states.</desc>
|
|
4
|
+
<defs>
|
|
5
|
+
<g id="flower">
|
|
6
|
+
<path fill="#7db9a4" d="M30.5 39h3v18h-3z"/>
|
|
7
|
+
<path fill="#7db9a4" d="M32 55C24 55 20 50 19 44C26 45 31 48 32 55Z"/>
|
|
8
|
+
<path fill="#9cd1b7" d="M32 54C40 53 44 49 45 43C38 44 33 48 32 54Z"/>
|
|
9
|
+
<path fill="#b5a0f3" d="M29 31C18 30 11 22 15 14C24 13 30 20 29 31Z"/>
|
|
10
|
+
<path fill="#b5a0f3" d="M35 31C46 30 53 22 49 14C40 13 34 20 35 31Z"/>
|
|
11
|
+
<path fill="#e0d4ff" d="M32 7C24 13 23 23 32 34C41 23 40 13 32 7Z"/>
|
|
12
|
+
<path fill="#9b80df" d="M31 31C22 24 11 28 8 36C12 45 24 47 31 34Z"/>
|
|
13
|
+
<path fill="#9b80df" d="M33 31C42 24 53 28 56 36C52 45 40 47 33 34Z"/>
|
|
14
|
+
<path fill="#c4aff6" d="M32 29C24 35 23 44 32 50C41 44 40 35 32 29Z"/>
|
|
15
|
+
<path fill="#f2ce83" d="M32 31C29 32 28 34 29 36L32 40L35 36C36 34 35 32 32 31Z"/>
|
|
16
|
+
</g>
|
|
17
|
+
</defs>
|
|
18
|
+
<rect width="960" height="520" rx="24" fill="#f4f1f9"/>
|
|
19
|
+
<g font-family="sans-serif">
|
|
20
|
+
<text x="48" y="58" fill="#352950" font-size="28" font-weight="700" letter-spacing="4">IRIS</text>
|
|
21
|
+
<text x="48" y="85" fill="#786b8b" font-size="13" letter-spacing="2">FLOATING FLOWER / CONCEPT 02</text>
|
|
22
|
+
<text x="912" y="58" text-anchor="end" fill="#786b8b" font-size="12">SVG · 2026.09.30</text>
|
|
23
|
+
<rect x="32" y="112" width="400" height="376" rx="20" fill="#24212e"/>
|
|
24
|
+
<circle cx="232" cy="286" r="116" fill="#302b3c" stroke="#484056"/>
|
|
25
|
+
<use href="#flower" transform="translate(136 190) scale(3)"/>
|
|
26
|
+
<text x="232" y="449" text-anchor="middle" fill="#c4b5df" font-size="12" letter-spacing="2">CURVED PETALS · AMBER HEART</text>
|
|
27
|
+
<rect x="452" y="112" width="476" height="376" rx="20" fill="#ffffff"/>
|
|
28
|
+
<text x="482" y="151" fill="#352950" font-size="16" font-weight="600">44 px button · 26 px flower</text>
|
|
29
|
+
<text x="482" y="174" fill="#786b8b" font-size="12">Existing health ring and task badge</text>
|
|
30
|
+
<rect x="480" y="193" width="420" height="146" rx="14" fill="#26262e"/>
|
|
31
|
+
<g opacity=".55">
|
|
32
|
+
<circle cx="538" cy="256" r="22" fill="#32323c" stroke="#3a3a44"/>
|
|
33
|
+
<use href="#flower" transform="translate(525 243) scale(.40625)"/>
|
|
34
|
+
</g>
|
|
35
|
+
<circle cx="638" cy="256" r="25" fill="none" stroke="#6f9df6" opacity=".16" stroke-width="5"/>
|
|
36
|
+
<circle cx="638" cy="256" r="22" fill="#32323c" stroke="#6f9df6"/>
|
|
37
|
+
<use href="#flower" transform="translate(625 243) scale(.40625)"/>
|
|
38
|
+
<circle cx="738" cy="256" r="25" fill="none" stroke="#6fcf6f" opacity=".20" stroke-width="5"/>
|
|
39
|
+
<circle cx="738" cy="256" r="22" fill="#32323c" stroke="#6fcf6f"/>
|
|
40
|
+
<use href="#flower" transform="translate(725 243) scale(.40625)"/>
|
|
41
|
+
<g opacity=".72">
|
|
42
|
+
<circle cx="838" cy="256" r="25" fill="none" stroke="#b9656d" opacity=".16" stroke-width="5"/>
|
|
43
|
+
<circle cx="838" cy="256" r="22" fill="#32323c" stroke="#b9656d"/>
|
|
44
|
+
<use href="#flower" transform="translate(825 243) scale(.40625)"/>
|
|
45
|
+
</g>
|
|
46
|
+
<g fill="#bab3c7" font-size="10" text-anchor="middle">
|
|
47
|
+
<text x="538" y="306">UNCONFIGURED</text>
|
|
48
|
+
<text x="638" y="306">CONFIGURED</text>
|
|
49
|
+
<text x="738" y="306">VERIFIED</text>
|
|
50
|
+
<text x="838" y="306">FAILED</text>
|
|
51
|
+
</g>
|
|
52
|
+
<text x="482" y="377" fill="#786b8b" font-size="12">At 2×</text>
|
|
53
|
+
<circle cx="578" cy="409" r="44" fill="#32323c" stroke="#6f9df6" stroke-width="2"/>
|
|
54
|
+
<use href="#flower" transform="translate(552 383) scale(.8125)"/>
|
|
55
|
+
<circle cx="612" cy="377" r="16" fill="#d9a941"/>
|
|
56
|
+
<text x="612" y="382" text-anchor="middle" fill="#1a1a1e" font-size="15" font-weight="700">2</text>
|
|
57
|
+
<g transform="translate(672 393)">
|
|
58
|
+
<circle r="8" fill="#e0d4ff"/>
|
|
59
|
+
<circle cx="30" r="8" fill="#b5a0f3"/>
|
|
60
|
+
<circle cx="60" r="8" fill="#9b80df"/>
|
|
61
|
+
<circle cx="90" r="8" fill="#f2ce83"/>
|
|
62
|
+
<circle cx="120" r="8" fill="#7db9a4"/>
|
|
63
|
+
</g>
|
|
64
|
+
<text x="664" y="427" fill="#786b8b" font-size="12">Lilac · lavender · amber · sage</text>
|
|
65
|
+
<text x="482" y="469" fill="#93869f" font-size="11">Bubble icon proposal · brand wordmark reviewed separately</text>
|
|
66
|
+
</g>
|
|
67
|
+
</svg>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64" role="img" aria-label="Iris" focusable="false">
|
|
2
|
+
<title>Iris — 曲线鸢尾花</title>
|
|
3
|
+
<desc>悬浮泡泡的概念图标:三片旗瓣、舒展垂瓣、金色花心与青绿叶片,透明背景。</desc>
|
|
4
|
+
<path fill="#7db9a4" d="M30.5 39h3v18h-3z"/>
|
|
5
|
+
<path fill="#7db9a4" d="M32 55C24 55 20 50 19 44C26 45 31 48 32 55Z"/>
|
|
6
|
+
<path fill="#9cd1b7" d="M32 54C40 53 44 49 45 43C38 44 33 48 32 54Z"/>
|
|
7
|
+
<path fill="#b5a0f3" d="M29 31C18 30 11 22 15 14C24 13 30 20 29 31Z"/>
|
|
8
|
+
<path fill="#b5a0f3" d="M35 31C46 30 53 22 49 14C40 13 34 20 35 31Z"/>
|
|
9
|
+
<path fill="#e0d4ff" d="M32 7C24 13 23 23 32 34C41 23 40 13 32 7Z"/>
|
|
10
|
+
<path fill="#9b80df" d="M31 31C22 24 11 28 8 36C12 45 24 47 31 34Z"/>
|
|
11
|
+
<path fill="#9b80df" d="M33 31C42 24 53 28 56 36C52 45 40 47 33 34Z"/>
|
|
12
|
+
<path fill="#c4aff6" d="M32 29C24 35 23 44 32 50C41 44 40 35 32 29Z"/>
|
|
13
|
+
<path fill="#f2ce83" d="M32 31C29 32 28 34 29 36L32 40L35 36C36 34 35 32 32 31Z"/>
|
|
14
|
+
</svg>
|
|
Binary file
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="208" height="80" viewBox="0 0 208 80" role="img" aria-label="IRIS 标志(单色反白)" shape-rendering="crispEdges">
|
|
2
|
+
<title>IRIS 标志(单色反白)</title>
|
|
3
|
+
<desc>像素块鸢尾花与 IRIS 像素字标,反白,深底色适用</desc>
|
|
4
|
+
<rect x="32" y="0" width="8" height="8" fill="#F5F3FF"/>
|
|
5
|
+
<rect x="24" y="8" width="8" height="8" fill="#F5F3FF"/>
|
|
6
|
+
<rect x="32" y="8" width="8" height="8" fill="#F5F3FF"/>
|
|
7
|
+
<rect x="40" y="8" width="8" height="8" fill="#F5F3FF"/>
|
|
8
|
+
<rect x="16" y="16" width="8" height="8" fill="#F5F3FF"/>
|
|
9
|
+
<rect x="24" y="16" width="8" height="8" fill="#F5F3FF"/>
|
|
10
|
+
<rect x="32" y="16" width="8" height="8" fill="#F5F3FF"/>
|
|
11
|
+
<rect x="40" y="16" width="8" height="8" fill="#F5F3FF"/>
|
|
12
|
+
<rect x="48" y="16" width="8" height="8" fill="#F5F3FF"/>
|
|
13
|
+
<rect x="16" y="24" width="8" height="8" fill="#F5F3FF"/>
|
|
14
|
+
<rect x="24" y="24" width="8" height="8" fill="#F5F3FF"/>
|
|
15
|
+
<rect x="32" y="24" width="8" height="8" fill="#F5F3FF"/>
|
|
16
|
+
<rect x="40" y="24" width="8" height="8" fill="#F5F3FF"/>
|
|
17
|
+
<rect x="48" y="24" width="8" height="8" fill="#F5F3FF"/>
|
|
18
|
+
<rect x="0" y="32" width="8" height="8" fill="#F5F3FF"/>
|
|
19
|
+
<rect x="24" y="32" width="8" height="8" fill="#F5F3FF"/>
|
|
20
|
+
<rect x="32" y="32" width="8" height="8" fill="#F5F3FF"/>
|
|
21
|
+
<rect x="40" y="32" width="8" height="8" fill="#F5F3FF"/>
|
|
22
|
+
<rect x="64" y="32" width="8" height="8" fill="#F5F3FF"/>
|
|
23
|
+
<rect x="0" y="40" width="8" height="8" fill="#F5F3FF"/>
|
|
24
|
+
<rect x="8" y="40" width="8" height="8" fill="#F5F3FF"/>
|
|
25
|
+
<rect x="24" y="40" width="8" height="8" fill="#F5F3FF"/>
|
|
26
|
+
<rect x="32" y="40" width="8" height="8" fill="#F5F3FF"/>
|
|
27
|
+
<rect x="40" y="40" width="8" height="8" fill="#F5F3FF"/>
|
|
28
|
+
<rect x="56" y="40" width="8" height="8" fill="#F5F3FF"/>
|
|
29
|
+
<rect x="64" y="40" width="8" height="8" fill="#F5F3FF"/>
|
|
30
|
+
<rect x="8" y="48" width="8" height="8" fill="#F5F3FF"/>
|
|
31
|
+
<rect x="16" y="48" width="8" height="8" fill="#F5F3FF"/>
|
|
32
|
+
<rect x="32" y="48" width="8" height="8" fill="#F5F3FF"/>
|
|
33
|
+
<rect x="48" y="48" width="8" height="8" fill="#F5F3FF"/>
|
|
34
|
+
<rect x="56" y="48" width="8" height="8" fill="#F5F3FF"/>
|
|
35
|
+
<rect x="16" y="56" width="8" height="8" fill="#F5F3FF"/>
|
|
36
|
+
<rect x="24" y="56" width="8" height="8" fill="#F5F3FF"/>
|
|
37
|
+
<rect x="32" y="56" width="8" height="8" fill="#F5F3FF"/>
|
|
38
|
+
<rect x="40" y="56" width="8" height="8" fill="#F5F3FF"/>
|
|
39
|
+
<rect x="48" y="56" width="8" height="8" fill="#F5F3FF"/>
|
|
40
|
+
<rect x="32" y="64" width="8" height="8" fill="#F5F3FF"/>
|
|
41
|
+
<rect x="32" y="72" width="8" height="8" fill="#F5F3FF"/>
|
|
42
|
+
<rect x="88" y="16" width="8" height="8" fill="#F5F3FF"/>
|
|
43
|
+
<rect x="96" y="16" width="8" height="8" fill="#F5F3FF"/>
|
|
44
|
+
<rect x="104" y="16" width="8" height="8" fill="#F5F3FF"/>
|
|
45
|
+
<rect x="96" y="24" width="8" height="8" fill="#F5F3FF"/>
|
|
46
|
+
<rect x="96" y="32" width="8" height="8" fill="#F5F3FF"/>
|
|
47
|
+
<rect x="96" y="40" width="8" height="8" fill="#F5F3FF"/>
|
|
48
|
+
<rect x="88" y="48" width="8" height="8" fill="#F5F3FF"/>
|
|
49
|
+
<rect x="96" y="48" width="8" height="8" fill="#F5F3FF"/>
|
|
50
|
+
<rect x="104" y="48" width="8" height="8" fill="#F5F3FF"/>
|
|
51
|
+
<rect x="120" y="16" width="8" height="8" fill="#F5F3FF"/>
|
|
52
|
+
<rect x="128" y="16" width="8" height="8" fill="#F5F3FF"/>
|
|
53
|
+
<rect x="120" y="24" width="8" height="8" fill="#F5F3FF"/>
|
|
54
|
+
<rect x="136" y="24" width="8" height="8" fill="#F5F3FF"/>
|
|
55
|
+
<rect x="120" y="32" width="8" height="8" fill="#F5F3FF"/>
|
|
56
|
+
<rect x="128" y="32" width="8" height="8" fill="#F5F3FF"/>
|
|
57
|
+
<rect x="120" y="40" width="8" height="8" fill="#F5F3FF"/>
|
|
58
|
+
<rect x="136" y="40" width="8" height="8" fill="#F5F3FF"/>
|
|
59
|
+
<rect x="120" y="48" width="8" height="8" fill="#F5F3FF"/>
|
|
60
|
+
<rect x="136" y="48" width="8" height="8" fill="#F5F3FF"/>
|
|
61
|
+
<rect x="152" y="16" width="8" height="8" fill="#F5F3FF"/>
|
|
62
|
+
<rect x="160" y="16" width="8" height="8" fill="#F5F3FF"/>
|
|
63
|
+
<rect x="168" y="16" width="8" height="8" fill="#F5F3FF"/>
|
|
64
|
+
<rect x="160" y="24" width="8" height="8" fill="#F5F3FF"/>
|
|
65
|
+
<rect x="160" y="32" width="8" height="8" fill="#F5F3FF"/>
|
|
66
|
+
<rect x="160" y="40" width="8" height="8" fill="#F5F3FF"/>
|
|
67
|
+
<rect x="152" y="48" width="8" height="8" fill="#F5F3FF"/>
|
|
68
|
+
<rect x="160" y="48" width="8" height="8" fill="#F5F3FF"/>
|
|
69
|
+
<rect x="168" y="48" width="8" height="8" fill="#F5F3FF"/>
|
|
70
|
+
<rect x="192" y="16" width="8" height="8" fill="#F5F3FF"/>
|
|
71
|
+
<rect x="200" y="16" width="8" height="8" fill="#F5F3FF"/>
|
|
72
|
+
<rect x="184" y="24" width="8" height="8" fill="#F5F3FF"/>
|
|
73
|
+
<rect x="192" y="32" width="8" height="8" fill="#F5F3FF"/>
|
|
74
|
+
<rect x="200" y="32" width="8" height="8" fill="#F5F3FF"/>
|
|
75
|
+
<rect x="200" y="40" width="8" height="8" fill="#F5F3FF"/>
|
|
76
|
+
<rect x="184" y="48" width="8" height="8" fill="#F5F3FF"/>
|
|
77
|
+
<rect x="192" y="48" width="8" height="8" fill="#F5F3FF"/>
|
|
78
|
+
</svg>
|