upulse-engine/docs/engine-spec.md

3.2 KiB

Pulse Engine 目录规范

~/.upulse/engine/ — Pulse 的"用户态"代码空间,独立 git 仓库。

架构

~/.upulse/engine/           # 独立 git repo
├── package.json            # @upulse/engine, 依赖 @uncaged/pulse
├── tsconfig.json
├── templates/              # Scaffold 模板(meta coder 参考)
│   ├── workflow.ts.tmpl
│   └── workflow.test.ts.tmpl
├── src/
│   └── workflows/
│       ├── ping-pong.ts        # 示例 workflow
│       ├── ping-pong.test.ts
│       ├── werewolf.ts         # 业务 workflow
│       ├── werewolf.test.ts
│       └── roles/
│           ├── meta-gate.ts        # Gate: 准入检查(无 LLM)
│           ├── meta-gate.test.ts
│           ├── meta-coder-cursor.ts  # Coder: Cursor Agent 写代码
│           ├── meta-checker.ts       # Checker: 验证 scope + build + unit test
│           ├── meta-tester.ts        # Tester: E2E lifecycle 验证
│           └── meta-promoter.ts      # Promoter: commit + push + code_rev
└── docs/

核心概念

Engine vs 核心包

Engine (~/.upulse/engine/) 核心包 (packages/pulse/)
谁改 Meta workflow(agent 自主改) 人工 / subagent
内容 业务 workflow + meta roles 框架代码
版本控制 engine repo git hash = code_rev pulse repo
部署 promote event → daemon 热加载 npm publish

code_rev

Engine repo 的 git commit hash 就是 code_rev

  • 每次 promoter commit 后,commit hash 成为新的 code_rev
  • Guard state 按 code_rev 隔离(同一 guard + 同一 key,不同版本有独立 state)
  • 回滚 = 切回旧 code_rev,旧 state 还在

Meta Workflow 流程

START → gate → coder → checker → tester → promoter → END
                ↑          |          |
                └── fail ──┘── fail ──┘
Role 职责 LLM
gate 准入检查:任务描述够不够详细、是否在 engine scope
coder 用 Cursor Agent 写代码,参考 templates/ Agent
checker 验证文件 scope + bun run build + bun test
tester E2E lifecycle 验证:import → temp store → tick → quiescence
promoter git commit + git push + 输出 codeRev

Daemon 加载机制

  1. Daemon 启动时 tryLoadFromEngine,优先加载 engine 目录下的 workflow/role
  2. Engine 文件 import 用 @uncaged/pulse(npm link 到核心包)
  3. Promote event 触发 daemon 重新加载

开发新 Workflow

  1. 参考 templates/workflow.ts.tmpl 创建 src/workflows/{name}.ts
  2. 参考 templates/workflow.test.ts.tmpl 创建配套测试
  3. bun test 确认通过
  4. Git commit + push

或者通过 meta workflow 自动生成:向 daemon 提交任务 → gate → coder → checker → tester → promoter → 自动完成。

约束

  • Workflow 文件只放 src/workflows/
  • Meta role 文件只放 src/workflows/roles/
  • Import 用 @uncaged/pulse,不用相对路径到核心包
  • Commit author: 小橘 <xiaoju@shazhou.work>