Commit Graph

72016 Commits

Author SHA1 Message Date
Peter Steinberger a1cc41acbc fix: recognize Bash completion installed in login profiles (#113790)
* fix(cli): recognize Bash completion in login profiles

* test: track Bash completion profile fixtures

---------

Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-25 11:08:59 -07:00
Peter Steinberger fca18dddc7 fix(native): preserve active chat when another run ends (#113786)
Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-25 11:04:35 -07:00
Peter Steinberger 6277c35d9a fix(ui): restore one-of skill binary setup and installation (#113767)
Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-25 11:01:25 -07:00
Peter Steinberger 4dd8a2be76 improve(browser): batch navigation guard, snapshot delta markers, tool output schema, code-mode recipe (#113749)
* feat(browser): guard batches and annotate snapshot deltas

* docs(browser): document reliable automation loops

* test(browser): align batch guard mocks

* fix(browser): reset snapshot deltas after navigation

* fix(browser): detect document navigation without URL equality

* fix(browser): require stable identity for snapshot deltas

* fix(browser): keep snapshot delta helper private
2026-07-25 10:58:03 -07:00
Peter Steinberger 0ff2c82033 refactor(mattermost): split inbound monitor (#113775)
* refactor(mattermost): split inbound monitor

* test(channels): follow mattermost history split
2026-07-25 10:56:58 -07:00
Peter Steinberger c65f509658 refactor(doctor): split configured plugin repair (#113777) 2026-07-25 10:56:40 -07:00
Peter Steinberger 6f1950ec1a fix(tui): expose supported verbose and reasoning levels (#113782)
Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-25 10:52:53 -07:00
Peter Steinberger a1d666fdc3 fix(native): keep images and voice notes visible in chat and exports (#113764)
* fix(native): preserve image and audio in chat transcripts

* fix(native): refresh extracted media localization source lines

---------

Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-25 10:49:56 -07:00
Peter Steinberger fe4972b12b fix(browser): keep shared page text inside producer limits (#113768)
Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-25 10:41:06 -07:00
openclaw-mantis[bot] 81ea782ca5 chore(ui): refresh control ui locales (#113184)
* chore(ui): refresh control ui locales

* fix(ui): translate external session label

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-25 10:37:42 -07:00
Peter Steinberger 916625eef2 fix(ui): show configured primary model in general settings (#113769)
Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-25 10:37:08 -07:00
Peter Steinberger 1a2252e1a7 fix(ui): keep cron history matched to the latest request (#113765)
Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-25 10:30:32 -07:00
Jason (Json) 8028a3a5b2 feat(anthropic): gate live model discovery on contract coverage (#113757)
* feat(anthropic): gate live model discovery on contract coverage

Live catalog discovery cloned a template for any newly discovered Claude id, so
a future model generation would be selectable while request shaping treated it
as pre-4.6 and 400d. Add an opt-in acceptUnknownModel gate to the shared live
catalog seam and have the Anthropic plugin accept a discovered model only when
Anthropic's advertised capabilities agree with the contracts we would apply.
Manifest-published ids bypass the gate and keep their metadata.

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

* docs(plugins): document the live-discovery admission hook

Record acceptUnknownModel in the provider-plugin SDK reference: when to use
it, that manifest-published ids bypass it, and the fail-closed guidance.

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

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-25 11:27:58 -06:00
Peter Steinberger ce7ec43c45 fix(media): preserve streamed attachment filename MIME detection (#113762)
Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-25 10:24:57 -07:00
Peter Steinberger 1b2dc18190 test(doctor): validate bundled provider catalogs (#113761) 2026-07-25 10:18:35 -07:00
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