# @agentproto/routine 中文文档

规范地址：https://npmcn.com/package/%40agentproto/routine/

版本：0\.4\.1
npm 元数据更新时间：2026-11-01T13:57:51.649Z
中文译文更新时间：2026-11-06T02:37:06.387Z
软件包许可：Apache-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40agentproto/routine
原文对照：https://npmcn.com/package/%40agentproto/routine/?lang=original
项目主页：https://agentproto.sh/docs/aip-41
源码仓库：https://github.com/agentproto/ts

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：61.9 kB，12 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：4 个
- 首次发布：2026-06-15T18:43:04.520Z
- 最新版本发布：2026-11-01T13:57:51.294Z
- 近 30 天下载量：6251（2026-10-05 至 2026-11-03，npm 官方下载统计）
- 已发布版本数：14（近 12 个月 14 个）

## 中文简介

@agentproto/routine — AIP-41 ROUTINE.md 参考执行. 用于声明重复或事件驱动的引用动作、工作流程或工具的标记下+前题格式。 从"什么"(目标)中去掉"何时"(时间表). 支持括号

## 安装

```sh
npm install @agentproto/routine
```

也可以使用：`pnpm add @agentproto/routine`、`yarn add @agentproto/routine`、`bun add @agentproto/routine`

## README

# @ agentproto/ 常规

AIP-41 (中文(简体) ) `ROUTINE.md` 参考执行。 用于声明重复或事件驱动的引用动作、工作流程或工具的标记下+前题格式。 从"什么"(目标)中去掉"何时"(时间表). 支持 cron / 间隔 / 日历 / 手动 / 事件驱动的调度, 包含重试, jitter, 追赶策略, 身份归属, 失败路径 .

> **状态:0.1.0-α.** 生成者 `scripts/scaffold-aip.mjs` —— 说 `build()` 财务报告和审定财务报表 `validate()` 尸体是TODO的.

谱: [页:1](https://agentproto.sh/docs/aip-41)

## 使用量

```ts
import { defineRoutine } from "@agentproto/routine"

const x = defineRoutine({
  id: "my-routine",
  description: "Short purpose.",
  // ...
})
```

## 运行时桥(SPEC)

`defineRoutine`编号 :`parseRoutineManifest` 仅高于 _验证_ (单位:千美元) `ROUTINE.md`。 。 。 . 在这段之前,什么也没有 `@agentproto/runtime` 读取 `.routines/*/ ROUTINE.md` 并把它变成活的预定工作—— `packages/worktree/ routines/worktree-gc/ROUTINE.md` (已发运) `enabled:false` 公关编号626 惰性。 这个部分是桥的设计 使它真实, 侦察 写入任何代码之前的源代码 :

-   `routineFrontmatterSchema.target` 财务报告和审定财务报表 `.schedule` 曾经 `z.any()` (单位:千美元)`packages/routine/src/schema.ts:16`)——完全没有验证.
-   守护进程唯一的现场日程安排是 `CronScheduler` (单位:千美元)`packages/runtime/src/cron-scheduler.ts`: 一个20秒的循环 职业持续 `~/.agentproto/cron-jobs.json`,带有动作类型 `command | agent | prompt-session` (单位:千美元)`cron-scheduler.ts:50-72`和证明 `agent`\- 有型路径( 镜像) `worktree-investigator-weekly` 内 `cron_list`) (中文(简体) ). `cron_run` (单位:千美元)`orchestration-tools.ts:1750`立即开工, 绕过它的时间表——模式 `routine_trigger` 镜相相相.
-   **没有持续、可地址的“ 按名称调用任何守护进程工具” 登记.** `McpServer` (单位:千美元)`@modelcontextprotocol/sdk`)为 _没有_ 一个网关 这里的单通.. `mcpServerFactory` 内 `packages/runtime/src/index.ts` 构造 a **新鲜** `McpServer` 重新运行 `registerXTools(...)` 通过 **百分比 `/mcp` 连接** (单位:千美元)`index.ts:1211`),所以没有长寿服务器 参考文献可以活过阴茎 它的注册工具在 下划线前置、未申报 `_registeredTools` 地图——伸入其中 已经是先例了,不是在这里发明的: `packages/runtime/src/__tests__/tool-subset.test.ts:20-26` 铸造 `server as unknown as { _registeredTools?: ... }` 以返回工具名称 出来测试单位。 桥重用同样的铸造 _调用_ (单位:千美元) 处理者,不只是列出一个.

### 决定

