Commit Graph

66965 Commits

Author SHA1 Message Date
Vincent Koc
ffe9e22b23 test(agents): bound startup-only service diagnostics 2026-07-11 16:22:22 +08:00
Vincent Koc
a46f780874 fix(agents): stop retaining local service runtime output 2026-07-11 16:22:22 +08:00
Vincent Koc
ee4e8038f9 test(gateway): cover embedding local service injection 2026-07-11 16:22:22 +08:00
Vincent Koc
b085184d08 fix(gateway): acquire embedding local services 2026-07-11 16:22:22 +08:00
Vincent Koc
839892e4c4 test(agents): track local service temp directories 2026-07-11 16:22:22 +08:00
Vincent Koc
e413d36054 fix(agents): satisfy diagnostics snapshot lint 2026-07-11 16:22:22 +08:00
Vincent Koc
8b8e66cfa4 test(embeddings): align runtime fixture casts 2026-07-11 16:22:22 +08:00
Vincent Koc
a74c92f27c fix(agents): unref local service diagnostics after readiness 2026-07-11 16:22:22 +08:00
Vincent Koc
317d9d772f fix(plugin-runtime): preserve local service hook projections 2026-07-11 16:22:22 +08:00
Vincent Koc
ccab708c16 fix(plugin-sdk): align local service release contract 2026-07-11 16:22:22 +08:00
Vincent Koc
4dc4115157 docs: cover embedding local service leases 2026-07-11 16:22:22 +08:00
Vincent Koc
e62c216d75 refactor(embeddings): inject local service acquisition 2026-07-11 16:22:22 +08:00
Vincent Koc
84393bea7a fix(agents): avoid retaining local service env values 2026-07-11 16:22:22 +08:00
Vincent Koc
06fbade796 fix(lmstudio): lease embedding local services 2026-07-11 16:22:22 +08:00
Vincent Koc
fa5f24b021 fix(ollama): lease embedding local services 2026-07-11 16:22:22 +08:00
Vincent Koc
6adeae6cfd fix(embeddings): lease OpenAI-compatible local services 2026-07-11 16:22:22 +08:00
Vincent Koc
c58690804f feat(plugin-sdk): expose provider local service leases 2026-07-11 16:22:22 +08:00
Vincent Koc
4228ae93c8 refactor(agents): generalize provider local service leases 2026-07-11 16:22:22 +08:00
Peter Steinberger
20fe3f46db fix: paired Mac Codex sessions finish loading (#104299)
* fix(codex): allow cold Mac session catalogs

* chore: keep release notes in PR body
2026-07-11 01:14:36 -07:00
Pavan Kumar Gondhi
5f709cfd87 fix: isolate Synology webhook preauth throttling [AI] (#103619)
* fix: scope Synology preauth throttling by client ip

* fix: clarify Synology preauth limiter comments
2026-07-11 13:44:21 +05:30
Peter Steinberger
c59d07b9a8 fix(ui): auto-recover Control UI panels from stale hashed-chunk imports after gateway updates (#104305) 2026-07-11 01:12:16 -07:00
Peter Steinberger
7128e8ea2b fix(telegram): allow 12-option polls (#104303)
* fix(telegram): allow 12-option polls

* chore: keep release notes in pr body
2026-07-11 01:11:30 -07:00
Peter Steinberger
7bf80dc2c6 chore(tooling): enforce formatting and refresh TypeScript checks (#104239)
* chore(tooling): enforce current formatter and refresh checks

* chore(tooling): keep release changelog formatter-owned

* chore(tooling): retain compatible Node type surface

* ci: enforce formatting for docs-only changes

* ci: isolate docs formatter check

* chore(tooling): apply updated lint and format rules

* chore(tooling): satisfy updated switch lint

* style(ui): apply Linux formatter layout

* test(doctor): match quiet local audio contribution

* test(doctor): assert quiet output only

* test(doctor): follow restored information contract
2026-07-11 01:09:51 -07:00
Peter Steinberger
81ce206ee8 improve(control-ui): move dev branch badge to its own footer strip (#104300)
The sidebar footer icon row got crowded with the inline branch label.
The dev-checkout branch now renders on a slim tinted strip above the
icon bar with a git-branch icon, keeping the full name readable and
the footer controls uncluttered.
2026-07-11 01:05:15 -07:00
Peter Steinberger
f9ebefba29 feat(macos): onboarding mascot reacts with moods, randomized idle behavior, and Easter eggs (#104255)
* feat(macos): mascot moods, randomized idle behavior, and onboarding Easter eggs

* feat(apps): opt About window and iOS hero marks into mascot Easter eggs

* chore(i18n): sync native app i18n inventory
2026-07-11 01:01:26 -07:00
Peter Steinberger
8cd092620d test: fix changed-run routing, dedupe gateway package lanes, repair force-rerun triggers (#104287)
* test: fix changed-run routing, dedupe gateway package lanes, repair force-rerun triggers

- route extensions/active-memory changed runs to their dedicated lane; add a
  generic guard that every catch-all-excluded extension root resolves to a
  dedicated config so future split lanes cannot silently skip changed tests
- exclude packages/gateway-client and packages/gateway-protocol from the unit
  lane; explicit targets now route to the gateway-client lane (was double-run)
- generate forceRerunTriggers from the test/vitest directory and resolve all
  entries absolute: Vitest matches triggers against absolute changed-file
  paths, so the old hand-maintained relative list never matched at all
- replace deprecated envFile:false with envDir:false (Vitest 4.1.9 warning)
- give scripts/test-live.mjs stall detection teeth: kill the process group and
  exit non-zero when OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS elapses quietly
- consolidate the live-docker shell target list into changed-lanes.mjs so the
  lane regex and check targets cannot drift; cover subagent-announce edits
- delete orphans: vitest.extension-clickclack.config.ts,
  vitest.full-core-unit.config.ts, scripts/test-docker-all.sh,
  scripts/test-live-acp-spawn-defaults-docker.sh

Closes #104231

* test: keep envDir literal so sharedVitestConfig satisfies Vite UserConfig

Vite 8 types envDir as string | false; the bare object literal widened false to
boolean and broke check:test-types at the defineConfig call sites.
2026-07-11 00:58:14 -07:00
Vincent Koc
3fd8e13c31 chore(ci): pin landed Kova evaluator 2026-07-11 15:57:55 +08:00
Vincent Koc
aef26f6020 fix(ci): preserve Kova failure evidence 2026-07-11 15:57:55 +08:00
Alix-007
5219c9353d fix(tts): bound voice-list requests (#102865)
* fix(microsoft): add timeout to voices list request

* fix(tts): bound voice-list requests

Co-authored-by: llagy009 <0668001470@xydigit.com>

---------

Co-authored-by: llagy009 <0668001470@xydigit.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-11 00:55:06 -07:00
Peter Steinberger
7f8d2bdb03 fix: escalate stalled managed mac app shutdown (#104268) 2026-07-11 00:54:42 -07:00
Yuval Dinodia
df883ab81a fix(discord): stop retrying non-idempotent sends on post-connect-ambiguous errors (#103867)
* fix(discord): stop retrying non-idempotent sends on post-connect-ambiguous errors

Discord's outbound retry runner treated every transient transport error as
retryable, including ECONNRESET, ETIMEDOUT, AbortError, and the undici
headers/body/socket timeouts. Those errors can fire after Discord has already
received and created the message but before the client reads the response, so
replaying the non-idempotent createChannelMessage POST delivers the same
message twice while reporting success.

Add a pre-connect-only classifier (isRetryableDiscordPreConnectError) covering
errors that provably never reached Discord (DNS/connect refused/connect
timeout) plus rate-limit rejections, mirroring the Telegram send-path
carve-out. The retry runner now accepts a per-call nonIdempotent option; the
message-create and thread-create call sites opt in so ambiguous post-connect
errors surface to the caller instead of double-sending. Idempotent REST calls
(reactions, edits, DM-channel lookup, uploads) keep the broader transient set.

* fix(discord): retry nonce-enforced message creates

* fix(discord): scope create retries by endpoint

* fix(discord): stabilize sticker and poll create nonce across retries

* fix(discord): tighten create retry safety

* fix(discord): preserve nonce-safe retries

* fix(discord): scope nonce fields to message creates

* test(discord): cover nonce-safe direct sends

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-11 00:54:23 -07:00
Peter Steinberger
dce871540b test(qa): consolidate web search scenario (#104280)
Co-authored-by: Jimmy Puckett <jimmy.puckett@spinen.com>
2026-07-11 00:54:15 -07:00
Alix-007
18362758d0 fix(openai): add timeout to realtime client-secret requests (#102860)
* fix(openai): add timeout to realtime client-secret requests

* test(openai): prove realtime timeout through real guard

* test(openai): route realtime timeout proof through guard

* fix(openai): bound realtime client-secret requests

Co-authored-by: llagy009 <0668001470@xydigit.com>

* fix(openai): align realtime secret timeout

---------

Co-authored-by: llagy009 <0668001470@xydigit.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-11 00:54:06 -07:00
Peter Steinberger
6ef2c1594d fix(ci): preserve QA package intent boundaries (#104207)
* fix(ci): preserve QA package intent boundaries

* test(ci): track rerun helper temp dirs

---------

Co-authored-by: Peter Steinberger <peter@steipete.me>
2026-07-11 00:51:57 -07:00
Peter Steinberger
8804a41269 fix(doctor): restore local audio information (#104281)
Co-authored-by: Peter Steinberger <peter@steipete.me>
2026-07-11 00:41:58 -07:00
Vincent Koc
597888680c feat(browser): expose managed graphics diagnostics (#104291)
* feat(browser): expose managed Chrome graphics diagnostics

* feat(browser): surface graphics facts in doctor

* docs(browser): explain managed graphics diagnostics

* fix(browser): remove unused graphics type import

* fix(browser): keep graphics facts sorting immutable

* fix(browser): bind graphics facts to owned process

* fix(browser): classify disabled graphics as software

* fix(browser): detect Windows software renderers

* fix(browser): classify disabled renderer sentinel
2026-07-11 15:41:16 +08:00
Peter Steinberger
ebc848deec feat: sidebar update card (web + macOS) with app-first mac update flow and Sparkle beta track (#104171)
* feat: sidebar update card (web + macOS) with app-first mac update flow and Sparkle beta track

Squashed from claude/update-notification-display-c6cfb9 after semantic merge
with #104178 (channel-aware CLI installs). See PR #104171 body for details.

* chore(i18n): resync generated inventories after rebase

* chore(i18n): resync locale metadata after rebase
2026-07-11 00:34:10 -07:00
Peter Steinberger
7da12cbbe5 feat(ui): sweep a text wave across the active tool row while it runs (#104266) 2026-07-11 00:28:33 -07:00
NianJiu
54eda58447 fix(gateway-client): stop unbounded requests masking stalled transports (#103407)
* fix(gateway-client): keep watchdog active for unbounded requests

* test(gateway-client): prove watchdog recovery lifecycle

* style(gateway-client): satisfy watchdog test lint

---------

Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-11 00:27:34 -07:00
Peter Steinberger
675f3ed048 fix(channels): remove duplicate set-profile action (#104235) 2026-07-11 00:26:01 -07:00
Peter Steinberger
c16bd0df8d feat(control-ui): show non-main gateway checkout branch in sidebar footer (#104262)
Source-checkout (non-release) gateways now report their git branch in the
Control UI bootstrap config; the sidebar footer renders it in red next to
the connection dot. Package installs, main/master, and detached HEAD never
show it.
2026-07-11 00:25:43 -07:00
NIO
27b6b67af1 refactor(status): skip duplicate channel summary scans (#95263)
* fix(status): report skipped channel credential checks accurately

* refactor(status): skip duplicate channel summary scans

Co-authored-by: NIO <nocodet@mail.com>

* test(status): exercise configured channel summary

---------

Co-authored-by: NIO <nocodet@mail.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-11 00:25:31 -07:00
Peter Steinberger
624b2e355f fix(doctor): register local audio health check (#104237)
Co-authored-by: Peter Steinberger <peter@steipete.me>
2026-07-11 00:23:04 -07:00
Peter Steinberger
5b451b5d1c fix(ui): floating chat rail toggles overlap message bubbles and block window dragging (#104247)
* fix(ui): move floating chat rail toggles into a single top row inside a titlebar band

The workspace and background-tasks openers stacked vertically over the
chat thread and covered the first message. They now sit side by side in
one 28px row, the thread reserves a ~44-52px top inset that keeps them
clear of bubbles, and empty band background starts a native window drag
in the macOS app (same beginNativeWindowDrag contract as pane headers).
Split panes keep their compact inset since the pane header already owns
the top row.

* test(ui): own the titlebar-band drag in native-window-drag and cover it with tests

Moves the top-inset drag logic from an inline chat-thread closure to
beginNativeWindowDragFromTopInset next to its sibling handler, and adds
jsdom regression tests for in-band background presses, below-band
presses, and presses on scrolled-under content.
2026-07-11 00:21:31 -07:00
Ayaan Zaidi
f2a0f00567 fix(agents): keep exact tool allowlists on owning factories (#104213)
* refactor(agents): centralize core tool factory descriptors

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-07-11 12:44:37 +05:30
Peter Steinberger
34a8472274 fix(ui): tone down hover/click control shadows; show dev build identity in status tooltip (#104215)
* fix(ui): tone down hover/click control shadows via theme tokens

* feat(ui): show dev build identity in gateway status tooltip
2026-07-11 00:13:36 -07:00
maweibin
fe7a6796ef docs(doctor): document in-flight cron job warning (#98620) (#99086) 2026-07-11 00:13:15 -07:00
Peter Steinberger
394bd1b489 fix: make LaunchAgent plists launchd-readable (#104228) 2026-07-11 00:12:48 -07:00
Peter Steinberger
f94a7dc183 feat(codex): supervise native Codex sessions (#104045)
* feat(codex): add native session supervision

* fix(codex): harden supervision integration

* fix(codex): preserve locked harness ownership

* fix(codex): fence native session archive

* fix(codex): revalidate archive binding ownership

* feat(codex): integrate supervision runtime

* feat(sessions): preserve harness-owned execution

* feat(sessions): persist harness ownership invariants

* feat(gateway): enforce harness-owned sessions

* feat(setup): enable detected Codex supervision

* feat(mac): expose supervised Codex sessions

* feat(ui): make Codex sessions actionable

* docs(codex): document session supervision

* test(codex): cover integration ownership

* chore(i18n): refresh supervision inventories

* fix(setup): finalize Codex activation atomically

* test(codex): narrow binding store update

* fix(sessions): preserve legacy model locks

* test(macos): serialize Codex catalog fixtures

* fix(sessions): preserve legacy lock admission

* chore(i18n): reconcile supervision metadata

* test(sessions): mark legacy lock fixture

* fix(macos): drain final Codex catalog frame

* docs: leave supervision note to release

* style(macos): satisfy Codex catalog type length

* chore: record session accessor seam owners

* fix(macos): honor configured Codex supervision

* fix(codex): preserve harness-owned model locks

* fix(codex): satisfy supervision lint gates

* chore(i18n): refresh native supervision inventory

* fix(codex): align supervision validation contracts

* fix(codex): close supervision boundary gaps

* fix(codex): preserve supervision activation contracts

* fix(codex): dispose standalone supervision runtime

* fix(codex): pin supervised source connection

* fix(plugins): bind delegated runs to exact session target

* fix(codex): scope supervised sessions to configured agents

* fix(codex): fingerprint effective supervision home

* fix(codex): normalize supervision plugin policy

* fix(codex): keep supervised bindings stable across upgrades

* fix(codex): guard all supervised binding connections

* fix(codex): preserve catalog filters and pending CAS identity

* fix(codex): preserve supervision identity for diagnostics

* fix(codex): bind uncertain commits to supervision connection

* fix(codex): satisfy supervision type boundaries

* fix(macos): reconcile current main validation

* fix(codex): handle absent runtime config in supervision

* fix(doctor): own local audio acceleration check

* fix(codex): satisfy integration lint gates

* fix(codex): satisfy lifecycle safety guards
2026-07-11 00:12:08 -07:00
cxbAsDev
4fcee4f4fd fix(google-meet): force English UI when reusing existing Chrome tabs (#103719)
* fix(google-meet): force English UI when reusing existing Chrome tab

* fix(google-meet): narrow reused tab before forcing English UI

* test(google-meet): assert /navigate target id is adopted in reused tabs

* fix(google-meet): preserve active call tabs and normalize English before recovery

* fix(google-meet): preserve localized active tabs

* test(google-meet): avoid shadowing path import

* test(google-meet): align mocks with English-pinned tab reuse

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-11 00:11:00 -07:00