# Execution and Persistence ## 目标 给 memabra 补上两块真正让系统“落地”的骨头: - execution:让路由决策进入可执行动作层 - persistence:让 trajectory 和 memory record 能落到磁盘 ## 当前实现 ### execution.py 提供: - `ActionResult` - `MemoryExecutor` - `SkillExecutor` - `ToolExecutor` (原 MockToolExecutor,现已升级为可接真实后端) - `ExecutionEngine` - `ToolBackend` 协议(支持 `params` 传参) - `LocalFunctionToolAdapter` — 将工具映射到本地 Python 函数 - `SubprocessToolAdapter` — 将工具映射到 shell 命令 - `ToolRegistry` — 按 `tool_id` 注册、查找和执行工具 当前行为: - `inject_memory` 会产出 `memory_injected` 事件,并在有 memory store 时标记 `last_used_at` - `load_skill` 会产出 `skill_loaded` 事件 - `call_tool` 会通过 `ToolBackend` 协议调用真实后端,产出 `tool_called` 和 `tool_result` 事件 - `RouteDecision` 现在携带 `selected_payloads`,可以将候选参数经由 `ToolExecutor` 传递给后端 - 其他 decision_type 先走 noop 这一步的意义是: memabra 第一次有了 execution stage,而不是只有 policy stage。 并且 tool 层现在可以接入真实的本地函数或子进程后端,不再是纯 mock。 ### persistence.py 提供: - `PersistenceStore` 当前能力: - 保存 trajectory 到 `artifacts/trajectories/` - 读取 trajectory - 列出 trajectory 文件 - 保存 memory record 到 `artifacts/memories/` - 读取 memory record - 列出 memory 文件 这意味着 prototype artifacts 已经不再只是内存态漂浮物。 ### runner writeback integration runner 现在支持: - 挂 execution engine - 挂 persistence store - 挂 memory store - 执行后扩展 execution events - 可选把 trajectory 落盘 - 对 memory inject 决策进行基本 writeback / mark_used ## 当前闭环 现在的最小系统流程已经变成: 任务 -> retrieval -> router -> execution -> trajectory -> validation -> persistence -> replay 这就真正有点 agent runtime 的味儿了。 ## 当前限制 - ~~tool 执行还是 mock 的~~ 已升级为可插拔式真实后端 - skill 执行只是事件层,不是真加载技能 - writeback 逻辑还很粗糙 - persistence 目前是 JSON 文件,没有索引层 ## 下一步建议 1. ~~做真实 `ToolExecutor` / `SkillExecutor` adapter 协议~~ tool adapter 已完成 2. 做真实 `SkillExecutor` adapter(从文件系统加载 skill payload) 3. 把 persistence 接到 replay 默认数据源 4. 给 runner 增加 outcome / reward 的真实更新逻辑 5. 做 richer telemetry 和失败事件归因