-
Notifications
You must be signed in to change notification settings - Fork 201
Releases: wxtsky/CodeIsland
v1.0.27
中文
- 修复 Cursor / Trae / Qoder / Factory 点击灵动岛跳到"最近用过的窗口"而不是正在对话的那个——现在按项目目录匹配对应 workspace 窗口 (#199)
- SSH 远程主机也会安装自定义 CLI 的 hooks(claude / nested 格式)——此前远程只配置内置 CLI (#192)
English
- Fix Cursor / Trae / Qoder / Factory click-to-jump raising the most-recently-used window instead of the one running the clicked session — now matches the workspace window by project folder (#199)
- Install custom CLI hooks on SSH remote hosts too (claude / nested hook formats) — previously only the built-in CLIs were configured remotely (#192)
Assets 4
v1.0.26
中文
- 新增 pi / Oh My Pi (OMP) 编码 agent 集成 (#197)
- 远程 SSH socket 按用户隔离(
/tmp/codeisland-<uid>.sock),修复多用户共享主机上的事件串话 (#193) - 修复 SSH 隧道在 ControlMaster 多路复用下
ssh -N立即退出、被误报为ssh exited (0)的问题 (#190) - 修复 iTerm2 全屏 / 跨 Space 时点击会话跳到错误窗口 (#198)
English
- Add pi / Oh My Pi (OMP) coding agent integration (#197)
- Isolate the remote SSH socket per user to fix event cross-talk on shared hosts (#193)
- Fix the SSH tunnel being misreported as
ssh exited (0)under ControlMaster multiplexing (#190) - Fix iTerm2 click-to-jump landing on the wrong fullscreen / cross-Space window (#198)
Assets 4
v1.0.25
English
New tools & features
- Cline support — the VSCode-extension agent is now tracked end to end (file-based hooks, click to jump back to VSCode) (#156)
- Zellij & Kaku multiplexers — active-pane detection for jump-back and visibility suppression; tmux pane resolution hardened and pane hints persisted across app restarts
- Buddy (ESP32) overhaul — Bluetooth pairing state machine, priority write queue, extended protocol (model / stats / subagent / event / tool-history / pairing), and recovery from CoreBluetooth authorization changes; signing script gains an ad-hoc fallback for local Bluetooth testing (#187)
- Dynamic Island width is now adjustable on real notch displays too, not just external screens (#172)
Fixes
- AskUserQuestion in plan mode — fix the
undefined is not an object (evaluating 'H.map')crash and answers coming back empty; the answer key now matches Claude Code's question-text lookup, so plan-mode questions no longer re-prompt in a loop (#170, #180) - Parallel tool calls auto-denied — batches like "Read 4 files" that share a tool_use_id are no longer collapsed as duplicates and denied; each request now waits for its own decision (#169)
- Respect user-deleted hook events — auto-repair no longer re-adds Codex (or other CLI) hook events you removed by hand; only a fully-absent or stale config is repaired (#182)
- Hermes on SSH remotes — the remote install script now configures Hermes too, so SSH-monitored Hermes sessions emit events (#176)
- Codex — clean up the legacy
codex_hooksconfig key, defer to Codex auto-review mode instead of popping an approval card, and persist always-allow rules - Permissions not blanket-denied — activity events (Stop, or a parallel PostToolUse from Notion/MCP plugins) no longer drain a pending approval before you can react (#147)
- Cursor sub-agents — parallel sub-agent processes collapse onto a single session card instead of flooding 10+ (#148)
- Default mascot is honored whenever no session is actively working, not just when there are zero sessions (#149)
- WezTerm-family pane resolution by cli tty, complete IDE responses for flat-hook tools, and preserved remote OpenCode host identity
中文
新增工具与功能
- Cline 支持 — VSCode 扩展形态的 agent 现在可全程跟踪(基于文件的 hooks,点击跳回 VSCode)(#156)
- Zellij & Kaku 多路复用器 — 识别活跃 pane 用于跳转和可见性抑制;tmux pane 解析加固,pane 线索在 app 重启后保留
- Buddy(ESP32)大改 — 蓝牙配对状态机、优先级写队列、扩展协议(model / stats / subagent / event / 工具历史 / 配对),以及从 CoreBluetooth 授权变化中恢复;签名脚本新增 ad-hoc fallback 便于本地测蓝牙 (#187)
- 灵动岛宽度 现在在真实刘海屏上也能调节,不再只对外接屏生效 (#172)
修复
- plan mode 下的 AskUserQuestion — 修复
undefined is not an object (evaluating 'H.map')崩溃及回答变空;answer key 改为与 Claude Code 的 question-text 查找一致,plan mode 不再循环重弹问题 (#170, #180) - 并行工具调用被自动拒绝 — 像"Read 4 个文件"这种共享 tool_use_id 的批量请求不再被当成重复项合并拒绝,每个请求各自等待你的决定 (#169)
- 尊重用户删除的 hook event — auto-repair 不再把你手动删掉的 Codex(或其他 CLI)hook event 补回;只有完全缺失或损坏的配置才会被修复 (#182)
- SSH 远程的 Hermes — 远程安装脚本现在也会配置 Hermes,SSH 监控的 Hermes 会话能正常上报事件 (#176)
- Codex — 清理旧版
codex_hooks配置项、自动审查模式下不再弹审批卡、持久化 always-allow 规则 - 权限不再被一锅端拒绝 — 活动事件(Stop,或 Notion/MCP 插件并行的 PostToolUse)不再在你反应过来之前把待审批清空 (#147)
- Cursor 子 agent — 并行子 agent 进程合并到一张会话卡,不再刷出 10+ 张 (#148)
- 默认角色 — 只要没有会话在实际工作就会生效,而不仅是完全没有会话时 (#149)
- WezTerm 系终端按 cli tty 解析 pane、flat-hook 工具的 IDE 响应补全、保留远程 OpenCode 主机标识
Migration notes
升级后建议到 设置 → Hooks → Reinstall Hooks 一次,让新版 codeisland-bridge 与 hook 配置(Cline / 远程 Hermes / Codex 调整等)落到位生效。Codex 用户若曾手动精简过 ~/.codex/hooks.json 的 event,本版起 auto-repair 会尊重你的删除、不再补回。
Assets 4
v1.0.24
English
- Add Wear OS Buddy companion app — approve / deny / skip directly from your watch over BLE, full Bash command preview on incoming approvals (#144, PR by @liushaoxiong10)
- Distinguish
cursor-agentandqoderclifrom the desktop IDEs they share config files with — sessions render as "Cursor CLI" / "Qoder CLI" and click-jumps go to the host terminal instead of the IDE (#134) - Add Settings → Sessions → "Plugin Sub-Sessions" (separate / merge / hide) for events fired by plugins running inside another agent like omo inside OpenCode (#123)
- Register Codex's
PermissionRequesthook so shell-escalation / managed-network approvals trigger the panel + sound instead of the session sitting silently in "running" forever (#145) - Add Settings → Behavior → "Auto-Expand Panel on Agent Completion" toggle (default on, preserves current behavior) (#146)
- Prefer
~/.config/opencode/opencode.jsoncoveropencode.jsonso OpenCode users on the recommended format no longer see CodeIsland resurrect a sibling.jsonon every install / repair pass (#132) - Show "+N Sub" badge on session cards with active subagents; hover any subagent icon to see agent type + current tool (#141)
- Empty default for the auto-approve tools list — every tool call now flows through the approval path; the previous default silently approved 9 internal tools (TaskCreate / TaskUpdate / TodoWrite / EnterPlanMode etc.) which hid those calls
- Fix App hangs silently on launch —
detectClaudeVersion/ConfigInstaller.install/verifyAndRepair/TerminalActivator.runProcessno longer block the main thread; all subprocess waits now have hard timeouts (5–10s) and the slow paths dispatch off-main (#139) - Harden
UserPromptSubmitprompt extraction (nestedpayload/datacontainers,userPrompt/textfallback fields, preserve leading/trailing whitespace) and add a 100-entry hook event ring buffer to diagnostics export — future "prompt not showing" reports can be triaged from one zip (#103) - Fix update flow leaving "Update Failed" banner after the "Up to date" alert (#137 → PR #138 by @Drswith)
- Skip Sparkle initialization in DEBUG builds without a bundle ID so Xcode runs no longer crash on launch (#133, PR by @jerry0804)
- Polish Turkish translation for stylistic consistency (#135, PR by @Ardakilic)
中文
- 新增 Wear OS Buddy 手表伴侣 — 通过 BLE 直接在手表上 approve / deny / skip 审批,待审批时显示完整的 Bash 命令预览 (#144, PR by @liushaoxiong10)
- 区分
cursor-agent/qodercli与对应的桌面 IDE — 会话显示为 "Cursor CLI" / "Qoder CLI",点击跳转到承载它的终端而不是桌面 IDE (#134) - 新增 设置 → 会话 → "插件子会话" 三选一(独立 / 合并到主会话 / 隐藏),处理 OpenCode 里 omo 这类插件触发的 hook 事件 (#123)
- 注册 Codex 的
PermissionRequesthook — shell 提权 / 网络访问审批现在会触发审批面板和声音,而不是默默卡在 "running" (#145) - 新增 设置 → 行为 → "Agent 完成时自动展开面板" 开关(默认开,保持原行为)(#146)
- 当
~/.config/opencode/opencode.jsonc存在时优先写入它 — OpenCode 推荐用 .jsonc 格式,主端不再每次安装都重新创建一个.json兄弟文件 (#132) - session 卡片上显示 "+N Sub" 标签提示有 N 个活跃 subagent,hover 任意 subagent icon 查看 agent type + 当前工具 (#141)
- 自动批准工具列表默认清空 — 每次工具调用都走审批流程;之前默认会静默批准 9 个内部工具(TaskCreate / TaskUpdate / TodoWrite / EnterPlanMode 等),那些调用在面板上看不到
- 修复启动卡死 —
detectClaudeVersion/ConfigInstaller.install/verifyAndRepair/TerminalActivator.runProcess不再阻塞主线程,所有子进程等待都有 5–10s 硬超时,慢路径都搬到后台 (#139) - 加强
UserPromptSubmit提示词提取(支持 nestedpayload/data容器、新增userPrompt/text字段 fallback、保留代码片段前后空格),并在 diagnostics 导出里加 100 条 hook event ring buffer — 后续"提问不展示"类问题可以从一个 zip 里直接定位 (#103) - 修复 Sparkle 检查更新流程:在已显示"已是最新版本"后又弹"更新失败"的 bug (#137 → PR #138 by @Drswith)
- DEBUG 模式下没 bundle ID 时跳过 Sparkle 初始化,避免 Xcode 直接跑时启动崩溃 (#133, PR by @jerry0804)
- 润色土耳其语翻译(统一 Title Case + 修正 "ERTELE" 误译)(#135, PR by @Ardakilic)
Migration notes
升级后请到 设置 → Hooks → Reinstall Hooks 一次,让新版 codeisland-bridge 落到 ~/.codeisland/ —— 这样 #123 plugin sub-sessions / #134 cursor-cli + qoder-cli 区分 / #145 Codex permission hook / #103 增强诊断 才会生效。已显式调过自动批准列表的用户不受 default 清空影响(UserDefaults register 不会覆盖已 set 的值)。
Contributors
Assets 4
v1.0.23
English
- Add ESP32 BLE companion device — port mascot animations to a real desk pet (#131)
- Make auto-approve tools configurable in Settings; default no longer auto-approves
ExitPlanModeso plan-mode exit prompts an approval dialog (#126) - Fix TraeCli YAML hook injection corruption on mixed indentation; preserve user comments via surgical merge (#122)
- Respect
$CODEX_HOMEin codex auto-config (local + ssh) (#129) - Add WorkBuddy bundle ID for one-click jump from CodeIsland (#130)
- Fix remote SSH sessions being force-flipped to idle on local timeout (#121)
- Fix Ghostty click-to-jump no-op via System Events Accessibility fallback (#84)
- Fix Terminal.app: minimized window not raising + multi-tab clicks all jumping to same tab (root cause: AppleScript
ttyvariable shadowed Terminal.app's tabttyproperty) (#124) - Add configurable cwd-substring blocklist for hook events — filter out background plugins like claude-mem (#125)
- Add webhook forwarding for hook events to external HTTP endpoints — pipe agent activity into DingTalk / Lark / Slack receivers (#115)
- Add minimum Kiro CLI support — install hooks into
~/.kiro/agents/codeisland.json(launch withkiro --agent codeisland) (#127)
中文
- 新增 ESP32 BLE 桌面伴侣设备——把吉祥物动画移植到实体小屏 (#131)
- "自动批准工具"可在设置里逐项配置,默认不再自动批准
ExitPlanMode,退出 plan 模式会弹审批 (#126) - 修复 TraeCli YAML 在混合缩进下 hook 注入损坏的问题,并通过 surgical 合并保留用户注释 (#122)
- codex 自动配置遵循
$CODEX_HOME(本地和 ssh 都生效)(#129) - 新增 WorkBuddy 一键跳转 (#130)
- 修复远程 SSH 任务被本地 timeout 误判完成 (#121)
- 修复 Ghostty 点击灵动岛无反应——加 System Events Accessibility 兜底 (#84)
- 修复 Terminal.app 最小化无法打开 + 多终端点哪个都跳同一 tab(真 root cause:AppleScript 局部变量
tty跟 tab propertytty同名导致 Strategy 1 静默失效)(#124) - 设置里新增"忽略指定路径的 Hook"——按子串过滤 claude-mem 等后台插件触发的事件 (#125)
- 设置里新增"Webhook 转发"——hook 事件以 JSON POST 到外部端点,方便对接钉钉/飞书/Slack (#115)
- 新增 Kiro CLI 最小可用支持——hooks 写到
~/.kiro/agents/codeisland.json,启动用kiro --agent codeisland(#127)
Assets 4
v1.0.22
English
New
- Sparkle-based auto-update — CodeIsland now self-updates via the Sparkle 2 framework with ed25519 signed appcast. No more opening GitHub Releases by hand; the About page tells you when an update is ready. (Users installed via Homebrew stay managed by
brew upgrade.) From v1.0.22 onwards, Sparkle is in charge. - Session monitoring engine overhaul — four deep improvements after studying the space for a week:
- Precise
tool_use_idmatching — Claude's PreToolUse / PermissionRequest / PostToolUse now pair by id, fixing a real bug where concurrent tool invocations could cancel each other's pending approval in the same session. - Warp terminal: exact pane jumping — reads Warp's SQLite state to find the exact tab running your session, then sends
⌘<n>via a CGEvent to switch. Handles firmlink path normalization (/tmp↔/private/tmp) and prefers active > focused > newest when multiple panes match. - Live JSONL tailing for Claude — streams the transcript file via
DispatchSource.makeFileSystemObjectSource+ inode change detection. AI output now shows up in the island panel as it streams, not only when the Stop hook fires. - Codex Desktop (app-server) support (#79) — subscribes to Codex.app's JSON-RPC app-server so thread lifecycle and
waitingOnApprovalstates render on the island for users of the Codex desktop app, not only the CLI.
- Precise
- Click-to-jump on approval card (#108 by @alvis-HaoH) — clicking the permission approval jumps to the terminal tab and auto-collapses after the jump validates.
- pi-mono support (#111) — pi-mono, the 38k★ TS-plugin-based Claude client.
- Third-party CLI extensibility + bridge hardening (#120) —
hookEventNamealias and nestedpayload.session_idcompatibility in the bridge; non-blocking alarm window tightened from 8s to 4s; Hermes/Gemini events no longer get dropped on the floor. - Default mascot setting + smart-suppress in IDE terminals (#102 #112) — pick any mascot as the idle indicator; smart-suppress now applies when a recognized IDE terminal is frontmost.
- Performance benchmark guardrails — micro-benchmarks for
scanLines,HookEvent.init,drainMessages,WarpPaneResolver— CI will catch hot-path regressions now. Transcript tailer gotquickTypeProbebyte-prefilter: real-world mixed transcript 11.76ms → 5.49ms (-53%).
Bug fixes
- #100 — Approval/question cards rendered fully transparent on macOS 26 until a hover forced a redraw; also "vanished when mouse approached the notch, reappeared near the buttons." Root cause:
compositingGroup + blurin BlurFadeModifier's identity state triggered a macOS 26 compositor regression where the offscreen layer never fully rendered. Dropped the compositingGroup; blur + opacity now apply directly without the offscreen buffer. - #104 — Returning from a fullscreen space to a non-fullscreen one could leave the island hidden for up to 1.5s (or longer if fullscreen detection misreported).
fullscreenLatchnow clears immediately on space change when the new space is not fullscreen. - #116 — Clicking a Terminal.app session in the notch only shook the card because
activateTerminalApprelied on acustom titlethat most users never set. Rewritten as a single AppleScript that tries tty → auto tab name → custom title → deminiaturize-first-minimized fallback. - #103 — Qwen hook
PermissionRequesthung until Qwen's internal timeout because the installer was omitting the per-entrytimeoutfield on Claude-style hook writes. Now emits the correct ms-unit timeouts (86400000 for PermissionRequest, 5000 otherwise). - #105 #106 #107 #119 — Hook installer used to destructively reformat
~/.claude/settings.json/~/.opencode/opencode.json(stripped comments, reordered keys, escaped slashes). Now preserves user formatting, keys, and comments across install/uninstall. - Copilot — the hook installer no longer clobbers a user-set Copilot version field.
- Compiler warnings —
SessionSnapshot,ChatMessage,ToolHistoryEntry,SubagentState,AgentStatusnow declareSendable; Codex supervisor bundle id markednonisolated. Release build is now 0-warning.
中文
新功能
- 基于 Sparkle 的自动更新 — CodeIsland 现在通过 Sparkle 2 框架实现自动更新,appcast 由 ed25519 签名。不用再去 GitHub Releases 手动下载,About 页会在有新版本时提示。(Homebrew 安装的版本继续交给
brew upgrade管理。)从 v1.0.22 开始,Sparkle 接管后续升级。 - 会话监测引擎全面升级 — 一周深挖后做了四项改进:
tool_use_id精准配对 — Claude 的 PreToolUse / PermissionRequest / PostToolUse 按 id 配对。修了一个真 bug:多工具并发时 PostToolUse 会误删同 session 其他待审批请求。- Warp 终端精准 pane 跳转 — 读 Warp SQLite 找到运行当前会话的确切 tab,然后 CGEvent 发
⌘<n>切过去。处理了 firmlink 路径归一化(/tmp↔/private/tmp),多 pane 匹配按 active > focused > newest 排序。 - Claude 会话 JSONL 实时 tail — 用
DispatchSource.makeFileSystemObjectSource+ inode 换盘检测增量读 transcript 文件。流式输出实时显示在岛上面板,不用等 Stop 事件触发。 - Codex Desktop(app-server)支持 (#79) — 订阅 Codex.app 的 JSON-RPC app-server,thread 生命周期和
waitingOnApproval状态都能精确映射到岛。Codex 桌面 app 用户(不只是 CLI)也能享受权限审批识别。
- 审批卡片点击跳转 (#108, by @alvis-HaoH) — 点权限审批跳转到终端 tab,跳转验证成功后自动收起岛。
- pi-mono 支持 (#111) — pi-mono 是 38k★ 的 TS 插件式 Claude 客户端。
- 第三方 CLI 扩展性 + bridge 加固 (#120) — bridge 兼容
hookEventName别名和嵌套payload.session_id;非阻塞 alarm 窗口从 8s 收紧到 4s;Hermes/Gemini 等 fork CLI 的 hook 事件不再静默丢弃。 - 默认角色设置 + IDE 终端智能抑制 (#102 #112) — 无会话时可以选任意 mascot 作为岛上默认角色;智能抑制现在对所有被识别为 IDE 终端的前台 app 生效。
- 性能 benchmark 回归闸 — 为
scanLines/HookEvent.init/drainMessages/WarpPaneResolver加了微基准,CI 会抓热路径回归。Transcript tailer 新增quickTypeProbe字节预筛:真实混合场景 11.76ms → 5.49ms (-53%)。
Bug 修复
- #100 — macOS 26 上权限/询问卡片一弹出就透明,hover 才显形;而且"鼠标移向刘海 → 消失、移回按钮位置 → 重现"。根因是
BlurFadeModifier在 identity 态里用了compositingGroup + blur,macOS 26 的 SwiftUI 合成器对这个组合有回归:offscreen 层的渲染结果异常,直到某个 invalidation 触发重新合成。去掉了 compositingGroup,blur+opacity 直接作用在子视图上,不再触发合成器 bug。 - #104 — 从全屏 space 切回非全屏 space 时,岛可能被隐藏最长 1.5s(全屏检测误报时更久)。
fullscreenLatch现在在 space 切换时立即清除,不再等 1.5s poller。 - #116 — Terminal.app session 点击跳转只看到卡片抖一下。原因:
activateTerminalApp依赖大多数用户从没设过的custom title,匹配不到就什么都不干。重写为单个 AppleScript:tty → auto tab name → custom title → deminiaturize 最后一个兜底。 - #103 — Qwen 的 hook PermissionRequest 会挂起直到 Qwen 内部超时。原因:installer 在写 Claude 风格 hook entry 时漏了 per-entry 的
timeout字段,Qwen 靠这个控制每条 hook 的超时。现在正确填 ms 单位超时(PermissionRequest 86400000 = 24h,其他 5000 = 5s)。 - #105 #106 #107 #119 — Hook installer 之前会破坏性重排
~/.claude/settings.json/~/.opencode/opencode.json(删注释、改字段顺序、escape 反斜杠)。现在 install/uninstall 全过程保留用户格式、字段顺序和注释。 - Copilot — hook installer 不再覆盖用户手动设置的 Copilot version 字段。
- 编译警告清理 —
SessionSnapshot/ChatMessage/ToolHistoryEntry/SubagentState/AgentStatus全部声明Sendable;Codex supervisor bundle id 标nonisolated。Release build 0 warning。
Thanks to contributors: @alvis-HaoH @Hatiaa and everyone who opened issues or shared reproduction steps this cycle.
Assets 4
v1.0.21
English
New
- TraeCli support — 11th supported CLI, with YAML config merge / remove that preserves user-authored blocks (PR #98)
- Inline approval in session list — click an approval on the session list and Allow / Always / Deny / Details stay right there without stealing the surface (PR #98)
- Dismiss button on permission prompts — temporarily collapse the card; the same session's next permission request brings it back (PR #93)
- Auto-reconnect for remote SSH — hosts marked "Auto Connect" now retry with 5/15/45/120/300s backoff when the tunnel drops (#92)
- Per-host SSH_AUTH_SOCK — optional field in the Add Host form, lets 1Password / Bitwarden / Secretive agents sign the handshake without
launchctl setenvhacks (#81) - Japanese + Korean localization (PR #72) — now en / zh / ja / ko / tr
- PID ancestry tracking for
sh -cwrappers — hooks executed through a transient shell now correctly attribute to the long-lived CLI process (#98) - Event normalization for snake_case hooks — TraeCli/Coco style
pre_tool_use,session_start,permission_request, etc. map to canonical names (#98) - dev-hot-restart script —
scripts/dev-hot-restart.shwatches Sources/Tests, rebuilds on change, and only restarts the running app if the build succeeds (PR #94)
Bug fixes
- #89 — Stop clobbering user
opencode.json: when the file is unparseable (comments, typos, non-object root), the installer now bails out instead of overwriting it with a 2-key minimal config. First write drops a timestamped.codeisland.bak.*alongside the original. - #92 —
autoScreenPollerdropped from 1s to 5s;CGWindowListCopyWindowInfowas a measurable Energy Impact hit and NSWorkspace notifications already cover the common paths - #92 — SSH stderr readability handler is now cleared on ssh process exit; the leaked handler was pinning CPU at 100% after tunnel drops (reported by @jiz4oh)
- #95 — Source inference from process ancestry when a hook arrives without
--source. omo-triggered OpenCode events no longer fall back to "claude" and no longer double-up with the real OpenCode session (thanks @edso404 for the full trace) - #101 — Fenced code blocks in chat previews now keep their newlines and the language identifier no longer leaks into the code body (thanks @senshinya for the root cause)
- Infer source now covers all supported CLIs, not just the one named by
--source
Chore / docs
.gitignorereorganized with categories;*.log/*.tmpglobs (PR #96)- README intro and About tagline bumped to "11 tools" everywhere
- Trailing whitespace cleanup in ConfigInstaller
- Post-merge: hardcoded Chinese strings in the inline approval UI localized via L10n
dev-hot-restart.shSIGTERM-first with SIGKILL fallback, absolute--app-pathpreserved,seencounter initialized fromwc -c
中文
新功能
- TraeCli 支持 — 第 11 个支持的 CLI,YAML 配置 merge / remove 保留用户原有块 (PR #98)
- 会话列表内 inline 审批 — 会话卡片上直接 Allow / Always / Deny / 详情,不再抢占面板 (PR #98)
- 权限请求忽略按钮 — 暂时收起卡片,同会话下次权限请求会重新弹出 (PR #93)
- 远程 SSH 自动重连 — 勾了"Auto Connect"的 host 断开后按 5/15/45/120/300 秒退避重连 (#92)
- 每主机 SSH_AUTH_SOCK — Add Host 表单可选项,1Password / Bitwarden / Secretive 类 SSH agent 不再需要
launchctl setenvhack (#81) - 日语 + 韩语本地化 (PR #72) — 现在覆盖 en / zh / ja / ko / tr
- PID 沿 ancestry 追踪 — 通过
sh -c启动的 hook 现在能正确归到长生命周期 CLI 进程 (#98) - snake_case hook 事件归一化 — TraeCli/Coco 的
pre_tool_use/session_start/permission_request等统一映射到标准事件名 (#98) - dev-hot-restart 脚本 —
scripts/dev-hot-restart.sh监听 Sources/Tests,构建成功才重启运行中的 app (PR #94)
Bug 修复
- #89 — 不再覆盖用户
opencode.json:文件含注释/语法错误/根不是 object 时,installer 直接 bail out,不再把整个文件换成 2-key 最小 config。首次写入前会留一份.codeisland.bak.<时间戳>备份 - #92 —
autoScreenPoller1s → 5s;CGWindowListCopyWindowInfo对 Energy Impact 可见,NSWorkspace 通知已经覆盖主场景 - #92 — ssh 子进程退出时清理 stderr readability handler;之前 handler 没清会在关闭 FD 上被紧密回调,pin 住 100% CPU (@jiz4oh 反馈)
- #95 — hook 不带
--source时沿进程 ancestry 推断 source。omo 触发的 OpenCode 事件不再误落回 "claude",也不再和真实 OpenCode 会话双显 (感谢 @edso404 的完整定位) - #101 — 聊天预览里的围栏代码块保留换行,语言标识不再混入代码内容 (感谢 @senshinya 的根因分析)
杂项 / 文档
.gitignore重新分类,加*.log/*.tmp通配符 (PR #96)- README 和 About 全部统一为 "11 tools / 11 种工具"
- ConfigInstaller 行尾空格清理
- 合并后修复:inline 审批 UI 里硬编码的中文改走 L10n
dev-hot-restart.sh优先 SIGTERM 再 SIGKILL,绝对路径--app-path保留,seen计数从wc -c初始化
Thanks to contributors: @lkangd @liushaoxiong10 @alvis-HaoH @leizhiyuan @jiz4oh @Hatiaa @senshinya @edso404 @xiangzi-jiangxin
Contributors
- @leizhiyuan
- @xiangzi-jiangxin
- @liushaoxiong10
- @lkangd
- @jiz4oh
- @edso404
- @alvis-HaoH
- @Hatiaa
- @senshinya
Assets 4
v1.0.20
English
New: Haptic Feedback on Hover (#78)
- Trackpad haptic feedback when hovering over the notch (opt-in in Settings → Behavior)
- Three intensity levels: Light / Medium / Strong
- Uses macOS
NSHapticFeedbackManager— silently no-ops on non-Force Touch devices
New: Configurable Notch Height Modes (PR #80)
- Align panel to real notch height, menu bar height, or a custom value (15–60pt slider)
- Fixes 1px gap on MacBook Air 15-inch and other models
- Settings → Appearance → Top Bar Height
New: Qwen Code Support (#77)
- Full support: hook installation, PID detection, dedicated purple hexstar mascot
- Hook format compatible with Claude Code (timeout in milliseconds)
Bug Fixes
- #75 — Bare thinking idle timeout increased from 60s to 300s (GPT-5.4 xhigh mode can think for 5 min)
- #73 — Fix Ghostty quick terminal triggered by
app.activate()during terminal jump - Fix force-unwrap crash in NotchPanelView (
cwd!) and ConfigInstaller (lines.last!) - Fix HookServer socket permission TOCTOU — set
umask(0o077)before listener creation - Fix HookServer connection context memory leak — added 5-minute timeout cleanup
- Fix deprecated
.foregroundColor()API →.foregroundStyle() - Remove unused
hasNotchvariable (compiler warning) - Fix settings close flicker (PR #70)
- Defer completion card collapse when mouse is inside panel (PR #69)
New Mascots & Icons
- Dedicated mascot and icon for: Qwen, Trae, StepFun, AntiGravity, WorkBuddy, Hermes
中文
新增:悬停触控板震动 (#78)
- 鼠标悬停在刘海上时触发触控板震动反馈(设置 → 行为 中开启)
- 三档强度可选:轻 / 中 / 强
- 基于 macOS
NSHapticFeedbackManager,Force Touch 触控板自动生效
新增:Notch 高度模式可配置 (PR #80)
- 面板对齐真实 notch 高度、菜单栏高度或自定义值(15–60pt 滑块)
- 修复 MacBook Air 15 寸等机型面板与 notch 的 1px 间隙
- 设置 → 外观 → 顶部高度对齐
新增:Qwen Code 完整支持 (#77)
- Hook 安装、PID 检测、专属紫色六角星 mascot
- Hook 格式与 Claude Code 兼容(timeout 单位为毫秒)
Bug 修复
- #75 — Bare thinking idle 超时从 60s 提升到 300s(GPT-5.4 xhigh 模式思考可达 5 分钟)
- #73 — 修复跳转 Ghostty 时
app.activate()触发 quick terminal - 修复 NotchPanelView 中
cwd!和 ConfigInstaller 中lines.last!的 force-unwrap 崩溃 - 修复 HookServer socket 权限 TOCTOU — 创建 listener 前设置
umask(0o077) - 修复 HookServer connectionContext 内存泄漏 — 添加 5 分钟超时清理
- 修复弃用 API
.foregroundColor()→.foregroundStyle() - 移除未使用的
hasNotch变量(编译器警告) - 修复设置关闭闪烁 (PR #70)
- 修复鼠标在面板内时 completion 卡片过早收起 (PR #69)
新增 Mascot 和 Icon
- 为 Qwen、Trae、StepFun、AntiGravity、WorkBuddy、Hermes 添加专属 mascot 和品牌 icon
Assets 4
v1.0.19
English
In-App Updates
- Update check, download progress, and installation now happen entirely within Settings → About — no more popup dialogs
- Real-time download progress bar with percentage
- Homebrew users see the
brew upgradecommand inline
New CLI Support (PR #64)
- Built-in support for Trae, Trae CN, StepFun, CodyBuddyCN, AntiGravity, WorkBuddy, Hermes
- Custom third-party CLI extensibility in Settings → Hooks
Turkish Language (PR #67)
- Full Turkish (Türkçe) localization
Bug Fixes
- Fix v1.0.18 startup crash caused by resource bundle lookup (PR #66)
- Harden SSH remote host input validation — prevent crash on invalid config (#63)
- Deduplicate CLI hook event configs (~100 lines removed)
- Fix zh localization indentation issue
中文
应用内更新
- 检查更新、下载进度、安装全部在 设置 → 关于 页面内完成,不再弹出系统对话框
- 实时下载进度条显示百分比
- Homebrew 用户直接显示
brew upgrade命令
新增 CLI 支持 (PR #64)
- 内置支持 Trae、Trae CN、StepFun、CodyBuddyCN、AntiGravity、WorkBuddy、Hermes
- 设置 → Hooks 中可自定义第三方 CLI
土耳其语支持 (PR #67)
- 完整的土耳其语 (Türkçe) 本地化
Bug 修复
Assets 4
v1.0.18
English
Bug Fixes (7 issues resolved)
- #44 — Qoder stuck in "thinking" after interrupt: native app timeout reduced from 300s to 30s
- #46 — IDEA stale sessions reappearing: PID liveness check on session restore, dead-PID sessions skipped
- #45 — Claude Code session end error: graceful socket shutdown (1s delay) + Python hook error handling + bridge exit(0)
- #52 — Hover frame drops in permanent status bar: debounced idle hover (0.3s un-hover delay) + ChatMessageRow render optimization (Equatable view extraction)
- #56 — Configurable island width: 50%–150% slider in Appearance → Panel for non-notch displays
- #32 — Hooks migrated from
~/.claude/hooks/to~/.codeisland/with automatic legacy cleanup - #36 — Interaction cards: covered by existing approval cards + multi-question AskUserQuestion wizard
Terminal Activation Improvements
- IDE window matching uses shortest-title heuristic to avoid same-name project confusion
- Terminal not running → fallback to app launch instead of silent failure (iTerm, Terminal.app, Ghostty)
- Alacritty/Warp/Hyper/Tabby/Rio: window-level matching via System Events title search
- tmux detached sessions: skip stale inner TTY, fall back to CWD or app-level activation
- Native app source fallback: prefer desktop app when termBundleId is missing
Session Lifecycle Hardening
- Native app sessions (OpenCode, Codex, etc.) auto-removed when desktop app quits
- Dedup guard: CLI discovery no longer merges into stale native app sessions
- Discovery zombie prevention: tighter freshness window (30s) when process start time unknown
- Stuck approval/question sessions timeout after 300s without process monitor
- Codex: added SessionEnd hook event for faster cleanup
中文
Bug 修复(7 个 issue)
- #44 — qoder 打断后卡在 thinking:native app 超时从 300 秒降到 30 秒
- #46 — IDEA 退出后旧 session 重现:恢复时检查 PID 存活,死进程 session 直接跳过
- #45 — Claude Code session 结束报错:socket 延迟 1 秒删除 + Python hook 错误处理 + bridge exit(0)
- #52 — 常驻状态栏 hover 掉帧:idle hover 延迟 un-hover 防震荡 + ChatMessageRow 渲染优化(Equatable 视图提取)
- #56 — 灵动岛宽度可设置:外观 → 面板中 50%–150% 滑块,仅影响非刘海屏
- #32 — hook 文件从
~/.claude/hooks/迁移到~/.codeisland/,自动清理旧路径 - #36 — 交互确认卡片:已有 approval 卡片 + 多问题 AskUserQuestion 向导覆盖
终端跳转改进
- IDE 窗口匹配:最短标题启发式,避免同名项目跳错
- 终端未运行时 fallback 启动 app,不再静默失败(iTerm、Terminal.app、Ghostty)
- Alacritty/Warp/Hyper/Tabby/Rio:通过 System Events 标题搜索实现窗口级匹配
- tmux detached:跳过失效的内层 TTY,回退到 CWD 或 app 级激活
- Native app 源 fallback:termBundleId 缺失时优先跳转桌面 app
Session 生命周期加固
- Native app session(OpenCode、Codex 等)桌面 app 退出后自动清理
- Dedup 防护:CLI 发现不再合并到已退出的 native app session
- 发现机制防僵尸:processStart 未知时使用 30 秒严格窗口(原 5 分钟)
- 无 monitor 的 approval/question session 300 秒后超时重置
- Codex:添加 SessionEnd hook 事件加速清理
Thanks to issue reporters: @syuim @caibaicheng @WangNingkai @igoobit @angao @Jason213