用途:dag-library 用于保存 DAG 定义并稍后按名称重新运行,把图当作可复用资产而非一次性内容。它只负责存储与重跑;若要编写全新图,资料建议先阅读 mass-ulw。
存储方式:已保存的定义是普通 DAG 定义 JSON 文件,命名为 <name>.json,放在库目录之一,按顺序首个命中生效:$OMO_DAG_LIBRARY(多个目录用 : 分隔,Windows 用 ; 以保留盘符路径)、$PWD/.omo/dags、$HOME/.omo/dags。定义包含 key、name、nodes 等字段,节点有 id、category、prompt、dependsOn。字符串值可含占位符,加载时填充:{{key}}(最终轮换后的 key,用于文件路径避免重跑互相覆盖)、{{date}}(UTC YYYYMMDD)、{{datetime}}(UTC YYYYMMDD-HHmmss)。节点提示必须自包含,dependsOn 仅表示顺序,节点间数据通过文件传递。
运行方式:扩展在 OMO_DAG_SDK_ROOT 下发布 library.js。JS 求值单元中可用 const lib = await import(${env("OMO_DAG_SDK_ROOT")}/library.js),再 await lib.start("nightly-audit") 并 await run.done()。lib.load(name) 返回填充后的定义但不启动;lib.start(name) 加载并启动,返回与 sdk.start 相同句柄(run_id、done()、cancel(reason))。两者均为异步,必须 await。
key 轮换:DAG 引擎以 key 加图指纹做幂等,同 key 同图会复用旧运行。因此库把存储的 key 视为基础 key,每次加载轮换:默认 lib.start("nightly-audit") 变为 nightly-audit-<UTC YYYYMMDD-HHmmss>,每次都是新运行;lib.start("nightly-audit", { suffix: "20260818" }) 变为 nightly-audit-20260818,可幂等恢复;lib.start("nightly-audit", { suffix: "" }) 保持原 key,完全幂等。失败节点应在该 run id 上重试或修正,而非新后缀。
Python 单元:Python 无法导入 ESM 库,需用普通字典复现语义:读取文件、轮换 key、填充占位符、调用 tool.workflow。
保存新定义:把当前图写入 $HOME/.omo/dags(用户级,跨 cwd 保留)或 <repo>/.omo/dags(项目级,可经 git 共享),再用 lib.start 运行一次确认。名称仅允许字母、数字、点、短横线、下划线,库会拒绝路径形状的名称。