@brooswit/herdr-sdk (英语)
输入的脚本客户端 医生 套接字 API , 由 schema herdr 本身所生成 herdr api schema --json) (中文(简体) ).
import { HerdrClient } from "@brooswit/herdr-sdk";
const h = new HerdrClient(); // herdr's own default config dir, or $HERDR_SOCKET_PATH
const { snapshot } = await h.session.snapshot(); // fully typed
await h.agent.wait({ target: "w1:p3", until: ["idle"], timeout_ms: 30_000 });
const sub = await h.subscribe([{ type: "pane.agent_status_changed", pane_id: "w1:p3" }]);
for await (const frame of sub) console.log(frame.event, frame.data);
层
| 目录 | 任务 |
|---|---|
src/transport | unix socket QQ新线限定框架 。 没有JSON 没有协议. |
src/protocol | 信封形状, HerdrError,编号。 没有I/O. |
src/client | 一个请求 —— 一个回应 —— 服务器关闭(即herdr的电线行为) . |
src/events | events.subscribe:长生相接者,作同心行者. |
src/services | 每个方法家族一个文件; 细打字外观. |
src/reducers | 纯:快照+推放帧 → 当前舰队状态. |
src/generated | 代码输出 . 不编辑; 运行 bun run generate。 。 。 . |
scripts/gen | 生成器,每个输出一个文件. |
套接字地址
- 首字母顺序 :
HERDR_SOCKET_PATH(herdr自己公布)胜出;HERDR_SOCKET仅被誉为堕落的后退HERDR_SOCKET_PATH未设定。 偏爱HERDR_SOCKET_PATH在新代码. - 默认路径,当两者都没有设定时,镜像herdr自己的配置目录分辨率:
XDG_CONFIG_HOME如果设置; 否则在 Windows 上%APPDATA%,则%USERPROFILE%\AppData\Roaming,则$HOME/.config,然后是临时目录;否则(POSIX)$HOME/.config,然后是临时目录——与herdr/herdr.sock(或herdr-dev/herdr.sock与{ dev: true },或.../sessions/<name>/herdr.sock与{ sessionName }) (中文(简体) ). - 每个操作系统地址: 在 Linux/ macOS 上,上面的路径是一个真实的 Unix- domain 套接字, 使用不变 。 在 Windows 上, herdr 在命名的管子上听
\\.\pipe\<path>相反——路径本身只有前缀,否则就永远不会被重写. 这个 SDK 自动从process.platform· ;socketEndpoint()(从src/transport/socket-path.ts直接需要时进行衍生. - Dev 构建/ 命名会话 : 通过
{ dev: true }指向一个herdr-dev构造的配置目录, 或{ sessionName }连接到指定的会话套接字,例如 .new HerdrClient({ dev: true, sessionName: "work" })也从未在运行时猜测过.
这是建立在电线上的事实(Herdr 0.8.2, 议定书20)
- 请求
{id, method, params}→{id, result:{type,…}}或者说{id, error:{code,message}}。 。 。 . - 服务器 一个答复后关闭。每个RPC都是自己的连接.
events.subscribe鸡巴subscription_started然后保持连接打开,流出{event, data}边框.- 超时为打出错误( T)
code: "timeout"从不挂起.isTimeout(e)。 。 。 . - 计划没有说明每种方法的返回结果;
scripts/gen/method-result-map.ts有,而且test/live证明这一点.
脚本
bun run generate # schema → src/generated
bun run check # generate + drift guard + typecheck + unit (what CI runs)
bun run build
HERDR_LIVE=1 bun test test/live # against your running herdr