Releases: Sma1lboy/kobe
Release list
v0.8.41
Patch Changes
-
434792e: Stop the sidebar spinner from running forever after a turn ends
The activity watchdog decided "is this turn still running?" from the engine
transcript's mtime. But an engine parked at its prompt keeps touching its
transcript, so whenever a Stop hook went missing the watchdog re-armed itself
on every window and the task spun indefinitely. It now reads the transcript's
newest turn-COMPLETION marker alongside the mtime: a completion at or after the
turn's start ends it regardless of how recent the writes are, while a long
single turn with no completion yet keeps its badge on the same heartbeat as
before. Engines without completion markers are unchanged.Hook failures are also no longer completely silent —
KOBE_HOOK_DEBUG=1logs
the reason to stderr, without ever failing the engine.
v0.8.40
Patch Changes
-
f6585ff: Render OSC 8 hyperlinks in the fallback parser, and seal styled runs on clipped rows
Two follow-ups to the row-end attribute leak. The pipe-fallback ANSI parser
dropped OSC 8 hyperlinks outright, so a link rendered as plain text there while
@xterm/headlessunderlines it — the mock pane disagreed with the real pane
about what a link looks like. It now underlines a linked run to match. Separately,
the row-end seal only looked at a row's last chunk, so a row wider than the pane
(clipped atcols) still painted an attribute into the last visible column; it
now seals the last visible CELL, wide glyphs included.
v0.8.39
Patch Changes
-
483527b: Fix link underline (and any styled run) bleeding into the rest of the terminal pane
A styled run that reached the terminal's last column — a wrapped URL being the
common case — left its attribute open, so every following row rendered
underlined until something else happened to reset it. Root cause is in
opentui's renderer, which skips its\e[0mreset on the first cell of a new
row; kobe now seals the final cell of a full-width row, replaying an inverse
cell as swapped colors so a cursor or selection parked in the last column stays
visible.
v0.8.38
Patch Changes
-
de22ad4: Add three bundled themes —
gruvbox,catppuccin(Mocha/Latte), androse-pine(Main/Dawn) — bringing the built-in set to ten. Three more (everforest,kanagawa,solarized) are hosted on the landing site and install withkobe theme add https://kobe.sma1lboy.me/themes/<name>.json, as worked examples of the publish path. Every new theme defines both a dark and a light mode using its upstream project's published palette, and was checked so body text, muted text, selected-row text, and the state colors all clear WCAG contrast floors in both modes. -
a36d93f: Fix the horizontal choose-one row (engine picker, new-task dialog, quick composer) mangling its labels once enough choices are present: each label is now unbreakable and the ROW wraps, so a choice like
lazygit (split)moves to the next line whole instead of splitting mid-word. Same fix applied to the quick composer's attachment chips. Also: one status-glyph vocabulary for the sidebar's project and task rows: a project row no longer falls back to a★painted in the brand primary, it uses the same○/●/✓/spinner glyphs and the same tone mapping as a task, so the icon says which STATE a row is in rather than which KIND of row it is. Also: remove the Reduced motion setting. Its spinner replacement animated a running task as●/·— but●is also the static badge for "turn complete, not yet seen", so a task that was still working read as finished-and-unread, sending you to an Inbox that correctly had nothing in it. Every engine now animates with its own brand frame set (claude's·✢✳✶✻✽oscillation, braille elsewhere), and the toast slide-in, materializing sweep, and tab-complete flash are always on. A regression test pins that no spinner frame may reuse a settled-state badge glyph. ExistingreducedMotionkeys instate.jsonare ignored. -
c347624: Trim the bundled themes to three —
claude,conductor,tokyonight. The other ten (catppuccin,dracula,everforest,gruvbox,kanagawa,nord,opencode,osaka-jade,rose-pine,solarized) now install on demand:kobe theme add https://kobe.sma1lboy.me/themes/<name>.json. Nothing about them changed except where they're stored, and the gallery at https://kobe.sma1lboy.me/themes previews all thirteen.If you were using one of the moved themes, kobe falls back to
claudeuntil you install it again with the command above.Also fixes a related bug that would have made this much worse: a theme installed with
kobe theme addwas validated against the bundled set on the next boot, so it silently reverted to the fallback. Hosts that load~/.kobe/themesnow validate against the registry they just populated, so a user-installed theme survives a restart.
v0.8.37
Patch Changes
- 38311b3: Fix the visual ground-truth e2e suite after the Kanban chord moved to
prefix+c: the two Kanban journeys still opened the board with a barec. No product behavior change — 0.8.36 was tagged but never published because this gate failed.
v0.8.34
Patch Changes
- a8b44e9: The Inbox now shows what a chat tab is doing NOW instead of the first prompt it ever got: each tab records its latest live process title, and surfaces that render tabs they don't host (the Inbox above all) fall back to that recording rather than to the frozen first-prompt summary.
v0.8.33
Patch Changes
- e8fec20:
kobe plugin updatenow handles a plugin that renamed its id: settings and state move to the new id, the old registry entry is unregistered (no more duplicate hooks from two copies), and the stale checkout is reported rather than deleted. - 9a0fe5a:
ctrl+2…ctrl+9/ctrl+0jump straight to a task from anywhere, including inside the engine pane. Every sidebar row prints the digit that jumps to it, so the mapping needs no memorising:ctrl+1is skipped (no legacy terminal can encode it, so the first row answers to2), and under therecentsort the digits visibly reorder with the list rather than becoming stale addresses — presstfor the stabledefaultsort if you want fixed positions.
v0.8.32
Patch Changes
- c963345: Sidebar transient state can no longer go stale: the compacting label is gone entirely (its end event is cancellable, so it never had a reliable clearing edge — compaction now reads as the running animation), an interrupt suppresses every activity older than it instead of decaying back into it after a few seconds, and subagent marks only render while the row animates.
- 93d04b4: The sidebar activity icon now reacts on the keypress: enter in an engine tab starts the spinner immediately and a bare esc stops it, through a local optimistic overlay that authoritative engine events and short TTLs always correct — no label text is ever derived from a guess. Needs-input shows as a literal
?(was ◉). - 59fbeb9: Fixed a pane that redrew forever with no new output: the chunk converter decided the zebra-stripe block substitution from opaque color keys while the comparator decided it from resolved RGB, so a half-block cell mixing palette and truecolor (the normal case for carbonyl and the video player) always compared as "changed". Both now share one
paintsSamePixeldefinition, and a self-match invariant test makes any future converter transform prove it has a mirror. - 0a7ebf5: Sidebar "compacting" can no longer stick: a cancelled compaction (no post-compact) or esc-interrupted turn clears its transient mark on the next fresh running edge (turn_complete/error/idle already did), and the compacting word now renders only while the row's animation is live — the label always serves the current state.
v0.8.31
Patch Changes
- ddb1d16: Release tooling:
release.shnow stages every workspace package's version/CHANGELOG rewrite, fixing the 0.8.30 tag that pinned kobe to an uncommitted kobe-daemon bump (that release never reached npm; 0.8.31 supersedes it).
v0.8.29
Patch Changes
- d5c4d7b: Plugin surface grows three ways:
[[settings]]schemas render as per-plugin editors in Settings → Plugins (values stored in the plugin's config.env);[[file_handlers]]route Files-pane opens to a plugin action by filename pattern (mp4 → the video plugin); and UI moments fire as plugin events —file.will-open,file.opened(with via),task.opened,project.opened— over the newui.reportEventpath. - 3fb6540: Half-block renderers (the carbonyl browser plugin, the video player) no longer show grey "zebra stripes" in embedded panes: solid-block glyphs (▀▄█) whose foreground equals their background now render as background-only spaces — visually identical pixels, but the HOST terminal's minimum-contrast feature (iTerm) can no longer darken the glyph half of same-color cells.
- 25243fc: fix: ctrl+w closes the active split leaf while split — the direct chord now matches prefix+w (
workspace.split.closehad prefix-only keys, so ctrl+w hit nothing in a split group while the tab-close binding was gated off)