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

3.4 KiB
Raw Blame History

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

构建与安装

./build.sh install    # 编译 + ad-hoc 签名 + 装入 ~/.config/codeisland/plugins/
# 然后重启 MioIslandpkill -f "Mio Island" && open -a "Mio Island"
  • 只编译 arm64Apple Silicon
  • idkebab-case必须与 Info.plistCFBundleIdentifier 后缀(com.mioisland.plugin.<id>)、build.shPLUGIN_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 没有公开账单 APIbilling/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.plistnotchCustomization.v1JSON 字符串),含 defaultGeometry.notchHeight(岛的下探高度,当前 48horizontalOffsetmaxWidth。改完需重启 MioIsland。
  • 已 pin 的插件列表在同 plist 的 PinnedPluginIds

安全注意

  • ~/.config/token-bar/config.json 含 API Key不要打印/外发。
  • 插件在宿主进程内运行,无沙箱——谨慎引入外部依赖,保持零依赖纯 Swift/SwiftUI。