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:bpc-oss/dsh-routed-subagent
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
A global DeepSeek Harness plugin that lets any session dispatch a one-shot subagent fully mounted on ANY agent preset, with per-call model/provider override and a model-availability pre-check.
The stock subagent / subagent_fork tools force children to inherit the PARENT's preset. This plugin replaces that with a custom subagent provider whose async child setup calls agentPresets.mount(childCtx, <preset>) — so the child adopts the TARGET preset's complete composition: persona, prompt sections, skill catalog, and tools.
model / provider arguments route the child's LLM call to a different model than this session's (via the official resolveChildAgentOptions channel).GitHub-only. This plugin is not published to npm. Install it by mounting the package directory (see below). peerDependencies are declared with real semver ranges as metadata; they are not used for npm resolution.
Compatibility: targets DeepSeek Harness rc.7 (behavior verified against rc.7 sources) (the async child setup that this plugin relies on is a recent harness behavior).
The plugin is a plain ESM package with a cordis.patch.yml bundle declaration.
The plugin statically imports @deepseek-ai/* packages, which resolve via Node ESM from the package location. Create a node_modules junction/symlink in the package directory pointing at the harness install:
:: Windows
mklink /J "<plugin-dir>\node_modules" "<harness>\resources\host\node_modules"
# POSIX (Linux/macOS)
ln -s "<harness>/resources/host/node_modules" "<plugin-dir>/node_modules"
Add the package to your profile's dsh.profile.bundles list (e.g. <dshHome>/profiles/web/package.json):
{
"dependencies": { "dsh-routed-subagent": "link:<plugin-dir>" },
"dsh": { "profile": { "bundles": ["...", "dsh-routed-subagent"] } }
}
cordis.patch.yml in this repo is the bundle layer that registers the plugin; it is applied automatically when the package is listed in bundles.
Tip: if your deployment provides a hot-assembly helper (e.g. a super-injector-style
dev_install_package(dir=...)), you can use it instead of the manual steps above; restarts re-assemble from thebundleslist either way.
subagent_routed(
prompt="Use the dev engineer standard to review this repository",
preset="dev", # any preset id from the roster
description="dev review", # display label
max_depth=2, # recursion budget (default 3; positive integer >= 1)
run_in_background=true, # default true: background job, conversation continues
model="deepseek-v4-flash-free", # optional: per-call model for the child
provider="opencode", # optional: provider for that model
)
Behavior:
| input | behavior |
|---|---|
preset invalid / unresolvable |
error, with the roster's available preset ids |
model invalid for the provider |
fail-fast error listing the provider's candidate models (original error preserved as cause) |
model omitted |
child inherits this session's model (backwards compatible) |
| max_depth not a positive integer | tool-layer validation error |
| un_in_background (default true) | background job id returned immediately; collect with job_output / stop with job_kill; aborting the conversation leaves the child running |
| valid call | child fully mounted on the target preset, runs one turn, returns final output |
routed-mount) re-implements the official one-shot in-process driver (dsh-subagent-in-process-driver's startInProcessRun) with one load-bearing change: the child setup is async and awaits agentPresets.mount(childCtx, targetPreset) instead of composing from the parent.agents.create awaits the setup (verified in dsh-agent-loop), so the async mount runs inside the unpublished creation window; a failure rolls the whole child back.agentPreset: <target> (overriding the parent value), so cold reads rebuild the child under the composition it actually ran.settleForegroundRun ordering (racing dispose against result would skip the child's turn and return "aborted").send_message) still inherit the parent preset; that is a platform constraint.error / refusal / max-tokens makes the tool call THROW (with any partial output attached); only completed and caller-initiated aborted return as values. Low-level LLM error details live in the child session log.llm service AND a provider route exists (explicit provider or the parent's). Without either, it is skipped and the call proceeds.node --check lib/index.js # syntax
The plugin is a single ~350-line file with zero build step. CI runs node --check on every push.
MIT
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: multi-agent、subagent。