1.  **AIP-41 申报表层** ——没有新的显式原始.
2.  **目标种类** —— 说 `target.tool` 是通用路径( registrarr ) 守护进程 工具名称,任何工具. `target.agent` 财务报告和审定财务报表 `target.workflow` 这是糖 下到工具调用 :
    -   `target.tool = { tool, inputs? }` ——即时派遣.
    -   `target.agent = { adapter, prompt, model?, cwd?, ...any other agent_start field }` ∗ 以 `tool:"agent_start"` 与这些 字段为 `inputs`,对照代理 start 自身的输入方案验证 (单位:千美元)`packages/runtime/src/agent-start-schema.ts`· ; `wait` ) (删除). **新的目标类型—— `TargetAgent` 目前AIP-41草案中不存在 `target: TargetAction | TargetWorkflow | TargetTool` 工会** (单位:千美元)`packages/routine/src/types.ts:46`) (中文(简体) ). 标记为 specs-repo 后续 下面;这个repo的计谋是故意先于草案的.
    -   `target.workflow = { workflow: string | { file, ref, inline }, inputs? }` (单位:千美元) _现有_ AIP-41外形) `workflow.file` (或一条赤线, 作为文件路径处理) 发送为 `tool:"workflow_run_file"` 与 `{ path, input }`。 。 。 . `ref`编号 :`inline` 子窗体为 **未执行** —— 说 在这个运行时间中没有“ 通过 id 注册运行已保存的工作流程 ” (单位:千美元)`workflow_start` 使用内线 `stages` 数组,它不能解决 保存定义)—— `reconcile()`编号 :`trigger()` 报告清楚 不支持- 形状错误 而不是沉默不动.
    -   `target.action` (AIP-39行动参考)得到验证,但 **未发送** ——在此运行时间不存在动作解析器. 相同的“ clear 错误 ” , 不是 沉默的"治疗.
    -   所有三种发送的种类都折叠到 _不变_ `{ tool, inputs }` 双人, 所以书记官有一条行刑路线 (单位:千美元)`routineTargetToToolCall`),不是三个.
3.  **司马收紧** —— 说 `target` 从 `z.any()` 改为 `z.union` 联 合 国 四个对象计划(工具/代理人/工作流程/动作——见 `schema.ts`, (中文(简体) ), `.strict()` 除外 `target.agent`内在对象, 它通过额外 `agent_start` 字段通过运行时间验证. `z.union` 而不是说 `z.discriminatedUnion` 因为 变体被区分为: _哪个键存在_ (单位:千美元)`tool` 对 `agent` 对 `workflow` 对 `action`,而不是一个共同的字面歧视领域——添加 它本身就是一种改变. `schedule` 是故意的,这是故意的 **左边** `z.any()`: 仅 `target` 用于收紧案情摘要的范围,以及 `ScheduleCron`\- 只有zod计划会拒绝其他四种计划 该类型已存在文档。 相反, `routine-registrar.ts` 运行时守护符 `schedule.kind === "cron"` 和解决 `schedule.kind === "event"` (b) 其余种类为: 报告为明显的“ 尚未支持的” 跳过, 不是验证失败 分析时间.
4.  **调度机制——一个共享 `dispatchTool`,而不是四个铃声 包装.** `createGateway` (单位:千美元)`index.ts`建造一个懒惰的、, 内部缓存 `McpServer` 通过 _现有_ `mcpServerFactory()` (同样的) 注册通过一个真实 `/mcp` 连接得到.. `worktree_gc`, (中文(简体) ), `agent_start`, (中文(简体) ), `workflow_start`, (中文(简体) ), `workflow_run_file`,以及所有其他 守护进程工具在上面着陆),和 a `dispatchTool(name, inputs)` 关闭 进入其 `_registeredTools[name].handler(inputs, {})` - 同样的铸造品 作为 `tool-subset.test.ts`,现在负载而不是只测试。 已建成 懒惰( 第一次) `"tool"`\- 点燃/起火,而不是在靴子上),所以它增加了没有 当没有例行公事发生时 靴子会停放 此单个函数是交接的 改为 _两者_ `CronScheduler` (新设) `kind:"tool"` 动作, 实际排定 火灾)和 `RoutineRegistrar.trigger()` (供点火使用)——1 发送执行,两个呼叫者.
5.  **书记官长** (单位:千美元)`packages/runtime/src/routine-registrar.ts`(b) —— `reconcile()` 扫描 `<workspace>/.routines/*/ROUTINE.md`,每个验证 通过 `parseRoutineManifest`,并每张 `enabled:true` + 键 `schedule.kind:"cron"` 常规创建一个 `CronScheduler` 任务标记 `label:"routine:<id>"`; 一种会消失或转动的常规 `enabled:false` 已删除其标记的工作; 程序已解决 `{schedule, action}` 更改后被删除旧工作,再换一个新的 创建( 删除后再创建, `CronScheduler` 没有 `update()`) (中文(简体) ). 一个 `enabled:true` + 键 `schedule.kind:"event"` 程序解为反应 反之,反应接线会重新装入跑者绑定的套装 在每一个传球。 在网关启动时呼叫一次;可根据需要召回(无) 记录为后续,而不是默默放弃). 收集文件解析/ 目标错误, 只跳过该文件, 不 整个扫描. A 类 `target.workflow` 目标绑定在同一工作空间:一个相对 `file` 决心,在它之下,派遣者 `workflow_run_file` 调用运行 与 `cwd` 准备 `input.repoRoot` 除非 程序已设置一个( 明确 `repoRoot` 总是赢). 一直这样 一个工作空间的例行公事 从沉默的目标守护进程活动 工作空间.
6.  **`routine_trigger`** (MCP工具,镜像) `cron_run`页:1 `POST /routine-defs/:id/trigger` (HTTP,镜像) `POST /cron/:id/run`(b) —— 将常规的新鲜度重新划分,将其目标确定为工具呼叫,以及 电话 `dispatchTool` **直接** (不是通过注册工作):工作 即使是一个被禁用的程序或一个 `reconcile()` 还没有看到,和 绕过调度和 `enabled` 旗帜,与 `cron_run` 绕过现有任务的时间表( e)`cron-scheduler.ts:514-519` 没有 `active` 请检查url=值 (帮助).

