Repository navigation
Conversation
chore: synchronize v0.1.15 release history into dev
At 24rem the body was a few characters short of "The process running in it will be terminated.", so the last word wrapped alone and left a gap at the end of the first line that read like something was holding the space. 28rem fits it; `max-w-full` still narrows the dialog on a phone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Narrow screens started on tabs but could be toggled to the grid, and the choice was stored, so a phone that tried the grid once kept it. Below `md` the grid is not a preference to respect but a layout that does not work: it hands each pane fewer columns than a command line needs, and a PTY has one size for the whole session, so a phone that held the sizing in a grid would narrow every other screen's panes with its own. Below `md` the panel is now always tabbed and the toggle is hidden. A choice stored on a wide screen is kept, not cleared, so widening the window brings it back; a toggle cannot be stored from a narrow one. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
While a soft keyboard is up the panes keep their grid and the cell crops, anchored to the bottom on the assumption that the prompt is the last row. That holds once a screen has filled and fails on a terminal just opened: its prompt is the top row, so the crop showed the empty rows under it and hid the line being typed behind the keyboard. The crop now follows the cursor: the lowest window that still shows the cursor's row. A full screen crops as before; a fresh one shows its top. It only adjusts how far below the cell's edge the terminal sits, so nothing is resized and the pointer geometry follows; scrolled back, it is left alone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Two gaps in how the repository's git state reaches the screen. Nothing said when git was stopped in the middle of something. A rebase an agent left half done in a pane looked like any other afternoon in the status list. `git/diff/operation.rs` now reads libgit2's repository state — merge, rebase, cherry-pick, revert, bisect — and, for a rebase, the step counters git writes under `rebase-merge` or `rebase-apply`. The snapshot carries it with the number of unmerged files, counted before the display cap. The TUI's repo header and the web footer show it ahead of the ahead/behind counts as `REBASING 2/5 · 3 conflicts`; conflicts left by a stash pop or checkout, which leave no operation behind, are shown on their own. And the web log was a bare list. The TUI already decorated its commit list from the refs (`LogDecorations`); the web log route now builds the same decorations per page and each commit carries its refs — HEAD, local branches, tags, remote branches, in that order — whether it is ahead of or behind the upstream, and whether it is a merge. The viewer renders the refs as chips within its palette and marks divergence from the server's walk rather than guessing that the first N rows are the ahead ones, which a merge puts out of order. The new wire fields are optional, so the protocol version stands. The fixture carries a mid-rebase status with a conflict and a commit with every ref kind, and the contract test re-narrows the new unions against lists tied to them in both directions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… the end `spawn_editor` slept the 75ms grace and looked at the child once. A failure that was only slow to happen — a loaded machine starting the process late — read as "still running", and the launcher reported success for an editor that had already failed. Its test hit exactly that: the fixture editor is the test binary started again, and under a full run it often missed the window, failing the suite about one run in three. The window is now polled, so a failure is reported the moment it happens and a slow start no longer looks like a running editor. The test gives a generous window, which costs nothing because polling returns as soon as the child exits. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…once The first cut put each commit's refs and ahead/behind mark on the log rows. The history a page describes never changes once walked, but its decorations change whenever a ref moves, so every loaded row went stale on its own schedule: a fast-forward kept `HEAD → dev` on the old tip, a push left rows marked ahead after the footer had taken the count back, rows below the first page were never refreshed at all, a failed refresh dropped the change for good, and switching branches at the same commit moved neither HEAD nor any ref target, so nothing asked again. Decorations now come from `/api/log/decorations` — refs by oid and the ahead/behind sets, for the whole repository — and the client replaces them wholesale. It asks again whenever the status stream's HEAD, branch or refs digest changes (status now carries the digest the snapshot already computes), aborts an answer a newer change has overtaken, and retries a failure after five seconds so a change is never lost. Log pages carry only what cannot go stale: the history and each commit's merge flag. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Two gaps in the repository-wide decorations. Pointing a branch at a different upstream — `--set-upstream-to`, `--unset-upstream` — changes what ahead and behind mean without moving HEAD, the branch, or any ref target, so nothing asked again and the arrows stayed answers to the old upstream. Status's tracking now names the upstream, and the decorations are keyed on it too. And the answer had no ceiling: a repository with years of release tags or a remote with hundreds of branches sent every label on every refresh. It is cut at `MAX_LOG_DECORATION_REFS` after ranking every label across the repository, so remote branches go first, then tags, and the branch HEAD is on is never dropped; `truncated` says when that happened. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Three loose ends in the git-state work. A stopped `git am` read as `REBASING`, but its way out is `git am --continue`/`--abort`, not the rebase commands. It has its own kind and reads `APPLYING 1/3`; where libgit2 cannot tell am from rebase it checks the `applying` marker git leaves in `rebase-apply`. The ahead and behind sets stop at the walk's own cap, and the answer said nothing — so deep enough rows silently lost their arrows. That cap now counts toward `truncated` alongside the ref-label cap. And the viewer took `truncated` off the wire and dropped it. It now reaches the log, which notes under the list that some marks are not shown, so a missing chip is not read as an absent ref. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The cap check took one walk result too many into a set, then removed an arbitrary element to get back under it — which could be HEAD or any other recent commit, and could differ from one load to the next, so an arrow near the top of the log could vanish while a commit a thousand deep kept one. The walk now keeps the first commits it yields, which are the newest, and pulls one more only to learn whether it stopped short. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
`nightcrow-memory mcp` is a stdio MCP server each agent's CLI runs. It offers notes (write, search, recent, delete) and a status board (post, read), kept in one SQLite file per project under ~/.nightcrow/memory and found through the two variables nightcrow already sets on every pane, so agents in the same project meet without configuration and an agent started elsewhere reaches nothing. There is no server between them. The host only starts a plugin some pane names or one with `watch_on_signal`, and a single writer process would add nothing SQLite does not already do across processes. The one place that needed care is opening: switching to WAL answers BUSY at once rather than waiting out the busy timeout, so agents starting together failed to open a store that was merely being opened; it is retried. Every read is prefixed with a notice that entries are another agent's unverified notes, authors are labelled with the client name and a prefix of the pane token, and text over a limit is refused rather than cut. The crate inherits the workspace version, so the release policy and the push hook's plugin scope list it beside the recovery plugin. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01K9Y6nr4J3kMp6GVQNUd9Ry
How to install it and register it with Claude Code, Codex and OpenCode, what each tool does, its limits, and the three things to know before turning it on: a note is another agent's words, the store is neither private nor authenticated, and nothing scans what agents write. The architecture notes record that it is a pane helper outside the plugin protocol, and the decision record why it opens SQLite directly and which alternatives were set aside. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01K9Y6nr4J3kMp6GVQNUd9Ry
feat(memory): share notes between the agents in one project's panes
fix(viewer): preserve screen on refresh and prepare v0.1.16
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Promote dev to main for v0.1.16. Includes browser screen restoration after refresh and the accumulated development changes since v0.1.15.
The viewer preserves Repo/Content/Terminal selection in browser storage; repository content restoration does not override a restored Terminal screen. The application and workspace package versions were advanced with the official preparation script.
Verification: development PR #86 and merged dev CI passed on Windows, macOS, and Linux; Windows and Linux workspace gates, 899 frontend tests, reproducible frontend bundle build, release automation tests, and exact next-patch policy validation pass. The official release workflow builds and tests all four binary targets before publishing the assets and SHA256SUMS.