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
Vincent Koc
263741b1f0
fix(ci): align release validation fixtures ( #117494 )
...
* fix(release): align beta 6 e2e fixtures
* fix(doctor): preserve missing state startup signal
* test(release): align beta e2e contracts
* test(agents): use canonical empty auth store
* test(agents): isolate prompt cooldown scheduling
* test(release): align main validation fixtures
* test(release): accept Code Mode plugin tool evidence
* fix(test): repair release validation checks
* test(cron): assert structured session targets
2026-08-02 00:39:36 +08:00
Vincent Koc
1130f30445
fix(diagnostics): report provider HTTP status in timelines ( #117403 )
...
* fix(diagnostics): record provider response status
* fix(diagnostics): report managed Responses status
2026-08-01 23:36:20 +08:00
zengLingbiao
a172857acc
fix(memory-host-sdk): decode JSON response bodies with fatal UTF-8 validation ( #111279 )
2026-08-01 07:08:04 -07:00
Peter Steinberger
597699401a
refactor(memory): use sqlite transcript identities ( #117334 )
2026-08-01 04:38:40 -07:00
Yiğit ERDOĞAN
afe024e8c7
fix(ai): assistant text blocks are run together on replay ( #115743 )
...
Chat Completions replay flattened every assistant text block with an empty
separator, so two distinct blocks came back as one word-joined sentence. The
same message shape survives distinctly on the Anthropic, Responses and Mistral
lanes, and the string-content flattener for strict OpenAI-compatible servers
already joins with a newline.
Two blocks arise routinely: streaming opens a new text block after a tool call,
and cross-model replay converts a thinking block into a text block.
2026-08-01 02:23:08 -07:00
Peter Steinberger
b721cffa44
fix(inference): simplify lifecycle and preserve Codex tool identity ( #117298 )
2026-08-01 02:05:45 -07:00
Vincent Koc
05b46b48a0
merge: refresh talk lifecycle on main
...
* origin/main: (41 commits)
test(ci): update memory helper routing expectation (#117295 )
fix(canvas): emit successful control results in JSON mode (#117297 )
fix(imessage): settle native inbound reply delivery (#117282 )
fix(agents): reject invalid UTF-8 LSP responses (#117271 )
fix(line): centralize card and template message alt text (#117280 )
fix(release): validate candidates before Docker publication (#117252 )
fix(media): validate provider-owned generated media downloads (#117281 )
fix(feishu): restore custom HTTPS API domains (#117278 )
fix(models): reuse prepared plugin metadata (#117131 )
fix(agents): stop fallback after delivered-but-failed attempts (#114628 )
fix(memory): reuse targeted session corpus snapshot (#117247 )
fix(matrix): reconcile durable sends after response loss
test(release): repair full validation regressions (#116931 )
fix(linux-canvas): report socket watcher fallback (#109502 )
fix(codex): preserve authoritative turn completion (#117185 )
fix(canvas): preserve widgets across derived-name collisions (#117132 )
fix(channels): config validation rejects documented channels.<id>.configWrites on 13 channels (#117206 )
fix(msteams): prevent duplicate final replies (#116398 )
fix(doctor): session SQLite restore installs an empty session index over the valid archive (#117221 )
fix(plugins): preserve workspace plugins across CLI and control UI (#117265 )
...
2026-08-01 16:43:54 +08:00
Harjoth Khara
b97a214604
fix(canvas): preserve widgets across derived-name collisions ( #117132 )
...
Fixes #116945
2026-08-01 15:33:56 +08:00
Vincent Koc
8fdcdaba76
fix(talk): bound browser transcript ownership
2026-08-01 14:39:27 +08:00
Peter Steinberger
1f9ee89f25
fix(google): preserve canonical replay and provider error ownership ( #117193 )
...
* fix(google): preserve provider signatures and failure outcomes
* fix(google): satisfy SDK stream event and optional text types
* fix(google): preserve signed empty SDK response parts
---------
Co-authored-by: Peter Steinberger <steipete@macos.shared >
2026-07-31 22:52:45 -07:00
RileyJJY
c7917cca36
fix(google-vertex): ignore blank project env ( #109515 )
2026-07-31 22:03:40 -07:00
Peter Steinberger
618f3298c7
fix(memory): reject malformed direct and batch embedding vectors ( #117200 )
...
Co-authored-by: Peter Steinberger <steipete@macos.shared >
2026-07-31 21:38:31 -07:00
Peter Steinberger
cb16d739cf
fix(inference): harden Codex streaming, cancellation, and live QA ( #116012 )
...
* fix(inference): harden Codex turns, streams, and live QA
* fix(inference): dispatch open CR-delimited response frames
* fix(inference): finish live goal and split streaming regressions
* fix(codex): wait for interrupted turn completion
* fix(codex): narrow terminal collector notification ownership
* fix(inference): harden completion authority and lifecycle
* fix(inference): use canonical source delivery contract
* test(inference): align lifecycle probes with current main
* style(inference): format source delivery verification
* fix(goals): prevent premature completion across staged work
* fix(qa): settle streamed goal turns before continuation
* fix(goals): require visible replies after goal completion
* test(qa): keep goal flow regressions within lint limits
2026-07-31 21:29:33 -07:00
Paco Cartones
cb3cd94756
fix(net-policy): redact sig and x-* auth params in URLs and bodies ( #116957 )
...
* fix(redact): redact sig and x-* auth params (redact-sensitive-url.ts)
* test(redact): redact sig and x-* auth params (redact-sensitive-url.test.ts)
* fix(redact): redact sig and x-* auth params (redact.ts)
* test(redact): redact sig and x-* auth params (redact.test.ts)
* fix(logging): unify URL credential redaction
---------
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-08-01 10:04:13 +08:00
Yiğit ERDOĞAN
ec5fb470c2
fix(ai): Codex stream shows internal parser text on a malformed frame ( #116966 )
...
* fix(ai): Codex stream shows internal parser text on a malformed frame
The Codex SSE parse boundary rethrew JSON.parse failures with its own
message, so the three consumers that key off the shared malformed-fragment
marker by exact string equality could not recognise it and the internal
parser wording reached the operator verbatim.
Mirror the canonical transport contract instead: a SyntaxError becomes the
shared marker with the original error kept as cause, and anything else is
rethrown untouched. The WebSocket twin is left alone because two open PRs
own that block today.
* fix(ai): preserve consumer SSE errors
---------
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-08-01 09:34:09 +08:00
Peter Steinberger
95e50d3a7f
fix(terminal): measure unicode display width consistently ( #117062 )
...
Co-authored-by: Peter Steinberger <steipete@macos.shared >
2026-07-31 18:25:15 -07:00
Peter Steinberger
d8ba00f8a2
fix(openai): clear ChatGPT SSE fallback per session ( #117123 )
...
* fix(openai): clear ChatGPT SSE fallback per session
* test(openai): prove ChatGPT fallback cleanup
* docs(openai): clarify fallback cleanup ownership
2026-07-31 18:24:46 -07:00
Peter Steinberger
f8aa383698
fix(mistral): reject incomplete streamed tool terminals ( #117137 )
...
Co-authored-by: Peter Steinberger <steipete@macos.shared >
2026-07-31 18:22:35 -07:00
Peter Steinberger
a7e0ebe8e6
fix(ai): preserve structured chat content and refusals ( #117136 )
...
Co-authored-by: Peter Steinberger <steipete@macos.shared >
2026-07-31 18:20:23 -07:00
Vincent Koc
a1c689e375
fix(outbound): preserve fenced tool call examples ( #117089 )
2026-08-01 08:13:05 +08:00
Peter Steinberger
e4d6e5603d
refactor(ai): unify Anthropic streaming policy and usage accounting ( #117086 )
...
* refactor(ai): unify Anthropic streaming policy and usage accounting
* fix(ai): align shared cache TTL types with Anthropic SDK
2026-07-31 16:28:53 -07:00