Skip to content

Kotgent 0.9.0 — editable session names, task linking, and a Web UI that stays in sync

Choose a tag to compare

@github-actions github-actions released this 03 Sep 01:35
· 204 commits to main since this release

Rename a session without replacing it

A session name no longer freezes at creation. Select Rename session from the Web UI’s command palette, or run:

kotgent session rename <id> "new name"

The new label reaches every open browser through the live events socket and appears in kotgent list. Clearing the name restores the automatic kt-… label without changing the session’s identity, terminal, task link, or history.

Names behave the same wherever they are set — start, import, CLI rename, browser rename. They are trimmed, bounded to 200 characters, and rejected if they contain control characters. A rename also survives a concurrent background refresh, which previously could restore the old label.

New route: PATCH /api/v1/sessions/{id}.

Link a session to work from the Web UI

A selected running session with no task now offers Link task in the command palette. The searchable picker shows eligible todo, in_progress, and review tasks from that session’s project and writes the same non-exclusive link as kotgent task claim. Linking a todo task starts it; another session may still link the same work.

The picker refreshes projects whenever it opens. A project read that never succeeds now reports the failure with Try again, instead of displaying “Reading open tasks…” forever. A failed refresh keeps an existing usable list visible.

Selection is stable while live updates reorder the list, search behaves consistently under every browser locale, and an IME candidate committed with Enter cannot accidentally link the highlighted task.

A Web UI that no longer disagrees with itself

Every screen now reads its sessions, tasks, projects, and settings from one shared source, so two parts of the page can no longer show different answers after an update arrives.

Only one action runs at a time. Start, import, lifecycle controls, rename, preferences, task linking, and project delete or restore can no longer overlap and overwrite one another’s result, and the command palette names the action that is still running instead of silently accepting another.

The command palette, link picker, and both directory pickers now behave identically: arrow navigation, hover, filtering, dismissal, scrolling, and composition input follow the same rules everywhere.

Breaking change

task move, task dep, and task delete now reject --session. Those commands address their task directly and always ignored the flag; scripts that supplied the ineffective option must remove it.

Smaller fixes

  • The stale xterm viewport no longer paints a permanent scrollbar gutter in Safari and Firefox.
  • Spellcheck is genuinely disabled on session names and the remaining path, provider, preference, and dependency inputs.
  • A failed project refresh no longer makes a successful mutation disappear from the UI.
  • Directory suggestions keep the highlighted row under the pointer while the list refreshes.

Build and test infrastructure

The Web UI’s pure state, merge, readiness, mutation, matching, and typeahead rules now run directly under Node’s built-in test runner against the shipped ES modules. There is still no package manager, bundler, node_modules, or browser runtime dependency; Node 24 or newer is required only for ./kotlin test.

Kotlin Toolchain 0.12.0 links custom cinterop into test binaries, which earlier versions did not. The ptycheck fixture binary is therefore gone: the real-PTY checks are now ordinary tests under test/pty/, including a new one that proves a tmux attach runs on the spawned pseudo-terminal. The webuicheck --self-check flag is gone for the same reason, replaced by native tests in the module. Only the browser tier still needs a built binary, so ./kotlin build before ./kotlin test remains the rule.

The build also enables the return-value and name-based destructuring checkers. Contributors can install a working-tree build locally with install-local.sh without cutting a release.

Full changelog: v0.8.0...v0.9.0

Upgrade

brew update
brew upgrade kotgent
kotgent install

kotgent install is required: the launchd plist contains a version-qualified Cellar path and otherwise continues starting the previous binary.