Peter Steinberger
621f7c43f7
fix(openai): restore automatic Code Mode for preferred models ( #131139 )
...
* fix(openai): restore automatic Code Mode for preferred models
* test(openai): move model override coverage to core owner
* test(openai): load provider through public surface boundary
2026-08-27 13:23:32 -07:00
Vincent Koc
c45cc17e05
fix(codex): update managed runtime to 0.150.1 ( #130685 )
...
* fix(codex): update managed runtime to 0.150.1
* test(codex): refresh newer runtime fixtures
2026-08-27 13:31:46 +08:00
Vincent Koc
6e3df0d70b
refactor(openai): inline non-negative config ranges ( #130199 )
2026-08-27 11:16:59 +08:00
Peter Steinberger
67d22a58ac
refactor(embeddings): unify provider contract ( #130506 )
...
* refactor(embeddings): unify provider contract
* test(plugins): declare embedding type bridge
* test(memory): migrate embedding fixtures
2026-08-26 18:20:48 -07:00
Peter Steinberger
c02ac37d12
fix(embeddings): preserve provider endpoint query parameters ( #130211 )
2026-08-26 10:10:39 -07:00
Peter Steinberger
1473333f46
feat: bring Linux desktop onboarding to macOS parity ( #129815 )
...
* feat: bring Linux desktop onboarding to macOS parity
* fix: keep onboarding recovery within startup budget
* fix: satisfy onboarding startup and CI contracts
* fix: preserve Linux setup recovery and JSON5 configs
* refactor: keep onboarding recovery inside startup budget
* refactor: deduplicate first-run startup routing
* fix(linux): secure remote gateway pins and saved credentials
2026-08-25 23:34:34 -07:00
Erick Kinnee
cbdfedee84
fix(plugins): scope runtime catalog discovery by provider ( #129624 )
...
* fix: scope provider catalog discovery by selected identities
* fix(plugins): enforce agent-scoped live catalog discovery
Co-authored-by: Erick Kinnee <ekinnee@gmail.com >
* chore: keep provider release notes in pull request context
---------
Co-authored-by: Erick Kinnee <ekinnee@gmail.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-08-25 17:37:31 -07:00
Peter Steinberger
6a1dedb00c
refactor(agents): remove redundant heartbeat system prompts ( #129642 )
...
* refactor(agents): remove redundant heartbeat system prompts
* test(agents): align heartbeat cleanup checks and prompt snapshots
2026-08-25 16:10:22 -07:00
Peter Steinberger
858d95fa4d
fix(openai): preserve Azure embedding index across key rotation ( #129516 )
2026-08-25 11:48:25 -07:00
Peter Steinberger
0e18543071
fix(openai): preserve embedding index across proxy key rotation ( #129177 )
2026-08-25 02:16:10 -07:00
ClawSweeper
b68c136609
feat(codex): upgrade main to app-server 0.149.1 ( #128370 )
...
* feat(codex): upgrade app-server integration to 0.149.0
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
* fix(codex): harden full app-server integration and lifecycle
* fix(codex): scope guardian trust and satisfy integration gates
* fix(codex): keep guardian startup and router tests within gates
* chore(codex): tighten guardian assertion safety baseline
* fix(ui): preserve sidebar icon path contracts
* test(codex): align side-question auth fixture
Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com >
* style(codex): format transcript mirror imports
Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com >
* test(codex): preserve native approval decisions
Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com >
* test(codex): isolate app cache and catalog fixtures
Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com >
* fix(ui): render guardian review and system notices
Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com >
* test(codex): isolate native approval decisions
Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com >
* fix(codex): revalidate reviewer config trust
Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com >
* chore(codex): update app-server to 0.149.1
Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com >
* test(codex): align desktop version warning
Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com >
* fix(ui): scope notices to the active run
Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com >
* fix(codex): isolate review, hosted app, and auth ownership
Co-authored-by: Vito Cappello <hixvac@gmail.com >
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com >
* chore(codex): keep release notes out of the release-owned changelog
* test(codex): reject reviewer cancellation with its explicit error
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com >
Co-authored-by: roboclaw-bot <309084314+roboclaw-bot@users.noreply.github.com >
Co-authored-by: Vito Cappello <hixvac@gmail.com >
2026-08-24 19:50:22 -07:00
xingzhou
1edbbc9dd7
fix(ui): prevent oversized WebRTC SDP answers from hanging Talk setup ( #119295 )
...
* fix(ui): bound WebRTC SDP answer reads and release failed bodies
* fix(ui): scope WebRTC SDP limits to OpenAI
* fix(ui): release bounded response readers
* test(ui): split WebRTC SDP browser coverage
* fix(ui): reject unsafe declared response lengths
* test(ui): reuse pending WebRTC SDP response fixture
* test(ui): use native response for pending SDP body
* style(ui): align pending SDP fixture formatting
* test(ui): capture WebRTC SDP alert proof
---------
Co-authored-by: Patrick Erichsen <patrick.a.erichsen@gmail.com >
2026-08-24 16:41:36 -07:00
Peter Steinberger
234df15a6d
chore: refresh dependencies after seven-day cooldown ( #128414 )
...
* build(deps): refresh dependencies after cooldown
Apply dependency, toolchain, action, image, and exact tool updates released by the inclusive 2026-08-16 seven-day cutoff. Adapt owner boundaries for the resulting CUA, logging, Teams, Markdown, native, and test-harness contract changes while retaining versions blocked by upstream compatibility constraints.
* fix(ui): align markdown renderer env typing
* fix(deps): align postcss and mistral peer contracts
* fix(deps): repair refreshed dependency contracts
* fix(deps): retain tslog startup budget
* fix(ci): verify Android tools with SHA-256
* fix(ci): fence Android SDK cache version
2026-08-24 03:01:54 -07:00
Vincent Koc
87665fab10
fix(talk): preserve accepted work on relay detach ( #121894 )
...
Co-authored-by: Dallin Romney <dallinromney@gmail.com >
Punchcard-Session: calm-brook-timber-r0
2026-08-23 01:53:32 -07:00
wanyongstar
0a35d54846
fix(openai): return structured failure for malformed OAuth token JSON ( #122962 )
...
* fix(openai): return structured failure for malformed OAuth token JSON
A truncated or otherwise malformed token response from auth.openai.com
made response.json() throw a raw SyntaxError. The exchange path called
the shared parser outside its try/catch, so the exception escaped
exchangeOpenAIAuthorizationCode and crashed the login flow instead of
surfacing a structured failure. Catch parse errors inside
readOpenAITokenResponse so both exchange and refresh return a failed
TokenResult.
* ci: retrigger checks after concurrency-cancelled lint run
2026-08-22 15:00:33 -04:00
pash-openai
4573635c77
Let Codex use newly available account models before catalog refresh ( #127394 )
...
* Let Codex run newly available account models without host credentials
* Keep authored provider routes ahead of native account authentication
* Keep native Codex account discovery consistent with model availability
* Preserve advanced reasoning for newly discovered Codex models
2026-08-21 19:30:54 +00:00
Yiğit ERDOĞAN
ff83e3efe8
test(extensions): close cached agent databases before removing fixture state dirs ( #126352 )
...
Doctor migrations and auth-profile writes open per-agent and shared state
databases under the fixture's temporary directory. Clearing the plugin
state store or the runtime auth snapshots does not release those handles,
so Windows fails the directory removal with EBUSY while Linux unlinks the
open files and stays green.
Close the cached databases before each removal, matching the ordering the
zalouser and zalo fixtures already use.
2026-08-21 07:22:57 -07:00
Dallin Romney
45db176a64
test(openai): drop upstream realtime outcome assumption ( #126025 )
2026-08-20 20:09:32 -07:00
Conan-Scott
7c959c85f9
fix(openai): preserve OAuth realtime session policy ( #126363 )
...
Co-authored-by: Clawdbot <clawdbot@apilab.us >
2026-08-20 15:17:03 -07:00
Peter Steinberger
02c08bba71
fix(codex): unblock Computer Use after plugin install ( #126699 )
...
* fix(codex): release config fence before readiness probe
* chore(codex): upgrade managed app-server to 0.148.0
2026-08-20 08:26:41 -07:00
Peter Steinberger
1b6c42d1f0
refactor(openai): unify ChatGPT auth identity derivation in plugin SDK ( #126544 )
...
The OpenAI ChatGPT auth profile identity was derived in two drifted copies:
the plugin-sdk helper (used by Codex/Hermes import migrations) fell back to
bare JWT sub and leaked the workspace accountId into the user subject, while
the openai extension copy (used by login/refresh) composed the OIDC-stable
iss|sub pair and honored the credential email fallback.
Fold the extension's chain into the canonical SDK helper (credential-email
fallback, iss|sub before bare sub, no workspace-id subject), delete the
extension copy, and move all extension call sites onto
openclaw/plugin-sdk/provider-auth. Cross-checked against Codex OSS
(codex-rs/login/src/token_data.rs): chatgpt_account_id is workspace identity,
never user identity. No doctor migration: the divergent fallback branch only
fires for tokens lacking every user-id claim and email, which real ChatGPT
tokens do not produce, so no shipped install holds divergent keys from it.
2026-08-19 23:48:43 -07:00
Peter Steinberger
efc33f882e
fix: preserve GPT-5.6 Max and Ultra through Codex ( #126492 )
...
* fix(agents): preserve GPT-5.6 thinking capabilities
Carry harness-owned effort metadata from the prepared catalog to the final executable model without leaking it across model or harness changes. Preserve exact GPT-5.6 registry metadata and persisted Ultra selections across route-scoped projections.
* fix(agents): resolve ambient catalog owner
* test(commands): mock thinking hydration policy
* fix(sessions): validate persisted thinking selections
* fix(commands): persist thinking selection provenance
* fix(agents): scope thinking hydration per fallback
* fix(sessions): hide fallback thinking provenance
2026-08-19 21:48:18 -07:00
Peter Steinberger
3eecab1bee
refactor(plugins): adopt shared retry runtime ( #126065 )
2026-08-18 17:46:38 -07:00
Peter Steinberger
460b6b1e96
refactor(realtime): deduplicate voice audio handling ( #125728 )
...
Reuse the canonical realtime audio duration and OpenAI-compatible wire-format helpers while removing redundant state transitions and truncate payload construction. The production diff is net-negative.
Provider interruption policy and lifecycle ownership stay local to each provider; this does not introduce shared mutable assistant tracking or change behavior.
2026-08-18 02:00:12 -07:00
Peter Steinberger
6cc40431d1
fix(voice): prevent choppy audio in realtime calls ( #125620 )
...
* fix(voice-call): pace realtime audio from stream clock
* fix(voice): preserve resampler state across audio chunks
* fix(voice-call): honor telephony TTS audio formats
* fix(voice-call): await acknowledged stream playback
* fix(voice): bound realtime input audio backlog
* chore(voice-call): shrink assertion baseline and localize tts format error
* test(voice-call): split playback-mark coverage into its own suite
* test(voice-call): drop helper left unused by suite split
* test(openai): scope queued audio copy assertion
* fix(openai): flush realtime resampler at response end
* fix(voice-call): reject containerized mulaw TTS
2026-08-18 00:07:01 -07:00
Peter Steinberger
31afd52e99
refactor(realtime): share audio duration calculation ( #125612 )
...
Fix xAI barge-in truncation that reported 3760 ms after only 3700 ms of decoded audio.
Share exact audio-duration math across OpenAI, xAI, and Google while keeping provider-specific rounding at each caller.
2026-08-17 22:25:42 -07:00
Peter Steinberger
41c0818751
fix(openai): prevent realtime barge-in truncation errors ( #125502 )
...
* fix(openai): clamp realtime barge-in truncation
Clamp OpenAI Realtime barge-in truncation to the audio duration produced for each assistant item. This prevents interruption failures observed live when 3,700 ms of decoded audio was paired with a 3,760 ms transport-clock timestamp.
* fix(openai): propagate PCM sideband audio format
The browser sideband negotiated PCM16, but its bridge defaulted to G.711 for duration accounting. Propagate the negotiated format so truncation uses the actual PCM duration and closes ClawSweeper's in-scope finding.
2026-08-17 19:29:50 -07:00
Peter Steinberger
3b8f9fb5a2
fix(talk): preserve agent scope in browser capabilities ( #125142 )
...
Ensure gateway-control capability checks use the same routed agent as realtime provider readiness and browser-session authentication.
2026-08-17 00:42:54 -07:00
Peter Steinberger
ab143955aa
fix(discord): restore voice auto-join on multi-agent gateways ( #125069 )
...
* fix(discord): report voice channel access failures
* fix(discord): keep realtime auth agent-scoped
* test(discord): model followed-channel lookup failure
* fix(discord): preserve cancelled voice joins
* refactor(discord): centralize cancelled join result
2026-08-17 00:18:14 -07:00
Peter Steinberger
73ab74eccc
fix(discord): preserve routed agent for realtime voice ( #125111 )
2026-08-16 23:41:38 -07:00
Peter Steinberger
b1c2ed7d47
fix(openai): keep setup auth choices consistent ( #124729 )
...
* fix(openai): centralize setup auth metadata
* refactor(openai): overlay auth hooks in place
2026-08-16 12:31:02 -07:00
Peter Steinberger
568b920b21
feat(lint): enforce import ordering and deduplication ( #124730 )
...
* refactor(imports): dedupe and hoist imports
* feat(lint): enforce import/no-duplicates and import/first
2026-08-16 11:44:52 -07:00
Peter Steinberger
82ffcdd0d8
feat(lint): enable verified-clean rules and import checks ( #124610 )
...
* fix: add symbol descriptions, enum initializers, and Error rejections
* feat(lint): enable verified-clean rule tranche and activate import plugin
* test(lint): cover deferred import rules
* fix(lint): preserve Error rejection identity
2026-08-16 07:28:21 -07:00
Peter Steinberger
6aa27d6ecd
refactor: retire August compat windows (embedding API, pi aliases, target parser, spawning hook, setup exports, WhatsApp inbound aliases) ( #124416 )
...
* refactor(plugin-sdk): retire embedded Pi aliases
* refactor(channels): retire explicit target compatibility
* refactor(plugins): retire subagent spawning hook
* refactor(plugin-sdk): retire shipped channel setup exports
* refactor(whatsapp): retire inbound callback aliases
Proof: focused build and WhatsApp E2E green; broad WhatsApp suite 188/189 files green. extensions/whatsapp/src/monitor-inbox.policy.test.ts flakes only in the parallel batch and passes isolated (10/10).
* refactor(plugin-sdk): retire memory embedding registrar
Migrate every bundled provider and manifest to registerEmbeddingProvider and contracts.embeddingProviders. Preserve memory-specific batching, local-service acquisition, index identity, and auto-selection through the canonical generic registry adapter, then remove the parallel registrar, registry, diagnostics, contracts, tests, and docs.
* chore(plugin-sdk): tighten retired surface budgets
Pin the post-retirement public SDK surface to 144 entrypoints, 4,312 exports, 2,564 callable exports, and 1,133 deprecated exports; agent-harness-runtime now permits exactly nine deprecated exports.
2026-08-15 22:43:47 -07:00
Peter Steinberger
c6bf10c27d
perf(test): reuse Quicksilver peer module graph ( #123947 )
2026-08-14 20:08:23 -07:00
Peter Steinberger
c3d843eb24
test: remove residual duplicate assertions ( #123134 )
...
* test: remove residual duplicate assertions
* test: repair stale routing and capability fixtures
* fix(cli): bound one-shot stream drain exit
2026-08-13 04:41:37 -07:00
Peter Steinberger
40af3646d7
test(extensions): remove shared helper replays ( #122773 )
2026-08-12 12:19:38 -07:00
Peter Steinberger
df4e6666c6
refactor(voice): promote realtime voice policy to talk owner ( #122668 )
...
* refactor(voice): promote realtime voice policy to talk owner
Move the exact-speech protocol (typed consult-call outcome instead of
string scraping), agent-proxy session instructions, and consult/wake-name/
barge-in policy defaults from the Discord plugin into src/talk, exported
additively via openclaw/plugin-sdk/realtime-voice. Wake-name enablement now
keys on a supportsActivationNameGating provider capability instead of a
hardcoded provider id. Follow-up to the voice split (#122479 ).
* fix(talk): bind exact-speech bypass to retained session state
Per ClawSweeper review on #122668 : the protocol marker is untrusted model
tool-call text; only a parsed answer matching a currently retained
exact-speech text may select the privileged replay path. Unretained
marker calls route to a normal consult.
2026-08-12 09:44:19 -07:00
Peter Steinberger
c23d66e3b5
refactor: consolidate coercion ownership ( #122692 )
...
* refactor: consolidate coercion ownership
* test: align shard check with weighted planning
* chore: refresh plugin SDK API baseline
2026-08-12 09:25:28 -07:00
Peter Steinberger
0f4640a887
refactor(openai): consolidate realtime test fixtures ( #122670 )
...
* test(openai): consolidate realtime voice fixtures
* test(openai): table-drive realtime voice cases
* test(openai): remove redundant realtime coverage
Browser auth remains covered by 'requires Platform auth before minting browser realtime client secrets' in realtime-voice-browser-auth.test.ts.\n\nCancelled, failed, and incomplete tool output remains covered by 'normalizes .status without closing the reusable socket' in realtime-voice-terminal-outcomes.test.ts.\n\nCommitted oversized finals remain covered by the 'after item commit' row in realtime-transcription-provider.bounds.test.ts.
2026-08-12 08:39:26 -07:00
Peter Steinberger
b080dd1e76
refactor: consolidate coercion contracts ( #122458 )
...
* refactor: consolidate coercion contracts
Centralize exact string, record, numeric, date, Boolean, argument, and structured-error coercions while preserving call-site semantics.
Migrate canonical-name collisions and deprecated internal SDK bypasses, deleting 55 net production/tooling lines. Expand declaration ownership enforcement to 101 allowed helpers and add a narrow export-completeness audit.
* fix: preserve standalone script coercions
Keep copied Control UI tooling self-contained and retain the trusted release harness module-relative source seam when the harness runs against an old target cwd.
2026-08-11 23:26:37 -07:00
Peter Steinberger
baefefa815
refactor(openai): simplify GPT-5.6 canonicalization ( #122467 )
...
Behavior is unchanged. Remove duplicate policy and test scaffolding while preserving canonical Sol identity and direct bare-alias compatibility.
2026-08-11 23:04:01 -07:00
Peter Steinberger
dac940bf3a
refactor(openai): split realtime voice by layer ( #122414 )
...
* refactor(openai): split realtime voice by layer
* refactor(openai): delete dead realtime auth branches
* chore(lint): ratchet max-lines baseline after realtime-voice split
* style(openai): prune split leftovers
2026-08-11 22:06:53 -07:00
Peter Steinberger
964c8c84c1
refactor: consolidate coercion ownership ( #122299 )
...
* refactor: consolidate coercion ownership
Centralize four canonical coercion helpers, migrate exact core and plugin duplicates through narrow Plugin SDK facades, and enforce declaration and plugin-normalization ownership boundaries.
The sweep adds eight focused SDK exports while deleting more production and tooling code than it adds. User-visible behavior is unchanged except for safer equivalent object and UI parsing at existing boundaries.
* fix: guard integer option ownership
Register resolveIntegerOption with the canonical function owner and extend the declaration-guard fixture so future local duplicates fail validation.
* fix: keep integer helpers on numeric facade
Remove the unshipped duplicate string-coerce exports and route every affected plugin consumer through the existing number-runtime contract.
* fix: point numeric coercion to number runtime
Make boundary and declaration diagnostics recommend the canonical numeric facade, with failing-before coverage for both guidance paths.
2026-08-11 17:14:53 -07:00
Peter Steinberger
42a4d0a9b8
fix(openai): surface failed realtime response outcomes ( #121177 )
...
* fix(talk): type realtime response outcomes
* fix(ci): align realtime outcome contracts
* test(ui): identify completed realtime responses
* chore(plugin-sdk): refresh realtime voice baselines
2026-08-11 14:14:22 -07:00
Peter Steinberger
8c567306ba
fix(openai): remove duplicate GPT-5.6 picker entry ( #122178 )
...
* fix(openai): remove duplicate GPT-5.6 picker entry
* test(gateway): split OpenAI model picker coverage
* test(openai): align canonical model fixtures
* chore(plugin-sdk): refresh agent harness API baseline
2026-08-11 12:29:36 -07:00
Peter Steinberger
79701dfc84
fix: speed up streamed assistant output ( #122206 )
...
* fix: speed up streamed assistant output
* fix: preserve plan stream invalidation
2026-08-11 12:01:14 -07:00
Patrick Erichsen
ad704f35c4
fix(control-ui): hide unusable models from picker ( #121852 )
...
* fix(ui): hide unusable models from picker
* refactor(ui): remove stale model availability helper
* refactor(ui): simplify catalog state guards
* style: format provider catalog imports
* chore: refresh plugin SDK API baseline
* refactor(core): break provider catalog type cycle
* chore(protocol): refresh models list Swift output
* chore: refresh plugin SDK API baseline after rebase
* fix(gateway): preserve full catalog preload semantics
* fix(ui): keep model status within startup budget
* fix(ui): preserve provider status within startup budget
* fix(models): scope live catalog outcomes
* test(ui): expect agent-scoped model refresh
* test(ui): align model refresh e2e fixtures
2026-08-11 09:13:44 -07:00
Peter Steinberger
46bdbe585f
fix(openai): restore Sol thinking levels ( #121865 )
...
Co-authored-by: Amp <amp@ampcode.com >
2026-08-11 00:28:21 -07:00
Peter Steinberger
fa03d9b913
refactor: consolidate coercion helpers ( #121366 )
...
* refactor: consolidate coercion helpers
* fix: remove duplicate coercion imports
* fix: preserve serialized coercion guard
* chore: ratchet coercion helper carve-outs
* fix(test): keep gauntlet subprocess startup lean
* fix: preserve imported session timestamp semantics
* fix: preserve catalog timestamp string semantics
* chore: align plugin SDK surface ratchet
* fix: preserve trajectory and SDK string contracts
* fix(test): preserve QA record assertion semantics
* fix: complete standalone record guard rename
* refactor(cron): use canonical string coercion
* fix(acpx): preserve Pi timestamp parsing
* test(channels): adapt custody test harnesses
* test(telegram): classify media harness as test support
* test(acpx): split timestamp contract coverage
* test(channels): support generated custody contracts
* chore: ban the full coercion helper name set
Extends the declaration guard to all eleven consolidated helper names and
renames the cron schedule-identity readNumber wrapper to readScheduleInteger
so the banned generic name cannot regrow.
* fix(scripts): repair release-validation guard drift and lint cause
Restores the renamed isJsonRecord guard in assertTrustedWorkflowHarness after
main added isRecord call sites in parallel, and attaches the caught YAML error
as the thrown error cause (preserve-caught-error was red on main).
* fix: preserve Claude timestamp string semantics
* fix: preserve persisted timestamp string semantics
* fix: preserve date-first timestamp contracts
* fix(openai): harden delegation failure formatting
* chore: close coercion helper guard gaps
* test(openai): model non-error delegation rejection
* chore: refresh plugin SDK API contract
* fix(tasks): use canonical string field reader
* fix(ai): use canonical provider error field coercion
* fix(browser): migrate native bootstrap coercion
* docs(plugin-sdk): clarify text record export compatibility
* fix(gateway): normalize approval execution identity
* test(outbound): isolate message action poll harness
2026-08-11 00:02:18 -07:00