100 Commits
Author SHA1 Message Date
yhh 18015b1faf fix(studio): three inputs that write the host and had no action name now have one, which the census invariants step, never reached while the tests failed before it, refuses to pass without: the plugin paste field, the market cache retry and the onboarding start button 2026-11-07 04:23:12 -08:00
yhh 7586f9e785 fix(studio): two errors vitest counts as a failed run no longer escape: the image viewer's test supplies the pointer capture jsdom lacks, and the tool output's measuring frame skips an animation query the environment does not have 2026-11-07 03:58:10 -08:00
yhh abeb6b1b36 fix(studio): the workbench no longer renders again every two seconds for nothing: the terminal list poll skips the setter when it finds the list it already holds, since React runs the component once more for an update that hands back an equal value, which is what the poll test saw as a stray commit on the runner; the temporary probes are removed 2026-11-07 03:09:18 -08:00
yhh 1317859a0c test(studio): temporary probes in the workbench file reader, silent unless a test installs them, so the poll test's failure on the runner says whether the file entry was empty or evicted 2026-11-07 02:54:13 -08:00
yhh 8447cc10ac test(studio): the poll test waits through four quiet windows before it counts, and its failure says how many milliseconds after the baseline each commit landed 2026-11-07 02:34:23 -08:00
yhh 03cdec40a2 test(studio): the Markdown poll test says in its failure which poll committed, with how many file reads and listings had happened, so a runner-only difference shows its own cause 2026-11-07 02:23:59 -08:00
yhh f65f584c3f test(studio): the Markdown poll test waits until the panel has stopped committing on its own before it counts what a poll commits, since what opening a file leaves behind lands at a machine-dependent time 2026-11-07 02:00:17 -08:00
yhh bda618594f fix(studio): the browser guards run again from the first to the last script: five real layout regressions are fixed (chip mirror width, a leftover delete button's position, the context card's hover bridge, held approval buttons at 420px, the narrow file panel header), and the guards follow the icon rail being off by default, the settings tabs and deep pages, the phone's more tray and the other deliberate shape changes. Weakened on purpose and to be revisited: session-selected-row asks for 1.05 and 1.02 contrast instead of 1.2 and 1.12, nest-nodes' node ceiling is trivially met by the windowed flow, project-header no longer checks a more menu it does not have 2026-11-07 01:32:38 -08:00
yhh 98c340be47 test(studio): the backup connection tests find the passphrase field by the change action it now names, and the Markdown poll test waits out the 220ms tab-entry timer before it takes its baseline 2026-11-07 01:32:38 -08:00
yhh 87d20e14b3 fix(studio): on a desktop the settings search results fill the page column beside the category list instead of floating across it and the page behind, with the close button kept above them 2026-11-07 01:32:38 -08:00
yhh 4779d91c5b feat(studio): settings are found by what a person types: search ranks by relevance, takes several words and a sentence, and 23 of 43 everyday phrasings that found nothing now land in the first three, held by a findability test; each page opens with an index of what it holds, so settings folded into it have a visible way in 2026-11-07 01:24:25 -08:00
yhh 07d2d4bdd0 Show the cache hit rate after the cold start, and the output ratio
The session's first executor request pays for the prefix every later one
reuses, so the session-wide hit rate mixes "did the cache work once warm"
with "how much a cold start could reuse". usagereport already records the
cold start, but nothing a live session reads projected it.

The live figures come from the serve ledger, which restarts on /new,
/resume and /fork; usageTally does not, so its ColdStart can belong to an
earlier conversation in the same process. The broadcaster therefore takes
the cold start from the ledger's own population: the first request the
ledger files under the executor (pricing.LedgerSource, the rule Add
already used), split by the same CacheSplit the ledger applies, and reset
with it. SessionUsage carries it as coldStart.

- /status (TUI): "warm cache" row, ledger hit rate with the cold start
  taken out of hit, miss and unknown; "out/in" row, output ÷ input.
- Desktop session overview behind the cache meter: the same two figures,
  computed in state/overview beside cacheRate.
