Commit Graph
63140 Commits
Author SHA1 Message Date
Masato HoshinoandGitHub 8e28e88387 fix(gateway): distinguish reachable gateway from failed status probe (#98183)
* fix(gateway): distinguish reachable gateway from failed status probe

* fix(status): gate owns-port RPC recovery guidance on no stale gateway PIDs

inspectGatewayRestart can set health.healthy from bare reachability after
ownership attribution failed, while still returning a non-empty
staleGatewayPids. Printing owns-port recovery guidance in that case
contradicted the dedicated stale-PID diagnostic below it. Require
staleGatewayPids to be empty before treating healthy as owns-port proof.
2026-07-01 17:04:31 -07:00
Vincent Koc dbf837f574 docs(changelog): refresh 2026.7.1 notes 2026-07-01 16:58:44 -07:00
Peter SteinbergerandGitHub 3e50f41dd6 improve(ios): simplify Talk controls and composer alignment (#98736)
* refactor(ios): streamline talk and composer controls

* test(ios): restore Talk control state

* chore(ios): refresh native i18n inventory
2026-07-02 00:48:37 +01:00
Peter SteinbergerandGitHub 17482a4026 fix(ci): restore docs and test type checks (#98792) 2026-07-02 00:36:52 +01:00
Gio Della-LiberaandGitHub cdaafe198c doctor: expose channel plugin blocker findings (#97496) 2026-07-01 16:31:52 -07:00
Ayaan Zaidi f8769559ae fix(telegram): honor long flood-wait retry_after on outbound sends 2026-07-01 16:22:34 -07:00
Ayaan Zaidi fd18e39e51 fix(telegram): drop rejected native quotes instead of failing the send 2026-07-01 16:22:34 -07:00
Ayaan Zaidi a53833e842 fix(telegram): fall back to plain captions when Telegram rejects caption HTML 2026-07-01 16:22:34 -07:00
Ayaan Zaidi 6ef0abbaae fix(telegram): fall back to plain text when rich entities are rejected on the durable send path 2026-07-01 16:22:34 -07:00
joshavant 03d23c56d1 Document Android release failure stop rule 2026-07-01 18:09:57 -05:00
joshavant 0ea304d02f Add Android release agent guardrails 2026-07-01 18:09:57 -05:00
joshavant 3832b2be5f Document iOS release failure stop rule 2026-07-01 18:04:50 -05:00
joshavant 77f632e7db Add iOS release agent guardrails 2026-07-01 18:04:50 -05:00
6df7db9f9e feat(cli): add attach launcher (#96454)
* feat(cli): openclaw attach — launch Claude Code bound to a gateway session with scoped MCP tools
* fix(cli): use token-only MCP config for attach

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-07-01 15:52:39 -07:00
Ayaan Zaidi 55d31beeef fix(telegram): age-gate retry-limit spool tombstones (#98776) 2026-07-01 15:32:00 -07:00
Ayaan Zaidi ce9ec4e1c3 fix(telegram): tombstone completed spooled updates to dedupe refetches 2026-07-01 15:32:00 -07:00
Ayaan Zaidi eb41c7d2d3 fix(telegram): requeue spooled replays on transient store errors 2026-07-01 15:32:00 -07:00
Ayaan Zaidi 8dbcf6db16 fix(telegram): back off and dead-letter poisoned spooled updates 2026-07-01 15:32:00 -07:00
joshavant 341231831b chore(android): prepare 2026.6.11 Play release 2026-07-01 17:26:11 -05:00
Ayaan Zaidi 5a10a29807 fix(telegram): retry transient getUpdates API errors in ingress worker 2026-07-01 15:24:05 -07:00
Ayaan Zaidi abaef63a35 fix(telegram): persist only new sent-message cache entries 2026-07-01 15:24:05 -07:00
Kevin LinandGitHub d9b5afad18 fix(codex): rename destructive approval mode to ask (#98501)
* fix(codex): rename destructive approval mode to ask

* fix(codex): keep ask reviewer app-scoped

* test: fix current-main CI regressions
2026-07-01 15:14:55 -07:00
Josh AvantandGitHub eb417fa206 fix: diagnose Windows LAN Gateway firewall blocks (#98666)
* Diagnose Windows LAN Gateway firewall blocks

* Fix Windows firewall diagnostic lint

* fix: gate gateway firewall diagnostics to local targets

* fix: keep firewall inspection off critical flows
2026-07-01 16:24:16 -05:00
e79865569c fix(install): preserve SecretRef service env values (#96065)
* fix(install): manage config-secretref env refs via OPENCLAW_SERVICE_MANAGED_ENV_KEYS
* fix(install): preserve config secret refs in launchd env
* fix(install): preserve secretref env render sources

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-07-01 14:04:33 -07:00
Ayaan ZaidiandGitHub bc7f9a36ec fix(cron): detach session-targeted cron runs (#98755)
* fix(cron): detach session-targeted runs
* fix(tasks): cancel stale childless cron rows

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-07-01 14:04:25 -07:00
Ayaan Zaidi 44e88f550b fix(telegram): keep media retry policy local 2026-07-01 13:05:42 -07:00
f9d7afda10 fix(telegram): narrow durable inbound media retry to transient + abort (#98076)
Review on #98102: the durable-retry classifier treated every MediaFetchError
`fetch_failed` as retryable, but `fetch_failed` also covers permanent failures
(SSRF/guard denials, local Bot API path/read errors). On spooled replay those
would requeue forever with the user-facing warning suppressed.

Move the policy to its owner: add `isDurablyRetryableMediaFetchError` to
`src/media/fetch.ts`, defined as `shouldRetryMediaFetch` (the canonical in-loop
transient policy) plus shutdown/abort `fetch_failed`. A restart-window abort is
the primary inbound-media loss vector and is recoverable on replay, whereas
in-loop retry mid-shutdown is futile; permanent `fetch_failed`, other 4xx, and
size limits stay non-retryable so they cannot loop in the spool.

Telegram reuses the shared helper instead of a local classifier
(`isAbortError`/`isTransientNetworkError` live in core; the classification must
not drift). Adds permanent-`fetch_failed` regression coverage at the unit and
behavioral level. Media-group partial delivery (#55216) unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 13:05:42 -07:00
14a6cd9ee6 fix(telegram): durably retry inbound media dropped during restart (#98076)
A single-message inbound media fetch failure was handled best-effort: warn
and let the update complete, so bot-core acked the spooled update. During a
restart window the warning send also failed and the document was silently
lost with no durable retry.

Classify transient media fetch failures (network/abort fetch_failed and
408/429/5xx HTTP) and record them as failed-retryable, so spooled-replay
updates are kept and re-driven by the ingress spool with backoff instead of
acked. Live updates still ack and warn; permanent failures (size limit, 4xx)
stay best-effort. The retry notice is suppressed on spooled replay to avoid
repeating it on each replay.

The durable-retry classifier deliberately diverges from media/fetch.ts
shouldRetryMediaFetch on shutdown aborts: in-loop retry of a shutdown abort
is futile, but durable re-spool must retry it -- that abort is the primary
restart-window loss vector. Media-group partial delivery (#55216) is left
unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 13:05:42 -07:00
fsdwenandGitHub 44cb3f7b98 fix(agents): prevent duplicate subagent announce sends
Fixes the subagent announce prompt-lock race by treating lock-change failures with visible-send evidence as terminal, while keeping pre-send failures retryable.

Scoped proof:
- node scripts/run-vitest.mjs src/agents/subagent-announce-delivery.test.ts src/agents/subagent-announce.test.ts src/agents/subagent-registry-lifecycle.test.ts
- node scripts/run-tsgo.mjs -p tsconfig.core.json
- node scripts/run-tsgo.mjs -p test/tsconfig/tsconfig.core.test.agents.json
- oxfmt --check on touched agent files
- git diff --check
- .agents/skills/autoreview/scripts/autoreview --mode local

Thanks @fsdwen!
2026-07-01 12:55:15 -07:00
Peter SteinbergerandGitHub ab2f6f5642 feat: prepare scoped conversation capability profiles (#98536)
* feat(agents): prepare scoped conversation capability profiles

* fix: satisfy scoped profile lint

* test: update compaction harness agent-scope mock
2026-07-01 20:28:58 +01:00
Peter SteinbergerandGitHub 24d94a54a5 fix: migrate QQBot credential backups to SQLite KV (#89597)
* fix: migrate qqbot credential backups to sqlite kv

* fix: complete qqbot sqlite migration cleanup

* fix: harden qqbot doctor state migration
2026-07-01 20:03:59 +01:00
5db7c3797d Fix Telegram plugin callback routing (#97174)
* fix telegram plugin callback routing

* Add Telegram callback proof coverage

* Fix proof script lint

* Fix Telegram proof CI regressions

* test: fix telegram callback proof CI regressions

* fix: retire registry-owned callbacks

* fix: retire registry-owned callbacks

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-01 19:49:54 +01:00
d0b30e0deb fix(imessage): shed emoji anywhere in poll-vote echo match (#98691)
* fix(imessage): shed emoji anywhere in poll-vote echo match

iMessage native poll options carry a trailing emoji ("Lobster 🦞 ") while the
agent echoes its vote with a leading one ("🦞 Lobster.") under message_tool_only
reply mode. normalizePollEchoText stripped only a leading emoji prefix, so
"lobster 🦞" never matched "lobster" and the redundant text leaked past the
poll_vote_echo guard (shipped in #98421).

Shed emoji anywhere across every class: pictographic, regional-indicator flags
(🇺🇸), subdivision-flag tag chars, ZWJ, skin-tone, and keycap sequences cleared
as a unit (so "1️⃣" -> "" not "1", while a plain "1"/"#"/"*" survives). Internal
punctuation stays so C#/C++/Node.js remain distinct; emoji-only labels normalize
to empty and the guard's existing empty-option check fails open. Re-exports
normalizePollEchoText with a focused unit test across every emoji class plus a
message-tool integration test for the emoji-suffixed-option case.

* fix(imessage): make poll-echo emoji regex lint-safe

ClawSweeper/CI check-lint flagged no-misleading-character-class: combining
marks (VS16, U+20E3), ZWJ, and skin-tone modifiers are misleading inside a
single character class. Rewrite the emoji strip as an alternation using
property escapes (\p{Regional_Indicator}, \p{Emoji_Modifier}) plus standalone
atoms so the same normalization behavior passes lint. Behavior unchanged;
poll-echo unit + integration tests still green.

* fix(imessage): preserve poll option emoji identity

---------

Co-authored-by: Omar Shahine <10343873+omarshahine@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-01 19:49:43 +01:00
Agustin RiveraandGitHub fe43343af0 fix(nvidia): use Nemotron Super 1M context (#98726)
* fix(nvidia): correct Nemotron Super context
2026-07-01 11:46:06 -07:00
Dallin RomneyandGitHub 24ce672e06 refactor(qa): use transport-native actions in flow scenarios (#97962)
* Add QA channel scenario driver contracts

* Route DM baseline through channel scenario driver

* Simplify channel behavior flow runtime helper

* test(qa): use native YAML for DM channel scenario

* test(qa): add conversation flow action

* test(qa): break channel scenario import cycle

* test(qa): fix channel scenario lint

* Unify QA channel scenario transport adapter

* Fix QA transport test type expectations

* refactor(qa): use native transport flow actions

* test(qa): derive direct reply session from transport
2026-07-01 11:39:06 -07:00
Ayaan Zaidi 477b27b6f8 refactor(telegram): reuse rich message extraction 2026-07-01 11:27:52 -07:00
Ayaan Zaidi 404e86f09a test(telegram): cover inbound rich message text 2026-07-01 11:27:52 -07:00
Ayaan Zaidi 8c7050423e fix(telegram): extract inbound rich message text 2026-07-01 11:27:52 -07:00
Ayaan Zaidi 53fe2e4bc3 refactor(auth): simplify codex login follow-up 2026-07-01 11:16:49 -07:00
Josh LehmanandAyaan Zaidi 26a756ee84 fix: preserve plugin login command precedence 2026-07-01 11:16:49 -07:00
Josh LehmanandAyaan Zaidi bde0e4541e refactor: share codex login flow helpers 2026-07-01 11:16:49 -07:00
EvaandAyaan Zaidi 236626fffd Avoid object stringification in login surface checks 2026-07-01 11:16:49 -07:00
EvaandAyaan Zaidi c188dbbbf7 Wire Codex login SDK entrypoint inventory 2026-07-01 11:16:49 -07:00
EvaandAyaan Zaidi af8a4540ed Address Codex login review feedback 2026-07-01 11:16:49 -07:00
EvaandAyaan Zaidi 50736649b2 Update slash command import snapshot 2026-07-01 11:16:49 -07:00
EvaandAyaan Zaidi 918612513f Use nondeprecated provider auth SDK path 2026-07-01 11:16:49 -07:00
EvaandAyaan Zaidi 72653b600c Narrow Codex login SDK export 2026-07-01 11:16:49 -07:00
EvaandAyaan Zaidi 48974b5765 Add shared Codex login command surfaces 2026-07-01 11:16:49 -07:00
EvaandAyaan Zaidi 77edfe7414 Add Telegram Codex login pairing 2026-07-01 11:16:49 -07:00
Peter SteinbergerandGitHub 8502ef6c59 feat(ios): modernize the app with iOS 26 Liquid Glass (#98452)
* feat(ios): adopt iOS 26 Liquid Glass design

* refactor(ios): refine Liquid Glass hierarchy

* docs(ios): require Xcode 26

* refactor(ios): remove obsolete design helpers

* fix(ios): keep agent tab navigation hidden

* fix(ios): compact chat composer at rest

* refactor(ios): reduce interface density

* fix(ios): keep native string inventory current
2026-07-01 19:06:04 +01:00