SuperAPI AI 工具集

event-sourcing-state

编程与开发

查看项目

更新于 10-16 09:50

技能介绍

用途:当应用不断新增可变字段来记录生命周期、阶段、状态或 UI 状态时,改用事件日志推导答案。核心原则是“不要存结论,要存证据”:若某个决定取决于实际发生过什么,就保留事件并从中推导。

主要能力与规则:每个布尔标志会使可能状态翻倍,因此应删除标志。反模式是把事实镜像进状态,例如用 wasInterrupted、didAssistantFinish、didAssistantError、wasToolCallOnly 四个标志回答一个问题,再组合回布尔值。正解是保留 SessionEvent 联合类型(如 session.status、session.aborted、message.updated),用 getLatestAssistantMessage、isNaturalCompletion、shouldShowFooter 等纯函数推导。规则包括:事件不可变且带版本;优先一个有界事件缓冲而非多个镜像标志;用纯函数推导生命周期状态;在有助于复现 bug 时持久化事件流;测试针对夹具而非活动的可变运行时状态。

测试工作流:从生产或本地导出失败的事件流,保存为 jsonl 夹具;围绕推导函数写纯测试,修复推导代码并保留夹具。示例测试对 ./fixtures/aborted-session.jsonl 断言 shouldShowFooter(events) 为 false。复现物只是数据,无需 mock 运行时或定时器。持久化方面,存事件可版本化、类型安全;修复推导函数并发布新版本后,用户重新打开项目即可恢复,而存缓存状态若损坏则需脆弱的迁移代码。

适用场景:会话生命周期、工作流引擎、聊天或智能体运行时、输入/空闲/页脚决策、重试与中断逻辑。不适合:从不回读的高吞吐原始遥测、更适合闭包的微小本地状态、已是稳定真相来源别处的数据。

限制:并非所有状态都需事件溯源,次优选择是良好封装的状态,如 React useState 局部状态,或把定时器困在闭包中(createDebouncedAction)。资料未提供安装命令、平台与价格信息。