forked from ChaiHao/BPOS-MVP
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
1.8 KiB
1.8 KiB
module: interaction
职责: 交互协议:对话流单入口、视图区推送与净化门、控制权按态转交、SSE 会话与失效广播
不负责: 卡的内容与回传校验(见 human-tool)、任务记忆的权威存放(见 memory)、
前端渲染(见 apps/web);视图 HTML 的容器渲染由 @ui 的 ViewContainer 统一实现
公开出口: index.ts
- 类型:
InteractionServicePushEnvelopeInteractionPhaseControlHolderTemplateViolation - 错误:
TemplateRejectedError - 端口类型:
InteractionStoreHumanEventPublisherMemoryRecorderAudienceClockIdGenerator - 用例工厂:
createInteractionService(deps): InteractionService - 纯函数:
outputControlinputControlhandoverHappenscheckTemplatetemplateIsSafe - adapter:
createInteractionStore;Drizzle 表:chatMessageTabletaskViewTable
层级: 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与抛人事件,无静默通道