@rokiy/pi-pets

A virtual pet system for pi - hatch, raise, and bond with coding companions

Packages

Package details

extension

Install @rokiy/pi-pets from npm and Pi will load the resources declared by the package manifest.

$ pi install npm:@rokiy/pi-pets
Package
@rokiy/pi-pets
Version
1.0.1
Published
May 30, 2026
Downloads
not available
Author
rokiy
License
MIT
Types
extension
Size
283.2 KB
Dependencies
2 dependencies · 0 peers
Pi manifest JSON
{
  "extensions": [
    "./dist/index.js"
  ],
  "image": "https://img.dog/file/1780125409045_image.webp"
}

Security note

Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.

README


📋 特性

pi-pets 是 pi 编码助手的一个扩展,为你的终端带来一只虚拟宠物。与纯装饰性的宠物插件不同,pi-pets 的宠物会响应你的编码行为——代码写得好就成长,错误堆积就闹脾气,还需要你定时照顾。

  • 导入制物种 — 无内置物种;从 Codex 生态导入任意宠物(pet.json + spritesheet.webp
  • 确定性孵化 — 基于种子的 PRNG(mulberry32),同一 seed + 物种永远生成同一只宠物
  • 5 级稀有度 — 普通(60%) → 稀有(25%) → 精良(10%) → 史诗(4%) → 传说(1%),外加 1% 闪光概率
  • 5 阶段成长 — 幼生体 → 成长体 → 进化体 → 完全体 → 究极体,经验值来自编码行为
  • 8 种情绪状态 — 开心、好奇、兴奋、疲惫、饥饿、沮丧、工作中、生病——由需求和编码事件驱动
  • 3 轴需求系统 — 饥饿、精力、快乐随时间衰减;喂食和抚摸让你的宠物保持健康
  • 事件驱动反应 — 完成对话轮次、工具调用、测试通过、修复错误均可获得经验值
  • 精灵图动画 — 导入使用与 Codex 兼容的宠物文件(pet.json + spritesheet.webp),以真彩色半块 ANSI 艺术渲染
  • 覆盖层 + 面板 UI — 可切换的宠物覆盖层,包含精灵图、属性条和对话气泡;小终端支持紧凑模式
  • 底部状态栏 — 始终可见的状态行,显示宠物名字、等级、情绪和需求
  • 全局伙伴 — 一只宠物跨所有项目陪伴你
  • 双语言支持 — 支持中英文,自动检测系统语言

📦 安装

方式一:npm 安装(推荐)

pi install npm:@rokiy/pi-pets

方式二:GitHub 安装

pi install git:github.com/DragonYH/pi-pets

方式三:本地开发

git clone https://github.com/DragonYH/pi-pets.git
cd pi-pets
npm install
pi install ./

验证安装

重启 pi。一切就绪——但孵化之前需要先导入宠物文件(见快速开始)。

🚀 快速开始

pi-pets 会在设置完成后自动响应你的编码会话:

  • 会话开始时 — 加载宠物状态,应用离线恢复
  • 每轮对话后 — 根据 token 使用量给予经验值
  • 工具调用后 — 追踪成功/错误,更新情绪(连续 3+ 错误 → 沮丧)
  • 会话关闭时 — 保存宠物状态并清理定时器

快速入门流程

由于 pi-pets 没有内置物种,孵化之前必须先导入至少一个宠物文件:

第一步:下载宠物文件 — 从 Codex Pet 社区PetDex 下载。每个宠物需要同目录下的 pet.json(元数据)和 spritesheet.webp(动画帧)。

第二步:导入宠物

/pets import /path/to/downloaded-pet-folder

这会验证宠物文件、将精灵图转换为动画帧,并缓存到本地以便快速渲染。

第三步:孵化你的第一只宠物 — pi-pets 从所有已导入物种中随机选择:

/pets hatch
# 或者用自定义种子,同一种子永远生成同一只宠物:
/pets hatch my-secret-seed

第四步:互动 — 宠物会立即对你的编码活动做出反应:

/pets pet      # 抚摸它增加快乐
/pets feed     # 饿了就喂食
/pets info     # 查看宠物的状态和心情
/pets list     # 在多个宠物间切换

第五步:切换 UI — 宠物覆盖层会显示在终端中:

/pets ui       # 显示/隐藏宠物覆盖层

底部状态栏也会实时显示宠物的名字、等级、情绪和需求值。

⌨️ 命令列表

命令 说明
/pets 显示全部命令及说明
/pets hatch [seed] 孵化新宠物(可选 seed 字符串,用于确定性生成)
/pets info 显示宠物详细档案(物种、稀有度、属性、个性)
/pets list 列出已孵化宠物并交互切换
/pets pet 抚摸宠物(+快乐,+XP)
/pets feed 喂食宠物(+饥饿,+XP)
/pets rename <名字> 给宠物改名(1-32 字符,自动过滤控制字符)
/pets ui 显示/隐藏宠物覆盖层
/pets release 永久放生(需确认)
/pets import <path> 从目录导入精灵图宠物
/pets clean [species] 清除指定物种图像缓存(默认当前宠物)
/pets delete <species> 删除指定物种缓存文件(仅当没有宠物使用该物种)
/pets lang <zh-CN|en> 切换显示语言
/pets help 显示全部命令及说明
# 用自定义种子孵化
/pets hatch my-secret-seed

# 查看宠物
/pets info

# 删除物种文件(仅当无宠物使用时)
/pets delete meow

# 快速互动
/pets pet
/pets feed

# 切换语言
/pets lang en

📥 宠物文件

pi-pets 使用与 Codex 生态系统兼容的精灵图宠物文件。每个宠物需要同目录下的一对文件:pet.json(元数据)和 spritesheet.webp(动画帧)。

推荐下载来源

  • Codex Pet — 使用基于网页的宠物创建器创建和下载宠物。浏览社区画廊获取其他用户分享的宠物,或自行设计宠物形象。

  • PetDex — 综合性宠物档案网站,提供可直接使用的精灵图和详细的物种数据。

文件格式

  • pet.json — 物种元数据(名称、emoji、描述)
  • spritesheet.webp — 8 列 × 9 行动画帧网格(每帧 192×208px),覆盖 9 种动画状态:idle、run、sleep、eat、attack、hurt、jump、play、failed

导入

下载宠物文件包后,通过以下命令导入:

/pets import /path/to/downloaded-pet-folder

导入后即可孵化:

/pets hatch

pi-pets 从所有已导入物种中随机选择。你可以导入任意数量的宠物,并通过 /pets list 管理它们。

🌱 成长阶段

阶段 等级范围 经验需求 解锁内容
幼生体 (Baby) Lv 1-2 0-399 基础情绪
成长体 (Child) Lv 3-4 400-899 情绪互动
进化体 (Teen) Lv 5-7 900-2,499
完全体 (Adult) Lv 8-12 2,500-7,199
究极体 (Elder) Lv 13+ 7,200+

经验来源

事件 经验值
完成一轮对话 5-15
工具调用成功 3-8
测试全部通过 +20
修复一个错误 +25
/pets pet +2(每日上限 10 次)
/pets feed +1(每日上限 5 次)
会话结束 +10

等级公式:等级 = floor(sqrt(经验值 / 100))

💎 稀有度

稀有度 概率 效果
普通 60% 标准名称颜色
稀有 25% 绿色名称
精良 10% 蓝色名称
史诗 4% 紫色名称 + 闪光特效
传说 1% 金色名称

闪光:任意稀有度上独立 1% 概率——颜色反转 + 特殊标记。

所有稀有度抽取均基于种子确定性生成——相同种子 + 物种 = 相同稀有度。

😊 情绪与需求

8 种情绪响应你的编码行为:

  • 😊 开心 — 默认状态,需求充足
  • 🤔 好奇 — 近期活跃且需求舒适
  • 🎉 兴奋 — 测试全通过、升级、进化
  • 😴 疲惫 — 精力低于 30%
  • 🍽️ 饥饿 — 饥饿低于 30%
  • 😤 沮丧 — 连续 3+ 次错误
  • 💻 工作中 — 5 分钟内有活动
  • 🤒 生病 — 任意需求严重不足(低于 10)

3 轴需求实时衰减:

需求 衰减速率 恢复方式
饥饿 0.025/分钟 /pets feed (+40)
精力 0.015/分钟(活跃) 30+ 分钟不操作 (+20)
快乐 0.010/分钟 /pets pet (+15), 编码成功 (+5)

🧠 架构

┌────────────────────────────────────────────────────────────┐
│  pi 编码助手                                               │
│  ┌──────────────────────────────────────────────────────┐  │
│  │  [对话界面]                                          │  │
│  │                                                      │  │
│  ├──────────────────────────────────────────────────────┤  │
│  │  状态栏: 🐾 "小橘" Lv.4 🙂 *1500XP H:60 E:45       │  │
│  └──────────────────────────────────────────────────────┘  │
│                                                            │
│  ┌─ 扩展: pi-pets ──────────────────────────────────────┐  │
│  │  session_start     ──►  load() + applyIdleRecovery() │  │
│  │  turn_end          ──►  onTurnComplete() → addXp()   │  │
│  │  tool_execution_end──►  onToolExecuted() → emotion   │  │
│  │  session_shutdown  ──►  save() + clearTimers()       │  │
│  │  setInterval(60s)  ──►  tick() → decayNeeds()        │  │
│  │  setInterval(500ms)──►  render() → setWidget()       │  │
│  └───────────────────────────────────────────────────────┘  │
│                                                            │
│  ┌─ 持久化 (~/.pi/agent/pets/) ─────────────────────────┐  │
│  │  骨骼 (seed→PRNG): 物种ID、稀有度、属性、闪光        │  │
│  │  灵魂:             名字、个性                         │  │
│  │  运行时状态:        经验、等级、阶段、情绪、需求      │  │
│  │  缓存:              ~/.pi/agent/pets/pet-cache/      │  │
│  └───────────────────────────────────────────────────────┘  │
└────────────────────────────────────────────────────────────┘

监听的事件

  • session_start — 加载宠物状态,计算离线衰减恢复
  • turn_end — 给予本轮经验值,检查升级/进化
  • tool_execution_end — 追踪成功/错误次数,更新情绪
  • session_shutdown — 保存状态,清理定时器

🌐 语言

pi-pets 支持双语显示(中文和英文)。

自动检测

语言会自动从系统环境变量中检测:

  • LANGLC_ALLLC_MESSAGESzh 开头 → 中文
  • 否则 → 英文

手动切换

通过 /pets lang 命令随时切换:

/pets lang zh-CN    # 切换到简体中文
/pets lang en       # 切换到英文

语言设置在每次会话中有效——重启后重新检测系统语言。

🏗️ 项目结构

pi-pets/
├── src/
│   ├── index.ts                   # 扩展入口
│   ├── types.ts                   # TypeScript 类型定义
│   ├── config.ts                  # 配置常量
│   ├── pet_instance.ts            # PetEngine — 核心状态机
│   ├── commands.ts                # /pets 命令注册
│   ├── events.ts                  # 生命周期事件绑定 + UI 渲染循环
│   ├── hatchery.ts                # 孵化逻辑 (seed→骨骼)
│   ├── evolution.ts               # 成长阶段逻辑
│   ├── needs.ts                   # 3 轴需求衰减与恢复
│   ├── xp.ts                      # 经验计算与等级曲线
│   ├── species.ts                 # 物种解析器(无内置物种——全部导入)
│   ├── name_generator.ts          # 备用名称生成器
│   ├── persistence.ts             # 状态存取
│   ├── prng.ts                    # 确定性 PRNG (mulberry32)
│   ├── renderer/                  # 宠物渲染管线
│   │   ├── art-provider.ts        # 帧缓存与动画状态管理
│   │   ├── cache.ts               # 持久帧缓存
│   │   ├── converter.ts           # Spritesheet.webp → 像素网格转换
│   │   ├── importer.ts            # pet.json + spritesheet.webp 导入流程
│   │   └── renderer.ts            # ANSI 半块与文本回退渲染
│   ├── ui/                        # UI 组件
│   │   ├── pet-overlay.ts         # 宠物覆盖层显示逻辑
│   │   ├── widget.ts              # 面板渲染
│   │   ├── overlay.ts             # 升级/进化特效
│   │   ├── bubbles.ts             # 8 情绪 × 对话气泡池(i18n)
│   │   ├── footer.ts              # 状态栏渲染
│   │   └── visual-utils.ts        # ANSI 可视化工具函数
│   └── i18n/                      # 国际化
│       ├── index.ts               # i18n 核心(t(), setLanguage, 自动检测)
│       ├── en.ts                  # 英文翻译字典
│       └── zh-CN.ts               # 中文翻译字典
├── tsconfig.json
├── tsconfig.build.json
├── package.json
├── README.md
└── README.zh-CN.md

🛠️ 开发者

类型检查

npx tsc --noEmit

构建

npm run build

在 pi 中运行

pi -e ./src/index.ts

测试

npm test

📄 许可证

MIT