一个运行在 OpenCode TUI 中的可爱桌宠插件,通过 ASCII 艺术角色陪伴你的编程时光。支持完整的养成系统,随着 Token 累积解锁更多功能和宠物。
- 🐱 多种角色 - 猫咪、狗狗、机器人、仓鼠、企鹅等 5 种预设角色,按等级逐个解锁
- 🎨 ASCII 艺术 - 可爱的 ASCII 艺术风格,单行/多行两种显示模式
- 🔄 状态响应 - 实时响应 OpenCode 事件(思考、工作、完成、出错等)
- 📈 养成系统 - 通过 Token 累积升级,解锁宠物和功能
- ⚔️ 技能系统 - 每个宠物拥有独特技能,激活后影响 AI 行为
- 📊 通用技能 - 日报总结、项目总结等实用功能
- 💝 属性系统 - 心情、饥饿度、能量三大属性,需要维护
- 🎮 交互功能 - 点击切换角色,与宠物互动(AI 会以宠物身份回应)
- 🔔 健康提醒 - 久坐、喝水、站立、眼保健操提醒
- 📢 桌面通知 - 对话完成、健康提醒等桌面弹窗通知
- 💬 互动弹窗 - 维护命令执行后显示宠物回应弹窗
将插件文件复制到 OpenCode 插件目录:
# Windows
copy src\index.tsx %USERPROFILE%\.config\opencode\plugins\cute-pet.tsx
copy src\server.js %USERPROFILE%\.config\opencode\plugins\cute-pet-server.js
# macOS / Linux
cp src/index.tsx ~/.config/opencode/plugins/cute-pet.tsx
cp src/server.js ~/.config/opencode/plugins/cute-pet-server.js编辑 OpenCode TUI 配置文件:
// Windows: %USERPROFILE%\.config\opencode\tui.json
// macOS/Linux: ~/.config/opencode/tui.json
{
"plugin": [
"./plugins/cute-pet.tsx",
"./plugins/cute-pet-server.js"
]
}重启 OpenCode TUI 即可生效。
| 插件文件 | 类型 | 功能 |
|---|---|---|
cute-pet.tsx |
TUI 插件 | UI 显示、交互、提醒、桌面通知 |
cute-pet-server.js |
Server 插件 | 技能注入、system prompt 转换 |
注意:两个插件需要同时安装才能完整使用技能系统。Server 插件负责将激活的技能注入到 AI 的 system prompt 中。
| 文件 | 路径 | 说明 |
|---|---|---|
| TUI 插件 | %USERPROFILE%\.config\opencode\plugins\cute-pet.tsx |
主插件文件(UI、交互、提醒) |
| Server 插件 | %USERPROFILE%\.config\opencode\plugins\cute-pet-server.js |
技能注入插件 |
| 技能数据 | %USERPROFILE%\.config\opencode\pet-skills.json |
技能配置(两个插件共享) |
| 调试日志 | %USERPROFILE%\Desktop\pet-debug.log |
调试日志(可选) |
| 文件 | 路径 | 说明 |
|---|---|---|
| Toast 脚本 | %TEMP%\opencode-pet\toast.ps1 |
Windows 桌面通知脚本 |
| 焦点检测脚本 | %TEMP%\opencode-pet\focus.ps1 |
Windows 窗口焦点检测脚本 |
注意:
%TEMP%通常指向C:\Users\<用户名>\AppData\Local\Temp
| 数据 | 存储位置 | 说明 |
|---|---|---|
| 全局数据 | api.kv (pet:global) |
Token、等级、角色、属性等 |
| 提醒配置 | api.kv (pet:reminder) |
提醒开关、间隔等 |
通过全局 Token 用量养成宠物,等级跨项目累计。
| 等级 | Token 阈值 | 解锁内容 |
|---|---|---|
| Level 1 | 0 | 🐱 小猫咪(默认)、基础命令 |
| Level 2 | 100K (10万) | 🐶 小狗狗、通用技能(日报/项目总结) |
| Level 3 | 500K (50万) | 🤖 小机器人 |
| Level 4 | 1M (100万) | 🐹 小仓鼠、属性系统、维护命令 |
| Level 5 | 5M (500万) | 🐧 小企鹅 |
每个宠物需要达到对应等级才能解锁使用:
| 宠物 | 解锁等级 | 独特技能 | 技能效果 |
|---|---|---|---|
| 🐱 小猫咪 | Level 1 | 优雅代码 | 代码如猫步般轻盈优雅,命名清晰,保持简洁 |
| 🐶 小狗狗 | Level 2 | 忠诚守护 | 像守护家园一样守护代码,检查错误,验证边界 |
| 🤖 小机器人 | Level 3 | 精准分析 | 技术方案详细完整,数据支撑决策,考虑扩展性 |
| 🐹 小仓鼠 | Level 4 | 快速迭代 | 直击要点,简洁高效,快速给出可行方案 |
| 🐧 小企鹅 | Level 5 | 冰冷静思 | 深入分析复杂问题,多角度思考,权衡长远影响 |
切换宠物时:
- 已解锁:正常切换,自动取消之前激活的技能
- 未解锁:Toast 提示"该宠物需要达到 Level X 解锁"
每个宠物拥有一个独特技能,只有切换到对应宠物才能使用:
| 技能 | 所属宠物 | 效果 | 特色语气 |
|---|---|---|---|
| 优雅代码 | 🐱 小猫咪 | 代码风格简洁优雅 | 回复末尾加 "喵~" |
| 忠诚守护 | 🐶 小狗狗 | 错误检测更严格 | 回复末尾加 "汪!" |
| 精准分析 | 🤖 小机器人 | 技术方案更详细 | 回复末尾加 "滴~" |
| 快速迭代 | 🐹 小仓鼠 | 响应更简洁高效 | 回复末尾加 "吱吱~" |
| 冰冷静思 | 🐧 小企鹅 | 复杂问题分析更深入 | 回复末尾加 "嘎~" |
技能激活后会在 AI 的 system prompt 中注入提示,影响 AI 行为。
特色语气说明:技能激活后,AI 会在每次回复末尾加上两个空格和宠物的特色语气词,增强陪伴感。例如:
你好主人,有什么需要我帮你的吗? 喵~
Level 2 解锁,所有宠物共享:
| 命令 | 功能 | 说明 |
|---|---|---|
/pet-daily |
生成今日工作日报 | 包含 Token 统计、主要话题、完成任务、遇到问题、下一步计划 |
/pet-project |
生成项目状态总结 | 包含项目架构、已完成功能、进行中工作、待解决问题、技术债务、最近提交 |
执行逻辑:
- 自动获取最近活跃的工作会话(排除"桌宠互动"会话)
- 在该会话中发送总结 prompt,AI 根据历史对话生成报告
- Toast 提示在哪个会话中生成
Level 4 解锁属性系统,宠物拥有三大属性:
| 属性 | 范围 | 初始值 | 影响 |
|---|---|---|---|
| 心情 | 0-100 | 80 | 影响对话风格(开朗/平静/低落) |
| 饥饿度 | 0-100 | 50 | 影响能量恢复速度 |
| 能量 | 0-100 | 100 | 影响技能效果 |
自动变化:
- 心情:每小时 -1
- 饥饿度:每小时 +1
- 能量:每小时 +1(饥饿时恢复减半)
状态通知:
- 饥饿度 >= 90:提示"我饿了..."
- 能量 < 10:提示"我累了..."
- 心情 < 30:提示"我不开心..."
| 命令 | 功能 | 解锁等级 |
|---|---|---|
/pet |
切换角色 | Level 1 |
/pet-status |
查看状态 | Level 1 |
/pet-sync |
同步全局 Token | Level 1 |
/pet-stats |
查看 Token 统计详情 | Level 1 |
| 命令 | 功能 | 解锁等级 |
|---|---|---|
/pet-skills |
查看/激活当前宠物技能 | Level 1 |
/pet-skill-off |
取消当前宠物技能 | Level 1 |
/pet-daily |
生成今日工作日报 | Level 2 |
/pet-project |
生成项目状态总结 | Level 2 |
| 命令 | 效果 | 冷却时间 | 解锁等级 |
|---|---|---|---|
/pet-feed |
饥饿度 -30,心情 +5 | 3 秒 | Level 4 |
/pet-play |
心情 +10,能量 -5 | 3 秒 | Level 4 |
/pet-rest |
能量 +50 | 3 秒 | Level 4 |
维护命令特性:
- 执行后会向"桌宠互动"会话发送互动消息,AI 会以宠物的身份回应
- 2-4 秒后显示 Dialog 弹窗,包含宠物回应和属性变化
- 按回车可跳转到"桌宠互动"会话查看完整对话
- 在"桌宠互动"会话中执行时,不会显示弹窗,直接查看 AI 回应
| 命令 | 功能 | 说明 |
|---|---|---|
/pet-reminder |
提醒设置 | 配置提醒类型、间隔、方式 |
/pet-reminder-toggle |
切换提醒开关 | 快速开启/关闭所有提醒 |
| 类型 | 默认间隔 | 说明 |
|---|---|---|
| 对话完成 | - | AI 回复完成时提醒(仅在非"桌宠互动"会话中触发) |
| 久坐提醒 | 45 分钟 | 长时间工作后提醒活动 |
| 喝水提醒 | 30 分钟 | 定时提醒喝水 |
| 站立提醒 | 60 分钟 | 提醒站立放松 |
| 眼保健操 | 45 分钟 | 提醒做眼保健操 |
本项目使用 MIT 开源许可证。详见仓库根目录下的 LICENSE 文件。
| 方式 | 说明 |
|---|---|
| 桌面通知 | Windows Toast 通知(支持免打扰模式) |
| TUI 弹窗 | OpenCode 内弹窗提醒 |
| 两者都 | 同时使用两种方式 |
对话完成提醒:
- 仅在工作会话中触发,"桌宠互动"会话不会触发
- 避免维护命令(
/pet-feed、/pet-play、/pet-rest)的 AI 回复触发通知
提醒设置
──────────────────────────────
总开关: 开启
提醒方式: 桌面通知
0. 切换提醒方式
1. [✓] 对话完成提醒
2. [✓] 久坐提醒 间隔: 45 分钟
3. [✓] 喝水提醒 间隔: 30 分钟
4. [✓] 站立提醒 间隔: 60 分钟
5. [✓] 眼保健操 间隔: 45 分钟
──────────────────────────────
输入数字切换,输入 "方式 0/1/2" 设置提醒方式
输入 "间隔 编号 分钟" 设置间隔
- 使用 Windows Toast API 发送通知
- 支持免打扰模式(使用
scenario="alarm"属性) - 需要 Windows 8 或更高版本
- 使用
osascript发送通知 - 需要 macOS 10.8 或更高版本
- 使用
notify-send发送通知 - 需要安装
libnotify-bin
插件会检测 OpenCode 窗口是否获得焦点:
- Windows: 使用
GetForegroundWindow()Win32 API(通过 PowerShell 调用) - macOS: 使用 AppleScript 获取当前应用
- Linux: 使用
xdotool(X11) 或hyprctl/kdotool(Wayland)
行为说明:
- 启动时缓存 Terminal 窗口 ID
- 每次检测时获取当前焦点窗口 ID
- 比较两者:相同 = Terminal 在焦点,不同 = Terminal 不在焦点
- 如果用户在当前 session 且终端获得焦点:不发送通知
- 如果用户在当前 session 但终端失去焦点:发送桌面通知
- 如果用户不在当前 session:发送桌面通知
| 角色 | 单行艺术 | 名称 | 解锁等级 |
|---|---|---|---|
| 🐱 猫咪 | ฅ՞•ﻌ•՞ฅ |
小猫咪 | Level 1 |
| 🐕 狗狗 | U・ᴥ・U |
小狗狗 | Level 2 |
| 🤖 机器人 | [o_o] |
小机器人 | Level 3 |
| 🐹 仓鼠 | ʚ(•・ω・•)ɞ |
小仓鼠 | Level 4 |
| 🐧 企鹅 | ( ●・ω・● ) |
小企鹅 | Level 5 |
宠物会根据 OpenCode 事件实时更新状态:
| 状态 | 触发事件 | 示例消息 |
|---|---|---|
| idle | 空闲时 | 等待中... |
| thinking | AI 思考中 | 思考中... |
| working | 执行工具/编辑文件 | 执行 bash... |
| happy | 任务完成 | 完成! |
| error | 出错 | 出错了... |
| sleeping | 休息 | 休息中... |
[session_prompt_right]
ฅ՞•ﻌ•՞ฅ 小猫咪 | 思考中 | 生成回复...
[sidebar_content]
/\_/\
( ^.^ )
> ^ <
/_____\
─────────────
小猫咪
思考中
生成回复...
─────────────
等级: Lv.2
████████░░ 82.3%
82.3K / 100K tokens
[sidebar_content]
/\_/\
( ^.^ )
> ^ <
/_____\
─────────────
小猫咪
思考中
生成回复...
─────────────
等级: Lv.4
██████████ 123.4K / 500K tokens
─────────────
心情: ████████░░ 80
饥饿: █████░░░░░ 50
能量: ██████████ 100
cute_pet/
├── src/
│ ├── index.tsx # TUI 插件入口
│ └── server.js # Server 插件(技能注入)
├── docs/
│ ├── growth-system.md # 养成系统设计文档
│ └── tasks.md # 实现任务清单
├── README.md
└── package.json
- 运行时: Bun(OpenCode 内置)
- UI 框架: SolidJS(
@opentui/solidJSX 运行时) - 存储:
api.kv持久化全局数据 - 数据库:
bun:sqlite读取 OpenCode 数据库 - 事件: 监听 OpenCode TUI 事件
- UI: 使用 TUI 组件(box, text, For, Show 等)
- 通知: Windows Toast API / macOS osascript / Linux notify-send
- 异步处理: 使用
spawn替代execFileSync避免超时问题
# 插件文件位置
src/index.tsx # TUI 插件
src/server.js # Server 插件
# 安装到 OpenCode
# Windows
copy src\index.tsx %USERPROFILE%\.config\opencode\plugins\cute-pet.tsx
copy src\server.js %USERPROFILE%\.config\opencode\plugins\cute-pet-server.js
# macOS / Linux
cp src/index.tsx ~/.config/opencode/plugins/cute-pet.tsx
cp src/server.js ~/.config/opencode/plugins/cute-pet-server.js
# 重启 OpenCode TUI 生效┌─────────────────────────────────────────────────────────────┐
│ OpenCode TUI │
├─────────────────────────────────────────────────────────────┤
│ ┌──────────────────┐ ┌──────────────────────────────┐ │
│ │ TUI Plugin │ │ Server Plugin │ │
│ │ (index.tsx) │ │ (server.js) │ │
│ │ │ │ │ │
│ │ - UI 显示 │ │ - 技能注入 │ │
│ │ - 交互功能 │ │ - system prompt 转换 │ │
│ │ - 提醒系统 │ │ - pendingInjection 处理 │ │
│ │ - 桌面通知 │ │ │ │
│ │ - 维护命令弹窗 │ │ │ │
│ │ - 日报/项目总结 │ │ │ │
│ └────────┬─────────┘ └──────────────┬───────────────┘ │
│ │ │ │
│ │ pet-skills.json │ │
│ └──────────────┬───────────────┘ │
│ │ │
│ 技能数据共享 │
└─────────────────────────────────────────────────────────────┘
- 更新属性:心情 +5,饥饿 -30
- 向"桌宠互动"会话发送消息:"你给小仓鼠喂了食物"
- AI 以宠物身份回应:"好吃!谢谢主人~"
- 2-4 秒后显示弹窗:
┌─────────────────────────────────┐
│ 小仓鼠 ʚ(•・ω・•)ɞ │
│────────────────────────────── │
│ "好吃!谢谢主人~" │
│────────────────────────────── │
│ 心情 +5 饥饿 -30 │
│────────────────────────────── │
│ 回车查看详情 q 关闭 │
└─────────────────────────────────┘
如果在"桌宠互动"会话中执行维护命令:
- 不会显示弹窗
- 直接在当前会话查看 AI 回应
- 属性仍然正常更新
插件支持调试日志,默认关闭。
编辑 src/index.tsx,将 DEBUG_MODE 设置为 true:
const DEBUG_MODE = true<用户主目录>/Desktop/pet-debug.log
日志包含:
- 插件加载和初始化
- Token 同步
- 提醒触发
- 桌面通知发送
- 窗口焦点检测
- 维护命令执行
MIT