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