Skip to content

Releases: Sma1lboy/kobe

v0.8.41

Choose a tag to compare

@github-actions github-actions released this 31 Jul 08:19

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=1 logs
    the reason to stderr, without ever failing the engine.

v0.8.40

Choose a tag to compare

@github-actions github-actions released this 31 Jul 03:07

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/headless underlines 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 at cols) still painted an attribute into the last visible column; it
    now seals the last visible CELL, wide glyphs included.

v0.8.39

Choose a tag to compare

@github-actions github-actions released this 30 Jul 10:34

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[0m reset 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

Choose a tag to compare

@github-actions github-actions released this 30 Jul 03:11

Patch Changes

  • de22ad4: Add three bundled themes — gruvbox, catppuccin (Mocha/Latte), and rose-pine (Main/Dawn) — bringing the built-in set to ten. Three more (everforest, kanagawa, solarized) are hosted on the landing site and install with kobe 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. Existing reducedMotion keys in state.json are 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 claude until 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 add was validated against the bundled set on the next boot, so it silently reverted to the fallback. Hosts that load ~/.kobe/themes now validate against the registry they just populated, so a user-installed theme survives a restart.

v0.8.37

Choose a tag to compare

@github-actions github-actions released this 29 Jul 20:56

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 bare c. No product behavior change — 0.8.36 was tagged but never published because this gate failed.

v0.8.34

Choose a tag to compare

@github-actions github-actions released this 29 Jul 07:26

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

Choose a tag to compare

@github-actions github-actions released this 29 Jul 07:01

Patch Changes

  • e8fec20: kobe plugin update now 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+2ctrl+9 / ctrl+0 jump 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+1 is skipped (no legacy terminal can encode it, so the first row answers to 2), and under the recent sort the digits visibly reorder with the list rather than becoming stale addresses — press t for the stable default sort if you want fixed positions.

v0.8.32

Choose a tag to compare

@github-actions github-actions released this 29 Jul 06:23

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 paintsSamePixel definition, 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

Choose a tag to compare

@github-actions github-actions released this 29 Jul 04:46

Patch Changes

  • ddb1d16: Release tooling: release.sh now 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

Choose a tag to compare

@github-actions github-actions released this 29 Jul 02:32

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 new ui.reportEvent path.
  • 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.close had prefix-only keys, so ctrl+w hit nothing in a split group while the tab-close binding was gated off)