• v1.6.8 02ee46c862

    nntrivi2001 released this 2026-09-17 08:11:04 +00:00 | 198 commits to main since this release

    Drag your lanes into order, name them, and read the diff

    The lane strip is yours to arrange. Drag a tile onto another to move it there, or press Alt+←/→ with a tile focused — the keyboard path, since HTML5 drag-and-drop has no touch gesture and does not auto-scroll an overflowing strip. The order is a per-viewer preference, not a lane fact: it persists to localStorage (agenthub.workspace.laneOrder) exactly like the split-view layout beside it and writes nothing server-side, so GET /api/lanes and agenthub lanes keep answering in id order. A lane the stored order has never seen lands at the end rather than wherever a stale index would put it; a stored id whose lane is gone is skipped.

    A lane can be renamed in place. Click its name in the detail header (a pencil appears on hover) — Enter saves, Escape and clicking away cancel, and an empty name clears the title, which puts the lane's cwd back in its place. Renaming is display-only: a managed lane's branch name was slugified from its title once, at creation.

    "Lane 23 ·" is gone. The word cost a third of the tile's top row and said nothing; the bare #23 stays, because that number is how the CLI addresses a lane (agenthub stage --lane 23).

    The uncommitted-files tooltip is now a real panel. GET /api/lanes/:id/git returns files as {path, status, added, deleted} records instead of raw porcelain lines, with per-file line deltas from one extra git diff --numstat HEAD (staged and unstaged together). Hover — or focus, or tap — the N modified · N untracked text on a lane card and you get one row per file: the status letter colour-coded, the directory truncated before the filename ever is, and each row's +N −M aligned under a total. It is portalled to the document body, so the Workspace's own scroll box cannot clip it, and it stays open while the pointer travels into it. added/deleted are null where git has no delta to report — an untracked file (its content is deliberately not read off disk; a lane mid-build can have a 100 MB artifact), a binary file, a rename, or a repo with no commit to diff against.

    Bad input to PATCH /api/lanes/:id is a 400, not a 500. Renaming made a lane column reachable from a text field for the first time, so the guard is column-wide rather than a special case: any non-scalar patch value (links excepted — it is stored as JSON) is rejected with EBADFIELD, and the SQLITE_CONSTRAINT family maps to 400 as well. A title is trimmed and capped at 200 characters, and null clears it rather than violating the NOT NULL.

    Upgrade note

    GET /api/lanes/:id/git's files changed shape — it was an array of raw git status --porcelain strings and is now an array of records. Anything parsing those strings needs updating; nothing in AgentHub itself did outside the lane card.

    Downloads