73dc31ae-848d-485b-8333-383.../AGENTS.md

53 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# AGENTS.md — MioIsland 插件开发指南
> 本目录是一个 MioIsland刘海岛插件项目。动手前请先读完本文件。
## 背景
- **MioIsland**`/Applications/Mio Island.app`开源github.com/MioMioOS/MioIsland把 MacBook 刘海变成"灵动岛"。插件以 `.bundle` 形式在运行时被宿主加载。
- 本机有三个自研插件项目(结构相同,本文件会同步到各自目录):
- `~/mio-deepseek-balance` — DeepSeek 余额id: `deepseek-balance`
- `~/mio-runcat` — CPU 小猫跑速id: `runcat`
- `~/mio-agent-status` — Kimi Code / TRAE 状态点id: `agent-status`
## 构建与安装
```bash
./build.sh install # 编译 + ad-hoc 签名 + 装入 ~/.config/codeisland/plugins/
# 然后重启 MioIslandpkill -f "Mio Island" && open -a "Mio Island"
```
- 只编译 arm64Apple Silicon
- `id`kebab-case必须与 `Info.plist``CFBundleIdentifier` 后缀(`com.mioisland.plugin.<id>`)、`build.sh` 的 `PLUGIN_NAME`、输出 bundle 文件名完全一致。
- `NSPrincipalClass` 格式:`<ModuleName>.<ClassName>`。
## 插件协议(不要改 selector
`Sources/MioPlugin.swift` 是宿主协议的逐字拷贝,宿主通过 `responds(to:)` + `perform(_:)` 匹配,**改任何 selector 都会导致静默加载失败**
- 必备:`id / name / icon(SF Symbol) / version / activate() / deactivate() / makeView() -> NSView`
- 可选:`viewForSlot("header", context:) -> NSView?` —— 返回刘海头部常驻小视图(约 20×20 起,宽度可自适应),这是"常驻显示"的关键入口
- 视图一律用 `NSHostingView(rootView:)` 包 SwiftUI
## 数据源与约定
- **DeepSeek 余额**:读 `~/.config/token-bar/status.json`(由 `~/token-bar/token_bar.py` 每 30 分钟抓取写入)。**DeepSeek 没有公开账单 API**billing/transactions/usage 均 404充值/消耗明细用 `~/.config/token-bar/balance_history.json` 快照差分推算(余额上涨 >¥1 记为充值)。
- **RunCat**:猫帧渲染器与速度曲线来自 `~/CodeM/playgrounds/default/RunCat/``CatArt.swift` + `Theme.swift` + `Metrics.swift` 拷贝进插件 Sources。速度 = 0.4 + 3.6×(CPU/100)^0.6 循环/秒EMA α=0.3,相位驱动。
- **Agent 状态**Kimi Code 用 `~/.kimi-code/sessions/**/wire.jsonl` 最新 mtime 判定TRAE 用 `ps` 统计 TRAE SOLO CN 进程 CPU。
## Kimi Code → MioIsland 事件桥(会话状态上岛)
- 桥接脚本:`~/.kimi-code/hooks/mio-island.py`,把 Kimi Code hook 事件翻译成 MioIsland 原生协议(与 Claude Code 的 `codeisland-state.py` 同格式),发 Unix socket `/tmp/codeisland.sock`
- 已在 `~/.kimi-code/config.toml` 注册 15 个 `[[hooks]]`UserPromptSubmit/PreToolUse/PostToolUse/Stop/SessionEnd 等)。
- **限制**Kimi 的 `PermissionRequest` 是只读事件,岛上只能显示"等待审批",不能代替终端批准。改 hook 配置后只对新会话生效。
## MioIsland 设置
- 偏好:`~/Library/Preferences/com.codeisland.app.plist` 的 `notchCustomization.v1`JSON 字符串),含 `defaultGeometry.notchHeight`(岛的下探高度,当前 48、`horizontalOffset`、`maxWidth`。改完需重启 MioIsland。
- 已 pin 的插件列表在同 plist 的 `PinnedPluginIds`
## 安全注意
- `~/.config/token-bar/config.json` 含 API Key不要打印/外发。
- 插件在宿主进程内运行,无沙箱——谨慎引入外部依赖,保持零依赖纯 Swift/SwiftUI。