Skip to content

Release 0.7.0 - #28

Merged
join3r merged 49 commits into
mainfrom
0.7.0
Oct 20, 2026
Merged

join3r merged 49 commits into
mainfrom
0.7.0

Conversation

@join3r

@join3r join3r commented Oct 19, 2026

Copy link
Copy Markdown
Owner

Release branch for 0.7.0. Dry-run release build (run 39329947259) and CI before tagging v0.7.0.

🤖 Generated with Claude Code

join3r and others added 30 commits October 13, 2026 23:48
Right-click → Archive (or ⌘⇧A on the open chat, or the selection bar for
several) moves a chat out of the tree into a folded "Archived (N)" section at
its foot. Nothing is lost: it opens, searches (with an archive badge) and comes
back with "Move out of archive", or on its own with the next turn. The delete
confirmation now offers "Archive instead".

Same server store and placement rule the iOS chat list already used, so both
clients agree on what is archived.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
pi writes a parallel batch's tool results to the session only after every
call has finished, but the chat fetches each picture the moment its own call
ends. All but the last of several pictures made at once read as "no longer
available" until the chat was reopened. Hold the bytes from
tool_execution_end until the turn settles.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The extension was already cross-platform; the desktop half and the server
only took Macs. Linux now registers the native host under ~/.config for
Chrome, Brave, Chromium and Edge, names the browser from /proc/<ppid>/exe,
starts it by its executable (left alone when one is already running) and
opens folders with xdg-open. The server accepts Linux announcements, and
browser-only wording says "computer" instead of "Mac". Snap and Flatpak
browsers stay out: their sandbox will not start a host outside it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
On Linux the browser id is an executable that Stem runs to start the
browser, and it arrives from the native host's hello. A peer with the
token could name any program. Stem now starts, or hands the extensions page
to, only known browser binaries in system folders (Chrome, Brave, Edge,
Chromium) or the known launcher commands; anything else gets "open it
yourself".

Verified the Linux paths with the real extension in Debian's Chromium 155:
the host manifest in ~/.config/chromium/NativeMessagingHosts is found, and
the host's parent reads as /usr/lib/chromium/chromium.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
scripts/linux-test.mjs runs Stem in a Debian container (tests/linux): the
E2E suite under Xvfb, or a desktop to watch over noVNC on :6080 with
Debian's chromium for setting browser control up by hand. node_modules,
dist and the browsers live in volumes, so Mac native modules never meet
Linux and only a lockfile change costs an npm ci.

tests/e2e/browser-live.spec.ts is the first test that drives a real
browser through the whole chain: Set up registers the host in a throwaway
HOME, a real Chromium loads the extension, and a new [e2e:browser] fake
turn opens a fixture page and reads it back through the server, desktop
host, native host and extension. It passes on macOS (Chrome for Testing)
and in the container (Debian chromium), and fails on Linux with the old
Mac-only gate put back. CI installs Chromium so both jobs run it.

