npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@myka2003/pi-dpi

v0.8.52

Published

dπ — 拆解 π:pi 的解耦 agent 仓库引擎

Readme

pi-dpi — dπ:拆解 π

pi-dpi

English: README.md | 中文: 本文件

dπ = 拆解 π = 解耦分发。 pi-dpi 是 pi coding agent 的一个扩展插件(纯引擎,不含任何 agent 内容):它把「agent 世界」从 pi 包中拆出来——人格、技能、提示词、会话存档 全部放进一个独立的内容仓库(你自己的 git 仓库),pi-dpi 只负责绑定、加载与同步。 引擎与内容解耦:引擎升级不动内容,内容迭代不动引擎,同一份内容仓库可以在多台机器、 多个团队成员之间分发。

安装

推荐——从 npm 安装(版本化发布、安装有缓存):

pi install npm:@myka2003/pi-dpi

备选——GitHub 最新版(无版本号,始终最新):

pi install git:github.com/oc101363-creator/pi-dpi

使用:/dpi-agent-login

安装后第一次使用,在 pi 中执行:

/dpi-agent-login

完整流程:

  1. 仓库地址:直接 /dpi-agent-login <地址> 或交互输入。地址格式自动决定远端类型 (见下方「远端类型矩阵」):GitHub 写法(user/repo、github.com/user/repo、 https://…)归一化为 https://github.com/user/repo.git;git@…/ssh://… 走 SSH、https://<自托管>/… 走通用 HTTPS、本地路径/file:// 走本地协议, 地址均按原样使用。
  2. 代理选择(仅 GitHub / 通用 HTTPS):不需要代理 / 使用 127.0.0.1:7890 / 自定义输入。
  3. 认证:GitHub 走设备授权——终端显示 user_code 与验证地址,浏览器打开 https://github.com/login/device 输入代码完成授权(OAuth device flow); 通用 HTTPS 改为交互输入「用户名 + 访问令牌/密码」;SSH 与本地仓库零凭证。
  4. 克隆内容仓库:认证通过后自动 git clone 到 ~/.pi/agent/dpi/repo(token 不落 remote URL,走一次性 credential helper)。 克隆后会校验 agents/*/SYSTEM.md 存在——不是 dpi 内容仓库会响亮报错且不写配置。
  5. 声明式注册:把内容仓库的本地路径写进 settings.json 的 packages—— 内容仓库本身是标准 pi 包(package.json 里 pi 清单声明 prompts/themes), 提示词与主题由 pi 原生加载。
  6. 技能按声明发现:引擎在 resources_discover 时读取当前 agent 的 agent.json,只把声明的技能(仓库根 skills/ 注册表条目)返回给 pi—— 未声明的技能不进会话,这是 dpi 的技能隔离机制。
  7. 立即生效:自动 /reload,agent 卡片、技能、提示词即刻可用。

远端类型矩阵

/dpi-agent-login 根据地址格式自动识别远端类型,无需手动选择:

| 地址写法 | 类型 | 认证方式 | | --- | --- | --- | | user/repo、github.com/user/repo、https://github.com/user/repo(.git) | GitHub | OAuth device flow,token 单行存本机 | | git@host:path、user@host:path、ssh://…(含 [email protected]:…) | SSH 远端 | 零凭证,用本机 ssh key(绑定前先 ls-remote 探测) | | https://<非 GitHub 托管>/…、http://… | 通用 HTTPS | 交互输入用户名 + 访问令牌/密码,token 文件存两行(用户名 + 令牌) | | /abs/path、~/path、file://… | 本地仓库 | 零认证,走 git 本地协议(~ 自动展开) |

配置示例:

/dpi-agent-login [email protected]:user/agents.git        # SSH 远端
/dpi-agent-login https://gitea.example.com/user/agents.git  # 通用 HTTPS
/dpi-agent-login ~/srv/agents.git                           # 本地仓库

SSH 与本地仓库无需令牌;通用 HTTPS 适用于 Gitea / Forgejo / GitLab / Codeberg 等任意 git 托管。自动同步对四类远端一视同仁:SSH/本地不注入 credential helper、 不走 HTTP 代理;GitHub/通用 HTTPS 维持 token + 按需代理。

其它命令:

| 命令 | 作用 | | --- | --- | | /dpi-agent-login [仓库地址] | 绑定/重新绑定内容仓库 | | /dpi-agent-logout | 清除本机 token(本地仓库与配置保留) | | /dpi-agent [名字] | 查看/切换当前 agent | | /dpi-skills | 管理当前 agent 的技能组合:勾选/取消、删除注册表技能 | | /dpi-extensions | 管理当前 agent 的扩展组合:勾选/取消、删除注册表扩展 | | /dpi-sync | 手动同步内容仓库(pull --rebase → 清扫提交 → push) | | /dpi-record on\|off\|status | 会话存档开关 | | /dpi-save [名字] | 立即保存当前会话;带名字即命名保存点 | | /dpi-sessions | 浏览仓库存档会话(vim 导航:j/k、gg/G、/过滤),一键恢复/重命名/删除 | | /dpi-session-repair | 手动清理当前会话文件中的坏消息(重进会话生效) | | /dpi-save-status | 查看保存状态:最近归档/推送、未推送提交数 |

自动同步:3 秒远端监听 fetch GitHub 并自动拉取声明变更;15 分钟定时归档把当前会话 写入 git 对象库(另有手动 /dpi-save)并带认证推送。恢复时对会话结构做通用健壮化 (compaction 导致的孤儿/连续 tool 结果、尾部元数据),任何归档会话都能正确加载—— 不需要逐个修会话。保存状态在底栏(sync: ✓)与 /dpi-save-status。

会话自愈:网关 400/429 失败或用户中断会把空 assistant 消息写进会话文件,此后每轮 请求都被协议拒绝、会话"死亡"。引擎在退出时(归档前)与切换会话时自动清理坏消息, 归档进仓库的永远是干净版;日常无感,中招时也可 /dpi-session-repair 手动修复。

内容仓库结构约定

内容仓库就是一个普通 git 仓库(务必保持 Private——会话存档都在里面):

<内容仓库>/
├── agents/                 # 多 agent 平行世界,一个目录一个完整人格
│   └── <name>/
│       ├── SYSTEM.md       # 人格定义(每轮对话注入系统提示词)
│       ├── agent.json      # 能力组合声明:{ "description": "…", "skills": […], "extensions": […] }
│       └── prompts/        # 该 agent 专属提示词模板(xxx.md → /xxx)
├── skills/                 # 技能注册表:平铺的技能库(<skill>/SKILL.md),
│                           #   不直接属于任何 agent,由 agent.json 按名组合
├── extensions/             # 扩展注册表:平铺的扩展库(<name>.ts),
│                           #   不直接属于任何 agent,由 agent.json 按名组合
├── machines/               # 机器层配置:<hostname>.json 覆写白名单字段
│                           #   (proxy、recordSessions),随仓库同步,新机器自动获配
├── sessions/<agent>/       # 会话存档按 agent 归档(_legacy/ 为旧平铺档迁移区)
├── docs/plans|specs/       # 工作流文档:大改先 spec(设计)后 plan(执行计划)
└── themes/                 # 可选,pi 主题

新增 agent = 新增 agents/<name>/{SYSTEM.md,agent.json} + 在 skills/ 注册表挑技能 填进 skills 数组,无需改任何代码。新增技能 = 在 skills/ 下加一个目录,然后由需要的 agent 在各自的 agent.json 里声明。日常增删技能、调整组合不需要手编文件,用 /dpi-skills 交互完成(勾选/取消即写回 agent.json,也可删除注册表技能)。扩展同理:新增扩展 = 在 extensions/ 下加一个 .ts 文件,由需要的 agent 在 agent.json 的 extensions 数组里声明,日常管理用 /dpi-extensions 交互完成。

per-agent 扩展

内容仓库根 extensions/ 是平铺的扩展注册表(一个 .ts 文件一个扩展),不直接属于 任何 agent。机制一句话:切换 agent 时引擎把内容包 settings 条目的 extensions 过滤器改写为当前 agent 声明的白名单,过滤发生在 import 之前 = 真隔离(未声明的 扩展文件根本不会被 jiti 执行);代价是切换即全量 reload。启动时引擎还会自动对齐 一次过滤器(启动自愈),agent.json 被外部编辑或 /dpi-sync 拉取后,下一次重载即收敛。

superpowers 支持

superpowers 自 v0.5.0 起作为内容仓库 extensions/ 注册表中的普通扩展,经 agent.json 声明 + settings 白名单按 agent 加载(引擎内置注入器已退役)。

机器层配置(machines/)

引擎加载配置时,会在全局 config.json 之上叠加内容仓库的 machines/<hostname>.json(hostname 归一化为小写 [a-z0-9-],如 MacBook-Air → macbook-air)。白名单字段:proxy、recordSessions——机器相关的 设置随仓库同步,换新机器时写一次机器文件即自动获配,无需逐台重设。

配置与数据位置

全部存于 ~/.pi/agent/dpi/(目录 0700):

  • config.json:repoUrl / remoteKind / repoPath / branch / proxy / currentAgent / recordSessions
  • token:访问令牌(0600;GitHub 为单行,通用 HTTPS 为「用户名 + 令牌」两行,SSH/本地仓库无此文件)
  • repo/:内容仓库本地克隆

若设置了 PI_CODING_AGENT_DIR 环境变量,则以 $PI_CODING_AGENT_DIR/dpi/ 替代。

⚠️ 隐私提醒

  • 内容仓库必须保持 Private。会话存档都在仓库里,仓库公开等于公开你的 聊天记录。
  • token 仅以 0600 权限存于本机 ~/.pi/agent/dpi/token,绝不写进 remote URL 或任何配置。