npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@huiliyi37/dsh-tool-subagent

v0.6.0

Published

Model-facing subagent delegation tool over the ctx.subagents seam

Readme

@huiliyi37/dsh-tool-subagent

English | 中文

基于一个已配置 ctx.subagents 提供方、面向模型的委派工具。更换提供方只会改变传输,不会改变执行约定。

提供方选择与生命周期

每个插件实例把一个 provider 绑定到一个 toolName;模型不会收到提供方选择器。如需公开另一种传输,请加载另一个名称不同的实例。工具只在其提供方存在时注册,从而避免对同级加载顺序和提供方重新加载的依赖。工具描述遵循 provider.inheritsParentContext:新建子 agent(智能体)需要独立提示词,而 fork 子 agent 已能看到父级已完成轮次。

前台调用会让执行信号贯穿启动和执行,等待 run.result,并且在返回前总会等待 run.dispose()。可选 runBudget 配置会把同一组步骤与墙钟上限传给每个前台和一次性后台 child;省略时由提供方管理运行边界。只有 completed 会返回规范值 { kind: 'foreground', runId, output: JsonValue[] },并渲染为相同的最终文本;中止、拒绝、token 上限和其他失败都会变成出错的工具结果,不包含局部输出。如果结果收集与 dispose(资源释放)都 reject,出错的结果会保留两项诊断信息。

设置 run_in_background: true 后,backgroundMode 会选择路由。one-shot 会注册一个归父级所有的普通 Task,并返回规范值 { kind: 'background', taskId },渲染为 started background subagent task <id>,即使提供方支持可继续子 agent 也不例外;通用 Task 工具负责其后续状态、收集、取消和通知。continuable 要求提供方具备 prepareContinuable 能力,调用 ctx.subagents.startContinuable(),并返回 { kind: 'continuable', subagentId },渲染为 started subagent <childId>。可继续路由在 inbox 接受时结算:子 agent 自此拥有自己的轮次,因此该调用既不等待也不收集结果,而且子 agent 不会回报——通过该 id 查看其 transcript(文本记录)即是其输出来源,可选的全局 send_message 工具则向其发送更多工作。启动可继续工作不要求加载 send_message。见 后台 subagent Agent Note可继续的 subagent Agent Note服务合并 Agent Note

toolFilter 会改变子 agent 的全局工具层,但不是从父级派生的权限上限。见 agent 作用域的安全非目标

Agent 角色

可选的 agent 参数以命名角色委派,角色经可选的 ctx.agentDefinitions 服务解析(服务缺失时任何 agent 值都会使调用失败)。角色提供子 agent 的 persona 正文、工具 allow 名单、模型路由和沙箱收窄,按调用合并:persona 替换实例配置值;子 agent 路由按层级叠加——角色 frontmatter 的 model: 在最底,之上是可选 ctx.modelRoles 中的 subagent 角色 pin(逐调用即时读取),最上是实例配置的 agentOptions;角色的 allow 名单与实例的 toolFilter 求交(部署仍是模型所选角色无法逾越的上限,一个工具被掏空的角色会响亮失败);sandboxMode: 'read-only' 要求提供方具备 sandboxMode 能力。未知名称是指向目录的出错调用,绝不会静默退化为通用委派。见 agent 角色定义 Agent Note

设置 agentCatalog: true(每个装配至多一个实例开启)后,该实例会向会话发布一条 durable <available_agents> 目录消息:名称加转义描述的条目、由条目 sha256 digest 决定的首发/替换/摘除,以及绑定这个确切工具注册的可见性——工具被 restrict 摘除时目录同步消失。目录只跟随 ctx.agentDefinitions 的目录;没有该服务则不发布目录。

经本工具返回的子 agent 文本——前台结果块与一次性后台任务输出——在此边界做伪 XML 转义(&<>),使子 agent 从不可信内容读到的标记到达父级模型时是惰性的。durable 工具结果记录的正是转义后的文本。

配置

