Commit Graph

62713 Commits

Author SHA1 Message Date
Patrick Erichsen
d43366b4e3 ci: bump ClawHub package publish workflow (#97907) 2026-06-29 12:17:49 -07:00
Parvesh
82dfd89107 fix(agents): stop recording accepted sessions_spawn launches as tool failures (#96851)
* fix(agents): stop recording accepted sessions_spawn launches as tool failures

* fix(agents): stop recording accepted sessions_spawn launches as tool failures

* fix(clownfish): address review for live-pr-inventory-20260629T175323-001 (1)

---------

Co-authored-by: openclaw-clownfish[bot] <280122609+openclaw-clownfish[bot]@users.noreply.github.com>
2026-06-29 11:21:05 -07:00
Yuval Dinodia
38ab207591 fix(google-meet): fall back to manual OAuth paste when callback port is occupied (#96492)
The Google Meet OAuth login binds a fixed localhost:8085 callback listener
and let listener failures propagate, so meet auth login aborted entirely when
port 8085 was already in use. The sibling Gemini CLI OAuth path already
recovers by switching to the manual copy/paste flow on EADDRINUSE/listen
errors; bring Google Meet to parity by catching listener errors and reusing
the existing manual-paste handler instead of failing the login.
2026-06-29 11:20:21 -07:00
lin-hongkuan
2906d6c38f fix(auth): strip controls from masked API keys (#96445)
* fix(auth): strip controls from masked API keys

* test(auth): cover DEL and C1 masked key controls

* chore: retrigger PR checks

---------

Co-authored-by: lin-hongkuan <lin-hongkuan@users.noreply.github.com>
2026-06-29 11:15:55 -07:00
Dallin Romney
80a3c515fd test: add ClawHub release candidate QA proof (#97896)
* test: add ClawHub release candidate QA proof

* test: harden ClawHub release candidate evidence
2026-06-29 11:14:09 -07:00
Dallin Romney
5816e0194e feat(qa): wire crabline whatsapp transport (#95920) 2026-06-29 11:13:17 -07:00
Yuval Dinodia
e38d64c5f8 fix(cron): keep a due recurring run when an edit re-saves the same schedule (#96159)
* fix(cron): keep a due recurring run when an edit re-saves the same schedule

update() advanced state.nextRunAtMs to the next future slot whenever a
patch carried schedule or enabled, even when the schedule was unchanged,
dropping an already-due run and re-phasing every-job anchors to now. Gate
the advance on cronSchedulingInputsEqual so only a genuine schedule or
enabled change recomputes, and inherit the previous every anchor when a
re-save omits it, matching the add/remove maintenance recompute.

* fix(cron): re-anchor every-job to edit time on a genuine interval change

Only inherit the previous cadence anchor for an unchanged-interval every
re-save. A real everyMs change (UI omits anchorMs) now re-anchors to the
edit time, matching the prior update semantics, while idempotent re-saves
still preserve a due slot and phase. Adds a regression test for the
interval-change path.
2026-06-29 11:08:11 -07:00
Glenn-Agent
7e428797ec docs: add generated docs map (#95954)
* docs: add generated docs map

* docs: format docs map headings

* docs: separate docs map sections

* fix: satisfy docs map checks
2026-06-29 11:05:58 -07:00
Zaid
aa5ec51af0 fix(line): preserve uploaded file names for media detection (#96403)
* fix(line): preserve file upload filenames

* test(line): fail unexpected media downloads
2026-06-29 11:03:30 -07:00
Dallin Romney
2cc43aec2d feat(qa): wire crabline slack transport (#97891) 2026-06-29 10:57:17 -07:00
lin-hongkuan
bc7f0f1223 fix(secrets): strip control characters from secret input (#96444)
* fix(secrets): strip control characters from secret input

* chore: retrigger PR checks

* fix(web-content): strip controls from provider secrets

---------

Co-authored-by: lin-hongkuan <lin-hongkuan@users.noreply.github.com>
2026-06-29 10:51:08 -07:00
dwc1997
f92ec2d4e8 test(shared): add unit tests for surrogate-safe UTF-16 string slicing helpers (#97805)
* test(shared): add unit tests for surrogate-safe UTF-16 string slicing helpers

Add unit tests for sliceUtf16Safe and truncateUtf16Safe functions in
src/shared/utf16-slice.ts to verify UTF-16 string slicing behavior.

Tests cover:
- sliceUtf16Safe slices ASCII string normally
- sliceUtf16Safe handles negative start/end
- sliceUtf16Safe handles start/end beyond length
- sliceUtf16Safe swaps start and end when start > end
- sliceUtf16Safe preserves emoji with surrogate pairs
- sliceUtf16Safe avoids splitting surrogate pair at start/end
- truncateUtf16Safe returns input when shorter than limit
- truncateUtf16Safe truncates when longer than limit
- truncateUtf16Safe handles zero/negative limit
- truncateUtf16Safe floors decimal limit
- truncateUtf16Safe preserves emoji with surrogate pairs
- truncateUtf16Safe avoids splitting surrogate pair

* fix: replace tautological surrogate assertions with exact output checks

Replace vague 'result.length >= 0' assertions with exact expected output
checks for surrogate pair boundary cases. The helper returns empty string
when slicing at surrogate pair boundaries.
2026-06-29 10:50:58 -07:00
pick-cat
09167523bf fix(nextcloud-talk): bound bot preflight error reads (#97811)
Co-authored-by: Pick-cat <266665499+Pick-cat@users.noreply.github.com>
2026-06-29 10:50:47 -07:00
pick-cat
eb5fb2aa69 fix(microsoft-foundry): bound connection test error reads (#97812)
Co-authored-by: Pick-cat <266665499+Pick-cat@users.noreply.github.com>
2026-06-29 10:50:38 -07:00
Dallin Romney
2ec6708980 fix(whatsapp): validate WebSocket URL env (#97697) 2026-06-29 10:50:16 -07:00
pick-cat
9949f6bd85 fix(chutes): bound OAuth token error response reads (#97808)
* fix(chutes): bound OAuth token error response reads

* ci: re-trigger checks (fs-safe unhandled-rejection flake on prior run)

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

---------

Co-authored-by: Pick-cat <266665499+Pick-cat@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 10:48:05 -07:00
maweibin
84cd3aa7f5 fix(cli): call process.exit(1) in root help and version fast path error handlers (#97793) (#97807)
The error handler in tryHandleRootHelpFastPath only set process.exitCode=1
without calling process.exit(). When dangling async handles exist (timers,
connections, promises), the Node event loop stays open and the CLI hangs
indefinitely instead of returning to the terminal.

In tryHandleRootVersionFastPath, the default onError handler called
process.exit(1) directly, bypassing the injected exit seam that the
success path already uses. Changed to exit(1) (deps.exit ?? process.exit)
so tests and embedded callers can observe and control exit on failure.

Added rejection-path tests for version fast path: injected exit called
on resolveVersion rejection, and caller-supplied onError honored.

Fixes #97793.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-29 10:47:55 -07:00
Yuval Dinodia
24626e5266 fix(compaction): count bashExecution and summary turns in pre-prompt overflow precheck (#97861)
estimateMessageTokenPressure special-cased toolResult, tool, and
assistant roles and otherwise read record.content. bashExecution stores
its payload in command/output and branchSummary/compactionSummary store
theirs in summary, so record.content was undefined and those turns
scored as bare boundary overhead. The provider request expands them via
convertToLlm into full user text, so bash-heavy sessions skipped the
preflight overflow gate and submitted oversized prompts.

Estimate each affected role from the exact text convertToLlm renders:
bashExecutionToText for bash turns (zero for excludeFromContext records,
which convertToLlm drops), and the summary prefix/suffix plus summary
text for the two summary roles.
2026-06-29 10:47:45 -07:00
Masato Hoshino
888f399499 fix(status): surface should-run plugin drift (#97878)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 10:46:36 -07:00
Dallin Romney
beab0ecb02 test: link ClawHub packaged plugin QA evidence (#97712)
* test: link ClawHub packaged plugin QA evidence

* test: narrow ClawHub QA primary links
2026-06-29 10:46:33 -07:00
ly-wang19
5f60724b6d fix(nodes): guard node scalar fields against malformed entries 2026-06-29 10:36:29 -07:00
LiLan0125
685b95b607 fix(cron): warn when allowed web_search has no provider 2026-06-29 10:36:22 -07:00
cxbAsDev
597a0ba43c fix(discord): bound PluralKit and voice-message JSON reads 2026-06-29 10:36:16 -07:00
dwc1997
ecf054a40f test(infra): add numeric option helper coverage 2026-06-29 10:36:12 -07:00
Dallin Romney
0deddfa204 feat(whatsapp): support Baileys WebSocket URL override (#97155)
* Allow WhatsApp monitor socket substitution

* Refine WhatsApp socket substitution surface

* Keep WhatsApp socket seam on existing API

* Tighten WhatsApp socket seam type exports

* Simplify WhatsApp monitor runtime option state

* Use WhatsApp WebSocket URL override
2026-06-29 10:28:34 -07:00
SunnyShu
6de357ad47 fix(agents): enable bundled static catalog fallback for cron Attempt 2 (#96070)
* [AI] fix(agents): enable bundled static catalog fallback for cron Attempt 2 (#95500)

Plugin-provided models (e.g. opencode-go/deepseek-v4-flash) are registered
in the bundled static catalog but are not discoverable via agent model
discovery alone. The embedded runner's Attempt 2 (after ensureOpenClawModelsJson)
now passes allowBundledStaticCatalogFallback to resolveModelAsync so these
models are resolved through the static catalog fallback path.

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

* fix(agents): trim production comment to durable contract per ClawSweeper P3

* fix(agents): enforce plugin policy for static catalog fallback

Signed-off-by: sallyom <somalley@redhat.com>

---------

Signed-off-by: sallyom <somalley@redhat.com>
Co-authored-by: iCodeMate <noreply@anthropic.com>
Co-authored-by: sallyom <somalley@redhat.com>
2026-06-29 11:47:21 -04:00
SunnyShu
1052652a71 fix(session-memory): skip transcript-only assistant messages in getRecentSessionContent (#94401)
* fix(session-memory): only skip delivery-mirror duplicates, preserve unique DM rows

- Skip delivery-mirror rows only when their text duplicates the preceding
  assistant text (fixes #92563)
- Delivery-mirror rows with unique visible content (e.g., message-tool
  replies) are preserved
- Gateway-injected standalone assistant replies are preserved
- Combined with upstream sanitizeSessionMemoryTranscriptText

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

* fix(session-memory): reset assistant-text tracking across user turns

lastAssistantText persisted across user messages, causing delivery-mirror
rows that echoed a previous turn's assistant text to be incorrectly
filtered. Reset lastAssistantText to undefined when a visible user
message is emitted, so cross-turn delivery-mirror duplicates are
preserved while same-turn duplicates are still skipped.

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

* fix(session-memory): reset mirror dedupe on command turns

Signed-off-by: sallyom <somalley@redhat.com>

---------

Signed-off-by: sallyom <somalley@redhat.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: sallyom <somalley@redhat.com>
2026-06-29 11:19:25 -04:00
sunlit-deng
825d9a6662 fix(os): use sw_vers for macOS version on Darwin instead of os.release() (#95225)
* fix(os): use sw_vers for macOS version on Darwin instead of os.release()

* fix: cache sw_vers, keep resolveOsSummary().release as raw kernel version

Addresses ClawSweeper P1 findings on #95225:

1. Cache sw_vers output for process lifetime: resolveDarwinProductVersion()
   is called on the agent prompt hot path (3 callers via resolveOsProductLabel).
   Without caching, every prompt build spawns a synchronous subprocess.
   Added module-level cache + _resetCachedDarwinProductVersion() for tests.

2. Keep resolveOsSummary().release as os.release(): changing release from
   raw kernel to product version breaks status JSON and trajectory metadata
   consumers that expect the Darwin kernel release. The darwin product
   version is now used only in the label field.

* fix(os): preserve runtime OS labels off Darwin
2026-06-29 08:03:56 -07:00
solodmd
86b9b88f40 test(firecrawl): add unit tests for firecrawl client functions (#97714) 2026-06-29 07:58:40 -07:00
solodmd
d21ddd3f7a test(config): add unit tests for mapZodIssueToConfigIssue (#97736)
* test(config): add unit tests for mapZodIssueToConfigIssue

* fix: remove unused ts-expect-error directive
2026-06-29 07:55:11 -07:00
Andi Liao
be94853de0 fix(tasks): recover terminal lost cron rows (#86088)
* fix(tasks): recover terminal lost cron rows

* fix(tasks): require backing-session lost recovery signal

* fix(tasks): satisfy has-own lint rule

---------

Co-authored-by: Altay <altay@hey.com>
2026-06-29 15:32:47 +03:00
Harjoth Khara
355c43fe0c fix(ui): collapse failed internal tool calls when the turn still replied (#89683) (#90122)
A non-zero internal tool exit (Codex marks any non-zero exit as failed,
e.g. a no-match shell search) was promoted to a primary red "Tool error"
banner in Control UI even when the turn produced a clean assistant reply.
Compute a per-tool-group turnSucceeded signal at the chat projection
boundary and de-promote such non-terminal failures to a collapsed tool
summary; detail stays available on expand. Genuinely terminal tool
failures still surface.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 15:23:46 +03:00
Momo
db2488b6e3 fix(memory): record structured dreaming outcomes (#97723)
Summary:
- Merged fix(memory): record structured dreaming outcomes after ClawSweeper review.

Automerge notes:
- PR branch already contained follow-up commit before automerge: chore(plugin-sdk): update surface budgets

Validation:
- ClawSweeper review passed for head 9fa7d20a96.
- Required merge gates passed before the squash merge.

Prepared head SHA: 9fa7d20a96
Review: https://github.com/openclaw/openclaw/pull/97723#issuecomment-4831902831

Co-authored-by: momothemage <niuzhengnan@163.com>
Approved-by: momothemage
2026-06-29 11:23:38 +00:00
mikasa
cfd8ba8fc8 fix #95519: [Bug]: Fallback should trigger on provider upstream_error / LLM request failed (#95542)
* fix(agents): fallback on upstream provider errors

* refactor(agents): clarify provider fallback classification

---------

Co-authored-by: Altay <altay@hey.com>
2026-06-29 14:12:09 +03:00
Kevin Lin
389c355bcf fix(codex): preserve per-app approval reviewer policy (#97327)
* fix(codex): version app inventory cache keys

* fix(codex): refresh and replay plugin app policy

* fix(codex): preserve user reviewer for plugin turns

* fix(codex): gate plugin reviewer from startup policy

* fix(codex): route app approvals to user reviewer

* fix(codex): prompt destructive app tools

* fix(codex): scope app approval reviewers

* test(codex): complete app policy fixture

* fix(codex): avoid pre-start app inventory gate

* Revert "fix(codex): prompt destructive app tools"

This reverts commit d1cb0d5ba8.

# Conflicts:
#	extensions/codex/src/app-server/plugin-thread-config.test.ts
#	extensions/codex/src/app-server/plugin-thread-config.ts
2026-06-29 02:35:13 -07:00
wm0018
ff1e7e1305 docs(telegram): correct errorPolicy values and defaults 2026-06-29 01:20:44 -07:00
wm0018
293f0369d0 docs(feishu): remove nonexistent disabled dmPolicy option 2026-06-29 01:05:03 -07:00
Dallin Romney
96c8338d5b test: fold remaining Docker lanes into QA (#97708) 2026-06-29 00:39:06 -07:00
cxbAsDev
0ce10d7793 fix(agents): bound WHAM usage probe JSON response reads 2026-06-29 00:21:36 -07:00
Wynne668
ac5af25015 fix: document stream cleanup fallback intent 2026-06-29 00:20:56 -07:00
Rain
0635fa5eca fix(agents): safely record non-json transport errors 2026-06-29 00:15:21 -07:00
Dallin Romney
5327340a09 test: fold release upgrade docker lanes into qa (#97689) 2026-06-28 23:59:36 -07:00
Rain
b01e6127d9 fix(config): accept overlays for bundled provider aliases (#88400)
Co-authored-by: Pluviobyte <Pluviobyte@users.noreply.github.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-28 23:40:02 -07:00
programmingWTF
05cf497767 feat(control-ui): add right-click Reply in Dashboard webchat (#92654)
* fix(control-ui): right-click Reply icon, dismiss button, quote format, and queue ordering

* fix(control-ui): harden Dashboard webchat reply menu

* fix(control-ui): satisfy reply menu lint

---------

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-06-28 23:37:32 -07:00
saju01
78b03fb415 test(github-copilot): cover live xhigh reasoning for non-Claude models (#91728)
Regression coverage for #59416: when live /models metadata wins over the
static xhigh allowlist, non-Claude mini-family ids (e.g. gpt-5.4-mini)
must gain xhigh from their resolved compat, while ids whose live effort
list lacks xhigh (e.g. gpt-5-mini) must not over-grant it.

The live-first model catalog union and models-defaults removal are
already in origin/main (75405f64d0, 46c42d4a0d, d2279591bf); this PR now
contributes only the still-missing regression tests on top of that base.

Co-authored-by: saju01 <saju@coderedcorp.com>
2026-06-28 23:34:28 -07:00
狼哥
68ddb9744f ci: check bundled channel config metadata (#91134) 2026-06-28 23:24:22 -07:00
Dallin Romney
18f0eeab20 test: fold webchat auto tts proof into qa (#97632) 2026-06-28 23:20:13 -07:00
Vincent Koc
f5482efbd7 UI: render half-block QR output in web chat (#93869)
Co-authored-by: MG <1900448+emg110@users.noreply.github.com>
2026-06-28 23:12:28 -07:00
Acache
e7d6566b8f fix(feishu): publish transport health status (#90966)
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
Co-authored-by: Acache <acache@users.noreply.github.com>
2026-06-28 23:12:09 -07:00
Vincent Koc
c0ee7a1d20 test: gate symlink assertions on file symlink capability (#95531)
Co-authored-by: ANIRUDDHA ADAK <127435065+aniruddhaadak80@users.noreply.github.com>
2026-06-28 22:50:37 -07:00