OpenViking
volcengine
Self-evolving Context Database for AI Agents. Unify Agent Memory, Knowledge RAG and Skills.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:qyingji0122/fanout-plugin
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
发布一条指令,同时派出多个 DeepSeek 副进程并行执行;主进程可随时与任一进程通话、修改指令、中断或收集结果。带对话流内嵌的可视化状态面板。
/fanout 命令或 fanout_dispatch 工具,一次派出 1~8 个 DeepSeek 副进程同时独立执行roles 参数或 /fanout 任务A | 任务B | ... 语法,每个角色一个进程;不指定则全部执行同一任务fanout_talk 向任一副进程发送新指令/修改要求;priority=interrupt 时先中断其当前工作再立即执行新指令🛰 并行副进程),实时显示每个进程的运行状态、结束原因、输出摘要,可一键发送指令/中断fanout_status 查看全部进程状态;fanout_collect 收集已完成进程的最终汇报fanout_interrupt 中断单个或全部进程(会话保留,可后续再谈)| 文件 | 说明 |
|---|---|
host.js |
Host 半部源码(工具/命令/RPC/事件/注册表,返回 Cordis Plugin 的函数体) |
client.js |
Client 半部源码(对话流面板,React + 主题 token) |
README.md |
本文档 |
本插件为 DSH(DeepSeek Harness)的动态 Cordis 插件,进程内定义并运行:
cordis_define:plugin.kind: "new",idPrefix: "fanou"code.host = host.js 内容(函数体,return { inject, apply(ctx) {...} })code.client = client.js 内容cordis_run 激活(首次需在 GUI 批准)/fanout 命令与对话流面板/fanout 3 帮我审查项目代码 # 3 个进程执行相同任务
/fanout 审查A模块 | 审查B模块 # 按分工各派一个进程
「派 5 个进程并行分析这份文档」
主进程(模型)会自动调用 fanout_dispatch 并全程协调。
对话里自动出现的 🛰 并行副进程 长条:
| 工具 | 作用 |
|---|---|
fanout_dispatch |
发布指令并派出多个副进程并行执行(mission / roles / workers / model) |
fanout_talk |
与指定副进程通话/修改指令(worker_id 支持唯一前缀,priority: queue\|interrupt) |
fanout_status |
查看本会话所有副进程状态 |
fanout_interrupt |
中断一个或全部副进程 |
fanout_collect |
收集已完成副进程的最终汇报 |
┌─ 主会话(主进程 Agent)──────────────────────────────┐
│ /fanout 命令 · fanout_* 工具 · 对话流面板 (Client) │
└──────────────┬───────────────────────────────────────┘
│ harness.registerTool / commands / RPC
┌──────────────▼───────────────────────────────────────┐
│ Host 插件(apply) │
│ · registry: parentId → Map<childId, {label,role, │
│ startedAt, state, stopReason, lastOutput}> │
│ · dispatch: subagents.startContinuable() 并行启动 │
│ · talk: subagents.followup()(冷唤醒可续会话) │
│ · interrupt:subagents.interrupt(ancestor 授权) │
│ · subagent/end 事件 → 状态/输出写回注册表 │
│ · RPC: fanout:list / fanout:talk / fanout:interrupt │
└──────────────┬───────────────────────────────────────┘
│ startContinuable / followup / interrupt
┌──────────────▼───────────────────────────────────────┐
│ 副进程 × N(continuable subagent,独立会话并行执行) │
│ 自动继承默认模型/工作目录,按统一格式汇报 │
└──────────────────────────────────────────────────────┘
关键实现点:
Promise.allSettled 同时调用 subagents.startContinuable({provider, label, request: {prompt, parent, agentOptions?}, signal});provider 自动选取第一个支持 prepareContinuable 的(spawn/fork)fanout_status 通过 listChildren 持久化枚举补全;fanout_talk 将历史进程登记回注册表,使 subagent/end 事件能恢复其结束状态与输出conversation.chat.turnTail(chain,注册序在宿主「产出的文件」提示之后,不抢占);每 3 秒经 RPC 轮询状态clamp(workers, 1, 8))| 版本 | 说明 |
|---|---|
| v1 | 初始实现:5 工具 + /fanout 命令 + 输入区上方面板 |
| v2 | 修正 output schema 为 value schema DSL 风格(属性级 required) |
| v3 | 修复 fanout_status render 函数签名 |
| v4 | UI 改为对话流内细长圆角长条(turnTail),移除输入区面板 |
| v5 | resolveWorker 增加持久化枚举回退,重启后仍可通话历史进程 |
| v6 | 通话/枚举时登记注册表,subagent/end 可恢复历史进程状态 |
| v7 | 行内改「进程 N」序号(按派出时间排序),完整 ID 移至详情,默认字体 |
| v8 | 面板默认自动展开 |
| v9 | 仅当有「运行中」的副进程时显示面板,全部结束后自动隐藏 |
MIT
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: multi-agent、subagent。