Skip to content

feat(xiaoqi-pet): 新增小栖桌宠插件 - #137

Open
white-source wants to merge 1 commit into
zai-org:mainfrom
white-source:feat/xiaoqi-pet
Open

white-source wants to merge 1 commit into
zai-org:mainfrom
white-source:feat/xiaoqi-pet

Conversation

@white-source

Copy link
Copy Markdown

Plugin type (required) / 插件类型(必填)

  • UI Plugin / 是 UI 插件
  • Standard plugin / 普通插件(非 UI) — 不提供 MCP Apps 交互页面(无 ui.surfaces,无 _meta.ui.resourceUri)
  • Not applicable / 不适用

Affected plugin name(s) / 涉及的插件名称:xiaoqi-pet

What / 改动内容

新增社区插件 小栖桌宠 / Xiaoqi Desk Pet(external_plugins/xiaoqi-pet,v0.3.1,category utilities)。

解决的问题:ZCode 一次只能看一个会话,长任务跑起来后切到别的窗口就不知道它在做什么、什么时候需要你确认。小栖把会话状态搬到桌面上常驻展示。

能力

  • 注册 7 个 hooks(SessionStart/UserPromptSubmit/PreToolUse/PermissionRequest/PostToolUse/PostToolUseFailure/Stop),把 stdin JSON 原子写成一个事件文件,桌宠每秒消费并折叠成每会话状态机。
  • 多会话任务看板(需要你 / 进行中 / 刚完成)、每个会话固定配色;单会话时用紧凑气泡;两处以上时抽屉卡并排。
  • 等待确认、后台完成时弹桌面通知。
  • 肚子胶囊:默认显示今日 token 用量(只读 ZCode 本地用量库),可选 balance.json 指向用户自己的额度接口。
  • skill xiaoqi-pet + /pet-say 命令让小栖说话。

桌宠本体不随插件分发:插件只负责投递状态,桌宠是独立程序(macOS 原生 SwiftUI / Windows·Linux Electron),用户从 https://github.com/white-source/zcode-xiaoqi-pet/releases 自行安装。没装桌宠时插件不产生可见行为、不报错,事件文件超过一天会被清掉。这一点是刻意设计:ZCode 插件无法承载原生窗口程序,因此插件的价值在装好桌宠后体现。

依赖、网络、权限与副作用(README 中英文均已写明)

  • hooks 在 7 个事件上各起一次短暂进程(bash,无 bash 时 PowerShell),写一个 ≤64 KB 的 JSON,退出码 0,超时 5 秒,不阻塞会话。
  • 写入位置:macOS ~/Library/Application Support/XiaoqiPet/、Linux ${XDG_CONFIG_HOME:-~/.config}/xiaoxi-pet/、Windows %APPDATA%\XiaoqiPet\。
  • 插件本身零网络请求;不读取、不保存任何 ZCode 凭据或 API Key;桌宠只读 ~/.zcode/cli/db/db.sqlite。
  • 第三方素材:形象与界面结构来自 dsh-xiaoqi-pet(MIT),LICENSE 已随插件目录提供。

测试方式(可复现)

  1. 安装插件后新开一个 ZCode 会话,随便发一句话;
  2. 桌宠出现并在气泡中显示「读取 xxx / 运行:xxx」与耗时;
  3. 触发一次需要确认的工具调用 → 桌宠转为「需要你」并弹通知;
  4. /pet-say 你好 → 桌宠弹出说话气泡。

同一批模拟 hook 事件在 Swift 与 Electron 两套状态机上已验证输出一致;macOS 包为本地构建,Windows/Linux 包已交叉构建但未在真机运行(README 中已注明)。

Self-check / 自查清单

  • Plugin name is unique kebab-case; new external plugin directory is external_plugins/<name>/ — xiaoqi-pet
  • Usage category is set independently of publisher ownership — utilities
  • Plugin type and affected names are declared above
  • version bumped in BOTH plugin.json and marketplace.json — 0.3.1
  • README.md (EN) and README_CN.md (中文) both updated and equivalent
  • description_i18n has both en and zh-CN(清单与市场条目完全一致)
  • No secrets, machine-specific paths, or private dependencies(已扫描无绝对用户路径、无密钥、无二进制)
  • Model/API/network dependencies documented
  • python3 scripts/validate.py 通过(OK: 53 plugin(s) validated)
  • python3 scripts/build_dist.py — 见下方说明

关于 build_dist.py

在本机(无 pnpm)直接运行会在既有的 excalidraw 上失败:UnsafeTree: excalidraw: incomplete build; run pnpm build first,与本次新增无关。

为验证本插件的打包,我把市场条目隔离到只剩 xiaoqi-pet 后运行同一脚本,通过:

Built dist/ with 1 plugin artifact(s) and 343 asset file(s)
  - plugins/xiaoqi-pet/0.3.1/plugin.zip  sha256=006b184d…  155443 bytes

目录为纯源码/文档(33 个文件,约 376 KB),无构建产物、无 node_modules、无符号链接,插件根没有 package.json,因此不需要构建步骤。

桌面宠物:通过 7 个 plugin hooks 把 ZCode 会话状态(阶段、工具、等待确认、完成)
投递为本地事件文件,由 macOS 原生 / Windows·Linux Electron 桌宠渲染,提供多会话
看板、彩色抽屉卡、桌面通知与今日用量/套餐余量胶囊,并提供让小栖说话的 skill 与
/pet-say 命令。桌宠本体不随插件分发,从项目 GitHub Releases 安装。
@panda920

Copy link
Copy Markdown
Collaborator

✅ Internal validation passed. A ZCode maintainer will review the change next; after acceptance, release checks run separately and this PR is closed automatically.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants