Peter Steinberger
d9ffbb3ed6
fix(memory): report persisted vector index state on unprobed status path ( #120048 )
2026-08-06 15:57:49 -07:00
Onur Solmaz
1f10ef8050
fix(agents): recover once from critical tool loops ( #118647 )
...
* feat(agents): add bounded tool-loop recovery
* feat(agents): wire loop detection into batch recovery
* test(agents): cover bounded tool-loop recovery
* fix(agents): enforce loop thresholds within tool batches
* fix(agents): retain rejected loop batch evidence
* test(agents): update embedded session recovery fixture
* fix(agents): surface terminal loop recovery failures
* fix(agents): preserve loop recovery across retries
* fix(agents): isolate rejected loop evidence
* fix(agents): terminate native critical tool loops
* fix(agents): canonicalize tool loop actions
* fix(agents): preserve tool loop recovery guidance
* fix(agents): preserve code mode tool identity
* fix(agents): preserve prebatch loop evidence
* fix(agents): order native loop termination
* fix(agents): clean up rebased tool validation
* fix(agents): interrupt codex side turns on critical tool loops
* fix(agents): tighten loop recovery batch lifecycle
* fix(agents): drop unconsumed loop detector type export
* fix(agents): drop unconsumed loop relay exports
* test(agents): add agent subscribe to embedded session doubles
* fix(agents): scope critical loop recovery to embedded runs
2026-08-06 14:09:10 +08:00
大村愛弥
793f602f80
fix: remove bodyless 400/413 from overflow patterns to prevent false compaction ( #119596 )
...
* fix: remove bodyless 400/413 from overflow patterns to prevent false compaction
PR #67024 fixed the failover classification path (errors.ts) to not
classify bodyless 400/422 as 'format' errors. However, the compaction
trigger path (isContextOverflow in overflow.ts) still has the pattern
/^4(?:00|13)\s*(?:status code)?\s*\(no body\)/i in OVERFLOW_PATTERNS.
This means a bodyless 400 from any provider triggers compaction via
checkCompaction() -> isContextOverflow(), even though PR #67024
ensured the failover reason is null (not 'format'). The two paths are
independent: failover classification and compaction triggering use
separate functions.
A bodyless 400 cannot be a context overflow — real overflow errors
from all major providers include a descriptive body. A bare 400 with
no body is a transient/malformed error that should surface to the
user, not trigger a compaction loop.
Remove the Cerebras-specific pattern from OVERFLOW_PATTERNS. If
Cerebras returns bodyless 400/413 for actual overflow, it should be
handled with a more specific pattern or NON_OVERFLOW_PATTERNS exclusion.
AI-assisted.
* fix(ai): avoid compacting on bodyless 400 errors
---------
Co-authored-by: lykeion-dev <lykeion-dev@users.noreply.github.com >
Co-authored-by: Patrick Erichsen <patrick.a.erichsen@gmail.com >
2026-08-05 20:53:02 -07:00
Alix-007
2436a13d83
fix(memory): prevent remote errors from exposing credentials ( #119666 )
...
* fix(memory): redact credentials from remote errors
* fix(memory): redact full bearer token68 values
* fix(memory): redact bearer schemes case-insensitively
* fix(memory): redact short quoted bearer values
2026-08-05 20:40:18 -07:00
Peter Steinberger
ad80956428
fix(skills): keep installed verdicts scoped to publisher ( #119672 )
...
* fix(skills): preserve owner-qualified security verdicts
* fix(skills): keep verdict helper internal
* fix(skills): bound legacy verdict fallbacks
2026-08-05 14:57:56 -07:00
Peter Steinberger
d7a444b08a
refactor(agent-core): unify session projection and compaction summaries ( #119639 )
2026-08-05 07:49:12 -07:00
Xiaoshuai Zhang
72fd25d47d
fix(gateway): connect bootstrap clients to self-signed WSS ( #80204 )
...
* fix(gateway): propagate TLS pins to bootstrap clients
Co-authored-by: Xiaoshuai Zhang <dev@jetd.one >
Punchcard-Session: cobalt-brook-meadow-m9
* fix(gateway): keep TLS loader type private
Punchcard-Session: cobalt-brook-meadow-m9
* fix(gateway): preserve TLS pin transport policy
Punchcard-Session: cobalt-brook-meadow-m9
---------
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
Co-authored-by: Xiaoshuai Zhang <dev@jetd.one >
2026-08-05 13:19:27 +08:00
Josh Avant
618fba92bf
feat(audit): add execution identity inspection ( #117034 )
...
* feat(audit): add opt-in execution identity inspection
* fix(audit): gate recovery identity retention
* fix(audit): keep recovery identity type private
* test(audit): type internal recovery fixture
* test(audit): split recovery identity coverage
* docs(audit): define operator read trust boundary
* test(qa): register identity scenario child
* fix(audit): enforce shared identity retention bounds
* fix(audit): seal public ingress identity boundary
* fix(audit): keep ingress guard lint-clean
* fix(gateway): preserve advertised method order
* chore(protocol): sync advertised method order
* fix(protocol): encode audit selector invariants
* test(audit): prove exact execution guard
* fix(audit): keep identity storage lazy
2026-08-04 20:05:15 -05:00
Vincent Koc
a54bec799c
fix(agents): observe native provider prompt egress ( #119219 )
...
* fix(agents): observe final provider prompt egress
* fix(agents): observe native provider prompt egress
* test(agents): type native prompt observer models
2026-08-04 22:46:07 +08:00
Vincent Koc
6d88ec5248
fix(agents): recover from invalid compaction summaries ( #119137 )
2026-08-04 19:43:25 +08:00
Vincent Koc
1fb4f3c709
merge: sync llama.cpp transport fix with main
...
* 'main' of https://github.com/openclaw/openclaw :
test(qa): cover sandboxed exec behavior (#119053 )
test(qa): prove shared-channel memory recall (#119111 )
fix(telegram): keep request deadlines through response bodies
test(qa): cover gateway plugin approvals (#119128 )
fix(ai): keep OpenAI tool call id truncation UTF-16 safe (#110471 )
fix: preserve live updater failure diagnostics (#119096 )
fix: recover new-session models through Gateway startup (#119120 )
test(qa): cover instruction profile artifacts (#119078 )
fix(telegram): record automatic delivery message ids
test(qa): cover memory promotion safety (#119093 )
test(qa): prove overflow compaction pruning (#119033 )
fix(tool-search): preserve deferred MCP failures (#118363 )
fix(macos): keep setup activation within app checks
test(setup): type provider kind fixture
fix(setup): complete prepared model activation
fix(protocol): regenerate Swift wizard models
fix(ollama): activate the model selected during setup
fix(setup): preserve the prepared model handoff
2026-08-04 14:51:35 +08:00
Vincent Koc
6ce6dd3f21
merge: activate exact prepared local model
...
* commit '70d75c6fa3d022fb0de55640c4aca11baecd8175':
fix(macos): keep setup activation within app checks
test(setup): type provider kind fixture
fix(setup): complete prepared model activation
fix(protocol): regenerate Swift wizard models
fix(ollama): activate the model selected during setup
fix(setup): preserve the prepared model handoff
2026-08-04 14:40:48 +08:00
pick-cat
01e7fca716
fix(ai): keep OpenAI tool call id truncation UTF-16 safe ( #110471 )
2026-08-04 14:03:44 +08:00
Vincent Koc
9c854cb1a0
fix(ai): preserve Google simple completion sanitation
2026-08-04 13:58:58 +08:00
Vincent Koc
9501a8264b
fix(ai): prefer provider-owned completion streams
2026-08-04 11:11:55 +08:00
Vincent Koc
dea04651b9
fix(setup): preserve the prepared model handoff
2026-08-04 09:39:02 +08:00
Vincent Koc
e928762b9d
test(qa): close external app SDK proof gaps ( #118978 )
...
* test(qa): close external app SDK proof gaps
* test(qa): close external app SDK proof gaps
2026-08-04 09:00:22 +08:00
Peter Steinberger
c83dcc2bc0
fix(security): harden network tool output at canonical owner boundaries ( #118984 )
...
* fix(security): bound external tool content at its canonical owner boundary
* fix(plugin-sdk): document supported security boundary and restore facade parity
2026-08-03 15:34:33 -07:00
Vincent Koc
554a6f3bbf
feat(sms): add Twilio MMS support ( #118664 )
...
* feat(sms): add Twilio MMS support
* fix(sms): harden hosted media bearer handling
* fix(sms): discard staged media before dispatch
* fix(sms): close staged media cleanup races
* fix(sms): finalize MMS metadata and race proof
* fix(media): bind local reads to authorized descriptors
* fix(sms): close MMS review gaps
* fix(media): make inbound root matching type-safe
* fix(media): route bounded reads through fs-safe facade
* test(media): satisfy async lint contracts
2026-08-04 05:46:37 +08:00
zengLingbiao
780d6bf7b8
fix(ai): reject binary Codex websocket frames ( #111138 )
...
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-08-04 02:11:08 +08:00
Jesse Merhi
68be0e3378
feat: enable rich setup controls in custodian chat ( #114631 )
...
* feat(protocol): carry the awaited wizard step on the chat result
* fix(system-agent): strip sensitive wizard prefill from chat results
* fix(wizard): keep setup secrets server-side
* test(wizard): preserve prompt mock typing
* fix(ui): add reveal toggle to wizard secrets
* refactor(ui): adopt Carapace sensitive input
* fix(ui): hide revealed sensitive input mask
* test(twitch): cover environment-only setup
* feat(custodian): render rich wizard steps
* fix(custodian): validate wizard text replies
* feat(custodian): submit typed wizard answers
* refactor(gateway): isolate custodian chat turns
* fix(gateway): accept session engine adapter
* fix(ui): narrow wizard control values
* refactor: simplify rich wizard answer flow
* fix(custodian): recover evicted wizard sessions
* docs: note custodian rich setup controls
* test(gateway): split wizard answer coverage
2026-08-03 22:18:27 +10:00
Peter Steinberger
ecc49b5a87
refactor(tts): absorb speech core package ( #118513 )
...
* refactor(tts): absorb speech core package
* fix(tts): preserve runtime SDK exports
* refactor(tts): remove private package exports
* test(tts): align canonical runtime mocks
* test(tts): complete canonical settings mocks
* chore(plugin-sdk): regenerate API baseline for #118513
2026-08-03 02:25:48 -07:00
Peter Steinberger
0cad02313a
test(tool-call-repair): consolidate stream fixtures ( #118563 )
2026-08-03 00:50:11 -07:00
joshavant
d0439b9ce0
fix: distinguish dismissed task delivery
2026-08-03 02:48:34 -05:00
joshavant
6ca16f7f3d
fix: redrive retained text completions
2026-08-03 02:48:34 -05:00
joshavant
d9393bd3cb
fix: make subagent completion delivery durable
2026-08-03 02:48:34 -05:00
Peter Steinberger
1140e56a37
test(ai): deduplicate legacy function-call fixtures ( #118445 )
2026-08-02 21:24:46 -07:00
Peter Steinberger
88e588090f
refactor(gateway): compact validator registry imports ( #118379 )
2026-08-02 19:55:52 -07:00
Peter Steinberger
357087b9c7
refactor(gateway): lifecycle-owned ambient state via factory-registered drains ( #118271 )
...
* refactor(runtime): own ambient state lifecycle cleanup
* chore(plugin-sdk): refresh additive API baseline
* fix(runtime): restore agent wait listener lifecycle
Keep agent-job data process-shared while preserving module-local event subscription ownership. Ratchet the public wildcard budget down after replacing text-runtime's wildcard singleton export with named exports.
2026-08-02 18:06:46 -07:00
Peter Steinberger
c43ba8e3fc
fix(cli): speed up hook status reads through the Gateway ( #118288 )
...
* perf(cli): reuse gateway hook status (#118222 )
* chore(protocol): register hooks.status schema module in generated surfaces
2026-08-02 17:21:28 -07:00
Peter Steinberger
88d6a2c8d6
perf(gateway): reduce sessions.list read amplification under streaming load ( #118207 )
...
* perf(gateway): reduce sessions list read amplification
* test(gateway): stabilize title batch perf proof
* fix(gateway): satisfy sessions list CI contracts
* perf(gateway): reuse warm batch title fields
* fix(gateway): satisfy strict title cache types
* test(gateway): use transcript write scope in cache test
* fix(gateway): fence session list cache on active runs
* refactor(infra): extract agent run registry
* fix(infra): keep run-registry context types module-local
2026-08-02 16:08:07 -07:00
Peter Steinberger
30c79e4db1
fix(inference): prevent lost cancellation, stuck compaction, and runaway tools ( #118146 )
...
* fix(inference): preserve cancellations, compaction, and tool-loop safety
* fix(inference): satisfy Codex and mock-provider type checks
* fix(codex): secure tool-free recovery and restricted turns
* fix(codex): satisfy host-prompt provenance lint
2026-08-02 14:42:01 -07:00
Peter Steinberger
3f3ceb2def
feat(gateway): track event-loop degradation persistence and add concurrency benchmark ( #118193 )
...
* feat(gateway): persist event loop degradation metrics
* fix(gateway): bound concurrency benchmark turn waits
2026-08-02 14:21:44 -07:00
Peter Steinberger
70876c9790
perf(gateway): remove streaming hot-path rescans ( #118192 )
2026-08-02 14:07:24 -07:00
Peter Steinberger
b695c6589a
test(memory): consolidate host process fixtures ( #118160 )
2026-08-02 13:19:01 -07:00
Peter Steinberger
08d0952df2
feat(cron): auto-disable repeatedly failing recurring jobs ( #118113 )
...
Refs #118089
Release note: recurring automations now auto-disable after 10 consecutive run failures, record the reason, and notify their owning agent.
2026-08-02 11:51:17 -07:00
Peter Steinberger
fb380b2e87
test(ai): consolidate provider fixtures ( #118078 )
2026-08-02 11:08:52 -07:00
ruel225
f2b3d1588f
fix(workboard): diagnose archived cards still in an active status ( #116359 ) ( #117290 )
...
* fix(workboard): diagnose archived cards still in an active status
An archived card with an active status (ready/running/blocked/etc.) was
silently excluded from dispatch with no signal on any surface —
workboard show rendered it normally, dispatch returned count:0 with empty
startFailures, and computeCardDiagnostics returned [] for archived cards.
Operators could only find it by reading the database directly.
Add an archived_but_active diagnostic kind to WORKBOARD_DIAGNOSTIC_KINDS
and an unarchive action. In computeCardDiagnostics, when a card has
archivedAt set but status is not done, emit the warning so workboard show
and store.diagnostics report it. Done+archived cards stay silent (no
diagnostic) as before. The diagnostic is transient — refreshDiagnostics
still skips archived cards, so their stored metadata is not rewritten.
Fixes #116359
Co-Authored-By: Claude <noreply@anthropic.com >
* fix(workboard): expose archived active cards
* ci: re-trigger after sqlite flip-proof e2e flake
Unrelated to workboard diagnostic changes; sqlite session/transcript
flip-proof e2e failed with array mismatch on an untouched path.
Co-Authored-By: Claude <noreply@anthropic.com >
---------
Co-authored-by: ruel225 <ruel225@users.noreply.github.com >
Co-authored-by: Claude <noreply@anthropic.com >
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-08-02 07:30:52 -07:00
Simone
3f9b4519a9
fix: prevent fractional chunk limits from stalling text splitting ( #117727 )
...
* fix: normalize fractional text chunk limits
* fix: normalize markdown chunk limits
* fix: normalize direct newline chunk limits
* fix(matrix): reuse progress-safe text chunker
* test(matrix): align runtime API guard
* test(matrix): keep outbound shard topology stable
* fix(matrix): preserve facade chunk compatibility
* test(matrix): keep runtime export guard stable
* fix(matrix): normalize render-aware chunk limits
* test(matrix): type real-send assertions
* fix(matrix): preserve one-unit event limits
---------
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com >
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-08-02 04:53:31 -05:00
Peter Steinberger
a5b8b7052b
fix(ui): preserve advanced cron delivery settings when cloning ( #117909 )
...
* refactor(ui): consolidate task and log contracts
* fix(cron): preserve advanced delivery routing
* refactor(ui): share relative-time bucketing
* fix(ui): retain narrow cron view types
* fix(ui): keep cron form field keys total
* style(ui): use narrowed task result boolean
2026-08-02 02:13:38 -07:00
Sebastien Tardif
b300a0cfb3
fix(agents): cap DeepSeek DSML recovery buffer at 256 KB ( #117175 )
...
Co-authored-by: Sebastien Tardif <1413412+SebTardif@users.noreply.github.com >
2026-08-02 15:12:38 +08:00
Peter Steinberger
60f2c6faf9
test(protocol): consolidate validation fixtures ( #117873 )
2026-08-01 23:42:09 -07:00
Peter Steinberger
33ea3e16e9
refactor: consolidate core micro-helpers ( #117825 )
...
* refactor: centralize stable stringification
* refactor: reuse canonical record coercion
* refactor: reuse safe JSON parsing in cron storage
* refactor: centralize environment truthiness
* fix: enforce model scan and block reply timeouts
* refactor: consolidate signal-aware sleep helper
* fix: preserve plugin SDK sleep contract
* test: satisfy model scan timeout lint
2026-08-01 23:10:46 -07:00
Peter Steinberger
0ab2443692
fix(ui): eliminate core contract drift ( #117817 )
...
* fix(ui): eliminate core contract drift
* fix(ui): resolve cleanup contract checks
2026-08-01 22:10:22 -07:00
Peter Steinberger
e98fdeefdf
refactor(errors): consolidate message formatting ( #117818 )
2026-08-01 22:05:49 -07:00
Peter Steinberger
d669e9eddd
refactor(tui): centralize gateway chat history limits ( #117773 )
...
Co-authored-by: Peter Steinberger <steipete@macos.shared >
2026-08-01 20:34:49 -07:00
Peter Steinberger
7d1d721d62
fix(memory): qualify stale memory search results ( #117706 )
...
* fix(memory): qualify stale search results
* fix(memory): satisfy staleness checks
* fix(memory): normalize absent staleness
2026-08-01 17:40:14 -07:00
Peter Steinberger
5c2f935fc9
test(sdk): deduplicate client and event fixtures ( #117692 )
2026-08-01 16:48:50 -07:00
Omar Shahine
2b3009f718
fix(gateway): preserve node invoke dispatch provenance ( #117139 )
...
* fix(gateway): preserve node invoke dispatch provenance
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com >
Copilot-Session: 6381c461-11aa-4700-8648-4da1393e1c59
* fix(gateway): preserve timeout precedence
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com >
Copilot-Session: 6381c461-11aa-4700-8648-4da1393e1c59
* fix(gateway): mark wake-path disconnect as not dispatched
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com >
Copilot-Session: 6381c461-11aa-4700-8648-4da1393e1c59
* fix(gateway): mark plugin dispatch after send
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com >
Copilot-Session: 6381c461-11aa-4700-8648-4da1393e1c59
* build(browser): regenerate Copilot runtime
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com >
Copilot-Session: 6381c461-11aa-4700-8648-4da1393e1c59
---------
Co-authored-by: Omar Shahine <10343873+omarshahine@users.noreply.github.com >
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com >
Copilot-Session: 6381c461-11aa-4700-8648-4da1393e1c59
2026-08-01 21:22:51 +00:00
Omar Shahine
a624ba7b96
feat(gateway): advertise chat attachment limits on hello-ok ( #116188 )
...
* feat(gateway): advertise chat attachment limits on hello-ok
Clients had no way to learn the gateway attachment ceilings, so external
clients hardcoded guesses that drifted from server enforcement. Publish the
two unconditional decoded-size ceilings on hello-ok policy.attachments from
one shared resolver so advertised values cannot drift from the parser.
MIME acceptance and per-message counts stay server-side: they depend on the
entrypoint, the resolved model, and payload sniffing, so they cannot be stated
once per connection.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com >
Copilot-Session: 17d6c355-8948-4b48-a936-e08b1c8806ef
* feat(gateway): advertise chat attachment limits on hello-ok
---------
Co-authored-by: Omar Shahine <10343873+omarshahine@users.noreply.github.com >
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com >
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Copilot-Session: 17d6c355-8948-4b48-a936-e08b1c8806ef
2026-08-01 11:31:29 -07:00