Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

limecloud/lime-pet

Repository files navigation

Lime Pet

Lime PetLime 的独立桌面 companion app 仓库。当前仓库包含 macOS 原生 SwiftUI + AppKit 壳,以及 Windows Tauri + WebView companion 壳;它负责桌面端的桌宠呈现、移动、点击和轻提示,不承载 Lime 的主会话运行时。

当前能力

  • 原生 SwiftUI + AppKit 桌宠窗口
  • 更完整的桌宠角色表现:呼吸、眨眼、眼神跟随、嘴型、胡须、尾巴摆动、思考态 / 完成态氛围反馈
  • 角色资源化:通过 Resources/character-library.json 描述多角色主题、配色、几何参数与符号资源
  • 角色性格资源化:每个角色都可以定义自己的移动节奏、巡航范围、眨眼频率与陪伴文案
  • 角色配件槽位资源化:围脖 / 蝴蝶结 / 项圈、头饰、移动尾迹、脸部标记都由角色配置驱动
  • 角色渲染后端资源化:同一套角色库里可以同时声明 spritelive2d 角色
  • 菜单栏支持多角色切换,并持久记住上次选中的外观
  • 支持更像桌宠的自主节奏:中央巡航、边缘蹲守、短暂停步、撞边回弹
  • 支持拖拽重定位,松手后会记住停靠位置,下次启动自动回到上次区域
  • 本地 WebSocket companion 协议客户端
  • 点击桌宠后向 Lime 发送 pet.clicked / pet.open_chat
  • 单击 / 双击 / 三击支持不同动作:单击唤起 Lime,双击生成一句青柠鼓励,三击生成一句"下一步建议"
  • 支持从桌宠右键或状态栏菜单直接输入一句话,请求 Lime 宿主侧模型生成回复,并在桌宠本地朗读
  • 断线时会给出提示气泡并自动重连
  • 空闲时会有轻量陪伴气泡,不打断主流程
  • 菜单栏支持重连、回到屏幕中央、左/中/右停靠、显示 / 隐藏桌宠
  • macOS 菜单栏与桌宠右键菜单、Windows 桌宠右键菜单都可直接查看 Companion 连接诊断、最近同步时间与脱敏服务商摘要,并可主动请求 Lime 立即重发摘要
  • 新增 Live2D 渲染通路:Windows 通过 Tauri/WebView,macOS 通过 WKWebView 复用同一套本地 runtime
  • 默认仅内置青柠;其他 Live2D 角色改为服务端模型目录 + 客户端本地安装
  • 支持 Live2D 模型目录、状态动作映射、点按动作映射,以及 pet.live2d_action 协议事件
  • 接收 Lime 发来的 pet.show / pet.hide / pet.state_changed / pet.show_bubble
  • GitHub Actions 质量校验与 tag 发布流程
  • Windows companion 预览壳:透明无边框、始终置顶、可拖拽、点击唤起、右键菜单、位置记忆与基础氛围动画

仓库结构

  • LimePet.xcodeproj:Xcode 工程
  • LimePet/:Swift 源码、Info.plistResources/ 资源目录
  • WindowsPet/:Windows companion 子项目,基于 Tauri v2
  • LICENSE-Live2D.md:Live2D 示例模型相关许可说明
  • docs/protocol.md:Companion 协议说明
  • docs/release.md:CI/CD 与签名说明
  • .github/workflows/:构建与打包工作流

本地构建

xcodebuild \
 -project "LimePet.xcodeproj" \
 -target "LimePet" \
 -configuration Debug \
 CODE_SIGNING_ALLOWED=NO \
 CODE_SIGNING_REQUIRED=NO \
 -derivedDataPath "/tmp/LimePet-DerivedData" \
 build

也可以直接用 Xcode 打开 LimePet.xcodeproj。如果要做签名运行,请在 Xcode 里给 target 配置自己的 Team。

无 Xcode 本地开发

如果当前机器只有 Command Line Tools,没有完整 Xcode.app,也可以走仓库内置的本地链路:

swift build --configuration debug
./scripts/run-dev-app.sh

如果只想先产出一个本地调试 .app 包:

./scripts/build-dev-app.sh
open "dist/Lime Pet.app"

这条链路基于 Swift Package Manager 构建可执行文件,再由脚本封装成 .app。它适合本地开发、调试和快速验证;当前仓库的 GitHub Actions 也已经统一走这条路径,避免本地与 CI 使用两套不同构建主线。

如果你正在联调 lime 主宿主与桌宠语音链路,也可以直接跑:

./scripts/run-companion-dev-stack.sh

这条脚本会:

  • local-whisper 特性构建 lime 宿主
  • 自动重启本地 lime companion 监听进程
  • 重新启动 LimePet
  • 默认把桌宠模型目录指向 http://127.0.0.1:8080control-plane-svc

默认会从 ../aiclientproxy/lime 查找主仓;如果你的主仓不在这个位置,可以先指定:

LIME_ROOT="/absolute/path/to/lime" ./scripts/run-companion-dev-stack.sh

