Commit Graph

73881 Commits

Author SHA1 Message Date
Vincent Koc d540255ce7 docs(google): document supported auth paths 2026-07-30 22:56:26 +08:00
Vincent Koc 5e5d436579 fix(ui): clarify blocked inference setup 2026-07-30 22:51:30 +08:00
Vincent Koc c7d1205d51 fix(google): guide broken CLI profiles to supported auth 2026-07-30 22:40:20 +08:00
Vincent Koc 98df5a2287 fix(onboarding): hide unsupported Google CLI setup routes 2026-07-30 22:36:33 +08:00
Vincent Koc c568f93b03 fix(google): retire Gemini CLI OAuth setup 2026-07-30 16:33:33 +08:00
Vincent Koc e4b9e50351 fix(media): stop auto-running Antigravity CLI 2026-07-30 16:27:07 +08:00
joshavant cc570a7453 chore(ios): refresh native i18n inventory 2026-07-30 03:04:42 -05:00
joshavant 28f73d93c1 fix(ios): isolate capability router handlers 2026-07-30 03:04:42 -05:00
joshavant e6f7a400e2 docs(ios): cut 2026.7.22 release notes 2026-07-30 03:04:42 -05:00
joshavant 1237c0cf81 docs(hooks): document validation responses 2026-07-30 02:59:06 -05:00
joshavant a56f7a2b98 test(qa): assert hook account rejection reasons 2026-07-30 02:59:06 -05:00
joshavant 54a6dba0d3 fix(gateway): validate hook delivery accounts 2026-07-30 02:59:06 -05:00
Jason (Json) a67ad03eea perf(gateway): bound prepared runtime startup work (#116261) 2026-07-30 01:41:35 -06:00
Vincent Koc d30d22d33c fix(agents): prevent registry stalls during large fan-outs (#116286)
* fix(agents): persist subagent registry mutations incrementally

* chore(agents): leave release notes to release process
2026-07-30 15:40:54 +08:00
Peter Steinberger d5f8be355d fix(sqlite): preserve replaced snapshot targets on Windows (#116284) 2026-07-30 00:40:20 -07:00
Dallin Romney c8f0db2c24 fix(ci): load frozen shard runner without repository fetch (#116273)
* fix(ci): load frozen shard runner without repository fetch

* test(ci): preserve workflow expression delimiters

* fix(ci): use non-cone frozen runner checkout
2026-07-30 15:37:44 +08:00
Ayaan Zaidi 7c47e4ad0e fix(channels): collapse cumulative commentary snapshots onto one progress-draft line
Providers stream commentary as cumulative snapshots, and the draft line id was derived from the commentary text, so each snapshot minted a new id and stacked another line instead of replacing the open one. Id-less commentary now remembers its open line and reuses that id when the next snapshot continues it; a snapshot sanitized to nothing no longer clears the line, since only an explicit item id retracts.

Also fixes activation: the commentary gate guessed "partial" when streaming.mode was unset, which made progress.commentary a silent no-op on channels whose own default is progress (Telegram, Discord). It now takes the caller's resolved mode, matching resolveChannelStreamingPreviewToolProgress. Proven live on Telegram: three overlapping commentary lines collapse to one.
2026-07-30 16:36:16 +09:00
Ayaan Zaidi 4bd56b8ad8 test(e2e): tag the mock Responses preamble with its wire phase
The mock streamed pre-tool assistant text on the Responses path without `phase: "commentary"`, the field the API sets and the transport reads, so the draft-proof scenario ran green while never exercising the preamble lane on that transport. Proven live on Telegram: the preamble now renders as the status headline, and as a commentary line when progress.commentary is on.
2026-07-30 16:34:38 +09:00
Peter Steinberger 2c436594de fix: clean npm preflight cache restore targets (#116276) 2026-07-30 00:33:55 -07:00
joshavant 32a61cabf0 fix(matrix): observe automatic reply settlement 2026-07-30 02:31:15 -05:00
Vincent Koc 1daea4c898 fix(macos): preserve replacement notification overlays (#116226) 2026-07-30 15:27:40 +08:00
Vincent Koc ad1dc60259 fix(openai): scope realtime readiness state 2026-07-30 15:22:02 +08:00
Vincent Koc 21463e6e19 test(openai): verify terminal audio cleanup 2026-07-30 15:22:02 +08:00
Vincent Koc 3133abed32 fix(openai): bound pre-ready realtime audio 2026-07-30 15:22:02 +08:00
openclaw-mantis[bot] 81d165c612 chore(i18n): refresh native locales (#116213)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-30 15:17:38 +08:00
Peter Steinberger 3e67671d92 fix(e2e): apply default service identity per flow (#116265) 2026-07-30 00:00:14 -07:00
joshavant e4e7f37d24 chore(android): record 2026.7.4 Play metadata 2026-07-30 01:49:07 -05:00
Dallin Romney 6e60f48bad fix(ci): accept one verified Telegram SUT launch (#116267) 2026-07-30 14:42:46 +08:00
joshavant eb263c5104 chore(android): prepare 2026.7.4 Play release 2026-07-30 01:19:40 -05:00
Peter Steinberger 62cbbcc800 fix(e2e): align service account state (#116254) 2026-07-29 23:00:16 -07:00
Dallin Romney 7df05d5fc0 refactor(qa): remove live-channel scenario registries and wrappers (#115752)
* refactor(qa): remove duplicate channel scenario registries

* refactor(qa): route live scenarios through shared runners

* fix(qa): isolate WhatsApp driver retries

* refactor(qa): add module export flow arguments

* test(qa): include scenario metadata in matrix fixture
2026-07-30 13:56:34 +08:00
Dallin Romney 47a21192fd fix(ci): let trusted Telegram QA stage runtime (#116252) 2026-07-30 13:45:01 +08:00
Peter Steinberger ea42a4612a fix(plugins): plugin install survives pnpm-only overrides (#116245)
* fix(plugins): preserve compatible npm overrides on retry

* fix(plugins): keep npm compatibility type internal

* fix(plugins): bound managed override retries
2026-07-29 22:43:34 -07:00
Peter Steinberger 353c05d547 test(qa): recognize internal image completions (#116234) 2026-07-29 22:09:45 -07:00
Vincent Koc 814d1fdf1a fix(test): review Codex runtime scan chunks (#116212)
* fix(test): review Codex runtime scan chunks

* fix(test): count reviewed scan findings
2026-07-30 13:02:57 +08:00
Miorbnli 5e1e70e423 fix(systemd): clear start-limit latch before gateway start (#116178)
* fix(systemd): clear start-limit latch before gateway start

systemd latches a unit into failed/start-limit-hit after a crash loop,
then refuses systemctl start until reset-failed clears the latch. The
reset-failed step only ran for the restart action, so the natural
recovery command `openclaw gateway start` failed on a crash-looped
gateway while `openclaw gateway restart` recovered it.

Run reset-failed before both start and restart (stop is unchanged),
mirroring launchd's startLaunchAgent which calls launchctl enable before
kickstart. reset-failed is idempotent and a no-op on a healthy unit.

* test(systemd): cover start-limit latch clearing on system-scope start

Mirrors the existing system-scope restart test: when startSystemdService
targets a system unit as root, it must emit reset-failed before start so
a crash-looped gateway recovers via `openclaw gateway start` too.

* test(systemd): assert healthy start tolerates reset-failed no-op

reset-failed is idempotent on a non-failed unit (systemd returns success
without changing unit state), so prepending it to start cannot regress a
healthy gateway. Covers the merge-risk concern that every start now
depends on an extra reset-failed call.

* test(systemd): cover reset failure and stop controls

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-30 12:47:56 +08:00
Vincent Koc 2899323fe3 fix(security): expose every executable call in plugin scans (#116222)
* fix(security): report every scanner line match

* fix(security): bound scanner match evidence
2026-07-30 12:45:25 +08:00
Ayaan Zaidi 48b3c1ea00 chore(sdk): repin the API baseline after the resolver signature change
resolveChannelStreamingPreviewToolProgress gained an optional mode parameter,
which changes the exported plugin-SDK surface.
2026-07-30 13:36:21 +09:00
Ayaan Zaidi d8d77ffbae test(e2e): delay the draft-proof final answer past the start gate
A progress draft only exists while the agent is working, and OpenClaw's exec
returns instantly for a mock tool call, so the whole turn finished in ~86ms —
inside the 1.5s draft gate. No draft was created, which is correct behavior but
proves nothing about rendering.

The draft-proof scenario now holds its final answer (MOCK_DRAFTPROOF_FINAL_DELAY_MS,
default 6s) so the turn straddles the gate. That is what made the live Discord
recording possible: draft created, edited with the status headline above the
tool line, replaced by the final answer, then deleted.
2026-07-30 13:36:21 +09:00
Ayaan Zaidi c63241d3ce fix(channels): resolve tool progress against the caller's stream mode
resolveChannelStreamingPreviewToolProgress guessed a mode when streaming.mode
was unset, so it could never be right for every channel: guessing "partial"
dropped Discord and Telegram's explicit progress.toolProgress opt-out, and my
earlier switch to "progress" broke it the other way for Slack, Mattermost, and
Teams, whose real default is partial. With both keys configured and disagreeing,
the wrong one won.

The helper has no channel identity, so it stops guessing and takes the mode the
caller already resolved. All nine call sites pass theirs. Omitting it keeps the
previous configured-mode reading, so untouched callers behave exactly as before.

Reported by ClawSweeper on #116143.
2026-07-30 13:36:21 +09:00
Ayaan Zaidi dcb0ad5c29 fix(ci): satisfy docs formatting, lint, and the SDK API baseline
Three gates my own changes broke:

- docs/channels/telegram.md needed a blank line before </Note>; I formatted the
  TypeScript but never ran the docs formatter over the pages I edited.
- The mock harness matched a literal with a regex, which oxlint's prefer-includes
  rejects.
- Widening resolveChannelPreviewStreamMode's defaultMode to StreamingMode and
  adding rendersRollingLinesNatively changes the exported plugin-SDK surface, so
  the API baseline hash had to be regenerated.
2026-07-30 13:36:21 +09:00
Ayaan Zaidi 436557b8e9 test(e2e): add a progress-draft scenario to the mock provider
Proving headline-plus-tool-line composition needs assistant text emitted
*before* a tool call: that leading text is what gets tagged as commentary and
rendered as the draft's status headline. The mock could only echo a single token,
so the draft path was unreachable without a live model.

Trigger `OPENCLAW_E2E_DRAFTPROOF` now serves two turns — preamble plus a shell
call, then the final answer — on both /v1/responses and /v1/chat/completions.
Only the completions transport tags commentary today, which is why the
completions path matters here.

Used to record the draft live on real Telegram: one message carrying the
headline above the tool line, the final answer, then the draft edited to its
receipt.
2026-07-30 13:36:21 +09:00
Ayaan Zaidi 9f821d103f docs(telegram): call out the changed default preview on upgrade
ClawSweeper's accepted-migration path requires operator-facing docs for the
default change: state what an existing install sees after upgrading and the
one-line setting that restores streamed answer text.
2026-07-30 13:36:21 +09:00
Ayaan Zaidi c6633aead5 refactor(channels): render the progress label as a block, not a line
The label was smuggled into the rolling line array as a `{draftLabel}`
sentinel so it would participate in the maxLines window, then special-cased
in three places plus an index lookup to pull it back out for its own block.

A label is not a line; it is a block that yields its slot once real work
fills the window. Saying that directly removes the sentinel, every
`isLabelLine` check, and the double map over the line list, while keeping the
documented scroll-away behavior and the plan/tool budget split.

Adds the missing boundary test for a checklist that consumes the whole line
budget: `slice(-0)` returns every element, so that case needs the explicit
empty-window branch rather than falling out of the arithmetic.
2026-07-30 13:36:21 +09:00
Ayaan Zaidi 06aa81a73f fix(channels): show tool lines under the progress status headline
A status headline replaced the rolling tool lines instead of sitting above
them, so a default Discord draft showed one preamble sentence for an entire
tool-heavy turn. Operators reached for `/verbose` to see any activity, which
delivers durable per-tool-call messages and floods the channel.

- Render the headline above the lines; both stay visible in one message.
- Shorten the start gate from 5s to 1.5s. The gate only creates the draft
  when the timer fires and finalize cancels it, so quick answers still post
  no draft while a 3s tool turn stops being silent.
- Drop Discord's label-gated tool-progress default so
  resolveChannelStreamingPreviewToolProgress is the single owner. An explicit
  `toolProgress: false` still silences the lines.
- Resolve that toggle against a "progress" mode guess when `streaming.mode`
  is unset, so the progress-draft channels stop ignoring an explicit
  `progress.toolProgress` opt-out.

Telegram now defaults to `streaming.mode: "progress"` like Discord; set
`"partial"` to keep streamed answer text. Its renderer draws work lines from
the compositor's structured lines, so `rendersRollingLinesNatively` keeps
them out of the composed text rather than printing every line twice.
2026-07-30 13:36:21 +09:00
joshavant cfa98bdf00 fix(telegram): emit sent hook for finalized previews 2026-07-29 23:31:53 -05:00
Vincent Koc 16baaff90f fix(e2e): align doctor switch with service ownership (#116209) 2026-07-30 12:31:39 +08:00
Vincent Koc 039efadf59 fix(openai): bound realtime SDP answer reads 2026-07-30 12:31:02 +08:00
Vincent Koc 280c162753 fix(openai): bound GPT-Live sideband startup frames 2026-07-30 12:31:02 +08:00
harish ganeshmurthy 5496cff965 feat(cron): include run time in failure alerts (#80246)
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
Co-authored-by: haishmg <4529977+haishmg@users.noreply.github.com>
2026-07-30 12:25:10 +08:00