Files
my-pi/pi-hermes-memory/UPSTREAM.md
T
云服务部-叶林立 73f3117a7e feat(pi-hermes-memory): 接入持久记忆扩展并移除 Hippo
用仓库内 pi-hermes-memory 替换 hippo-memory-pi,清理 Hippo 在组合包中的
全部注入点。

移除 Hippo:
- 删除 hippo-memory-pi/ 与 config/hippo-memory-version。
- extensions/plugin-init.ts 只保留 CodeGraph 初始化目标与预检。
- install.sh / update.sh / uninstall.sh 移除 Hippo CLI 的安装、升级、卸载
  与版本校验逻辑;uninstall.sh 同时删除仅服务于该提示的死代码 ask_yes_no。
- 删除 tests/hippo-extension.test.ts 与 tests/hippo-scripts.test.ts。
- tests/extension-load.test.ts 反转“不得加载 Hermes”的断言为必须加载,
  并断言其排在 pi-compaction 之前。

接入 pi-hermes-memory:
- package.json 增加 file:./pi-hermes-memory 依赖、files 条目与加载入口;
  加载顺序位于 pi-compaction 之前,否则 flushOnCompact 会被 pi-compaction
  的 { cancel: true } 静默跳过。
- 六个记忆工具在 Tool Search 中常驻:memory_search 与 session_search 连同
  context_tree_query 归入 memory-recall,memory_add / memory_replace /
  memory_remove / skill_manage 归入 memory-management。常驻是必需的——注入
  的 memory policy 会在普通工作中指示模型调用它们,schema 不可见会让模型
  静默放弃而不是去 tool_search,同时常驻也保持请求前缀缓存稳定。
- bundleDefaultsVersion 由 2 升到 3;migrate-tool-search-settings.mjs 新增
  上一版快照到当前版本的迁移路径,仍只迁移完整匹配的默认快照并保留自定义
  配置。
- config/pi-permission-policy.jsonc 为六个工具设置 allow:它们只写扩展自己的
  agent 目录数据、不触碰工作区,且 memory_search 每轮都可能被调用,落入
  默认 ask 会产生每轮 AutoReview 往返。

依赖:
- pi-hermes-memory 的 devDependencies 由上游 ^0.80.2 等范围改为与根包一致的
  精确版本。上游范围与根包 0.84.2 不兼容,会让 npm 在本目录嵌套安装第二套
  Pi runtime(实测 229 MB),违反“不得在组合包内再安装一套 Pi runtime”的
  纪律。
- 根 allowScripts 保持只有 better-sqlite3@12.11.1。hermes 的
  better-sqlite3@13 运行时 dlopen 的是包内 N-API 预编译二进制
  prebuilds/<platform>.node,npm 因 binding.gyp 推断出的 node-gyp rebuild
  无需执行;实测删除 build/ 目录后仍正常工作。

文档:AGENTS.md 与 README.md 改写记忆章节,新增 pi-hermes-memory 开发约定,
替换文末的 Hippo 项目记忆块。

验证:根 12 个测试文件、pi-tool-search 的 typecheck/test/build、
pi-permission-system 的 typecheck/2569 测试、pi-hermes-memory 自带的 59 个
测试文件全部通过;隔离 Pi 环境联合加载无错误并生成 bundleDefaultsVersion 3;
npm install 幂等;迁移 helper 对 v2 快照迁移、对自定义配置保留。
2026-10-14 00:56:41 -07:00

44 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 上游来源
- 官方仓库:<https://github.com/chandra447/pi-hermes-memory>
- 导入发布 tag:`v0.9.10`
- 导入 commit:`df624056a2e8c68bc89ba0a81e1c120856ec9665`(`chore: bump version to 0.9.10 (#277)`,2026-10-02)
- 初始本地导入:2026-10-13
- 接入组合包:2026-10-14
- 许可证:MIT;上游 `LICENSE` 文件原样保留。
快照取自官方 Git 仓库中 `v0.9.10` tag 指向的 commit。导入时上游 `main` 已领先该 tag(`24fcd8ad26fc27badb8d7dbaf8034645de07b893`,2026-10-11);选择 tag 是为了让导入状态对应一个已发布、可复现的版本。不保留嵌套 `.git`、上游 `.github` 工作流、依赖目录、覆盖率与构建产物。
## 本地维护
本目录由 `my-pi` 组合包直接维护,不是 submodule。根包通过 `file:./pi-hermes-memory` 依赖并直接加载 `pi-hermes-memory/src/index.ts`,不得同时安装或加载 npm 预编译入口。
### 加载顺序
**该扩展必须注册在 `pi-compaction` 之前。** `ExtensionRunner.emit()` 在遇到第一个返回 `{ cancel: true }` 的 `session_before_compact` handler 时立即返回,而 `pi-compaction/index.ts` 在判定无需压缩时正是这样返回。注册在它之后的 handler 在这些轮次会被跳过,从而静默禁用该扩展的 `flushOnCompact`。
### 依赖
- `better-sqlite3@^13.0.3`:13.x 运行时实际 `dlopen` 的是包内 N-API 预编译二进制 `prebuilds/<platform>.node`,**不依赖 node-gyp 编译产物**。npm 会因该包存在 `binding.gyp` 而推断出隐式 `node-gyp rebuild`,但该步骤既无必要也不得批准。npm 会把它嵌套安装到本目录的 `node_modules/`,与 Context Mode 使用的根 `better-sqlite3@12.11.1` 并存;因此根 `allowScripts` 无需新增条目,也不得删除既有的 `better-sqlite3@12.11.1` 放行。
- `strip-ansi@7.2.0`:解析到根 `node_modules`。
### 本地改动
- `devDependencies` 中的 `@earendil-works/pi-ai`、`@earendil-works/pi-coding-agent`、`@earendil-works/pi-tui`、`typebox`、`tsx`、`typescript`、`@types/better-sqlite3` 已从上游的 `^0.80.2` 等范围改为与根包一致的精确版本。上游的宽松范围与根包的 `0.84.2` 不兼容,会让 npm 在本目录嵌套安装第二套 Pi runtime(实测 229 MB),违反组合包"不得再安装一套 Pi runtime"的纪律;`pi-notify/package.json` 是同样的先例。运行时依赖(`better-sqlite3`、`strip-ansi`)与 `peerDependencies` 保持上游原样。
### 工具与常驻
该扩展注册 `memory_add`、`memory_replace`、`memory_remove`、`memory_search`、`session_search`、`skill_manage`,以及 `/memory-*` 命令。六个工具全部通过 `pi-tool-search` 的 `alwaysEnabled` 常驻,并在 `pi-permission-system` 策略中默认 `allow`。
注意 `skill_manage` 由本扩展提供,不是 Pi 宿主能力:Pi 只负责发现并加载 skill 目录(`~/.pi/agent/skills/` 加扩展通过 `resources_discover` 注册的目录),本身没有创建 skill 的工具。因此本扩展同时承担 skill 的**写入**与**目录注册**两件事;不加载它,`projects-memory/<项目>/skills/` 下的既有 skill 也不会被 Pi 发现。
### 用户数据
- 全局记忆与 skill:`~/.pi/agent/pi-hermes-memory/`
- 项目记忆与 skill:`~/.pi/agent/projects-memory/<项目>/`
- 配置:`~/.pi/agent/hermes-memory-config.json`(可选,缺省时使用内置默认值)
这些路径是用户数据,不属于组合包,也不应提交或自动清理。
同步上游时,请从明确 tag/commit 移植改动,并与本地改动对照审查,不得整体覆盖本目录。