如果你只是想快速确认当前联调栈是否健康,可以跑:

./scripts/check-companion-dev-stack.sh

它会检查:

  • DevBridge 是否在线
  • 当前默认 ASR 凭证是否存在
  • 桌宠是否连上 45554
  • 如果本地有 STT 测试样本,还会顺手打一遍本地 Whisper 转写

发布产物

本地生成 release bundle:

./scripts/package-release.sh --version "0.4.1" --build-number "1"

产物默认会按当前宿主架构输出,例如 Apple Silicon 机器上会得到:

dist/release/LimePet-v0.4.1-macos-arm64.dmg
dist/release/LimePet-v0.4.1-macos-arm64.dmg.sha256
dist/release/LimePet-v0.4.1-macos-arm64-unsigned.zip
dist/release/LimePet-v0.4.1-macos-arm64-unsigned.zip.sha256

GitHub Actions 发布策略:

  • ci.yml
    • pull_requestpush mainworkflow_dispatch 时执行
    • 校验 macOS Apple Silicon 与 macOS Intel 两条构建链都能产出 .app 与 release preview
    • 校验 Windows companion 可打出 installer preview
    • 额外上传 macos-arm64macos-x64 与 Windows NSIS preview,确保发布链路不腐坏
  • release.yml
    • 在推送 v* tag 时自动执行
    • 也支持手动 workflow_dispatch
    • 会同时上传 macos-arm64macos-x64 两个 macOS dmg、unsigned zip、对应 sha256 与 Windows NSIS installer,并发布到 GitHub Release
    • 若仓库已配置 Apple signing / notarization secrets,会自动把 macOS dmg 升级为已签名且已 notarize 的正式分发包

Windows 本地开发

Windows 壳位于 WindowsPet/,它复用同一套 companion 协议和共享素材,但不复用 macOS 的窗口层代码。

常用命令:

cd WindowsPet
npm install
npm run build

如果在 Windows 机器上做本地桌宠调试:

cd WindowsPet
npm install
npm run tauri dev

如果在 Windows 机器上产出 installer:

cd WindowsPet
npm install
npm run tauri build

Companion 连接

默认连接地址:

ws://127.0.0.1:45554/companion/pet

也支持通过启动参数覆盖:

open -a "Lime Pet.app" --args \
 --connect "ws://127.0.0.1:45554/companion/pet" \
 --control-plane-base-url "http://127.0.0.1:8080" \
 --tenant-id "tenant-0001" \
 --client-id "lime" \
 --protocol-version "1"

详细消息格式见 docs/protocol.md

模型安装

当前桌宠的事实源已经拆成两层:

  • 内置角色:LimePet/Resources/character-library.json,当前默认只保留青柠
  • 可安装角色:LimePet/Resources/live2d-model-catalog.json,同时会生成到 limecore 的 seed 文件

macOS 客户端会优先尝试从:

GET http://127.0.0.1:8080/api/v1/public/tenants/tenant-0001/client/model-catalog

拉取公开模型目录;拿不到时会回退到 bundle 内置的 catalog。模型文件实际安装到:

~/Library/Application Support/LimePet/live2d-models

安装记录保存在:

~/Library/Application Support/LimePet/model-installs.json

角色外观与动作配置仍然优先沿用 JSON 描述 + Swift 渲染器 / Live2D runtime 的组合,而不是把外观和节奏写死在视图里。

如果要本地启动 control-plane-svc 做联调,可以在 limecore 仓库执行:

cd ~/Documents/dev/ai/limecloud/limecore
SERVER_MODEL_ASSET_ROOT_DIR="/absolute/path/to/live2d-models/models" \
go run ./services/control-plane-svc/cmd/server

推荐把你本地克隆的 live2d-models/models 目录挂进 control-plane-svc。这样公开模型目录返回的下载地址会指向当前本地服务,例如:

http://127.0.0.1:8080/api/v1/public/assets/live2d/koharu/model.json

这条链路可以避开 model.oml2d.com 证书或 TLS 握手异常导致的安装失败。

如果准备把模型正式迁到 Cloudflare 托管,不再依赖本地目录或 model.oml2d.com,统一在 limecore 仓库执行批量导入:

cd ~/Documents/dev/ai/limecloud/limecore
npm run import:cloudflare:live2d -- \
 --source-dir "/absolute/path/to/live2d-models" \
 --bucket "<your-r2-bucket>" \
 --asset-base-url "https://<your-asset-domain>"

这条命令会整批上传模型目录,并同步改写 lime-pet / limecore 的模型目录 seed,不需要后台逐个上传。

跨平台策略

当前仓库采用"同仓双壳"的做法:

  • macOS:保留原生 SwiftUI + AppKit
  • Windows:新增 Tauri + WebView
  • 协议:两侧统一复用 docs/protocol.md 定义的 companion WebSocket 协议
  • 资源:Windows 壳通过同步脚本复用主仓的青柠精灵素材,而不是维护第二份角色源图

AltStyle によって変換されたページ (->オリジナル) /