Peter Steinberger
876a3f0d8f
fix(ui): bulk session archive no longer stalls per thread ( #120493 )
...
* perf(ui): batch session archive requests
* fix(ci): sync bulk archive protocol surfaces
* fix(plugins): validate bulk archive ownership
* fix(ci): restore current main quality gates
* fix(ui): bound bulk archive dispatch
* fix(ui): bound bulk archive dispatch
* fix(ui): preserve bulk archive compatibility
* fix(ui): recover metadata-less archive fallback
2026-08-08 07:53:43 -07:00
Peter Steinberger
bc3bf842c9
fix(sessions): preserve context provenance across retries [AI] ( #120509 )
...
* fix(protocol): preserve checkpoint token version casing
* fix(agents): preserve retry usage chronology
* test(sessions): relax transcript estimate assertion
* fix(agents): preserve omitted harness attempt provenance
* test(sessions): cover retry and Swift provenance
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
* test(agents): cover hook-block usage chronology
---------
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-08-08 07:06:36 -07:00
Peter Steinberger
a4b4c58e87
fix(protocol): regenerate gateway models after #120497 schema change ( #120514 )
2026-08-08 01:01:55 -07:00
Peter Steinberger
fa9626c4e1
refactor(steering): make active-run admission exact and atomic ( #120285 )
...
* refactor(steering): make admission exact and atomic
* fix(steering): bind targets by run identity
* fix(steering): inject before reply dispatch
* fix(steering): preserve backend injection modes
* fix(steering): target session suggestions
* fix(steering): preserve sibling delivery contracts
* style(steering): satisfy exact-head lint
* fix(steering): preserve targetless protocol compatibility
* fix(steering): preserve exact targets through replies
2026-08-07 16:58:04 -07:00
joshavant
026f4045b7
Revert "fix(protocol): preserve gateway session attribution across node runs"
...
This reverts commit 735f176b01 .
2026-08-07 18:40:17 -05:00
Dallin Romney
2a0bbd23f5
feat: expose session classification facts ( #106832 )
...
* feat: expose session presentation metadata
* fix: restrict session titles to safe display metadata
* fix: preserve saved session display names
* fix(protocol): tolerate future session presentation values
* fix(gateway): keep direct peer names out of presentation
* fix(protocol): connect session presentation to native rows
* fix(gateway): canonicalize session presentation metadata
* fix(gateway): satisfy session presentation CI checks
* feat(gateway): flatten session classification facts
* fix: repair session classification generated models
* fix(gateway): canonicalize session classification keys
* fix(gateway): classify spawned delivery sessions
* fix(android): retain session classification facts
* test(android): make scripted gateway calls concurrency-safe
* test(live-updater): isolate fixture git commands
2026-08-07 14:56:56 +08:00
Vincent Koc
aea8b4f565
test(macos): stabilize gateway session negotiation tests ( #120141 )
...
Fixes #120130
Punchcard-Session: golden-meadow-timber-8g
2026-08-07 13:30:58 +08:00
Vincent Koc
bc5b29a032
test(swift): preserve queued websocket frames ( #120106 )
2026-08-07 10:44:41 +08:00
Vincent Koc
735f176b01
fix(protocol): preserve gateway session attribution across node runs
2026-08-07 08:06:01 +08:00
Josh Avant
618fba92bf
feat(audit): add execution identity inspection ( #117034 )
...
* feat(audit): add opt-in execution identity inspection
* fix(audit): gate recovery identity retention
* fix(audit): keep recovery identity type private
* test(audit): type internal recovery fixture
* test(audit): split recovery identity coverage
* docs(audit): define operator read trust boundary
* test(qa): register identity scenario child
* fix(audit): enforce shared identity retention bounds
* fix(audit): seal public ingress identity boundary
* fix(audit): keep ingress guard lint-clean
* fix(gateway): preserve advertised method order
* chore(protocol): sync advertised method order
* fix(protocol): encode audit selector invariants
* test(audit): prove exact execution guard
* fix(audit): keep identity storage lazy
2026-08-04 20:05:15 -05:00
Vincent Koc
03ba86544e
fix(protocol): regenerate Swift wizard models
2026-08-04 09:51:56 +08:00
Vincent Koc
7741cbdaa7
test(gateway): cover published protocol artifacts ( #118799 )
...
* test(gateway): cover published protocol artifacts
* test(gateway): isolate Swift artifact proof
* test(gateway): compile Swift models portably
* test(gateway): align protocol metadata fixture
* test(gateway): install packed protocol as consumer
2026-08-04 03:26:29 +08:00
Jesse Merhi
68be0e3378
feat: enable rich setup controls in custodian chat ( #114631 )
...
* feat(protocol): carry the awaited wizard step on the chat result
* fix(system-agent): strip sensitive wizard prefill from chat results
* fix(wizard): keep setup secrets server-side
* test(wizard): preserve prompt mock typing
* fix(ui): add reveal toggle to wizard secrets
* refactor(ui): adopt Carapace sensitive input
* fix(ui): hide revealed sensitive input mask
* test(twitch): cover environment-only setup
* feat(custodian): render rich wizard steps
* fix(custodian): validate wizard text replies
* feat(custodian): submit typed wizard answers
* refactor(gateway): isolate custodian chat turns
* fix(gateway): accept session engine adapter
* fix(ui): narrow wizard control values
* refactor: simplify rich wizard answer flow
* fix(custodian): recover evicted wizard sessions
* docs: note custodian rich setup controls
* test(gateway): split wizard answer coverage
2026-08-03 22:18:27 +10:00
joshavant
1f78c39bd8
fix: adapt completion delivery to current main
2026-08-03 02:48:34 -05:00
Peter Steinberger
ffa9f74670
test(swift): consolidate device identity fixtures ( #118510 )
2026-08-02 23:02:19 -07:00
Peter Steinberger
79568e2005
test(swift): dedupe gateway session connects ( #118484 )
2026-08-02 22:17:43 -07:00
Vincent Koc
a842f482d5
fix(ios): keep attachments in composer when route is unavailable ( #116787 )
...
* fix(ios): retain attachments when delivery route is unavailable
Refs #116724
* chore(i18n): refresh native source inventory
2026-08-03 12:53:48 +08:00
Peter Steinberger
9f19e5e39e
test(swift): dedupe gateway connect options ( #118429 )
2026-08-02 21:10:46 -07:00
Peter Steinberger
27ec985fe2
test(swift): dedupe chat view model fixtures ( #118394 )
2026-08-02 20:14:28 -07:00
Jason (Json)
d3c5ac85ae
fix(chat): preserve trace across history reloads ( #118332 )
2026-08-02 21:08:09 -06:00
Peter Steinberger
22033d7836
test(swift): centralize transcript cache fixtures ( #118322 )
2026-08-02 19:28:36 -07:00
Peter Steinberger
c43ba8e3fc
fix(cli): speed up hook status reads through the Gateway ( #118288 )
...
* perf(cli): reuse gateway hook status (#118222 )
* chore(protocol): register hooks.status schema module in generated surfaces
2026-08-02 17:21:28 -07:00
Peter Steinberger
54c4ff3c06
refactor(swift): consolidate gateway problem mapping ( #118107 )
2026-08-02 13:17:22 -07:00
Peter Steinberger
b3da16ffbb
test(apple): consolidate outbox fixtures ( #118052 )
2026-08-02 10:03:57 -07:00
Peter Steinberger
76cb418b6f
fix(macos): reopen AI choice, fix daemon error text, hand onboarding off to the dashboard custodian ( #117921 )
...
* fix(macos): let onboarding replace an auto-connected AI
The AI page auto-tests the best detected candidate and connects without
asking, then hides every alternative route. Add 'Choose a different AI'
to the connected banner: a re-detect pass with auto-activation
suppressed that ends at the picker (candidates, provider sign-in, API
keys). Also disable the manual key Connect button while another test
runs (submitManualKey silently dropped the tap), and isolate a test
that read the machine's real resume store.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
* fix(macos): surface real daemon errors past the Node banner
Gateway daemon failures summarized as 'Node.js v26.5.1' because the
summary takes the last non-empty line and Node fatal errors end with a
version banner. Drop trailing banner lines and prefer the last
error-shaped line above them; all other output keeps its last line.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
* feat(macos): hand onboarding off to the dashboard custodian
Native onboarding now ends once inference verifies: welcome, connection,
install (when needed), AI setup. Finish opens the dashboard at
/custodian?onboarding=1, where the custodian onboarding owns memory
import, channels, app recommendations, and the hatch (browser-first per
the onboarding redesign). The native memory-import and permissions
pages leave the first-run flow; 'Set up later' keeps the native ready
page. The native navigation bridge gains a validated optional search
field so the handoff can request onboarding chrome; the URL fallback
carries the query alongside the token fragment.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
* refactor(macos): delete the unreachable native memory-import module
The dashboard handoff removed the memory-import page from every flow,
leaving the module reachable only from tests. CI's dead-code scan
rightly flagged the first orphans; remove the whole path (model, page,
mascot wiring, tests) instead of trimming symbol by symbol. The
dashboard's own memory-import surface owns the feature.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
---------
Co-authored-by: Peter Steinberger <steipete@mac-studio-sf2.local >
Co-authored-by: Claude Fable 5 <noreply@anthropic.com >
2026-08-02 02:57:25 -07:00
Peter Steinberger
9e43844264
build: generate native Canvas resources on demand ( #117424 )
2026-08-01 08:16:56 -07:00
Harjoth Khara
b97a214604
fix(canvas): preserve widgets across derived-name collisions ( #117132 )
...
Fixes #116945
2026-08-01 15:33:56 +08:00
metaforismo
102a5915ef
fix(ios): restore Magic Keyboard return in chat composer ( #116042 )
...
* fix(ios): restore hardware return in chat composer
* test(ios): cover hardware return composer flow
* fix(ios): route history keys through native editor
* fix(ios): satisfy composer lint gates
* test(ios): fix snapshot app lookup
* test(ios): keep snapshot helper nonthrowing
---------
Co-authored-by: Patrick Erichsen <patrick.a.erichsen@gmail.com >
2026-07-31 16:21:41 -07:00
Vincent Koc
9b736a42c6
feat(models): expose tool support to clients
2026-07-31 18:43:47 +08:00
Vincent Koc
20e68e01df
fix(gateway): sign device proofs with challenge time ( #116679 )
2026-07-31 16:45:53 +08:00
Vincent Koc
2bd9329af2
merge: sync origin/main
...
* origin/main:
fix(ai): prevent websocket cache clobber on concurrent acquire (#116216 )
test(ui): settle custodian mobile layout assertions (#116613 )
fix(agents): resume Code Mode through gateway restarts (#116605 )
2026-07-31 09:43:10 +08:00
Vincent Koc
32036c473d
fix(agents): resume Code Mode through gateway restarts ( #116605 )
...
* fix(agents): preserve Code Mode restart recovery
* chore(protocol): regenerate Swift agent params
2026-07-31 09:22:27 +08:00
Vincent Koc
3fba74802b
chore(setup): refresh generated native artifacts
2026-07-31 09:06:00 +08:00
Vincent Koc
60bf2bd1ad
fix(macos): wait for the current reconnect snapshot ( #116550 )
...
* fix(macos): isolate snapshot waiter timeouts
* chore: leave changelog to release generation
* test(macos): wait for voice ear expiry
2026-07-30 22:31:40 +00:00
Peter Steinberger
7fa95e2656
feat(ui): add composable skill references ( #116330 )
...
* feat(ui): add composable skill references
* fix(ui): align skill reference CI contracts
* fix(ui): scope skill references to WebChat
2026-07-30 04:07:02 -07:00
Vincent Koc
de67565cda
fix(macos): back off failed Gateway connects ( #116114 )
...
* fix(macos): back off failed gateway connects
* fix(macos): skip backoff for transport cancellation
2026-07-30 07:23:22 +08:00
Peter Steinberger
0021e51f22
feat(apple): media renditions, Now Playing, video upload ( #116051 )
...
* feat(apple): complete media playback and uploads
* fix(apple): preserve movie picker metadata
* fix(apple): harden rendition and picker routing
* style(apple): fix macOS media formatting
2026-07-29 15:50:18 -04:00
Peter Steinberger
e0ab154e5e
fix(ui): explain unavailable MCP tool catalogs ( #115994 )
...
* fix(ui): explain undiscovered MCP tools
* fix(ui): scope MCP discovery notices to the viewed connector
2026-07-29 15:12:08 -04:00
Peter Steinberger
777cfed85a
feat(mac): hand off gateway-owned settings panes to the dashboard ( #115999 )
...
* feat(mac): hand off gateway-owned settings panes to the dashboard
Gateway-config Settings tabs (Channels, Skills, Cron Jobs, Threads,
Instances) now default to a native handoff page with an Open in Dashboard
deep link; a Debug toggle re-enables the legacy native panes. Adds an
openclaw:native-navigate host->shell event with generation-guarded URL
fallback, and lifts the dashboard route map + same-app path validation
into OpenClawKit for future iOS reuse. Exec Approvals stays native: the
Dashboard's host-native policy editor is read-only by contract.
* fix(mac): satisfy native-i18n inventory and type budget
* fix(mac): refresh native i18n source locations
2026-07-29 14:12:42 -04:00
Peter Steinberger
ff72f287c3
fix(gateway): declare viewer presence explicitly instead of deriving it from subscriptions ( #116001 )
...
* fix(gateway): declare viewer presence explicitly instead of deriving it from subscriptions
* refactor(ui): isolate viewer presence lifecycle ownership
* chore(protocol): register viewer presence schema owner
* fix(ui): keep viewer presence cleared after detach
* chore: drop changelog edits from this PR
CHANGELOG.md is release-owned; release generation derives entries from merged
PRs. Release-note context stays in the PR body.
2026-07-29 13:56:54 -04:00
Peter Steinberger
afae681085
feat(apple): add inline media players ( #115903 )
2026-07-29 10:36:38 -04:00
Peter Steinberger
68a3d28906
fix: keep content after HTML-backed disclosures visible ( #115877 )
...
* fix(chat): close disclosures in coalesced HTML
Keep model-authored details closers visible to the shared disclosure contract when CommonMark absorbs them into type-6 HTML blocks across the Control UI and native apps.
* refactor(apps): isolate disclosure unfolding
Keep the native disclosure segmenter below its lint complexity and type-size limits, and refresh the source-owned native i18n inventory after the move.
* fix(apps): align disclosure helper visibility
Keep the extracted same-file helper compatible with Swift access control while leaving its implementation types hidden outside the source file.
* fix(apps): align source replacement visibility
Keep the source replacement helper at the same file-private boundary as the extracted disclosure unfolding types.
2026-07-29 10:24:46 -04:00
Colin Johnson
306c02af57
feat(ui): preview session workspace images ( #95956 )
...
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-29 09:22:46 -04:00
Peter Steinberger
adf3178ae6
feat(gateway): expose MCP tool identity in effective tools ( #115870 )
...
* feat(gateway): expose MCP tool identity in effective-tools catalog
* docs(agents): comment utility-tool pass gate invariant
2026-07-29 08:41:04 -04:00
Peter Steinberger
1ab4e08d62
fix: expanded disclosures render their content on Apple platforms ( #115863 )
...
* fix(apps): render disclosure body content on Apple platforms
* chore(apps): refresh native i18n inventory
2026-07-29 08:14:17 -04:00
Peter Steinberger
8915f9c337
fix(gateway): prevent overlapping setup after wizard cancellation ( #115856 )
...
* fix(wizard): retain cancelled sessions until runner settles
* fix(wizard): purge cancelled sessions after settlement
* test(gateway): cover settled wizard replacement
* test(gateway): split wizard cancellation e2e
* test(gateway): fix wizard e2e env key types
* fix(gateway): forward daemon choice through wizard RPC
Co-authored-by: TheAngryPit <16145902+TheAngryPit@users.noreply.github.com >
* test(gateway): harden wizard cancellation cleanup
Co-authored-by: TheAngryPit <16145902+TheAngryPit@users.noreply.github.com >
* chore: drop changelog edit (release generation owns it)
---------
Co-authored-by: TheAngryPit <16145902+TheAngryPit@users.noreply.github.com >
2026-07-29 07:49:25 -04:00
Peter Steinberger
4c4aa2ed12
feat(gateway): manage audio and video attachments end to end ( #115842 )
...
* feat(gateway): manage audio and video attachments
* feat(gateway): preserve generated media metadata
* fix(gateway): align seeded managed media
* fix(gateway): scope pending media trust by URL
* fix(gateway): split managed media by trust
* fix(gateway): require terminal media trust unanimity
* fix(gateway): align managed media metadata types
* fix(gateway): refresh managed media contracts
* chore(ci): model managed media test seams
* test(sessions): expect canonical media kinds
2026-07-29 07:27:36 -04:00
Vincent Koc
951e7a39bd
fix(protocol): make Swift model checks non-mutating ( #115793 )
...
* fix(protocol): make Swift drift checks non-mutating
* test(protocol): cover core Swift gateway frames
* docs(protocol): clarify Swift model update flow
2026-07-29 18:17:36 +08:00
Peter Steinberger
e8524a5839
feat: add Fish Audio S2.1 and local MLX speech ( #115790 )
...
* feat: add Fish Audio speech support
* chore: remove unused speech exports
* chore: keep Fish API constant private
* test: remove stale code mode import
* style: use bracket access for Fish voice ids
* test: restore QA evidence validator import
2026-07-29 05:15:33 -04:00
Peter Steinberger
a37a5a6575
feat(agents): add per-session tool overrides ( #115785 )
...
* feat(agents): per-session tool overrides (mcp/skills/web-search)
* test(agents): use tracked MCP temp dirs
2026-07-29 05:13:56 -04:00