Skip to content

Tags: ababol/bnot

Tags

v0.1.21

Toggle v0.1.21's commit message
Ship one stable Bnot.dmg per release; drop versioned DMG

v0.1.20

Toggle v0.1.20's commit message
Fix AskUserQuestion notch UI dropped after mid-turn SessionEnd; bump …

…bridge APPROVAL_TIMEOUT 120s→600s

v0.1.19

Toggle v0.1.19's commit message
Stable DMG download URL and FAQ install/update wording

Landing Download buttons now link to a stable releases/latest/download
URL backed by a new release-workflow step that uploads a renamed copy
of the universal DMG.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

v0.1.18

Toggle v0.1.18's commit message
Drop stale hooks from ended turns; unblock stopFailure scanning

Late SubagentStop / preToolUse from a finished turn could re-arm isThinking
and leave the bnot stuck in the working state. Mark sessions idle on
sessionEnd and gate the relevant hooks via STALE_TURN_EVENTS in
handleMessage. stopFailure no longer sets status=completed, which had
wedged the session for 5s under COMPLETED_MIN_MS and blocked legit
status transitions on a still-alive Claude.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

v0.1.17

Toggle v0.1.17's commit message
Add /release skill so releases run through GitHub Actions

The release workflow reads the version from the tag of a GitHub Release and
writes it into the repo inside the runner only. The skill codifies that
contract — computes the next version, pushes main, and calls
`gh release create` to trigger the workflow — so no one bumps versions in
tauri.conf.json / Cargo.toml / package.json by hand.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

v0.1.16

Toggle v0.1.16's commit message
Detach transcript watcher on auto-compact and trim redundant state

- session-manager evicted the prior session entry on terminalPid reuse
  (auto-compact rotation) without detaching its watcher, leaking one
  fs.watch per compact.
- Drop transcriptPath from AgentSession (sidecar + web types). The
  watcher's own map is the only consumer; the field added redundant
  state across three layers.
- Move the interrupt mutation into SessionManager.applyInterrupt() so
  the watcher stops reaching into sm.sessions directly, matching the
  pattern of every other state change.
- applyInterrupt now early-returns if state is already cleared, avoiding
  a spurious emitUpdate when duplicate markers appear in one chunk.
- Drop redundant serde(rename) on transcript_path in hook_input.rs.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

v0.1.15

Toggle v0.1.15's commit message
Clear stuck Working state when user presses Esc to interrupt

Claude Code does not fire any hook on Esc, so Bnot's notch was stuck
on "Working" indefinitely after an interrupt. Tail the per-session JSONL
transcript for the `[Request interrupted by user` marker (the same signal
Claude Code uses internally) and clear isThinking/currentTool when seen.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

v0.1.14

Toggle v0.1.14's commit message
Hide Working/Napping text and tighten pid identity to pid+cwd

- Hero card no longer renders "Working..." or any idle text — the spinner
  / zzz indicator already conveys those states. Only non-active statuses
  (approval / answer / done / error) get a text label. Switched to
  flex+gap-1 so spacing stays even when the row is omitted.
- Drop the dead `currentTool !== "Unknown"` guard — the literal "Unknown"
  is never produced by any code path.
- Promote the workingDirectory `"unknown"` placeholder to an exported
  UNKNOWN_CWD constant so the pid-identity checks reference a single
  source of truth instead of stringly-typed sentinels.
- Tighten orphan / dedup / push-live to require pid AND cwd to match —
  pid alone isn't a stable identity on macOS (recycled pids can land on
  another Claude, defeating a comm-only check). Resolution is computed
  once into hookForLivePid so the skip-create and push-live loops see
  consistent matches even if sessions mutate during the orphan-check
  await.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

v0.1.13

Toggle v0.1.13's commit message
Authenticate socket peers and fix AskUserQuestion render

Move the Unix socket gateway into the Tauri Rust process and reject any
peer whose executable isn't a known bnot-bridge path (getpeereid +
LOCAL_PEERPID + proc_pidpath, socket chmod 0600). Drop the unused shell
and global-shortcut plugins.

Fix AskUserQuestion showing the generic Yes/No approval UI: preToolUse
and permissionRequest fire from separate bridge processes and can land
in either order, but AskUserQuestion only ever uses pendingQuestion —
clear pendingApproval on the question side and skip it on the perm side.

Keep the bridge alive across SHUT_WR until the gateway closes its end so
LOCAL_PEERPID succeeds — fire-and-forget hooks were previously dropped.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

v0.1.12

Toggle v0.1.12's commit message
Fix stale Working/Planning status and animate plan mode indicator

- Bridge maps all permission_mode values explicitly (including "default"
  → "normal") so sessionMode resets when exiting plan mode
- Track idle sessions to discard stale preToolUse events that arrive
  after sessionEnd, preventing isThinking from getting stuck
- Clear isThinking in postToolUse handler for consistent state
- Split _bootstrapGhostty into focus/no-focus paths so terminal ID
  capture doesn't steal window focus
- Replace static plan mode dots with animated sequential bar indicator

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>