memini + Pi
π 一个开源的编码代理是一流的吗
扩展API. Pi没有内置MCP
因此,memini提供了一个本地Pi包 plugin/. 它增加了
自动会话内存,本机 memory_* 工具、生命周期持久性,以及
没有MCP适配器的紧凑转录呈现。
安装
包发布为
@eleboucher/pi-memini
并且要求Pi 0.0.8或更新(Node.js 22.19或更新):
pi install npm:@eleboucher/pi-memini
使用 -l 用于项目本地安装。Pi将全局包记录在
~/.pi/agent/settings.json 和项目包 .pi/settings.json.
等效手动配置为:
{
"packages": ["npm:@eleboucher/pi-memini"]
}
项目本地包仅在项目受信任后加载。运行 pi config
启用或禁用已安装的资源。
对于开发,一次运行加载构建的扩展:
npm --prefix integrations/pi/plugin run build
pi -e ./integrations/pi/plugin/dist/index.js
Pi还可以自动发现放置的源扩展
~/.pi/agent/extensions/ 或者 .pi/extensions/;这些地点可以是
hot-reloaded与 /reload.
扩展的作用是什么
自动记忆和生命周期
session_start/session_tree重建分支局部抑制和 捕获状态,然后在活动模型时注入一个有界分层简报 上下文还没有包含它。启动、恢复、fork和重新加载则不行 复制一份完整的简报。before_agent_start搜索提交的提示并注入有用的内容 匹配为不受信任的只读上下文。空白文本、命令形提示、 少于12个字符的引导文本会被跳过;搜索查询包括 上限为2000个字符。agent_settled仅捕获最终成功的用户/助手回合 重试后,溢出压缩和排队延续已经解决。 同一辅助条目的重复已确定事件是幂等的。session_before_compact/session_compact可选检查点边界 状态更改活动,清除上下文耦合抑制,并排队刷新 在不开始额外回合的情况下进行简报。session_shutdown可选地记录有界活动摘要 关闭/开关/叉事件。因为会话仍在继续,所以跳过重新加载。- Branch-aware dedupe 仅在匹配之后才在Pi自定义项中保留
召回/工具结果消息已完成。自动简报和即时召回;
加上明确的回忆/简报/列表/获取/历史/回答结果,共享一个冷却时间
状态;成功的更新、删除和ID更新会使更正后的内容立即生效,
即使同级工具同时完成。
集
MEMINI_INJECT_DEDUPE=0禁用排除、过滤和记录 在一起。
来自的服务器授权名称空间 POST /v1/handshake 范围自动
明确的要求 X-Memini-Namespace. 自动生命周期工作
权限不可用时无操作;显式工具会重试一次握手
然后返回一个可操作的错误,而不是请求本地猜测的分区。
兼容性重试掉落 exclude_ids 只有在服务器明确拒绝之后
该字段与HTTP 400;超时、节流和不相关的故障不会禁用它。
本机工具
Pi直接注册这些工具 pi.registerTool:
| 工具 | 目的 |
|---|---|
memory_briefing | 阅读固定的上下文、持久事实、过程、最近的工作和嵌套项目汇总。 |
memory_recall | 混合语义/关键字召回与过滤器,时间旅行,范围,排除,和来源。 |
memory_list | 浏览和页面最新的第一记忆没有搜索查询。 |
memory_remember | 存储或撤销原子内存,包括有效性、置信度、元数据和可见性。 |
memory_get | 获取一个完整的内存DTO。 |
memory_history | 先读取记忆的替换历史。 |
memory_update | 部分正确的内容、摘要、层次、级别、标签、元数据、重要性或置信度。 |
memory_forget | 永久删除内存。 |
memory_answer 仅在经过身份验证后才动态添加
GET /healthz?verbose=1 返回布尔字面值。
deps.llm.configured: true. 失踪,畸形,虚假,无法到达,或
未路由能力的证据使该工具未被宣传。
rest支持的回答工具有意省略了MCP reasoning_level 因为
当前的 /v1/answer REST请求不接受它。REST简报
不公开服务的截断子数,因此Pi保留每个截断子数
返回的孩子卷起但不捏造 children_note.
读取结果包括名称空间/来源证据。无论是继承的还是个人的
回忆,复制回来 namespace 逐字输入get/history/update/forget;
不要发明命名空间路径。写选择语义 visibility 代替。
紧凑的呈现
所有显式工具都在发送的工具结果中保留完整的结构化JSON
到模型并存储在会话中。他们的TUI渲染器显示了简洁
折叠时的单行,使用Pi的工具扩展键(Ctrl+O 由
默认),一个有界的人类可读视图,最多有8个内存/源项
再加上特定类型的答案、确认、合并和子rollup详细信息。
自动简报和召回消息同样保持持久模型 上下文,而已注册的消息呈现器将正常的文本保存为一个 线。呈现永远不会截断或重写面向模型的有效负载。
配置
扩展有两个配置层:
- 交通和身份 来自Pi过程的环境。
- 行为设置 解决, 环境覆盖→握手服务器 设置→内置默认. 这允许一个服务器设置团队默认值,而一个 本地环境可以覆盖特定的旋钮。
交通与身份环境
| 环境变量 | 默认的 | 效果 |
|---|---|---|
MEMINI_BASE_URL | http://localhost:8080 | memini REST基础URL。 |
MEMINI_API_KEY | 设置 | 不记名令牌。 |
MEMINI_REQUIRE_HTTPS | 从 | 设置为 1 在非环回明文HTTP上拒绝承载令牌。 |
MEMINI_HOME | 设置 | 个人名称空间发送为 X-Memini-Home;未设置意味着没有个人阅读腿。 |
MEMINI_NAMESPACE | 设置 | 声明的名称空间事实和脱机的机器本地回退;服务器引脚仍然获胜。 |
MEMINI_NAMESPACE_PREFIX | 设置 | 前缀仅应用于派生名称空间、联机和降级回退。 |
MEMINI_AGENT | 设置 | 可选的每个代理命名空间后缀事实。 |
MEMINI_TIMEOUT_MS | 30000 | 每个请求超时(以毫秒为单位)。 |
MEMINI_FALLBACK | 在 | 0/false 使自动生命周期传输故障浮出水面,而不是降级到警告/无操作。 |
初始握手发送git远程、存储库根、cwd basename和 认同上述事实。服务器解析pin和其他服务器端策略 返回权威命名空间。结果要记住十分钟; 设置或清除引脚会立即使其失效。如果握手是 不可达时,Pi仅为诊断而派生一个命名空间,并将其标记为降级; 自动内存流量暂停和显式工具拒绝路由直到服务器 权威得到恢复。
Pi使用的行为设置
| 环境覆盖 | 内置的默认 | 效果 |
|---|---|---|
MEMINI_RECALL | 在 | 自动提示召回。 |
MEMINI_CAPTURE | 在 | Settled-turn捕捉。 |
MEMINI_RECALL_LIMIT | 3 | 最大自动召回命中。 |
MEMINI_INJECT_RECALL_MAX_TOK | 250 | 召回注入令牌上限; 0 是无限的。 |
MEMINI_INJECT_RECALL_MIN_SCORE | 0.5 | 最低自动召回分数(综合后秩量表); 0 禁用地板。 |
MEMINI_INJECT_DEDUPE | 在 | 共享的跨表面抑制状态。 |
MEMINI_INJECT_COOLDOWN_MS | 1800000 | 重复注射时间冷却; 0 禁用此维度。 |
MEMINI_INJECT_COOLDOWN_PROMPTS | 3 | 提示冷却时间; 0 禁用此维度。两个冷却时间都在 0 对会话进行抑制。 |
MEMINI_INJECT_LABELS | 空 | 逗号/管道分隔的自动项目符号标签: tier, confidence, age. |
MEMINI_INJECT_BRIEFING_PINNED | 5 | 启动固定内存帽。 |
MEMINI_INJECT_BRIEFING_FACTS | 5 | 启动持久事实上限。 |
MEMINI_INJECT_BRIEFING_PROCEDURES | 5 | 启动过程上限。 |
MEMINI_INJECT_BRIEFING_RECENT | 3 | 启动最近内存上限。 |
MEMINI_INJECT_BRIEFING_MAX_TOK | 600 | 整个简报令牌上限; 0 是无限的。 |
MEMINI_SESSION_DIGEST | 在 | 预压缩和关闭活动检查点。 |
MEMINI_MIN_CAPTURE_CHARS | 0 | 捕获所需的最小用户文本长度。 |
MEMINI_CAPTURE_USER_MAX_CHARS | 1000 | 每回合捕获的用户文本上限; 0 是无限的。 |
MEMINI_CAPTURE_ASSISTANT_MAX_CHARS | 3000 | 每回合捕获的辅助文本上限; 0 是无限的。 |
已经注入的内存在 要么 配置 冷却时间仍然有效,只有在两次失效后才能恢复。显式读取工具 使用保守抑制,直到一个修正清除陈旧的条目。
削减命令
键入带有前导的命令 / 在Pi的编辑器中:
| 命令 | 效果 |
|---|---|
/memini:status | 显示有效的设置和来源、解析的名称空间、连接状态、读取集、编校验证和警告。 |
/memini:namespace | 显示当前服务器解析的名称空间和引脚来源。 |
/memini:namespace <namespace> | 设置此项目的服务器端名称空间引脚。 |
/memini:namespace --clear | 清除服务器端引脚并返回到自动解析。 |
命令诊断保存为仅限gui的自定义条目,并且永远不会输入 模型上下文,包括服务器授权的pin注释和读集标签。
pin由memini服务器(PUT/DELETE /v1/pins),并由
项目的git远程和/或存储库根目录。他们全程跟进这个项目
机器和节拍 MEMINI_NAMESPACE 故意。Pin写入需要
访问服务器; MEMINI_NAMESPACE 保持离线本地覆盖。
构建和验证
从包目录:
cd integrations/pi/plugin
npm ci
npm test
npm test 标准验证路径。它对源代码和测试进行类型检查
在圆周率0.0.80.6时,构建 dist/index.js,运行bundle和helper/lifecycle/tool
契约测试、打包发布构件,并将其安装到干净的
并且只使用pi提供的对等模块导入已安装的ESM。
有用的集中命令:
npm run typecheck
npm run build
npm run test:unit
npm run test:package
npm pack --dry-run
包的 prepack 钩子直接重复类型检查和构建 npm pack
或者发布不能发布陈旧的源代码。 @memini/client 被捆绑在
单个扩展文件; typebox, @earendil-works/pi-coding-agent,
@earendil-works/pi-tui 按照Pi包的要求保留主机提供的对等节点。
来自存储库根的相关交叉集成奇偶校验如下:
pnpm --filter @memini/client test
node --test plugin/scripts/_test.mjs
可选:MCP线
圆周率可以达到memini memory_* 然后通过第三方MCP扩展
连接到 http://<host>:8080/mcp 或者 memini mcp (它的)。本机包
以上是首选,因为它还提供自动召回/捕获,生命周期
状态、能力门控和紧凑呈现。