chore(deps): bump golang.org/x/net from 0.52.0 to 0.55.0 - #7
Open
dependabot[bot] wants to merge 418 commits into
Open
chore(deps): bump golang.org/x/net from 0.52.0 to 0.55.0#7dependabot[bot] wants to merge 418 commits into
dependabot[bot] wants to merge 418 commits into
Conversation
1. cwd fix The term view wires an OSC 7 handler on xterm that writes cmd:cwd onto the block meta. termblocks never mounted that handler, so every block showed an empty cwd and the status bar silently collapsed. Tracker now scans each PTY chunk for "ESC ]7;file://.../path ST", decodes the URL, and calls wstore.UpdateObjectMeta directly, then broadcasts a WaveObj update so the frontend atom sees the new cwd right away. 2. scroll fix xterm captures wheel events on .xterm-viewport even with scrollback:0, which blocked the outer block list from scrolling whenever the pointer was over a finished block. Each non-interactive XtermOutput now hangs a capture-phase wheel listener on its wrapper, cancels the event before xterm sees it, and scrolls the nearest overflow:auto ancestor by deltaY/ deltaX manually. Running / alt-screen xterms keep their native wheel handling.
1. clear support
- pkg/wps, cbtypes, tsgen: new cmdblock:clear event.
- tracker.detectClear watches each PTY chunk for CSI 2J / 3J
and fires the event scoped to the parent block id.
- Model adds minVisibleSeqAtom; on clear it snaps to the most
recent block's seq so visibleBlocks hides everything up to
that point. Subsequent commands come in as new seqs and
render normally. Matches Warp's clear-the-blocks-above UX.
2. shell history
- New GetShellHistoryCommand RPC reads ~/.zsh_history (or
~/.bash_history), strips the ": <ts>:<dur>;" zsh extended
prefix, dedupes, returns the last 2000 lines.
- Model loads history on mount into a historyAtom; ↑/↓ now
walks the real file plus anything typed this session.
- Backspacing into a history entry preserves the pre-arrow
draft so ArrowDown past the newest entry restores it.
3. inline ghost suggestion (fish-/zsh-autosuggestions-style)
- Dim suffix of the most recent history match is rendered in
an absolutely-positioned span under the real input, aligned
character-for-character using a transparent prefix spacer.
- Tab or Right-arrow at end-of-line accepts the ghost.
1. hasMeaningfulOutput skips an xterm when the byte range between
OSC C and OSC D contains only whitespace + OSC/CSI noise.
`cd`, `export FOO=1`, `:` etc. now collapse into a single-line
block (just meta + cmd), matching Warp's appearance where
silent commands take no extra vertical space.
2. The xterm theme.background is now fully transparent ("rgba(0,0,0,0)")
and the wrapper / viewport / screen / canvas all have
`background: transparent !important` so the output blends with
the row instead of showing as a darker card. Red-bar error
rows now read like the Warp screenshot — just the
"zsh: command not found: …" text on the row's own background.
- Rows default to 8/8 vertical padding (was 10/10) and cmd/meta margins trimmed so a two-line block sits closer together. - A `termblocks-row-compact` class kicks in whenever the row has no xterm (no meaningful output), pulling padding down to 5/5 and zeroing the cmd bottom margin. `cd`, `export FOO=1`, etc. now render as a tight two-line strip instead of taking the full default row height.
Previous height logic was (newlineCount + 1) capped at [3, 40], so any output with at least one line break (including "just echo the Enter") reserved 3 xterm rows. That's why `cd` still left an empty strip. countVisibleLines strips CSI + OSC + two-byte ESC prefixes from the byte range first, then counts only lines that contain a non-whitespace character. Xterm rows now snap to that count, minimum 1. hasMeaningfulOutput is just (countVisibleLines > 0) so the xterm-skip path stays aligned with the sizing logic.
- Set noHeader on the view model so the block frame stops rendering the "Blocks" title + "Back to Terminal" button. The frame is dead weight now that termblocks is the default view and the stale-running-row + ControllerResync fixes removed the "I'm stuck in termblocks" failure mode the button was mitigating. - Remove the "No commands yet on this block. Type below to run one." empty-state message — the input placeholder already tells you what to do, so the second line was just noise. - Drop the now-unused switchToTerminal method and the WOS import that was only there for it.
1. Status bar moves above the input (was below) so it visually anchors what the prompt will execute, matching Warp's layout. 2. Emoji icons in each chip swapped for FontAwesome glyphs (fa-regular fa-folder, fa-solid fa-code-branch, fa-regular fa-file-lines, fa-solid fa-ban for the interrupt button). Already loaded globally by the waveterm bundle. 3. Input line is now a transparent <input> over an absolutely positioned highlight overlay that mirrors the value through a minimal bash tokenizer: command / flag / string / $var / # comment / operators (| && || ; > < >>) / paths. Each kind gets its own color. The ghost suggestion is appended as a dimmed tok-ghost span in the same overlay so the old separate ghost layer goes away.
Actions driven from what we already have in-model, so nothing new on the backend: - Rerun command -> submitInput(cmd) - Copy command -> clipboard - Copy output -> ANSI/OSC-stripped clipboard - Copy block as Markdown -> cwd blockquote + sh fence + output - Copy working directory -> sublabel previews the full path - Copy git branch -> only when GetGitInfo says isrepo - Delete block from view -> per-oid hiddenOidsAtom additive to the clear/minVisibleSeq filter The Electron ContextMenuModel is the same one waveterm uses for its tab bar / block frame menus, so keyboard cancel, hover, submenu styling all come for free.
Waveterm already ships a vertical tab bar implementation (frontend/app/tab/vtabbar.tsx, vtab.tsx) behind the app:tabbar='left' config value — flip the default so new installs land on it without digging into settings. Per-tab git branch surface is a follow-up; individual block rows already show branch in their meta line.
Each vertical tab in the sidebar now carries a small metadata row below its name, matching Warp's sidebar: ~/Documents/cocole ~/Documents/cocole main +42 -7 - Extended VTabItem with subtitle / gitBranch / gitAdds / gitDels / gitChangedFiles. VTab renders the name in one line and the subtitle + branch chip + diff deltas in a second, dimmer line. - Height bumps from h-9 to min-h-[44px] only when a subtitle is present; tabs without shell integration keep the old compact layout. - VTabWrapper computes subtitle from the first block with cmd:cwd meta (shortened with ~/…) and kicks off an 8s poll of GetGitInfoCommand for that cwd to drive the branch / diff counts. Hover preview, rename/move/color submenu, and bookmarks are follow-ups; the existing right-click Tab menu already covers rename + close + workspace moves.
With app:tabbar defaulting to "left", the inner PanelGroup briefly has 1 panel (vtab only, AI panel hidden) while commitLayouts always pushes a two-size array. react-resizable-panels then throws "Invalid N panel layout …" on every resize / HMR mount. Wrap both setLayout calls in try/catch so the transient mismatch doesn't spam the console — once HMR settles the panel count matches and the next resize tick syncs state without the error.
Tab label rules: - /^T\d+$/ matches the auto-generated names from wcore.getNextTabName; for those tabs we show the cwd as the primary line and skip the subtitle (the cwd is already the name). When the user renames the tab (anything not matching T<digits>) we keep their label on top and push cwd + git info into the second line as before. Active tab highlight: - Replace flat foreground/10 fill with a frosted-glass panel: soft top-to-bottom white gradient (12% -> 4%), 1px white/10 border, inset top highlight + small drop shadow, and backdrop-blur for the Warp-style lift. Inactive hover is a subtle 5% white wash.
Drop the gradient, inset shadow, and backdrop-blur from the selected-tab overlay — they stacked up to a cloudy slab instead of the thin glass panel Warp uses. Now it's a flat 4% white fill with a crisp 10% white border, keeping the rounded corners.
Border jumps from 10% -> 25% white so the selected pill actually outlines clearly against the sidebar, and the fill nudges from 4% -> 6% for a hair more contrast. Still no gradient / blur / shadow.
New tabs mount with wcore's auto-generated T<n> name, then flip to the cwd only after the shell fires OSC 7 on its first precmd. In between the user saw "T12" flash in the sidebar. With an auto-named tab and no cwd yet, pick a sensible standin: "~" when we know the home dir (shell nearly always starts there) and "Terminal" as a last resort. The moment the real cwd lands the name updates seamlessly — no T<n> ever renders.
The sidebar was flickering because each tab's height flipped between h-9 and min-h-[44px] depending on whether subtitle / gitBranch data had landed yet. On "new tab" the height toggled twice (no cwd -> cwd -> git info) and every other tab re-flowed alongside. - Pin every vtab to a fixed h-11 row. - Subtitle row always renders (with a min-height placeholder when empty) so the layout is stable whether or not cwd / branch info is available.
`.termblocks-statusbar { &:empty { display: none } }` made the row
disappear entirely until the first chip arrived, which re-flowed the
whole content area on every new tab as cwd / git info trickled in.
That's what was visible as "the whole page flickers when creating a
new tab" (unrelated to the vtab cwd/branch display).
Replace the `display: none` rule with a 26px min-height so the row
always holds a line's worth of vertical space; chips can still
flow in without any layout shift.
full-page flicker on new-tab creation even with status-bar height pinned. Goes back to the simpler model: - primaryName = isAutoNamed && cwdShort ? cwdShort : rawName (brief "T12" glimpse acceptable while the shell warms up) - VTab row is h-9 without subtitle and min-h-[44px] with subtitle - Subtitle row only renders when it has content User explicitly said the visual flicker started the moment those two commits landed, so go back and leave the T<n> flash as-is for now.
Was #0f1115 which was slightly off from the app shell's default. On new-tab creation the freshly-mounted termblocks root briefly painted one color while the app shell painted another, reading as a full-page flicker even with no layout shift. Inherit instead.
New WaveTabViews were created without any backgroundColor hint, so
Electron filled them with its default white until the renderer's
CSS caught up — that's the "整个屏幕会白一瞬间" flash on new-tab
creation. Call setBackgroundColor('#222222') in the constructor
so the bare surface matches --main-bg-color from the very first
paint.
…rame
The setBackgroundColor('#222222') on WaveTabView covered the
Electron surface, but between that and the moment Vite's stylesheet
bundle lands the HTML document itself still rendered with the
browser's default white bg. Inline <style> html,body{background:#222}
pins the dark color on first paint regardless of stylesheet timing.
Both files restored to pre-7eecf0d8 state: plain tab.name + badges, no per-block meta subscription, no GetGitInfo polling, no subtitle row, no glass-effect active highlight changes. The "whole screen flashes white when a new tab is created" regression traces back to something introduced by this stack of vtab changes (even with the Electron WebContentsView setBackgroundColor + inline <style> dark bg fixes, the flicker persisted). Rolling these enhancements out for now so the sidebar is rock-solid again; we can reintroduce the per-tab context pills via a different architecture (push rather than per-tab subscribe+poll) later if needed.
… first frame" This reverts commit 03cedfc.
…nd color" This reverts commit 5876daf.
This reverts commit b763811.
This reverts commit 801bcd9.
…background color"" This reverts commit bed172d.
…the very first frame"" This reverts commit 0b9d625.
…lve flicker" This reverts commit 1ec4566.
makeORef() returns null for a blank otype/oid as a "no object" sentinel,
but getWaveObjectValue() didn't honor it — a null/blank oref flowed
straight into createWaveValueObject → GetObject(null). The backend
serializes that to an empty string and rejects it, surfacing as an
unhandled rejection:
Uncaught (in promise) Error: call object.GetObject error:
invalid object reference: "" (wos.ts:140)
This happens whenever a consumer reads an object/meta for an id that's
transiently blank (e.g. useOrefMetaKeyAtom(makeORef("block", id)) before
id is populated, or a reference to a deleted object).
Guard the single read chokepoint: a blank oref now returns a shared,
never-fetching value ({ value: null, loading: false }), matching the
makeORef sentinel's intent. All read paths (useWaveObjectValue,
getObjectValue, the meta-key atoms, reloadWaveObject) funnel through
getWaveObjectValue, so this covers them at once.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…"loading"
slicePiRuns derived runId from the user message's array index ("run-0").
An agent timeline block freezes the runId it's created with, but
agentRunsById is rebuilt from the current messages array on every change
— and two things re-index that array: the renderer subscribes to the
event stream mid-prompt (so locally-accumulated messages start at index
0), and the agent_end event then replaces the array with the
authoritative session snapshot (where the same user message sits at its
true index). The frozen block id ("run-0") no longer matched any
recomputed map key, so the block was stuck on "…loading agent run…"
forever and the reply never rendered.
Derive runId from the user message's timestamp instead. It's stamped
once in the main process and travels unchanged through every event and
the snapshot, so the frozen block id and the recomputed map key always
agree regardless of re-indexing. Falls back to the index only if a
message lacks a timestamp (main always sets one).
Adds tests pinning the timestamp-keyed id and its stability across
re-indexing (the exact failure).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…desync The agent's LLM request goes out from the main process, so it never appears in the renderer Network tab — making config hard to verify and run-desync hard to diagnose. Add targeted logs: - agent-ipc: per-send trace (provider/model/reasoning/credential source) and, on harness build, the fully-resolved model (provider/model/api/ baseUrl/reasoning + whether an API key was resolved — never the key itself). Visible in the main console. - block-list-element: warn when an agent block can't find its run, with the block's runId and the available run ids, so an id-derivation drift (frozen block id vs recomputed map key) is immediately visible. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…bscribe Adopts the pi/Warp pattern (single source of truth + read/mirror owned state, not reconstruct from a lossy stream) for crest's process split. Documented with evidence in docs/agent-rendering-architecture.md (pi agent-session.ts:810 + interactive-mode.ts:2646/862/280/2731; Warp AIConversation). Root cause of the stuck "…loading agent run…": the renderer subscribed to the event stream only after agent:send returned the session, but main starts prompt() immediately — a fast turn (~13ms) streamed its whole first run before the renderer subscribed, so that run never entered the renderer's messages and its block could never find a run. Fix: main is the source of truth. agent-ipc attaches an internal harness subscription at build time (before any prompt runs) that caches the authoritative transcript per session (from agent_end), and replays it as a `snapshot` event to each new subscriber. The renderer reduces `snapshot` by replacing its mirror, back-filling any pre-subscribe history. Combined with the earlier timestamp-keyed runIds, the block↔run link is stable. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
pi's harness rejects a second prompt() while a turn is streaming (code "busy") — by design: it wants followUp() (run after the current turn) or steer(), not an interrupt. crest was calling prompt() unconditionally, so sending mid-stream surfaced "AgentHarness is busy". agent:send now tries prompt(); on AgentHarnessError.code === "busy" it routes the text to harness.followUp(), which pi queues and drains after the current turn — so the in-flight reply (and any tool calls) aren't discarded. This is pi's intended concurrent-send path; Warp instead interrupts (cancels the in-flight turn, no queue), which we deliberately did not adopt because it would throw away partial tool work. Doc updated (docs/agent-rendering-architecture.md): the busy case moves from "deferred" to done; remaining is UX polish (surface the queued message + a Stop affordance). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The agent send path selected a model but never carried the credential
reference, so main couldn't resolve the provider API key ("No API key
for provider: …"). Plumb token / tokenSecretName from the renderer's
resolvedAIConfig through the IPC send options into the harness's
getApiKeyAndHeaders, so the key is resolved in main (literal token, else
safeStorage lookup) and the plaintext never round-trips to the renderer.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…karounds
Apply pi's AgentSession owner/aggregator pattern at the AgentHarness
layer. pi's coding-agent wraps the low-level Agent (synchronous
state.messages) in an AgentSession; crest consumes the higher-level
AgentHarness — the right layer for a process-split embedder, since the
renderer can't read synchronous state across IPC and the harness already
bundles persistence + queues. What was missing was the owner.
PaneAgentSession subscribes to the harness once at construction, owns the
authoritative transcript (message_start/update/end + agent_end reconcile),
mirrors the steer/followUp queues from the harness's own queue_update
events, tracks run status, and routes send() to prompt-vs-followUp from a
synchronously tracked run flag — not by catching AgentHarnessError("busy").
This deletes two workarounds in agent-ipc: the loose per-session transcript
Map (updated only on agent_end, so stale mid-turn) and the catch-busy
control flow. agent-ipc is now a thin IPC↔owner adapter; agent:subscribe
replays the full owned snapshot (messages + status + queues), valid
mid-stream. Unit-tested (pane-agent-session.test.ts, 12 cases); full suite
217/217.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
agent_end.messages is run-scoped — agent-loop.ts builds it as `[...prompts]` + that run's responses, NOT the whole conversation. The owner and the renderer reducer both treated it as the authoritative full transcript and replaced their accumulated array with it, so after a 2nd send the transcript collapsed to just the latest run and every prior run's timeline block lost its run in the map → "…loading agent run…". The live message_start/_end stream already accumulates the full transcript, so agent_end must not replace it — it's only a run-lifecycle signal (status → idle, clear running). Also seed the owner from the persisted session at construction so reopened conversations show their history. Renderer reducer mirrors this: replace on snapshot (full), no-op on agent_end. Tests cover multi-run accumulation + seeding; 219/219. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…corruption
Root cause: a cmdblock row stored only byte offsets into the parent terminal
block's shared, circular BlockFile_Term. That file is reset/truncated on shell
restart (and wraps past its max size), so persisted offsets aliased into
unrelated bytes of the new stream — history blocks rehydrated with the new
session's PS1 prompt + command echoes ("spurious prompt header after restart").
Adopt Warp's blocks.stylized_output model: each block owns its output. At OSC
;D (command done), capture the just-finished output from the still-valid
term-file range into a new durable output_data BLOB column (cap 256KB, matching
the prior render cap). History rehydrate (terminal-model.fetchOutputFor) now
reads the per-block blob via a new GetCmdBlockOutputCommand RPC instead of
slicing the shared term file — immune to that file's reset/wrap lifecycle.
Pre-migration rows have no snapshot and render empty output (clean degradation,
no garbage). New commands persist and restore correctly.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
crest models the live shell prompt as an invisible "waiting-for-input" block kept at the tail of the block list (the visible input is the separate CmdBlockInput editor). appendAgentBlock pushed the agent block AFTER that placeholder, so the next `ls` — which fills the placeholder in place — rendered ABOVE the agent block, and the following prompt below it. Warp can append AI blocks to the true tail because its input editor is a separate widget, not a list item. Adapt: when the tail is the input placeholder, insert the agent block before it so the live prompt stays last (the slot Warp's separate editor occupies). Tests updated to use realistic done-state blocks + a repro for the placeholder-insert case. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Replace the per-callsite "insert agent block before the trailing prompt" fix with warp's general pinned_to_bottom primitive (blocks.rs:338 / append_rich_content_pinned_to_bottom:1044 / maintain_pinned_to_bottom:1058). crest keeps the live shell prompt as an invisible "waiting-for-input" block in the list (warp's missing_command, block.rs:2026). BlockList now pins that block to the tail: every push re-floats the pinned block to the end, so any appended block — agent today, and future notification/env/AI-suggestion blocks — lands above the pending prompt automatically, with no special-casing at each call site. terminal-model pins the prompt block on creation and releases the pin when it transitions to a real command (;C). appendAgentBlock reverts to a plain push. Tests cover the agent case, a simulated future block type, re-float, and release; 223/223. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Surface concurrent-send queue + a Stop affordance where the user is looking
(directly above the input editor), not buried in the agent block header which
scrolls off behind long output.
- use-pi-chat: handle queue_update (and snapshot's steer/followUp); expose
queuedMessages (ordered steer-first). The harness emits queue_update on both
enqueue and drain, so the mirror stays exact. abort/agent_end settle status.
- AgentChatHost: onStateChange surfaces reactive {status, queuedMessages} (the
onReady api is imperative).
- AgentActivityBar: persistent strip above CmdBlockInput — '● Agent running…'
+ Stop while streaming, gray 'queued' chips for pending messages; hidden when
idle with empty queue. Mirrors warp's orchestration pill bar (persistent
status+action, in-progress only).
- Stop = chat.abort(); harness.abort() already clears both queues and emits
queue_update + abort, so the chips and status clear themselves — no extra
wiring. tsc clean; 224/224.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…p pill Replace the loud uppercase-yellow + rose-square + bordered-rows look with a restrained design matching the input bar's ContextChip language (white/alpha surfaces, 6px radius, muted text). One subtle contained card; an animated spinner + neutral "Working…" (the understated in-progress treatment ChatGPT / Claude / Cursor use); a single clear Stop pill that matches the footer chips; soft rounded-full queued chips. No behavior change. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
… model) Source check confirms warp's generation-Stop is a separate, in-progress-only affordance — dispatched only from the orchestration pill bar (orchestration_pill_bar.rs:471/945, "Stop agent"/StopFilled), NOT a flipped send button (the agent composer submits via Enter; the footer toolbar has no submit/stop button). This also fits the enqueue model: while running, Enter queues a follow-up, so the send action must stay available and Stop must be separate. Move Stop to a bar at the BOTTOM of the streaming agent block (spinner + "Working…" + Stop), where the latest output is — no scrolling up to a header to reach it. Threaded onStop: terminal-view → BlockListElement → AgentBlockElement, shown only when run.status === "streaming"; click stops the run (abort also clears the queue). The above-input strip is now queued-only (Cursor-style sequential queue view). tsc clean; 224/224. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Per the actual warp running-state UI: Stop is a thin full-width footer between the conversation and the composer — working status on the left, a compact red-square Stop keycap on the right — NOT in-content and NOT a flipped send button. Revert the in-block Stop (agent-block-element / block-list-element plumbing) and rebuild AgentActivityBar as that footer: spinner + "Working…" and queued chips on the left, a rose-square "Stop" chip on the right, shown only while streaming. (^C accelerator warp shows is left unwired — Ctrl+C is still terminal copy / SIGINT.) Renderer-only; tsc clean; 224/224. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The OpenRouter thinking-format branch sent reasoning:{effort:"none"} whenever
reasoning was off and the model had no explicit thinkingLevelMap.off — true for
dynamically-listed OpenRouter models (e.g. minimax/* free, the free router).
Many of those require reasoning and reject any disable with "400 Reasoning is
mandatory for this endpoint and cannot be disabled", so every agent send failed.
Only emit a disable when the model EXPLICITLY maps off to a string value;
otherwise omit the reasoning field and let the endpoint use its default
(reasoning on). Matches the generic reasoning_effort path, which already gated
the off-value on an explicit string.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The agent block used a fainter border-b (fg-overlay-1/40) and no left gutter, so its boundary divider didn't match the interleaved shell blocks. Align it to the shell block border family (block-element.tsx / warp draw_border_between_ blocks): fg-overlay-2 bottom divider + a 5px transparent left flag-pole that turns red on error (so a failed agent run reads like a failed command). Left padding trimmed by the flag-pole width so content x is unchanged. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ivider Per feedback the left stripe looked bad. Keep just the fg-overlay-2 bottom border so the inter-block divider matches shell blocks; remove the 5px left flag-pole + error stripe and restore the original left padding. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Per feedback the 5px left stripe looked bad. Drop it (and the red failure stripe) from shell blocks, matching the agent block. Failure is still shown via the red background tint and the exit code in the header; the fg-overlay-2 bottom divider is unchanged. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Provider errors (e.g. the 400/429 strings) are long, and the bubble was a full-width block — too wide. Make it w-fit with a max-w cap and wrap (break-words + whitespace-pre-wrap): short errors stay small, long ones fold within a bounded width instead of stretching across the block. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Drop the heavy red box (border + bg + red text). Match warp's error layout (block/view_impl/common.rs:3013): a row of [red alert-circle icon] + [muted message text], no container, text wraps to the block width. Wider and quieter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The picker wrote a per-block agent:selection meta and activeSelection preferred it, so each pane had its own model. Per request, make it global: add setDefaultSelection (read-modify-write ai.json `default`), have onSelectionChange call it, and read only the ai.json default in activeSelection. One dropdown now drives every pane. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…lock" This reverts commit 72c57dc.
Two issues with the scroll-to-bottom button: (1) it used name="arrow-down", which has no asset, so the icon rendered empty; (2) it was per-block — tied to the overhanging block and "jump to bottom of this block". Make it a single global button: shown whenever the view is scrolled away from the tail (scrollPos.kind !== "follow-bottom"), and on click it scrolls the whole list to the very bottom and re-sticks (follow-bottom). Use the existing chevron-down icon. Removes the now-unused overhang detection. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.52.0 to 0.55.0. - [Commits](golang/net@v0.52.0...v0.55.0) --- updated-dependencies: - dependency-name: golang.org/x/net dependency-version: 0.55.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
dependabot
Bot
force-pushed
the
dependabot/go_modules/golang.org/x/net-0.55.0
branch
from
June 7, 2026 10:21
72546f4 to
5ed8e7a
Compare
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.
Bumps golang.org/x/net from 0.52.0 to 0.55.0.
Commits
7770ec4go.mod: update golang.org/x dependencies4ece7b6html: escape greater-than symbol in doctype identifiers08be507html: improve Noah's Ark clause performancea8fb2fehtml: properly render fostered elements in foreign content0dc5b7ahtml: properly check namespace in "in body" any other end taga452f3chtml: ignore duplicate attributes during tokenizationf865199quic: fix appendMaxDataFrame erroneously accumulating sentLimit210ed3cquic: establish a "happened-before" relationship between stream write and readad8140equic: fix buffer slicing when handling overlapping stream data23ee2efhttp2: avoid API changes when built with go1.27