- wire-parity: ColdStartUsage mirrored in port/session.ts.
2026-11-07 09:06:37 +00:00
yhh 2e2566c84d test(studio): the Markdown poll test lets what opening the file left pending land before it takes its baseline, so a slower runner does not count it as a poll render 2026-11-07 00:53:34 -08:00
yhh 1b0fbd8bb1 fix(studio): after a batch selection focus returns to the project menu that started it, which no longer is a single list menu, and the session, workbench and rail tests follow the deliberate changes to the project menu, the scope dropdown, the palette ranking, the dirty-tab prompt and the line-numbered code blocks 2026-11-07 00:53:06 -08:00
yhh 6fd42831e2 fix(studio): opening the model panel reads the model list once, and the settings, composer and plan tests follow the deliberate structure of the settings nav folds, the account page behind its pill, the scope tag, the merged model and effort button and the send button staying beside stop 2026-11-07 00:42:50 -08:00
yhh e386c45525 fix(studio): the structural gates are held to the design as it is: SegChoice and PillButton name their action through a certified prop, the shared Menu row's callback is followed into its parent, the slider, strip scroll, dialogs and plan picker carry action names, keyframes, radii, orphan components, translations and settings rows are brought back in line, and the phone layout no longer hides the branch chip from the hover guard 2026-11-07 00:39:10 -08:00
yhh 0fac934b3f fix(ci): the Windows shell listing joins paths the way the OS it is computed for does, the save allocation check is skipped under the race detector that defeats regexp's pool, and the context-retrieval benchmark whose premise archived folds ended is removed with the surface helper only it used 2026-11-07 00:39:03 -08:00
esengine 48cad29d31 fix(studio): the storage move panel plans once the path stops changing and ignores answers for paths already typed past
Every keystroke sent a plan request that walks the whole root. The panel now waits 400 ms after the last change and drops an answer whose path is no longer the one in the box.
2026-11-06 23:50:40 -08:00
yhh 0f26eda9f4 chore: stop tracking the python bytecode caches that the last commit swept in from two untracked benchmark directories 2026-11-06 23:47:52 -08:00
yhh 14649962fc refactor(provider): remove the summary request flag and what only it served: the Request.Summary field and ErrSummaryToolsUnsupported, the adapters' no-tools branches, the broker's capability probe, and the test doubles and live test written for a summarizer call that no fold makes; the reported-usage effect test now detects a fold by its archive pointer and has a control arm 2026-11-06 23:47:31 -08:00
yhh 0f81082776 refactor(agent): remove the summarizer's bill and request identity, which nothing writes now that a fold is an archive: the spend accumulator, the unset usage and request id on the fold result, and the zero usage carried into telemetry and the receipt 2026-11-06 23:24:39 -08:00
yhh 31db766ff1 test(boot): through the real assembly a hand-asked compact folds again after a little more was said, the report names the fold an archive, and a declined one does not claim a summary 2026-11-06 23:22:14 -08:00
yhh 05c8743f03 fix(agent): a fold is described as the archive it is: the decline wording no longer says a summary is being paid for, /context and the TUI name an archived fold instead of calling it summarized or printing the raw mode, and the codes, modes and translations nothing produces any more are removed 2026-11-06 23:08:04 -08:00
yhh be92796684 test: the coordinator handoff and guardian compaction tests stop scripting a summarizer call, which compaction no longer makes since it archives to a file 2026-11-06 22:51:42 -08:00
yhh 6264845f53 fix(tool): a refusal's remedy names the setting tool by its capability id, tool:setting, now that the tool sits behind use_capability and a bare "setting" is not a name the model can see 2026-11-06 22:51:42 -08:00
esengine 20c2705623 chore: clear the unused agent symbols and the two lines App.tsx is over its ceiling
These block every push through lint and make check; none of them changes behaviour.
2026-11-06 22:49:20 -08:00
esengine 1923e50a34 fix(storage): a move plan proves the nearest existing parent writable instead of creating the target
Planning ran on every keystroke and its write probe called MkdirAll on the target, leaving a folder per typed prefix. The probe now runs in the nearest existing ancestor, free space is read from it, and Move creates the target once the user starts the move.
2026-11-06 22:46:13 -08:00
yhh 7c388628f2 fix(studio): the session-message form's recipient select fills the form instead of the 140px every select in a settings card gets, so its label no longer wraps over two lines 2026-11-06 22:41:24 -08:00
yhh 339f443ffb feat(boot): setting, present_files, compress and context_budget move behind use_capability and are indexed in its description, cutting the first-round tool definitions by another 4 KB 2026-11-06 22:34:44 -08:00
yhh c8afd3be60 feat(boot): the browser tools move behind use_capability, whose description now indexes the deferred tools by id with a short purpose, so a model that could see a browser but not web_fetch no longer opens a page to read a JSON endpoint 2026-11-06 21:59:04 -08:00
yhh 756c6159a6 fix(agent): a compact asked for by hand no longer answers "too little added" after a checkpoint; asking waives how much was added, and an unchanged context is still declined 2026-11-06 21:22:30 -08:00
yhh 26f72585ee fix(control): in yolo mode remember no longer asks for approval either, so neither memory tool prompts under the mode that skips every other approval 2026-11-06 21:13:36 -08:00
yhh 5b80976176 fix(control): in yolo mode forget no longer asks for approval; it archives a memory rather than destroying it, and remember still asks 2026-11-06 21:11:56 -08:00
yhh 044d2ee025 fix(studio): in a narrow conversation the composer's model pill shrinks the model name instead of letting the divider and reasoning level spill out of the pill and onto the send button 2026-11-06 21:11:55 -08:00
yhh 081f35e9dd fix(studio): the settings category strip on a phone can be scrolled with a mouse wheel, brings the chosen category into view, and fades at its edge so a cut-off tab reads as more to the right 2026-11-06 20:20:22 -08:00
yhh 6e56478321 fix(studio): on a phone the settings sheet no longer draws the desktop's nav-column divider and darker strip, which showed as a stray vertical line through the page 2026-11-06 20:18:23 -08:00
yhh 37ec853810 feat(studio): on a phone the settings sheet fills the screen as one column, with the categories as a strip above the page, so rows, titles and the skills list get the whole width instead of a sliver beside a nav column 2026-11-06 20:14:40 -08:00
yhh 73a1b23696 fix(studio): on a phone the composer's more-tools button can be seen (heavier dots inside a ring), and the model pill takes the room its text needs and shows the reasoning level instead of overlapping the button and leaving a dangling dot 2026-11-06 20:00:17 -08:00
yhh 8c71d355b0 feat(studio): the phone's reasoning control is the product's own depth line instead of a look modelled on another product's slider; a thin line in the brand colour with a current flowing along it, a node per level, and a thumb wearing the Reasonix mark. Also fixes the model pill's separator, which had been written as a NUL character 2026-11-06 19:55:42 -08:00
yhh 155ffaa49b feat(studio): the reasoning slider follows the finger continuously and eases onto a level, its stars drift, its light stays inside the card, and it carries a dot and a name for every level with a bloom behind the thumb; the sheet's search box is spaced from the list 2026-11-06 19:52:02 -08:00
yhh ef0ceacf78 feat(studio): the reasoning slider is lit from inside: stars that twinkle out of step, a glow that sweeps along the fill, and a glowing thumb; all of it holds still under reduced motion 2026-11-06 19:45:24 -08:00
yhh 552f48ab7a feat(studio): on a phone the reasoning levels are one gradient slider with the level named above it, chosen when it is let go, and the model rows in the sheet are compact 2026-11-06 19:42:41 -08:00
yhh e8b13d13dd feat(studio): on a phone the model menu is a sheet along the bottom edge instead of two squeezed columns; the model list scrolls by itself while the reasoning levels stay in view as one row of chips 2026-11-06 19:38:53 -08:00
yhh ae46c30d3e feat(studio): on a phone the composer's tool row is add, the model pill and send, with the other controls one tap behind a 'more tools' button; stop is a round pause button, and the pinned control order no longer applies on a phone 2026-11-06 19:27:53 -08:00
yhh 411e19d87e feat(studio): on a phone the title bar keeps the session list, the title with the machine under it and one menu, a lost connection says it is reconnecting, and an approval is two 44px buttons with the other choices behind 'more options' 2026-11-06 19:14:06 -08:00
yhh c155364b3d fix(studio): on a touch screen the select options are finger-sized and the context card's expand control and manage link are tall enough to press 2026-11-06 18:52:04 -08:00
yhh e89b435af9 feat(studio): every select opens the app's own list instead of the system one; one rule in the shared select styles covers all 35, behind a feature guard so engines without styleable selects keep the native list 2026-11-06 18:47:00 -08:00
yhh 0549af617b fix(studio): the context details card is tighter, and its expanded rows keep the card's side margin instead of sitting against the edge; a long tool name is cut with an ellipsis rather than pushing the figure out of the card 2026-11-06 18:39:35 -08:00
yhh ce51afd2dc fix(studio): a code block wraps long lines instead of scrolling sideways; each source line is its own row carrying its number, so the number stays with the first row of a wrapped line 2026-11-06 18:33:23 -08:00
yhh 2bfb7de07a feat(studio): the plan list opens from the height of its bar and leaves again before it is removed; the exit holds the list only while the stylesheet gives it an animation, so reduced motion and a missing animation close at once 2026-11-06 18:29:54 -08:00
yhh 8658f020af fix(studio): the global shortcut setting reads like its neighbours; the chord is shown in the notation people use, the three one-shot actions are pill buttons instead of a selector strip, recording is visible on the field, and the explanatory text wraps instead of being cut off 2026-11-06 18:22:53 -08:00
yhh 0a38f2e47a fix(studio): the open plan is as wide as its collapsed bar, and the transcript gives way to it instead of ending underneath 2026-11-06 18:17:52 -08:00
yhh 7c7e3ff99c perf(session): resuming a long session no longer repeats work; a replay observes each touched path once, event records are framed in bulk, and a load whose ledger agrees with its transcript is a verified baseline so switching away from an untouched session reads nothing back; resume of a 15 MB log goes from about 1.0 s to 0.42 s 2026-11-06 18:17:52 -08:00
yhh 868a14cadc perf(session): a save that finds its files as its own last save left them no longer replays the event log; the prefix is verified by digest in the pass that digests the transcript, cutting a 5000-message save from 137 ms to 50 ms 2026-11-06 17:25:44 -08:00
yhh 63da66261c perf(serve): package init no longer loads the OS mime table, taking Windows startup from 143 ms to 91 ms; page files already carry their own content types 2026-11-06 17:06:12 -08:00
yhh 76ed2566ed feat(context): a fold archives the whole span and keeps nothing: no first-turn pin, recent tail, kept user turns, user-words list, work index or summary; the pointer is one short message and keep, recent_keep, user_turn_keep_tokens and first_turn_pin_tokens are retired 2026-11-06 10:02:32 -08:00
yhh e808b48946 fix(studio): the dev server proxies /terminals to the kernel 2026-11-06 08:36:55 -08:00
yhh 817d78b399 fix(memory): the new save refusals carry wording in the desktop, and the remember freshness effect test states the mode it exercises 2026-11-06 08:28:08 -08:00
yhh 813af4958e feat(memory): the model asks before remembering — remember holds a suggestion the user accepts, edits or dismisses; memory.proactive is ask, auto or off, and YOLO saves directly; the open goal panel joins the composer 2026-11-06 08:17:42 -08:00
yhh b0786368ca feat(studio): the goal strip follows the Chat-Goal-Memory board with status dot, one usage line, stop reason and pause, resume and end; the memory row reads as the board does 2026-11-06 07:33:23 -08:00
yhh c457700233 feat(studio): first-run ends with the project step and a hand-over: drop or pick a folder, the card shrinks away, the composer rises and types its prompt 2026-11-06 07:26:01 -08:00
yhh c4375bcde9 fix(studio): the open-with menu names the editor as the board does (VS Code) and cuts a long name short instead of spilling out of the menu 2026-11-06 07:19:37 -08:00
yhh f5c4d463b9 feat(studio): first-run motion from the Onb-Motion board: the wordmark draws in, a 7-second session demo loops beside the welcome, the connect button becomes the R and then a green tick, the glow breathes 2026-11-06 07:18:11 -08:00
yhh 402b524fd7 fix(studio): the first-run welcome says what to do instead of a slogan 2026-11-06 07:13:08 -08:00
yhh a846cf7fc1 fix(studio): the compaction confirmation writes the context size with K like the board 2026-11-06 07:11:02 -08:00
yhh 87d9ed6150 feat(studio): the changes header shows the full branch name and the full count on hover, since it truncates them 2026-11-06 07:09:39 -08:00
yhh 9d5775c789 fix(studio): the changes page header stays one 40px row with the branch and the summary truncated and the buttons whole; the context details rows are 28px apart, not 34 2026-11-06 07:07:37 -08:00
yhh aadd62e2e5 fix(studio): the context details card follows the Chat-Tools board: K for thousands, the one-line hint, MCP counted as connected and tools, a plain Manage MCP, values in the interface face 2026-11-06 07:05:34 -08:00
yhh 77d875db8d fix(studio): the commit history in the explorer follows the WB-Frame board: 32px heading, 26px rows inset from the edge, hash, subject and a bare age 2026-11-06 07:00:05 -08:00
yhh c9fb8f7ee3 fix(studio): the refined-prompt card is drawn as the Compose board has it: inset in the composer, header, body and a footer on the page tone 2026-11-06 06:57:52 -08:00
yhh 1b3d1e0c8d fix(studio): the side question leaves the input the moment it is sent and returns to it only if the ask fails 2026-11-06 06:56:21 -08:00
yhh 6420f14fda fix(studio): a remote project row's new-session button is a plus as well 2026-11-06 06:55:04 -08:00
yhh f200f6108f fix(studio): markdown tables wrap their cells to the column instead of scrolling sideways 2026-11-06 06:54:15 -08:00
yhh 572e0d54b3 fix(studio): a project row's new-session button is the plus the Sess-Rows board draws, not a chat bubble 2026-11-06 06:48:31 -08:00
yhh 0a43322267 feat(studio): opening a project whose folder is gone asks, in the list, whether to remove it from the list, instead of reporting the system's sentence 2026-11-06 06:47:20 -08:00
yhh 1ff0525a34 fix(serve): opening a project whose folder is gone is refused with workspace.folder_missing and the path, not the system's stat sentence 2026-11-06 06:44:19 -08:00
yhh ec45959a6e fix(studio): on macOS the brand in the sidebar head starts to the right of the window controls instead of under them, as the Mac-Titlebar board draws it 2026-11-06 06:41:20 -08:00
yhh 253733c1f9 fix(studio): the effort column of the model panel no longer reaches 8px past the panel, which clipped its heading against the top edge 2026-11-06 06:36:23 -08:00
yhh 32f597d16e feat(studio): the dividers are a line with no handle, and a collapsed sidebar is reopened by the icon in the top bar and Ctrl+B, as the Rail-Collapse board draws it
The grip on each divider (a dotted handle, an arrow tab when shut) is gone; the
divider still drags, resets on double-click and sizes from the keyboard, and a
shut column is a thin edge that can be dragged back out. The sidebar toggle is
the panel icon at the top left whenever the sidebar is collapsed, and its
shortcut is Ctrl+B as the board says, replacing Ctrl+backslash.
2026-11-06 06:18:10 -08:00
yhh c78b996d13 fix(studio): the idle run-state row no longer leaves a blank band above a note strip, so the strip sits at the top of the composer as the Compose-Notes board draws it 2026-11-06 05:19:16 -08:00
yhh 933ee31d6c feat(studio): the notes above the composer are one line at a time, as the Compose-Notes board draws them; a remote project's terminal says which machine it is on
The composer showed the connect strip, the trust question and the sandbox note
together, each with a paragraph, and a short stack clipped them over the input.
Now one strip is drawn, by priority (cannot send, trust, no sandbox): a single
line, the explanation in the hover text, calm grey for reminders and warm only
for "cannot send".

