mirror of
https://bitbucket.org/siakitem/my-pi.git
synced 2026-10-26 10:45:22 +00:00
根 AGENTS.md 从约 78KB 压缩到约 10KB,避免作为常驻规则加载时被截断: 只保留仓库定位、扩展清单、跨扩展硬规则与通用验证命令。各扩展的维护 约定与验证命令移入对应目录的 AGENTS.md(新增 extensions/AGENTS.md 承载 系统提示词与根目录 TS/LSP 约定),上游来源记录统一放进各目录的中文 UPSTREAM.md,并补齐 pi-permission-system 与 pi-rtk-optimizer 的来源记录。 Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
8.4 KiB
8.4 KiB
my-pi 维护约定(优先于下文上游约定)
- 扩展入口是
pi-hermes-memory/src/index.ts,来源记录是UPSTREAM.md;只从官方chandra447/pi-hermes-memory的明确 tag/commit 移植并保留官方 README、LICENSE 和版权。 - 根包必须通过
file:./pi-hermes-memory提供依赖并直接加载仓库源码;不得同时安装或加载 npm 预编译入口,也不得保留第二个记忆扩展(hippo-memory-pi已移除)。 package.json的pi.extensions必须把./pi-hermes-memory/src/index.ts排在./pi-compaction/index.ts之前:ExtensionRunner.emit()在第一个返回{ cancel: true }的session_before_compacthandler 处立即停止,而pi-compaction在判定无需压缩时正是这样返回,注册在其后的 handler 会被跳过从而静默禁用flushOnCompact;根tests/extension-load.test.ts必须断言该顺序。- 记忆默认
policy-only模式:只注入<memory-policy>指令而不注入记忆正文,不改变 system prompt 前缀、对 DeepSeek 前缀缓存友好;模型需要历史上下文时主动调用memory_search/session_search,写入用memory_add/memory_replace/memory_remove,过程记忆用skill_manage。 - 六个记忆工具与
context_tree_query必须在pi-tool-search/extensions/config.ts的BUNDLE_TOOL_SEARCH_DEFAULTS.alwaysEnabled中常驻(不放入动态组——注入的 policy 指示模型在普通工作中调用记忆工具,恢复被投影的工具证据也不能依赖tool_search激活,常驻同时保持请求前缀稳定),并由pi-tool-search/extensions/bundle-groups.ts的memory-recall/memory-management分组提供目录元数据(context_tree_query留在memory-recall)。新增、删除或重命名这些工具时必须同步bundle-groups.ts、BUNDLE_TOOL_SEARCH_DEFAULTS、config/tool-search.json(二者必须完全一致)、Tool Search 测试、权限策略与pi-tool-search的 README / CHANGELOG。它们只写扩展自己的 agent 目录数据或只读本地索引,不触碰工作区,因此在权限策略中默认allow,避免每轮 AutoReview 往返。 - 依赖必须保持
better-sqlite3@^13.0.3:13.x 运行时使用包内 N-API 预编译二进制prebuilds/<platform>.node,不依赖 node-gyp 编译产物,必须能由 npm 嵌套安装并与根better-sqlite3@12.11.1并存。不得把它降级回 12.x(Node 24 下会在进程退出时 SIGABRT),也不得让根包提升为单一版本;npm 因binding.gyp推断出的node-gyp rebuild不得批准,根allowScripts不新增条目。 devDependencies中的@earendil-works/*必须与根包当前版本精确一致。若写成^0.80.2这类与根不兼容的范围,npm 会在本目录嵌套安装第二套 Pi runtime,违反"不得在组合包内再安装一套 Pi runtime"的纪律;typebox、tsx、typescript、@types/better-sqlite3同理,必须钉到根已有版本。- 全局记忆、项目记忆与 skill 位于
~/.pi/agent/pi-hermes-memory/与~/.pi/agent/projects-memory/,属于用户数据,安装、升级与卸载脚本不得创建、迁移或删除;扩展配置位于已安装组合包的config/pi-hermes-memory.json(其中路径类默认值由代码运行时计算),旧~/.pi/agent/hermes-memory-config.json被忽略。 - 子会话(pi-subagents child)只读:
src/subagent-mode.ts用与 pi-subagents 相同的<active_agent name="..."/>契约检测——权威判定在before_agent_start的systemPromptOptions.customPrompt(绝不检测渲染后提示词,主会话文档里也可能含该字面量),session_start仅以"渲染提示词以该 tag 开头"作提前预判以跳过 session_start 写入;按sessionManager逐会话标记(同一进程内父子会话并发,不能用全局开关)。子会话中memory_add/memory_replace/memory_remove/skill_manage返回固定错误且零写入,后台 review、correction detection、compact/shutdown flush、live/shutdown session 索引与初始化迁移/同步全部跳过;memory_search/session_search保持只读可用。 skill_manage是本扩展提供的能力,不是 Pi 宿主能力:Pi 只发现并加载 skill 目录(~/.pi/agent/skills/加扩展通过resources_discover注册的目录),没有创建 skill 的工具。该扩展同时承担 skill 写入与目录注册;不加载它,projects-memory/<项目>/skills/下的既有 skill 也不会被 Pi 发现。- 修改工具注册、
before_agent_start注入策略、resources_discover目录注册、SQLite 迁移或 consolidation 后,必须同步包内 README/CHANGELOG/docs,并运行根扩展联合加载与 Tool Search 测试。
验证
- 在本目录内运行包内测试与类型检查。记忆扩展变化必须额外验证:在隔离临时 Pi agent 目录中可加载且注册 6 个工具、
pi.extensions中排在pi-compaction之前、Tool Search 目录把六个工具归入memory-recall/memory-management且全部常驻、权限策略默认allow、better-sqlite3@13嵌套安装与根12.11.1并存。不得在测试中连接真实数据库或修改真实~/.pi/agent/记忆数据。
Pi Hermes Memory Extension
Project Overview
This is a Pi coding agent extension that brings Hermes-style persistent memory and a learning loop to any Pi user. After pi install, users get persistent memory across sessions, a background learning loop, and session-end flush.
v0.1 is complete (119 tests, v0.1.0 tagged). Current work is v0.2: Skills + Smart Curation — see docs/0.2/TASKS.md.
Architecture
- Language: TypeScript (loaded via jiti, no compilation needed at runtime)
- Runtime: Pi extension API (
@earendil-works/pi-coding-agent) - Storage: Two markdown files (
MEMORY.md,USER.md) in~/.pi/agent/memory/ - Entry point:
src/index.ts— registers tools, event handlers, and commands
Key Files
| File | Purpose |
|---|---|
src/index.ts |
Extension entry point — wires all components together |
src/types.ts |
Shared TypeScript interfaces + getMessageText() helper |
src/constants.ts |
Prompts, defaults, delimiter |
src/store/memory-store.ts |
Core MemoryStore class — CRUD, persistence, frozen snapshot |
src/store/content-scanner.ts |
scanContent() — injection/exfiltration detection |
src/tools/memory-tool.ts |
registerMemoryTool() — LLM tool definition |
src/handlers/background-review.ts |
setupBackgroundReview() — learning loop via pi.exec |
src/handlers/session-flush.ts |
setupSessionFlush() — pre-compaction/shutdown flush |
src/handlers/insights.ts |
registerInsightsCommand() — /memory-insights command |
PLAN.md |
Full v0.1 implementation plan with Hermes source file reference map |
docs/ROADMAP.md |
Full roadmap with Hermes competitive analysis + gap analysis |
docs/0.2/TASKS.md |
v0.2 task breakdown — Skills + Smart Curation |
Design Decisions
- Frozen snapshot — Memory is injected into system prompt once at session start, never mutated mid-session (preserves Pi's prompt caching)
- Atomic writes — Temp file +
fs.rename()for crash safety pi.exec()for background review — Stays within Pi's intended extension API§delimiter — Same as Hermes for consistency- No SQLite — Pi has its own
SessionManager, we read from it directly
Hermes Source Reference
The implementation is ported from the Hermes agent harness. See PLAN.md → "Hermes Source File Reference Map" for exact files and line ranges to read.
Roadmap & Task Tracking
- Roadmap:
docs/ROADMAP.md— full roadmap with Hermes competitive analysis, gap analysis, and phased plan (v0.1 → v0.5 → v1.0) - v0.1 tasks (complete):
docs/0.1/TASKS.md - v0.2 tasks (current):
docs/0.2/TASKS.md— Skills, auto-consolidation, correction detection, tool-call-aware nudge
Workflow:
- Pick a task from
docs/0.2/TASKS.md - Mark it
[~](in progress) - Implement it
- Mark it
[x](done) with the commit hash - Move to the next task
Before starting any work, read docs/0.2/TASKS.md to see what's next.
Development
# Type check
npm run check
# Test locally
pi -e ./src/index.ts
Installation (for users)
pi install npm:pi-hermes-memory
# or from git
pi install git:github.com/chandra447/pi-hermes-memory