@mokuyoaxis/dsh-iris 0.3.0-alpha.1 → 0.3.0-beta.1
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 +63 -1
- package/README.en.md +20 -13
- package/README.md +20 -13
- package/bin/dsh-iris.js +143 -51
- package/docs/AGENT_CORE_QUICKSTART.md +2 -2
- package/docs/AGENT_QUICKSTART.md +1 -1
- package/docs/ARCHITECTURE.md +5 -5
- package/docs/ARTIFACT_MANIFEST.md +4 -0
- package/docs/AUDIO_FLOWS.md +20 -4
- package/docs/BETA_SCOPE.md +42 -0
- package/docs/CONTACT_SHEET.md +1 -1
- package/docs/CORE_CONNECTIONS.md +3 -1
- package/docs/CORE_QUICKSTART.md +7 -5
- package/docs/CORE_RUNTIME_CONTRACT.md +3 -3
- package/docs/CORE_SERVICE.md +9 -5
- package/docs/CORE_SKILLS.md +2 -2
- package/docs/DSH_COMPATIBILITY.md +11 -1
- package/docs/DSH_CORE_MIGRATION.md +6 -0
- package/docs/DSH_RUNTIME.md +2 -2
- package/docs/HEADLESS_CLI.md +29 -4
- package/docs/HOST_ADAPTER_CONTRACT.md +5 -3
- package/docs/IMAGE_FLOW.md +2 -2
- package/docs/IMAGE_GENERATION.md +1 -1
- package/docs/LOCAL_API.md +2 -2
- package/docs/LOCAL_API_CONTRACT.md +17 -15
- package/docs/LOCAL_CREATION.md +2 -2
- package/docs/LOCAL_OPERATIONS.md +2 -2
- package/docs/LOCAL_SELECTION.md +1 -1
- package/docs/LOCAL_WEB.md +11 -5
- package/docs/MCP.md +30 -9
- package/docs/MEDIA_SCHEDULING.md +72 -0
- package/docs/NETWORK_RESOURCES.md +106 -0
- package/docs/NETWORK_ROUTING.md +103 -0
- package/docs/NETWORK_WORKBENCH.md +65 -0
- package/docs/PANEL_EXTENSIONS.md +1 -1
- package/docs/PLUGINS.md +9 -5
- package/docs/PLUGIN_DEVELOPMENT.md +39 -0
- package/docs/PLUGIN_STARTUP.md +15 -2
- package/docs/PROVIDER_ADAPTER_CONTRACT.md +8 -2
- package/docs/PROVIDER_CREDENTIALS.md +67 -0
- package/docs/PROVIDER_EXTENSIONS.md +8 -4
- package/docs/PROVIDER_HEALTH.md +4 -2
- package/docs/PROVIDER_NETWORK.md +45 -0
- package/docs/PROVIDER_PLUGIN_CONTRACT.md +24 -0
- package/docs/PROVIDER_SETTINGS.md +13 -7
- package/docs/PROVIDER_SUBMISSION_CONTRACT.md +3 -1
- package/docs/ROADMAP.md +6 -6
- package/docs/SECURITY.md +1 -1
- package/docs/SYNC_DELIVERY_RECOVERY.md +5 -1
- package/docs/VIDEO_FLOWS.md +89 -0
- package/docs/VISION_MODEL.md +2 -0
- package/docs/WEB_PROTOTYPE.md +3 -3
- package/docs/WEB_RECOVERY.md +2 -2
- package/docs/WORKBENCH_ARTIFACTS.md +6 -0
- package/docs/WORKBENCH_LOGIN.md +2 -2
- package/docs/releases/0.3.0-beta.1.md +34 -0
- package/docs/screenshots.md +2 -2
- package/lib/actions.js +5 -4
- package/lib/adapters.js +58 -41
- package/lib/api.js +23 -13
- package/lib/application-runtime.js +44 -15
- package/lib/application-writer.js +193 -0
- package/lib/client.d.ts +3 -3
- package/lib/client.js +62 -25
- package/lib/comfyui-adapter.js +3 -2
- package/lib/comfyui-client.js +10 -1
- package/lib/command-service.js +18 -5
- package/lib/config.js +13 -9
- package/lib/configured-image-runtime.js +28 -9
- package/lib/connection-skill.js +9 -0
- package/lib/core-artifact-store.js +68 -26
- package/lib/core-bridge-tools.js +5 -3
- package/lib/core-capability-catalog.js +21 -11
- package/lib/core-delivery-cache.js +8 -3
- package/lib/core-service-client.js +6 -2
- package/lib/core-tasks.js +86 -11
- package/lib/creation-request-store.js +8 -5
- package/lib/doctor.js +2 -2
- package/lib/dsh-core-adapter.js +61 -9
- package/lib/dsh-provider-config.js +1 -1
- package/lib/dsh-service-bridge.js +1 -0
- package/lib/flow-store.js +64 -17
- package/lib/image-flow.js +39 -17
- package/lib/index.js +10 -5
- package/lib/local-api-projection.js +6 -2
- package/lib/local-api.js +137 -49
- package/lib/local-creation.js +12 -5
- package/lib/local-operations.js +2 -2
- package/lib/local-request-root.js +2 -2
- package/lib/local-web-assets.js +2 -0
- package/lib/mcp-http.js +82 -9
- package/lib/mcp-server.js +23 -1
- package/lib/media-scheduler.js +194 -0
- package/lib/model-directory-service.js +25 -8
- package/lib/music-transport.js +4 -2
- package/lib/network-config-service.js +123 -0
- package/lib/network-config.js +127 -0
- package/lib/network-doctor.js +94 -0
- package/lib/network-management.js +51 -0
- package/lib/network-policy.js +19 -0
- package/lib/network-route-evidence.js +38 -0
- package/lib/network-routing.js +283 -0
- package/lib/operation-runner.js +83 -38
- package/lib/operation-store.js +6 -6
- package/lib/plugins.d.ts +25 -6
- package/lib/plugins.js +2 -1
- package/lib/provider-adapter.js +2 -2
- package/lib/provider-adapters.js +37 -5
- package/lib/provider-catalog.js +33 -16
- package/lib/provider-config-format.js +51 -0
- package/lib/provider-config-service.js +52 -22
- package/lib/provider-context.d.ts +90 -0
- package/lib/provider-context.js +42 -0
- package/lib/provider-credentials.js +97 -0
- package/lib/provider-diagnostics.js +5 -5
- package/lib/provider-health.js +10 -5
- package/lib/provider-monitor.js +5 -3
- package/lib/provider-network.js +52 -0
- package/lib/provider-protocol.js +3 -2
- package/lib/provider-registry.js +15 -5
- package/lib/provider-response.js +10 -0
- package/lib/provider-settings.js +14 -12
- package/lib/provider-task-runner.js +113 -37
- package/lib/provider-transport.js +16 -0
- package/lib/render.js +11 -1
- package/lib/scheduling-policy.js +66 -0
- package/lib/tasks.js +3 -2
- package/lib/video-flow-input.js +16 -0
- package/lib/video-input.js +12 -5
- package/lib/vision-model-routing.js +2 -0
- package/lib/web/app.js +107 -46
- package/lib/web/connections.js +151 -12
- package/lib/web/creation.js +29 -25
- package/lib/web/flow-view.js +4 -3
- package/lib/web/gallery.js +17 -16
- package/lib/web/index.html +58 -5
- package/lib/web/media-client.js +18 -4
- package/lib/web/network.js +232 -0
- package/lib/web/plugin-panel.js +4 -2
- package/lib/web/plugin-status.js +140 -0
- package/lib/web/providers.js +34 -13
- package/lib/web/recovery.js +2 -2
- package/lib/web/styles.css +54 -1
- package/lib/web/transport.js +6 -1
- package/lib/workbench-artifacts.js +3 -2
- package/package.json +5 -2
- package/skills/iris-core/references/comfyui.md +1 -1
- package/templates/plugin-starter/LICENSE +21 -0
- package/templates/plugin-starter/README.md +74 -0
- package/templates/plugin-starter/assets/peach.png +0 -0
- package/templates/plugin-starter/assets/violet.png +0 -0
- package/templates/plugin-starter/index.mjs +27 -0
- package/templates/plugin-starter/package.json +18 -0
- package/templates/plugin-starter/scripts/core-cli.mjs +20 -0
- package/templates/plugin-starter/scripts/environment.mjs +65 -0
- package/templates/plugin-starter/scripts/mcp-probe.mjs +22 -0
- package/templates/plugin-starter/scripts/setup.mjs +42 -0
- package/templates/plugin-starter/scripts/smoke.mjs +76 -0
- package/templates/plugin-starter/web/board.css +27 -0
- package/templates/plugin-starter/web/board.mjs +160 -0
- package/templates/plugin-starter/web/png.mjs +23 -0
- package/templates/provider-starter/LICENSE +21 -0
- package/templates/provider-starter/README.md +50 -0
- package/templates/provider-starter/index.d.mts +5 -0
- package/templates/provider-starter/index.mjs +165 -0
- package/templates/provider-starter/package.json +13 -0
- package/templates/provider-starter/scripts/core-cli.mjs +22 -0
- package/templates/provider-starter/scripts/environment.mjs +122 -0
- package/templates/provider-starter/scripts/fixture.mjs +54 -0
- package/templates/provider-starter/scripts/mcp-probe.mjs +21 -0
- package/templates/provider-starter/scripts/protocol-smoke.mjs +48 -0
- package/templates/provider-starter/scripts/setup.mjs +44 -0
- package/templates/provider-starter/scripts/smoke.mjs +145 -0
- package/user_guide.md +3 -3
package/docs/LOCAL_WEB.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
# 本地 Core 工作台(0.3
|
|
1
|
+
# 本地 Core 工作台(0.3 beta)
|
|
2
2
|
|
|
3
3
|
第一次使用可从[空配置快速开始](CORE_QUICKSTART.md)依次完成启动、口令登录、供应商/模型池、首件作品与 MCP 连接。本文保留各独立开关与已有工作区的详细参考。
|
|
4
4
|
|
|
5
5
|
源码中的 `web serve` 提供独立的总览、创作、作品、连接和供应商页面,使用 [本地 API](LOCAL_API.md) 与固定流程,无需启动 DSH。默认只读;显式开启执行和选择后,可改图、比较、保存选择并下载。新的 v2 执行根另提供[文生图与 ComfyUI](IMAGE_GENERATION.md),v3 音频根另提供[语音合成和音频转写](AUDIO_FLOWS.md)、播放及文字下载。连接中心分配 MCP 能力;[供应商设置](PROVIDER_SETTINGS.md)管理媒体连接与模型用途,两者单独开启。
|
|
6
6
|
|
|
7
|
-
**本页入口从0.3.0-alpha.1提供,稳定 npm 0.2.7 不包含。** 以下命令使用源码树;安装
|
|
7
|
+
**本页入口从0.3.0-alpha.1提供,稳定 npm 0.2.7 不包含。** 以下命令使用源码树;安装beta包后将 `node bin/dsh-iris.js` 换为 `npx dsh-iris`,不能照搬到0.2.7。原 [交互 Demo](WEB_PROTOTYPE.md) 继续保留,两者是不同入口。
|
|
8
8
|
|
|
9
9
|
界面沿用 Demo 的侧栏、大画布和右侧设置区,默认白色主体,六色 105 度鸢尾渐变作点缀。“外观”提供主题、密度与浏览器本地背景,图片比较区保持中性。高级参数、模型说明、流程详情与连接工具默认折叠。新草稿展开设置,固定输入的 Run 在手机上收起设置;并排、叠图和放大只改变查看方式。默认 Panel 可用显式资源清单替换,见 [Panel 与外观](PANEL_EXTENSIONS.md)。
|
|
10
10
|
|
|
@@ -12,15 +12,19 @@
|
|
|
12
12
|
|
|
13
13
|
健康检测以六色浅光谱区分候选、近期成功与受阻原因,详情默认折叠。连接检查只读目录或 ComfyUI 服务状态;可选轻量保活默认关闭,仅本次 Core 服务有效,服务重启不续开。媒体验证先准备指定模型的真实创作草稿,用户点击原生成按钮后才调用,可能计费。供应商可停用/恢复,删除须影响预览与确认,并保护当前工作区的未完成/可恢复依赖。详见[模型服务](PROVIDER_SETTINGS.md)。
|
|
14
14
|
|
|
15
|
+
beta.1另有[网络出口与Doctor](NETWORK_WORKBENCH.md):显式指定 `--network-config` 并加 `--allow-network-management` 后显示独立页面,管理节点、池及供应商出口;旧配置不自动迁移。模型服务/功能池旁显示配置摘要,原任务详情显示已记录路线。默认检查只读本地状态,点击检测才进行有界、无Provider Key的GET;系统TUN等未知状态不会猜测。
|
|
16
|
+
|
|
15
17
|
ComfyUI 供应商支持 API 图/v0/v1 模板导入、开放参数及表单预览。创作时按明确模板显示 LoRA 双权重、种子和其他控件,LoRA/更多参数默认折叠,检查更新保留用户已展开的区块;结果详情显示原 Run 的参数快照。节点检查需要单独开启供应商管理,执行权限不会自动获得管理能力;见 [ComfyUI 使用](IMAGE_GENERATION.md#comfyui-入口)。
|
|
16
18
|
|
|
17
19
|
## 能力总览
|
|
18
20
|
|
|
21
|
+
beta.1另支持[有界媒体调度](MEDIA_SCHEDULING.md):启动时显式指定 `--scheduler-config`,工作台可区分等待远端名额、模型冷却和本地 HTTP 队列;停止仍只结束本地等待。默认保持串行,不自动新增生成。
|
|
22
|
+
|
|
19
23
|
侧栏“总览”或 Iris 标志进入六类能力卡片:图片、视频、语音、音乐、转写、视觉。也可在已有工作台地址后添加 `/#overview` 直接定位,登录与刷新沿用现有标签页会话;普通入口与 Run 深链接继续保留原创作行为。
|
|
20
24
|
|
|
21
25
|
上方显示当前服务是否允许创作、图片/音频目录中的模型候选去重数,以及当前工作区的实际流程数。卡片分别呈现入口覆盖、已保存用途/功能池、当前候选和历史实测;标注用途与过去成功不等于现在可调用。实测记录只有在 owner 供应商管理已开启且读取成功时可见,其他会话标明“未提供记录”。读取失败显示未知,不当作零配置或成功;刷新不会读取远端模型目录或发起实测。
|
|
22
26
|
|
|
23
|
-
图片、语音、转写卡片仅在当前根、执行权限与实际候选满足时启用对应创作按钮,点击只打开真实草稿,不提交任务。语音与转写需要
|
|
27
|
+
图片、语音、转写卡片仅在当前根、执行权限与实际候选满足时启用对应创作按钮,点击只打开真实草稿,不提交任务。语音与转写需要v3/v4根;beta.1的新 v4 根另有[文生视频](VIDEO_FLOWS.md)入口并保留图片/音频。图生视频、S2V、音乐、视觉继续使用已有 CLI/DSH 入口。配置按钮只跳转已开启的模型服务页,不自动启用功能或改变授权。
|
|
24
28
|
|
|
25
29
|
“更多 Core 工具”默认折叠,列出裁剪/差异、视频抽帧、HTML 截图与提示词优化的实际入口和依赖。各卡片的详细说明与最近实测时间也默认折叠,保留白色主体及浅鸢尾六色点缀。刷新总览不会覆盖供应商编辑草稿;明确保存供应商设置后,总览与当前候选随之更新。
|
|
26
30
|
|
|
@@ -111,7 +115,7 @@ node bin/dsh-iris.js web serve --data-root /absolute/new-core \
|
|
|
111
115
|
|
|
112
116
|
目录为 0700、档案为 0600;首次只接受空目录,之后按 rootId 识别。管理目录与 Core 数据根相互独立,不改静态 grants 或客户端日常配置。目录自身只允许一个管理写者,复用现有租约。异常退出遗留租约时,先检查 `doctor --data-root /absolute/new-connection-store/ownership --json`,再按实际 stale PID 使用 `runtime recover`,不自动清锁。
|
|
113
117
|
|
|
114
|
-
连接页面支持自由命名、创建、编辑、撤销、删除和 stdio/HTTP 配置导出。图片生成与编辑分别选择;v3
|
|
118
|
+
连接页面支持自由命名、创建、编辑、撤销、删除和 stdio/HTTP 配置导出。图片生成与编辑分别选择;v3 根另开放语音和转写;beta.1的新 v4 根再开放 video-generate,音乐、视觉仍未接入。工具细选默认折叠,操作权限与功能分开。默认只读服务只能分配 read;若要让 harness 导入、创建和执行,可在**同一个命令**显式增加 `--allow-execution --provider-config /absolute/providers.json`。执行服务会建立 runner 租约,接收/计费动作由用户或获授权客户端明确发起。连接管理不扩大媒体权限,owner 选择权限也不授予 harness。
|
|
115
119
|
|
|
116
120
|
“新建连接”会进入编辑面板,提示、定位并聚焦名称,准备未保存草稿;填写后点击“创建连接”才保存记录,随后进入接入配置。默认改图草稿只包含所选功能对应的工具,不夹带生图工具。UUID、桥版本等位于“详情与管理”;切换分组或返回列表会清除凭据/Skill预览,不自动导出。
|
|
117
121
|
|
|
@@ -194,8 +198,10 @@ node scripts/verify-local-web-browser.mjs --browser-executable /absolute/path/to
|
|
|
194
198
|
|
|
195
199
|
`--login` 验证旧 Token 模式:从其他页面点击一次性链接、片段清除、同标签页刷新、用过的链接提示、备用 Token、同页新链接、重启失效与新链接接回、取消迟到兑换、禁用存储和坏片段;不提交媒体或管理写入。与其他场景开关分开使用。
|
|
196
200
|
|
|
201
|
+
`--video` 单独验证beta.1的新 v4 文生视频:真实 MP4 解码/播放和原字节下载、原任务重启接回、丢失创建回包、本地停止、只读、窄屏和暗色。此验证仅使用受控 Provider,见[视频边界](VIDEO_FLOWS.md)。
|
|
202
|
+
|
|
197
203
|
`--audio` 单独验证新 v3 根上的 TTS、音频导入/转写、原 Task 明确观察、音频实际解码/播放、WAV与UTF-8下载、刷新零重提、创建回包丢失、作品分类、只读以及桌面/窄屏/主题。Provider 使用受控响应,不等同于真实付费服务验收;边界与对应定向测试见[音频流程](AUDIO_FLOWS.md)。
|
|
198
204
|
|
|
199
205
|
`--overview` 单独验证六类能力、旧根/音频根与只读边界、四种草稿跳转、历史实测、未知/失败状态、刷新保留供应商草稿、明确保存后的同步和手机/明暗布局。使用隔离配置与受控执行端口,检查浏览/刷新与草稿跳转不写 Core、不调用供应商;不与其他场景开关组合。
|
|
200
206
|
|
|
201
|
-
源码已把 [有限执行](CORE_SERVICE.md)、[持久选择](LOCAL_SELECTION.md)、[原身份恢复](WEB_RECOVERY.md)
|
|
207
|
+
源码已把 [有限执行](CORE_SERVICE.md)、[持久选择](LOCAL_SELECTION.md)、[原身份恢复](WEB_RECOVERY.md)、文生图及供应商设置接到真实页面,并补充本机受控验证。标准平台按对应提交CI核销,真实设备与账号按各自证据验收;其他媒体和最终演示素材按 [路线图](ROADMAP.md)推进。本页对应beta.1;受控浏览器检查与真实供应商验收分开记录。
|
package/docs/MCP.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
# 通用 MCP 接入与能力选择(0.3
|
|
1
|
+
# 通用 MCP 接入与能力选择(0.3 beta)
|
|
2
2
|
|
|
3
3
|
新用户先看[从零启动与页面接入](CORE_QUICKSTART.md#connect-an-agent--连接客户端);交给安装/使用 Agent 的可复制说明见 [Agent Core 指导](AGENT_CORE_QUICKSTART.md)。本页详述传输、模板与授权契约。
|
|
4
4
|
|
|
5
|
-
同一套 Iris MCP 工具可通过 stdio 或 Streamable HTTP 接入支持对应传输和协议的客户端。无需为每个产品编写 Adapter
|
|
5
|
+
同一套 Iris MCP 工具可通过 stdio 或 Streamable HTTP 接入支持对应传输和协议的客户端。无需为每个产品编写 Adapter,客户端名称也不用于授予能力。**通用 MCP 入口从0.3.0-alpha.1提供,稳定 npm 0.2.7 不包含**;安装准确beta版本或使用当前源码;最小面见[beta约定](BETA_SCOPE.md)。
|
|
6
6
|
|
|
7
|
-
业务数据、Operation、执行队列和 Provider 均归同一个 [Core 服务](CORE_SERVICE.md)。MCP 负责协议和工具交付,使用官方 SDK 2.3.1;不启动第二个业务写者,也不把调用转成 Shell 命令。当前媒体范围为固定 `image-edit/v0`、[文生图 `image-generate/v0`](IMAGE_GENERATION.md),以及新 v3 根上的 [speech/v0 和 transcribe/v0](AUDIO_FLOWS.md)。文生图需要 v2/v3 根,音频需要显式 `execution init --audio`
|
|
7
|
+
业务数据、Operation、执行队列和 Provider 均归同一个 [Core 服务](CORE_SERVICE.md)。MCP 负责协议和工具交付,使用官方 SDK 2.3.1;不启动第二个业务写者,也不把调用转成 Shell 命令。当前媒体范围为固定 `image-edit/v0`、[文生图 `image-generate/v0`](IMAGE_GENERATION.md),以及新 v3 根上的 [speech/v0 和 transcribe/v0](AUDIO_FLOWS.md)。文生图需要 v2/v3 根,音频需要显式 `execution init --audio` 新根,原根不迁移。**beta.1**另支持新 v4 根上的[固定文生视频](VIDEO_FLOWS.md),通过 `execution init --video` 显式创建;v4 保留图片/音频能力,已发布 alpha.1 不支持该开关。
|
|
8
8
|
|
|
9
9
|
工具输入、功能归属、权限和指导来自同一 [Core 能力目录](PLUGINS.md#core-能力目录与授权)。MCP 导出服务、功能选择、scope、已保存 tools 的交集;Skill 从同源声明解释工具。安装/发现插件不授权;页面/渲染器也不默认挂载。显式开启的插件业务现已接入持久 Operation,经用户保存的准确 `pluginOperations` 依赖选择调用,旧连接不扩权。
|
|
10
10
|
|
|
@@ -24,6 +24,21 @@
|
|
|
24
24
|
|
|
25
25
|
## 首次接入与客户端预设
|
|
26
26
|
|
|
27
|
+
### 工作台连续接入(当前源码)
|
|
28
|
+
|
|
29
|
+
以下接入核对页从 **0.3.0-beta.1** 提供;原有模板、CLI与授权契约保持。
|
|
30
|
+
|
|
31
|
+
1. 在“客户端 → 新建连接 → 选择与授权”选择实际媒体功能或准确插件业务,核对摘要后保存。只读授权可以浏览;不要为通过检查而自动扩大权限。
|
|
32
|
+
2. 在“获取配置”确认 **Agent 是否与 Core 同机**,再选择模板或通用格式。这里的机器指运行 Agent 的主机,不是打开网页的浏览器设备。当前 stdio 路径和 HTTP 回环地址不能直接交给另一台机器;未保存的功能/权限修改会阻止导出,已有客户端仍按原授权访问。
|
|
33
|
+
3. 生成并合并配置到客户端,保留已有条目,再打开“核对接入”。“配置已生成”仅表示本次登录内存中对当前修订/格式的生成记录;复制或浏览器下载不证明客户端已经导入。刷新后没有本页记录,也不说明用户从未导出。
|
|
34
|
+
4. 点击“检查 Iris 端与接入记录”,只读取当前 owner 会话、实际目录和保存授权,展示配置受限原因及 Core 当前允许的工具。它不建立桥接实例、不测试 stdio/HTTP 客户端传输,也不验证每项媒体功能、模型或 GPU。HTTP 未开、异机方案、准确插件依赖和零工具等问题分别解释,不自动授权。
|
|
35
|
+
|
|
36
|
+
“Iris 端配置检查通过”与“收到客户端握手与声明”分开呈现。客户端名称/版本是可选、自报元数据;只有桥接握手、CLI 自检或配置下载不会被标为 Agent 已接入。未收到声明不等于业务调用失败;可在客户端明确调用一个已授权只读工具后重新核对。协商工具按实际 scopes 过滤,明细默认折叠;历史/断开不伪装持续在线,声明也不证明客户端发现或展示了全部工具。
|
|
37
|
+
|
|
38
|
+
检查和导出的本页状态不会新增持久格式。切页取消只读检查,退出清除配置预览、导出/检查记录和客户端声明展示;收回权限或撤销后仍由 Core 在真实调用时执行原有门禁。
|
|
39
|
+
|
|
40
|
+
### CLI 检查与预设(alpha.1 已有)
|
|
41
|
+
|
|
27
42
|
Core由用户明确启动并保持运行;stdio桥由客户端启动和关闭,HTTP客户端连接已开启的 `/mcp`。桥退出只结束自己的连接,不停止Core或已受理的媒体操作。连接页记录最近使用与握手事实,不把它称为客户端持续在线。
|
|
28
43
|
|
|
29
44
|
客户端名称/版本上报属于可选元数据,失败或延迟不阻塞已授权工具,也不替换业务回执。握手、持久授权和每次 Core 命令的权限核对继续生效;元数据上报不授予权限。
|
|
@@ -79,7 +94,7 @@ node bin/dsh-iris.js api serve --data-root /absolute/new-core \
|
|
|
79
94
|
|
|
80
95
|
## 选择能力和工具
|
|
81
96
|
|
|
82
|
-
功能分组与操作权限分开。当前可选媒体分组为 `image-edit`、`image-generate`、`tts`、`transcribe`,根版本进一步限制实际可用分组;查看工具总目录:
|
|
97
|
+
功能分组与操作权限分开。当前可选媒体分组为 `image-edit`、`image-generate`、`tts`、`transcribe`;beta.1另有 `video-generate`,根版本进一步限制实际可用分组;查看工具总目录:
|
|
83
98
|
|
|
84
99
|
```bash
|
|
85
100
|
node bin/dsh-iris.js mcp capabilities
|
|
@@ -87,8 +102,9 @@ node bin/dsh-iris.js mcp capabilities
|
|
|
87
102
|
|
|
88
103
|
- `--capabilities image-edit`:图片导入、流程、模型查询、单次继续、原操作查询、本地停止和原图读取。
|
|
89
104
|
- `--capabilities image-generate`:独立文生图创建、流程/模型查询、单次继续、原操作查询、本地停止和结果读取;可用 `image-edit,image-generate` 同时选择。原默认仍仅 image-edit。
|
|
90
|
-
- `--capabilities tts`:实际语音候选、文字/可选音色创建、原音频内容及共享 Run/Operation 工具;仅在 v3
|
|
91
|
-
- `--capabilities transcribe`:实际转写候选、原音频导入/来源ID创建、音频与文字读取及共享 Run/Operation 工具;仅在 v3
|
|
105
|
+
- `--capabilities tts`:实际语音候选、文字/可选音色创建、原音频内容及共享 Run/Operation 工具;仅在 v3 根(beta.1也支持 v4)开启。
|
|
106
|
+
- `--capabilities transcribe`:实际转写候选、原音频导入/来源ID创建、音频与文字读取及共享 Run/Operation 工具;仅在 v3 根(beta.1也支持 v4)开启。可用 `tts,transcribe` 同时选择。
|
|
107
|
+
- `--capabilities video-generate`(beta.1):新 v4 根的实际文生视频候选、保存意图、原视频资源引用及共享 Run/Operation 工具。视频返回 `resource_link`,用标准 `resources/read` 读取 MP4/WebM(≤32 MiB),每次读取检查当前授权;客户端播放支持需另行确认。
|
|
92
108
|
- `--capabilities none`:关闭媒体流程工具,保留两项连接管理工具。
|
|
93
109
|
- `--tools iris_core_models,iris_core_image`:在分组范围内进一步选择具体工具;`--tools none` 注册零工具。明确工具名单不会暗中补齐连接工具。
|
|
94
110
|
- `--scopes read`:只读;`create` 允许上传/建 Run,`execute` 允许明确继续,`stop` 允许本地停止。必须包含 read;首次继续可能产生模型费用。
|
|
@@ -135,6 +151,10 @@ stdout 只返回输出位置等元数据;文件以 0600 排他创建,不覆
|
|
|
135
151
|
|
|
136
152
|
HTTP 使用官方 `createMcpHandler`,提供 2026-07-28 请求元数据模式及 2025-11-25 的无状态兼容路径;旧协议 GET/DELETE 的可选会话操作返回 405。Host/Origin 和 Bearer 在 SDK 前校验,仅回环监听。静态文件仍仅启动时读取;连接中心的显式 owner 操作可即时变更授权。该入口没有公网发布、OAuth 登录或自动端口发现。
|
|
137
153
|
|
|
154
|
+
**beta.1的负载预算**:同一 Core 的所有 HTTP MCP 连接共享4条活动消息额度,从读取正文前占用,直到响应排空、失败或断开后释放。兼容路径的批量请求按消息条数占用,单批最多4条,超过返回400及 `IRIS_MCP_HTTP_BATCH_TOO_LARGE`;剩余额度不足返回429、`Retry-After: 1` 及 `IRIS_MCP_HTTP_BUSY`,不会在入口排队。正文仍限9 MiB,原有图片/音频/视频大小限制保持;这是活动请求预算,不是进程内存配额,也不限制远端持久任务数量。
|
|
155
|
+
|
|
156
|
+
入口有界读取正文,超限后丢弃剩余上传;解析结果通过官方 SDK 的 `parsedBody` 接口交付,协议校验仍由 SDK 完成。慢上传或未排空的媒体响应占用额度;连接取消只结束本地等待,已受理 Operation 继续按原 Key 查询。客户端收到429后可稍后显式重试;写操作继续保留原 Key,不自动换 Key 或重新生成。此额度仅用于 HTTP MCP,stdio、工作台控制接口和[媒体调度](MEDIA_SCHEDULING.md)分别管理各自资源。
|
|
157
|
+
|
|
138
158
|
当前每项 HTTP 授权在 Core 中对应一个逻辑桥实例。共享同一凭据的多个程序不被猜测为不同产品或真实在线进程;需要分别查看/授权时使用独立连接。该数据空间仍是同一用户共享作品,不是连接之间的数据租户隔离。
|
|
139
159
|
|
|
140
160
|
实际客户端的标准名称/版本以“客户端声明”显示,桥版本另外记录,不作为认证依据。新增工具权限后,stdio 需要重新启动加载工具表;收回权限或撤销后,旧进程也无法绕过 Core。连接中心仅在明确导出时返回 HTTP 密钥;CLI 的 HTTP 导出继续要求新建私有文件,不打印认证值。
|
|
@@ -149,12 +169,13 @@ HTTP 使用官方 `createMcpHandler`,提供 2026-07-28 请求元数据模式
|
|
|
149
169
|
|---|---|---|
|
|
150
170
|
| 静态图片导入、原图读取 | 已有 | image-edit 分组支持 |
|
|
151
171
|
| 固定图片编辑 Flow、Run/原 Task 查询、比较图引用 | 已有 | image-edit 分组支持 |
|
|
152
|
-
| 单次继续、原 Key 接回、本地停止 | 已有 |
|
|
172
|
+
| 单次继续、原 Key 接回、本地停止 | 已有 | 图片/音频分组支持;源码另支持视频,按原 Run 能力检查 |
|
|
153
173
|
| 明确选择作品、导出到本机路径 | 已有 | 尚未接入,继续使用 CLI |
|
|
154
174
|
| 独立文生图 | 已有 | image-generate 分组支持;新 v2/v3 执行根,明确模型与单张输出 |
|
|
155
175
|
| TTS、原音频读取 | 已有 | tts 分组,新 v3 根,标准 audio 内容块,实际播放器取决于客户端 |
|
|
156
176
|
| 音频导入、转写与文字读取 | 已有 | transcribe 分组,新 v3 根,持久来源与原任务恢复 |
|
|
157
|
-
|
|
|
177
|
+
| 文生视频 | 已有 | beta.1的 video-generate 分组,新 v4 根,标准资源引用与读取;已发布 alpha.1 未接入 |
|
|
178
|
+
| 图生视频/S2V、Music | 已有 | 尚未接入 |
|
|
158
179
|
| 视觉、OCR、定位、摘要 | 已有 | 尚未接入 |
|
|
159
180
|
| 裁剪、像素差异、抽帧、HTML 截图 | 已有 | 尚未接入 |
|
|
160
181
|
| 全媒体任务/作品管理及可恢复维护 | 已有 | 仅有固定流程所需的有限读取,其余尚未接入 |
|
|
@@ -186,6 +207,6 @@ stdio stdout保持MCP协议专用。EOF、明确关闭或启动取消会关闭
|
|
|
186
207
|
|
|
187
208
|
这些结果不代表每个品牌客户端或 Agent 的自主使用都已验收。DSH 的可选原生桥与三项 Skills 保持;Skill 发现/安装仍按 [Core Skills](CORE_SKILLS.md)单独处理。真实 Web 按显式开关提供连接管理与媒体操作,默认只读。
|
|
188
209
|
|
|
189
|
-
连接中心还支持[纯数据模板和连接专属 Skill](LOCAL_WEB.md#显式开启连接中心):模板只选择现有传输与 JSON 格式,Skill 按当前有效工具生成,下载后用 `skills install --bundle` 显式安装。配置、工具权限和使用说明各自独立;Skill 不提供身份凭据,不自动注册 MCP 或扩展连接权限。这些入口均为0.3
|
|
210
|
+
连接中心还支持[纯数据模板和连接专属 Skill](LOCAL_WEB.md#显式开启连接中心):模板只选择现有传输与 JSON 格式,Skill 按当前有效工具生成,下载后用 `skills install --bundle` 显式安装。配置、工具权限和使用说明各自独立;Skill 不提供身份凭据,不自动注册 MCP 或扩展连接权限。这些入口均为0.3 beta能力。
|
|
190
211
|
|
|
191
212
|
文生图连接的 Skill 对 ComfyUI 先确认缺少的工作流、LoRA 与参数要求,再使用实际目录中的 `modelRef` 和 `comfyWorkflow.parameters`。目录工具、执行工具或改图工具未开放时,说明会相应限定调用和搭配,不提供越权的替代路径。当前可将 ComfyUI 输出作为同根作品交给支持改图的 API,反向图片输入尚未接入;详见 [ComfyUI Skill 参考](../skills/iris-core/references/comfyui.md)。
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# 有界媒体调度(0.3.0-beta.1)
|
|
2
|
+
|
|
3
|
+
本页功能从 `0.3.0-beta.1` 提供,旧alpha.1不包含。默认仍使用串行写入队列;在 `api serve` 或 `web serve` 的现有启动命令增加 `--scheduler-config /absolute/private/scheduling.json`,才启用本片调度。它不启动第二个写者,不扫描配置,不迁移已有数据,不修改全局代理或系统路由。
|
|
4
|
+
|
|
5
|
+
## 启动策略
|
|
6
|
+
|
|
7
|
+
新建仅当前用户可读写的普通 JSON 文件(POSIX 建议 `0600`),例如:
|
|
8
|
+
|
|
9
|
+
```json
|
|
10
|
+
{
|
|
11
|
+
"schemaVersion": 1,
|
|
12
|
+
"httpConcurrency": 4,
|
|
13
|
+
"requestsPerSecond": 2,
|
|
14
|
+
"remoteLimit": 8,
|
|
15
|
+
"queueLimit": 32,
|
|
16
|
+
"queueTimeoutMs": 30000,
|
|
17
|
+
"providers": [
|
|
18
|
+
{
|
|
19
|
+
"providerId": "my-provider",
|
|
20
|
+
"httpConcurrency": 2,
|
|
21
|
+
"remoteLimit": 4,
|
|
22
|
+
"models": [
|
|
23
|
+
{ "modelId": "my-image-model", "requestsPerSecond": 1, "remoteLimit": 2 }
|
|
24
|
+
]
|
|
25
|
+
}
|
|
26
|
+
]
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
全局字段除了 `schemaVersion` 均可省略,默认值如上;供应商、模型层只限制填写的项目,与上层同时生效。名称必须与当前 Provider ID、原始模型 ID 准确匹配,不按显示名或客户端品牌匹配。没有填写供应商条目时,全局限制仍生效。配置在启动时读取一次,当前没有编辑 UI 或热更新。
|
|
31
|
+
|
|
32
|
+
`httpConcurrency` 为 1–4;`requestsPerSecond`、`remoteLimit` 为 1–1000;`queueLimit` 为 8–128;`queueTimeoutMs` 为 1–300000 毫秒。全局 HTTP 并发首片最多 4,这不是厂商容量声明。未知字段、其他版本、重复身份、缺失文件或过宽文件权限会明确拒绝,不静默退回无调度模式。
|
|
33
|
+
|
|
34
|
+
## 三种限制的区别
|
|
35
|
+
|
|
36
|
+
| 限制 | 统计边界 | 释放条件 |
|
|
37
|
+
| --- | --- | --- |
|
|
38
|
+
| HTTP 在途 | Core 实际交给传输 dispatcher 的请求,包含提交、查询、上传、下载和重定向的每一跳 | 正文传输结束、取消或传输失败;收到响应头尚不释放 |
|
|
39
|
+
| RPS | 实际调用 dispatcher 的滚动一秒窗口,全局与准确供应商/模型同时检查 | 时间窗口经过;不预订未来时间后同时突发派发 |
|
|
40
|
+
| 远端未结束数 | 同根 Task 已受理、受理未知或已有未收敛提交意图,且未确认成功/失败/取消 | 原 Task 确认远端终结;本地停止、关闭页面或 Operation 结束不释放 |
|
|
41
|
+
|
|
42
|
+
RPS 是应用派发口的限制,不证明网络或上游服务收到报文的精确时刻。出口连接预检、TCP/CONNECT 连接和其他进程的流量不计入业务 HTTP 次数。已有路线记录证明 Core 在请求前保存了选择,可能在排队或取消前已经写入,因此不能把 Task 的路线 `requestCount` 当成调度器的实际派发计数。
|
|
43
|
+
|
|
44
|
+
远端额度只拦截新的提交;原任务查询、取消和下载仍可执行。调度前从严格校验的现有 Task 事实计算额度,重启不会忘记未知任务。历史读取目前仍有线性成本,没有宣称支持无限历史规模。
|
|
45
|
+
|
|
46
|
+
beta.1中,损坏Task导致远端数量无法确定时,owner session仍可读取,调度摘要返回`remoteOutstanding:null`及`remoteError`错误码,不把未知数量显示为0。新提交继续严格检查原记录,不通过跳过坏Task放宽名额;相关等待者收到同一可定位错误,纯观测失败不升级为无关写者释放失败。修复原记录后可重新读取,不自动删除、隔离或改写Task。
|
|
47
|
+
|
|
48
|
+
## 排队、取消与恢复
|
|
49
|
+
|
|
50
|
+
Core 在网络等待期间让出短写入执行权,恢复后串行保存结果。每项工作有独立取消信号,同 Task 生命周期、同 Run 和创建 Key 保持互斥。未知插件业务写回调继续独占,不因增加媒体并发就自动获得并行执行保证。
|
|
51
|
+
|
|
52
|
+
已知模型短时冷却时,新生成在创建提交意图前等候;额度/预算耗尽仍需明确实测解除。HTTP `429` 的 `Retry-After` 约束后续请求,不自动重试失败的 POST。未派发的 HTTP 取消/排队超时保持明确未受理;一旦派发后结果不明,仍按原受理未知边界处理,不切换出口或模型重放。
|
|
53
|
+
|
|
54
|
+
等待有明确期限和有界内存队列;队列满或等待超时返回可定位错误。Flow 已固定的 Task 身份可能已有零 Attempt 的占位,但不会为了等名额创建大量失败提交。当前最多保留 8 个未结束的持久 Operation;启用调度时最多 7 个新提交,保留一个位置供已有任务的继续、查询和交付。停止本地 Operation 不需要另占此位置。
|
|
55
|
+
|
|
56
|
+
未开始的 HTTP/写入队列直接返回 `IRIS_SCHEDULER_QUEUE_FULL` 或 `IRIS_SCHEDULER_QUEUE_TIMEOUT`。已接收的 Operation 保留既有 `execution_failed` 持久类别,具体调度错误码在 Core 进程日志中关联原 Operation ID;没有为此迁移 Operation 格式。临时等待阶段不会跨重启保留。
|
|
57
|
+
|
|
58
|
+
本地写入 admission 失败只结束对应 Operation,不中止其他媒体或关闭执行服务;尚未开始时的失败记录没有 `startedAt`,也不会创建生成 Attempt。已接收 Operation 的短终态写入在原写者下排空,不受新工作队列满员/等候期限拒绝;同一 Operation 的并发停止共享该写入。真实持久化、清理或所有权故障仍停止执行并保留租约,不能因等候超时强制释放仍有活动工作的根。
|
|
59
|
+
|
|
60
|
+
Operation字段与schema版本未改变,当前源码补全了无`startedAt`的`execution_failed`终态组合。旧候选的严格校验会拒读这一组合,回退须使用匹配版本及完整备份;回退至旧alpha.1前须核对读取能力。旧记录没有自动重写。
|
|
61
|
+
|
|
62
|
+
派发时若发现另一写者占用,原 Operation 可继续保留 queued,等待用原 Key 显式接回或停止,不自动抢锁/轮询。内部 `idle()` 的一次 drain 返回不保证所有 queued 记录已终结;调用方应查看原 Operation 状态。
|
|
63
|
+
|
|
64
|
+
服务启动将遗留 `queued/running` 标为 `interrupted`,不自动恢复发送。响应丢失先按原 Key 查询;需要继续时用新 Key 与当前 Run revision,保留原 Task/Attempt/连接及插件依赖。未知受理不能通过重启或换调度配置重新生成。强杀后的租约仍需按[执行服务说明](CORE_SERVICE.md)确认实际 stale PID 后恢复。
|
|
65
|
+
|
|
66
|
+
工作台显示“等待远端任务名额”“等待模型冷却”“等待发送窗口”或“等待网络名额”。授权后的原 Operation 查询附带临时 `scheduling.phase`;该字段不写入持久记录。owner 的 `/api/v0/session` 另有本实例 HTTP/队列/远端数摘要;普通 MCP 不获得策略文件或管理权限。
|
|
67
|
+
|
|
68
|
+
## 范围与验证
|
|
69
|
+
|
|
70
|
+
该策略用于 Core 服务所装配的媒体能力、共用网络客户端的目录与供应商检测。通过同一服务接入的 Web、MCP、DSH 服务桥受同一实例约束。单次 CLI、DSH 独立原生路径、宿主借用服务及自行绕过客户端联网的可信插件,不因此获得调度承诺。没有增加后台轮询或自动恢复队列。
|
|
71
|
+
|
|
72
|
+
从源码仓库运行受控本地 HTTP 和独立根用例:`tests/media-scheduler.mjs`、`tests/application-scheduling.mjs`、`tests/scheduling-policy.mjs`、`tests/scheduling-limits.mjs`、`tests/scheduling-api.mjs`、`tests/scheduling-proxy.mjs`、`tests/scheduling-recovery.mjs`;`tests/operation-runner-scheduling-failures.mjs`另覆盖排队失败隔离、终态排空和持久失败保留租约。`scripts/verify-local-web-browser.mjs --scheduling` 验证真实工作台队列提示与停止,`scripts/verify-scheduling-package.mjs` 检查实际候选 CLI/stdio MCP。这些开发脚本不随npm包分发。包验证复用已有依赖,不代表一次干净安装或真实 Agent 交付。这些验证不等于真实供应商压力、真实 Clash/TUN、ComfyUI GPU 或全部平台验收。旧百炼实验的 HTTP 峰值不能代替本片应用入口的容量证明。
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# 出口节点与池(beta.1)
|
|
2
|
+
|
|
3
|
+
0.3.0-beta.1支持独立保存和管理出口节点、出口池;供应商绑定与Doctor使用下方独立入口。**0.3.0-alpha.1 / 0.2.7 尚不包含下列命令。** 本片只管理资源,所有结果的 `routingActive` 均为 `false`;创建节点或池不会改变 Provider、Clash、进程代理或系统路由,也不会进行网络探测。
|
|
4
|
+
|
|
5
|
+
本页描述v1资源。另有beta.1的[v2绑定与运行时](NETWORK_ROUTING.md),已完成受控HTTP/HTTPS代理与原任务恢复验证;v2离线投影报告配置和 `runtimeStatus:not_observed`,不拿离线命令判断服务是否正在路由。
|
|
6
|
+
|
|
7
|
+
使用本机 Core 所在环境中的绝对私有文件路径,不推断 DSH 配置或扫描代理。命令不需要 Core 数据根,不创建会话、任务或作品;owner 身份来自当前系统用户对指定私有文件的访问能力。普通 MCP 连接没有网络管理工具。
|
|
8
|
+
|
|
9
|
+
## 创建与读取
|
|
10
|
+
|
|
11
|
+
以下示例用于仓库源码;安装beta.1后,可将 `node bin/dsh-iris.js` 换成 `dsh-iris`:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
node bin/dsh-iris.js network init --network-config /absolute/private/network.json
|
|
15
|
+
node bin/dsh-iris.js network show --network-config /absolute/private/network.json
|
|
16
|
+
node bin/dsh-iris.js network check --network-config /absolute/private/network.json
|
|
17
|
+
node bin/dsh-iris.js network nodes list --network-config /absolute/private/network.json
|
|
18
|
+
node bin/dsh-iris.js network pools list --network-config /absolute/private/network.json
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
`init` 排他创建,已有文件不会覆盖。`show` 和 `list` 返回资源及引用情况;`check` 校验本地配置,返回 `valid:true`、`networkTested:false`,不证明代理可用。未找到文件时明确失败,不自动初始化。
|
|
22
|
+
|
|
23
|
+
结果中的 `revision` 是当前原文件字节的 SHA256,不是版本号。编辑时复制最近一次结果中的值作为 `expectedRevision`;成功改动返回新的修订。即使手动编辑文件时忘了增加内部计数,旧草稿也不能覆盖该编辑。
|
|
24
|
+
|
|
25
|
+
## 节点与认证来源
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
node bin/dsh-iris.js network nodes add \
|
|
29
|
+
--network-config /absolute/private/network.json \
|
|
30
|
+
--input '{"expectedRevision":"<revision>","node":{"id":"local-clash","label":"本机 Clash","protocol":"http","host":"127.0.0.1","port":7890}}'
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
这里的端口仅为格式示例,请填写自己实际开放的代理端口。Clash mixed-port 可作为 HTTP 代理配置;本片不验证该端口,也不会调用 Clash 切组接口。
|
|
34
|
+
|
|
35
|
+
节点字段:
|
|
36
|
+
|
|
37
|
+
| 字段 | 约定 |
|
|
38
|
+
| --- | --- |
|
|
39
|
+
| `id` | 稳定身份,1–64字符,以字母/数字开头,后续可含点、短横线、下划线;编辑通过该ID选择资源 |
|
|
40
|
+
| `label` | 可选单行名称,最多120字符;省略时使用ID |
|
|
41
|
+
| `enabled` | 可选布尔值,默认 `true`;停用保留池引用 |
|
|
42
|
+
| `protocol` | `http` 或 `https`,表示连接代理服务器的协议;这里只验证配置形状 |
|
|
43
|
+
| `host`, `port` | 分开的主机和1–65535整数端口,支持域名、IPv4、IPv6;禁止完整URL、用户名密码、路径、查询和片段 |
|
|
44
|
+
| `auth` | 可选 `{ "usernameEnv":"IRIS_PROXY_USER", "passwordEnv":"IRIS_PROXY_PASSWORD" }`,两项成对;不接受内联认证值 |
|
|
45
|
+
|
|
46
|
+
认证变量必须来自执行命令的进程;后续服务运行时需由实际 Core 进程提供。本片不加载 `.env`,不读取其他程序的凭据。`credentialStatus` 为 `none` / `missing` / `invalid` / `ready`;`ready` 仅说明明确引用的值符合基本格式,未验证服务器认证。读取环境值只用于状态与展示脱敏,不自动写入文件或备份。资源ID、变量名和修订是管理身份,不应拿它们保存秘密;名称与展示host另作脱敏。
|
|
47
|
+
|
|
48
|
+
局部编辑只改变提供的字段;省略认证保留原引用,`auth:null` 显式清除:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
node bin/dsh-iris.js network nodes set \
|
|
52
|
+
--network-config /absolute/private/network.json \
|
|
53
|
+
--input '{"expectedRevision":"<latest-revision>","node":{"id":"local-clash","enabled":false}}'
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## 固定与有序池
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
node bin/dsh-iris.js network pools add \
|
|
60
|
+
--network-config /absolute/private/network.json \
|
|
61
|
+
--input '{"expectedRevision":"<latest-revision>","pool":{"id":"preferred-route","mode":"fixed","candidates":[{"kind":"node","nodeId":"local-clash"}]}}'
|
|
62
|
+
|
|
63
|
+
node bin/dsh-iris.js network pools set \
|
|
64
|
+
--network-config /absolute/private/network.json \
|
|
65
|
+
--input '{"expectedRevision":"<latest-revision>","pool":{"id":"preferred-route","mode":"ordered","candidates":[{"kind":"node","nodeId":"local-clash"},{"kind":"direct"}]}}'
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
`fixed` 最多1个候选,`ordered` 最多16个,原样保留用户顺序。每个候选为节点引用或显式 `direct`,禁止重复或不存在的引用,不自动补直连。上述第二个例子明确允许后续策略使用直连,请只在需要时添加;本片尚不执行候选切换。
|
|
69
|
+
|
|
70
|
+
可保存 `candidates:[]` 的空池草稿;状态为 `empty`,不代表继承环境。其他状态为 `disabled`、`unavailable`、`configured`;`configured` 仅表示至少一个候选在当前配置下可选,不代表网络实测成功。显式绑定到空池、失效池时会明确失败,不偷偷直连。
|
|
71
|
+
|
|
72
|
+
停用节点不移除引用;任何池(包括停用的池)仍引用该节点时禁止删除。先明确编辑候选或删除池,再删除节点:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
node bin/dsh-iris.js network pools remove \
|
|
76
|
+
--network-config /absolute/private/network.json \
|
|
77
|
+
--input '{"expectedRevision":"<latest-revision>","id":"preferred-route","confirm":true}'
|
|
78
|
+
|
|
79
|
+
node bin/dsh-iris.js network nodes remove \
|
|
80
|
+
--network-config /absolute/private/network.json \
|
|
81
|
+
--input '{"expectedRevision":"<new-latest-revision>","id":"local-clash","confirm":true}'
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
所有编辑支持 `--input-file /absolute/private/edit.json` 或 `--input -` 从标准输入读取。错误只报告固定原因,不回显认证URL或原始JSON。
|
|
85
|
+
|
|
86
|
+
## 文件、修订与错误
|
|
87
|
+
|
|
88
|
+
独立文件为 `schemaVersion:1`、初始化生成的 `configId`、单调 `generation` 和 `nodes` / `pools`;节点和池各最多256项,文件最多1 MiB。支持的格式仍属于预发布设计,未知版本或字段拒绝读取/写入,不回退、降级或自动迁移。误将 `--network-config` 指向原供应商文件也会拒绝,不修改它。
|
|
89
|
+
|
|
90
|
+
文件必须为普通非符号链接文件,POSIX 下仅当前用户可读写;新文件和备份使用0600。Windows 的 mode 不等同于 ACL,应将文件放在自己的私有目录。
|
|
91
|
+
|
|
92
|
+
每次实际修改在短事务锁内重新校验格式与字节修订,先保留同目录的 `.backup-*` 私有原件,再原子替换;成功才增加 `generation`。无变化不写入、不增加修订或备份。没有自动备份轮换或清理;原子替换不等于断电级 `fsync` 保证。
|
|
93
|
+
|
|
94
|
+
| 错误码 | 含义及处理 |
|
|
95
|
+
| --- | --- |
|
|
96
|
+
| `IRIS_NETWORK_CONFIG_VERSION` | 当前程序不能解释该版本,换用兼容版本,保留原文件 |
|
|
97
|
+
| `IRIS_NETWORK_CONFIG_INVALID` | 字段、引用、地址或文件结构不符合约定 |
|
|
98
|
+
| `IRIS_NETWORK_CONFIG_CHANGED` | 草稿过期或读取后被改动,重新读取并核对 |
|
|
99
|
+
| `IRIS_NETWORK_CONFIG_BUSY` | 文件已有 `.lock`,可能在写或有中断现场;先核查写入进程,不自动抢锁 |
|
|
100
|
+
| `IRIS_NETWORK_CONFIG_IN_USE` | 节点仍被池引用,先显式修改依赖 |
|
|
101
|
+
| `IRIS_NETWORK_CONFIG_EXISTS` / `IRIS_NETWORK_CONFIG_NOT_FOUND` | 初始化/添加不能覆盖,编辑/删除不能隐式创建 |
|
|
102
|
+
| `IRIS_NETWORK_CONFIG_PERMISSIONS` / `IRIS_NETWORK_CONFIG_IO` | 权限过宽或文件操作失败;后者保留受控系统错误码,检查权限、空间和文件状态 |
|
|
103
|
+
|
|
104
|
+
锁保护遵守本协议的写者,并在锁内检测已有外部修改;不承诺阻止绕过锁且恰好在最终校验后写入的任意外部程序。强制终止可能留锁,本片保留现场,不自动删除。
|
|
105
|
+
|
|
106
|
+
v1资源管理不会修改Core根或旧Provider存储格式,也不执行路由。[N2](NETWORK_ROUTING.md)另通过显式新文件提供供应商绑定和实际代理,保留v1;[N3工作台](NETWORK_WORKBENCH.md)在独立owner开关下管理相同资源,并提供Core进程内静态/主动检测。运行时复用[实例级网络端口](PROVIDER_NETWORK.md)。
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# 供应商出口绑定(beta.1)
|
|
2
|
+
|
|
3
|
+
0.3.0-beta.1提供供应商绑定、HTTP/HTTPS代理、运行时与持久记录门禁,使用项目依赖 `undici@7.30.1`。**0.3.0-alpha.1 / 0.2.7 尚不包含这些增量。** 受控回环代理已验证路由、认证、失败边界和原任务跨进程恢复;这不代表所有真实供应商或系统代理均已认证。资源基础见[节点与池](NETWORK_RESOURCES.md)。
|
|
4
|
+
|
|
5
|
+
## 单独启用,保留原配置
|
|
6
|
+
|
|
7
|
+
v1网络资源和原供应商文件继续可用。为绑定明确新建v2,或另存复制;复制产生新configId、保留节点/池并清空绑定,原文件不改:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
node bin/dsh-iris.js network routing init --network-config /absolute/private/network-v2.json
|
|
11
|
+
|
|
12
|
+
# 与上面二选一:从v1/v2另存为新身份,不覆盖源或目标已有文件。
|
|
13
|
+
node bin/dsh-iris.js network routing copy \
|
|
14
|
+
--network-config /absolute/private/network-v2.json \
|
|
15
|
+
--input '{"source":"/absolute/private/network-v1.json"}'
|
|
16
|
+
|
|
17
|
+
node bin/dsh-iris.js network catalog create \
|
|
18
|
+
--network-config /absolute/private/network-v2.json \
|
|
19
|
+
--provider-config /absolute/private/providers.json \
|
|
20
|
+
--output /absolute/private/providers-routed.json
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
新供应商文件外层为 `{schemaVersion:1,networkRequirement,catalog}`,原供应商内容保存在catalog,目录有独立catalogId并引用network configId。旧程序看不到其要求的根部providers数组,因而拒绝使用;新版配置编辑、目录及健康写入保留包装。输出只报告身份,不显示Key。
|
|
24
|
+
|
|
25
|
+
之后使用现有节点/池编辑命令配置新v2文件。v2另保存bindings,池被绑定时禁止删除;停用保留引用。创建资源或包装本身不发网络。离线资源查看只报告配置与 `runtimeStatus:not_observed`,不声称另一Core进程的实时活动状态。
|
|
26
|
+
|
|
27
|
+
## 绑定具体供应商连接
|
|
28
|
+
|
|
29
|
+
先 `network show` 取得最新revision;绑定使用明确的包装目录,CLI核对供应商确实存在,自动填入该目录身份:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
node bin/dsh-iris.js network bindings set \
|
|
33
|
+
--network-config /absolute/private/network-v2.json \
|
|
34
|
+
--provider-config /absolute/private/providers-routed.json \
|
|
35
|
+
--input '{"expectedRevision":"<revision>","providerId":"my-provider","poolId":"my-pool"}'
|
|
36
|
+
|
|
37
|
+
node bin/dsh-iris.js network bindings list \
|
|
38
|
+
--network-config /absolute/private/network-v2.json
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
模型池继续决定调用哪个服务,具体供应商连接绑定允许的出口池。不按模型品牌推断地区,不改变原媒体端点/协议摘要。新请求解析当前配置;修改网络策略后,原Task仍使用原Provider/模型/端点和远端ID。
|
|
42
|
+
|
|
43
|
+
解除绑定需新revision与confirm:true。可带原包装文件,也可按bindings list给出的catalogId解除遗留引用,无须扫描或恢复已移走的文件:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
node bin/dsh-iris.js network bindings remove \
|
|
47
|
+
--network-config /absolute/private/network-v2.json \
|
|
48
|
+
--input '{"expectedRevision":"<latest-revision>","catalogId":"<catalog-uuid>","providerId":"my-provider","confirm":true}'
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
明确解除后恢复继承环境;池空、停用、失效或配置身份不匹配则明确失败,不代替用户解除。绑定仍存在时删除供应商也会拒绝,先解除引用再删除。
|
|
52
|
+
|
|
53
|
+
## 运行时与安全边界
|
|
54
|
+
|
|
55
|
+
媒体、目录/连接检查及Core服务需显式收到同一network-config。旧供应商文件不会因为多传此参数而自动获得绑定:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
node bin/dsh-iris.js run image \
|
|
59
|
+
--data-root /absolute/core \
|
|
60
|
+
--provider-config /absolute/private/providers-routed.json \
|
|
61
|
+
--network-config /absolute/private/network-v2.json \
|
|
62
|
+
--input '{"prompt":"an iris flower","model_ref":"my-provider::my-model"}'
|
|
63
|
+
|
|
64
|
+
node bin/dsh-iris.js web serve \
|
|
65
|
+
--data-root /absolute/execution-root \
|
|
66
|
+
--provider-config /absolute/private/providers-routed.json \
|
|
67
|
+
--network-config /absolute/private/network-v2.json \
|
|
68
|
+
--allow-execution --allow-provider-management
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
内部实现使用实例级HTTP(S)代理客户端;未绑定继承当前fetch,明确direct使用独立dispatcher。保留宿主已配置的全局dispatcher、fetch和环境变量,不调整Clash、VPN/TUN或代理策略;不能承诺绕过系统TUN。代理认证只交给CONNECT,供应商Key不交给产物CDN。测试TLS信任只用于测试实例,产品不提供自动关闭证书校验的选项。
|
|
72
|
+
|
|
73
|
+
有序主备只在独立连接/CONNECT预检阶段选择候选。一次生成及其输入准备/模型切换共享最多16次前置连接检查,同一失败路线不会随换模型反复检查。选中后才派发业务请求;POST发出后断线、超时或正文失败仍可能已受理,不透明换出口重放。已受理任务查询/下载可以在明确允许的当前策略下恢复,永不借此新生成。
|
|
74
|
+
|
|
75
|
+
一个完整操作的多跳请求保持选定客户端,包括输入上传策略/对象存储及结果交付;客户端关闭等待完整操作结束。独立视觉入口尚未装配,包装目录上的视觉调用会明确拒绝,避免静默直连;原视觉配置仍可使用。DSH借用宿主模型/浏览器的出站继续由宿主管理。可信插件须消费提供的网络端口,同进程代码不受网络沙箱强制约束。
|
|
76
|
+
|
|
77
|
+
beta.1中,后续解析读取到新的网络配置修订时,会移出旧修订的客户端缓存并停止它们接收新操作;当前同一供应商/调度模型身份复用一份客户端。配置未变、其引用的代理凭据值轮换时,下一次解析也会替换该身份的旧客户端。已进入完整操作的响应正文及后续请求继续使用原快照和选定路线,结束后关闭原连接池,不中途重绑或重放。保留旧客户端引用的内部调用者需重新解析,旧引用的新`run`返回`IRIS_PROVIDER_NETWORK_CLOSED`。这一回收由后续解析触发,不增加文件监听或轮询。
|
|
78
|
+
|
|
79
|
+
实例关闭同时等待当前客户端和已移出缓存、仍在排空的客户端;退役清理失败在最终关闭时报告,不自动重复清理。仅继承环境的调度客户端与宿主全局dispatcher保持原生命周期,路由配置轮换不关闭宿主连接池。
|
|
80
|
+
|
|
81
|
+
借用的fetch支持Node原生`Request`与`FormData`。明确direct/代理在传输边界转换到实例客户端的类型,保留multipart字段顺序、文件字节及可计算长度,不更换全局构造器;Request的覆盖参数、正文消费、重定向和取消沿用fetch语义。
|
|
82
|
+
|
|
83
|
+
普通MCP不获得代理凭据或管理工具;它调用已运行Core的现有授权业务。资源Web管理与网络Doctor见[网络工作台](NETWORK_WORKBENCH.md),需要独立owner开关。
|
|
84
|
+
|
|
85
|
+
## 持久任务与兼容
|
|
86
|
+
|
|
87
|
+
新网络Task从首次写入即为semanticsVersion3,Flow/创建意图首次保存networkRequirement并纳入新流程摘要。要求仅含configId/catalogId,不将节点、池版本或密码混进业务providerBinding。旧reader会在记录/版本校验处拒绝受影响记录;此机制不禁止旧writer对同根无关Artifact的任何写入。
|
|
88
|
+
|
|
89
|
+
已有Task2/无要求Run继续按原配置读写;使用包装目录恢复时不会隐式升级。新Task3也不能用旧目录或另一身份配置悄悄解除要求。显式迁移旧任务尚未提供,不从当前配置补造旧出口事实。
|
|
90
|
+
|
|
91
|
+
`task inspect` 可读networkRequirement和networkRoutes。路线事实在派发前由Core操作上下文持久化:configId、generation、配置摘要、catalogId、Provider、池/节点或inherit/direct、阶段与Attempt;外部传入网络管理器时也使用同一存储端口。`phase:dispatch_started`只表示客户端开始派发,不证明供应商受理或真实公网IP。`requestCount`聚合同一安全身份的顶层fetch调用,不包含CONNECT与请求实现内部重定向的全部线次数;不同事实最多128项,超出停止并保留历史,不丢旧证据。缺少持久化端口或存储失败也停止派发。
|
|
92
|
+
|
|
93
|
+
## 验证范围
|
|
94
|
+
|
|
95
|
+
以下测试和`scripts/`开发验收命令从源码仓库根运行,不随npm包分发;安装用户使用上方CLI/API入口。
|
|
96
|
+
|
|
97
|
+
已验证本地配置/绑定、CLI/API继承路径、新记录门禁及注入transport下的主备/失败/并发隔离。实际旧代码拒绝新Task/Flow/创建意图和包装文件,原Task2仍可读取。
|
|
98
|
+
|
|
99
|
+
`scripts/verify-network-proxy.mjs` 使用真实HTTP/HTTPS CONNECT代理,覆盖认证隔离、环境/宿主dispatcher并存、重定向、TLS拒绝、收到POST后断线、取消与完整正文排空。`scripts/verify-network-task-proxy.mjs` 验证Core原任务跨Node进程/允许出口恢复,以及真实CLI/API的代理生成与交付;受理未知时备用模型/出口均不重提。全部目标为受控回环服务,未调用计费媒体。
|
|
100
|
+
|
|
101
|
+
轮换回归另见`tests/network-client-retirement.mjs`和`tests/network-client-rotation.mjs`:覆盖空闲历史连接池及时关闭、配置修订/代理凭据变化、旧正文与多跳保留、取消、关闭期间等待退役操作,以及释放失败保留。测试计数不代表长期RSS/文件描述符峰值或全部真实代理已认证。
|
|
102
|
+
|
|
103
|
+
beta.1已另提供[出口Web管理与Core网络Doctor](NETWORK_WORKBENCH.md),需独立管理开关;只读配置和主动GET分开。尚未验证用户真实Clash、系统TUN、住宅IP或全部供应商;标准平台按发行提交CI记录,不以此前百炼图片压测代替。SOCKS5和公开网络SDK继续后续。
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Core 网络出口与检测(beta.1)
|
|
2
|
+
|
|
3
|
+
0.3.0-beta.1的“网络出口”页管理节点、出口池与供应商绑定,并提供实际 Core 进程内的网络 Doctor。**已发布的0.3.0-alpha.1 / 0.2.7尚不包含这些增量。** HTTP/HTTPS代理运行时见[供应商出口绑定](NETWORK_ROUTING.md),独立资源格式见[节点与池](NETWORK_RESOURCES.md)。
|
|
4
|
+
|
|
5
|
+
## 开启页面
|
|
6
|
+
|
|
7
|
+
在已有Flow根启动,显式指定私有网络文件与管理开关;无需同时开启媒体执行或供应商编辑:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
node bin/dsh-iris.js web serve \
|
|
11
|
+
--data-root /absolute/existing-flow-root \
|
|
12
|
+
--provider-config /absolute/private/providers-routed.json \
|
|
13
|
+
--network-config /absolute/private/network-v2.json \
|
|
14
|
+
--allow-network-management
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
按原工作台口令登录。需要编辑供应商时另加 `--allow-provider-management`;需要创作时仍使用原执行/选择开关。`session.networkManagement`独立于描述媒体权限的`readOnly`。API模式也接受该开关,普通连接、MCP的read/execute或连接管理不隐含网络管理权。
|
|
18
|
+
|
|
19
|
+
网络文件不存在时,页面显示“初始化出口配置”,点击才排他创建v2。已经存在的文件不覆盖。旧v1资源和旧供应商目录不会自动迁移:节点/池仍可独立配置,绑定入口显示另存启用指引。按[绑定文档](NETWORK_ROUTING.md)在新目标创建v2和供应商包装,再正常停止并用明确的新文件启动Core;页面不会切换当前运行配置或调度重启。旧Task2继续用原配置恢复,不借新包装自动升级。
|
|
20
|
+
|
|
21
|
+
## 节点、池与连接
|
|
22
|
+
|
|
23
|
+
- **节点**:填写已有HTTP/HTTPS代理的主机、端口和可选认证变量名。只保存引用,由Core进程解析用户名/密码,不填写裸公网IP作为代理。停用保留池引用,被引用时拒绝删除。
|
|
24
|
+
- **出口池**:固定或有序主备,明确添加候选、上移/下移、移除;直连需要主动添加。固定池最多一个候选,空池可保存草稿。绑定空池、停用池或无可用候选的池后会阻止请求,不恢复继承。
|
|
25
|
+
- **供应商出口**:当前包装目录中的连接可选择池,或明确保存“继承环境”解除绑定。修改只影响后续操作的路由,不更换原任务的Provider、模型、端点或远端ID。其他目录/遗留绑定按保存身份折叠展示,可确认解除,不扫描其他文件。
|
|
26
|
+
|
|
27
|
+
顶部返回和底部取消共用草稿确认。保存沿用N1/N2的修订检查、私有备份、引用保护和原子写入;外部修改时保留草稿并拒绝覆盖。保存结果不明时先重新读取,不自动重发。保存节点、池、绑定或刷新列表均不发起外部请求。
|
|
28
|
+
|
|
29
|
+
模型服务卡片及功能模型池显示**配置出口**;这是当前候选的配置摘要,不是某任务已经经过该出口的证明。流程详情另显示原Task最近记录的派发路线与时间;旧任务没有记录时显示“未记录”,不会从当前池推算历史。修改配置也不会改写历史路线。
|
|
30
|
+
|
|
31
|
+
## 静态检查
|
|
32
|
+
|
|
33
|
+
“检测”首先只读本地事实:当前Core的平台/Node、代理环境变量是否存在、Node代理开关是否被请求,以及配置、有效候选和凭据就绪状态。不输出环境变量值、认证URL、Provider Key或上游响应正文。
|
|
34
|
+
|
|
35
|
+
变量存在不等于fetch已采用它。Node22.21起可在启动时用 `--use-env-proxy` 或 `NODE_USE_ENV_PROXY=1` 请求环境代理;宿主还可能提供自己的fetch/dispatcher,因此页面分别显示开关请求与实际路径未知,不把二者等同。[Node官方说明](https://github.com/nodejs/node/blob/v22.23.4/doc/api/cli.md#--use-env-proxy)
|
|
36
|
+
|
|
37
|
+
Clash与Iris池并存不是自动冲突;显式池控制Iris客户端,系统TUN是否再次接管仍是未知。Core在VPS时,检测针对VPS进程,不代表手机或电脑上的代理配置。格式、版本或权限错误不会触发修复;Doctor仍保留进程事实和可定位的错误码,资源编辑需先修正指定文件。
|
|
38
|
+
|
|
39
|
+
## 主动GET与IP观察
|
|
40
|
+
|
|
41
|
+
选定供应商和目标后,点击“开始检测”才联网:
|
|
42
|
+
|
|
43
|
+
1. **已保存的服务地址**:无Provider Key的GET。401/403/404说明已收到目标响应,不据此断定Key错误或媒体能力不可用;这不是模型实测。
|
|
44
|
+
2. **IP观察**:明确的HTTP(S) JSON目标,响应须含有效的`ip`字符串。页面提供ipify地址作为可编辑起点,点击前不会联系它;实际返回值只代表该目标此刻报告的IP,不推断地区、公网性质或所有任务的出口。
|
|
45
|
+
3. **自定义GET**:明确填写不含认证信息或片段的HTTP(S) URL;不读取任意环境值、附加Provider认证或跟随重定向。
|
|
46
|
+
|
|
47
|
+
每次检测总超时8秒、响应最多16 KiB、应用层最多一次GET调用;CONNECT/连接预检另受原出口策略和预算约束。响应正文不展示,结果只包含HTTP状态、耗时、是否已派发/收到响应、有限IP和本次路线。池配置失效会在业务GET前失败,不继承或直连;收到响应后的失败不透明换出口重发。
|
|
48
|
+
|
|
49
|
+
检测可取消;离开页面或退出会中止等待,迟到结果不覆盖新页面。更换测试目标会清除上一项展示。检测不写供应商健康、配置、Task或作品,不安装代理、修改Clash、系统路由、环境或全局dispatcher。可信同进程插件自行联网、网关到供应商的后一段、真实TUN/住宅出口不由这些结果证明。
|
|
50
|
+
|
|
51
|
+
## owner API
|
|
52
|
+
|
|
53
|
+
所有接口都要求原owner认证和独立管理开关,并沿用Host/Origin、有限正文与生命周期保护。普通MCP没有这些工具。
|
|
54
|
+
|
|
55
|
+
| 接口 | 行为 |
|
|
56
|
+
| --- | --- |
|
|
57
|
+
| `GET/HEAD /api/v0/network-management/settings` | 当前资源、目录绑定资格与连接配置路线;缺失文件不创建 |
|
|
58
|
+
| `GET/HEAD /api/v0/network-management/doctor` | 当前Core进程静态事实,`networkTested:false` |
|
|
59
|
+
| `POST .../init` | `{}`,排他初始化v2 |
|
|
60
|
+
| `POST .../nodes/add\|set\|remove`、`.../pools/add\|set\|remove` | 原资源命令字段和`expectedRevision`;remove需`confirm:true` |
|
|
61
|
+
| `POST .../bindings/set` | `{expectedRevision,expectedProviderRevision,providerId,poolId}`,只允许当前匹配目录 |
|
|
62
|
+
| `POST .../bindings/remove` | `{expectedRevision,catalogId,providerId,confirm:true}`,支持明确遗留身份 |
|
|
63
|
+
| `POST .../probe` | `{expectedRevision,expectedProviderRevision,providerId,target:"provider"\|"custom"\|"ip",url?}`;非provider目标须有url |
|
|
64
|
+
|
|
65
|
+
资源变更返回安全投影,不返回私有备份路径或原配置。只管理本次启动明确指定的文件;HTTP请求不能选择另一配置路径。网络和供应商管理在本服务内避免交错写入;外部写入仍由文件修订门禁处理。
|
package/docs/PANEL_EXTENSIONS.md
CHANGED
package/docs/PLUGINS.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
# Core 插件贡献 v0(0.3
|
|
1
|
+
# Core 插件贡献 v0(0.3 beta,实验性)
|
|
2
2
|
|
|
3
|
-
0.3.0-alpha.1
|
|
3
|
+
0.3.0-beta.1 保留从alpha.1开始提供的 `@mokuyoaxis/dsh-iris/plugins` 入口及类型声明。**稳定 npm 0.2.7 没有这个入口**;示例用于beta包或当前源码;最小面见[beta约定](BETA_SCOPE.md),完整SDK尚未冻结。兼容检查读取实际包版本,预发布标识也参与SemVer先后比较。
|
|
4
|
+
|
|
5
|
+
想从一个可运行的独立项目开始,可看[插件开发与包外验收](PLUGIN_DEVELOPMENT.md)及[可复制模板](../templates/plugin-starter/README.md)。模板随beta.1分发,使用已公开的SDK,含真实对照板业务、页面、PNG 预览器和隔离自检,不安装或自动授权 harness。
|
|
4
6
|
|
|
5
7
|
## 贡献与装配
|
|
6
8
|
|
|
@@ -52,7 +54,7 @@ export default definePlugin({
|
|
|
52
54
|
});
|
|
53
55
|
```
|
|
54
56
|
|
|
55
|
-
`min` 从首次提供此SDK的0.3.0-alpha.1开始,稳定0.2.7不支持插件入口。Core兼容区间使用闭/开边界,npm peer范围另按npm SemVer
|
|
57
|
+
`min` 从首次提供此SDK的0.3.0-alpha.1开始,稳定0.2.7不支持插件入口。Core兼容区间使用闭/开边界,npm peer范围另按npm SemVer规则处理;支持0.3预发布的插件可明确声明 `>=0.3.0-alpha.1 <0.4.0`,不能假定仅有稳定版下界的范围会接受预发布。
|
|
56
58
|
|
|
57
59
|
宿主显式加载已安装且可信的 JS/MJS 入口;示例使用已经存在的 Core 数据根,只读调用不会创建它:
|
|
58
60
|
|
|
@@ -92,7 +94,7 @@ const selected = catalog.selectOperations(['example.library.count']);
|
|
|
92
94
|
// 仅校验装配者明确提供的本地选择;不调用、不持久授权、不开放 Web/MCP。
|
|
93
95
|
```
|
|
94
96
|
|
|
95
|
-
`audioEnabled` 仅决定目录显示哪些内置分组,不能开启工作区或绕过真实根版本检查。目录快照深度只读;省略 `registry` 时仅列内置选项和空插件贡献。`selectOperations()` 默认空,未知或重复业务拒绝;注册器关闭后贡献标为 unavailable,不能继续选择。程序化 Host 也通过此目录校验 `allowedOperations`,真实调用继续检查原贡献依赖、输入和 Core 队列权限。
|
|
97
|
+
`audioEnabled` 和beta.1的 `videoEnabled` 仅决定目录显示哪些内置分组,不能开启工作区或绕过真实根版本检查。目录快照深度只读;省略 `registry` 时仅列内置选项和空插件贡献。`selectOperations()` 默认空,未知或重复业务拒绝;注册器关闭后贡献标为 unavailable,不能继续选择。程序化 Host 也通过此目录校验 `allowedOperations`,真实调用继续检查原贡献依赖、输入和 Core 队列权限。
|
|
96
98
|
|
|
97
99
|
贡献的 `access` 是装配边界,**不是用户已经授权或服务已实测**:Provider 的 `via-media-flow` 仍需模型配置和流程授权。业务默认尚未暴露;服务明确选择 `allowedOperations` 后,Web/MCP 状态才成为 `via-operation/requires-selection`,连接还需选择准确依赖。Web 贡献默认 descriptor-only / not-mounted;选入后为 available-in-panel,不表示已加载或实测。发现接口不提供脚本路径;选中模块的固定 URL 只在 owner 工作台会话中交付。
|
|
98
100
|
|
|
@@ -125,6 +127,8 @@ const selected = catalog.selectOperations(['example.library.count']);
|
|
|
125
127
|
|
|
126
128
|
清单项为 `{id,version,title,capabilities,configuration?}`。能力与配置字段沿用原 Provider 约束。`activate` 返回同名 `providers` 映射,每项实现 `normalizeEndpoint/createAdapter`,可选 `supportsModel/supportsImageEdit`;具体调用继续遵守 [Provider Adapter](PROVIDER_ADAPTER_CONTRACT.md)。
|
|
127
129
|
|
|
130
|
+
beta.1 增加 `PROVIDER_FACTORY_CONTEXT_VERSION = 1`。统一工厂同步接收 `createAdapter(provider, context)`:Core 解析凭据到浅冻结的连接副本,`context` 只含 `{contractVersion:1, network:{fetch}, modelId?}`。完整方法的正文/多跳与关闭由 Core 管理;网络端口只在方法调用期间有效,不能在工厂或迟到后台任务中使用,也不能自行释放。公开导出相同的 `ProviderContractError` 和请求/结果类型;旧窄扩展签名保留。完整边界见[最小契约清单](PROVIDER_PLUGIN_CONTRACT.md)和[可分发 Provider 模板](../templates/provider-starter/README.md),不依赖内部构造器。
|
|
131
|
+
|
|
128
132
|
协议 ID 由 Core 设为完整贡献 ID。Adapter 的配置身份仍为用户的 Provider ID;Core 覆盖并验证协议/依赖元数据,插件不能通过描述更改配置身份。`registry.providers` 是已有注册器形状,可显式传给使用 `providerRegistry` 的服务;该方式只接入 Provider 部分,不挂载页面或新增工具。Provider 下载沿用 Core 分配的暂存目标,不自行管理作品索引。
|
|
129
133
|
|
|
130
134
|
## 持久依赖与恢复
|
|
@@ -152,7 +156,7 @@ const selected = catalog.selectOperations(['example.library.count']);
|
|
|
152
156
|
|
|
153
157
|
模块导出 `mount(context)`,可返回清理函数或其 Promise。上下文含 `container/signal/dependency/session/theme/api`,渲染器另有 `artifact:{id,mediaType,label?}`。三处使用同一冻结的会话快照,不提供 Token 字段;`theme.current()/subscribe()` 读取实际明暗和密度,CSS 继承鸢尾及工作台变量。挂载容器位于 Shadow DOM,避免样式意外覆盖工作台。
|
|
154
158
|
|
|
155
|
-
`api` 复用认证客户端,提供 `runs/run/models/audioModels/artifact
|
|
159
|
+
`api` 复用认证客户端,提供 `runs/run/models/audioModels/artifact`(beta.1另有 `videoModels`、`session.video` 与 MP4/WebM 的 `artifact` 读取),不接任意 URL/路径。只有设置模块且开启 owner 供应商管理才有 `api.providers.read()/save()`,沿用 revision/凭据动作。持久业务开启时另有 `api.pluginOperations.catalog/history/execute/inspect/lookup/stop`;execute 需要稳定 `key` 和准确 `operationId/dependency/input`,返回持久回执。Core 逐请求核对权限;未知结果查原 UUID,不自动重做。没有任意配置存储或通用命令转发。
|
|
156
160
|
|
|
157
161
|
挂载器在会话选中 Web 贡献或开启持久业务时加载;旧服务两者均无时不请求新增资源。导航页按需加载;设置默认折叠;预览需展开并选择匹配 MIME 的渲染器,原生预览仍可用。切页、收起或退出会中止信号、撤销对应 API、移除容器/主题监听并清理;迟到挂载仍会释放。插件负责自己的 Blob URL/监听/定时器和未保存草稿。错误显示贡献 ID、阶段及可用关联 ID;重新打开可显式重试,不自动换插件。
|
|
158
162
|
|