Peter Steinberger
26165bbe80
fix(ios): smooth sidebar drags and remove background seams ( #112299 )
...
* fix(ios): polish sidebar drawer interaction
* fix(ios): latch sidebar drag direction
2026-07-21 08:40:30 -07:00
Peter Steinberger
5e7cb225e4
fix(mobile): load pinned and base-path Control UI pages ( #112175 )
...
* fix(mobile): harden Control UI webviews
* refactor(mobile): keep native inventory stable
* docs(android): clarify shared pinned trust
* fix(ios): preserve encoded Control UI base paths
2026-07-21 08:19:07 -07:00
Peter Steinberger
3a1351a303
fix(cron): show script automations across user clients ( #112195 )
...
* fix(cron): preserve script jobs across clients
* chore(i18n): refresh native cron strings
* chore(i18n): align rebased native catalogs
* chore(i18n): defer generated locale refresh
2026-07-21 08:02:59 -07:00
Papilionidae
3dfb4c9cd7
fix(anthropic): accept "cli" entrypoint in Claude session catalog discovery ( #105162 )
...
* fix(anthropic): accept "cli" entrypoint in Claude session catalog discovery
Claude Code v2.x writes entrypoint: "cli" in its JSONL session files.
Previously only "sdk-cli" was recognized, causing all v2.x sessions to
be silently skipped.
Extract CLI_ENTRYPOINTS set and isCliEntrypoint() helper, then apply
the same fix to both TypeScript catalog and macOS paired-node native
catalog. Add matching regression coverage on both platforms.
Closes #105164
* fix(anthropic): refresh Claude CLI session discovery
Apply the reviewed cli/sdk-cli allowlist, mirrored negative coverage, and fallback-scope documentation to current main.
Co-authored-by: 黄攀0668000858 <huang.pan@xydigit.com >
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-21 07:14:42 -07:00
liuhao1024
cd38cdef05
fix(macos): respect OPENCLAW_STATE_DIR in openclaw-mac CLI config resolution ( fixes #98591 ) ( #98631 )
...
* fix(macos): resolve OPENCLAW_STATE_DIR in openclaw-mac CLI config resolution
Add shared resolveOpenClawConfigURL() to GatewayConfig.swift with
precedence: OPENCLAW_CONFIG_PATH > OPENCLAW_STATE_DIR > default home.
Switch ConfigureRemoteCommand and loadGatewayConfig to use it.
Add focused tests for all three precedence paths.
* fix(macos): honor state directory in openclaw-mac
Use one normalized config resolver for connect, wizard, and configure-remote, with explicit config path precedence over the selected state directory.
Co-authored-by: liuhao1024 <sunsky.lau@gmail.com >
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-21 05:59:21 -07:00
Vincent Koc
8187c09a58
style(android): satisfy compact token ktlint
2026-07-21 20:54:26 +08:00
Vincent Koc
85ba26ebad
fix(android): localize compact token suffixes
2026-07-21 20:54:26 +08:00
Peter Steinberger
e5610976cf
fix(linux): harden Quick Chat widget lifecycle ( #112261 )
...
* fix(linux): harden Quick Chat widget lifecycle
* fix(linux): retry stale widget cleanup before reveal
2026-07-21 05:35:06 -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
aeeff149b9
feat(android): port the working claw indicator, wait phrases, and turn recap ( #112221 )
...
* feat(android): decode session run metadata
* feat(android): animate the working claw
* feat(android): show settled turn recaps
* fix(android): preserve legacy cache migration
* fix(android): expire hidden recap watches
* chore(i18n): refresh native source anchors
* fix(android): drop unsettled hidden recaps
* fix(android): keep claw timing local
* fix(android): anchor settled turn recaps
* chore(i18n): refresh native source anchors after rebase
* fix(android): route chat status copy through native i18n
2026-07-21 04:43:27 -07:00
Peter Steinberger
8481c69cbe
feat(apple): port the working claw indicator, wait phrases, and turn recap to iOS/macOS ( #112188 )
...
* feat(chat): add native working progress state
* feat(chat): port working claw indicator to Apple
* fix(apple): isolate generated locale catalog
* style(apple): use doc comments on ChatWorkingPhrase API declaration
2026-07-21 04:35:27 -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
312e656138
fix(ios): show agent avatars and use more sidebar space ( #112082 )
...
* fix(ios): improve agent sidebar menu layout
* chore(i18n): refresh native source inventory
2026-07-21 03:05:18 -07:00
Vincent Koc
c6c1151c3a
build(i18n): generate Wear locale resources
2026-07-21 17:36:49 +08:00
Vincent Koc
6a26f9f383
fix(android): localize Wear connection failures
2026-07-21 17:36:49 +08:00
Vincent Koc
d4021c351c
fix(macos): localize settings surfaces ( #112185 )
2026-07-21 16:15:40 +08:00
Peter Steinberger
262deec72c
feat(mobile): session Dashboard on iOS and Android via authenticated Control UI webview ( #112163 )
...
* feat(mobile): session dashboard screens on iOS and Android via authenticated Control UI webview
* fix(android): keep configured Control UI base path in session dashboard URL
* docs(android): note system-trust boundary of the shared Control UI webview
* fix(android): origin-only document-start rule for Control UI auth script
* chore(i18n): refresh native inventory on rebased head
* fix(ios): swiftlint closure form in session dashboard toolbar
* fix(i18n): tolerate workflow-owned pending native rows in PR alignment checks
* fix(android): KTX toUri per lint and refresh native inventory
* fix(android): ktlint import order incl. main-inherited fleet test, refresh inventory
2026-07-21 01:13:23 -07:00
Vincent Koc
9e0c5f94b5
fix(macos): support background-only launches ( #112168 )
...
* fix(macos): support background-only launches
* fix(macos): refresh native i18n inventory
* fix(i18n): refresh native inventory after main sync
2026-07-21 15:41:49 +08:00
Peter Steinberger
6d1c215a78
fix(macos): reject public plaintext Gateway profiles ( #112161 )
...
* fix(macos): reject public ws gateway profiles
* fix(macos): normalize bracketed private IPv6 hosts
* test(macos): preserve bracketed localhost policy
2026-07-21 00:35:13 -07:00
Vincent Koc
2c316f51f7
fix(apps): harden mobile gateway and watch state
2026-07-21 09:00:21 +02:00
joshavant
985ec0650f
Android: record 2026.7.3 correction metadata
2026-07-21 01:16:42 -05:00
joshavant
c56dd50d2a
Android: prepare 2026.7.3 correction build
2026-07-21 01:08:20 -05:00
joshavant
b63ccef409
Android: align Wear internal release track
2026-07-21 01:06:12 -05: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
joshavant
9089e33a1a
Android: add Wear OS screenshot pipeline
2026-07-21 00:06:15 -05:00
joshavant
d445a251f7
fix(android): remove retired voice release screenshot
2026-07-20 23:04:56 -05:00
joshavant
49349577e0
chore(android): prepare 2026.7.3 Play release
2026-07-20 22:51:52 -05: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
Peter Steinberger
9f66f53fb5
feat(chat): collapse long user prompts ( #111866 )
...
* feat(chat): collapse long user prompts
* fix(chat): sync disclosure strings
* fix(android): reuse disclosure labels
* chore(i18n): refresh native inventory
* perf(ui): trim prompt disclosure chunk
2026-07-20 20:10:15 -07:00
Peter Steinberger
f06b6be182
feat(macos): manage Gateway profiles and multiple windows ( #111986 )
...
* feat(macos): manage gateway profiles and windows
* fix(macos): preserve gateway settings localization
* fix(deps): update axios past security advisory
2026-07-20 18:10:02 -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
Colin Johnson
0d3cbae6a1
fix(ios): sidebar drags jitter and toolbar control flickers ( #111831 )
...
* fix(ios): smooth sidebar gestures and toolbar controls
* fix(ios): keep sidebar edge gesture below toolbar
* chore(ios): refresh native localization inventory
* fix(ios): preserve edge content interactions
* fix(ios): restore smooth sidebar tracking
* test(ios): align drawer source guards
2026-07-20 17:26:17 -04:00
Peter Steinberger
a52eb2134b
feat(apps): connect multiple gateways simultaneously ( #111932 )
...
* feat(apps): support simultaneous gateways
* fix(apps): satisfy multi-gateway checks
* chore(apps): refresh multi-gateway baselines
* style(android): format gateway fleet code
2026-07-20 13:06:29 -07:00
Peter Steinberger
ba3711bb82
feat(linux): render widgets in Quick Chat ( #111933 )
2026-07-20 11:56:03 -07:00
Peter Steinberger
38df399ed8
fix(macos): show local ClickClack session discussions ( #111883 )
...
* fix(macos): show local ClickClack session discussions
* fix(macos): support loopback aliases in discussion embeds
* fix(macos): allow trusted hosted ClickClack embeds
* fix(macos): trust only dashboard-initiated discussion frames
2026-07-20 09:33:27 -07:00
WhatsSkiLL
ec9bc46e80
Wear: animate Talk avatar from playback audio ( #111516 )
...
* Wear: animate Talk avatar from playback audio
* fix(wear): preserve PCM mouth frame continuity
---------
Co-authored-by: Colin <colin@solvely.net >
2026-07-20 12:33:09 -04: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
Colin Johnson
2f967bc8f3
test(ios): refresh chat voice and sidebar UI coverage ( #111655 )
2026-07-20 08:02:16 -04:00
Peter Steinberger
7defd4a7b4
refactor(android): split offline client databases ( #111710 )
...
* refactor(android): split offline client databases
* chore(android): refresh native i18n inventory
* test(gateway): close databases before transcript cleanup
2026-07-20 02:28:02 -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
bdf71d7d98
refactor(apple): unify offline client databases ( #111598 )
...
* refactor(apple): unify offline client databases
* refactor(apple): remove dead cache APIs
* fix(apple): satisfy native storage gates
* fix(apple): sync generated localization catalog
* Revert "fix(apple): sync generated localization catalog"
This reverts commit d0f5e7b74932e98ccc5f1984840e8f9d545edc2d.
* fix(i18n): keep source validation pre-merge
* test(macos): isolate flaky suite state
* test(macos): isolate log locator on main actor
2026-07-19 22:14:12 -07: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
0fff74c800
feat(ios): replace the tab bar with a black overlay sidebar (web parity + dashboard) ( #111339 )
...
* feat(ios): unify navigation on a black overlay sidebar and drop the phone tab bar
* test(ios): rework navigation tests and snapshot UITests for the sidebar shell
* chore(i18n): sync derived native catalogs for sidebar strings
* feat(ios): reveal the sidebar beneath a push-away rounded content card
* feat(ios): web-parity sidebar — agent switcher, pinned pages, sessions vocabulary, uniform content card
* chore(i18n): translate sidebar and session strings across native catalogs
* fix(ios): sidebar footer shows connection dot only when degraded, like the web
* feat(ios): sidebar toggle top-left with edge-swipe open; card surface owns the drawer chrome
* fix(ios): single sidebar refresh owner, alias-aware Home badges, RM tap-close, user pin order, drop vestigial idiom shims
* feat(ios): align sidebar with the mobile prototype — agent roster, theme-following palette, web session subtitles, row badges
* chore(i18n): translate agent roster and Recent strings across native catalogs
* feat(ios): frosted-glass agent picker with uniform drawer insets
* fix(ios): address sidebar review findings — settings toggle edge, per-agent scoping, alias-aware selection, cron paging, refresh cadence
* fix(ios): clear landing CI blockers
2026-07-19 14:50:39 -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
WhatsSkiLL
50ce5dedea
fix(android): improve Wear thread follow behavior ( #111459 )
...
* improve(android): move Wear agent, session, and model pickers to Home
* fix(android): improve Wear thread follow behavior
* fix(android): stabilize Wear thread follow lifecycle
* fix(android): keep streamed Wear tail visible
Co-authored-by: JARVIS-Glasses <whatsskilll@gmail.com >
---------
Co-authored-by: Colin <colin@solvely.net >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-19 10:54:10 -07:00