Skip to content

crazyCrabs/opencode-pets

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🇨🇳 中文 · 🇺🇸 English


Cute Pet - OpenCode TUI 桌宠插件

一个运行在 OpenCode TUI 中的可爱桌宠插件,通过 ASCII 艺术角色陪伴你的编程时光。支持完整的养成系统,随着 Token 累积解锁更多功能和宠物。

功能特性

  • 🐱 多种角色 - 猫咪、狗狗、机器人、仓鼠、企鹅等 5 种预设角色,按等级逐个解锁
  • 🎨 ASCII 艺术 - 可爱的 ASCII 艺术风格,单行/多行两种显示模式
  • 🔄 状态响应 - 实时响应 OpenCode 事件(思考、工作、完成、出错等)
  • 📈 养成系统 - 通过 Token 累积升级,解锁宠物和功能
  • ⚔️ 技能系统 - 每个宠物拥有独特技能,激活后影响 AI 行为
  • 📊 通用技能 - 日报总结、项目总结等实用功能
  • 💝 属性系统 - 心情、饥饿度、能量三大属性,需要维护
  • 🎮 交互功能 - 点击切换角色,与宠物互动(AI 会以宠物身份回应)
  • 🔔 健康提醒 - 久坐、喝水、站立、眼保健操提醒
  • 📢 桌面通知 - 对话完成、健康提醒等桌面弹窗通知
  • 💬 互动弹窗 - 维护命令执行后显示宠物回应弹窗

安装

方法 1:直接复制

将插件文件复制到 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

方法 2:在 tui.json 中配置

编辑 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 平台

  • 使用 Windows Toast API 发送通知
  • 支持免打扰模式(使用 scenario="alarm" 属性)
  • 需要 Windows 8 或更高版本

macOS 平台

  • 使用 osascript 发送通知
  • 需要 macOS 10.8 或更高版本

Linux 平台

  • 使用 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 休息 休息中...

UI 显示

Level 1 - 单行显示

[session_prompt_right]
ฅ՞•ﻌ•՞ฅ 小猫咪 | 思考中 | 生成回复...

Level 2+ - Sidebar 显示

[sidebar_content]
  /\_/\ 
 ( ^.^ )
  > ^ <
 /_____\
─────────────
小猫咪
思考中
生成回复...
─────────────
等级: Lv.2
████████░░ 82.3%
82.3K / 100K tokens

Level 4+ - 属性显示

[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/solid JSX 运行时)
  • 存储: 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         │                   │
│           └──────────────┬───────────────┘                   │
│                          │                                   │
│                   技能数据共享                                │
└─────────────────────────────────────────────────────────────┘

维护命令互动示例

执行 /pet-feed

  1. 更新属性:心情 +5,饥饿 -30
  2. 向"桌宠互动"会话发送消息:"你给小仓鼠喂了食物"
  3. AI 以宠物身份回应:"好吃!谢谢主人~"
  4. 2-4 秒后显示弹窗:
┌─────────────────────────────────┐
│  小仓鼠 ʚ(•・ω・•)ɞ               │
│──────────────────────────────   │
│  "好吃!谢谢主人~"               │
│──────────────────────────────   │
│  心情 +5  饥饿 -30               │
│──────────────────────────────   │
│  回车查看详情  q 关闭            │
└─────────────────────────────────┘

在"桌宠互动"会话中执行

如果在"桌宠互动"会话中执行维护命令:

  • 不会显示弹窗
  • 直接在当前会话查看 AI 回应
  • 属性仍然正常更新

调试

插件支持调试日志,默认关闭。

开启调试日志

编辑 src/index.tsx,将 DEBUG_MODE 设置为 true

const DEBUG_MODE = true

日志文件位置

<用户主目录>/Desktop/pet-debug.log

日志包含:

  • 插件加载和初始化
  • Token 同步
  • 提醒触发
  • 桌面通知发送
  • 窗口焦点检测
  • 维护命令执行

许可证

MIT

About

opencode pets plugins

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors