Commit Graph

19174 Commits

Author SHA1 Message Date
Vincent Koc cdf4c4ce7a merge: refresh realtime continuity onto main
* origin/main: (53 commits)
  fix(whatsapp): normalize future-proof QA poll and video note ingress (#117579)
  fix(perf): separate warm and first-device health probes (#117525)
  fix(ci): repair plugin prerelease validation (#117562)
  fix(tasks): sanitize every human task and flow detail (#117568)
  fix(feishu): cancel unread streaming-card error bodies before release (#117312)
  fix(status): honor explicit local RPC fallback timeouts (#117519)
  fix(tasks): validate notification policy before persistence (#117554)
  refactor: consolidate full release child workflows (#117385)
  refactor(policy): centralize doctor health-check descriptors (#117578)
  perf(gateway): mark recovery before model preparation (#117544)
  test(openai): parse realtime websocket frames safely
  fix(openai): keep embedding identity stable across upgrades (#117557)
  fix(googlechat): drop invalid thread resource names before send (#108324)
  fix(skills): preserve profile in ClawHub command hints (#117555)
  fix(cli): explain filtered plugin policy without unsafe recovery (#117556)
  fix(irc): strip markdown from outbound text (#112961)
  refactor(plugins): consolidate registry snapshots (#117561)
  test(ui): cover reentrant Talk meter cleanup
  fix(plugins): fail blocked enable commands (#117536)
  fix(ui): reclaim reentrant Talk audio meters
  ...
2026-08-02 03:32:45 +08:00
Peter Steinberger 7c9794b5c6 fix(whatsapp): normalize future-proof QA poll and video note ingress (#117579)
Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-08-01 12:30:49 -07:00
Vincent Koc 936c9c7e2d fix(openai): copy queued realtime audio buffers (#117028)
* commit '7facf157e67d7902dd645f33026a253e006ed0e0':
  test(openai): parse realtime websocket frames safely
  fix(openai): own queued realtime audio buffer snapshots
2026-08-02 03:29:43 +08:00
Vincent Koc 18120072a0 Merge origin/main into fix(openai): retain gateway startup audio
* origin/main:
  fix(tasks): sanitize every human task and flow detail (#117568)
  fix(feishu): cancel unread streaming-card error bodies before release (#117312)
  fix(status): honor explicit local RPC fallback timeouts (#117519)
  fix(tasks): validate notification policy before persistence (#117554)
  refactor: consolidate full release child workflows (#117385)
  refactor(policy): centralize doctor health-check descriptors (#117578)
2026-08-02 03:27:14 +08:00
zengLingbiao 1a0d3b5c40 fix(feishu): cancel unread streaming-card error bodies before release (#117312) 2026-08-01 12:26:27 -07:00
Vincent Koc 75fc973690 test(openai): satisfy live proof lint 2026-08-02 03:20:30 +08:00
Peter Steinberger c5090b9cf5 refactor(policy): centralize doctor health-check descriptors (#117578) 2026-08-01 12:09:52 -07:00
Vincent Koc e3020ac33c Merge origin/main into fix(openai): retain gateway startup audio
* origin/main:
  perf(gateway): mark recovery before model preparation (#117544)
  fix(openai): keep embedding identity stable across upgrades (#117557)
  fix(googlechat): drop invalid thread resource names before send (#108324)
  fix(skills): preserve profile in ClawHub command hints (#117555)
  fix(cli): explain filtered plugin policy without unsafe recovery (#117556)
  fix(irc): strip markdown from outbound text (#112961)
  refactor(plugins): consolidate registry snapshots (#117561)
  fix(plugins): fail blocked enable commands (#117536)
  test(secrets): dedupe runtime state fixtures (#117563)
2026-08-02 03:07:14 +08:00
Vincent Koc da94915d06 test(openai): prove gateway startup audio delivery 2026-08-02 03:07:01 +08:00
Vincent Koc 7facf157e6 test(openai): parse realtime websocket frames safely 2026-08-02 02:59:32 +08:00
Peter Steinberger 71b35c3e1d fix(openai): keep embedding identity stable across upgrades (#117557)
Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-08-01 11:59:31 -07:00
Javier Ailbirt 7563e40e47 fix(googlechat): drop invalid thread resource names before send (#108324)
Reply routing can hand sendGoogleChatMessage a `thread` that is not a
valid `spaces/{space}/threads/{thread}` resource name — a bare id, a
`spaces/{space}/messages/{message}` name, or a thread from a different
(or wrongly-cased) space. The Chat API rejects the whole request with
`400 INVALID_ARGUMENT`, so the reply is never delivered even though the
agent already produced it (and did any side effects).

Guard the send so the `thread` field and the messageReplyOption fallback
are applied only when the thread is a well-formed name belonging to the
target space; otherwise post to the space as a new thread. Revives the
approach of #28153 (auto-closed as stale) and addresses the failure mode
behind #64313.
2026-08-01 11:59:08 -07:00
RileyJJY 9a120f364f fix(irc): strip markdown from outbound text (#112961) 2026-08-01 11:55:52 -07:00
Vincent Koc 3aa43c7fba chore: merge main into realtime audio ownership fix
* origin/main: (491 commits)
  feat(gateway): advertise chat attachment limits on hello-ok (#116188)
  fix(ui): preserve full graphemes in session owner initials (#117350)
  refactor(tui): consolidate runtime ownership (#117368)
  fix(update): return failure when dirty checkout blocks update (#117452)
  fix(auto-reply): apply mixed chat directives in one session transaction (#117542)
  refactor(ui): unify channel status and setup controls (#117499)
  fix(doctor): preserve surviving lint selections (#117543)
  fix(media): keep an unquoted MEDIA path with spaces as one media item (#112464)
  refactor(channels): consolidate lightweight plugin discovery (#117541)
  fix(imessage): prevent duplicate messages after delayed sends (#110853)
  refactor(memory): unify authoritative dreaming state and presentation (#117538)
  refactor(agents): consolidate main-session recovery ownership (#117383)
  fix(proxy-capture): make path-based session cleanup atomic (#98852)
  refactor(agents): consolidate compaction and context-engine ownership (#117482)
  fix(gateway): preserve Responses usage details (#117533)
  perf(gateway): skip empty session recovery stores (#117498)
  fix(ci): update canonical Kova performance pin (#117508)
  fix(system-agent): emit the wizard cancel hint once per message (#113731)
  refactor: dedupe secrets runtime snapshot fixtures (#117502)
  test(google): cover ready callback close precedence
  ...
2026-08-02 02:41:51 +08:00
Vincent Koc 7eeac6b004 Merge remote-tracking branch 'origin/pr-117057-head' into maint-pr-117057-quicksilver-live-20260801
* origin/pr-117057-head:
  test(openai): isolate gateway audio pipeline proof
  fix(openai): unify gateway microphone buffering
  fix(openai): preserve gateway microphone startup audio
2026-08-02 02:39:35 +08:00
Vincent Koc 980550ffcb test(voice-call): use provider audio callback 2026-08-02 02:32:20 +08:00
Vincent Koc 81abcdeba4 fix(google): reset continuity before reconnect backoff 2026-08-02 02:32:20 +08:00
Vincent Koc c7b1399879 fix(discord): type active-run fallback 2026-08-02 02:21:31 +08:00
Vincent Koc 7795d902f7 chore: merge main into memory test isolation fix
* origin/main: (35 commits)
  fix(update): return failure when dirty checkout blocks update (#117452)
  fix(auto-reply): apply mixed chat directives in one session transaction (#117542)
  refactor(ui): unify channel status and setup controls (#117499)
  fix(doctor): preserve surviving lint selections (#117543)
  fix(media): keep an unquoted MEDIA path with spaces as one media item (#112464)
  refactor(channels): consolidate lightweight plugin discovery (#117541)
  fix(imessage): prevent duplicate messages after delayed sends (#110853)
  refactor(memory): unify authoritative dreaming state and presentation (#117538)
  refactor(agents): consolidate main-session recovery ownership (#117383)
  fix(proxy-capture): make path-based session cleanup atomic (#98852)
  refactor(agents): consolidate compaction and context-engine ownership (#117482)
  fix(gateway): preserve Responses usage details (#117533)
  perf(gateway): skip empty session recovery stores (#117498)
  fix(ci): update canonical Kova performance pin (#117508)
  fix(system-agent): emit the wizard cancel hint once per message (#113731)
  refactor: dedupe secrets runtime snapshot fixtures (#117502)
  test(google): cover ready callback close precedence
  test(openai): dedupe realtime voice fixtures (#117503)
  fix(google): flush lazy prompts on provider readiness
  fix(gateway): keep canonical hooks on pristine startup path (#117493)
  ...
2026-08-02 02:21:19 +08:00
Vincent Koc 83e8033ac6 fix(google): preserve realtime prompts during startup (#117529)
* commit 'd60584ee2d1dc3755477b38234b37f8d11bc1b9c':
  test(google): cover ready callback close precedence
  fix(google): flush lazy prompts on provider readiness
  test(google): prove lazy realtime prompt delivery
  fix(google): bound lazy realtime user messages
2026-08-02 02:10:29 +08:00
Omar Shahine b67fa6a2c4 fix(imessage): prevent duplicate messages after delayed sends (#110853)
* fix(imessage): outlive imsg send fallback

* test(imessage): prove delayed fallback resolves once

* fix(imessage): preserve the send timeout floor

---------

Co-authored-by: Omar Shahine <10343873+omarshahine@users.noreply.github.com>
2026-08-01 10:51:06 -07:00
Vincent Koc 5b7fcce1bb fix(discord): replay only unheard exact speech 2026-08-02 01:33:40 +08:00
Vincent Koc ab3109a598 fix(voice-call): close stale realtime sockets 2026-08-02 01:33:40 +08:00
Vincent Koc d53772e984 fix(google): signal fresh realtime sessions 2026-08-02 01:29:18 +08:00
Vincent Koc 19f7834e14 fix(discord): fence realtime provider generations 2026-08-02 01:27:00 +08:00
Vincent Koc d60584ee2d test(google): cover ready callback close precedence 2026-08-02 01:25:41 +08:00
Vincent Koc e745f53014 fix(voice-call): isolate replaced realtime bridges 2026-08-02 01:23:30 +08:00
Peter Steinberger b9bf34a3cd test(openai): dedupe realtime voice fixtures (#117503) 2026-08-01 10:22:51 -07:00
Vincent Koc 814a2ebb61 fix(google): flush lazy prompts on provider readiness 2026-08-02 01:22:33 +08:00
Vincent Koc 6dcb95a947 test(memory): isolate mocked embedding providers 2026-08-02 01:18:43 +08:00
Vincent Koc cc71e7c452 fix(discord): reset realtime provider continuity 2026-08-02 01:11:52 +08:00
Vincent Koc e1cc00f9b6 fix(voice-call): guard continuity reset ownership 2026-08-02 01:10:36 +08:00
Peter Steinberger 17625e5cd2 fix(msteams): preserve thread targets for structured sends (#117516) 2026-08-01 10:07:22 -07:00
Vincent Koc a38dc473dc fix(google): make continuity reset generation-idempotent 2026-08-02 01:06:14 +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 4f2429a817 merge: refresh realtime continuity onto main
* origin/main: (41 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:00:52 +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
synth 0df66f6d63 fix(anthropic): honor configured model pricing (#117275) 2026-08-01 09:56:23 -07:00
Peter Steinberger fdec6fe7d4 refactor(plugins): reuse scoped loader for capability discovery (#117373)
* refactor(plugins): reuse scoped loader for capabilities

* fix(plugins): retain channel capabilities during discovery
2026-08-01 09:50:34 -07:00
Peter Steinberger ed5d046a58 fix(imessage): sanitize private context on every outbound path (#117501)
Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-08-01 09:40:02 -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 e07d75dc09 perf(models): skip Ollama row runtime loading (#117465) 2026-08-02 00:30:21 +08:00
Qiong a566ac23a0 fix(active-memory): detect Chinese recall intent in escalate mode (#117338) (#117419)
* fix(active-memory): detect Chinese recall intent in escalate mode (#117338)

* fix(active-memory): recognize formatted multilingual recall intent

---------

Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-08-01 09:21:45 -07:00
Vincent Koc 9cb647e735 test(google): prove lazy realtime prompt delivery 2026-08-02 00:15:41 +08:00
Koduri Mahesh Bhushan Chowdary 4cbbccd0a0 fix(workboard): ignore caller-supplied archivedAt when creating a card (#116412)
Archiving is a lifecycle transition owned by archive(), which routes through
updateCard and appends the matching `archived` event. createDirect had no such
guard: it passed input.metadata straight into normalizeMetadata, which treats
archivedAt as an ordinary caller-supplied field.

A card could therefore be created already archived. Archived cards are excluded
from dispatch at every status, so the card was unstartable from the instant it
existed, while its event log contained only `created` - no archive ever
happened, so no `archived` event was ever recorded. The board reported work that
could never start, and the missing event sent operators looking for a rogue
archiver that did not exist.

normalizeMetadata already carries an options bag for rules that are stricter on
create than on update (allowDependencyLinks). Add allowArchivedAt alongside it
and pass false from createDirect, so archivedAt falls back to the create
fallback (undefined) instead of the caller's value. The update path is
unchanged: patches that set archivedAt still archive the card and still emit the
event.

Fixes #116395
2026-08-01 09:15:07 -07:00
Peter Steinberger 568ea29d2e refactor(plugins): inherit shared package boundary settings (#117474) 2026-08-01 09:11:09 -07:00
Dallin Romney fa8774cc61 fix(qa): Slack progress lane misses successful delivery (#117391)
* fix(qa): verify Slack live delivery observations

* test(qa): update Slack scenario fixture contract

* fix: guard Slack QA proxy network boundary

* refactor: use shared capture for Slack QA observations

* refactor(qa): split Slack fallback evidence

* fix(qa): verify Slack commentary from native capture

* fix(slack): preserve debug capture with proxies

* fix(qa): narrow Slack commentary fallback

* fix(qa): observe successful Slack progress writes
2026-08-02 00:07:01 +08:00
Vincent Koc 5ae401d908 fix(models): reduce default model-list memory use (#117323)
* fix(models): scope default catalog discovery

* fix(models): split scoped catalog preparation

* perf(models): narrow model-list imports

* perf(auth): narrow provider id imports

* perf(plugins): narrow provider discovery imports

* perf(models): bypass runtime catalog facade for scoped lists

* perf(models): avoid runtime imports in default list

* fix(models): preserve scoped catalog coverage

* chore(models): remove obsolete auth exports

* perf(models): skip redundant configured-provider discovery

* perf(models): skip canonical row runtime loading

* fix(models): normalize configured fallback rows

* test(models): update registry list fixtures

* fix(models): separate catalog and runtime discovery scopes

* fix(models): break row projection import cycle

* fix(models): satisfy type and export checks

* fix(models): keep row projection bundled-only

* fix(models): preserve partial catalog visibility

* fix(models): avoid live discovery in default lists

* test(models): isolate auth-backed catalog coverage

* fix(models): retain OpenAI runtime normalization

* fix(models): skip canonical OpenAI row runtime loading

* test(models): keep provider policy fixtures typed

* fix(models): preserve configured OpenAI routes
2026-08-02 00:01:37 +08:00
Peter Steinberger 30972edaea fix(discord): recover zero-valued DAVE transition (#117381)
Co-authored-by: Peter Steinberger <steipete@macos.shared>
2026-08-01 08:57:12 -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