用户定的两件,一并落地。
**一、活动不再分 flow 和 loop —— 彻底退役 flow**
· `flow-engine` 模块整个删除(runner 379 行 + step-sequence 184 行 + 测试);
· `paradigm` 从清单身份、`activity_package`/`task` 两张表、任务卡与活动库一并退场;
`businessModel` 不再是判别联合 —— 只有案例模型(CMMN + 说明书 + DMN)一形;
· task 的引擎分派从「按 paradigm 取两个之一」收成**唯一的引擎**;
· `activities/` 四个 flow 活动(A1 受理 / A4 定价 / A6 议价 / A7 归档)各写了一份
案例模型:阶段照原来的步分,触达世界的项一律 manualActivationRule,
能算的交 DMN(A1 的三分类 P-03、A4 的 P-01/P-02)不交 Agent;
· 六个占位槽位的骨架从「机器步落台账 + 一张验收单」改成案例骨架,包版本 0.8.0 → 0.9.0。
**代价写在明处,不假装没有**:`turn-runner` 每一拍都要 `agent.decide` ——
环境里没有模型 key,案例活动一步也走不动。三套端到端(统一报价 / 新建流程包 / 测试台
Trace)整套跳过,文件头写明恢复条件:①有可用模型 ②走法改写成按 Enabled 集推进。
**不许把断言改松让它变绿** —— 绿得不诚实比红着更坏。debt.md 已记。
**二、审批活动可管**(新能力)
· `sys.approval_template`:审批点**可复用的那一半** —— 审批人看哪几项、按什么名字看、
怎么催、说什么话。谁来审不在里面(与活动点同口径,运营时轮值);驳回回哪个节点
也不在里面(那是每张图自己的事,留在节点上);
· 三条路由 + 引用反查:还被审批点引着就不许删(409),删了那些节点会**静默**退回旧行为;
· 运行时 `basisOf`:引了模板就按模板筛与改名,没引即旧行为(载荷全摊开)。
模板改了只影响新发出的审批单 —— 在途单的依据在发出那一刻已定形。
**三、活动库重做**:一区两格 —— 「活动(装进来的)」与「审批活动(配出来的)」,
都用流程卡那套两段式卡片(头 + 四格数据板),幽灵卡当入口(装入活动 / 新建审批活动);
「标准/案例」那一维随范式一起撤,业务分类成了唯一的一维,以行内小签呈现。
迁移 0020:两张表 drop paradigm、建 approval_template。已在开发库跑过并重播种。
实测(丁子乔账号):建「定价审批」模板 → 流程包 A5 属性里选得到 → 引用反查计数正确。
四闸绿(api:check 随本提交)。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
160 lines
12 KiB
Markdown
160 lines
12 KiB
Markdown
# 实施进度(主 Agent 维护)
|
||
|
||
> 里程碑序见 编码规范 §15。每个里程碑先立骨架(index / contract / port / CONTRACT.md + 空测试)
|
||
> 再填实现;门禁从 M0 起全绿,红了先修门禁再前进。
|
||
|
||
## 状态总览
|
||
|
||
| 里程碑 | 内容 | 状态 |
|
||
|---|---|---|
|
||
| M0 | 工作区骨架 + 五道门禁 + 环境自举 | ✅ 完成 |
|
||
| M1 | `@contracts` 首版、`event`、`ledger`、`org`、`llm` | ✅ 完成 |
|
||
| M2 | `memory`、`toolbox`、`channel`、`message` | ✅ 完成 |
|
||
| M3 | `interaction`、`human-tool`、`release`、`activity-registry`、`@sfeel` | ✅ 完成 |
|
||
| M4 | `skill-engine`、`loop-engine`、~~`flow-engine`~~(2026-07-29 退役)、`task` | ✅ 完成(模块与 domain;app 装配随 M5) |
|
||
| M5 | `process`、`trigger`、`@activity-sdk` + 六个活动包 | ✅ 完成 |
|
||
| M6 | 前端:工作台五要素 → 治理台九功能;`minute`、`report` | 🟡 五要素九功能均已平移并接真实 API;`minute`/`report` 已落;编排画布只读态已接,手绘编辑器待接 |
|
||
|
||
**MVP 十条判据:① ② ③ ⑥ ⑦ ⑧ ⑨ ⑩ 已在真实系统上端到端跑通;④ ⑤ 的 loop 机制(CMMN 装载 / Enabled 集 / 断点 / 调人)跑通,余下部分受限于 LLM 端点。**
|
||
|
||
**当前:429 个测试通过(含对真实 PG 的集成测试),门禁五道全绿。20 个后端模块 + 5 个包 + 6 个活动包 + 14 个前端 feature。**
|
||
|
||
**LLM:DeepSeek provider 已接,两档实例 `deepseek-v4-flash` / `deepseek-v4-pro` +
|
||
用途名 `quote-extractor`(→ flash)。密钥只从环境读、落库即密封。**
|
||
|
||
### MVP 完成判据的跑通进度(README《MVP 完成判据》)
|
||
|
||
| # | 场景 | 状态 |
|
||
|---|---|---|
|
||
| 1 | 治理台:员工岗位 / LLM 实例 / 流程包发布 / 触发器 / 邮件通道 | ✅ `pnpm db:seed` 一次做完 |
|
||
| 2 | RFQ 邮件入站 → 归属解析 → 触发器命中起单 → A1 落到冯兵工作台 | ✅ 已跑通 |
|
||
| 3 | A1 受理归一(flow):步序推进 → LLM 抽取 → 台账草稿 → 补全卡 → DMN 打标 → 放行落地 | ✅ **机器路径全程跑通,零人工兜底**:模型从询价原文抽出 pn/brand/eau/目标价/交期 → D1 条件跳步 → S4 工具 → S5 DMN 三分类 → 放行 → 草稿合并正式版 → 输出口发射 → `released` |
|
||
| 4 | B 类 → A3 渠道寻源(loop) | 🟡 CMMN 装载(21 计划项)、Enabled 集、断点判定、技能装配入信封、Agent 真实决策(接 DeepSeek 后每回合由模型定夺)、案例全景视图 —— 全部跑通;**多轮寻源直至交付放行**受限于回合成本,未跑满 |
|
||
| 5 | C 类 → A2 替代选型(loop) | 🟡 同上:CMMN 装载(19 计划项)+ 回路推进 + 技能装配 + 案例全景视图跑通;跨人卡与交付放行未跑满 |
|
||
| 6 | A4 成本定价(flow) | ✅ 取价基准 → DMN 定价(利润模型 P-01)→ 算偏离率 → DMN 底价自检(底价门禁 P-02)→ 条件跳步 → 报价草案验收放行 → released |
|
||
| 7 | AP 定价审批(审批点) | ✅ 卡到 PM 丁子乔工位,依据快照齐;**驳回必附意见**(空意见被拒)、**驳回 → 回 A4 重开新实例**(A4 #2,旧实例不复活)、**通过 → 进 A6** |
|
||
| 8 | A6 报价议价(flow) | ✅ 正式报价单生成 → 写类动作**登记为动作意向**(不碰世界)→ 放行即落地(台账回写 1 行)→ 落地收敛 → 输出口发射 |
|
||
| 9 | 客户拒绝 → A7 情报归档 | ✅ 出口选 lost → G4 按 `outcome = "lost"` 判定 → A7 起单 → 历史价格情报回写(拒绝原因)、客户画像、落地率统计落账 → **end 节点 released,工作流「已完成」** |
|
||
| 10 | 全程可审计 · 工作台五要素 · 治理台在途监控与叫停恢复 | ✅ 任务记忆只追加、信封盖戳、归侧标注(实测 A7:机器产出 13 / 人裁决 3 / 世界等待 2 / 人产出 1);五要素齐活,纪要「决议 → 登记起单」端到端跑通;治理台在途监控 + 叫停 + 恢复跑通且留痕归人裁决侧;**终态封卷蒸馏钩子产出活动记忆候选条目**(确定性骨架,零 LLM,条目带证据链) |
|
||
|
||
## 活动资产盘点(六个活动)
|
||
|
||
| 活动 | 范式 | 视图模版 | 技能 | 结晶片段 |
|
||
|---|---|---|---|---|
|
||
| A1 RFQ 需求分析 | flow | 事态全景 / 打标判据 / 成果预览 | 读懂一封询价 · 打标前先备齐判据 | 1 |
|
||
| A4 成本定价 | flow | 取价基准 / 定价与门禁 / 草案待放行 | 选对价格基准 · 读懂底价门禁的处置 | 1 |
|
||
| A6 报价议价 | flow | 正式报价单 / 放行即发出 | 拟一份能发出去的报价单 · 选对议价出口 | 0 |
|
||
| A7 情报归档 | flow | 结果登记 / 闭环待放行 | 把拒绝原因写成下一单的判据 | 0 |
|
||
| A3 渠道寻源 | loop | 案例全景(阶段 / 可为 / 缺口) | 按场景圈渠道 · 该等还是该问 | 0 |
|
||
| A2 替代选型 | loop | 案例全景 | 圈替代候选 · 什么时候必须问客户 | 0 |
|
||
|
||
视图外壳与卡片件在 `@sdk`(`viewShell` / `kvCard` / `tableCard` / `stagesCard` / `noteCard`)——
|
||
六个活动共用一套面貌;容器是 `sandbox=""` 的 iframe,样式内联自带。
|
||
|
||
## 端到端跑过的轮次
|
||
|
||
四轮完整链路(入站 → A1 → G2 → A3/A2 → 汇合 → A4 → AP → A6 → G4 → A7/end):
|
||
拒绝分支(lost → A7 → 终点)三轮、成交分支(won → 终点)一轮,均收敛为「已完成」。
|
||
度量八指标全部有真实读数(自主率 100% / 有效自主率 95% / DMN 覆盖率 66% /
|
||
单位成本 73 token 每放行单 / 终态分布 released 95%)。
|
||
|
||
## 常用命令
|
||
|
||
```bash
|
||
pnpm gates # gen:tiers → typecheck → lint → depcruise → api:check → test(五道门禁)
|
||
pnpm db:up # docker compose 起 PG16(四 schema 由 db/init 建)
|
||
pnpm db:generate # drizzle-kit 生成 sys schema 迁移
|
||
pnpm db:migrate # 应用迁移
|
||
pnpm db:seed # 播种五岗位五员工(登录者 = 冯兵)
|
||
pnpm dev:api # tsup watch + node dist/main.js(:8787)
|
||
pnpm dev:web # vite(:5173,/api 反代到 8787)
|
||
```
|
||
|
||
契约变更后:`pnpm api:check --update && git add api-report`(§12.4)。
|
||
|
||
## 已完成的落点
|
||
|
||
**M0** — pnpm workspaces / tsconfig 双工程 / eslint flat / dependency-cruiser
|
||
(基线八条 + JCAI 增补,tier-order 由 `tools/module-tiers.json` 生成)/ 契约快照只留契约面 /
|
||
docker-compose PG16 + 四 schema。
|
||
|
||
**M1** — `@contracts` 九文件首版;四个 L1 模块各带 index / contract / port / CONTRACT.md /
|
||
domain 零 mock 测试;app 层 Hono 服务、鉴权中间件、DI 装配、drizzle 迁移、AES-256-GCM 凭证密封。
|
||
已验证:种子播种、岗位授权(BD 被拒 / PM 放行)、LLM 四元绑定密钥不外泄、
|
||
ledger 对真实 PG 的 schema 自生长与写三分。
|
||
|
||
**M2** — 四个 L2 模块:`memory`(任务记忆四性质 / 活动记忆四层 / 任务日志两级投影 / 度量)、
|
||
`toolbox`(注册两审 / 效应等级 / 白名单 / `ToolInvoker` 第二条缝)、
|
||
`channel`(入站归一 → 系统写 → 数据事件;出站与关联记录)、`message`(通知 / 跨任务征答 / 死信 / 无主兜底)。
|
||
app 侧接上派发器(advisory lock 串行 + 消费幂等)与 `/api/ingest` 模拟通道。
|
||
已验证:一封无主 RFQ 邮件入站 → 归属解析 no-match → 事件落库 → 兜底落到 OP 岗位李元初的消息要素。
|
||
|
||
**M3** — `@sfeel` 全套(lexer / parser / evaluate / static-check);
|
||
`human-tool` 三规矩机检 + 工单两模式 + 对话卡族 + 到达面两路 + 驳回重答;
|
||
`release` 落地预检五项 + 幂等落地 + 落地收敛才发射输出口;
|
||
`interaction` 控制权按态转交 + 视图净化门 + SSE 推送;
|
||
`activity-registry` 安装两审 + 悬空监听拒绝 + 零环境能力扫描 + 资产与包分离版本化 + 进化管线状态机。
|
||
|
||
**M4** — `skill-engine`(载方法不载权力 / 结晶片段经 ToolInvoker 留痕 / 装配入信封);
|
||
`flow-engine`(四种步型 / 条件跳步 / 声明给定的失败路径 / 异步步即监听 / 步序位置持久);
|
||
`loop-engine`(**自研 CMMN 子集解析器**,表外构件直接报错;两副标准生命周期与迁移拓扑;
|
||
Enabled ≠ Active;前提求值与语义性前提交裁量;DMN 确定性求值与命中行留痕;DRD 缺口演绎;
|
||
双向驱动与交集导航,断点即人环;三型行动);
|
||
`task`(终态五名裁定 / Harness 预算与停滞熔断 / 控制三语义 / 改派 / 断点续跑三份持久状态 /
|
||
封卷触发蒸馏)。
|
||
|
||
**M5** — `process`:闭合校验(七类违规)+ 四策略解析 + 状态聚合 + 确定性流转
|
||
(选边 / 装配 / AND 回齐 / 失败走向四选一 / 审批驳回重开新实例)+ 三表持久;
|
||
`trigger`:三类触发器 + 起单幂等 + 数据日历型逐行扫描;
|
||
`@activity-sdk`:基座六件接口 + `defineActivity()` + 本地开发宿主(mock 工具表 / 模拟工位 / 录制);
|
||
`activities/quote-intake`:统一报价 A1 的首个活动包 —— 契约七件 + 步序声明(五步)+
|
||
DMN 三分类规则 P-03 + 台账声明 + 样例集。depcruise 已实测拦下活动包越界 import。
|
||
|
||
## 下一步(按序)
|
||
|
||
1. **app 装配收尾(打通端到端的关键一步)**:把 M4/M5 的九个模块接入 `container.ts` ——
|
||
`loop-engine` 需要 `internal/adapter/agent-runner.ts` 的 Mastra Agent(§6.1);
|
||
派发器注册任务与触发器两个消费者;`TriggerMatcher` / `InFlightWorkProbe` 占位换真身;
|
||
pg-boss 承接周期扫描与监听时限。
|
||
2. **活动装载通道**:`activity-registry` 装载 .JS 产物并把基座六件句柄注入活动
|
||
(tsup 单文件 ESM 编译预设,§8.2 / ADR-004)。
|
||
3. **余下活动包**:A4 成本定价(flow · DMN P-01/P-02)、A6 报价议价(flow)、
|
||
A7 情报归档(flow)、A3 渠道寻源(loop · CMMN)、A2 替代选型(loop · CMMN)。
|
||
5. **M6 · 前端(进行中)**:任务要素已平移并接真实 API(样式整文件搬、DOM 与类名原样、
|
||
`@ui` 的沙箱 iframe 视图容器)。余下:
|
||
- 工作台:审批 / 消息(已有列表,待接就地作答)/ 纪要 / 汇报四要素 + SSE 订阅层
|
||
- 治理台九功能:`Governance.tsx`(2415 行)+ `_flow/` 编排画布六文件(diagram-js)
|
||
- `minute`、`report` 两个后端模块(L8)
|
||
6. **验收**:README《MVP 完成判据》十条场景端到端跑通。
|
||
|
||
## 待接的占位(详见 docs/debt.md)
|
||
|
||
- `container.ts` 两个占位端口:`InFlightWorkProbe`(M4)、`TriggerMatcher`(M5)
|
||
- 派发器的消费者表为空(M4 任务 / M5 触发器)
|
||
- pg-boss 已装未用(M5 定时作业)
|
||
- M4 四模块尚未接入 `container.ts`(需要 Mastra Agent adapter 与流程层起单,随 M5)
|
||
|
||
## 已建 ADR
|
||
|
||
编码规范 §14 已占 001–006,新 ADR 自 **007** 续(README 写「从 005 续」是笔误):
|
||
|
||
- ADR-007 工具链与门禁的落地形态
|
||
- ADR-008 投递队列:`sys.event_delivery` 是队列本体,pg-boss 只管定时
|
||
- ADR-009 凭证加密:AES-256-GCM + `JCAI_SECRET_KEY`
|
||
|
||
## 已知待办(按优先级)
|
||
|
||
1. **A4 的 P-01 因子**:客户等级与数量档目前在边映射上取默认档(常量),
|
||
物料类型取的是 A1 真实打的标。接 CRM 后改为读 `shared.customer` 与按 EAU 分档 ——
|
||
P-01 决策表本就有兜底行,默认档不会让求值失真,但也谈不上真实。
|
||
2. **LLM 端点**(唯一的外部依赖):`JCAI_LLM_API_KEY` 现为占位符。
|
||
影响面已收敛清楚:flow 的 LLM 步一律走**声明给定的人兜底**(全链因此跑通);
|
||
loop 的 Agent 每一轮决断都要模型,故 A3 / A2 在装载与第一轮之后必须转人。
|
||
接任一 OpenAI 兼容端点即可;两条缝的 record/replay 也需先有一次 live 录制。
|
||
3. **编排画布的手绘编辑器**:只读态(`FlowDiagram`)已接真实流程包;
|
||
原型的 `FlowEditor` / `flow-editor-core` / `manual-flow` 尚未平移。
|
||
4. **治理台写面**:员工增删、岗位授权编辑、LLM 实例 upsert、活动启停、记忆修剪等写动作
|
||
路由已在,前端确认带已备,逐个接上即可。
|
||
5. **`ch-mail` 遗留通道**:库里有一条早期迭代留下的通道配置(只含 `quoteNo` 提取规则),
|
||
与种子的 `ch-rfq-mail` 并存;确认无引用后清理。
|