M3(完成): interaction 与 activity-registry

interaction(L3):
- 控制权按态转交:活动在跑归活动,流转/审批/终态归系统;输入侧永远归系统(单入口)
- 视图区净化门:含 <script> / on* / 外部资源的模版一律拒推 —— 容器无脚本执行权
- 对话流单入口:自由输入同写任务记忆并抛人事件;SSE 单连接 + 按目标失效广播
- 前端零过程状态:对话流与视图都是服务端投影

activity-registry(L4):
- 安装两审:静态审(签名/SDK/工具契约齐备/模型名已绑定/schema/悬空监听/模版无脚本/
  零环境能力/动态执行/验收等级不得谎报)+ 回放审(旧成不坏是硬门,旧败能成只入报告)
- 资产与包分离版本化:包只携资产初始版,不覆盖已有更高资产版;装载 = 包版本 + 生效资产版
- 进化管线状态机:候选 → 回放 → 人放行 → 生效;回退是显式治理动作

245 个测试通过,门禁五道全绿

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
This commit is contained in:
JCAI Main Agent
2026-07-27 01:36:05 +08:00
co-authored by Claude Opus 5
parent d96c6e6dff
commit 2850e6d4ef
29 changed files with 4339 additions and 4 deletions
@@ -0,0 +1,37 @@
# module: activity-registry
职责: 活动库:包清单六区的落库、安装两审(静态审 + 回放审)、包版本 × 资产版本两条序列、
两维分类、.JS 产物存取、资产版本进化管线(候选 → 回放 → 人放行 → 生效 / 回退)
不负责: .JS 的执行(见范式运行器)、工具契约与模型绑定的真身(经端口问 toolbox / llm)、
台账物化(经端口问 ledger)、模版净化的实现(经端口问 interaction)
公开出口: index.ts
- 类型:`ActivityRegistryService` `ActivityCard` `LoadEnvelope` `AssetVersion` `PackageVersion`
`ReplayCase` `ReplayVerdict` `DependencyFile` `ExternalChecks`
- 错误:`InstallRejectedError` `ActivityNotInstalledError` `ToolNotDeclaredError`
`IllegalIncrementTransitionError`
- 端口类型:`RegistryStore` `ToolContractProbe` `ModelBindingProbe` `LedgerDeclarationApplier`
`TemplateGuard` `Clock` `IdGenerator`
- 用例工厂:`createRegistryService(deps): ActivityRegistryService`
- 纯函数:`staticAudit` `auditPassed` `danglingListeners` `acceptanceLevelFindings`
`flowFindings` `loopFindings` `scanArtifact` `buildLoadEnvelope` `shouldSeedAsset`
`canTransition` `assertTransition` `judgeReplay` `mayTakeEffect`
- adapter:`createRegistryStore`
- Drizzle 表:`activityPackageTable` `activityAssetTable` `assetIncrementTable`
层级: L4(编码规范 §4)
依赖: @contracts;@shared/db;port 注入:toolbox(L2)、llm(L1)、ledger(L1)、interaction(L3)
被依赖: loop-engine, flow-engine, skill-engine, task, process, app(治理台 · 活动库管理)
不变量(OS 11.2 / 11.3,AM 11.3):
- **安装两审**:静态审有 error 即不上架;「旧成不坏」是**生效硬门**,
「旧败能成」只入重演报告、不作门槛;首装无历史即免回放审
- **悬空监听拒绝**:无时限或无关联键与内容条件的监听一律拒装(AM 4.4)
- **装不齐不上架**:工具调用契约缺一即拒;模型名未绑定四元即拒
- **活动包零环境能力**:产物含 `process.env` / `fetch(` / node 核心模块 / 动态执行即拒(ADR-004)
- **模版无脚本**:含脚本或外部资源的视图模版即拒
- **验收等级不得谎报**:标为 L1/L2 却无可机检谓词即拒
- **资产与包分离**:包只携资产初始版;`shouldSeedAsset` 保证**不覆盖已有更高资产版**,
覆盖只能是显式的 `rollbackAsset` 治理动作
- **进化必过治理**:候选 → 回放 → 人放行,状态机不许跳过回放
- **安装恒为新增、版本并存**:卸载只置 state,在途任务按其启动时版本跑完