| 键 | 含义 | |---|---| | provider(必填) | 提供方名称(spawnforkacp 等)。 | | toolName | 面向模型的名称,默认 subagent;每个已加载实例必须不同。 | | enableRunInBackground | 公开后台模式,默认 true;禁用时也会拒绝强制后台调用。 | | backgroundMode | 后台生命周期策略,默认 one-shotcontinuable 要求提供方具备 prepareContinuable 能力并返回持久化子 agent ID;它不要求加载后续消息工具。 | | agentOptions | 传给具体提供方的子 agent providermodel 和正整数 maxTokens;进程内提供方会用显式值覆盖 subagent 角色 pin 与继承的父级选项。 | | persona | 每个子 agent 独立的 persona;要求提供方具备 persona 能力。 | | toolFilter | 每个子 agent 独立的全局工具限制;要求提供方具备 toolFilter 能力。 | | maxDepth | 绝对委派深度上限,默认 30 禁止委派);数值上限要求 depthLimit 能力,缺失时挂载失败。对于预算由子 harness 拥有的进程外提供方,'provider-managed' 不发送上限。工具在达到上限时仍然可见;每次尝试启动都会检查调用 agent 的当前深度,被拒绝时返回出错的工具结果。 | | runBudget | 每个前台/一次性后台 child 的可选 { maxSteps, timeoutMs } 上限;要求提供方具备 runBudget 能力,缺失时挂载失败。timeoutMs 必须处于 Node 定时器不会钳制的范围。省略时由提供方管理运行边界。 | | agentCatalog | 发布 durable <available_agents> 会话目录,默认 false;每个装配中至多一个委派工具实例开启。 | | catalogDescriptionMaxLength | 目录中角色描述的最大归一化长度,默认 500,最小 3。 |

并发

前台调用和后台调用均互斥。子 agent 可能共享父级工作区或外部资源,一元分类器无法证明同级委派的效果彼此不相交。见 并行工具调用 Agent Note

模型体验

工具 schema

模型看到的内容

当提供方存在时,以当前实例配置的名称公开已生成的默认 subagent schema。提供方是否继承上下文会改变工具描述和提示词描述;可选的 agent 参数接受会话 agent 目录中的确切角色名;启用后台模式会添加 run_in_background,可继续模式描述为启动一个保留其对话并返回子 agent id 的后台子 agent,而一次性模式描述为返回一个用 task_output 收集、用 task_kill 停止的后台任务 id。

Token 影响

每个父级请求都会产生固定的 schema token 开销;每个提供方实例增加一个 schema。

KV Cache 影响

只要提供方实例、名称、描述和 schema 不变,前缀就保持稳定。提供方注册生命周期可能从首个变化的工具定义开始,使父级复用失效。

前台结果

模型看到的内容

调用会保留描述和提示词。成功时只包含子 agent 的最终文本(在此边界做过伪 XML 转义);其他结果变为 Error: <message>。子 agent 中间步骤不会进入父级。

Token 影响

提示词和结果会留在父级历史中,直到上下文压缩(context compaction);子 agent 工作上下文留在子 agent 中。

KV Cache 影响

仅追加;新增可见内容位于可复用请求前缀之后,不会使现有 KV Cache 条目失效。

后台结果

模型看到的内容

在配置的可继续模式下,启动时返回内容恰为 started subagent <childId>;在配置的一次性模式下,则返回 started background subagent task <id>。一次性模式下,通用 Task 接口提供后续状态、最终输出、取消响应和通知。可继续模式下,子 agent 不会回报;独立加载的 send_message 工具会投递后续消息,而通过其 id 查看子 agent 的 transcript 即是其输出来源。

Token 影响

确认消息会被保留;一次性最终输出只在收集或注入时进入父级历史,而可继续子 agent 的输出绝不会通过本工具返回。

KV Cache 影响

仅追加;新增可见内容位于可复用请求前缀之后,不会使现有 KV Cache 条目失效。

Agent 目录(条件性)

模型看到的内容

agentCatalog: true 且加载了 ctx.agentDefinitions 服务时,每个会话有一条 durable <system-reminder> 消息携带 <available_agents> 列表:每个角色一行 - \name`: description(描述经过伪 XML 转义),并附带路由指引——以确切的角色名调用本工具的 agent` 参数。角色集合变化时就地替换该消息并重新发布完整目录;目录被清空或工具新不可见时消息被摘除。没有该服务或该开关时没有目录可见面。

Token 影响

条件性:一条目录消息,大小随角色数量而定,仅当条目 digest 变化时重新发布。

KV Cache 影响

替换或摘除目录会使该消息之后的复用失效;digest 不变则前缀保持稳定。

已知限制与暂缓事项

  • 后台运行不通过本工具公开结果:一次性任务的最终输出通过通用 Task 接口收集,可继续子 agent 的输出留在其自身会话中,按其 subagent id 读取。
  • 等待中实例的重复名称发现较晚TODO(subagent-dup-toolname)):若要阻止提供方注册回滚,需要一份预期名称注册表。
  • 实例配置是部署上限,角色是逐调用的组合:固定的部署级子 agent 策略仍需实例配置,角色只在其之内收窄或改变样式。