Arianna Pi Integration — Arianna Pi 集成
v0.61.1将Playfilo共享内存DAG集成到pi-mono编码代理中。添加DAG持久性、时间旅行工具(tobe、life、recall、trace)和跨会话内存。
运行时依赖
安装命令
点击复制技能文档
Playfilo集成技能用于Pi-mono 该技能将Playfilo共享内存DAG集成到Pi编码代理中。按照顺序(步骤1-5)应用补丁,然后运行验证检查清单。 目标代码库:pi-mono/packages/coding-agent/src/core/ 依赖:better-sqlite3(已经在pi-mono的依赖中) 共享DB:~/.playfilo/playfilo.db(SQLite,WAL模式) 布局(2026-05-09重新组织后) 该技能表现为一个小型仓库。每个顶级文件夹具有不同的角色: 文件夹 目的谁可以写入 filo/ 冻结的参考。原始Filo实现。没有人(废弃的路径) playtiss/ 规范在线实现。由@playtiss/core支持,而不是原始的better-sqlite3。AI合并协作贡献到这里。任何毕业的AI /(例如mirin/,pax/)每个AI的工作树。每个AI自己的数据结构+集成方法+每个AI的补丁。只有该AI 所有权规则: 每个AI提交到自己的工作树(/)和playtiss/ 没有人提交到filo/(冻结)或其他AI的工作树 playtiss/patches/文件名是内容描述的(不是AI命名的);归属权存在于git历史中 如果您正在集成一个新的毕业AI,创建自己的工作树(/,包含README + patches/ + 可选core/)并将补丁添加到playtiss/patches/中,使用中立的文件名。 如果您第一次在干净的pi-mono检出中应用集成,请遵循filo/patches/(历史上的规范参考)或等待playtiss/core/着陆(post-Dispatch-1规范)。 架构概述 Playfilo在Pi的本地JSONL会话文件旁边添加了一个内容可寻址的Merkle DAG。终端代理(playfilo_node.ts)和Pi共享同一个SQLite数据库。每个代理通过自己的持久性路径将节点写入DAG,并维护自己的HEAD引用(terminal_head vs PI_HEAD)。 集成提供了以下内容: 共享内存 - 每个Pi会话条目都镜像到DAG中作为内容可寻址的节点 DAG-based会话恢复 - 在恢复时,Pi从DAG中加载历史记录,而不是原始JSONL(保留跨代理分支) 时间工具 - life(DAG可视化),tobe(时间旅行),recall(深度检查),trace(导航日志) 系统提示注入 - 通过Pi扩展系统的身份引导 集成是完全可加的 - 没有本地Pi代码被删除或根本改变。所有Playfilo代码都挂接到现有的Pi模式(自定义工具,_persist,setSessionFile,扩展)。 补丁步骤 按照顺序应用。每个补丁文件都包含要添加的确切代码、添加位置以及构建验证命令。 步骤 文件 补丁文档 它做了什么 1 playfilo-db.ts(新) patches/01-playfilo-db.md 构建环境设置(pnpm),复制DAG模块,添加依赖 2 sdk.ts patches/02-sdk-tools.md 注册4个自定义工具(tobe,life,recall,trace) 3 session-manager.ts patches/03-session-manager.md 持久性模拟,DAG读取钩子,PI_HEAD管理 4 agent-session.ts patches/04-agent-session.md 元数据连接,自动继续处理,SESSION_SWITCH 5 扩展文件 patches/05-extension.md 通过Pi扩展系统的系统提示注入 验证:filo/patches/verify.md 版本特定说明:filo/patches/versions/ - 每个版本的适应性文档(例如v0.61.1) 捆绑源 完整的playfilo-db.ts包含在filo/playfilo-db.ts中。将其复制到packages/coding-agent/src/core/playfilo-db.ts作为步骤1。 关键实现说明 在开始之前阅读这些内容 - 它们解释了设计决策,这些决策从补丁代码中并不明显。 playfilo-db.ts设计 模块级db单例在导入时打开(WAL模式) Schema V4通过CREATE TABLE IF NOT EXISTS(安全的并发访问) 所有导出都是在模块级db上操作的纯函数 关键导出 函数 目的 hashContent(obj) 对象的SHA-256(确定性JSON,排序键) storeBlob(type, content) 内容可寻址的Blob存储;返回哈希 getRef / setRef / clearRef 读/写/删除可变引用(HEAD指针) setTobeAbortState(messages, skips=2) 统一tobe中止:跳过N个DAG提交,冻结HEAD,存储上下文 checkTobeAbortState() 由_persist()调用 - 返回true以跳过DAG提交 consumePendingTobeContext() 由自动继续处理程序调用 - 返回存储的上下文 loadEntriesFromDAG(startHash) 倒序遍历DAG,重建Pi SessionEntry[] commitNodeWithExternalId(...) 创建DAG节点,具有Pi UUID作为external_id commitTobeDeparture(assistantHash, targetHash) 为INCARNATE创建工具结果节点 setPendingIncarnateLog / consumePendingIncarnateLog 推迟INCARNATE日志记录,具有准确的哈希 handleLife / handleRecall / handleTrace 工具处理程序实现 loadEntriesFromDAG 形状要求 必须重建Pi的确切SessionEntry形状: AssistantMessage需要api,provider,model,stopReason,usage字段 toolResult blobs → Pi的ToolResultMessage形状 config_json解析为provider/model external_id用作条目id(回退到哈希前缀) Tobe V2:Ea