Commit Graph
70691 Commits
Author SHA1 Message Date
Peter SteinbergerandGitHub 4e008cd713 feat(ios): adopt Talk voice sessions (#111369)
* feat(ios): adopt Talk voice sessions

* docs(agents): fix unrelated red-main breakage in the landing PR

* chore(i18n): translate Talk voice-session strings across native locales
2026-07-19 06:28:18 -07:00
Peter SteinbergerandGitHub 0cc182844a fix(ui): refresh agent roster on config changes (#111395) 2026-07-19 06:23:46 -07:00
Peter SteinbergerandGitHub be831088e9 fix: local lint works in dependency-less worktrees (#111393)
* fix(scripts): resolve worktree oxlint toolchain

* fix(scripts): declare worktree tool resolver
2026-07-19 06:23:36 -07:00
Peter SteinbergerandGitHub a5323301e9 fix(swarm): live agents.run fan-outs launch collectors (#111379)
* fix(swarm): preserve host identity for collector launches

* test(swarm): type the in-process gateway dispatcher

* chore: drop changelog entry — release generation owns CHANGELOG

* test(swarm): satisfy promise executor lint
2026-07-19 06:08:30 -07:00
Peter SteinbergerandGitHub 8d2e616483 fix(gateway): preserve explicit approval ids for validation (#111388) 2026-07-19 06:06:50 -07:00
Peter Steinberger 2a6fd77c08 fix(net-policy): restore ipaddr typing compatibility
Repair main CI by preserving newer ipaddr range labels across merged declarations and narrowing CIDR match operands by address family.
2026-07-19 05:51:18 -07:00
431482ca3e docs(agents): require reading ClawSweeper rank-up moves before landing PRs (#111385)
Co-authored-by: Molty <molty@openclaw.ai>
2026-07-19 05:37:44 -07:00
Peter SteinbergerandGitHub 6a8f16a69e chore(pr): reuse green hosted CI from patch-identical pre-rebase heads (#111335)
* chore(pr): reuse green hosted CI from patch-identical pre-rebase heads (24h window)

* fix(pr): type-safe fixtures and lint cleanup for hosted-CI reuse tests
2026-07-19 05:34:48 -07:00
Peter SteinbergerandGitHub 46b9a3e12d docs: Swarm user guide (#110325) (#111384) 2026-07-19 05:33:00 -07:00
Peter SteinbergerandGitHub 06f5f73e47 refactor: own model discovery by runtime lifecycle (#111173)
* refactor(agents): prepare model runtime catalogs

Build lifecycle-owned model and auth snapshots, carry prepared stores into hot agent paths, and serialize config/auth publication.

Credits @zeroaltitude's #90741 investigation and benchmark approach.

* refactor: finish lifecycle-owned model discovery

* fix: align prepared model catalog contracts

* test: align lifecycle catalog mocks

* test: fix prepared catalog type fixtures

* refactor: split prepared model runtime ownership

* fix: import prepared runtime replacement gate type

* test: split media runtime coverage

* test: preserve image auth fixture key types

* test: isolate lifecycle gate fixtures

* chore: keep release changelog owned

* refactor: finish prepared model catalog migration

* test: keep catalog review fixtures scanner-safe

* refactor: preserve lifecycle model runtime ownership

* fix: close prepared runtime lifecycle races

* fix: preserve compaction workspace fallback

* chore: document btw generation rebinding

* fix: preserve prepared generation boundaries

* fix: keep model-list discovery flag explicit

* fix: serialize standalone model runtime activation

* refactor: migrate subagent model catalog lookup

* refactor: clarify doctor catalog lookup seam

* chore: refresh plugin sdk api baseline

* test: migrate swarm catalog dependency

* refactor(telegram): rename runtime catalog seam

* refactor: extract model-aware tool context

* test(models): isolate lifecycle catalog fixtures

* refactor(agents): avoid btw parameter rebinding

* fix(net-policy): align root ipaddr dependency

* fix(build): keep net policy dependency bundled

* fix(deadcode): document net policy compile dependency
2026-07-19 05:30:54 -07:00
e24420bc1c fix(android): stabilize Wear realtime Talk audio and tool calls (#111033)
* fix(android): relay Wear realtime Talk tool calls

* fix(android): preserve Wear realtime audio streams

* refactor(android): share realtime agent coordination

Co-authored-by: JARVIS-Glasses <whatsskilll@gmail.com>

* fix(android): bound Wear realtime audio pipelines

Co-authored-by: JARVIS-Glasses <whatsskilll@gmail.com>

* fix(android): close realtime correlation races

Co-authored-by: JARVIS-Glasses <whatsskilll@gmail.com>

* fix(android): scope realtime correlation jobs

Co-authored-by: JARVIS-Glasses <whatsskilll@gmail.com>

* fix(android): bound Wear realtime audio work

Co-authored-by: JARVIS-Glasses <whatsskilll@gmail.com>

* fix(android): bound realtime run correlation

Co-authored-by: JARVIS-Glasses <whatsskilll@gmail.com>

* fix(android): stop stale Wear audio delivery

Co-authored-by: JARVIS-Glasses <whatsskilll@gmail.com>

* fix(android): track Wear playback per chunk

Co-authored-by: JARVIS-Glasses <whatsskilll@gmail.com>

* chore(android): refresh native i18n inventory

Co-authored-by: JARVIS-Glasses <whatsskilll@gmail.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-19 05:21:38 -07:00
Peter SteinbergerandGitHub c95a8e3df1 feat(ui): identity settings and own-identity chip (#111371)
* feat(ui): identity settings and own-identity chip

* feat(ui): resolve own identity via users.self

* fix(ui): rebase identity settings onto landed identity stack

* fix(ui): footer identity chip prefers locally updated self profile

* fix(ui): settings CI conformance — split profile page, lean exports
2026-07-19 04:14:13 -07:00
Peter SteinbergerandGitHub 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 SteinbergerandGitHub 104691f822 feat(swarm): add QuickJS guest orchestration (#111298)
* feat(swarm): add QuickJS guest orchestration (#110325)

* fix(agents): turn-stable swarm replay identity — distinct exec invocations cannot collide

* fix(agents): turn-stable swarm replay identity — distinct exec invocations cannot collide

* fix(agents): turn-stable swarm replay identity — distinct exec invocations cannot collide
2026-07-19 03:58:59 -07:00
Peter SteinbergerandGitHub bbcfec9e96 fix(channels): prevent outbound echoes and expose native login (#111341)
* fix(channels): centralize outbound echo suppression

* chore(plugin-sdk): refresh channel outbound surface

* test(commands): avoid native plugin fallback loading

* refactor(channels): separate outbound echo state

* docs(changelog): note channel action decisions

* fix(discord): align webhook preflight call

* fix(discord): use type-only thread binding import

* fix(channels): stream login blocks and widen turn results

* test(channels): narrow drop-capable turn results

* fix(channels): address echo and reply edge cases
2026-07-19 03:49:11 -07:00
Peter SteinbergerandGitHub ef91ce5712 feat: keep reset session history searchable (#111194)
* feat(sessions): retain reset history in sqlite with physical disk budget

* fix(sessions): satisfy test-types, knip export scan, and docs map

* fix(sessions): align behavioral suites and flip proof with retained history, route-aware cleanup plans
2026-07-19 03:38:51 -07:00
Peter Steinberger b9c9140034 fix(ci): declare injectable now param on runPrCiSweeper 2026-07-19 03:31:25 -07:00
Peter Steinberger e2930422d0 fix(ci): make pr-ci-sweeper clock injectable so lookback fixtures cannot rot 2026-07-19 03:26:50 -07:00
Peter Steinberger 6add21bf40 fix(ui): remove duplicate instanceId getter left by concurrent merges 2026-07-19 03:20:46 -07:00
Peter SteinbergerandGitHub 8178b3cc14 feat(clients): adopt model controls, session management, and keyboard history recall on iOS (#110831)
* feat(clients): adopt model controls, session management, and keyboard history recall on iOS

* chore(i18n): translate iOS adoption strings and realign locale artifacts

* refactor(clients): drop test-only group response inits flagged by the shared dead-code intersect

* chore: retrigger ci

* chore(i18n): resync inventory after voice-unification main rebase

* chore(i18n): resync inventory after main rebase

* chore(i18n): resync inventory after main rebase

* chore(i18n): realign locale artifacts after main rebase

* fix(clients): preserve native chat API and locale copy

* fix(ios): retain public session DTO initializers

* refactor(clients): delete test-only session DTO inits flagged dead instead of suppressing
2026-07-19 03:08:22 -07:00
Peter SteinbergerandGitHub d685037c6e fix(workboard): avoid duplicate proof entries on completion (#111324)
* fix(workboard): resolve duplicate completion proof

* fix(workboard): import proof cap from constants

* fix(workboard): correlate completion proof by id

* fix(workboard): reuse terminal completion proof

* fix(workboard): retain correlated proof under budget
2026-07-19 03:00:37 -07:00
Peter SteinbergerandGitHub 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 SteinbergerandGitHub cfe4096db6 fix(cron): separate command delivery failures (#111345) 2026-07-19 02:50:47 -07:00
Peter SteinbergerandGitHub d4ed08994d fix(onboard): validate reset preflight (#111348) 2026-07-19 02:42:49 -07:00
a868d34804 Fix fractional restart handoff migration (#110231)
Co-authored-by: Alex Knight <15041791+amknight@users.noreply.github.com>
2026-07-19 19:42:27 +10:00
Peter SteinbergerandGitHub e0ecdc47be feat(chat-ui): tool-diff follow-ups — cached diffs, apply_patch, isError, long lines (#111326)
* feat(chat-ui): tool-diff follow-ups from PR review

Persist bounded applied-diff details in the transcript cache so cold
opens keep inline diffs; parse apply_patch envelopes into per-file diff
sections with stats; thread tool-result isError so failed calls suppress
proposal diffs and read as failures; replace per-line truncation with
horizontal scrolling for long diff lines.

* chore(i18n): sync native inventory for tool-diff follow-ups

* fix(chat-ui): render move-only patches and drop zero diffstats
2026-07-19 02:40:37 -07:00
Peter SteinbergerandGitHub c7d2d111d8 fix(ci): enforce plugin SDK API baseline (#111289)
* fix(ci): enforce plugin SDK API baseline

* fix(plugin-sdk): refresh fs-safe API baseline
2026-07-19 02:38:58 -07:00
Peter SteinbergerandGitHub 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 SteinbergerandGitHub b3bb40551b fix(mac): opening General Settings crashes in packaged app (#111300)
* fix(macos): package KeyboardShortcuts resources

* fix(macos): keep dependency patch whitespace-safe

* fix(macos): preserve locked Swift resolution

* fix(macos): guard Swift lock across builds

* fix(macos): simplify KeyboardShortcuts packaging
2026-07-19 02:30:49 -07:00
Peter SteinbergerandGitHub 4e7ef6223c fix(cron): keep paced schedules stable across force runs and edits (#111331)
* fix(cron): preserve cadence ownership

* fix(cron): satisfy maintenance lint
2026-07-19 02:26:28 -07:00
Peter SteinbergerandGitHub a5a05466fc fix(mcp): bound probe initialization (#111318) 2026-07-19 02:26:14 -07:00
Peter SteinbergerandGitHub 10313e3eee refactor(sessions): keep late-media attachment text out of persisted transcripts (#111293)
* refactor(sessions): keep late-media attachment text out of persisted transcripts

Late-resolved media appended a second user turn whose content was literal
"[media attached: <path>]" lines, so clients rendered wire scaffolding
under the image — same leak class as #111204. Persist those turns bare
(media fields + a protected __openclaw.lateMedia marker, image blocks
kept), and project the attachment lines at the LLM boundary and the
history-image-prune stage instead, byte-identical for providers across
string, array, and legacy forms. Also dedupes media-field sniffing into
a shared hasPersistedMedia helper.

* fix(sessions): satisfy type gates for late-media boundary projection

* fix(agents): narrow prune content cast to array element type

* test(sessions): split transcript persistence suite under max-lines cap
2026-07-19 02:14:19 -07:00
Peter SteinbergerandGitHub 84e54ab264 chore(pr): landing-UX — aggregated validation, lock classes, ci-dispatch, committer guard (#111287)
* chore(pr): landing-UX — aggregate artifact validation, lock classes, ci-dispatch, committer worktree guard

* fix(pr): CI lane cleanup for landing-ux — lint causes, hermetic tests, private helpers

* chore(deadcode): register pr-lib CLI entries in knip config
2026-07-19 02:09:55 -07:00
Peter SteinbergerandGitHub ba06fe1541 feat(ui): author avatar chips on user messages (incl. queued) (#111309)
* feat(ui): author avatar chips on user messages with gravatar and initials fallback

Renders a small author avatar on user-authored chat messages, including
queued/pending sends, so multi-user gateways show at a glance who wrote
which prompt. Resolution: profile avatar URL (when available) -> Gravatar
by SHA-256 email hash (d=404) -> deterministic initials with stable color.
Assistant/tool output stays unmarked, and messages without sender identity
render unchanged, keeping single-user gateways visually identical.

* fix(ui): clear avatar fallback state on image load; document gravatar tradeoff

* fix(ui): gate email-hash avatars behind a gateway proxy base URL

Without a same-origin proxy base the email tier is disabled outright, so
rendering a transcript can never disclose hashed sender emails or viewer
IPs to a third-party avatar host. The gateway-side proxy route (follow-up)
supplies the base and becomes the only avatar fetch path.

* fix(ui): restrict profile avatar URLs to same-origin relative paths

* fix(ui): validate profile avatar URLs with the URL parser, not string prefixes

Backslashes normalize to slashes and tabs/newlines are stripped by browser
URL parsing, so startsWith checks can be bypassed into cross-origin fetches.
Resolving against a probe origin and requiring the origin to survive is
parser-equivalent and closes the class.
2026-07-19 02:08:05 -07:00
xingzhouandGitHub e2ca148d4b fix(codex): preserve JSONL framing across WebSocket writes (#110384)
* fix(codex): preserve UTF-8 websocket frames

* test(codex): satisfy websocket transport lint

* fix(codex): preserve websocket JSONL framing
2026-07-19 17:07:03 +08:00
xingzhouandGitHub 48ecb31bc6 fix(discord): time out stalled Activity token bodies (#110667) 2026-07-19 17:05:58 +08:00
Peter SteinbergerandGitHub 11beef19e2 fix(cli): keep plugin help transport-free (#111322) 2026-07-19 02:00:35 -07:00
zhang-guipingandMason Huang dd16befe58 fix(logs): bound stalled journal subprocesses 2026-07-19 16:56:54 +08:00
Peter SteinbergerandGitHub e20d4cd450 fix(media): gate inbound audio on structured media facts (#111315)
hasInboundAudio previously accepted <media:audio> placeholder bodies,
[Audio transcript headers, and filename sniffing alongside MediaTypes.
It now consumes only the structured facts channels already carry
(MediaType/MediaTypes, kind audio or audio/*), removing the string
reverse-engineering ahead of the placeholder-elimination program.
Discord — the one channel with a coverage hole — now carries its native
audio classification (MIME, voice fields, constrained filename fallback)
as structured kind: "audio", with definitive fetched/declared MIME
precedence so generic container types cannot erase declared audio and
filename hints cannot override definitive non-audio MIME.
2026-07-19 01:55:26 -07:00
Mason HuangandGitHub c26d3cfbd0 fix(ci): skip Periphery scans for unrelated PR changes (#107991)
* fix(ci): scope Periphery to PR merge changes

* test(ci): align Periphery changed-test routing
2026-07-19 16:52:44 +08:00
Peter SteinbergerandGitHub 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 SteinbergerandGitHub 2e8b042f9f feat(gateway): resolve durable profile identity at connection setup (#111311) 2026-07-19 01:41:35 -07:00
Mason HuangandGitHub 8c0e876e85 fix: prevent cumulative usage from inflating session context (#108323)
* fix: use last-call usage for session context

* fix: preserve final nonzero call usage

* fix: keep exact usage snapshots context-scoped

* refactor(agents): remove unused last-call accumulator

* fix(agents): scope usage fallback to uncompacted attempts

* test(agents): type compaction usage fixture

* test(agents): use provider usage fixture shape
2026-07-19 16:40:55 +08:00
Peter SteinbergerandGitHub f07a1fb502 refactor: centralize bounded file reads in fs-safe (#111104)
* refactor: use fs-safe bounded descriptor reads

* build: update fs-safe to 0.4.2

* build: refresh root npm shrinkwrap

* fix: satisfy bounded read return paths

* fix: update fs-safe integration for latest main

* fix: adopt fs-safe overflow compatibility release

* build: complete fs-safe lockfile update

* build: update fs-safe to 0.4.4

* build: refresh plugin SDK API baseline

* test: follow fs-safe bounded read seam
2026-07-19 01:29:23 -07:00
Peter SteinbergerandGitHub 59b2fbbb4b feat(ios): Talk camera flip control and mic input selection (#111044)
* feat(ios): add Talk camera flip and mic selection

* chore(ios): sync native i18n inventory and locale artifacts for talk camera/mic strings

* chore(ios): commit regenerated Localizable.xcstrings for new talk strings

* fix(ios): extract Talk composer controls

* chore(ios): resync native i18n inventory and locale artifacts atop landed Android entries

* fix(ios): repair Talk composer CI checks

* chore(i18n): commit regenerated Android locale outputs from catalog reconciliation

* chore(i18n): sync Android locale outputs after rebase
2026-07-19 01:24:53 -07:00
Peter SteinbergerandGitHub 96c9cc112c fix(cron): preserve script state and stop stale runs after restart (#111292)
* fix(cron): preserve script execution boundaries

* chore: keep release changelog unchanged
2026-07-19 01:24:19 -07:00
Peter SteinbergerandGitHub 3a0d6b327b feat(chat-ui): inline diffs for edit and write tool rows (#111039)
* feat(chat-ui): inline diffs for edit and write tool rows

Port the web Control UI's kind-aware diff rendering to the shared SwiftUI
tool rows: persisted details.diff parses into numbered add/del/ctx lines,
edit/write/text-editor args fall back to a local capped line diff, the
collapsed row shows a +N/-M diffstat, and the expanded surface renders the
diff with the result summary or error diagnostic beneath it.

* fix(chat-ui): preserve tool-result details through message reconciliation

Canonical-adoption rebuilds enumerated message fields and silently dropped
details, so inline diffs vanished after cache-warm history reconciliation
(every app relaunch). Carry details through adoptingCanonicalMessage and
messageWithTimestampIfNeeded and lock it in with regression tests.

* chore(i18n): sync native inventory for tool diff rows

* fix(chat-ui): render diffstat and line numbers as verbatim text

* fix(chat-ui): use theme tokens for diff colors

* refactor(chat-ui): drop test-only parseDetailsDiff wrapper

* fix(chat-ui): address diff-row review findings

Interpret details.diff only for edit/write/patch tool names so plugin
detail schemas stay opaque; number write previews from line 1 with an
80-line cap and a subtractive char budget while keeping the exact stat;
bound per-line rendering to 2000 unicode scalars; announce add/del rows
and collapsed skip markers to assistive tech.

* chore(i18n): sync native artifacts for diff-row labels

* fix(chat-ui): announce diff line numbers to assistive tech
2026-07-19 01:21:51 -07:00
Peter SteinbergerandGitHub 918f6615d0 feat(ui): Swarm progress widget — dot grid per swarm group (#110325) (#111297)
* feat(ui): Swarm progress widget — dot grid per swarm group (#110325)

* fix(ui): keep swarm renderer internals private
2026-07-19 01:19:56 -07:00
Peter SteinbergerandGitHub 430147fc89 feat(ui): approval UX overhaul — inline cards, fair queue, shortcuts, badges (#110989)
* feat(ui): overhaul approval experience

* fix(ui): guard approval shortcuts against key auto-repeat and keep scoped errors on enqueue

* fix(ui): arm approval shortcuts after focus settles and scope error clearing to the settled request

* fix(ui): approval hardening — modifier-chord shortcuts, pinned active card, badge fallback, quiet countdown

* fix(ui): scope approval errors per request

* style(ui): format approval queue test

* fix(ui): tolerate missing approval overlays

* perf(ui): lazy-load approval modal controls

* fix(ui): satisfy approval lazy-load guards

* style(ui): satisfy approval card lint
2026-07-19 01:18:09 -07:00
xingzhouandGitHub 7b3a8dba14 fix(meeting-bot): preserve spawn failure diagnostics (#107614) 2026-07-19 16:17:46 +08:00