@b4run/sdk

中文文档
0.15.8发布于 2026/10/31MITTypeScriptES Module零依赖构建来源已验证近 30 天下载 5775

Author-facing TypeScript SDK for defining B4.run agents, tools, middleware, memory, and routes.

原始使用文档
文档目录6 节
  1. Install
  2. Example
  3. Runtime and stability
  4. Related
  5. Maturity and support
  6. License

B4.run

@b4run/sdk

The TypeScript SDK for authoring B4.run apps: the runtime functions, such as agent(), defineMemory() and defineMiddleware(), and the types for tools, routes and runtime contracts.

Use this when: You are authoring routes, tools, middleware, memory declarations, or typed runtime contracts.

The B4.run navlog demo: a VFR flight plan with its navlog sheet in the Workbench. Opens the demo video.
▶ Watch the 50-second navlog demo

Install

Requires Node.js 24 or later. create-b4-app usually installs the SDK for you, alongside @b4run/cli, because routes run on the CLI's runtime. To add both to an existing app:

npm install @b4run/sdk @b4run/cli

Add zod when declaring typed long-term memory:

npm install zod

Example

Define an agent route whose issueRefund tool needs a person's approval:

// src/app/support/index.ts
import { agent } from "@b4run/sdk"

export default agent({
  model: "gpt-5-mini",
  systemPrompt: "Answer support questions clearly and concisely.",
  tools: { approve: ["issueRefund"] },
})
// src/app/support/tools/issueRefund.ts
/** Refund an order. */
export default async (input: { readonly orderId: string }) => {
  return { refunded: input.orderId }
}

Each tool is a file with one default export: route-local tools live in the route's tools/ directory and shared tools in src/tools/. A name in tools.approve pauses each call until a person answers, and an "always" answer stops the prompts for that tool. Write { tool: "issueRefund", allowAlways: false } instead to ask on every call.

The same package provides adjacent memory and middleware declarations:

// src/app/support/memory.ts
import { defineMemory } from "@b4run/sdk"
import { z } from "zod"

export default defineMemory({
  kind: "semantic",
  scope: ["workspace", "route"],
  schema: z.object({
    subject: z.string(),
    predicate: z.string(),
    value: z.string(),
  }),
})
// src/middleware.ts
import { defineMiddleware } from "@b4run/sdk"

export default defineMiddleware(() => ({ action: "continue" }))

Alternatively, middleware that owns a long-lived resource, such as a database pool, uses the lifecycle form instead of the function above. setup runs once, lazily, before the first gated request (and is retried on the next request if it fails); dispose runs when the Node runtime shuts down.

// src/middleware.ts
import { allow, defineMiddleware, reject } from "@b4run/sdk"
import { Pool } from "pg"

let pool: Pool | undefined

export default defineMiddleware({
  async setup() {
    pool = new Pool({ connectionString: process.env.DATABASE_URL })
    await pool.query("select 1")
  },
  async dispose() {
    await pool?.end()
  },
  async handle(req) {
    const token = req.headers.authorization?.replace(/^Bearer /, "")
    if (!token) return reject(401)
    const result = await pool?.query("select user_id from sessions where token = $1", [token])
    const row = result?.rows[0]
    return row ? allow({ userId: row.user_id }) : reject(401)
  },
})

The auth middleware recipe walks through bearer-token verification. The starter templates resolve the caller once, in src/auth.ts, and import it from both src/middleware.ts and src/thread-access.ts; keep that shape when you add thread access, so both files agree on who the caller is.

Runtime and stability

  • @b4run/sdk is the supported, edge-safe application surface.
  • @b4run/sdk/pure is a supported, dependency-free edge-safe integration surface.
  • @b4run/sdk/testing is a supported Node-only scenario-authoring surface. It is separate from @b4run/testing.

Maturity and support

B4.run is pre-1.0, and its public surface can change. All publishable B4.run packages release together as a fixed group; review the @b4run/sdk changelog and upgrading guide before upgrading. For support, use GitHub Discussions; report defects in GitHub Issues.

License

MIT. See the repository license.

版本与发布记录

@b4run/sdk 共发布 23 个版本,首次发布于 2026/09/09;过去 12 个月发布了 23 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.15.8latest2026/10/317 天前
0.15.72026/10/2810 天前
0.15.52026/10/2712 天前
0.15.42026/10/2612 天前
0.15.22026/10/2514 天前
0.15.12026/10/2414 天前

关于 @b4run/sdk 的常见问题

@b4run/sdk 是什么?

Author-facing TypeScript SDK for defining B4.run agents, tools, middleware, memory, and routes.

如何安装 @b4run/sdk?

在项目目录运行 npm install @b4run/sdk,或使用 pnpm add / yarn add / bun add。

@b4run/sdk 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@b4run/sdk 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@b4run/sdk 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=24.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@b4run/sdk 可以商用吗?

@b4run/sdk 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@b4run/sdk 的下载量有多少?

根据 npm 官方下载统计,@b4run/sdk 在 2026/10/08 – 2026/11/06 这 30 天内被下载 5,775 次,日均约 193 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@b4run/sdk 还在维护吗?

最新版本 0.15.8 发布于 2026/10/31(7 天前);至今共发布 23 个版本,其中过去 12 个月发布了 23 个;首次发布于 2026/09/09。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。