Peter Steinberger
e81a2ce657
feat(ui): show chat run startup status ( #112339 )
...
* feat(ui): show chat run startup status
* refactor(agents): isolate run status emission
* chore(protocol): refresh startup status models
* refactor(swift): remove unused chat helpers
* test(swift): align retry and i18n fixtures
* fix(swift): restore outbox display helper
2026-07-21 21:25:23 -07:00
Peter Steinberger
1a8583ba45
feat(gateway,ui): ask-the-observer questions from the session HUD ( #112448 )
...
* feat(gateway,ui): ask-the-observer card input over sessions.observer.ask
* refactor(ui): single home for observer run-identity helper after restack
* test(ui): drop duplicated observer hud test after restack
* test(ui): give the observer ask flow its own colocated suite
* refactor(gateway): leaf observer contract and ask module split for ci gates
* refactor(gateway): drop observer contract re-export shims
2026-07-21 20:59:32 -07:00
Peter Steinberger
6c3caa38ab
fix(ui): allow direct sessions in non-Git folders ( #112433 )
...
* fix(ui): allow direct sessions in non-Git folders
* test: align New Session fixtures with place picker
* fix(ui): preserve worktree intent on Git probe failures
* fix(types): keep worktree status alias internal
2026-07-21 19:36:53 -07:00
Peter Steinberger
0f066eec81
feat(dashboard): plugin widget kinds — native WorkBoard card and mini-board widgets ( #112434 )
...
* feat(board): add plugin widget kinds
* feat(ui): render native Workboard widgets
* fix(dashboard): compose plugin widgets with current main
* chore: internalize widget-kind contribution types
* fix(ui): retry plugin widget renderer loads
* fix(ui): harden Workboard widget refresh lifecycle
* fix(ci): clear plugin widget landing gates
* fix(boards): migrate plugin widget storage
* fix(db): migrate unreleased board widget constraint
* fix(ui): retry failed Workboard widget loads
* fix(ui): keep stale widget refresh cleanup inert
* fix(ci): align plugin widget landing guards
2026-07-21 17:59:20 -07:00
Peter Steinberger
1f0a3ecc68
feat(ui): session observer HUD, sidebar subtitles, and settings ( #112260 )
...
* feat(ui): session observer HUD, subtitle integration, and settings
* test(ui): observer demo fixtures for the mock control-ui harness
* fix(ui): satisfy lint and deadcode gates for observer surfaces
* test(ui): adopt renamed pull-request summary api after rebase
* fix(ui): clean rebase artifacts in observer test files
2026-07-21 17:05:14 -07:00
Peter Steinberger
c84921634d
fix(macos): require explicit consent for privacy-sensitive access ( #112321 )
...
* fix(macos): avoid passive Automation prompts
* fix(macos): keep Voice Wake recognition on device
* fix(macos): require consent for activity presence
* chore(apps): refresh native i18n inventory
* fix(macos): preserve presence clears across gateway versions
* fix(macos): prioritize activity privacy opt-out
* chore(apps): refresh native i18n inventory
* fix(macos): scrub legacy presence activity
* fix(macos): migrate permission status caller
* fix(macos): preserve unknown permission state
* fix(macos): refresh privacy change artifacts
* refactor(macos): remove stale presence helper
* fix(deps): patch URI and Jaeger advisories
* test(gateway): adopt pairing-bound node sessions
2026-07-21 15:28:13 -07:00
Peter Steinberger
8f31892b55
feat(apps): native session branch switcher with branch-safe durable outbox ( #112056 )
...
Branch menu (list/switch) for macOS+iOS shared chat via sessions.branches.*;
rewind/fork/switch gated on run activity and pending outbox work through a
durable session-mutation lease; outbox rows carry branch-epoch ownership with
local-only flush checks, atomic confirm/park transitions, attempt-versioned
delivery callbacks, fresh retry identity for possibly-accepted rows, and
epoch-guarded branch evidence; 21-locale native translations for new strings.
2026-07-21 10:59:44 -07:00
Peter Steinberger
b2aa21612d
feat(ui): show PR status on Claude threads ( #112180 )
...
* feat(ui): show PR status on catalog threads
* fix(ui): complete PR summary protocol artifacts
* perf(anthropic): bound PR metadata deduplication
2026-07-21 05:01:04 -07:00
Peter Steinberger
89fe452991
feat(gateway): session observer digests over the utility model ( #112216 )
...
* feat(gateway): session observer digests over the utility model
* fix(gateway): split session-observer modules and satisfy ci gates
* fix(gateway): observer reads session entries without materializing agent state
2026-07-21 04:04:13 -07:00
Peter Steinberger
be5e427f56
feat(dashboard): plugin-declared widget data bindings and action verbs ( #112083 )
...
* feat(dashboard): add plugin capability declarations
* docs(dashboard): describe plugin capabilities
* fix(plugins): preserve registry map cloning
* fix(dashboard): make plugin grant ids unambiguous
* fix(dashboard): align generated plugin grant ids
* chore(boards): internalize verb ids and refresh protocol snapshots
2026-07-20 22:43:04 -07:00
Peter Steinberger
67a15e63e2
feat(dashboard): widget presentation contract, shared frame inset, and intrinsic auto height ( #111977 )
...
* feat(boards): widget presentation contract and height mode in protocol, store, and show_widget
* feat(dashboard): card inset, full-bleed and frameless presentations plus intrinsic auto height
* fix(boards): preserve frame prefs on re-pin, pin legacy resizes, reserve touch chrome in auto height
* fix(dashboard): pass pointer events through the overlay bar to widget content
* fix(dashboard): re-layout auto-height rows when pointer capability changes
* refactor(dashboard): extract widget sizing policy module and split oversized board tests
* test(dashboard): complete frame lifecycle host stubs for content-height callback
* fix(dashboard): fold sizing into grid module, scope bar interactivity, drop useless fixture escape
* fix(dashboard): inline widget-size literal and drop orphan sizing module for startup budget
2026-07-20 20:18:27 -07:00
Josh Avant
33720886c8
fix(agents): keep sender-scoped tools in delegated runs ( #110345 )
...
* fix(agents): preserve requester policy across delegation
* fix(agents): keep policy types internal
* test(codex): cover delegated policy forwarding
* fix(agents): harden delegated policy contract
* fix(agents): preserve split-owner completion policy
* fix: version delegated requester snapshots
* fix: refresh delegated policy protocol artifacts
2026-07-20 19:42:06 -05:00
Peter Steinberger
49ff6a4497
fix(protocol): classify system agents in rosters ( #111920 )
...
* fix(protocol): classify system agents in rosters
* fix(ci): align agent kind client gates
* fix(ci): keep roster filtering in startup bundle
* chore(ui): remove superseded roster module
* style(android): satisfy agent kind test formatting
* style(linux): format merged agent capability assertion
* fix(config): reject reserved system agent ids
* chore(i18n): refresh native source inventory
* style(android): format agent kind surfaces
* fix(gateway): preserve configured agent ownership
2026-07-20 16:57:04 -07:00
Peter Steinberger
d5a8233e76
feat(gateway,ui): agent-scoped model provider credentials ( #111796 )
...
* feat: scope model provider credentials by agent
* fix: reject unknown model auth agent ids
* fix: discard stale model provider preload
* fix(gateway): reject whitespace-only explicit agent ids
* fix: scope model provider probes by agent
* fix: complete model provider agent scoping
* fix(ui): always clear the providers refresh flag on completion
* fix(ui): keep probe epochs monotonic across agent switches
* fix: derive agent scope for provider aborts
* fix: satisfy model provider CI checks
2026-07-20 16:22:09 -07:00
Peter Steinberger
154a49a78b
feat(dashboard): widget capabilities — net CSP, host tools, hardened shared sandbox ( #111687 )
...
* feat(boards): enforce widget capability grants
* feat(ui): expose dashboard widget capabilities
* test(dashboard): align rebased gateway contracts
* refactor(dashboard): finish capability alignment
* chore: internalize unused board sandbox exports
* test(dashboard): bind grants to widget instances
* fix(dashboard): close widget authority lifetime gaps
* refactor(ui): preserve modular widget frame ownership
* test(ui): preserve explicit MCP App lease refresh
* test(ui): use shared dashboard sandbox server
* fix(ui): settle widget requests on reconnect
* fix(ui): retry transient widget document loads
* refactor(dashboard): document WebRTC egress residual
* fix(dashboard): clear landing checks
2026-07-20 06:54:44 -07:00
Peter Steinberger
248726fafd
feat(anthropic): import Claude Desktop custom groups ( #111644 )
...
* feat(anthropic): import Claude Desktop custom groups
* fix(anthropic): resolve Claude Desktop groups from LevelDB entries
Group discovery regexed whole decompressed blocks, so matches were not
attributable to a Local Storage value and byte order decided the winner.
On a real 5.4MB store that mislabelled 59 of 159 sessions, surfacing a
mojibake label spliced out of Snappy copy-record bytes.
Parse SSTable entries properly instead: prefix-delta keys bounded by the
restart array, newest internal sequence per user key (honoring deletions),
and record scanning confined to a single value. Values are normalized so
Chromium's UTF-16 form scans like Latin-1, and unflushed WAL writes keep
precedence over SSTables.
Prod LOC grows ~77; it buys structural correctness in place of ordering
luck, and folds the old index-only walk into one shared entry decoder.
Verified against the live store: 159 assignments, 0 mislabelled versus an
independent entry-level ground truth, 0 control-character labels.
* fix(ui): sort custom session groups ahead of project groups
Custom groups were pushed into the section list as encountered, so their
position depended on roster order rather than the documented behavior;
the existing test only passed because its fixture happened to be ordered
that way. Collect custom and project groups separately and concatenate,
and assert the guarantee with a reversed-input case.
* fix(anthropic): widen LevelDB fixture key type for test typecheck
The prefix-delta helper assigned a Buffer into a Buffer-typed accumulator
whose generic argument differed, which tsgo rejects in the test lane.
* chore(anthropic): drop release-owned changelog edit from the PR
CHANGELOG.md is generated at release time, so a normal PR must not carry
an entry. The release-note context lives in the feature commit message and
the PR body instead.
2026-07-20 00:30:37 -07:00
Jason (Json)
6304a47762
feat(dashboard): harden MCP widget authority ( #111679 )
2026-07-20 00:32:02 -06:00
Peter Steinberger
bc76bb8933
feat(agents): agent-controlled session status, attention, and TTL in the sessions tool ( #111583 )
...
* feat(agents): agent-controlled session status, attention, and TTL in the sessions tool
* feat(protocol): sessions.patch agent status fields and curated attention icon ids
* chore(protocol): regenerate bindings for agent-status patch fields, unexport internal cap
* chore(sessions): unexport internal agent-status TTL default
2026-07-19 21:01:09 -07:00
Peter Steinberger
64c82812a5
feat(dashboard): pinned MCP apps — board rendering, lease re-mint, durable tool grants ( #111524 )
...
* feat(boards): mint pinned MCP app views
* feat(ui): render pinned MCP apps on dashboards
* fix(dashboard): reconcile MCP app rebase
* fix(dashboard): align generated CI contracts
* test(gateway): record board.widget.appView release train
* fix(dashboard): revalidate pinned MCP app views
2026-07-19 19:51:26 -07:00
Peter Steinberger
06480d767c
feat(dashboard): stitch session dashboards end-to-end — live provider, show_widget pin, board commands ( #111218 )
...
* feat(dashboard): pin canvas widgets through board domain
* feat(control-ui): wire session dashboards end to end
* fix(control-ui): preserve direct reset confirmation
* fix(control-ui): localize dashboard default tab
* test(dashboard): satisfy changed typecheck gate
* fix(dashboard): satisfy changed lint gate
* fix(dashboard): harden pinned widget lifecycle
* fix(dashboard): use extracted mock normalizer
* test(dashboard): reconcile hardened board admission tests
* fix(dashboard): align grant and canvas protocol requests
* fix(dashboard): preserve refresh and pin invariants
* fix(boards): treat missing board tables as empty on read-only paths
* fix(boards): accept read-only handles in board table probe
* fix(control-ui): preserve virtual board widget types
* fix(dashboard): align view types with protocol
* fix(dashboard): keep resolved board view typed
* chore(canvas): drop test-only html read wrapper
* chore(release): defer dashboard note generation
* fix(protocol): align board widget put params type
* fix(control-ui): preserve queued reset approval
* fix(control-ui): gate dashboard pinning capability
* chore(test): isolate dashboard capability fixture
* fix(control-ui): refresh dashboard pin affordance
2026-07-19 12:36:54 -07:00
Peter Steinberger
6d4082ef97
fix(ui): prevent unsafe custodian nudge answers ( #111430 )
...
* fix(ui): harden custodian nudge actions
* refactor(ui): split custodian page helpers
* fix(ui): classify custodian nudge delivery
* fix(ui): ignore stale custodian question replies
* fix(ui): restore rejected custodian questions
* fix(ui): preserve custodian wizard uncertainty
* refactor(ui): keep nudge text helper private
* test(ui): model uncertain custodian delivery
* fix(ui): scope delayed custodian dismissals
* fix(ui): retain in-flight custodian nudges
* fix(ui): block nudges during hosted wizard input
* chore(protocol): regenerate gateway models
2026-07-19 11:10:41 -07:00
Peter Steinberger
197c4f5a04
feat: generic session discussion seam with Control UI panel ( #111337 )
...
* feat: add session discussion panel seam
* fix: keep discussion iframe cookie-capable and changelog release-owned
* test: cover cookie-capable discussion iframe sandbox
* fix: stretch discussion panel host so the embed fills the rail
* fix: keep provider failures retryable and probe discussion availability before showing the action
* fix: block same-origin discussion embeds, show action on catalog sessions, close stale panel on reconnect
* fix: scope discussion probes and panel callbacks to the issuing connection
* fix: dedupe in-flight discussion probes per session
* fix: retry superseded discussion probes and key-scope panel results
* fix: regenerate Swift protocol models and extend advertised-method expectations
* style: format chat-pane-header
* fix: regenerate Kotlin protocol models and date discussion methods in the 2026.7 train
* chore: restore release-owned changelog to main state
* chore: keep changelog untouched relative to merge-base
2026-07-19 09:47:47 -07:00
Peter Steinberger
8c7f09a3c4
feat(system-agent): durable rolling transcript with openclaw.chat.history ( #111440 )
...
* feat(system-agent): durable rolling transcript with openclaw.chat.history
* chore(ui): scanner-safe auth root in custodian session ownership key
* fix(system-agent): durable reset boundary for transcript seeding
* fix(ui): ownership-aware custodian session rotation with capability gating
* fix(ui): bounded history load and reconnect-safe transcript refresh
* fix(ui): keep unknown-outcome warning and event nudges across transport transitions
* fix(ui): flag-backed unknown-outcome warning independent of retry state
* fix(ui): armed ownership boundaries and abandon-before-rotate ordering
* chore(ui): localize the server-side sensitive mask in durable history
* fix(ui): repair rebase-dropped import and mock arity
* chore: gate fixes — void history handler, module-local transcript internals
* refactor(gateway): leaf history-turn contract to keep the module graph acyclic
* chore(gateway): stamp openclaw.chat.history with its introduction train
* test(gateway): record openclaw.chat.history in the 2026.7 train pin
2026-07-19 08:37:00 -07:00
Peter Steinberger
3b84a55d99
refactor(protocol): pre-publish cheat-window cleanup and vintage tracking ( #111041 )
...
* fix(codex): drain dynamic-tool handlers before side-thread cleanup
* refactor(protocol): rename question ids to questionId and flatten answer maps
* refactor(protocol): slim worker stack and unify session-catalog shapes
* refactor(protocol): delete dead public surface and polish packaging
* feat(protocol): track release-train vintage on gateway methods and schemas
* fix(apps): align question surfaces merged from main with reshaped protocol
* test(health): shape secret fixtures to scanner-safe token names
* test(health): use scanner-safe token fixtures
* fix(apps): align question surfaces merged from main with reshaped protocol
* fix(ci): prove reshaped protocol in shallow checks
* fix(ui): align sidebar question fixtures with protocol
* fix(apps): read flat Swift question answers
* fix(apps): align question surfaces merged from main with reshaped protocol
* fix(apps): refresh native question inventory
* fix(apps): align macOS snapshot fixtures with protocol
* fix(ui): align narration question fixture with protocol
2026-07-19 04:07:15 -07:00
Peter Steinberger
5c9916950e
feat(gateway): watched sessions in presence with viewer facepiles ( #111225 )
...
* feat(gateway): expose watched sessions in presence
* fix(gateway): resolve concurrent watched-session rollbacks via in-flight state
* fix(ui): viewing CI conformance — lazy facepile, bindings, dead exports
* fix(ui): move viewer presence projection out of the startup chunk
* fix(ui): capture sessionKey before facepile filter closure
2026-07-19 02:53:19 -07:00
Peter Steinberger
b9fa1ffa27
feat(gateway): system change history RPC and Ask OpenClaw recent-changes panel ( #111286 )
...
* feat(gateway): system change history RPC and Ask OpenClaw recent-changes panel
* test(gateway): fix journal fixtures, split custodian page tests, refresh docs map
* chore: quiet lint on journal reader tests and custodian harness
2026-07-19 02:38:05 -07:00
Peter Steinberger
8631832048
fix: workspace divergence no longer wedges cloud-worker sessions ( #111244 )
...
* fix(cloud-workers): resolve workspace divergence with keep-local conflicts
* fix: retain workspace conflicts during worker reclaim
* style: satisfy workspace reconciliation lint
* chore: defer cloud worker changelog to release
* refactor: split cloud workspace reconciliation modules
* fix: satisfy workspace module boundary checks
2026-07-19 01:49:35 -07:00
Peter Steinberger
0f95e66b7f
feat(talk): add durable client voice sessions ( #111216 )
...
Live-append voice transcripts into the agent session and persist a per-agent SQLite call record across relay and client transcript paths.
Add run-scoped spoken confirmation for high-impact actions, mutation digests, bootstrap-context injection, talk.client.transcript and talk.client.close protocol methods, and Control UI adoption. This adds zero new configuration.
Co-authored-by: Clifton King <clifton@users.noreply.github.com >
2026-07-19 01:06:49 -07:00
Peter Steinberger
ccb147518c
feat(agents): Swarm core — collector spawn, agents_wait, structured output, caps (gated) ( #110932 )
...
* docs: add Swarm implementation spec
* feat(agents): Swarm core — collector spawn, agents_wait, structured output, fastMode, caps
Implements docs/plan/swarms.md §4-6: tools.swarm config gate (default off),
collector-mode sessions_spawn (collect/outputSchema/fastMode/groupId), fail-closed
child approvals, agents_wait race-semantics tool, per-group FIFO scheduler with
maxConcurrent/maxChildrenPerGroup/maxTotalPerGroup caps, additive registry and
state-schema columns (no schema-version bump), and colocated tests.
Part of #110325
* fix(agents): rebase reconciliation — preserve swarm state columns
* fix(agents): O(1) collector session index, cheap-first preflight, collector start lifecycle hooks
Autoreview findings: replace the per-request full registry scan with an
index-maintaining run map and gate the persisted-store fallback behind
isSubagentSessionKey; emit subagent_progress/subagent_spawned from the swarm
scheduler start callback so collector children produce balanced plugin
lifecycle events.
* chore(protocol): regenerate Swift gateway models for swarm fields
* fix(agents): lint cleanup — typed catch, explicit microtask flush, no executor return
* fix(agents): knip/test-support/max-lines cleanup for swarm surfaces
* fix(agents): keep tool-catalog ui-safe — callers pass prepared swarmEnabled fact
resolveSwarmConfig value-import in tool-catalog dragged the server graph into
the Control UI bundle via tool-policy-shared (UNLOADABLE_DEPENDENCY on
subpath aliases). Catalog stays pure; the gateway tools-catalog handler
resolves the gate and passes the boolean.
* fix(agents): reconcile swarm spawn pipeline
* fix(agents): refresh swarm tool metadata
* fix(apps): sync swarm tool localization
* style(agents): compact tool display metadata
* fix(plugin-sdk): account for swarm config surface
2026-07-18 23:30:11 -07:00
Peter Steinberger
932e8be06c
feat(agents): canonical agent creation with Custodian hatch flow ( #111052 )
...
* refactor(agents): centralize agent creation
* feat(ui): add new agent hatch flow
* refactor(agents): keep creation paths lean
* fix(agents): hide internal creation types
2026-07-18 22:50:02 -07:00
Peter Steinberger
c684b13213
feat(gateway): thread authenticated user identity into presence ( #111179 )
...
* feat(gateway): thread authenticated user identity into presence
* feat(gateway): regenerate Swift protocol bindings for presence user
2026-07-18 21:06:22 -07:00
Peter Steinberger
2f00a417ed
feat(gateway): session dashboard domain — board RPCs, ticketed widgets, dashboard tool, per-agent persistence ( #110960 )
...
* feat(gateway): add session dashboard domain
* test(gateway): cover board event guards
* fix(gateway): authorize board widgets with view tickets
* feat(boards): persist dashboards in agent databases
* test(boards): use tracked SQLite temp directories
* test(gateway): isolate board deletion lifecycle coverage
* fix(boards): harden widget view ticket bindings
* fix(boards): lazily ensure additive board schema
* fix(gateway): complete dashboard integration metadata
* fix(boards): satisfy generated integration checks
* fix(boards): align persistence with repository guards
* fix(boards): retain notice test reset
* fix(protocol): generate dashboard union models
* fix(boards): harden dashboard persistence and serving
* fix(boards): satisfy dashboard CI guardrails
2026-07-18 20:17:51 -07:00
Peter Steinberger
593ac4ae0c
feat(apps): rewind and fork a session from native chat bubbles ( #110886 )
...
* feat(apps): rewind and fork a session from native chat bubbles
* docs(apps): note lease-parity contract on message fork dispatch
* fix(apps): native i18n inventory sync and doc-comment style for bubble actions
* fix(apps): translate native bubble action strings across locales
* fix(apps): refresh generated iOS localization catalog after rebase
2026-07-18 17:52:03 -07:00
Peter Steinberger
8853217ec7
fix(gateway): cancel run-bound approvals on abort and expose approval-park lifecycle ( #110993 )
...
* fix: harden approval abort lifecycle
* fix(gateway): recheck abort before committing detached exec authorization
* fix(gateway): recheck abort after inline exec authorization commit
* fix(gateway): propagate run-abort cancellation on the inline approval path
* fix(ci): refresh approval protocol bindings
2026-07-19 00:52:21 +01:00
Peter Steinberger
556a2ee276
feat(cron): add per-job dynamic cadence ( #110978 )
...
Add optional per-job pacing bounds across the cron API, CLI, tool schema, public output, and SQLite job envelope, requiring at least one bound. Allow only the currently running paced job to record a one-shot next_check proposal and carry it through isolated-run completion.
After successful runs, clamp the proposal to the job bounds and persist an exact one-shot slot marker so maintenance preserves only that timestamp. Clear the marker on runs, edits, and schedule normalization; preserve existing no-proposal, skip, timeout, and error scheduling behavior.
2026-07-18 23:43:39 +01:00
clawsweeper[bot]
b88646cf78
feat(webchat): reply-to a message with hydrated reply context ( #110791 )
...
* feat(webchat): reply-to a message with hydrated reply context
Control UI replies now carry the target transcript id as replyToId on
chat.send. The Gateway resolves the replied-to message from session
history and hydrates the channel-agnostic ReplyToId/ReplyToBody/
ReplyToSender envelope fields, so agents receive reply_to_id,
has_reply_context, and the untrusted reply-target block exactly like
Discord replies (mirrors #90263 ). Reply targets without a persisted
transcript id keep the inline-quote fallback.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
* fix(webchat): keep non-reply chat.send dispatch ordering and satisfy CI gates
* docs(webchat): match reply-context doc to webchat conversation-info policy
* fix(webchat): hydrate reply bodies from display-visible content only
---------
Co-authored-by: openclaw-clawsweeper[bot] <openclaw-clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com >
Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com >
2026-07-18 15:57:59 -06:00
Peter Steinberger
5fe8d6a852
fix(gateway): clients can identify authorization failures ( #110925 )
...
* fix(gateway): structure authorization errors
* test(gateway): align authorization contracts
* fix(gateway): regenerate protocol bindings
* fix(gateway): preserve optional scope errors
* fix(gateway): report complete pairing scopes
* style(gateway): format protocol exports
2026-07-18 22:02:28 +01:00
Peter Steinberger
88e5af7097
feat(ui): interleaved sidebar zone with custom session icons and drag ordering ( #110682 )
...
* feat(ui): custom session icons with agent-drawable SVG and nav-parity pinned rows
* wip: slice-2 interleaved sidebar zone (pre-review)
* fix(ui): trim icon exports, bypass protocol barrel in startup bundle, regen Swift protocol client
* fix(ui): preserve unknown-agent zone entries on writes, prune entries on any unpin
* fix(ui): reset keeps unloaded session slots; enforce SVG byte cap on canonical form
* fix(ui): archiving a pinned session retires its sidebar zone slot
* fix(ui): persist drag-pinned zone slot only after the pin patch lands
* fix(ui): recompute drop insertion against freshest zone order on pin ack
* fix(ui): consume self-drop events before the zone bailout
* docs(ui): note the non-sidebar unpin pruning contract on pruneSidebarSessionEntry
* refactor(ui): extract pure session-tree projection; drop unused zone type export
2026-07-18 17:13:09 +01:00
Peter Steinberger
105aebacea
fix: report agent deletion cleanup failures ( #110560 )
2026-07-18 12:23:39 +01:00
Peter Steinberger
e1d87e9a9d
fix(sessions): preserve parent lifecycle for parallel children ( #110541 )
...
* fix(sessions): declare parent lifecycle disposition
Co-authored-by: Luiz Antonio Busnello <lab@generantis.com.br >
* chore: keep release notes in PR body
* fix(sessions): preserve parallel fallback on old gateways
* chore(i18n): refresh native source inventory
---------
Co-authored-by: Luiz Antonio Busnello <lab@generantis.com.br >
2026-07-18 10:16:14 +01:00
Peter Steinberger
9b556bcd5e
feat(system-agent): auto-hatch into the agent after fresh setup ( #110331 )
...
* feat(system-agent): hatch into the agent after a fresh setup applies
The hatch is a ceremony: a fresh-install setup apply now announces the hatch
and hands straight off (open-tui in the terminal, open-agent for gateway
clients); the web custodian page lands in agent chat with the birth-sequence
opener prefilled as a draft so one Send wakes the seeded BOOTSTRAP. Non-setup
persistent operations keep their in-place replies.
* fix(system-agent): hatch only on clean post-write verification
* fix(ui): scope hatch draft to setup handoffs
* fix(onboarding): seed hatch handoffs across clients
* fix(i18n): refresh native hatch inventory
* fix(onboarding): seed remote gateway hatch handoff
* fix(macos): localize hatch draft
* fix(onboarding): gate hatch on pending bootstrap
* fix(i18n): sync hatch source to ios catalog
* fix(onboarding): gate hatch on canonical pending state
2026-07-18 03:32:15 -04:00
Patrick Erichsen
f9b860fc84
feat(plugins): order featured catalog by recency ( #110273 )
2026-07-17 18:06:13 -07:00
Peter Steinberger
897198b9f5
feat(gateway): typed structured questions on openclaw.chat with live option cards ( #110242 )
...
* feat(gateway): typed structured questions on openclaw.chat
The chat result gains an additive optional question field (2-4 options, one
recommended max, per-option reply text). Producers: the two onboarding welcome
variants (apply-setup yes/ask, ready next-step) and hosted wizard select/confirm
steps, which mirror the awaited step so card clients render real wizard choices.
Prose replies always stand alone for text-only clients (macOS app, TUI). The
custodian page consumes the typed field and drops the PR1 string-marker parser
(never shipped in a release); cards send the option reply while the transcript
shows the label.
* chore: keep OnboardingWelcome type module-local
* chore(protocol): regenerate Swift bindings for the chat question field
2026-07-18 01:14:44 +01:00
Peter Steinberger
ec8f6e5e03
feat(browser): add secure per-tab copilot panel ( #109817 )
...
* feat(browser): add copilot security contracts
* fix(gateway): expose verified client identity to handlers
* feat(browser): add secure per-tab copilot panel
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* refactor(browser): separate copilot gateway hint custody
* fix(browser): preserve legacy pairing parse shape
* fix(browser): harden copilot lifecycle custody
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* fix(browser): enforce copilot lifecycle boundaries
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* style(browser): format copilot sources
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* fix(browser): preserve copilot consent revocation
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* refactor(browser): split copilot custody owners
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* test(browser): normalize websocket array buffers
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* chore(protocol): regenerate Swift gateway models
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* refactor(browser): model copilot runtime entrypoints
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* fix(browser): honor extension build boundaries
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* test(gateway): assert targeted chat delivery
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* test(gateway): cover targeted delivery calls
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* fix(browser): declare copilot build dependencies
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* fix(ci): clear browser copilot gate failures
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* test(ci): cover copilot lint exclusion
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* fix(browser): gate copilot on relay custody
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
* test(browser): bound copilot relay frames
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
---------
Co-authored-by: Cameron Beeley <cameron.beeley@gmail.com >
2026-07-18 01:00:23 +01:00
Peter Steinberger
781913025b
improve: stream native sessions as hosts finish ( #110211 )
...
* perf: stream native session catalogs by host
* fix: satisfy session catalog CI contracts
* fix: retain changed-session refresh timing
* fix: keep catalog refresh helpers private
2026-07-17 23:59:57 +01:00
Peter Steinberger
da44d52ac6
feat: ask_user — structured questions from the agent with web card, channel buttons, and text answers ( #109922 )
...
* feat(gateway): add transient question runtime (question.* methods + broadcasts)
* feat(agents): add blocking ask_user question tool with chat prompt delivery and text-reply claim
* feat(ui): interactive in-thread question cards for ask_user
* feat(channels): native tap-to-answer buttons for ask_user on Telegram, Discord, and Slack
* feat(ui): unify codex and gateway question cards with interactive gateway answering
* refactor(agents): collapse ask_user pending state to one registry; docs for ask_user
* fix(agents): include ask_user in normal gateway runs; add question-flow control-ui e2e
* test(ui): avoid credential-shaped fixture in question card test
* refactor(ui): reorder stream-group context keys
* fix(gateway,ui): validate question answers at resolve; reject secret/duplicate-label questions; UI retry and reconnect hardening
* fix(gateway,agents): canonicalize accepted option answers; bound ask_user option labels to 64 chars
* chore(ci): prune unused question exports, allowlist mobile question events, fix discord lint
* chore(ci): regenerate protocol/i18n/docs/tool-display artifacts for question surface
* fix(protocol): flatten QuestionRecord for native codegen; drop TS-only alias from schema registry
* chore(android): regenerate ask-user localization resources
* docs: regenerate docs map after rebase
* fix(ci): avoid stale read-only dependency disks
* test: remove stale reef lint suppression ratchet
* fix(ci): keep source locale drift advisory in release gates
* fix(ci): scope locale advisory handling to parity check
2026-07-17 22:24:17 +01:00
Peter Steinberger
8020dd3e08
fix(reef): discover trusted peers as conversations ( #109905 )
...
* fix(reef): discover trusted peer conversations
* test(reef): document temporary state cleanup
* test(gateway): include conversation discovery in method order
* chore: leave changelog to release automation
* fix(gateway): preserve configured conversation discovery
* fix(gateway): validate turns before session binding
* fix(gateway): preserve directory conversation identity
2026-07-17 13:55:30 +01:00
WhatsSkiLL
4d3b18811e
feat(android): add Wear real-time Talk controls ( #109483 )
...
* feat(android): add Wear real-time Talk controls
* fix(android): satisfy Wear Talk CI checks
* fix(talk): remove unused client language parameter
* fix(android): harden Wear realtime Talk routing
Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com >
* chore(android): refresh Wear Talk metadata
* chore(android): align native i18n baseline
---------
Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-17 13:46:05 +01:00
Peter Steinberger
6ac15970a7
feat(onboarding): unified empty-state with provider icons, websites, and recommended installs ( #109681 )
...
* feat(onboarding): unify setup recommendations
* fix(control-ui): proxy model setup icons
* fix(onboarding): refresh landing artifacts
* chore(ui): sync translated i18n catalogs
* chore(ui): keep generated locale artifacts on the refresh workflow
2026-07-17 01:01:06 -07:00
Peter Steinberger
a2ec3f6904
refactor: separate external conversations from local sessions ( #109411 )
...
* feat: separate external conversations from sessions
* test: cover conversation tool authorization
* chore: refresh session schema baseline
* fix: persist effective conversation delivery text
* fix: bind conversation identity to delivery target
* fix: preserve pending conversation deliveries
* fix: make conversation delivery outcomes synchronous
* refactor: make conversation delivery durable
* fix: harden durable conversation retries
* fix: close durable conversation pre-send gaps
* fix: terminally reject invalid conversation deliveries
* refactor: route external conversations through gateway
* fix: namespace conversation delivery queue intents
* refactor: remove obsolete transcript replacement path
* test: prove conversation delivery v10 migration
* test: keep conversation action mock typed
* fix: clear conversation refactor CI gates
* test: align Reef delivery coverage
* chore: refresh Android conversation strings
* fix: harden external conversation state
* fix: close conversation race edges
* fix: preserve conversation delivery identity
* fix: replay durable conversation operations
* fix: unify agent schema at version 11
* chore: move release note context to PR
* fix: make required queue persistence force core delivery
* chore: refresh plugin SDK baseline
2026-07-17 00:09:51 -07:00