DSH / APPLICATION COMPOSITION

入口变了,运行时如何组合?

选择一种入口,分别追踪启动应用与提交任务的路径。

应用入口 · 可用方向键切换

先启动 Host,再从浏览器提交任务

dsh --profile web --no-open
Web 的应用启动与任务通道启动调用方经 runProfile 与 Loader 装配应用;调用端通过所示通道进入应用,再使用共享 Agent 服务。装配调用 / 订阅01 / 启动应用02 / 任务与结果dsh 命令runCli() 选择 profile共享 profile runnerrunProfile()Cordis LoaderContext · 配置树 · 依赖浏览器客户端输入消息 · 订阅状态HTTP / SSE请求 · 事件回传Web 连接与 APIConnection + remotes共享 Agent 服务Agent · SessionTools · LLM · 具体提供者前后端各有插件环境浏览器通过远程接口使用 Host 服务。publicUrl 与请求信任配置分别处理。
Web 的应用启动与任务通道启动调用方经 runProfile 与 Loader 装配应用;调用端通过所示通道进入应用,再使用共享 Agent 服务。装配01 / 启动应用02 / 任务与结果dsh 命令runCli() 选择 profile共享 profile runnerrunProfile()Cordis LoaderContext · 配置树 · 依赖浏览器客户端输入消息 · 订阅状态HTTP / SSE请求 · 事件回传Web 连接与 APIConnection + remotes共享 Agent 服务Agent · SessionTools · LLM · 由组合决定调用 / 订阅

启动装配任务输入与对应返回通道

参数提供者
webStartup
默认传输
Host 127.0.0.1:3080;请求与持续事件流
应用生命周期
持续服务;进程信号交给共享退出控制
配置来源
dsh-base → dsh-web-app → 用户覆盖
展开源码定位
  1. apps/cli/src/profile-boot.ts:244
  2. packages/bundle/web-app/cordis.patch.yml:179
  3. packages/client/modules/src/index.ts

参数成为任务,结果写回终端

dsh --profile headless --json "解释项目结构"
headless 的应用启动与任务通道启动调用方经 runProfile 与 Loader 装配应用;调用端通过所示通道进入应用,再使用共享 Agent 服务。装配调用 / 订阅01 / 启动应用02 / 任务与结果dsh 命令runCli() 选择 profile共享 profile runnerrunProfile()Cordis LoaderContext · 配置树 · 依赖命令行任务参数文本 / stdin应用参数 / 标准流任务参数 · stdin / stdoutheadless runnerfollowup() · 等待 idle共享 Agent 服务Agent · SessionTools · LLM · 具体提供者默认不挂载 Web Host直接创建或采用 Agent,驱动一次任务。--json 是事件输出,和 JSON-RPC 不同。
headless 的应用启动与任务通道启动调用方经 runProfile 与 Loader 装配应用;调用端通过所示通道进入应用,再使用共享 Agent 服务。装配01 / 启动应用02 / 任务与结果dsh 命令runCli() 选择 profile共享 profile runnerrunProfile()Cordis LoaderContext · 配置树 · 依赖命令行任务参数文本 / stdin应用参数 / 标准流任务参数 · stdin / stdoutheadless runnerfollowup() · 等待 idle共享 Agent 服务Agent · SessionTools · LLM · 由组合决定调用 / 订阅

启动装配任务输入与对应返回通道

参数提供者
headlessStartup
结果通道
stdout 文本或逐行 JSON;诊断写 stderr
完成与退出
等待相关活动结束,flush 会话,再请求退出
配置来源
dsh-base → dsh-headless → 用户覆盖
展开源码定位
  1. packages/bundle/headless/cordis.patch.yml
  2. packages/bundle/headless/src/startup.ts:37
  3. packages/bundle/headless/src/index.ts:311

Electron 管窗口,子进程运行 Web 后端

Electron → dsh-desktop-host → runProfile()
Desktop 的应用启动与任务通道启动调用方经 runProfile 与 Loader 装配应用;调用端通过所示通道进入应用,再使用共享 Agent 服务。装配调用 / 订阅01 / 启动应用02 / 任务与结果Electron 主进程spawn:Electron Node 模式共享 profile runnerrunProfile()Cordis LoaderContext · 配置树 · 依赖桌面 Web 客户端dsh-app://app/ 本地文档本地连接与转发HTTP / Web 连接层Web Host 子进程受管理的 desktop profile共享 Agent 服务Agent · SessionTools · LLM · 具体提供者IPC 传递启动与控制信息ready、启动注入、fatal、shutdown。应用请求仍由 Web 连接层处理。
Desktop 的应用启动与任务通道启动调用方经 runProfile 与 Loader 装配应用;调用端通过所示通道进入应用,再使用共享 Agent 服务。装配01 / 启动应用02 / 任务与结果Electron 主进程spawn:Electron Node 模式共享 profile runnerrunProfile()Cordis LoaderContext · 配置树 · 依赖桌面 Web 客户端dsh-app://app/ 本地文档本地连接与转发HTTP / Web 连接层Web Host 子进程受管理的 desktop profile共享 Agent 服务Agent · SessionTools · LLM · 由组合决定调用 / 订阅

启动装配任务输入与对应返回通道

启动控制
Node IPC;共享 profile runner
默认监听
127.0.0.1,port 0 由操作系统分配端口
进程关系
Electron 主进程 / renderer / Node Host 子进程
配置来源
Web 模板的 bundle + Desktop 管理的 profile
展开源码定位
  1. apps/desktop/src/host-process.ts:186
  2. apps/desktop-host/src/index.ts:18
  3. apps/desktop/src/web-document.ts:77

客户端拥有子进程,通过协议投递消息

SDK client → dsh --profile sdk
SDK 的应用启动与任务通道启动调用方经 runProfile 与 Loader 装配应用;调用端通过所示通道进入应用,再使用共享 Agent 服务。装配调用 / 订阅01 / 启动应用02 / 任务与结果SDK 客户端spawn:dsh 运行时子进程共享 profile runnerrunProfile()Cordis LoaderContext · 配置树 · 依赖TypeScript / Pythoninitialize → session/promptstdio JSON-RPCstdin 请求 · stdout 帧SDK 协议服务prompt() → followup()共享 Agent 服务Agent · SessionTools · LLM · 具体提供者握手成功后才能发送 promptprompt 返回 messageId,结果随后到达。stdout 独占协议;诊断使用 stderr。
SDK 的应用启动与任务通道启动调用方经 runProfile 与 Loader 装配应用;调用端通过所示通道进入应用,再使用共享 Agent 服务。装配01 / 启动应用02 / 任务与结果SDK 客户端spawn:dsh 运行时子进程共享 profile runnerrunProfile()Cordis LoaderContext · 配置树 · 依赖TypeScript / Pythoninitialize → session/promptstdio JSON-RPCstdin 请求 · stdout 帧SDK 协议服务prompt() → followup()共享 Agent 服务Agent · SessionTools · LLM · 由组合决定调用 / 订阅

启动装配任务输入与对应返回通道

参数提供者
sdkAppStartup;协议握手检查模型路由
结果通道
session.event / session.status 与 RPC 响应
完成与退出
等待活动区间完成;shutdown 释放根 Context
配置来源
完整 sdk:base + sdk-app;minimal:独立树
展开源码定位
  1. packages/sdk/client/src/launch.ts:128
  2. python/sdk/src/deepseek_harness/client.py:476
  3. packages/sdk/server/src/index.ts:76

基线 d7432673 · 静态源码关系图。7 个节点合并表示职责,完整配置和生命周期条件见正文。打印时显示全部入口。