Peter Steinberger
a6a0716486
feat(setup): rename Crestodian to OpenClaw system agent
...
User-facing name is now OpenClaw (the system speaks); internal code name is
system-agent. Gateway methods crestodian.* -> openclaw.chat/openclaw.setup.*,
agent tool -> openclaw, reserved agent ids openclaw + retired crestodian.
openclaw setup routes: onboarding flags -> onboard, -m/--yes -> system agent,
bare configured interactive -> OpenClaw chat, unconfigured -> onboarding.
Hidden crestodian CLI and /crestodian TUI aliases kept; docs moved to
docs/cli/openclaw.md with redirect stub. macOS/Android strings in lockstep.
Refs #107237
2026-07-14 11:03:02 -07:00
Peter Steinberger
82d2a03d0a
fix(swift): remove dead shared kit declarations ( #107616 )
2026-07-14 09:55:01 -07:00
Peter Steinberger
084d1d9637
feat(control-ui): upload files into terminals ( #107364 )
...
* feat(control-ui): add terminal file uploads
* fix(control-ui): protect Windows terminal uploads
* fix(control-ui): satisfy terminal upload gates
* chore(ui): translate terminal upload labels
* fix(control-ui): reject unknown Windows upload shells
* fix(control-ui): harden Windows upload paths
* fix(control-ui): retry terminal upload cleanup
* chore(ui): reconcile locale translation memory
* fix(control-ui): validate terminal upload inputs
* fix(control-ui): retry failed upload cleanup
* chore(ui): refresh terminal upload locale metadata
* fix(terminal): integrate uploads with session recovery
* refactor(control-ui): isolate terminal upload transport
* fix(control-ui): keep upload helper types private
2026-07-14 09:33:39 -07:00
Peter Steinberger
2ecc6b6b6b
fix(ui): show restart banner for unapplied config ( #107577 )
...
* fix(ui): derive config apply state from gateway
* test(ui): align applied config hash coverage
* test(ui): follow config autosave flow
* fix(ui): guard applied config refreshes
* fix(ui): reconcile patched config revisions
* fix(ui): prevent stale config apply polling
* chore: leave release notes to release flow
* refactor(config): split applied revision helpers
* style(config): format gateway methods
* fix(i18n): refresh Korean native glossary hash
2026-07-14 08:43:35 -07:00
Peter Steinberger
9ab3d09f4d
fix(terminal): recover sessions after stale Control UI connections ( #107419 )
...
* fix(terminal): harden reconnect recovery
* style(terminal): simplify recovery branch
* fix(terminal): handle session picker failures
* fix(terminal): refresh generated surfaces
* fix(terminal): translate session picker labels
* fix(terminal): ignore stale detach after rebind
* fix(terminal): preserve offsets through coalescing
* fix(i18n): refresh Korean native glossary hash
* fix(terminal): serialize picker adoption
2026-07-14 08:27:33 -07:00
Peter Steinberger
20f145f9c1
fix(mac): enable terminal actions for paired-node sessions ( #107361 )
...
* fix(mac): enable paired-node terminal sessions
* fix(ci): align node worker bridge checks
2026-07-14 03:22:28 -07:00
Jason (Json)
01a7f4fb3f
feat(ui): add images and model selection to new sessions ( #107358 )
...
Merged via squash.
Prepared head SHA: cf99b5bab5
Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com >
Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com >
Reviewed-by: @fuller-stack-dev
2026-07-14 04:14:01 -06:00
Peter Steinberger
63c48f881f
fix(protocol): refresh generated clients ( #107177 )
2026-07-13 23:18:55 -07:00
Peter Steinberger
cf8b57e7d0
feat(skills): scan session history for workshop ideas ( #106766 )
...
* feat: scan past sessions for skill proposals
* feat(ui): add progressive skill history scans
* fix(ui): keep skill history scans synchronized
* refactor: split skill history scan ownership
* style: fix mock helper formatting
* style: format skill history scan
* build: refresh skill history schema baselines
* build: refresh plugin SDK baseline after rebase
* perf(ui): keep startup request budget bounded
* fix(skills): satisfy history scan integration gates
* fix(ui): bound control ui startup chunks
* build: refresh plugin SDK API baseline
* build(ui): refresh self-learning translation memory
* refactor(ui): split skill workshop state
* fix(ci): refresh skill workshop gates
* fix(ci): satisfy skill history lint
* build: refresh plugin SDK baseline after main rebase
2026-07-13 16:15:50 -07:00
Peter Steinberger
334e7f3f21
feat(apps): add native mobile Automations parity ( #106355 )
...
* fix(apps): address native Skills review feedback
* feat(apps): add native Automations parity
* fix(ios): preserve automation editor selection
* fix(android): page automation discovery
* chore(apps): refresh native source inventory
* fix(ios): refresh invalid automation diagnostics
* chore(apps): sync native localization
* fix(cron): stabilize paginated snapshots
* refactor(cron): split pagination helpers
* fix(apps): address final native review feedback
* chore(apps): refresh native source inventory
* fix(ios): dedupe automation list actions
* chore: keep release note in PR context
* fix(ci): repair current main architecture gates
* fix(ios): default new skill requirement fields
* fix(ios): retain queued automation reservations
2026-07-13 15:35:32 -07:00
Peter Steinberger
4319ddbe8c
feat(control-ui): import Codex and Claude Code memory ( #106406 )
...
* feat(control-ui): import coding assistant memory
* test(migrate): clean memory import temp dirs
* chore: move memory import note to PR body
* build: refresh memory import generated artifacts
* fix(control-ui): complete memory import checks
* build(control-ui): localize memory recovery labels
* fix(control-ui): harden memory import recovery
* refactor(migrate): keep memory import surfaces bounded
* fix(control-ui): use canonical agent row type
* fix(codex): drop dead migration type exports
* fix(migrate): restrict imported memory permissions
* fix(control-ui): preserve memory import recovery state
* fix(control-ui): retain memory import results
* build(control-ui): preserve translation memory history
* fix(control-ui): bind memory import state to agent
* fix(control-ui): unlock memory import after refresh
* test(gateway): preserve memory method suffix
* fix(migrate): bind reviewed memory imports
* fix(migrate): make memory imports retry-safe
* perf(ui): keep memory import lazy
* build: refresh generated artifacts after rebase
* chore: keep migration runtime within LOC guard
* build: refresh Swift protocol model
2026-07-13 15:30:06 -07:00
Peter Steinberger
9b64c861e5
fix(chat): prevent reasoning races after model changes ( #106534 )
...
* fix(chat): serialize session setting changes
* fix(chat): bind settings mutations to gateway routes
* fix(chat): align settings lanes with shared requests
* fix(ios): preserve injected session mutations
* fix(chat): preserve authoritative settings refreshes
* fix(chat): reconcile authoritative settings state
* fix(ci): satisfy session settings quality gates
* fix(android): regenerate native string resources
* fix(ci): update session settings export baseline
* fix(ci): reconcile dead export baseline
* fix(android): resume outbox after settings lane
* chore(i18n): refresh native source inventory
* chore(i18n): refresh rebased native inventory
* chore(i18n): sync control UI locales
* chore: keep release notes in pull request
* style(macos): fix settings comment format
* fix(ai): keep Google thinking type internal
2026-07-13 14:27:54 -07:00
Peter Steinberger
e3c5821d98
feat(ui): redesign Channels page with guided channel setup wizard ( #106469 )
...
* feat(ui): redesign Channels page with guided channel setup wizard
Adds wizard.start flow=channels gateway RPC (additive protocol change) that
drives the shared channel-setup wizard (openclaw channels add) over the
session step protocol. Control UI Channels page becomes a card hub with
plugin-art covers, guided per-channel setup modal (WhatsApp QR pairing via
web.login.*, BotFather/Slack/Discord helper links), and a detail overlay
hosting the full schema config form.
* test(ui): cover channel wizard controller; refresh channels view test props
* chore(mock): use non-token-shaped wizard placeholder
* test(gateway): scanner-safe auth local in channels wizard test
* fix(ui): cancel gateway wizard session on channels page disconnect
* fix(ui): adopt browse-all channel pick and guard dirty config before setup
* fix(ui): cancel gateway session created by a stale wizard.start
* fix(ui): adopt multiselect channel picks; drop redundant String()
* fix(ui): track all wizard-adopted channels so WhatsApp QR runs regardless of pick order
* feat(gateway): report configured channels on terminal channel-wizard result
Replaces the Control UI's channel-adoption heuristic with the authoritative
outcome: the channels flow reports its actual selection after config commit,
the wizard session surfaces it as an additive channels field on the terminal
wizard.next result, and the UI keys WhatsApp QR linking off that.
* refactor(ui): align channels hub with the unified settings design language
Hub becomes settings-language rows (44px art tiles, status dots, uppercase
section headings, hairline groups) instead of a card gallery; the detail
overlay hosts the migrated per-channel settings sections with Run setup in
the header. Wizard dialog and tile/cover styles move to spacing tokens.
* chore(i18n): translate channels hub/setup strings; refresh raw-copy baseline
* refactor: satisfy LOC ratchet and dead-export gates
Split mock-dev channel/plugin fixtures into their own modules, move wizard
runner types/defaults to server-methods/wizard.ts, extract the channels page
wizard host and nostr profile HTTP ops, and unexport internal-only types
(incl. the unused config-form SECTION_META barrel re-export).
* chore(i18n): retranslate channels strings on rebased locale bundles
* fix(test): drop redundant String() in channels wizard e2e
* fix: address channel-wizard review findings
- lock wizard cancellation before durable installs/config writes
- report configured channel accounts on the terminal wizard result and
start WhatsApp QR pairing for that account (web.login accountId)
- forward request options through the browser gateway client so wizard
RPC timeouts apply
- render skipped setup as a no-change completion
- keep detail/advanced config reachable for unconfigured channels
- surface the dirty-config warning inside the detail overlay
- adopt the picked channel for wizard title/links in browse-all flows
* fix(ui): local wizard RPC timeout; translate no-change completion strings
2026-07-13 11:49:42 -07:00
Peter Steinberger
9166b23318
feat: configure model providers from the Control UI settings page ( #106490 )
...
* feat(gateway): add models.probe RPC, credential provenance, targeted auth logout
* feat(ui): configure model providers from settings — keys, probes, logout, defaults
* docs: Control UI provider configuration section
* fix(ui): confirm fallback shrinkage via replacePaths; guard model catalog refresh races; scanner-safe probe fixtures
* test(models): scanner-safe probe fixture identifier
* chore(i18n): resync model-providers strings after rebase
* fix(gateway-protocol): drop duplicate probe type imports after rebase
* chore(protocol): regenerate Swift client for probe field order
* chore(i18n): resync model-providers strings after main rebase
* test(ui): scope model-providers E2E to settings-section headings
* fix(models): isolate marker probes from stored profiles; emit no_model for config-only providers [AI]
* fix(models): honor configured auth mode for env probes; probe config-bound profiles past auth.order [AI]
* fix(gateway): resolve provider auth aliases in models.probe [AI]
* fix(gateway): scope targeted auth logout to skip provider-wide run abort [AI]
* fix(models): probe requested provider for overrides; unregister ephemeral probe DB [AI]
* fix(gateway): exclude local no-auth markers from models.authStatus API-key provenance [AI]
* chore(i18n): resync model-providers strings for landing
2026-07-13 11:23:34 -07:00
Jason (Json)
b32f59c8c1
feat(ui): create catalog sessions from the sidebar ( #105810 )
...
* feat(ui): create sessions from catalog headers
* fix(ui): deduplicate catalog-owned sessions
* fix(ui): preserve catalog session routing state
* fix(ui): keep per-agent session creation in switcher
* fix(anthropic): normalize runtime config snapshot
* test(plugin-sdk): account for model runtime export
* test(plugin-sdk): classify current deprecated surface
* test(ui): follow agent chip menu trigger
* fix(ui): bind catalog drafts to validated agent
* fix(ui): resolve catalog targets from gateway
* refactor(ui): split sidebar session helpers
* chore(ci): complete LOC baseline migration
* fix(ui): extract sidebar session catalog rendering
* fix(anthropic): use provider-relative catalog model id
* chore(ci): ratchet sidebar LOC baselines
* test(ui): cover catalog draft retargeting
* chore(plugin-sdk): refresh API baseline
* style: format catalog session changes
* fix(ui): retry catalog drafts after reconnect
* fix(ui): back off catalog target retries
* fix(ui): keep unresolved catalog drafts locked
* fix(ui): gate catalog creation in core
* fix(ui): keep catalog renderer private
* style(ui): format catalog session target
* chore(plugin-sdk): refresh API baseline
* style(ui): format catalog group state
* Merge latest origin/main CI fixes
* fix(ui): preserve catalog session agent selection
* fix(ui): preserve catalog session agent
* chore(plugin-sdk): refresh API baseline
* fix(ui): type catalog route data
* chore(plugin-sdk): refresh API baseline
* refactor(sessions): centralize transcript path archival
* fix(ui): target expanded agent catalog sessions
* fix(ui): scope catalog actions to expanded agent
* docs(ui): clarify catalog loader fallback
* fix(ui): scope catalog pagination to agent
* test(ui): type sidebar lifecycle refresh
* fix(anthropic): preserve node catalog bindings
2026-07-13 09:25:22 -06:00
Peter Steinberger
7d23570591
fix(mac): keep node admission tunnel-local ( #106481 )
2026-07-13 08:19:53 -07:00
Peter Steinberger
e98c7dfbcb
feat(cloud-workers): session placement, dispatch, and worker turn routing ( #106332 )
...
* feat(gateway-protocol): add session placement schema
Closed state discriminator for session execution placement (local/requested/provisioning/syncing/starting/active/draining/reconciling/reclaimed/failed), sessions.dispatch params, and worker-admission transcript/live cursor extensions. Swift protocol models mirror the schema.
* feat(state): add worker session placement table
worker_session_placements rows carry placement state, transition generation, worker ownership metadata, ACK cursors, and the turn claim columns used for atomic admission.
* feat(cloud-workers): add durable placement state machine store
SQLite-backed placement store split by concern: state table (placement-state), discriminated record types + shape invariants (placement-record), row codec + CAS transition values (placement-row-codec), atomic turn-claim admission/release/waiters (placement-turn-claims), and lifecycle CAS transitions (placement-store).
* feat(cloud-workers): sync workspaces and attach sessions to worker environments
Environment service session attachment + turn credentials, tunnel workspace commands over a dedicated SSH runner, and git/plain workspace sync into $HOME/.openclaw-worker/workspaces with an immutable manifest. Symlink escapes are rejected locally before transfer (macOS openrsync stat-fails them opaquely) and again by the remote manifest guard.
* feat(worker): run one-shot embedded turns from launch descriptors
Worker runtime executes a single embedded turn from a stdin launch descriptor and reports completed/failed/fenced on stdout for the gateway launcher. Terminal lifecycle live events are deferred past the final transcript flush; transcript projection helpers are shared via transcript-message instead of duplicated in the runtime.
* feat(cloud-workers): dispatch placements and route worker turns
Dispatch service drives local->requested->provisioning->syncing->starting->active with failure teardown (placement-dispatch-failure) and restart/runtime recovery incl. lost-worker reclaim (placement-dispatch-recovery). Worker turn launcher claims the placement turn atomically, builds a windowed launch descriptor (worker-turn-payload), runs the remote one-shot worker, and reconciles the committed transcript; agent runners route turns through the session placement admission provider.
* feat(gateway): expose session placement RPCs and startup reconciliation
sessions.dispatch RPC with lifecycle admission barriers, operator-facing placement projection on session listings, placement-aware session reset guard, and startup/interval reconciliation wiring for worker placements.
2026-07-13 08:03:53 -07:00
Peter Steinberger
f167089d61
feat(nodes): continue Claude catalog sessions on paired nodes via streaming CLI agent runs ( #105833 )
...
* feat(gateway): stream node.invoke progress with idle timeouts and cancel
* feat(node-host): opt-in approval-gated claude cli agent run command
* feat(agents): run node-placed claude-cli turns through streaming node invoke
* feat(anthropic): continue claude catalog sessions on advertising nodes
* docs(nodes): document paired-node claude agent runs and continuation
* chore(plugin-sdk): admit spawn-invocation helper into surface budget
* fix(nodes): harden streaming invoke and node run policy from review findings
* test(node-host): prove multi-token tool-policy argv fails closed
* fix(nodes): allowlist cancel event for apps and break node-host type cycle
* chore(protocol): regenerate Swift gateway models for node invoke progress
* chore(node-host): drop test-only export surface flagged by deadcode ratchet
* style(node-host): merge invoke-types imports
* refactor(nodes): split node agent run modules to satisfy the LOC ratchet
* chore(protocol): regenerate android gateway models and sync export baseline
* chore(plugin-sdk): admit spawn-invocation helper and inherited deprecated drift into surface budget
* chore(plugin-sdk): tolerate inherited agent-core deprecated export
* fix(anthropic): drop node param parser orphaned by upstream catalog split
* ci: sync unused-export baseline with healed main
* test(agents): adopt renamed cli backend prepare helper
* style(node-host): format claude run spawn invocation
* ci: retrigger checks
* chore(plugin-sdk): pin surface budgets to healed-base counts
* fix(protocol): restore untyped lazy validators after upstream style change
2026-07-13 07:39:22 -07:00
Peter Steinberger
5ca0e634bc
fix(ios): connect iPhone and Watch to protocol v3 gateways ( #106294 )
...
* fix(ios): support gateway protocol v3
* chore(i18n): refresh native source metadata
* fix(watchos): keep direct transport on protocol v4
* chore(i18n): refresh Watch source metadata
2026-07-13 05:44:49 -07:00
Peter Steinberger
e1a92c99cf
fix(ios): persist chat thinking selections ( #106287 )
...
* refactor(apple): share chat gateway requests
* fix(ci): sync native app inventory
* docs: keep Apple release note in PR body
2026-07-13 05:44:08 -07:00
Peter Steinberger
6c5084f1ad
feat(xai): add realtime voice provider ( #106267 )
...
* feat(xai): add realtime voice provider
Co-authored-by: Vitor Cepeda Lopes <vitor@vitorcepedalopes.com >
* fix(xai): satisfy realtime voice validation
* fix(xai): harden realtime relay boundaries
* chore: drop release-owned changelog edit
* chore(i18n): refresh native voice catalogs
* chore(i18n): refresh Control UI raw-copy baseline
* chore(plugin-sdk): refresh API baseline hashes
* chore(i18n): use canonical main catalogs
* chore(i18n): refresh realtime voice source inventory
* chore: refresh xai voice landing head [skip ci]
* chore: refresh integrated protocol artifacts [skip ci]
---------
Co-authored-by: Vitor Cepeda Lopes <vitor@vitorcepedalopes.com >
2026-07-13 05:17:24 -07:00
Peter Steinberger
88fccc6735
fix(ci): refresh generated Swift protocol
2026-07-13 12:35:26 +01:00
Peter Steinberger
73a0bf4b7c
refactor(apple): share chat gateway payload mapping ( #106154 )
...
* refactor(apple): share chat gateway payload mapping
* test(apple): track shared event mapping
2026-07-13 02:39:01 -07:00
Peter Steinberger
938d41014f
feat(mobile): default pairing to full node access ( #105928 )
...
* feat(mobile): default pairing to full node access
* chore: leave release notes to release workflow
* refactor(mobile): bound pairing helpers
* chore(i18n): refresh mobile access inventory
* chore(ci): lower mobile pairing LOC baseline
* fix(mobile): complete pairing validation artifacts
* ci: remove stale transcript target export baseline
* fix(ios): wrap access upgrade guidance
* fix(ios): preserve localized access key
* fix(ci): dedupe read-only SQLite guardrail
* fix(mobile): secure full-access node setup
2026-07-13 02:30:45 -07:00
Peter Steinberger
bafabba0df
fix(gateway): preserve Control UI turns across restarts ( #106151 )
...
* fix(gateway): preserve Control UI turns across restart
* perf(sessions): index restart recovery state
* fix(sessions): avoid replaying pre-admitted turns
* fix(sessions): index per-entry recovery status
* fix(sessions): guard restart failure notices
* fix(sessions): preserve terminal claims across admissions
* fix(sessions): retry failed recovery notices
* fix(sessions): harden restart retry ownership
* fix(gateway): tighten restart recovery typing
* fix(sessions): close restart recovery races
* refactor(sessions): split restart recovery ownership
* chore(sessions): clean restart recovery lint
* chore: drop release-owned changelog entry
* fix(gateway): satisfy restart recovery guards
* test(gateway): cover Control UI durable admission
2026-07-13 02:08:56 -07:00
Peter Steinberger
b57e7b74e6
feat: add native Skills management parity ( #105814 )
...
* feat(apps): add native skills management parity
* chore(i18n): refresh native skills inventory
* style(apps): apply canonical Swift formatting
* style(ios): wrap skills status message
* chore(i18n): refresh native skill locales
* refactor(apps): trim native skills review surface
* chore(i18n): regenerate native app resources
* chore: keep release changelog owner-only
* fix(ios): remove dead gateway and watch wrappers
2026-07-13 00:11:11 -07:00
Ayaan Zaidi
143fed81c1
feat(sessions): reopen history around search hits
2026-07-13 10:27:29 +05:30
Vincent Koc
5e9bc0916f
fix(ios): harden gateway and watch state handling
2026-07-13 03:53:15 +02:00
Peter Steinberger
af326b98d7
fix(macos): avoid SwiftUI macro plugin dependency ( #105768 )
...
* fix(macos): avoid SwiftUI macro plugin dependency
* fix(macos): scope chat previews to iOS
* chore(i18n): refresh native source locations
* fix(macos): preserve explicit environment keys in formatter
* chore(pr): keep changelog release-owned
2026-07-12 17:40:41 -07:00
Peter Steinberger
e01d1e85f3
ci(swift): enforce shared OpenClawKit dead-code coverage ( #105770 )
...
* ci(swift): enforce shared kit dead-code coverage
* chore(i18n): sync native source inventory
* ci(swift): install pinned iOS scan tools
2026-07-12 17:35:47 -07:00
Peter Steinberger
d287c9b414
refactor(mac): make app node a CLI capability superset ( #105642 )
...
* refactor(mac): reuse CLI node-host runtime
* fix(mac): prefer checkout CLI in debug builds
* chore: leave release notes to release automation
* chore(mac): sync native string inventory
* chore(mac): refresh native locale artifacts
* fix(node): satisfy native and deadcode gates
2026-07-12 13:16:07 -07:00
Peter Steinberger
5e45ebe82b
feat(ios): add private HealthKit summaries ( #105616 )
...
* feat(ios): add private HealthKit summaries
* fix(ios): satisfy Health settings lint
* chore(ios): sync Health localization artifacts
* chore(ios): refresh generated localization and docs
* fix(ios): reject partial Health history
* chore(ios): sync Health string catalogs
* fix(ios): bridge Health authorization dates
* fix(ios): scope Health summaries to today
2026-07-12 12:52:38 -07:00
Peter Steinberger
ec62328eb8
chore(apps): remove dead code
2026-07-12 10:18:03 -07:00
Vincent Koc
6ddc87de0a
fix(ios): satisfy watch localization build gates
2026-07-12 18:33:47 +02:00
Vincent Koc
a1f0a92b03
fix(watch): preserve terminal approval outcomes
2026-07-12 18:33:47 +02:00
Vincent Koc
99668e3fd1
fix(watch): type legacy chat status switches
2026-07-12 18:33:47 +02:00
Vincent Koc
0e49f09112
fix(watch): preserve localized terminal status
2026-07-12 18:33:47 +02:00
Vincent Koc
702c4cce83
fix(watch): preserve unknown semantic fallback
2026-07-12 18:33:47 +02:00
Vincent Koc
f25b583b30
fix(watch): preserve shipped protocol compatibility
2026-07-12 18:33:47 +02:00
Vincent Koc
b9f67123f5
fix(watch): complete tolerant snapshot decoding
2026-07-12 18:33:47 +02:00
Vincent Koc
ec65e10df7
fix(watch): preserve snapshot compatibility
2026-07-12 18:33:47 +02:00
Vincent Koc
a69f1cb1be
fix(watch): dual-write legacy snapshot status
2026-07-12 18:33:47 +02:00
Vincent Koc
7c4c92e36d
fix(chat): localize context percentage formatting
2026-07-12 18:33:47 +02:00
Vincent Koc
95cff58166
fix(watchos): localize semantic status on watch
2026-07-12 18:33:47 +02:00
Vincent Koc
f3000a953f
fix(ios): preserve runtime localization semantics
2026-07-12 18:33:47 +02:00
Vincent Koc
4e689e33d5
fix(ios): localize gateway problem presentation
2026-07-12 18:33:47 +02:00
Vincent Koc
632ea2bcb7
style(ios): satisfy SwiftFormat in localized surfaces
2026-07-12 18:33:47 +02:00
Vincent Koc
99c1fedf27
fix(watchos): localize chat status on watch
2026-07-12 18:33:47 +02:00
Vincent Koc
ee3104340d
fix(ios): localize design and chat surfaces
2026-07-12 18:33:47 +02:00
Peter Steinberger
c6dc5bc764
fix(canvas): hosted pages fail on macOS with scoped Gateway auth ( #105336 )
...
* fix(canvas): harden hosted Canvas on macOS
Resolve Gateway-hosted Canvas and A2UI targets through refreshed node capabilities, keep bridge and live-reload behavior correct, and restrict native action dispatch to the exact trusted main-frame document.
Preserve scalar evaluation results, secure action IDs, and hidden state-directory watching.
Co-authored-by: GuoJiaming <804436395@qq.com >
Co-authored-by: Lucenx9 <185146821+Lucenx9@users.noreply.github.com >
Co-authored-by: zeng-weihan <ceng.weihan@xydigit.com >
* chore(canvas): defer release note
* chore(canvas): refresh native i18n inventory
* refactor(canvas): isolate hosted surface resolution
---------
Co-authored-by: GuoJiaming <804436395@qq.com >
Co-authored-by: Lucenx9 <185146821+Lucenx9@users.noreply.github.com >
Co-authored-by: zeng-weihan <ceng.weihan@xydigit.com >
2026-07-12 13:02:27 +01:00