Commit Graph

65755 Commits

Author SHA1 Message Date
Peter Steinberger a7c5b2c6e6 fix(onboarding): preserve plugin ownership from included config (#103372)
* fix(onboarding): preserve included plugin install records

* fix(config): validate inherited plugin install records

* fix(onboarding): preserve canonical plugin install ownership

* test(onboarding): cover completed install migrations
2026-07-10 06:07:41 +01:00
Peter Steinberger 4a40f5d7f0 fix(xai): align image and video capability contracts (#103384)
* fix(xai): align media capability contracts

* chore: move xai media release note to pr
2026-07-10 06:06:50 +01:00
Peter Steinberger b6a86b34ce improve: retry transient live image probe mismatches (#103327)
* test: retry transient live image probe mismatches

* test: keep live probe test in unit-fast shard

* test: harden live image probe retry
2026-07-10 05:58:21 +01:00
Peter Steinberger 2541720773 fix(ui): prevent stale locale elements in shared test runs (#103345)
* test(ui): isolate locale-sensitive custom elements

* chore: keep release notes in PR
2026-07-10 05:46:23 +01:00
Peter Steinberger cd9db5ed9a fix(doctor): keep automated repair from moving approval state (#103353)
* fix(doctor): isolate automated cross-state imports

* test(update): cover isolated doctor finalization
2026-07-10 05:42:36 +01:00
Sahil Satralkar 4e3d91a020 feat: iOS Privacy screen location controls (#103096)
* Fix iOS privacy location card presentation

* Refine iOS location privacy controls

* fix(ios): restore location access chooser

* style(ios): format location access dialog

* chore: keep release note in PR body

* test(ios): keep privacy coverage focused

* fix(ios): clear unresolved location mode

* chore(ios): refresh native strings

* fix(ios): localize location status copy

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 05:42:04 +01:00
Peter Steinberger d3fae3c783 fix(ui): use default cursor for sidebar sessions, reserve pointer for links (#103357) 2026-07-10 05:41:01 +01:00
Peter Steinberger d7d210f7e0 test(gateway): prove Claude CLI warm-session continuity (#103343)
* test(gateway): prove Claude CLI warm-session continuity

Co-authored-by: Brad Reaves <reaves.brad@gmail.com>

* test(gateway): satisfy continuity helper lint

---------

Co-authored-by: Brad Reaves <reaves.brad@gmail.com>
2026-07-10 05:31:37 +01:00
krissding 5ebe040eaa fix(xai): require consent for cross-provider billed tools (#97629)
* fix(xai): gate billed tools by active provider

Co-authored-by: 丁宇婷0668001435 <ding.yuting@xydigit.com>

* chore: remove contributor changelog entry

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 05:30:23 +01:00
Peter Steinberger a4d2d676f1 fix(ui): stabilize locale-reactivity tests (#103338) 2026-07-10 05:26:42 +01:00
Peter Steinberger ef555b13c1 fix(agents): contain progress callback failures (#103351)
Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com>
2026-07-10 05:26:02 +01:00
Peter Steinberger 98b8c8c4ae feat(memory-wiki): isolate vaults per agent (#103349)
* feat(memory-wiki): isolate per-agent vaults

Refs #63829.

Co-authored-by: SunnyShu <shu.zongyu@xydigit.com>

* fix(memory-wiki): scope agent status metadata

Refs #103088 and #103196.

Co-authored-by: SunnyShu <shu.zongyu@xydigit.com>

---------

Co-authored-by: SunnyShu <shu.zongyu@xydigit.com>
2026-07-10 05:19:13 +01:00
Peter Steinberger 6fd9c1df69 fix(status): keep diagnostics config reads read-only (#103252)
* fix: keep status config reads non-observing

Co-authored-by: Sascha Kuhlmann <coolmanns@users.noreply.github.com>

* fix: keep status preflight non-observing

* fix: keep status-all diagnosis non-observing

* chore: leave release changelog to maintainers

---------

Co-authored-by: Sascha Kuhlmann <coolmanns@users.noreply.github.com>
2026-07-10 05:16:44 +01:00
Peter Steinberger a2d5f32cef fix(browser): make node action downloads usable (#103328)
* fix(browser): transfer plural node downloads

* test(browser): avoid proxy test path shadowing
2026-07-10 05:11:22 +01:00
Peter Steinberger 1f12e7fc87 fix(ios): replace dead-end discovered gateway connects (#103289)
* fix(ios): clarify insecure discovered gateways

* fix(ios): finish discovered gateway guidance

* fix(ios): preserve gateway failure expression
2026-07-10 05:08:58 +01:00
Peter Steinberger a789b92b39 fix(macos): harden fresh AI onboarding (#102637)
* fix(macos): bootstrap Codex before onboarding test

* fix(plugins): activate deferred runtimes on demand

* fix(macos): stage Codex runtime for onboarding probe

* fix(macos): expose sanitized onboarding errors

* fix(codex): reuse native CLI auth during onboarding

* fix(macos): hide Crestodian without inference

* fix(codex): honor explicit runtime policy during setup

* fix(onboarding): redact verification errors

* fix(macos): reset onboarding state with gateway route

* fix(onboarding): persist Codex plugin install metadata

* chore: refresh onboarding inventories

* fix(macos): restart AI setup after gateway change

* chore: refresh native onboarding inventory

* fix(onboarding): defer gateway restart until setup persists

* fix(macos): reset Crestodian on gateway changes

* chore(macos): refresh native i18n inventory

* fix(onboarding): harden inference setup state

* docs(skills): reuse pristine Parallels snapshots

* chore(macos): refresh onboarding i18n inventory

* fix(onboarding): prevent stale gateway and install state

* docs(skills): preserve saved Parallels sessions

* fix(macos): balance AI onboarding layout

* fix(parallels): parse npm workspace pack output

* chore(macos): refresh onboarding i18n inventory

* fix(parallels): bundle workspace runtime in package artifact

* fix(parallels): isolate canonical package helper

* fix(parallels): pack self-contained workspace artifact

* fix(packaging): exclude macOS app bundle

* fix(macos): restart inference checks after route changes

* docs(changelog): defer onboarding note to release

* fix(onboarding): enforce inference-first gateway setup
2026-07-10 04:59:15 +01:00
SunnyShu ec83152786 fix(openai): preserve complete tool calls from clean streams without finish_reason (#98124)
* [AI] fix(openai): preserve native tool calls from clean streams without finish_reason

OpenAI-compatible providers that emit delta.tool_calls during streaming but
terminate with data: [DONE] without a final finish_reason chunk (e.g. Evolink
DeepSeek V4) have their tool calls silently stripped.

Introduce sawNativeToolCallDelta (structured provider intent) and
sawStreamDONE (exact SSE data: [DONE] detection via TransformStream).
Pass sawStreamDONE as a getter so the live value is read after stream
consumption. Promotion requires (sawStopFinishReason || (sawNativeToolCallDelta
&& sawStreamDONE?.())). SSE parsing uses line-boundary-aware regex; [DONE]
inside tool arguments or content does not match.

EOF without [DONE] remains fail-closed. DSML still requires sawStopFinishReason.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

Fixes #97994

* [AI] test(openai): add fetch-wrapper loopback tests for [DONE] detection proof

Prove sawStreamDONE works through the full transport chain:
- Local HTTP server → TransformStream → OpenAI SDK → processOpenAICompletionsStream
- [DONE] without finish_reason → promoted to toolUse
- EOF without [DONE] → fail-closed (tool calls stripped)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix: harden clean SSE terminal detection

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 04:52:15 +01:00
Peter Steinberger 75dfd3dc09 feat(xai): support Grok Imagine Video 1.5 (#103316)
* feat(media): add per-model generation catalog metadata

* feat(xai): support Grok Imagine Video 1.5

* test(plugin-sdk): update public surface budget
2026-07-10 04:49:42 +01:00
Peter Steinberger 071e30ecd5 perf(test): trim secrets suite setup 2026-07-09 23:44:00 -04:00
Peter Steinberger cd2f70c7ab fix(ci): pin DeepSeek live gateway models (#103321) 2026-07-10 04:43:16 +01:00
Peter Steinberger 6db586a388 fix(clawrouter): support managed gateway configuration (#103299)
* fix(clawrouter): support managed gateway configuration

* docs(clawrouter): refresh provider map
2026-07-10 04:25:41 +01:00
Peter Steinberger a24139e199 ci: require enabled Telegram package proof (#103310) 2026-07-10 04:24:36 +01:00
Peter Steinberger 1696366f88 feat(android): add safe cron job management (#102997)
* feat(android): add safe cron job management

Co-authored-by: snowzlmbot <293528334+snowzlmbot@users.noreply.github.com>

* fix(android): harden cron editor state

* fix(android): preserve cron state across lifecycle

* fix(android): satisfy cron release gates

* fix(android): retain cron drafts outside saved state

* fix(android): scope cron auto-delete to one-shot jobs

* fix(android): use Compose activity owner

* docs(changelog): note Android cron management

* fix(cron): harden Android job management

* chore(i18n): refresh Android cron inventory

* test(cron): cover enriched read views

* chore(changelog): defer Android cron note to release

---------

Co-authored-by: snowzlmbot <293528334+snowzlmbot@users.noreply.github.com>
2026-07-10 04:12:18 +01:00
Peter Steinberger e8fcc93cd3 fix(talk): await realtime tool result delivery (#103268)
* fix(talk): await realtime tool result delivery

* fix(talk): terminally cancel queued results

* chore: keep release changelog out of PR

---------

Co-authored-by: Peter Steinberger <peter@steipete.me>
2026-07-09 20:11:20 -07:00
Ted Li 4c4609d42b fix(ai): match reasoning efforts case-insensitively without lowering provider values (#102993)
* fix(ai): match reasoning effort case-insensitively

* fix(ai): preserve mapped reasoning effort casing

* fix(ai): preserve unmapped reasoning effort casing

* fix(ai): match reasoning effort map keys by case

* fix(ai): harden reasoning effort normalization

Co-authored-by: Ted Li <tl2493@columbia.edu>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 04:07:57 +01:00
Peter Steinberger 5bdd580320 fix(ui): refresh profile and agent selector after language changes (#103293)
* fix(ui): refresh mounted translations

* chore: keep release notes in PR

---------

Co-authored-by: Peter Steinberger <peter@steipete.me>
2026-07-09 20:07:21 -07:00
Peter Steinberger add2c586c2 feat(slack): support native chart presentations (#102635) 2026-07-10 04:05:23 +01:00
Peter Steinberger a1e75e0c61 fix(infra): verify managed update handoff startup (#103278)
* fix(infra): verify managed update handoff startup

Co-authored-by: 丁宇婷0668001435 <ding.yuting@xydigit.com>

* fix(infra): terminate timed-out update handoff

---------

Co-authored-by: 丁宇婷0668001435 <ding.yuting@xydigit.com>
2026-07-10 04:03:48 +01:00
qingminlong 2fd0f88f62 fix: ignore invalid Retry-After HTTP dates (#102987)
* fix: ignore invalid Retry-After HTTP dates

* fix(ai): centralize strict Retry-After dates

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: Peter Steinberger <peter@steipete.me>
2026-07-10 04:02:44 +01:00
Peter Steinberger 2b3dc3042f fix(doctor): gate cross-state-dir legacy imports behind explicit doctor opt-in (#103247)
* fix(doctor): gate cross-state-dir legacy imports behind explicit doctor opt-in

A gateway or CLI command started with OPENCLAW_STATE_DIR pointing at a
non-default directory used to import legacy files FROM the default
~/.openclaw state dir (exec-approvals.json, plugin-binding-approvals.json)
and archive the originals with a .migrated suffix. Any isolated, test, or
staging run on a host with production state silently captured and archived
the production files.

Cross-state-dir imports now run only with the new crossStateDirImports
opt-in: openclaw doctor --fix (or an interactive doctor confirm) performs
the import; the implicit CLI/gateway preflight leaves the default dir
untouched and emits a notice pointing at doctor instead.

* test(doctor): include notices in legacy-state detector mocks
2026-07-10 03:56:02 +01:00
Peter Steinberger 0fa49ad4dd fix(doctor): suppress clean-state repair trailer (#103233)
Co-authored-by: Ke Wang <ke@pika.art>
2026-07-10 03:48:44 +01:00
Brad Reaves b752384586 fix(agents): recover claude-cli warm-stdin continuity when no native transcript is written (reseed candidate not dropped) (#96841)
* fix(agents): recover claude-cli warm-stdin continuity when no native transcript is written

The headless warm-stdin claude-cli backend (liveSession: "claude-stdio")
never writes a native transcript, so the post-turn flush probe always
fails and the missing-transcript reuse path drops the bound session id.

Part 1 (cli-runner.ts): scope the non-destructive binding behavior to
warm-stdin sessions so they keep their binding instead of clearing it
every turn.

Part 2 (attempt-execution.ts): on a missing transcript, clear the stored
binding (no stale --resume) but still return the bound id as the reuse
candidate so prepare can re-detect the missing transcript and arm
raw-transcript reseed. Returning undefined starved reseed and lost
warm-stdin continuity.

Adds/updates regression coverage in attempt-execution.cli.test.ts and a
complementary reseed test in prepare.test.ts.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(agents): align warm-session continuity coverage

* test(agents): keep cli live-session mock complete

* fix(agents): respect stateless CLI session mode

* style(agents): keep session candidate guard focused

* test(agents): preserve minimal CLI runner fixtures

* fix(agents): preserve exact Claude warm sessions

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 03:48:18 +01:00
Peter Steinberger 9ad38e7739 fix(deepseek): align catalog costs and legacy aliases (#103241)
* fix(deepseek): align catalog with current contract

* fix(deepseek): preserve customized catalog rows

* docs(changelog): group DeepSeek catalog metadata

* fix(deepseek): preserve customized catalog rows
2026-07-10 03:41:33 +01:00
Peter Steinberger 7fd426e450 test(agents): synchronize retained writer takeover test (#103280) 2026-07-10 03:40:31 +01:00
Peter Steinberger db12cb7023 fix(xai): align current model catalog and tools (#103260)
* fix(xai): align current model catalog and tools

* chore(xai): defer release note to release closeout

* docs: refresh xai documentation map
2026-07-10 03:36:14 +01:00
Peter Steinberger a938b472bd perf(test): narrow session status imports 2026-07-09 22:33:20 -04:00
Peter Steinberger eae9e7674a perf(test): reuse TUI PTY gateway fixture 2026-07-09 22:33:20 -04:00
Peter Steinberger 8d892e8dab fix(browser): handle Chrome spawn errors (#103243) 2026-07-10 03:32:36 +01:00
Peter Steinberger 8511585291 fix(test): restore OpenRouter and Fireworks live coverage (#103204)
* fix(test): restore live provider model coverage

* test: retry incomplete live tool reads

* test: correlate live probe transcripts by turn
2026-07-10 03:32:10 +01:00
Peter Steinberger ee1450d619 fix(ci): build iOS with generic simulator (#103259) 2026-07-10 03:28:53 +01:00
Vincent Koc f8527e77bc fix(ci): pin Kova timeout signal contract (#103264) 2026-07-09 19:28:44 -07:00
ZOOWH 7809acfc24 perf(gateway): avoid per-character chat sanitizer rebuilds (#102971)
* perf(gateway): replace O(n^2) char loop with regex in stripDisallowedChatControlChars

Replace character-by-character iteration with a single regex replace to
avoid event-loop blocking on large messages (1MB+). The regex matches
only disallowed control characters (NUL-BS, VT, FF, SO-US, DEL) while
preserving tab, newline, CR, printable ASCII, and Unicode.

Closes #102915

* perf(gateway): use String.fromCodePoint for regex to avoid lint suppression

Replace the eslint-disable comment and hex-escape regex literal with
String.fromCodePoint() construction. This avoids adding a new entry to
the lint suppression baseline while keeping the same character set and
performance characteristics.

Ref: #102915

* refactor(gateway): consolidate chat sanitizer

---------

Co-authored-by: Peter Steinberger <peter@steipete.me>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-10 03:27:00 +01:00
Ayaan Zaidi e6a9a5d182 docs(web): document Docker host-networking requirement for the Telegram Mini App 2026-07-10 07:53:37 +05:30
Ayaan Zaidi 6da0af1cd3 fix(ci): use public plugin-sdk test seams and refresh generated surfaces 2026-07-10 07:53:37 +05:30
Ayaan Zaidi 0521d848bb fix(telegram): fixed-length initData hash compare and base-path ws url 2026-07-10 07:53:37 +05:30
Ayaan Zaidi 04ff278a1d refactor(device-bootstrap): close bootstrap purpose type 2026-07-10 07:53:37 +05:30
Ayaan Zaidi 00aad83f43 fix(telegram): harden mini app URL and page serving 2026-07-10 07:53:37 +05:30
Ayaan Zaidi b2ee68780c docs(web): document Telegram dashboard entry 2026-07-10 07:53:37 +05:30
Ayaan Zaidi 3c99adb9ca feat(telegram): add dashboard mini app command 2026-07-10 07:53:37 +05:30
Ayaan Zaidi 9cca9afa70 feat(ui): accept dashboard bootstrap tokens 2026-07-10 07:53:37 +05:30