用途 Routine 是 CocoPlus 提供的技能,用于管理 CocoRoutine 的 Snowflake 任务调度。它以 $routine 命令族的形式工作,覆盖列出、安排、停用和删除定时任务这几类操作。
主要能力
- $routine list:检查 .cocoplus/ 是否存在,读取 .cocoplus/routines/registry.json;若文件不存在则显示 No scheduled routines,否则展示每个 routine 的名称、cadence、状态、上次运行、下次运行以及对应的 Snowflake 任务名。
- $routine schedule <flow> --cadence <cron|daily|weekly>:在 [routine] enabled = true 且 allow_snowflake_tasks = true 的前提下,加载已完成的 flow 定义并确认其所需输入完全自包含;拒绝引用本地文件系统路径、本地 MCP、本地环境变量、本地专用凭据或未满足的项目相对文件的 flow。随后在 .cocoplus/proposals/routine/<timestamp>/ 下生成 Snowflake TASK 提案;若项目启用了 retained proposals,则要求开发者先通过 $flow settle 结算,否则需显式确认后才执行 TASK SQL,且只有 Snowflake 操作成功后才更新本地 registry。
- $routine disable <name>:在 registry 中查找该 routine,除非开发者明确确认实时执行,否则生成 ALTER TASK <task> SUSPEND 的 retained proposal,执行成功前本地状态标记为 disable_requested。
- $routine delete <name>:同样先查找 routine,生成 DROP TASK <task> 的 retained proposal,除非显式确认实时执行;执行成功后归档 registry 条目。
使用方式 所有调度行为均是 opt-in:需先在 cocoplus.toml 的 [routine] 段启用。若 enabled = false,应报告 routines 已禁用并停止;若 allow_snowflake_tasks = false,则仅允许 list/status 类操作,调度必须在生成或执行 TASK SQL 之前停止。CocoPilot 可以在 flow 成功运行后建议调度,但不得自动调度。任何 TASK 的创建、修改或删除仍需经过 Safety Gate、RBAC 提权防护、retained proposal 规则和常规 Snowflake 确认流程。
状态记录 Routine 在本地 .cocoplus/routines/registry.json 中跟踪,包含 version 与 routines 数组,每个条目含 name、flow_id、cadence、snowflake_task、status、last_run、next_run、created_at 等字段。CocoConsole 读取该文件并在 Flow 面板展示 routine,但控制台为只读,不会停用、删除或调度任何 routine。
适用场景 适用于已启用 CocoPlus 与 CocoRoutine、需要把自包含的 flow 以定时方式提交到 Snowflake 任务调度的场景,例如按日或按周执行的例行检查流。
限制 CocoRoutine 需要显式启用;调度受 allow_snowflake_tasks 开关约束;不支持依赖本地文件、本地 MCP、本地环境变量或开发者本地状态的 flow;TASK 变更须经安全门与显式确认;registry 仅在 Snowflake 操作成功后才更新。价格、平台支持范围等细节暂未提供。