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

Releases: wxtsky/CodeIsland

v1.0.27

30 May 02:55
@wxtsky wxtsky
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

中文

  • 修复 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
Loading

v1.0.26

30 May 02:19
@wxtsky wxtsky
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

中文

  • 新增 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)
Loading

v1.0.25

26 May 02:46
@wxtsky wxtsky
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

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_hooks config 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 会尊重你的删除、不再补回。

Loading
loveforgeter, Robot1128, and ramdrop reacted with hooray emoji
3 people reacted

v1.0.24

29 Apr 07:37
@wxtsky wxtsky
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

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-agent and qodercli from 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 PermissionRequest hook 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.jsonc over opencode.json so OpenCode users on the recommended format no longer see CodeIsland resurrect a sibling .json on 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.runProcess no longer block the main thread; all subprocess waits now have hard timeouts (5–10s) and the slow paths dispatch off-main (#139)
  • Harden UserPromptSubmit prompt extraction (nested payload/data containers, userPrompt / text fallback 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 的 PermissionRequest hook — 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 提示词提取(支持 nested payload/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

Ardakilic, jerry0804, and 2 other contributors
Loading
Ardakilic, tommytroylin, and Dan4Use reacted with thumbs up emoji
3 people reacted

v1.0.23

25 Apr 14:13
@wxtsky wxtsky
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

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 ExitPlanMode so 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_HOME in 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 tty variable shadowed Terminal.app's tab tty property) (#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 with kiro --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 property tty 同名导致 Strategy 1 静默失效)(#124)
  • 设置里新增"忽略指定路径的 Hook"——按子串过滤 claude-mem 等后台插件触发的事件 (#125)
  • 设置里新增"Webhook 转发"——hook 事件以 JSON POST 到外部端点,方便对接钉钉/飞书/Slack (#115)
  • 新增 Kiro CLI 最小可用支持——hooks 写到 ~/.kiro/agents/codeisland.json,启动用 kiro --agent codeisland (#127)
Loading

v1.0.22

23 Apr 06:30
@wxtsky wxtsky
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

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_id matching — 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 waitingOnApproval states render on the island for users of the Codex desktop app, not only the CLI.
  • 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) — hookEventName alias and nested payload.session_id compatibility 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 got quickTypeProbe byte-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 + blur in 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). fullscreenLatch now 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 activateTerminalApp relied on a custom title that most users never set. Rewritten as a single AppleScript that tries tty → auto tab name → custom title → deminiaturize-first-minimized fallback.
  • #103 — Qwen hook PermissionRequest hung until Qwen's internal timeout because the installer was omitting the per-entry timeout field 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 warningsSessionSnapshot, ChatMessage, ToolHistoryEntry, SubagentState, AgentStatus now declare Sendable; Codex supervisor bundle id marked nonisolated. 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.

Contributors

alvis-HaoH and Hatiaa
Loading
coygeek, Phukety, and Hakstar reacted with thumbs up emoji coygeek and Phukety reacted with laugh emoji coygeek and Hakstar reacted with hooray emoji coygeek, Nthin, and Hakstar reacted with heart emoji coygeek reacted with rocket emoji coygeek reacted with eyes emoji
4 people reacted

v1.0.21

16 Apr 17:23
@wxtsky wxtsky
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

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 setenv hacks (#81)
  • Japanese + Korean localization (PR #72) — now en / zh / ja / ko / tr
  • PID ancestry tracking for sh -c wrappers — 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 scriptscripts/dev-hot-restart.sh watches 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 autoScreenPoller dropped from 1s to 5s; CGWindowListCopyWindowInfo was 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

  • .gitignore reorganized with categories; *.log / *.tmp globs (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.sh SIGTERM-first with SIGKILL fallback, absolute --app-path preserved, seen counter initialized from wc -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 setenv hack (#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 autoScreenPoller 1s → 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

Loading

v1.0.20

13 Apr 08:28
@wxtsky wxtsky
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

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 hasNotch variable (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

Thanks to contributors: @Hatiaa @lkangd @yuancafe

Contributors

yuancafe, lkangd, and Hatiaa
Loading

v1.0.19

12 Apr 01:55
@wxtsky wxtsky
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

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 upgrade command 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 修复

  • 修复 v1.0.18 启动闪退问题 (PR #66)
  • 加固 SSH 远程主机输入校验,防止无效配置导致闪退 (#63)
  • 精简 CLI Hook 事件配置(减少 ~100 行重复代码)
  • 修复中文本地化缩进问题
Loading

v1.0.18

11 Apr 10:26
@wxtsky wxtsky
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

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

Contributors

igoobit, Jason213, and 4 other contributors
Loading
Previous 1 3
Previous

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