Commit Graph

72001 Commits

Author SHA1 Message Date
Peter Steinberger be95b78ae6 fix(release): handle large preparation diffs (#113760) 2026-07-25 10:15:47 -07:00
Peter Steinberger f6e8446e55 fix(ui): generalize external session label (#113759) 2026-07-25 10:08:44 -07:00
Peter Steinberger 2c933adcd9 fix(meta): align manifest inputs with runtime (#113758) 2026-07-25 10:00:26 -07:00
Peter Steinberger 7db5d5450e refactor(config): split validation responsibilities (#113713)
* refactor(config): split validation god file

* refactor(config): keep validation helper type private
2026-07-25 09:56:09 -07:00
Peter Steinberger e279076010 fix(ui): carapace follow-ups — embed font stacks, data-theme-resolved, undefined status tokens (#113724)
* feat(ui): publish carapace embed font stacks to MCP apps

Adopt the carapace embed contract's sandbox-safe font stacks: publish
--font-sans for the first time and switch --font-mono from the host's
JetBrains-led token to the embed mono stack. Both are static, system-
resolvable values byte-identical to carapace candidate/embed.css, since
the sandbox font-src policy silently drops brand faces.

* feat(ui): emit data-theme-resolved alongside theme attributes

Carapace CSS selects on [data-theme-resolved]; keep it in lockstep with
data-theme-mode at boot (index.html IIFE) and on every runtime theme
change (bootstrap publish path). Rename applyStartupPresentation to
applyThemePresentation: it runs on every theme change, not just startup.

* fix(ui): resolve undefined --success/--warning tokens and drop dead hex fallbacks

--success and --warning were never defined (real tokens: --ok/--warn),
so sites with literal fallbacks rendered off-palette one-off colors and
sites without them silently dropped declarations (invalid color-mix in
the chat sidebar warn banner). Map all uses to the semantic tokens
across board, chat sidebar/layout, layout, and components styles, and
strip the stale dead var() hex fallbacks in these global stylesheets.
Code-syntax palette hexes in the file view are documented as deliberate.
2026-07-25 09:32:56 -07:00
Peter Steinberger dd606796c1 fix(browser): clean up failed guarded navigation routes (#113753)
Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-25 09:17:53 -07:00
Peter Steinberger 511d759c50 fix(browser): prevent IME composition from sending copilot messages (#113752)
Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-25 09:14:20 -07:00
Peter Steinberger bd71c34015 refactor(gateway): split server implementation (#113725) 2026-07-25 09:12:12 -07:00
Peter Steinberger 1bfd207a54 refactor(doctor): split legacy model migrations (#113717) 2026-07-25 08:52:43 -07:00
Peter Steinberger 1e93e78ee1 fix(cron): deliver globally configured failure alerts (#113737)
* fix(cron): deliver globally configured failure alerts

* fix(cron): respect failure destination and skipped alerts

---------

Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-25 08:52:29 -07:00
Peter Steinberger 924aef2e7c fix(nodes): deliver single-field notifications to native devices (#113747)
Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-25 08:47:33 -07:00
Peter Steinberger c51fd61e1a fix(cron): keep paused jobs off descending next-run pages (#113745)
Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-25 08:42:38 -07:00
Peter Steinberger 06548ae57f fix(browser): prevent copilot popup hang when a tab closes (#113744)
Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-25 08:39:30 -07:00
Peter Steinberger e19841c725 feat: continue Pi and OpenCode sessions from the session catalog (#113718)
* feat(plugins): add acpSessionBinding seam for ACP session adoption

* feat(acpx,opencode): adopt existing Pi and OpenCode sessions from the catalog

* fix(ci): satisfy dead-code and temp-path guards

* docs(acpx): record why pi-acp session-root resolution stays strict
2026-07-25 08:35:47 -07:00
Peter Steinberger e5999c7316 fix(microsoft-foundry): honor Azure device-code lifetime (#113741)
* fix(microsoft-foundry): honor device-code lifetime

Co-authored-by: wangmiao0668000666 <wang.miao86@xydigit.com>

* fix(microsoft-foundry): allow login completion grace

---------

Co-authored-by: wangmiao0668000666 <wang.miao86@xydigit.com>
2026-07-25 08:33:05 -07:00
Peter Steinberger 14da8a2523 refactor(agents): validate workspace attestation rows structurally, not by filename allowlist (#113686)
* refactor(agents): validate attestation hashes structurally

* fix(agents): reject Windows reserved device names in attestation filenames

* refactor(agents): close attestation filename set with an ASCII markdown charset
2026-07-25 08:32:50 -07:00
Peter Steinberger 1a11f5394e refactor(ui): split workboard view (#113730) 2026-07-25 08:29:39 -07:00
Peter Steinberger bab4b2973a refactor(ui): split config view panels (#113715) 2026-07-25 08:28:40 -07:00
Peter Steinberger f808147f62 refactor(ui): split chat thread projection (#113714)
* refactor(ui): split chat thread projection

* refactor(ui): tighten chat thread module boundaries

* refactor(ui): type chat stream grouping locally
2026-07-25 08:28:02 -07:00
Peter Steinberger 481d826ff4 fix(vault): prevent insecure secrets plan writes (#113707)
* fix(vault): harden secrets plan writes

* fix(secrets): avoid env marker collision

* style(secrets): type plan write rejection

* refactor(onepassword): remove obsolete path resolver

* fix(secrets): preserve Windows plan path trust

* refactor(secrets): compact ACL token policy

* fix(secrets): route permission checks through facade
2026-07-25 08:27:33 -07:00
Peter Steinberger 589f28b57a refactor(plugins): split manifest normalization (#113720) 2026-07-25 08:27:03 -07:00
Peter Steinberger 4032ae5247 fix: preserve repeated messages while chat history reloads (#113690)
* fix: preserve repeated messages while chat history reloads

* fix: reconcile repeated chat turns by authoritative identity

---------

Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-25 08:18:11 -07:00
zengLingbiao c459a1876b fix(volcengine): reject malformed TTS audio (#113109)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-25 08:15:14 -07:00
Peter Steinberger a95486cefc feat: session rail with read-only session companion in Control UI chat (#113698)
* feat(protocol): add session companion schemas

* feat(gateway): add session companion service

* feat(gateway): expose session companion rpc

* fix(gateway): harden companion runtime limits

* test(gateway): fix companion type assertions

* test(gateway): align companion test target

* feat(ui): replace observer HUD and side chat with session rail

* docs: session rail companion for control ui

* test(ui): align session rail client mock

* fix(ui): drop stale chat search import

* fix: satisfy session companion lint contracts

* refactor(gateway): isolate companion state contract

* fix(ui): keep session rail reachable while idle

* fix(agents): clamp derived openai prompt cache keys at boundary

* fix(ai): clamp chatgpt responses session_id affinity header

* fix(ci): align session companion branch gates

* fix(ui): require run id for sessionless terminal chat events

* fix(agents): scope internal run events to transcript

* chore: revert changelog edit (release generation owns changelog)
2026-07-25 08:14:32 -07:00
Peter Steinberger 78e600bc1c refactor(gateway): build one attachment message and project image-stripped text at routing (#113738)
The attachment parser accumulated two parallel message strings via
conditional appends inside the offload loop (all markers vs non-image
markers). Markers are presentation-only now that MediaFact[] carries
identity, so the parser builds one message and the routing decision in
chat-send-attachments projects the image-stripped variant from the
structured offloaded refs (stripImageMediaMarkers) exactly where
routeImageOffloadsAsMediaPaths chose a string before. Marker order,
trailing placement, and trim semantics are byte-identical; goldens
unchanged.
2026-07-25 08:14:18 -07:00
Peter Steinberger 42515c4f07 fix(openai): prevent realtime transcript turns from reordering (#113723)
* fix(openai): preserve realtime transcript order

* chore: defer realtime note to release

* test(openai): align heartbeat prompt contract

* test(openai): align direct context contract
2026-07-25 08:11:09 -07:00
Peter Steinberger 4acf03fce6 fix(ui): restore Control UI theme colors (#113726)
* fix(ui): use canonical theme tokens

* chore(ui): leave release notes to release prep
2026-07-25 08:09:34 -07:00
Peter Steinberger 22226bf2f6 refactor(agents): split CLI runner execution (#113716)
* refactor(agents): split CLI runner execution

* refactor(agents): keep CLI log helper private
2026-07-25 08:07:41 -07:00
Peter Steinberger f1538c6d6c fix(release): validate complete package sets in candidate smoke (#113600)
* fix(release): pass only root dependencies to candidate smoke

* fix(release): stage plugin candidates for Parallels

* fix(release): bind plugin preflight package identity

* fix(test): stream upstream npm tarballs

* fix(test): retry post-update gateway startup

* fix(test): install fresh candidates through registry

* fix(test): route fresh candidates through registry

* test(release): update Parallels source contracts

* fix(test): split host and guest registry URLs
2026-07-25 07:59:06 -07:00
Sanjay Santhanam 65526ed389 fix: gmail setup fails to load gcloud when an unsupported Python is first on PATH (#112983)
* fix(gmail-setup): skip python interpreters gcloud can't use

resolvePythonExecutablePath accepted the first python3/python found on
PATH without checking its version, so macOS' bundled Python 3.9 (earlier
on PATH than a Homebrew 3.10-3.14 install) was chosen as CLOUDSDK_PYTHON
and gcloud failed to load. Query each candidate's version and skip any
outside gcloud's supported 3.10-3.14 range so a compatible interpreter
later on PATH is selected instead.

Closes #112712

* test(gmail): cover gcloud Python upper bound

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-25 07:53:38 -07:00
Peter Steinberger 53be78269e fix(android): connect to pasted manual gateway host and port (#113722)
* fix(android): preserve pasted manual gateway authorities

* fix(android): align gateway formatting and native i18n baseline

---------

Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-25 07:52:46 -07:00
zengLingbiao cff22e83ca fix(xiaomi): reject malformed base64 audio in TTS responses (#113106)
* fix(xiaomi): reject malformed TTS audio

Co-authored-by: zenglingbiao <zeng.lingbiao@xydigit.com>

* fix(media): reject noncanonical base64 padding

* style(xiaomi): format malformed audio test

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-25 07:52:23 -07:00
Peter Steinberger c1987081c7 fix(ui): drop the sidebar agent menu below its card (#113719) 2026-07-25 07:51:09 -07:00
Vincent Koc a4d367e38c fix(crabbox): keep untrusted bootstrap pnpm pin current (#113728) 2026-07-25 22:46:10 +08:00
Peter Steinberger 7edc234f6c improve(auto-qa): coordinate live root-cause testing campaigns (#113727)
* refactor(skills): require root-cause fixes in auto qa campaigns

* improve(auto-qa): coordinate current-main root-cause campaigns

---------

Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-25 07:41:42 -07:00
Vincent Koc 21694787f0 fix(sqlite): pin snapshot backups to one read state (#113708) 2026-07-25 22:31:23 +08:00
Peter Steinberger bd8277c248 refactor(agents): split subagent lifecycle (#113711) 2026-07-25 07:29:42 -07:00
Eugene Harold Krabs 934acf312b chore: stabilize session cost usage cache warmup test (#113460)
* test: stabilize session cost usage cache warmup

* test(infra): await cost refresh deterministically

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-25 07:29:18 -07:00
Peter Steinberger 8376daad6c fix(qa): record live channel evidence from actual driver (#113710)
Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-25 07:25:29 -07:00
Peter Steinberger f703d803cc chore(models): curate all provider model catalogs to current-generation lineups (#113681)
* chore(models): fleet-wide provider catalog curation

* fix(models): sync provider runtime catalogs and tests with curated manifests

* test(models): align venice lifecycle assertions and copilot auth default with curated catalogs

* test(models): align catalog lifecycle contract checks
2026-07-25 07:21:17 -07:00
wangmiao0668000666 6935293626 fix(microsoft-foundry): bound az login device-code subprocess (#112369)
* fix(microsoft-foundry): bound az login device-code subprocess

Add a 5-minute timeout to the az login spawn so a stalled Azure CLI
does not block the caller indefinitely. The timeout kills the child
process and rejects the promise with a descriptive message.

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

* fix(microsoft-foundry): reject login timeout immediately

* refactor(microsoft-foundry): use shared process timeout

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-25 07:20:19 -07:00
Peter Steinberger de916a4fe3 fix: repair tool-call transcripts when plugins block results (#113697)
* fix: preserve tool-call pairing when message hooks block results

* test: satisfy tool-result guard boolean lint

---------

Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-25 07:18:16 -07:00
Peter Steinberger 367ff3cea1 feat(sqlite): migrate persisted media to canonical facts and stop legacy writes (#113695)
* feat(sqlite): migrate persisted media to canonical facts and stop legacy writes

PR 3 of the media legacy retirement program — the operator-approved
canonical cutover.

- openclaw doctor --fix owns one idempotent migration: active
  transcript_events rows canonicalize to __openclaw.media (facts-first
  gap-fill, bare legacy kinds to fact.kind, transcribed indexes and
  workspace dirs onto per-fact fields) via the transcript replacement
  owner; cold plain/.zst archives rewrite through temp-file + codec
  readback + event/id verification + atomic replace; trajectory
  runtime snapshots canonicalize IN PLACE (telemetry preserved, never
  row deletion). Invalid JSON, genuinely ambiguous legacy-only sparse
  alignment, or a changed source aborts that owner without partial work;
  reruns are no-ops.
- Per-agent schema advances to v16 as a pure downgrade guard (main
  independently took v15 for board/session-sharing tables; no
  columns/tables/indexes change here, shared-state DB untouched). v15
  databases repair canonical indexes before the version assertion so
  repairable installations never strand.
- The user-turn builder stops writing top-level legacy Media* fields;
  shouldPersistStructuredMediaEntries and the aligned projection mode
  are deleted; the generic transcript append boundary canonicalizes
  every message role so SDK/mirror writers cannot mint new legacy rows.
- Internal persisted-reader legacy fallbacks are removed; the public
  SDK projection stays until retirement PR 4's window expires.

Hardening from three adversarial review rounds, each with fixture
regressions: in-place trajectory canonicalization instead of row
deletion; repair-before-assert on the v15 path; all-roles append
canonicalization; duplicate-preserving exact row rewrites; v0-v15
reopen guards; complete canonical facts bypass compact legacy
projections (PR-1 dual-write rows migrate cleanly); SQLite LIKE
underscore escaped so populated foreign databases are never claimed.

* fix(sqlite): align schema-support metadata and gates with the v16 cutover

package.json agent schema support advances to 16; verifier and board
parity fixtures run doctor migration before steady-state access (the
production guards were correct); two test-only exports removed; the
migration module registered in the doctor raw-SQLite allowlist.
2026-07-25 07:15:44 -07:00
Peter Steinberger 97c57585a1 fix: preserve distinct imported session messages (#113703)
Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-25 07:12:43 -07:00
sunlit-deng 7d7bfb2047 fix(scripts): bound release metadata git lookups (#112556)
* fix(scripts): bound release metadata git lookups

* fix(scripts): keep fractional git timeouts bounded

* test(scripts): gate fake git shim to Unix

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-25 07:12:27 -07:00
Peter Steinberger cb628df199 fix: recognize configured plugin dependencies by manifest id (#113691)
Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-25 07:05:44 -07:00
Peter Steinberger 35ce322a6c fix: reconnect after browser gateway handshake errors (#113689)
Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-25 06:59:44 -07:00
Peter Steinberger 197bcfd113 feat: add continuous OpenClaw Auto QA skill (#113674)
* feat: add continuous OpenClaw Auto QA skill

* improve: harden Auto QA campaign proof and load policy

* fix(skills): respect offline auto QA worker boundaries

---------

Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-25 06:54:24 -07:00
Peter Steinberger d1b534d7fa docs(heartbeat): align retired config options with fixed runtime policies (#113455)
The runtime retirement already shipped: busy deferral is automatic,
reasoning payloads stay internal, the HEARTBEAT_OK ack budget is fixed at
300 chars, the Heartbeats prompt section follows cadence, and tool-error
warnings are always on. Docs still advertised skipWhenBusy, ackMaxChars,
includeReasoning, includeSystemPromptSection, and suppressToolErrorWarnings
as live options; this aligns seven pages with the fixed policies and the
strict heartbeat field list, locks the claw-profile skipWhenBusy rejection
diagnostic with a dedicated test, renames includeReasoning-era test/comments,
and canonicalizes claw add-plan workspace path assertions (macOS realpath).
2026-07-25 06:52:27 -07:00
Peter Steinberger 89984a5082 fix: preserve child process signal exit codes (#113685)
Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-25 06:51:49 -07:00