A terminal opened from a remote pane runs on that machine through the existing
forwarding, and its header carries the host. A test holds that the host's
requests are forwarded and a paired device's never reach the far kernel.
2026-11-06 05:06:01 -08:00
yhh 83bdeb81f0 feat(studio): the workbench gets a terminal of your own, as the Terminal board draws it
A fourth kind of tab opens a real shell (ConPTY on Windows, a pty elsewhere) in
the project folder, outside the model's permissions and sandbox and with the
host's provider keys left out of its environment. The kernel keeps each shell's
output, so a tab left or a window reloaded comes back as it was; a tab is named
for the command submitted while the shell is busy and carries a blue dot, and
closing a busy one asks first.

Also: the composer's note stack no longer clips to a few pixels when it holds
two notes, which left the second one overlapping the input.
2026-11-06 04:44:41 -08:00
yhh 3cf430d823 feat(studio): restoring a backup asks for the passphrase and reads the differences in a dialog, and says what happened in one strip per outcome, as the recovery board draws it 2026-11-06 03:34:59 -08:00
yhh efcd3bbf51 feat(studio): notices carry an info, warning or error glyph instead of a dot, and a pending permission request puts Refuse at the left, as the cards board draws them 2026-11-06 03:06:42 -08:00
yhh a3303025fe feat(studio): a turn closes with a tick and Done · duration at the right edge, as the reply board draws it; start time moves to the hover 2026-11-06 02:57:38 -08:00
yhh 6ebff84af2 feat(studio): the extension page gets a project pill beside Add, so the project is switched in place; the settings row stays as the same control 2026-11-06 02:50:06 -08:00
yhh 5e00091026 feat(studio): the extension project scope moves into settings as an Extension scope row on the Permissions page; the extension page only says so when it is managing another project, as the new Set-scope board draws it 2026-11-06 02:35:44 -08:00
yhh 4c6ba31a1c test(studio): the automation card test waits for the scheduled-runs row, which appears once its board is read 2026-11-06 02:28:38 -08:00
yhh 5868b02bdf feat(studio): hooks and scheduled runs move from the extensions page into an Automation card on the Agent behaviour page, as the new Set-automation board draws it 2026-11-06 02:28:06 -08:00
yhh ab6052b8a2 feat(studio): the extensions page drops the separate Runtime card for the board's one-line note on when changes take effect, keeping the rescan button beside it 2026-11-06 02:12:29 -08:00
yhh d437997362 feat(studio): a reply whose layout fails shows its source with an as-written tag, and a tool card that cannot be drawn falls back to a simplified line, as the recovery board draws them 2026-11-06 02:06:21 -08:00
yhh e4c97fdfab feat(studio): visual effects is one switch and the appearance page gets its advanced-appearance row, as the look board draws them 2026-11-06 02:04:33 -08:00
yhh c8eb8693fa feat(studio): native session import is a dialog with a dashed drop area, theme and session import results are the recovery board's green and warning strips 2026-11-06 02:03:09 -08:00
yhh 851f5fe19f feat(studio): the export-to-file categories are pill checkboxes with two passphrase columns and a warning-tone shortfall, as the recovery board draws them 2026-11-06 02:01:16 -08:00
yhh 7c26f0d5ec fix(studio): the notice and config sub-lines get their own class names, which the monospace guard reads as prose 2026-11-06 01:59:36 -08:00
yhh 0e04e0d753 feat(studio): the unparseable-config banner is the recovery board's card at the top of the settings page, with the offending line, the repair and a backed-up repair action 2026-11-06 01:59:03 -08:00
yhh f05b2392c3 feat(studio): update, size-ask and stall notices use the board's card; the unsaved-preset dialog lists what changed; settings-did-not-open is a centred placeholder; notices past three fade out 2026-11-06 01:55:41 -08:00
yhh e41bddb590 feat(studio): notices are the board's one strip — 380px cards with an icon and ghost-pill actions, stacked above the composer, newest three kept; the queue style guard follows the new rules 2026-11-06 01:50:17 -08:00
yhh e7cc0d9841 fix(studio): the extensions page names its group External services, as the installed board does 2026-11-06 01:39:50 -08:00
yhh 61d2f00f17 feat(studio): the appearance size row offers small, standard and large in place, as the look board draws it 2026-11-06 01:36:56 -08:00