Skip to content

0.1.0-lazurio.4: terminal pages in the panel, Lazurio release default, Czech lines, no dead prompt links, view for app users - #89

Merged
immakermatty merged 7 commits into
mainfrom
lazurio/followups-0.1.0-4
Oct 19, 2026
Merged

immakermatty merged 7 commits into
mainfrom
lazurio/followups-0.1.0-4

Conversation

@immakermatty

Copy link
Copy Markdown

Why

A triage of every open issue against 0.1.0-lazurio.3 found five small gaps that people meet in Chat or that can silently strip the overlay from an Environment. The Organization Admin approved all five for 0.1.0-lazurio.4.

What changes

Upstream files

Newly allowlisted in lazurio-fork-ci.yml:

  • apps/server/src/terminal/Manager.ts: one import and one call to the overlay helper.
  • apps/web/src/components/chat/MessagesTimeline.tsx: one import, one hook call and the button's condition.
  • packages/ssh/src/tunnel.test.ts: the expected default download URL.

Already allowlisted, changed further: CommandPalette.tsx (one condition), packages/shared/src/cliRelease.ts and its test (the default), scripts/install.sh and install.ps1 (the default), apps/server/src/mcp/toolkits/preview/tools.ts (one sentence appended; upstream's text stays byte-identical).

What does not change

  • NewThreadLinkView is unchanged; the overlay spec describes what an incoming upstream link still does.
  • The official desktop and mobile apps still show "Copy prompt link"; they are upstream builds.
  • A new chat still gets the Environment browser after its first message (Nová karta is not offered on a new draft thread until its first message #53, option 2 kept).
  • Machines' drop-in keeps T3CODE_RELEASE_REPOSITORY=Lazurio/t3code.

Verification

  • Contract test 36/36. Unit tests of the touched files: 8 files, 215 tests passed. Typecheck clean for the server, web, shared and ssh packages.
  • Every new pin and test was mutation-checked (removing the terminal seam, passing threadId to wrap, restoring the upstream default, dropping allowlist entries, each string and each hide condition): each fails as expected.
  • A throwaway test through the real TerminalManager confirmed the PTY gets t3-thread-1 on open and on restart, and nothing on Windows.
  • Browser checks on Ring 0 with the preview: a thread terminal's printenv AGENT_BROWSER_SESSION and xdg-open, the Czech lines, no "Copy prompt link", and t3 update without the variable offering only Lazurio stables.

Rollout and risks

Preview from main, Ring 0 check in the browser, then stable 0.1.0-lazurio.4. Moving the fleet to .4 is a separate wave with the Admin's go. Until an Environment runs .4, an SSH t3 update there still needs the exported variable. Someone who also has an unmanaged Environment still sees the prompt-link entries, the same as "Add project".

Closes #73, closes #75, closes #77, closes #88. Refs #22 (the trial and snapshot part stays upstream design and is in the runbook), #32.

🤖 Generated with Claude Code

immakermatty and others added 7 commits October 19, 2026 19:22
A thread's agents carry AGENT_BROWSER_SESSION=t3-<thread id>, so a page
an agent opens through BROWSER or xdg-open (on a Remote Environment the
Environment browser's `lazurio browser open`) joins the thread's strip
and shows in its right panel. A thread's terminal did not carry it, so a
page opened there (`gh auth login --web`, a CLI's sign-in, a dev
server's auto-open) sat in the Environment browser where nobody held it
(#73).

The terminal manager now puts the same session, from overlay row 8's
naming helper, into the environment it starts a thread's shell with: one
call to setTerminalSession in terminal/Manager.ts, right where it builds
that environment, on open and on restart. Windows keeps upstream's
environment, as for the thread's agents. The terminal still reaches
upstream's agent scope without its thread, because upstream keys its
bookkeeping of a thread's agents (oomKilled, clear) by thread. A terminal
that is already running gets the session once it restarts.

terminal/Manager.ts joins the allowlist with the Environment browser's
files, the contract test pins the call and the thread-less agent scope of
a terminal, and the runbook's row 8, the overlay spec and the README say
which processes carry the session now.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ode by default

Only the service's drop-in sets T3CODE_RELEASE_REPOSITORY, so a shell on
an Environment (SSH, Codex Desktop over SSH) lacks it. There `t3 update`
listed the releases of pingdotgg/t3code, where upstream's 0.1.0 ranks
above 0.1.0-lazurio.N, and installed upstream T3 Code over the
distribution: the Folder guards, sign-in through Lazurio, the Environment
browser in the panel, self-pairing and the update notice were gone, and a
Machines pin did not bring them back (the channel part of
#22).

The default release repository in cliRelease.ts, where overlay row 4's
variable lives, is now Lazurio/t3code. Every consumer derives the index
and the downloads from it: the update notice (releaseIndex.ts), the
Update button and `t3 service install` (selfUpdate.ts, bootService.ts and
pinnedRuntime.ts), `t3 update`, and their "not published" errors. The
install scripts carry their own copy of the default and follow it. An
explicit T3CODE_RELEASE_REPOSITORY still names another repository.
Outside the distribution's server, two consumers share the default and
are never built from this repository: the mobile app's release check and
the desktop app's SSH runner, whose upstream test now expects the new
base URL and joins the allowlist.

Machines keeps setting the variable: `t3` and the server of
0.1.0-lazurio.3 and older still need it, and an Update by the button
downloads with the old server. The runbook says where the export is
still needed, the contract test pins the default for the index, the
downloads and both install scripts, and the README no longer ties the
update channel to the variable.

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

The overlay speaks Czech where the person's browser does (prefersCzech),
except in two rare states that stayed English for everyone
(#75): the right panel when the Environment stops offering
its browser, and the toast when a prepared prompt from the Launchpad
cannot open.

The panel now says "Prohlížeč není k dispozici" / "Toto Prostředí teď
prohlížeč nenabízí. Jeho záložky se vrátí, až ho zase nabídne." in Czech,
and in English "This Environment does not offer its browser now." with a
capital Environment. The toast says "Připravené zadání se nepodařilo
otevřít" / "Do pole zprávy se nic nepřidalo." in Czech and keeps its
English. Its words come from failedPromptDraftText in promptDraft.ts,
beside the logic that decides the prompt failed, as the strip's close
toast takes its words from closeToastText.

Both files are the overlay's own (rows 9 and 6); no upstream file
changes. The panel's test reads both languages, promptDraft.test.ts the
toast's words, and the contract test pins that the toast asks for the
person's language.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Upstream v0.1.0 shares a prompt as a link (pingdotgg#18454): "Copy prompt link" on
every sent message and in the command palette (there also "Copy prompt
link with repo and model") copies a link to upstream's hosted app with
the prompt's text in its address. On a managed Lazurio Environment such a
link opens no thread: new threads start only in the Lazurio project, and
its server offers no Scratch (#77). The Organization Admin
chose to hide these entries.

They now leave where "Add project" does, through the same
everyEnvironmentManaged: when the web knows at least one Environment and
every one of them is managed. In the palette one condition on
promptLinkInput, which feeds both entries, keeps them out. A sent
message reads one derived value for the whole chat
(lazurio/managedPromptLinks.ts), so it renders again only when that
answer changes, not with each change of a server's config. The overlay's
own prepared-prompt link (row 6) is unchanged, and so is upstream's
/new link page: an incoming link still ends as before (the overlay spec
says how).

MessagesTimeline.tsx joins the allowlist with the managed Folder's hooks.
The contract test pins both seams, the derived value, and that these are
the only places where the web builds a prompt link to share. The overlay
spec, row 15 and the runbook's managed Folder section describe it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The official desktop and mobile apps show no Environment browser on a
Lazurio Environment, by design, and the host cannot see the person's
screen, so preview_open answers visible: true for them too. Its result
carried a view address only for another Environment's tab, so an agent
in a thread opened from the desktop or mobile app could point the person
at a panel that is not there and had no address to give instead
(#88).

The Environment browser host now answers every preview_open of this
Environment's own browser with view, `<view origin>/t/<tab id>`, the
address the right panel frames. The origin is the one the Environment's
declaration names (`lazurio browser link --json`), which the host
already keeps and shares with the thread strips; a declaration without a
link gives no view. The tool's description says that a person without
the inline preview, in the desktop or mobile app, opens that address; in
web Chat a link to it opens in the right panel already. Another
Environment's tab keeps its view and its advice.

The sentence is appended to upstream's description in tools.ts, which
already carries the overlay's result schema. The host's tests cover the
thread's window, a handed-over tab, another window, background work and a
declaration without a link, and the contract test pins the answer and
the description. The overlay spec, row 10 and the allowlist's reason say
so.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Two things the people on Environments need to hear, which the runbook
did not say.

An Update by the button leaves the open page running the old client
until it is loaded again: upstream reloads a page only for a stale chunk
or from its error page (#32). The update channel's section
now says to reload it after an Update and to tell people so in the
release announcement.

The official mobile app connects to an Environment on 0.1.0 only in
version 2.0; 1.x speaks the older orchestration protocol and cannot.
Version 2.0 is in the App Store and Google Play since 2026-10-15. Stage 8
says so beside the desktop and mobile step, for the announcement.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A link with a repository that matches a history project still opens an unsent draft in the
Lazurio project, so "opens no thread" was too broad. The overlay spec's "Odkaz, který přijde"
keeps the exact behaviour.

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

@agentrozjedemeai agentrozjedemeai left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@immakermatty APPROVED on exact head 31d920049323ce6f4a0dbc5cb342d2a8d0d96d4a. Reviewed all seven follow-ups and the overlay allowlist: terminal session is applied to the spawn environment without changing AgentScope's thread bookkeeping; release repository defaults and explicit override agree across the CLI/install scripts; managed prompt-link controls, Czech text, and preview_open's per-tab view match the stated scope. Local detached checkout: release contract 36/36; focused tests 121/121 and adjacent terminal/install/managed-folder tests 104/104 (Node 24.13.1); web, server, shared and ssh typechecks passed; scoped formatting and git diff --check clean. Lazurio Fork CI completed green on this SHA, four successful jobs; no unresolved review threads. Review only; no merge or deployment performed.

@immakermatty
immakermatty merged commit 9e0ef9e into main Oct 19, 2026
7 checks passed
@immakermatty
immakermatty deleted the lazurio/followups-0.1.0-4 branch October 19, 2026 18:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants