@ agentproto/ 常规
AIP-41 (中文(简体) ) ROUTINE.md 参考执行。 用于声明重复或事件驱动的引用动作、工作流程或工具的标记下+前题格式。 从"什么"(目标)中去掉"何时"(时间表). 支持 cron / 间隔 / 日历 / 手动 / 事件驱动的调度, 包含重试, jitter, 追赶策略, 身份归属, 失败路径 .
状态:0.1.0-α. 生成者
scripts/scaffold-aip.mjs—— 说build()财务报告和审定财务报表validate()尸体是TODO的.
谱: 页:1
使用量
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?: ... }以返回工具名称 出来测试单位。 桥重用同样的铸造 调用 (单位:千美元) 处理者,不只是列出一个.
决定
- AIP-41 申报表层 ——没有新的显式原始.
- 目标种类 —— 说
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),不是三个.
- 司马收紧 —— 说
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) 其余种类为: 报告为明显的“ 尚未支持的” 跳过, 不是验证失败 分析时间. - 调度机制——一个共享
dispatchTool,而不是四个铃声 包装.createGateway(单位:千美元)index.ts建造一个懒惰的、, 内部缓存McpServer通过 现有mcpServerFactory()(同样的) 注册通过一个真实/mcp连接得到..worktree_gc, (中文(简体) ),agent_start, (中文(简体) ),workflow_start, (中文(简体) ),workflow_run_file,以及所有其他 守护进程工具在上面着陆),和 adispatchTool(name, inputs)关闭 进入其_registeredTools[name].handler(inputs, {})- 同样的铸造品 作为tool-subset.test.ts,现在负载而不是只测试。 已建成 懒惰( 第一次)"tool"- 点燃/起火,而不是在靴子上),所以它增加了没有 当没有例行公事发生时 靴子会停放 此单个函数是交接的 改为 两者CronScheduler(新设)kind:"tool"动作, 实际排定 火灾)和RoutineRegistrar.trigger()(供点火使用)——1 发送执行,两个呼叫者. - 书记官长 (单位:千美元)
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总是赢). 一直这样 一个工作空间的例行公事 从沉默的目标守护进程活动 工作空间. routine_trigger(MCP工具,镜像)cron_run页:1POST /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'stypes.ts编号 :schema.ts在生成之前 这个形状的草稿. - 考虑记录
schedule.kind数值cron作为5月部分 在v1运行时, 因为这个桥只执行cron(间隔时间 / 日历 / 手动 / 事件在此解析但未安排 .
许可证
麻省理工学院——见 自由主义。 。 。 .