Repository navigation
Combined merge: desktop model spotlight, engine lock wait, and fixes from the live scenarios - #1107
Merged
Merged
Conversation
Add an optional `spotlight` flag on catalog entries for a model launch. When a flagged model fits the machine and is not on disk yet, the TUI shows one startup hint, at most once per model id. Add `models pull <id> --run`, which downloads the model, makes it active and starts it, including the vision projector the TUI fetches by default. No catalog entry sets the flag, so nothing changes for users until a launch adds one.
Add an optional `spotlight` flag on the vendored catalog rows. A flagged model that fits the machine gets a card with one button that downloads the weights and the vision projector, then switches to the model. A running turn is not interrupted, and a failed projector does not switch. No row sets the flag, so the card stays hidden until a launch adds one.
Release 0.7.0: combined merge
…talls models update never waits for the engine operation lock. At launch the Studio shell's first call can hold it while starting or installing Core, so the launch install failed within seconds and left a red Download failed card until Retry, with the model not started. The launch's and the setup's install now retry while the refusal is the lock, for up to five minutes. Settings still answers at once.
A finished turn folds into one summary line and its cards are only drawn once that line is opened, so the scenario waited for a card that was never in the page. Open it with a real click; the masking checks are unchanged and now also scan the expanded cards.
The fan-out card carries "2 tasks to 2 workers" as its reason, which is drawn under Details. innerText skips a closed <details>, so the check could never see it. Open Details with a real click and keep the same assertion.
A cloud side call answers through one synthetic emit_* function, so the scripted model took the title request for an agent step: L10 counted a fifth call after the budget stop, and in L09 it would drain the step queue. L10 now asserts that the naming call is the only other model call, so a side call cannot hide after the stop.
The browser guard matched "open https://" anywhere in a script's text, so a script that only prints "To sign in, open https://... and enter the code" was refused at every approval level. That is the device sign-in the agent is meant to run and hand over. A quoted echo/printf with nothing taking its output is now left out of the line-level rules; a piped or redirected one, and a real open, are still refused.
… scenarios Node's stdio pipe is a socket, and macOS script(1) exits at once when its stdin answers tcgetattr with anything but ENOTTY. L07 and L15 therefore never started the terminal app. Carry the keyboard through a shell pipe instead, and build L07's wait message when it fails, so it shows what was on screen.
The scenario ran atag doctor with spawnSync. The scripted model lives in the same Node process, so it could not answer doctor's health probe and the engine check correctly reported that nothing answered.
Settings rebuilds its whole window on every repaint, so a press that a repaint landed in was released on a different node and never became a click. Hold the rebuild until the press ends.
… helper L13 looked for the file name box and main buttons as direct children of the sheet, which macOS 26 no longer guarantees. Type the name into the box that holds the focus and fall back to Return; the file written and the confirmation are still what is checked. L14's lastMatch passed non-global patterns to matchAll, which throws.
…olders The window asks for the output folders at every launch. Answering went through ready(), which installs Core when missing and starts it as a detached daemon, so every launch started Core even if Studio was never opened. The live L07 run caught it: its run is long enough for Core to come up, and the daemon was still alive after the app closed. Now only a Core this app already configured is asked; otherwise the answer is the chosen or default folder, the same value configure() gives Core. The live harness also prints a leftover's whole command line, since the 120-character cut hid which binary it was.
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.
Combined merge of #1101 (one-click card for a newly launched local model) and #1105 (wait out a held engine lock in the launch and setup installs), each kept as its own merge commit, with main brought in, plus the fixes from running the live scenarios from #1104.
Product fixes from those runs:
Scenario fixes: folded turns and closed Details are opened before reading them, the terminal scenarios run on a real pseudo-terminal,
atagcalls no longer block the scripted model, the session title counts as a side call, and the save sheet is reached on macOS 26.Checked on the Mac test machines at this head: build, lint, desktop build, lint and unit tests, all 15 live scenarios, and desktop smoke (930 passed, 0 failed). The full test suite, imports and typecheck:tests last ran just before the live-scenario fixes.
Not exercised: the overnight soak and the release exam on a real model.