Vincent Koc
d60584ee2d
test(google): cover ready callback close precedence
2026-08-02 01:25:41 +08:00
Vincent Koc
814a2ebb61
fix(google): flush lazy prompts on provider readiness
2026-08-02 01:22:33 +08:00
Vincent Koc
3a8afb2a71
Merge origin/main into fix/google-realtime-lazy-queue-bounds-20260801
...
* origin/main: (44 commits)
fix(plugins): compare authoring metadata by canonical JSON semantics (#117486 )
fix(doctor): reject contradictory lint check selectors (#117495 )
fix(anthropic): honor configured model pricing (#117275 )
refactor(plugins): reuse scoped loader for capability discovery (#117373 )
refactor(test): derive changed tooling routes (#117407 )
fix(kova): clarify extension memory attribution (#117500 )
fix(imessage): sanitize private context on every outbound path (#117501 )
fix(ci): align release validation fixtures (#117494 )
fix(talk): preserve owner authorization in realtime consults (#114163 )
fix(ui): surface aborted-run diagnostics (#117497 )
perf(models): skip Ollama row runtime loading (#117465 )
fix(cli): report user profile command outcomes (#117466 )
fix(active-memory): detect Chinese recall intent in escalate mode (#117338 ) (#117419 )
fix(workboard): ignore caller-supplied archivedAt when creating a card (#116412 )
fix(models): avoid waiting on promotions before listing models (#117322 )
refactor(plugins): inherit shared package boundary settings (#117474 )
fix(systemd): parse all inline environment assignments (#117484 )
feat(web-fetch): add tools.web.fetch.headers for operator request headers (#115545 )
fix(qa): Slack progress lane misses successful delivery (#117391 )
refactor: deduplicate Codex prompt snapshot fixtures (#117476 )
...
2026-08-02 01:02:06 +08:00
Vincent Koc
877843422e
fix(google): avoid dropping first realtime voice input ( #117450 )
...
* commit '2ccb11ac28daea1939e6666c1a0a3d346159d9fe':
test(google): satisfy realtime live lint
test(google): wait for realtime response drain
test(google): diagnose realtime live readiness
test(google): prove realtime ready owns live session
test(google): cover realtime setup activation ordering
fix(google): gate realtime readiness on session ownership
2026-08-02 00:59:02 +08:00
Vincent Koc
9cb647e735
test(google): prove lazy realtime prompt delivery
2026-08-02 00:15:41 +08:00
Peter Steinberger
568ea29d2e
refactor(plugins): inherit shared package boundary settings ( #117474 )
2026-08-01 09:11:09 -07:00
Jesse Merhi
d3f4530ce8
feat(google): allow operator headers on Gemini web search ( #115549 )
...
* feat(google): support Gemini web search headers
* fix(google): validate Gemini search headers
* docs(changelog): credit Gemini headers
* test(secrets): route config contracts through collector
* chore: remove release-owned changelog entry
* test(google): cover resolved search headers
2026-08-02 01:41:09 +10:00
Vincent Koc
85d959ee61
test(google): satisfy realtime live lint
2026-08-01 22:58:29 +08:00
Vincent Koc
b1a0ee8539
test(google): wait for realtime response drain
2026-08-01 22:51:35 +08:00
Vincent Koc
b2320c84ee
fix(google): bound lazy realtime user messages
2026-08-01 22:47:12 +08:00
Vincent Koc
6f3f662a86
test(google): diagnose realtime live readiness
2026-08-01 22:46:14 +08:00
Vincent Koc
11d53bebfe
test(google): prove realtime ready owns live session
2026-08-01 22:36:06 +08:00
Vincent Koc
9ba8ffad5d
test(google): cover realtime setup activation ordering
2026-08-01 22:33:02 +08:00
Vincent Koc
ee61f725f1
fix(google): gate realtime readiness on session ownership
2026-08-01 22:33:02 +08:00
Vincent Koc
fcc20d14a3
fix(google): stop scraping Gemini CLI OAuth credentials ( #117167 )
...
* fix(google): delegate Gemini OAuth refresh to the CLI
* refactor(google): remove retired Gemini OAuth stack
* chore(ci): prune retired Google OAuth baseline
* fix(google): retire Gemini CLI usage telemetry
* fix(google): remove retired usage token parser
2026-08-01 11:36:24 +08:00
Vincent Koc
541593dcb4
merge: refresh google live transcript bound onto main
...
* commit '7e78de747b8a64d52f30aee948b697bf4c528691': (359 commits)
refactor(ui): replace duplicated locale bundles with canonical translation memory (#117157 )
fix(ui): retire stale Gateway event-log observers (#117169 )
fix(agents): keep subagent status consistent after restart and large fan-outs (#117141 )
refactor(ui): unify filtered session list ownership (#117158 )
refactor(agents): consolidate context budgets and compaction recovery (#117149 )
fix(net-policy): redact sig and x-* auth params in URLs and bodies (#116957 )
refactor(agents): remove duplicate generated-media delivery fallbacks (#117150 )
refactor(reply): unify turn lifecycle state ownership (#117145 )
fix(ui): preserve emoji agent avatar initials (#104912 )
refactor(auto-reply): unify command and directive ownership (#117143 )
refactor(plugins): consolidate descriptor and startup ownership (#117146 )
fix(messages): reply actions leak citation markers and reply/poll answers draw the no-reply fallback (#116909 )
fix(slack): let durable ingress retry transient thread lookups (#117135 )
refactor(doctor): consolidate shipped state migration ownership (#117142 )
fix(ai): Codex stream shows internal parser text on a malformed frame (#116966 )
fix: guard every migrated session accessor path (#117140 )
fix(terminal): measure unicode display width consistently (#117062 )
fix(openai): clear ChatGPT SSE fallback per session (#117123 )
fix(mistral): reject incomplete streamed tool terminals (#117137 )
fix(ai): preserve structured chat content and refusals (#117136 )
...
2026-08-01 10:45:53 +08:00
Peter Steinberger
3cadc08593
fix(google): restore canonical Gemini and Vertex provider invariants ( #117042 )
...
Co-authored-by: Peter Steinberger <steipete@macos.shared >
2026-07-31 14:31:34 -07:00
Peter Steinberger
d2047364a8
fix(google): preserve streamed termination and usage facts ( #116822 )
...
Co-authored-by: Peter Steinberger <steipete@macos.shared >
2026-07-31 05:29:40 -07:00
Vincent Koc
c163f5272a
merge: refresh google live transcript bound onto main
...
* origin/main: (52 commits)
fix(setup): isolate failed channel probes and report doctor diagnostics (#116824 )
fix(telegram): preserve edit previews, message cache, and group history (#116818 )
fix(whatsapp): preserve interactive replies and normalize media MIME (#116816 )
fix(file-transfer): keep fetched media attachable in sandboxed replies (#116400 )
fix(browser): preserve doctor JSON failure status (#116811 )
fix(ollama): stream native tool call lifecycle (#116809 )
fix(matrix): preserve message-tool room thread routing (#116802 )
fix(ui): restore mobile navigation and accessible usage filters (#116751 )
fix(ui): coalesce profile identity refresh (#116764 )
fix(ui): preserve chat attachments and run ownership (#116752 )
fix(plugins): clean up partial service startup once (#116804 )
fix(qa-channel): enforce message and thread lifecycle ownership (#116801 )
fix(qa-lab): support groups and isolate thread timelines (#116803 )
feat(plugins): externalize Voyage embeddings (#116785 )
fix(outbound): strip echoed inbound metadata before delivery (#50520 )
fix(anthropic-vertex): correct multi-region endpoints (#116757 )
fix(ui): scope agent cron jobs and surface model catalog failures (#116771 )
fix(ui): preserve scoped session state across updates (#116772 )
fix(build): fail closed on symlinked build output roots (#116705 )
fix(commands): validate native settings and preserve Telegram ingress outcomes (#116773 )
...
2026-07-31 20:20:01 +08:00
Peter Steinberger
0d40cfbb53
fix(google): surface blocked Gemini prompts ( #116756 )
...
Co-authored-by: Peter Steinberger <steipete@macos.shared >
2026-07-31 04:29:06 -07:00
Vincent Koc
74918607d1
test(google): cover live transcript overflow
2026-07-31 18:20:45 +08:00
Vincent Koc
4f65b7e8fe
fix(google): bound live transcript accumulation
2026-07-31 18:20:45 +08:00
Vincent Koc
0ce230c861
test(google): cover expired CLI OAuth compatibility
2026-07-31 16:40:38 +08:00
Vincent Koc
091bc7f9ed
Merge remote-tracking branch 'origin/main' into experiment/google-cli-supported-paths
...
* origin/main: (115 commits)
test: type session request parameters (#116713 )
fix: retain event invalidation for pagination
docs: note queued session refresh fix
fix: preserve queued session refresh options
fix(exec): require approval for abbreviated inline eval flags [AI] (#116529 )
fix: keep owner-only tools out of non-owner skill commands [AI] (#116532 )
fix(tui): require a fresh agent roster (#116715 )
fix(memory-wiki): preserve user edits when rolling back ChatGPT imports (#116517 )
fix(agents): cron failures preserve timeout and cancellation reasons (#116566 )
fix(release): unblock beta validation workflows (#116708 )
fix(ci): discover frozen target startup benchmark cases (#116711 )
fix(session): preserve reset message payloads (#116195 )
fix(qa): tolerate loaded-runner bus delivery stalls (#116448 )
improve(ci): rebalance embedded agent test configs (#116436 )
fix(browser): return committed trace path (#116702 )
fix(qa): exceed Slack table aggregate limit in fallback probe (#116447 )
fix(qa): use built plugin tools server (#116442 )
fix(test): keep memory FD repro config valid (#116698 )
fix(telegram): keep queued tool progress in one message (#116685 )
fix(qa): stop waiting on yielded fanout runs (#116440 )
...
# Conflicts:
# src/system-agent/setup-inference-detect.ts
# ui/src/e2e/model-setup.e2e.test.ts
2026-07-31 16:40:33 +08:00
Vincent Koc
326a4831cc
test(google): cover realtime connection ownership
2026-07-31 11:47:59 +08:00
Vincent Koc
cc62f37d6e
fix(google): own realtime connection attempts
2026-07-31 11:47:59 +08:00
Vincent Koc
9e965073e5
Merge remote-tracking branch 'origin/main' into experiment/google-cli-supported-paths
...
* origin/main: (168 commits)
fix(plugins): keep registry sqlite root consistent (#116427 )
fix(cli): keep Gateway auth failures parseable in JSON (#116597 )
fix(trajectory): preserve prompts in oversized events (#116220 )
test(buzz): add live QA Lab channel lane (#116298 )
chore(i18n): refresh native locales (#116567 )
feat: add OpenClaw TUI prototype skill (#116583 )
fix(update): accept concrete versions selected by ranges (#116585 )
fix(agents): preserve locked session model routes
test(qa-lab): preserve Matrix fault proxy identity
fix(ci): extend OpenAI live profile setup budget (#116580 )
fix: prevent configured models from stalling startup (#116553 )
fix(cli): close MCP listener after one-shot commands
fix(auto-reply): keep explicit NO_REPLY silent (#116548 )
test(discord): cover deferred backpressure terminals
fix(discord): cancel backpressured realtime playback
test(discord): cover realtime output backpressure
fix(codex): add remote WebSocket heartbeat and reconnect (#116135 )
fix(macos): wait for the current reconnect snapshot (#116550 )
fix(outbound): recognize current-source message-tool sends (#116560 )
fix(voice-call): type cancelled consult outcomes
...
# Conflicts:
# extensions/google/setup-api.test.ts
# ui/src/e2e/model-setup.e2e.test.ts
2026-07-31 09:30:03 +08:00
Josh Avant
ce67ffb70e
feat(agents): add tool-free isolated completion ( #114343 )
...
* feat: add isolated pure-inference completion
* fix(google): block ambient system prompt writes
* docs: refresh generated map
2026-07-30 13:24:45 -05:00
Vincent Koc
c7d1205d51
fix(google): guide broken CLI profiles to supported auth
2026-07-30 22:40:20 +08:00
Vincent Koc
c568f93b03
fix(google): retire Gemini CLI OAuth setup
2026-07-30 16:33:33 +08:00
Vincent Koc
0370fce7ff
fix(test): isolate Google embedding batch timeout ( #116161 )
2026-07-30 10:11:29 +08:00
Peter Steinberger
5bfc65d7f4
refactor: remove 3,543 lines of redundant runtime and tests ( #115961 )
...
* refactor: remove 3,543 lines of redundant runtime and tests
* refactor: ratchet production environment variable budget
2026-07-29 11:43:41 -04:00
Monkey-wusky
79e0b559fe
fix(google): cancel unread response body on video download error ( #110045 )
...
* fix(google): cancel unread response body on video download error
* fix(google): safely cancel failed streaming video downloads
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-29 09:00:04 -04:00
Peter Steinberger
4232126bba
chore: update dependencies across workspace ( #115677 )
...
* chore(deps): update dependencies
* fix(deps): restore CI compatibility
2026-07-29 05:16:42 -04:00
Peter Steinberger
ddd0b48673
refactor: remove 3,527 lines of runtime and test duplication ( #115626 )
...
* refactor: remove obsolete runtime and test duplication
* test: preserve typed cron and realtime fixtures
2026-07-29 02:21:20 -04:00
Vito Cappello
33dae97b81
fix(agents): restore subagent completion delivery on CLI runtimes ( #115422 )
...
* fix(agents): deliver tool-free CLI completions
* fix(agents): enforce empty Gemini CLI tool caps
* refactor(agents): remove ineffective Gemini admin settings
* fix(agents): block inherited Gemini MCP servers
* fix(agents): enforce Gemini MCP cap via argv
---------
Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com >
Co-authored-by: Patrick Erichsen <patrick.a.erichsen@gmail.com >
2026-07-28 21:07:02 -05:00
Peter Steinberger
d5907ca619
fix(google): keep static compat flags on discovered Gemini id variants ( #114831 )
2026-07-27 21:13:44 -04:00
Peter Steinberger
b5bb29a36e
fix(code-mode): preserve direct tools and secure suspended runs ( #114778 )
...
Preserve trusted policy-required message delivery and native image/computer tools across Code Mode catalogs and provider transports. Keep preferred Gemini capability metadata during live discovery, escape MCP declaration keywords, and reject suspended-run resumes with missing owner identity. Add before-and-after regressions for each user path. Closes #114753 .
2026-07-27 18:47:33 -04:00
Peter Steinberger
7394262cd1
feat: per-model code-mode capability flags with an "auto" master-switch tier ( #114695 )
...
* feat(tools): per-model code-mode capability flags and auto master-switch tier
* feat(anthropic): flag claude-sonnet-4-6 as code-mode preferred
* revert(anthropic): drop claude-sonnet-4-6 from the code-mode preferred set
* test(anthropic): type the manifest compat field in the catalog contract test
* fix(anthropic): carry catalog compat onto hand-built forward-compat model rows
2026-07-27 16:47:41 -04:00
Peter Steinberger
17ed69e103
fix(agents): preserve prompt caches across tool discovery ( #114572 )
2026-07-27 09:58:19 -04:00
Peter Steinberger
91b1f9676f
fix(media): reject malformed provider binary payloads ( #114514 )
2026-07-27 06:39:47 -04:00
zengLingbiao
a8e52b49a0
fix(google): reject malformed base64 audio in Gemini TTS responses ( #114041 )
...
* fix(google): reject malformed base64 audio in Gemini TTS responses
* fix(media): validate provider audio payloads
Co-authored-by: zengLingbiao <zeng.lingbiao@xydigit.com >
* fix(xai): terminate malformed realtime audio
Co-authored-by: zengLingbiao <zeng.lingbiao@xydigit.com >
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-27 04:17:35 -04:00
Peter Steinberger
8e4b6623e5
test(providers): consolidate streaming and model contract cases ( #114336 )
2026-07-27 01:36:32 -04:00
Peter Steinberger
caa01f4f5b
refactor(providers): table-driven forward compat and manifest-derived contract tests ( #113940 )
...
* refactor(providers): share family forward compat resolution
* test(providers): derive runtime contracts from manifests
* test(providers): validate manifest fixture inputs
* refactor(zai): narrow forward compat inputs
2026-07-25 18:09:37 -07:00
Masato Hoshino
bdcc5d54a5
fix(agents): honor run abort signal in image and pdf tools ( #112644 )
...
* fix(agents): honor run abort signal in image and pdf tools
The image and pdf agent tools declared `execute: async (_toolCallId, args)`
and dropped the run abort signal that `wrapToolWithAbortSignal` supplies as
the third execute argument. The wrapper only races the execute promise, so an
aborted run kept sequentially downloading images/PDFs (up to the per-tool cap,
each up to the byte cap) and still issued a paid vision/PDF-model call for a
dead run.
Thread the signal into the existing `requestInit: { signal }` seam (which the
media fetch layer already merges into the download fetch) and add
`signal.throwIfAborted()` between sequential loop items and before the paid
model call. No new media-options signal field; non-abort behavior is unchanged.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
* fix(agents): keep the pdf test suite under the lint ceiling; guard model dispatch
Follow-up on the abort-signal change, resolving the check-lint failure and a
review finding on the same seam.
max-lines
---------
Adding the two pdf abort tests pushed src/agents/tools/pdf-tool.test.ts to 1018
effective lines against a ceiling of 1000, failing check-lint. Resolved without
touching config/max-lines-baseline.txt — a suppression there would also have
tripped the max-lines ratchet.
- The new tests declared their own `describe` with `beforeEach`/`afterEach`
hooks identical to the existing `describe("createPdfTool")`. They exercise
that same tool, so they now live in it and the duplicated scaffolding is gone.
- `stubPdfToolInfra`, `createPdfModelRegistry` and `FAKE_PDF_MEDIA` moved to
pdf-tool.test-support.ts, which already exists for exactly this. They go
through `createPdfToolInfraStub(completeMock)` rather than being exported
directly, because the stub wires the suite's own `complete` mock into the
model registry and vi.mock handles are file-scoped. All 21 existing call
sites are unchanged.
Abort propagation into model dispatch
-------------------------------------
The previous revision stopped cancellation at download boundaries and before
the first model call, but `runImagePrompt`/`runPdfPrompt` never saw the signal.
A run cancelled while the first provider request was in flight could still
issue the remaining ones — the image path dispatches `describeImage` once per
image in a sequential loop, so a dead run kept paying for every later image.
Both now take an optional `signal` and check it immediately before each
provider dispatch (3 sites in image-tool, 4 in pdf-tool).
Forwarding the signal further, into the provider transports themselves, is a
different seam and is deliberately left out of this PR.
Also declares `requestInit` on `ImageToolLoadWebMediaOptions`. The local facade
omitted it while the underlying loader accepts it (web-media.ts declares it and
forwards it to readRemoteMediaBuffer), so the option worked at runtime and only
compiled because spread properties skip excess-property checking. A non-spread
call site would not have.
tsgo core + core-test, oxlint, oxfmt clean; pdf-tool and image-tool suites 266
tests pass.
* test(agents): prove in-flight media aborts
* test(agents): narrow PDF loader options
* test(agents): reject abort mocks with errors
* fix(agents): propagate media cancellation
* test(agents): type PDF abort fixture
* test(agents): type prepared runtime snapshot
* fix(agents): normalize abort rejection errors
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-25 05:17:09 -07:00
Peter Steinberger
b0603cb443
refactor(fs): adopt shared safe filesystem primitives ( #113596 )
...
* refactor(fs): adopt fs-safe helpers
* fix(zalouser): keep stable per-profile QR temp path
* fix(fs): route adoption through owned facades
2026-07-25 03:24:19 -07:00
Vincent Koc
749dbcb2a7
refactor(media): consolidate generated media byte limits ( #113556 )
2026-07-25 15:39:49 +08:00
joshavant
a325467557
fix(cron): preserve scheduled caps across CLI and worker upgrades
2026-07-24 01:24:03 -05:00
joshavant
8287e21445
fix(cron): enforce caps across CLI backends
2026-07-24 01:24:03 -05:00
Peter Steinberger
acd92f6a3d
chore(deps): refresh repository dependencies ( #112453 )
...
* build(deps): update QA broker dependency
* build(deps): refresh repository dependencies
* build(deps): reconcile rebased shrinkwraps
* test(plugins): remove stale loader test state
* test(deps): stabilize updated dependency coverage
* fix(swift): use caller-isolated TaskLocal overload
* build(deps): regenerate rebased shrinkwraps
* test(msteams): preserve DNS validation in fetch helper
* fix(deps): avoid vulnerable optional image stack
* test(deps): validate generated LRU override
* refactor(ui): extract chat resizable divider
* test(ui): update divider ownership path
* fix(matrix): retain restart-compatible SDK
* style(cron): format update test
2026-07-23 16:17:13 +00:00