### `/routines/*` 命名碰撞(已解决)

这座桥的人工火力路线住在 **`/routine-defs/:id/trigger`**, (中文(简体) ), 没有 `/routines/:id/trigger` - 最初是为了避免混淆AIP-41 常规 id 有 `RoutineRunner` 在同一条上运行 id `/routines/*` 前缀. 这场相撞现已无实际意义: `routine_start`编号 :`routine_status`编号 : `routine_cancel`编号 :`routine_escalation_resolve` 联合国 `/routines/*` 运行 路线(不相关的临时路线) `RoutineRunner` (原始内容)已删除 (PLAN.md B3阶段). `GET /routines` 现在只服务于这个 书记官 `list()`,以及 `/routine-defs/*` 保留它自己的前缀.

### Specs-repo后继(此处未应用——单独repo,每简)

-   文档 `target.agent` (单位:千美元)`{ adapter, prompt, model?, cwd? }`作为 一级AIP-41目标类型 `resources/aip-41/draft/ROUTINE.schema.json` 上游——这个repo's `types.ts`编号 :`schema.ts` 在生成之前 这个形状的草稿.
-   考虑记录 `schedule.kind` 数值 `cron` 作为5月部分 在v1运行时, 因为这个桥只执行 `cron` (间隔时间 / 日历 / 手动 / 事件在此解析但未安排 .

## 许可证

麻省理工学院——见 [自由主义](https://npmcn.com/package/%40agentproto/routine/LICENSE)。 。 。 .

## 常见问题

### @agentproto/routine 是什么？

@agentproto/routine — AIP-41 ROUTINE\.md 参考执行\. 用于声明重复或事件驱动的引用动作、工作流程或工具的标记下\+前题格式。 从"什么"\(目标\)中去掉"何时"\(时间表\)\. 支持括号

### 如何安装 @agentproto/routine？

在项目目录运行 npm install @agentproto/routine，或使用 pnpm add / yarn add / bun add。

### @agentproto/routine 支持 TypeScript 吗？

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

### @agentproto/routine 支持 ESM 还是 CommonJS？

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

### @agentproto/routine 可以商用吗？

@agentproto/routine 使用 Apache-2\.0 许可。宽松许可：允许商业使用、修改和再分发，并附带明确的专利授权；分发时需保留许可与 NOTICE 文件，修改过的文件要注明改动。以上为概括，不构成法律意见，请以许可原文为准。

### @agentproto/routine 的下载量有多少？

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

### @agentproto/routine 还在维护吗？

最新版本 0\.4\.1 发布于 2026/11/01（4 天前）；至今共发布 14 个版本，其中过去 12 个月发布了 14 个；首次发布于 2026/06/16。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

