Repository navigation
Conversation
chore: synchronize main into dev after v0.1.20
The viewer's scripts run TypeScript directly, which older Node.js releases reject, and CI uses Node.js 26. Pinning it lets nvm select the same version locally. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01K9Y6nr4J3kMp6GVQNUd9Ry
`nightcrow notify [MESSAGE]`, run inside a pane, sends the pane's NIGHTCROW_PANE_TOKEN to the daemon as a one-shot request. The daemon asks each repository's hub which live pane holds the token; that hub broadcasts an `attention` frame, which now carries an optional message. Hubs also publish these to a session-wide `Notices` registry, for listeners not attached to the repository (Web Push, next). Entering a plugin's `needs_attention` recovery state is published the same way, once per entry. The web viewer decodes `attention` and shows the message as a toast. The TUI keeps its project-tab marker and ignores the message. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01K9Y6nr4J3kMp6GVQNUd9Ry
`web::viewer::push` listens to the session's `Notices` and sends each as a
Web Push message to every subscribed browser. One background thread
encrypts to the browser's key (RFC 8291 aes128gcm, checked against the
RFC's worked example), signs a VAPID token (RFC 8292 ES256) and posts over
https with ureq. Notices for one pane are coalesced for 10 seconds, and a
404/410 answer drops the subscription.
The key and subscriptions live owner-only in ~/.nightcrow/push. New
authenticated routes: GET /api/push/key and POST /api/push/{subscribe,
unsubscribe,status,test}. An endpoint must be https on a public host name;
there is no push-service allowlist, since anyone able to subscribe can
already run shell commands here.
Adds p256, hkdf, aes-gcm and base64.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K9Y6nr4J3kMp6GVQNUd9Ry
A loopback-bound viewer refuses any Host that is not a loopback name, to stop DNS rebinding. A local HTTPS proxy such as `tailscale serve` forwards the browser's host name (machine.tailnet.ts.net), so it was refused too, leaving off-loopback binding as the only way to put HTTPS in front. `[web_viewer] allowed_hosts` lists names the loopback check also accepts, matched without the port and ignoring case. A listed name stays safe from rebinding because the operator controls what it resolves to. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01K9Y6nr4J3kMp6GVQNUd9Ry
scripts/visual/Dockerfile copies nothing from the checkout, which is bind-mounted at run time, but `docker build .` still uploaded the whole tree, including a multi-gigabyte target/. Ignore everything. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01K9Y6nr4J3kMp6GVQNUd9Ry
A service worker (public/sw.js) shows each push and, when tapped, opens the viewer with `notice-repo`/`notice-pane` in the address. The page applies that once at startup: it remembers the pane as the project's last one and puts the project in front before its first poll, so the usual attach focus selects it. The worker caches nothing and answers no fetch. The settings menu gains a Notifications section: a per-browser switch, a test button, and the reason when push cannot be offered (not a secure page, iOS outside a Home Screen app, permission blocked, no browser support, or no daemon key). Permission is asked only from that switch. A subscription the daemon has dropped is dropped in the browser on the next read, so the switch does not claim "on" falsely. docs/notifications.md covers enabling it, `tailscale serve` with `allowed_hosts`, iOS, and why notifications may not arrive. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01K9Y6nr4J3kMp6GVQNUd9Ry
feat: notify a person when a terminal finishes, including Web Push
The splash predated the terminal row, the phone view switcher and the mark-only phone header, so the first paint changed shape when the app arrived. It now shows the header as Brand/Header draw it, list and content over the terminal on wide screens, and the bottom switcher on a phone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01K9Y6nr4J3kMp6GVQNUd9Ry
fix(viewer): draw the loading splash in today's shell outline
Describes a pull-based setup that needs no code: startup commands open an orchestrator and workers, nightcrow-memory notes carry tasks and results, and nightcrow notify reports back. Explains why pushing input into other panes is outside the plugin host's trust boundary. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01K9Y6nr4J3kMp6GVQNUd9Ry
…'s style Icon buttons in the header and on project tabs were a different size and lit a background on hover, unlike the terminal toolbar. They now share its 24px square and colour-only hover; a tab's close button keeps its red. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01K9Y6nr4J3kMp6GVQNUd9Ry
fix(viewer): give header and project-tab buttons the terminal toolbar's style
Settings, sign-out and tab-close icons were pinned to 14px, so they looked smaller than the terminal toolbar's icons in the same 24px buttons. They now use the icons' default size. The `open` button's plus stays at 14px, sized to its text. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01K9Y6nr4J3kMp6GVQNUd9Ry
fix(viewer): draw header and tab icons at the terminal toolbar's 16px
Preserve functional commits and prepare patch release v0.1.21 after all required CI checks passed.
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 the tested development branch to main for patch release v0.1.21.
Release contents:
The preparation PR passed Windows, Linux, macOS, package policy, Rustfmt, and viewer unit/visual checks. Merge this promotion with a merge commit only after its own CI and the development merge CI pass. Official-main CI and the release workflow must pass before the release is reported complete; the workflow publishes the four platform binaries and SHA256SUMS.