快速开始
十分钟:装好工具链,校验并运行第一个 workflow,看懂第一个编译产物。
环境要求
- Node.js 20 或 22(原生沙箱依赖暂不支持更高主版本)
- pnpm ≥ 9(仓库使用 pnpm workspace)
1. 构建工具链
git clone <repo> dynamic-workflow && cd dynamic-workflow
pnpm install
pnpm build # tsc -b:构建 packages/* 全部五个包
构建完成后,CLI 入口在 packages/cli/dist/main.js。
2. 校验一个 workflow
node packages/cli/dist/main.js check examples/simple.flow
# ✓ examples/delivery.flow checks clean
check 做三层校验:词法/语法(Langium 解析)→ 语义(
作用域、资源、stage 依赖)→ 类型(表达式推断与可赋值性)。
存在 error 级诊断时退出码非零,并带行号列号。
试一个会报错的:把 workflow hello(input: Request) 的形参改名成 req,
再 check:
error workflow-param-name 1:15 workflow parameter must be named 'input'
3. 沙箱运行
node packages/cli/dist/main.js run examples/simple.flow \
--input '{"text": "hello agent flow"}'
run 把编译产物放进沙箱(子进程 + isolate)执行。CLI 内置一个
schema 驱动的 FakeAgentRuntime:它不调用真实模型,而是按
expect 的 JSON Schema 生成占位输出。所以你看到的回答是
"generated" 之类的占位串——这正好证明:即使模型是假的,契约校验、
流程推进、事件流转都是真的。
占位值的坑
FakeAgentRuntime 对所有字符串字段生成常量 "generated"。
对含跨条目唯一性 require 的示例(如 unique(items[*].id)),
请用单条目输入运行,否则唯一性断言会因占位值重复而失败。