Files
JX-BPOS/apps/api/src/modules/interaction/CONTRACT.md
T
JCAI Main AgentandClaude Opus 5 2850e6d4ef 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
2026-07-27 01:36:05 +08:00

1.8 KiB

module: interaction

职责: 交互协议:对话流单入口、视图区推送与净化门、控制权按态转交、SSE 会话与失效广播 不负责: 卡的内容与回传校验(见 human-tool)、任务记忆的权威存放(见 memory)、 前端渲染(见 apps/web);视图 HTML 的容器渲染由 @ui 的 ViewContainer 统一实现

公开出口: index.ts

  • 类型:InteractionService PushEnvelope InteractionPhase ControlHolder TemplateViolation
  • 错误:TemplateRejectedError
  • 端口类型:InteractionStore HumanEventPublisher MemoryRecorder Audience Clock IdGenerator
  • 用例工厂:createInteractionService(deps): InteractionService
  • 纯函数:outputControl inputControl handoverHappens checkTemplate templateIsSafe
  • adapter:createInteractionStore;Drizzle 表:chatMessageTable taskViewTable

层级: L3(编码规范 §4) 依赖: @contracts;@shared/db;port:HumanEventPublisher(app 注入 event)、 MemoryRecorder(app 注入 memory)、Audience(app 注入 org) 被依赖: release, loop-engine, flow-engine, task, app(SSE 路由)

不变量(OS 4.1 / 09,AM 07):

  • 输入单入口:inputControl() 恒为 system —— 输入侧不参与转交; 视图区不得产生回环输入,浏览性交互由前端容器本地处理
  • 控制权按态转交:活动在跑(active / awaiting-*)归活动,其余归系统; 转交随引擎事件自动发生,活动不感知交接
  • 视图区无脚本执行权:含 <script> / on* 事件处理器 / 外部资源的模版一律 TemplateRejectedError
  • 前端零过程状态:对话流与视图都是服务端投影,刷新即重建;SSE 只推失效与内容,不推状态机
  • 时间线即任务记忆的可读投影:自由输入同时写 memory 与抛人事件,无静默通道