Peter Steinberger
126b549a26
feat: run and reclaim cloud worker sessions from Control UI ( #108398 )
...
* feat(gateway): finish cloud worker session reclaim
* chore(gateway): refresh cloud worker artifacts
* fix(gateway): preserve recovery environment narrowing
* test(gateway): complete worker tunnel mock
* fix(gateway): harden cloud worker recovery
* fix(gateway): serialize forced worker teardown
* fix(gateway): handle replaced workspace directories
* fix(gateway): preserve forced destroy receiver
* test(ui): cover cloud worker reclaim flow
* fix(gateway): close final worker recovery races
* fix(ci): align cloud worker generated surfaces
* test(gateway): satisfy worker queue lint
* fix(gateway): recheck remote workspace after lease fence
* chore: move cloud worker release note to PR
2026-07-15 11:24:04 -07:00
WhatsSkiLL
4085121faa
fix(android): enlarge voice note recording controls ( #108307 )
...
Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com >
2026-07-15 11:31:00 -04:00
WhatsSkiLL
ae2b2ed05a
fix(android): keep header logo in brand colors ( #108199 )
...
Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com >
2026-07-15 11:30:11 -04:00
WhatsSkiLL
4bf77ca867
fix(android): wrap large segmented controls ( #107574 )
...
* fix(android): wrap large segmented controls
* fix(android): scope segmented control wrapping
---------
Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com >
2026-07-15 11:29:47 -04:00
WhatsSkiLL
63f6cdf5f0
fix(android): outline providers back button ( #106803 )
...
Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com >
2026-07-15 11:28:19 -04:00
Leon-SK668
8cc7cac556
fix(android): preserve emoji in app session labels ( #108102 )
2026-07-15 02:03:48 -07:00
Peter Steinberger
30bbe1b385
fix(system-agent): atomic approval migration + credential-scoped fallback
...
Final review findings:
- Wrap the operator-approval copy/drop/rename in a single immediate
transaction so a crash mid-migration cannot strand or lose rows.
- The inference fallback marked a provider attempted before probing, so a
stale requester credential blocked another agent's valid same-provider
route. Dedup by credential owner and only retire a whole provider on
provider-wide failures (auth/billing may differ per credential owner).
Refs #107237
2026-07-15 01:56:31 -07:00
Peter Steinberger
b1f4aac349
feat(agents): OpenClaw system-agent delegation
...
New openclaw delegation tool relays to openclaw.chat in-process; persistent
writes surface through the existing durable operator-approval registry as a
third system-agent kind (no parallel store), armed only by a human operator
in the Control UI — a delegated agent can never self-approve. Setup wizards
(channel/model/open-setup/open-tui) are refused in delegated mode so a
machine agent cannot complete setup or persist credentials unattended.
Vendor-neutral inference fallback ladder (requester route first, then other
authed providers by provider id). update.run removed from the gateway tool.
Caveman system-prompt fragment steers config/channels/plugins/agents/updates
to the openclaw tool. Doctor-owned state migration widens the approval-kind
constraint; runtime stays canonical-only.
Refs #107237
2026-07-15 01:56:31 -07:00
Leon-SK668
9b6361a50c
fix(android): preserve emoji in voice error status ( #108101 )
...
* fix(android): preserve emoji in voice error status
* chore(android): sync native i18n inventory
* fix(android): align voice status i18n allowlist
2026-07-15 01:16:27 -07:00
WhatsSkiLL
a0af118c0d
fix(android): keep offline chat actions readable ( #107404 )
...
Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com >
2026-07-15 00:15:03 -07:00
WhatsSkiLL
e6f3303cf2
fix(android): enlarge attachment remove touch target ( #106737 )
...
Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com >
2026-07-14 23:13:14 -07:00
Peter Steinberger
e905a682f7
feat(agents): session self-service tools
...
New grouped sessions tool (patch: label/pin/archive/model/thinking; group
CRUD; owner-gated; no reset/delete/compact). sessions_spawn gains visible +
worktree via sessions.create with admission reservation and abort-confirmed
rollback; a started run with no run id is aborted and deleted rather than
left orphaned. subagents tool reads the unified task_runs ledger tree-scoped
(subagent/acp/media/cron) and cancels detached runs, enforcing the
controlScope gate for leaf callers. session_status gains a cost line.
Agent-origin model patches record a fallback marker; runs failing on
auth/billing/model_not_found revert to the last working model (transient
errors never revert), and an independent thinkingLevel change realigns the
marker so revert cannot clobber it.
Refs #107237
2026-07-14 18:12:22 -07:00
Peter Steinberger
890f20be06
feat(macos): coordinate app and Gateway updates ( #107634 )
...
* feat(macos): coordinate app and Gateway updates
* fix(macos): harden coordinated update recovery
* fix(gateway): reject mixed wake presence events
* chore: keep release notes in PR body
* chore(i18n): sync macOS update strings
* chore(generated): sync native artifacts
* style(macos): satisfy Swift checks
* chore(i18n): refresh update source locations
* fix(macos): localize post-update status
* fix(macos): satisfy post-update Swift lint
* chore(i18n): refresh post-update source locations
* test(gateway): isolate system-event routing state
* test(gateway): document system-event authorization
2026-07-14 14:59:32 -07:00
Peter Steinberger
69e9254e0e
fix(ci): regen rename-affected generated surfaces and fix e2e entrypoint
...
native i18n inventory + per-locale artifacts resynced for the OpenClaw
strings; Kotlin gateway protocol enum regenerated instead of hand-edited;
deadcode baseline re-sorted; lint suppression allowlist entries moved to
sorted position; setup TTY check drops redundant boolean compares;
ring-zero first-run e2e calls the real 'openclaw setup' subcommand.
Refs #107237
2026-07-14 11:03:02 -07:00
Peter Steinberger
985a13ba3a
chore(i18n): prune retired crestodian strings and polish setup docs
...
android:i18n sync drops orphaned entries for the renamed key; wizard zh
locales reference openclaw setup; docs title disambiguates the system
agent from the product.
Refs #107237
2026-07-14 11:03:02 -07:00
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
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
63c48f881f
fix(protocol): refresh generated clients ( #107177 )
2026-07-13 23:18:55 -07:00
Peter Steinberger
4d56176e5f
build(android): verify Gradle distribution checksum ( #107194 )
2026-07-13 23:18:54 -07:00
Peter Steinberger
df5097b6e7
fix(native): keep platform validation warning-free ( #107101 )
...
* build(android): keep Gradle warning-free
* ci(native): pin XcodeGen tooling
* test(macos): avoid concurrency warnings
2026-07-13 22:33:12 -07:00
Peter Steinberger
4023eb92d2
feat(android): add foreground Voice Wake ( #107081 )
...
* feat(android): add foreground voice wake
* chore(android): refresh voice wake artifacts
* fix(android): refresh voice wake capability readiness
* chore(android): sync voice wake translations
* chore: keep release notes in PR context
2026-07-13 21:48:29 -07:00
Josh Avant
2e6fd00871
fix(android): release screenshots stall on gateway scene ( #106884 )
...
* chore(android): prepare 2026.7.2 Play release
* fix(android): unblock gateway release screenshots
2026-07-13 18:26:59 -05: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
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
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
2c8306a5be
improve(android): make gateway QR pairing prominent in Settings
...
Mirror the iOS gateway settings ordering: nav-bar QR scan action,
Scan QR to Pair hero while unpaired, one Add Gateway panel (scan,
setup code + connect, discovered gateways with per-row connect),
paired gateways below, manual host/credential plumbing at the bottom.
Add facts rows (Discovered, Default Agent, Agents, Instance ID) and a
Diagnose action, plus a deterministic 'gateway' screenshot scene.
Closes #106186
2026-07-13 08:02:56 -07:00
Peter Steinberger
1b615a3985
chore(i18n): translate android gateway settings strings
2026-07-13 08:02:56 -07:00
WhatsSkiLL
af854dcf50
fix(android): command palette title appears off-center ( #106264 )
...
* fix(android): center command palette title
* fix(i18n): sync native app inventory
---------
Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com >
Co-authored-by: Colin Johnson <colin@solvely.net >
2026-07-13 10:54:44 -04: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
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
openclaw-mantis[bot]
801252c66e
chore(i18n): refresh native locales ( #106260 )
...
* chore(i18n): refresh native locales
* chore(i18n): sync generated app resources
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-13 03:49:36 -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
16b1bd2032
fix(android): support gateway protocol v3 ( #106205 )
2026-07-13 02:29:16 -07:00
Peter Steinberger
d2b382528e
feat(ios): guide first launch through pairing explainer and permissions ( #106129 )
...
* feat(ios): guide first launch through pairing explainer and permissions
* fix(ios): keep first-run flow resumable and surface limited grants in onboarding
* chore(ios): regenerate native i18n after rebase
* chore(android): project refreshed native translations into strings.xml
* fix(ios): move i18n wrapper contract to shared permission row and sync catalog
2026-07-13 00:35:31 -07:00
Peter Steinberger
29781ab39e
feat(android): generate gateway protocol models ( #106011 )
...
* feat(android): generate gateway protocol models
* fix(ci): recognize generated Kotlin event constants
* fix(android): normalize generated event catalog
* fix(ci): type Kotlin event coverage exports
* fix(ci): satisfy Kotlin codegen gates
2026-07-13 00:34:57 -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
Vincent Koc
b9d53d3cce
fix(android): keep disconnected nodes offline
2026-07-13 03:53:15 +02: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
WhatsSkiLL
5d61d97a33
fix(android): autofocus command palette search ( #105471 )
...
Co-authored-by: IWhatsskill <284122573+IWhatsskill@users.noreply.github.com >
2026-07-12 15:20:14 -04:00
Peter Steinberger
2821abc1f5
feat(android): polish skill management ( #105592 )
...
* feat(android): polish skill management
* chore(android): sync skill localization
2026-07-12 11:46:59 -07:00
Vincent Koc
a9bed7816c
build(android): refresh shared native translations
2026-07-12 18:33:47 +02:00
Vincent Koc
f038f509d9
refactor(android): remove unused benchmark coordinate ( #105524 )
2026-07-12 18:33:38 +02:00
snowzlmbot
84fb7a664d
feat(android): manage skills from settings ( #101864 )
...
* feat(android): manage skills from settings
Co-authored-by: snowzlmbot <293528334+snowzlmbot@users.noreply.github.com >
* fix(android): scope skill install claims
* chore(android): refresh native i18n inventory
* chore(android): refresh native locale artifacts
* fix(android): localize skill management state
* chore(android): refresh skill localization artifacts
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
Co-authored-by: snowzlmbot <293528334+snowzlmbot@users.noreply.github.com >
2026-07-12 13:12:43 +01:00
Vincent Koc
1d4a401b0d
fix(android): prefer live AppCompat locales
2026-07-12 13:26:39 +02:00
Vincent Koc
e659acd9b2
test(android): remove invalid cold locale probe
2026-07-12 13:26:39 +02:00
Vincent Koc
01b33ea6be
fix(android): refresh external application locales
2026-07-12 13:26:39 +02:00
Vincent Koc
ea634f7152
test(android): exercise application locale updates
2026-07-12 13:26:39 +02:00