forked from ChaiHao/BPOS-MVP
用户定的形态:测试台是**后端检测活动与流程**的,真实任务照旧到工作台
(不然指定账号干嘛)—— 所以测试台只管「起单 + 看穿」,人那一环还是真的。
**节点指派**(迁移 0016 workflow.assignments):
- StartWorkflowInput 增 `assignments {节点id → 员工id}`;分派改三级取人:
①节点指派(点名的人在岗就是他)②员工组轮值 ③全员轮值 —— 指派是加法不是替换,
点名的人不在岗退回轮值(单不能没人接);事件里如实记 `(节点指派)`
- **顺带修一个真 bug**:`node_instance.assignee_id` 写了但 `listInstances` 从没读回来
(审批箱收件、员工面链条、治理列表全按它认人 —— 写了不读等于没写)
**全链 Trace**(新模块 trace,L2;迁移 0017 sys.trace_span):
- span 由 **Mastra Observability 组件**产出(执行不经 Mastra 图,所以手动打点),
一开就落库、一收就补 —— 观测面不该比被观测的事晚(不走 exporter 的批量异步路)
- 打点覆盖:工作流 root → 节点(记着派给了谁)→ 活动内每次工具调用 / 模型调用 / 人卡
- **root span 挂在 `runtime.begin`**:那是「单已建好、还没进第一个节点」那一刻 ——
挂在 start 返回之后就晚了,起单同步走到第一个节点,节点 span 会先出生、另起孤树(实测)
- 观测尽力而为:写 span 失败吞掉,不掀翻业务
- 三样东西各管各的:trace(机器读时间轴)/ 任务记忆(人读留痕)/
**工作区报告(活动自持的 HTML)** —— 谁也不替代谁
路由:`POST /api/gov/testbed/run`(带指派起单)、`GET /api/gov/workflows/:id/trace`。
端到端六例(真库):指派生效 / 任务真落到被指派人手上并由他答单 / 下游节点同样生效 /
全链 span 逐层挂得上且耗时齐备 / 一条流一个 traceId / 不指派照旧轮值。五闸全过。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
249 lines
9.5 KiB
JavaScript
249 lines
9.5 KiB
JavaScript
/* eslint-disable */
|
|
/**
|
|
* 本文件由 tools/gen-depcruise-tiers.ts 从 tools/module-tiers.json 生成。
|
|
* 请勿手改 —— 改层级请改 module-tiers.json 与 编码规范.md §4,然后 pnpm gen:tiers。
|
|
*/
|
|
module.exports = [
|
|
{
|
|
"name": "tier-order-activity-registry",
|
|
"comment": "模块 activity-registry(L4)只准依赖更低层级模块;同层互需一律 port + app 装配(编码规范 §4 / §5.2)",
|
|
"severity": "error",
|
|
"from": {
|
|
"path": "^apps/api/src/modules/activity-registry/"
|
|
},
|
|
"to": {
|
|
"path": "^apps/api/src/modules/(flow-engine|loop-engine|minute|process|release|report|skill-engine|task|trigger)/"
|
|
}
|
|
},
|
|
{
|
|
"name": "tier-order-channel",
|
|
"comment": "模块 channel(L2)只准依赖更低层级模块;同层互需一律 port + app 装配(编码规范 §4 / §5.2)",
|
|
"severity": "error",
|
|
"from": {
|
|
"path": "^apps/api/src/modules/channel/"
|
|
},
|
|
"to": {
|
|
"path": "^apps/api/src/modules/(activity-registry|flow-engine|human-tool|interaction|loop-engine|memory|message|minute|process|release|report|skill-engine|task|toolbox|trace|trigger)/"
|
|
}
|
|
},
|
|
{
|
|
"name": "tier-order-event",
|
|
"comment": "模块 event(L1)只准依赖更低层级模块;同层互需一律 port + app 装配(编码规范 §4 / §5.2)",
|
|
"severity": "error",
|
|
"from": {
|
|
"path": "^apps/api/src/modules/event/"
|
|
},
|
|
"to": {
|
|
"path": "^apps/api/src/modules/(activity-registry|channel|flow-engine|human-tool|interaction|ledger|llm|loop-engine|memory|message|minute|org|process|release|report|skill-engine|task|toolbox|trace|trigger)/"
|
|
}
|
|
},
|
|
{
|
|
"name": "tier-order-flow-engine",
|
|
"comment": "模块 flow-engine(L5)只准依赖更低层级模块;同层互需一律 port + app 装配(编码规范 §4 / §5.2)",
|
|
"severity": "error",
|
|
"from": {
|
|
"path": "^apps/api/src/modules/flow-engine/"
|
|
},
|
|
"to": {
|
|
"path": "^apps/api/src/modules/(loop-engine|minute|process|report|task|trigger)/"
|
|
}
|
|
},
|
|
{
|
|
"name": "tier-order-human-tool",
|
|
"comment": "模块 human-tool(L3)只准依赖更低层级模块;同层互需一律 port + app 装配(编码规范 §4 / §5.2)",
|
|
"severity": "error",
|
|
"from": {
|
|
"path": "^apps/api/src/modules/human-tool/"
|
|
},
|
|
"to": {
|
|
"path": "^apps/api/src/modules/(activity-registry|flow-engine|interaction|loop-engine|minute|process|release|report|skill-engine|task|trigger)/"
|
|
}
|
|
},
|
|
{
|
|
"name": "tier-order-interaction",
|
|
"comment": "模块 interaction(L3)只准依赖更低层级模块;同层互需一律 port + app 装配(编码规范 §4 / §5.2)",
|
|
"severity": "error",
|
|
"from": {
|
|
"path": "^apps/api/src/modules/interaction/"
|
|
},
|
|
"to": {
|
|
"path": "^apps/api/src/modules/(activity-registry|flow-engine|human-tool|loop-engine|minute|process|release|report|skill-engine|task|trigger)/"
|
|
}
|
|
},
|
|
{
|
|
"name": "tier-order-ledger",
|
|
"comment": "模块 ledger(L1)只准依赖更低层级模块;同层互需一律 port + app 装配(编码规范 §4 / §5.2)",
|
|
"severity": "error",
|
|
"from": {
|
|
"path": "^apps/api/src/modules/ledger/"
|
|
},
|
|
"to": {
|
|
"path": "^apps/api/src/modules/(activity-registry|channel|event|flow-engine|human-tool|interaction|llm|loop-engine|memory|message|minute|org|process|release|report|skill-engine|task|toolbox|trace|trigger)/"
|
|
}
|
|
},
|
|
{
|
|
"name": "tier-order-llm",
|
|
"comment": "模块 llm(L1)只准依赖更低层级模块;同层互需一律 port + app 装配(编码规范 §4 / §5.2)",
|
|
"severity": "error",
|
|
"from": {
|
|
"path": "^apps/api/src/modules/llm/"
|
|
},
|
|
"to": {
|
|
"path": "^apps/api/src/modules/(activity-registry|channel|event|flow-engine|human-tool|interaction|ledger|loop-engine|memory|message|minute|org|process|release|report|skill-engine|task|toolbox|trace|trigger)/"
|
|
}
|
|
},
|
|
{
|
|
"name": "tier-order-loop-engine",
|
|
"comment": "模块 loop-engine(L5)只准依赖更低层级模块;同层互需一律 port + app 装配(编码规范 §4 / §5.2)",
|
|
"severity": "error",
|
|
"from": {
|
|
"path": "^apps/api/src/modules/loop-engine/"
|
|
},
|
|
"to": {
|
|
"path": "^apps/api/src/modules/(flow-engine|minute|process|report|task|trigger)/"
|
|
}
|
|
},
|
|
{
|
|
"name": "tier-order-memory",
|
|
"comment": "模块 memory(L2)只准依赖更低层级模块;同层互需一律 port + app 装配(编码规范 §4 / §5.2)",
|
|
"severity": "error",
|
|
"from": {
|
|
"path": "^apps/api/src/modules/memory/"
|
|
},
|
|
"to": {
|
|
"path": "^apps/api/src/modules/(activity-registry|channel|flow-engine|human-tool|interaction|loop-engine|message|minute|process|release|report|skill-engine|task|toolbox|trace|trigger)/"
|
|
}
|
|
},
|
|
{
|
|
"name": "tier-order-message",
|
|
"comment": "模块 message(L2)只准依赖更低层级模块;同层互需一律 port + app 装配(编码规范 §4 / §5.2)",
|
|
"severity": "error",
|
|
"from": {
|
|
"path": "^apps/api/src/modules/message/"
|
|
},
|
|
"to": {
|
|
"path": "^apps/api/src/modules/(activity-registry|channel|flow-engine|human-tool|interaction|loop-engine|memory|minute|process|release|report|skill-engine|task|toolbox|trace|trigger)/"
|
|
}
|
|
},
|
|
{
|
|
"name": "tier-order-minute",
|
|
"comment": "模块 minute(L8)只准依赖更低层级模块;同层互需一律 port + app 装配(编码规范 §4 / §5.2)",
|
|
"severity": "error",
|
|
"from": {
|
|
"path": "^apps/api/src/modules/minute/"
|
|
},
|
|
"to": {
|
|
"path": "^apps/api/src/modules/(report)/"
|
|
}
|
|
},
|
|
{
|
|
"name": "tier-order-org",
|
|
"comment": "模块 org(L1)只准依赖更低层级模块;同层互需一律 port + app 装配(编码规范 §4 / §5.2)",
|
|
"severity": "error",
|
|
"from": {
|
|
"path": "^apps/api/src/modules/org/"
|
|
},
|
|
"to": {
|
|
"path": "^apps/api/src/modules/(activity-registry|channel|event|flow-engine|human-tool|interaction|ledger|llm|loop-engine|memory|message|minute|process|release|report|skill-engine|task|toolbox|trace|trigger)/"
|
|
}
|
|
},
|
|
{
|
|
"name": "tier-order-process",
|
|
"comment": "模块 process(L7)只准依赖更低层级模块;同层互需一律 port + app 装配(编码规范 §4 / §5.2)",
|
|
"severity": "error",
|
|
"from": {
|
|
"path": "^apps/api/src/modules/process/"
|
|
},
|
|
"to": {
|
|
"path": "^apps/api/src/modules/(minute|report|trigger)/"
|
|
}
|
|
},
|
|
{
|
|
"name": "tier-order-release",
|
|
"comment": "模块 release(L4)只准依赖更低层级模块;同层互需一律 port + app 装配(编码规范 §4 / §5.2)",
|
|
"severity": "error",
|
|
"from": {
|
|
"path": "^apps/api/src/modules/release/"
|
|
},
|
|
"to": {
|
|
"path": "^apps/api/src/modules/(activity-registry|flow-engine|loop-engine|minute|process|report|skill-engine|task|trigger)/"
|
|
}
|
|
},
|
|
{
|
|
"name": "tier-order-report",
|
|
"comment": "模块 report(L8)只准依赖更低层级模块;同层互需一律 port + app 装配(编码规范 §4 / §5.2)",
|
|
"severity": "error",
|
|
"from": {
|
|
"path": "^apps/api/src/modules/report/"
|
|
},
|
|
"to": {
|
|
"path": "^apps/api/src/modules/(minute)/"
|
|
}
|
|
},
|
|
{
|
|
"name": "tier-order-skill-engine",
|
|
"comment": "模块 skill-engine(L4)只准依赖更低层级模块;同层互需一律 port + app 装配(编码规范 §4 / §5.2)",
|
|
"severity": "error",
|
|
"from": {
|
|
"path": "^apps/api/src/modules/skill-engine/"
|
|
},
|
|
"to": {
|
|
"path": "^apps/api/src/modules/(activity-registry|flow-engine|loop-engine|minute|process|release|report|task|trigger)/"
|
|
}
|
|
},
|
|
{
|
|
"name": "tier-order-task",
|
|
"comment": "模块 task(L6)只准依赖更低层级模块;同层互需一律 port + app 装配(编码规范 §4 / §5.2)",
|
|
"severity": "error",
|
|
"from": {
|
|
"path": "^apps/api/src/modules/task/"
|
|
},
|
|
"to": {
|
|
"path": "^apps/api/src/modules/(minute|process|report|trigger)/"
|
|
}
|
|
},
|
|
{
|
|
"name": "tier-order-toolbox",
|
|
"comment": "模块 toolbox(L2)只准依赖更低层级模块;同层互需一律 port + app 装配(编码规范 §4 / §5.2)",
|
|
"severity": "error",
|
|
"from": {
|
|
"path": "^apps/api/src/modules/toolbox/"
|
|
},
|
|
"to": {
|
|
"path": "^apps/api/src/modules/(activity-registry|channel|flow-engine|human-tool|interaction|loop-engine|memory|message|minute|process|release|report|skill-engine|task|trace|trigger)/"
|
|
}
|
|
},
|
|
{
|
|
"name": "tier-order-trace",
|
|
"comment": "模块 trace(L2)只准依赖更低层级模块;同层互需一律 port + app 装配(编码规范 §4 / §5.2)",
|
|
"severity": "error",
|
|
"from": {
|
|
"path": "^apps/api/src/modules/trace/"
|
|
},
|
|
"to": {
|
|
"path": "^apps/api/src/modules/(activity-registry|channel|flow-engine|human-tool|interaction|loop-engine|memory|message|minute|process|release|report|skill-engine|task|toolbox|trigger)/"
|
|
}
|
|
},
|
|
{
|
|
"name": "tier-order-trigger",
|
|
"comment": "模块 trigger(L7)只准依赖更低层级模块;同层互需一律 port + app 装配(编码规范 §4 / §5.2)",
|
|
"severity": "error",
|
|
"from": {
|
|
"path": "^apps/api/src/modules/trigger/"
|
|
},
|
|
"to": {
|
|
"path": "^apps/api/src/modules/(minute|process|report)/"
|
|
}
|
|
},
|
|
{
|
|
"name": "module-registered-in-tiers",
|
|
"comment": "modules/ 下的每个模块必须登记在 tools/module-tiers.json(编码规范 §16)",
|
|
"severity": "error",
|
|
"from": {},
|
|
"to": {
|
|
"path": "^apps/api/src/modules/([^/]+)/",
|
|
"pathNot": "^apps/api/src/modules/(activity-registry|channel|event|flow-engine|human-tool|interaction|ledger|llm|loop-engine|memory|message|minute|org|process|release|report|skill-engine|task|toolbox|trace|trigger)/"
|
|
}
|
|
}
|
|
];
|