Skip to content

chore(deps): bump actions/checkout from 6 to 7 in /.github/workflows - #22

Open
dependabot[bot] wants to merge 419 commits into
mainfrom
dependabot/github_actions/dot-github/workflows/actions/checkout-7
Open

chore(deps): bump actions/checkout from 6 to 7 in /.github/workflows#22
dependabot[bot] wants to merge 419 commits into
mainfrom
dependabot/github_actions/dot-github/workflows/actions/checkout-7

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Jun 19, 2026

Copy link
Copy Markdown
Contributor

Bumps actions/checkout from 6 to 7.

Release notes

Sourced from actions/checkout's releases.

v7.0.0

What's Changed

New Contributors

Full Changelog: actions/checkout@v6.0.3...v7.0.0

v6.0.3

What's Changed

New Contributors

Full Changelog: actions/checkout@v6...v6.0.3

v6.0.2

What's Changed

Full Changelog: actions/checkout@v6.0.1...v6.0.2

v6.0.1

What's Changed

Full Changelog: actions/checkout@v6...v6.0.1

Changelog

Sourced from actions/checkout's changelog.

Changelog

v7.0.0

v6.0.3

v6.0.2

v6.0.1

v6.0.0

v5.0.1

v5.0.0

v4.3.1

v4.3.0

v4.2.2

v4.2.1

... (truncated)

Commits

Dependabot compatibility score

You can trigger a rebase of this PR by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Note
Automatic rebases have been disabled on this pull request as it has been open for over 30 days.

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.
Restores the fallback from e1a311e (previously reverted when we
thought it was causing the full-page flicker, which turned out to
be a waveterm-native tab-switch repaint).  With an auto-named tab
and no cwd yet, show ~ when we know the home dir (shell nearly
always starts there) or "Terminal" as a last resort, then swap to
the real path the moment OSC 7 arrives.
Jason-Shen2 and others added 25 commits May 25, 2026 10:05
…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>
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 [actions/checkout](https://github.com/actions/checkout) from 6 to 7.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](actions/checkout@v6...v7)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file github_actions Pull requests that update GitHub Actions code labels Jun 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file github_actions Pull requests that update GitHub Actions code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant