Commit Graph

66332 Commits

Author SHA1 Message Date
saju01
cbc84767bd fix(exec-approval): stop misattributing Allow Always unavailability to policy (#97740)
* fix(exec-approval): stop misattributing Allow Always unavailability to policy

Allow Always is dropped both when policy ask=always AND when a command is
non-persistable (e.g. shell redirect `2>&1` -> one-shot), but the prompt always
claimed 'effective approval policy requires approval every time'. That's
misleading for the non-persistable case (#97069). Reword to reason-neutral
'Allow Always is unavailable for this command.' across all approval surfaces,
update en + 20 locale bundles, refresh i18n meta, and the matching tests.

Closes #97069

* fix(exec-approval): stop misattributing Allow Always unavailability to policy

* test(ui): await exec approval render updates

* chore(ui): sync approval i18n metadata

---------

Co-authored-by: saju01 <saju01@users.noreply.github.com>
Co-authored-by: openclaw-clownfish[bot] <280122609+openclaw-clownfish[bot]@users.noreply.github.com>
Co-authored-by: Vincent Koc <25068+vincentkoc@users.noreply.github.com>
2026-07-11 18:09:51 +08:00
Peter Steinberger
c702719eda fix: preserve Mac bundle during live builds (#104376) 2026-07-11 03:06:50 -07:00
Peter Steinberger
cfda86babe chore(docs): translate with GPT-5.6 xhigh 2026-07-11 06:06:18 -04:00
Peter Steinberger
6268eeef15 test: wire Control UI suite into CI, fix its broken tests, drop dead harness surface (#104361)
* test: wire Control UI suite into CI, fix its broken tests, drop dead harness surface

- fix 7 Control UI tests broken on main: module-mock factories are unreliable
  under isolate:false shared workers; use RealtimeTalkSession prototype spies
  and real jsdom storage instead (chat-realtime, chat-pull-requests)
- add gated checks-ui CI job (runUiTests changed-scope output): chromium
  provisioning, lint:ui:no-raw-window-open, pnpm --dir ui test; ~30s on a
  4vcpu runner, runs only when ui-affecting paths change
- add weekly node22-compat workflow exercising the supported lower Node bound
  with the same command set as the dispatch-only ci.yml job
- delete the unreachable channels entry in EXTENSION_TEST_CONFIG_ROUTES and
  the never-populated extensionRoutedChannelTestFiles override machinery
  (born empty in 2ccb5cff22); resolved globs are provably identical
- guard run-vitest.mjs hardcoded path maps with existence tests so renames
  cannot silently drop extended stall watchdogs
- remove unenforced coverage thresholds; test:coverage is informational, docs
  updated (reference/test, help/testing, plugins/sdk-testing)

Closes #104321

* test: pin OPENCLAW_CI_RUN_UI_TESTS in the manifest env expectation

* test(ui): capture the realtime start spy instead of referencing the unbound prototype method

* test(ui): raise ui vitest timeouts for real-browser layout tests on small CI runners
2026-07-11 03:04:11 -07:00
Peter Steinberger
aeab8e7faf fix(ui): hide group submenu separator when New group is the only entry (#104370) 2026-07-11 03:02:02 -07:00
Peter Lee
ef95c5d74e fix(discord): reset progress drafts across queued turns (#102341)
* fix(discord): guard progress draft collapse to prevent re-collapse on cleaned stream

Commit 86ea382 added a progressDraftStartedBeforeFinal latch that snapshots
hasStarted at markFinalReplyStarted time. This correctly preserves collapse
eligibility when an abort cancels the compositor gate before
shouldCollapseProgressDraft runs.

However the latch was never cleared. After markPreviewFinalized turned the
draft into a summary, hasProgressDraftStarted remained true permanently. In
multi-tool turns with multiple final-payload deliveries, this caused
shouldCollapseProgressDraft to re-trigger collapse on an already-cleaned or
sealed draft stream, corrupting downstream delivery state and causing tool
results to render as image content blocks instead of text.

Fix: add a progressDraftCollapsed guard set by markPreviewFinalized that
prevents hasProgressDraftStarted from returning true after the draft has been
collapsed into a summary. Reset the guard on handleAssistantMessageBoundary
so followup/queued turns start fresh.

Per Discord channel session, all tool results rendered as image content
blocks. Model received (see attached image) placeholders instead of text.

Fixes #100782

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(discord): use valid table/chunk mode literals in collapse-guard tests

* test(discord): add abort-race gate-cancellation latch survival test

* fix(discord): consume progress draft collapse once

Co-authored-by: xialonglee <li.xialong@xydigit.com>

* fix(discord): retain progress receipt on retry

Co-authored-by: xialonglee <li.xialong@xydigit.com>

* fix(discord): rearm queued progress drafts

Co-authored-by: xialonglee <li.xialong@xydigit.com>

* test(discord): assert progress lifecycle outcomes

Co-authored-by: xialonglee <li.xialong@xydigit.com>

* fix(discord): reset queued progress turn state

Co-authored-by: xialonglee <li.xialong@xydigit.com>

* test(discord): model recreated progress drafts

Co-authored-by: xialonglee <li.xialong@xydigit.com>

* fix(discord): serialize progress draft rotation

Co-authored-by: xialonglee <li.xialong@xydigit.com>

* fix(discord): isolate queued draft generations

Co-authored-by: Peter Lee <xialonglee@users.noreply.github.com>

* test(discord): align synchronous draft rotation

Co-authored-by: Peter Lee <xialonglee@users.noreply.github.com>

* fix(discord): distinguish draft rotation ownership

Co-authored-by: Peter Lee <xialonglee@users.noreply.github.com>

* chore: keep release notes in pull request

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-11 02:59:29 -07:00
NIO
98fb858769 docs(cli): clarify that exec-policy show and approvals get exclude per-session /exec overrides (#94999)
* docs(cli): clarify exec-policy show and approvals get exclude per-session /exec overrides

* refactor(cli): centralize session exec override note

* test(cli): cover node exec override note

* test(cli): use complete node policy fixture

---------

Co-authored-by: NIO <nocodet@mail.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-11 02:58:37 -07:00
Peter Steinberger
d8bf51b462 fix(discord): single-source thread-binding default placement and guard artifact parity (#104342)
* fix(discord): single-source thread-binding default placement and guard artifact parity

* fix(tests): load thread-binding parity artifacts via sanctioned contract test helpers
2026-07-11 02:50:53 -07:00
xydt-tanshanshan
eb2f763674 fix(agents): add tool-activity heartbeat to keep subagent alive during tool calls (#95536)
* [AI] fix(agents): add run-scoped tool-activity heartbeat to prevent premature subagent idle timeout

Subagent LLM idle watchdog tripped during long-running tool calls because
tool completions did not reset the idle timer.

Implement a per-run tool-activity heartbeat:
1. notifyToolActivity(runId) — published from embedded-runner tool
   execution wrappers (attempt.ts) whenever a tool completes
2. onToolActivity(runId, listener) — consumed by streamWithIdleTimeout
   to reset the idle watchdog on tool completion
3. getLastToolActivityMs(runId) — shared timestamp Map so pre-stream
   activity is visible to armTimer before the first stream iteration
4. clearToolActivityRun(runId) — wired into the run lifecycle finally
   block to clean up listener sets and timestamps when the run exits

Scoped per-run via runId-keyed Maps to prevent concurrent runs from
resetting each other's idle watchdogs.

Related to #94124

* [AI] fix(agents): copy plugin/channel/before-tool-call metadata onto heartbeat tool wrappers

* [AI] test(agents): add metadata preservation regression tests for heartbeat tool wrapper

* [AI] fix(agents): preserve terminal presentation metadata on heartbeat tool wrapper

* [AI] chore: update test comment for four metadata copy calls

* fix: add periodic heartbeat during tool execution

Fire notifyToolActivity at tool start and every 60s via setInterval
so long-running tools survive the 120s LLM idle watchdog.

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: remove useless catch clause (no-useless-catch)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: preserve Code Mode control-tool identity through heartbeat wrapper

Adds copyCodeModeControlToolIdentity() to replicate the WeakSet
membership that markCodeModeControlTool() sets. Without this,
the heartbeat wrapper drops Code Mode identity for exec/wait
tools, weakening before_tool_call policy and approval handling.

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: wrap deferred directory tools with heartbeat

resolveDeferredTool hydrates hidden catalog tools outside the
effectiveTools.map() wrapper, so they bypassed the periodic
notifyToolActivity heartbeat. Wrap the hydrated execute function
with the same start/interval/complete notification pattern.

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-11 17:50:33 +08:00
Peter Steinberger
a94498cf6f fix(maint): reuse recent same-PR hosted gates (#104355)
* fix(maint): reuse recent same-PR hosted gates

* style(maint): format hosted gate verifier
2026-07-11 02:49:53 -07:00
Peter Steinberger
14a056ac83 fix: stop Gateway without source rebuild (#104357) 2026-07-11 02:45:07 -07:00
Peter Steinberger
b361390356 ci(release): preserve Telegram launcher stage (#104356) 2026-07-11 02:44:25 -07:00
Peter Steinberger
0e1e077f4f feat(control-ui): show build identity chip in sidebar footer (#104350) 2026-07-11 02:42:01 -07:00
Vincent Koc
8e2ddd60ad fix(ci): sync Control UI raw-copy baseline (#104352) 2026-07-11 17:39:00 +08:00
Vincent Koc
38c49b1f9d test(ci): cover split performance artifacts 2026-07-11 17:38:41 +08:00
Vincent Koc
730b9fa9bc perf(ci): parallelize Kova source probes 2026-07-11 17:38:41 +08:00
Peter Steinberger
2e2366b6d3 chore(tooling): typecheck scripts/** with a dedicated tsgo lane (#104348)
* feat(tooling): add tsgo typecheck lane for scripts/**

* fix(scripts): burn down scripts type debt surfaced by the new lane

Typing-only except bugs the lane surfaced: gh-read timeout race,
Discord Headers spread dropping entries, undefined allowedHeadBranches
match, plugin-boundary matchAll crash. Deletes retired config keys from
fixtures/benches (prompt snapshots regenerated, config dump only) and
the orphaned non-runnable sync-moonshot-docs script. Adds full-surface
.d.mts declarations for existing .mjs boundaries.
2026-07-11 02:31:17 -07:00
Peter Steinberger
6e81c548fc fix: bind macOS node allowlist commands safely (#104337)
* fix: bind macOS node allowlist commands safely

* chore: leave node fix notes in PR
2026-07-11 02:27:59 -07:00
Peter Steinberger
ee5834f7c4 fix: stage signed Mac app replacements (#104345) 2026-07-11 02:26:06 -07:00
Peter Steinberger
518c5823d8 feat(macos): navigate dashboard history with Command brackets (#104328)
* feat(macos): add dashboard history shortcuts

* chore: leave release changelog to release flow

* chore(macos): sync native i18n inventory

* fix(macos): keep titlebar navigation on dashboard
2026-07-11 02:22:28 -07:00
Peter Steinberger
c48cbabfc1 fix(control-ui): ignore foreign side results over a live pending card and collapse carried drafts 2026-07-11 02:20:08 -07:00
Peter Steinberger
c071fcfeb6 fix(control-ui): harden BTW selection popup lifecycle from review feedback 2026-07-11 02:20:08 -07:00
Peter Steinberger
adb05e72dc improve(control-ui): move the split-view opener into the top-right toggle cluster (#104341)
* improve(control-ui): move split-view opener into the top-right floating toggle cluster

* test(control-ui): anchor split-view opener e2e assertions to the floating toggle cluster
2026-07-11 02:18:58 -07:00
Peter Steinberger
72cf43fa80 refactor(discord): unify custom-id value codecs into one shared module (#104334) 2026-07-11 02:12:37 -07:00
Peter Steinberger
3f2e9184f6 ci(release): fail fast in Telegram validation (#104324)
* ci(release): bound Telegram validation time

* fix(release): preserve Telegram QA cleanup

* style(test): format Telegram workflow assertions

* test(release): encode Telegram lease timeout
2026-07-11 02:11:27 -07:00
Peter Steinberger
b5db7d7d04 fix(ui): give workspace rail summary chips top padding (#104331) 2026-07-11 02:06:51 -07:00
Peter Steinberger
0ef9a62eaf fix(codex): allow slower Mac session catalogs (#104332) 2026-07-11 02:05:55 -07:00
Peter Steinberger
107b95e1ad fix: isolate Gateway from live builds (#104329) 2026-07-11 02:02:28 -07:00
chenyangjun-xy
c557246437 fix(watch): defer restart when dist/entry.js is missing mid-rebuild (#99972)
* fix(watch): defer restart when dist/ is mid-rebuild (#99603)

Defer gateway:watch child restart when run-node's build/runtime-postbuild
readiness contract reports a hard dist/ failure. Only defers on conditions
where the child physically cannot start, preserving normal restart behavior
for soft staleness that run-node can rebuild on start.

Hard failures (defer restart):
  - missing_dist_entry (mid-rebuild)
  - missing_bundled_plugin_dist_entry
  - missing_private_qa_dist
  - missing_runtime_postbuild_output

Soft staleness (allow restart, run-node rebuilds):
  - missing_build_stamp (w/ direct entry.js check for masked case)
  - git_head_changed, dirty_watched_tree
  - config_newer, build_stamp_missing_head, source_mtime_newer

isBuildReadyForRestart delegates to resolveBuildRequirement and
resolveRuntimePostBuildRequirement from run-node.mjs, using the
watcher process environment for consistency with the child runner.
200ms polling with 5-min timeout. Child-exit bounded recovery.
Clears stale restartRequested on timeout/poll errors.

Ref: #99603
Co-Authored-By: Claude <noreply@anthropic.com>

* fix(watch): deduplicate deferral loops, add single-flight guard, remove lint suppression

- Extract deferUntilBuildReady(onReady, onTimeout) shared helper,
  replacing the near-identical pollBuildReady and pollAfterChildExit.
- Add single-flight guard (deferredRestartActive) so concurrent file
  change events during deferral coalesce into one poll loop instead of
  spawning a git-subprocess storm.
- Replace inline .catch arrow callback with method-style call, removing
  the oxlint-disable-next-line suppression and its allowlist entry.
- Add tests: coalescing multiple changes, requestRestart recovery.

Ref: #99603
Co-Authored-By: Claude <noreply@anthropic.com>

* fix: keep gateway watch alive during concurrent builds

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-11 01:58:16 -07:00
Peter Steinberger
7c9cb54f09 fix: Codex CLI login fails during fresh Mac setup (#104150)
* fix(onboarding): preload Codex runtime for setup probe

* fix(onboarding): refresh Codex runtime discovery

* fix(onboarding): use native Codex CLI auth

* fix(onboarding): probe bundled Codex login

* chore(macos): refresh onboarding i18n inventory

* fix(onboarding): live-test custom Codex providers
2026-07-11 01:53:49 -07:00
Peter Steinberger
e8cbc62e3e chore(ui): remove dead .sidebar-new-session styles (#104296) 2026-07-11 01:48:40 -07:00
Peter Steinberger
88c563b241 fix: address update-card review findings (channel normalization, hidden-nav affordance, prerelease pinning, policy-aware bridge) (#104316)
* fix(mac): prerelease-exact launch resolution and policy-aware update ownership

* fix(ui): keep update affordance when nav is hidden and fall back on native decline

* chore(i18n): sync native inventory
2026-07-11 01:44:26 -07:00
Peter Steinberger
236d1b2484 feat(control-ui): selection popup with More details and Ask in side chat via /btw (#104205)
* feat(control-ui): add chat selection popup with More details and Ask in side chat

* fix(control-ui): keep BTW pending card visible and clear it on resultless terminal runs

* fix(control-ui): route failed BTW runs to an error side-result card and ignore stale side results

* fix(control-ui): correlate BTW pending cards by pre-generated run id and suppress superseded runs

* fix(control-ui): retire abandoned BTW runs so late side events never reach the transcript

* chore(docs): regenerate docs map for btw selection-popup section; fix selection-popup test lint
2026-07-11 01:42:17 -07:00
Peter Steinberger
2ed2424618 feat: harden live gateway and mac restarts (#104314)
* feat: audit gateway logs after live restarts

* fix: keep mac app running during replacement build
2026-07-11 01:41:27 -07:00
Vincent Koc
b01affeaee docs: refresh llama diagnostics map 2026-07-11 16:40:14 +08:00
Vincent Koc
c79bac4018 test(memory): clean up llama worker fixtures 2026-07-11 16:40:14 +08:00
Vincent Koc
d8993d979d test(memory): describe requested llama context 2026-07-11 16:40:14 +08:00
Vincent Koc
9e39e9a862 fix(memory): complete llama runtime diagnostics 2026-07-11 16:40:14 +08:00
Vincent Koc
3f55aa837d docs(memory): explain llama.cpp runtime diagnostics 2026-07-11 16:40:14 +08:00
Vincent Koc
85a96409f1 feat(memory): surface llama.cpp diagnostics 2026-07-11 16:40:14 +08:00
Vincent Koc
4b0e5f5461 feat(memory): capture llama.cpp runtime facts 2026-07-11 16:40:14 +08:00
chengzhichao-xydt
a11449211a fix(inworld): add timeout to voices list request (#102965)
* fix(inworld): add timeout to voices list request

* refactor(inworld): reuse guarded timeout test helpers

* test(inworld): rely on harness timeout

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-11 01:35:25 -07:00
Vincent Koc
36e54a8830 fix(ci): unblock Kova packs during release prep 2026-07-11 16:32:59 +08:00
Vincent Koc
9e2aed2ece fix(release): allow explicit non-publish changelog packing 2026-07-11 16:32:59 +08:00
Peter Lee
585914fcd5 fix(channels): stop unavailable targets repeating plugin scans (#100377)
* fix(channels): suppress repeated failed bootstrap

Co-authored-by: Peter Lee <li.xialong@xydigit.com>

* docs(changelog): credit recent fixes

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-11 01:29:33 -07:00
Peter Steinberger
e0e67abfa9 fix: cancel expired macOS node approvals (#104302)
* fix: cancel expired macOS node approvals

* chore: keep node approval fix out of release notes
2026-07-11 01:25:36 -07:00
Peter Steinberger
bfffb537ce test: guard release summary ZIP coverage (#104311) 2026-07-11 01:25:16 -07:00
Vincent Koc
f71255e475 fix(agents): redact service request diagnostics 2026-07-11 16:22:22 +08:00
Vincent Koc
64a76d18ee fix(memory): tolerate minimal plugin runtimes 2026-07-11 16:22:22 +08:00
Vincent Koc
50429157e3 fix(embeddings): preserve provider alias cache identity 2026-07-11 16:22:22 +08:00