Set up opens nothing under STEM_E2E, and the Load-unpacked spec now runs
on Linux too. The Arc sidebar test lost a dead 2 s wait that made it
flake under a loaded full run.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Ask about this window: Quick Chat shortcut that captures the front window
- Ask about this window: use the app's MCP server, and computer control in that window
- Ask about this window: judge the substance, read the whole thread first
- Window capture: look on-screen windows up first; warm the peek helper
- Chats named after a turn no longer turn bold again
- Ask about this window: keep the model row when a fresh session starts
- Merge branch '0.7.0--i-have-an-idea-if-you-press-a-shortcut-a' into 0.7.0--chats-opened-via-discuss-a-window-featur
- Window capture: on-screen lookup first, and a slow full list is no longer fatal
- Mail: answer progress questions while personas work
- Mail status check: fence the snapshot against injected instructions
- iOS: hide the connection dot while online, inline list titles
- Secretary brings personas in without asking
- Secretary sees errands through
- Scheduled checks from mail reply in that thread, not a new mail each
- Mail: name the computer personas a lead cannot start here
- Mail: try the job before asking the user for help
- Inter-Stem mail design doc
- Inter-Stem design: relay software section
- Inter-Stem design: honest discoverability, sender certs, enforced external context
- Inter-Stem design: collaboration purpose, full memory by default
- Inter-Stem design: every incoming mail approved before agents see it
- Relay: Go stem-relay with protocol spec, vectors and tests
- Relay: fix security review findings
- Relay: cap per-IP mail posts and streams per key
- Inter-Stem mail: Stem client, held inbound, approved drafts, gated turns
- Inter-Stem: fix security review findings
- Inter-Stem: late mail fails closed when the sender's key can't be confirmed
- Inter-Stem: seal with AES-256-GCM instead of ChaCha20-Poly1305
- Inter-Stem UI: addresses, Requests, held mail, drafts, compose to a person
- Untrack the node_modules symlink a deploy commit added
- Keep the working dots under a live reply that already has text
- Mail: answering an approval moves the conversation out of the Inbox
- Please generate missing art for crypt
- Ship the global relay's key; add its deploy files
- Relay: take the proxy-appended X-Forwarded-For entry, not the client's
- Push gateway on the global relay for Stems without the APNs key
- Push gateway: count the client IP first, the global ceiling last
- Relay: count IPv6 clients by /64 in per-IP limits
- Let a company keep inter-Stem mail inside
- Never use a global-relay address under a company restriction
- Window chats load the app's MCP tools directly
- Inbox: archiving a chat clears its Return-to-chat row
- iOS chat list: show the last list at once; gzip big RPC answers
- Phone mail: a slim list, one conversation's mail on open
- Places in replies link to Maps
- Draw diagrams with pele, live while they stream
- Sanitize iOS diagrams and let the page run no script
- Draw charts, tables, stats and comparisons while they stream
- Stop the chat-list scan running the server out of memory at boot
- Folder mirrors leave out what .gitignore leaves out
- iOS: a long chat no longer goes blank after sending
- iOS: chat folders
- Browser control: several browser profiles at once
- Browser control: limit personas and chats to chosen browser profiles
- Browser control: never send a profile-limited action to an older Mac
- Browser control: carry the profile and allowed list to the Mac's host
- Quick Chat shrinks back to the bar after a new thread
- Test Stem on a real Linux PC over SSH
- Run the E2E suite on Windows, and drive a Windows VM over SSH
- Never open a file link that names another machine
- Repo locks see Windows paths as one tree
- A mirrored folder freezes when its root vanishes on Windows
- Path checks in two tests hold on Windows too
- Close the offline cache's handle when the file will not open
- Unit tests that hold on Windows, or say why they cannot
- Saves land on Windows when the file is open elsewhere
- Two E2E specs that held only on POSIX
- Windows installer that updates itself
- Browser control on Windows
- Browser control's Windows pipe gets a random name
- Native host and desktop prove the token to each other
- Computer control and Ask about this window on Windows
- A live spec for Ask about this window on Windows
- Dictation on Windows and Linux
- iOS: convert every HEIC/HEIF variant to JPEG before it leaves the phone
join3r and others added 19 commits October 18, 2026 19:32
- Scheduler: a run the server died under is recorded and run once more
- Computer control on Linux (GNOME on Wayland)
- Linux computer control: real-session fixes
- Kill switch on GNOME: Stem's own input told apart by timing, not device name
- Commands to this computer run here; readable dropdowns on Linux
- Same-machine commands: decided by the server, checked like device commands
- GNOME extension updates without a login
- Kill switch survives an extension reload; no updates mid-run
- Quick Chat status pill placed bottom-left on GNOME Wayland
- Windows window mode: newlines and tabs typed as key presses
- Apps started by a command: say how to keep them open
- Sign-ins longer than five minutes no longer strand onboarding
- Exec tests stub the same-machine check; its catches say why they are quiet
- Give Stem a real application menu
- Serve the relay on relay.heystem.app
- Move the global relay to relay.heystem.app
- Window assistant: browser windows go to the browser tool
- Window assistant: don't repeat the page title in the browser pointer
- Settings selects: left-align the open list on Linux and Windows
- Public share links for an answer or a whole chat
- Strip control characters from share reports
- Share: three scopes from an answer, mail threads, 30-day links, 100 cap
- Share links: link previews in chat apps, never in search
- Relay serves the whole share viewer origin
- iOS: share an answer or thread as a link
- Settings: rename 'Mail with other Stems' to 'Your email address', stack the add field
- Share: off for addresses whose domain publishes access=closed
- Browser control: reload the extension behind a pre-handshake native host
- Browser control: take a password manager's frame out so Stem can attach
- Relay: verifikačné kódy cez Fastmail z heystem.app
- Browser control on Linux: AppImage and other Chromium browsers
- AppImage launch check: real path, safe folders, fstat on the opened file
- Windows installer: first launch after an install gets pi running
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- New guide pages: Mail with other Stems, Share links (served to Stem by read_stem_guide)
- Settings: dictation on Windows/Linux, updates per platform, your email address, Windows computer control
- Chats: archive, menu bar, share; Mail: status questions, Requests; folders skip .gitignore
- Release notes: mail is text only, drafts need approval, share icon and company policy

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Apple accepted the 0.7.0 dry-run DMG, then stapler lost the connection
fetching the ticket (Error 68) and failed the mac job.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Chrome hung once the extension opened its tab, waiting on the login
keychain, so every macOS run failed with "did not finish the action in
time". Playwright passes --use-mock-keychain to the browsers it starts;
this test spawns its own.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Three dry runs for 0.7.0 failed with stapler Error 68 (CloudKit
connection lost from the macOS runner) after notarization was accepted.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…w CI browser

- Every stapler call (staple and validate) retries; the fourth 0.7.0 dry run
  stapled on the third build and then lost CloudKit on validate
- browser-live gets two retries on CI; the extension once took over 45 s to
  connect on a macOS runner

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…a warning

Five 0.7.0 dry runs lost CloudKit from the macOS runner; the fifth had the
app stapled and validated, then failed six staples of the accepted DMG.
The app inside keeps its stapled ticket and every check on it; the DMG's
own ticket only saves Gatekeeper an online lookup.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@join3r
join3r merged commit 52f2361 into main Oct 20, 2026
14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant