Commit Graph

30536 Commits

Author SHA1 Message Date
brokemac79
aac1abeaff fix(memory-lancedb): expose public memory artifacts 2026-05-23 10:32:59 +01:00
Peter Steinberger
2c536a8626 docs: absorb documentation PR sweep 2026-05-23 10:23:34 +01:00
Vincent Koc
6b04170167 fix(agents): stabilize Linux fallback tests 2026-05-23 11:10:18 +02:00
Peter Steinberger
99a1107b61 docs: absorb hook and subagent guidance PRs 2026-05-23 09:47:37 +01:00
Vincent Koc
09dd051e78 fix(agents): audit tool policy blocks (#85673)
* fix(agents): audit tool policy blocks

* fix(agents): sanitize tool policy audit fields

* fix(agents): include matched tool policy rule

* fix(agents): bound matched tool policy rules
2026-05-23 16:43:29 +08:00
Gaurav Prasad
558a05b6d0 feat(diagnostics): classify skill and tool usage (#80370)
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-05-23 16:08:55 +08:00
Vincent Koc
c29967bcc2 test(agents): repair main failure fixtures 2026-05-23 09:53:04 +02:00
samzong
4f0c902012 feat(diagnostics): trace gateway secret preparation (#83019)
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-05-23 15:45:39 +08:00
Vincent Koc
7f05be041e fix(diagnostics): harden observability exports and smokes (#85371)
* test(diagnostics): widen observability smokes

* fix(diagnostics): sanitize observability exports

* docs(diagnostics): format otel export docs
2026-05-23 15:27:43 +08:00
Mason Huang
31c269f0ed fix(tools): honor config apiKey in media tool preflight (#85570)
Summary:
- The branch adds a config-aware tool auth helper, routes image/PDF/media generation preflight and list selection through it, threads `workspaceDir`, and adds focused regression tests plus a changelog entry.
- Reproducibility: yes. by source inspection. Current main gates affected media/PDF/generation preflight paths on env/profile auth while the runtime auth contract already accepts usable `models.providers.*.apiKey`.

Automerge notes:
- PR branch already contained follow-up commit before automerge: fix(tools): fall back to config apiKey in capability preflight
- PR branch already contained follow-up commit before automerge: fix(tools): honor config apiKey in media tool preflight
- PR branch already contained follow-up commit before automerge: fix(clawsweeper): address review for automerge-openclaw-openclaw-8557…

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

Prepared head SHA: b8c9242d77
Review: https://github.com/openclaw/openclaw/pull/85570#issuecomment-4523770355

Co-authored-by: Mason Huang <masonxhuang@tencent.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: hxy91819
Co-authored-by: hxy91819 <8814856+hxy91819@users.noreply.github.com>
2026-05-23 06:27:03 +00:00
Gio Della-Libera
d7a078f196 fix(agents): mirror internal ui message tool replies (#85564)
* fix(agents): mirror internal ui message tool replies

* test(tui): prove internal source reply rendering

* fix(agents): preserve source reply idempotency
2026-05-22 21:21:14 -07:00
clawsweeper[bot]
679a46d01e fix(session): surface previous-transcript archive failures on /new rotation (#81984) (#85586)
Summary:
- Adds an optional archive-error callback for session transcript archiving, wires `/new` reset rotation to log previous-transcript archive failures, adds regression coverage, and updates the changelog.
- Reproducibility: yes. source-reproducible. Current main catches and ignores `archiveFileOnDisk` failures ins ... and the source PR proof exercises the same rename failure boundary with a real filesystem permission error.

Automerge notes:
- No ClawSweeper repair was needed after automerge opt-in.

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

Prepared head SHA: 9d5f4c0c70
Review: https://github.com/openclaw/openclaw/pull/85586#issuecomment-4523917139

Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
2026-05-23 03:27:48 +00:00
Jason (Json)
c08400ea7d Fix context pressure preflight for tool-heavy sessions (#85541)
* fix context pressure preflight for tool payloads

* fix codex rendered context preflight

---------

Co-authored-by: joshavant <830519+joshavant@users.noreply.github.com>
2026-05-22 18:39:37 -07:00
Gio Della-Libera
959b935f3d fix(doctor): classify codex asset notice as info (#85119) 2026-05-22 18:28:45 -07:00
Alex Knight
fe121632ba fix(ui): keep chat picker search current (#85547)
* fix(ui): keep chat picker search current

* test(ui): expand chat picker mock data

* test(openai): satisfy video buffer test typing

* fix(ui): avoid duplicate chat picker search on blur
2026-05-23 11:23:07 +10:00
Shakker
f022b056bd fix: preserve message-tool delivery evidence 2026-05-23 02:22:04 +01:00
Josh Avant
f2365053d3 fix(codex): add API key paste auth (#85533)
* fix codex api key auth paste

* changelog for codex api key auth

* support piped codex api key auth

* fix codex auth prompt validator type

* normalize pasted codex auth secrets

* honor codex auth profile type at runtime
2026-05-22 17:53:05 -07:00
Shakker
efbf9f3d46 fix: retry guarded video downloads 2026-05-23 00:35:23 +01:00
Shakker
ed7d99aa0e fix: preserve guarded video operation cleanup 2026-05-23 00:35:23 +01:00
Shakker
31b5145594 fix: thread openai video request policy 2026-05-23 00:35:23 +01:00
Shakker
cc48c34f91 fix: honor openai video provider request network policy 2026-05-23 00:35:23 +01:00
Fermin Quant
951bbe67b0 fix: use fs-safe trash for agent delete (#84394) 2026-05-22 15:53:41 -07:00
Neerav Makwana
bd9c78f957 Fix heartbeat message-tool delivery policy (#85357)
* fix(heartbeat): honor message-tool delivery policy

Keep scheduled heartbeat turns aligned with group/channel message-tool visibility and model-specific runtime policy so internal tool errors remain private.

Co-authored-by: Cursor <cursoragent@cursor.com>

* test(heartbeat): cover delivery chat type inference

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: joshavant <830519+joshavant@users.noreply.github.com>
2026-05-22 15:52:57 -07:00
Andy Ye
91d85e70c3 Scope config preflight note suppression (#84439) 2026-05-22 15:51:34 -07:00
Zhaocun Sun
1cd6dce075 fix(cron): document best-effort edit delivery mode (#84526) 2026-05-22 15:49:41 -07:00
Peter Steinberger
658be7f1c7 docs: absorb small documentation PRs 2026-05-22 23:42:51 +01:00
Dallin Romney
299ed80834 fix: reuse provider auth lookup facts (#85499)
* fix: reuse provider auth lookup facts

* test: update model auth mocks

* fix: scope synthetic auth registry lookup
2026-05-22 15:14:04 -07:00
clawsweeper[bot]
464ffc1003 feat: start onboarding for fresh CLI installs (#85519)
Summary:
- This PR routes bare `openclaw` to classic onboarding for missing, empty, or metadata-only configs; keeps aut ... cs/changelog/tests; and narrows a Docker E2E boundary-check exception for an existing source-checkout lane.
- Reproducibility: not applicable. this is a feature/default-routing PR rather than a bug report. The branch p ... ill includes a fresh-state terminal run reaching `OpenClaw setup` and tests for the relevant config states.

Automerge notes:
- PR branch already contained follow-up commit before automerge: feat: start onboarding for fresh CLI installs

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

Prepared head SHA: f4b2572f2e
Review: https://github.com/openclaw/openclaw/pull/85519#issuecomment-4522938004

Co-authored-by: FullerStackDev <263060202+fuller-stack-dev@users.noreply.github.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
2026-05-22 22:00:21 +00:00
Peter Steinberger
64d13c017a docs: refresh contributor docs
Co-authored-by: Quratulain-bilal <umayaimanshah@gmail.com>
Co-authored-by: Mariano Belinky <mbelinky@gmail.com>
Co-authored-by: tao <itaofe@gmail.com>
Co-authored-by: julian <julian@tencent.com>
Co-authored-by: xenouzik <xenouziq@gmail.com>
Co-authored-by: Olamiposi <56056759+posigit@users.noreply.github.com>
Co-authored-by: surlymochan <surlymo@apache.org>
Co-authored-by: Janaka A <contact@janaka.co.uk>
Co-authored-by: choiking <samsamuels1927@gmail.com>
2026-05-22 22:58:27 +01:00
Jason (Json)
84f6b5c7f8 fix(update): prepack npm git update specs
Prepack npm GitHub/git source update specs into temporary tarballs before the staged global npm install. Extends coverage to hosted GitHub HTTPS URLs without a `.git` suffix.

Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com>
2026-05-22 22:58:16 +01:00
Peter Steinberger
0622fb6d90 fix(media): replace Gemini CLI fallback with sandboxed Antigravity (#85518)
* fix(media): prefer antigravity over gemini cli fallback

* fix(media): pass antigravity workspace before prompt

* fix(media): keep antigravity prompt argument single-line

* fix(media): sandbox antigravity media fallback

* test(media): isolate antigravity cli override

* fix(media): isolate antigravity capability probe
2026-05-22 22:49:45 +01:00
Sebastien Tardif
e008bc92c3 fix(proxy): add missing clientSocket error handler in CONNECT tunnel (#82444)
The CONNECT handler pipes clientSocket and upstreamSocket together but
only registers an error handler on upstreamSocket. If the client
disconnects abruptly (ECONNRESET), the unhandled error event on
clientSocket causes the Node process to crash.

Add a clientSocket error handler that logs the event and destroys the
upstream socket. Also change clientSocket.end() to clientSocket.destroy()
in the upstream error handler since destroy() is more appropriate for
error cleanup of piped sockets.

Signed-off-by: Sebastien Tardif <sebtardif@ncf.ca>
2026-05-22 22:33:46 +01:00
Sergio Cadavid
7134a95c90 fix(memory): report qmd workspace cwd probe failures (#63167) 2026-05-22 22:31:59 +01:00
luna system
bf1a22ced4 fix(agents): handle parallel tool call deltas in openai-completions stream (#82263)
* fix(agents): handle parallel tool call deltas in openai-completions stream

The OpenAI completions streaming parser tracked only a single
`currentBlock` for tool calls and ignored `toolCall.index`. When the
API sends multiple `delta.tool_calls` entries (e.g., parallel tool
call scaffolding from kimi-for-coding), the parser created a new
block for every entry with a differing `id`, spawning phantom tool
calls with empty names and misrouting arguments.

Replace single-block tracking with Maps keyed by `index` and `id`,
matching the correct logic already present in the bundled
`@earendil-works/pi-ai` dependency. This ensures parallel and
interleaved tool call deltas accumulate to the correct block.

Fixes phantom "unknown" tool calls and empty arguments on
parameterized tools for providers that emit multiple tool_call
indices in streaming deltas.

* fix(agents): finalize tool-call blocks in place to keep maps live

ClawSweeper review [P1]: finishCurrentBlock() and finishAllToolCallBlocks()
were creating new block objects and replacing them in output.content,
but toolCallBlocksByIndex / toolCallBlocksById still pointed at the old
objects. Later deltas for those indices would mutate detached blocks,
causing argument loss and incorrect contentIndex in stream events.

Fix by finalizing arguments in place on the existing block objects.

Add regression test for parallel tool calls with split indices:
- two tool-call slots introduced in one chunk
- argument deltas arriving for each index in subsequent chunks

* fix(agents): keep byte counters out of emitted tool-call blocks

ClawSweeper review [P2]: partialArgsBytes was being stored directly on
the tool-call block objects pushed into output.content, exposing parser
scratch state to emitted stream events and final transcripts.

Replace the inline field with a WeakMap keyed by block object, keeping
byte tracking internal to the parser without polluting the public block
shape.

* refactor(agents): extract ToolCallBlock type for map declarations

ClawSweeper review [P1]: NonNullable<typeof currentBlock> at the map
declaration point was unreliable because currentBlock is initialized to
null and flow-narrowed. Define a local ToolCallBlock alias and use it
for toolCallBlocksByIndex, toolCallBlocksById, and toolCallBlockBytes
to give the maps a precise, stable type.

* fix(agents): iterate typed tool-call map in finishAllToolCallBlocks

ClawSweeper review [P1]: output.content elements are typed as
Record<string, unknown>, so block.partialArgs remained unknown even
after checking block.type === "toolCall". Latest CI failed strict
type checking at parseStreamingJson(block.partialArgs).

Fix by iterating toolCallBlocksByIndex.values() instead — the Map
values are already typed as ToolCallBlock, so partialArgs is known
to be a string and parseStreamingJson compiles cleanly.
2026-05-22 22:31:52 +01:00
Peter Steinberger
bb5010b89a docs: absorb docs sweep
Co-authored-by: Kai <kai@itskai.dev>
Co-authored-by: Weihang <gwh7078@163.com>
Co-authored-by: Scott Long <longstoryscott@gmail.com>
Co-authored-by: moejaberr <mjaber@uoguelph.ca>
Co-authored-by: huihui0822 <109355071+huihui0822@users.noreply.github.com>
2026-05-22 21:52:01 +01:00
Peter Steinberger
60e3749de3 fix: cancel stale provider auth prewarms (#85503) 2026-05-22 21:51:43 +01:00
Dallin Romney
0a50cbdf34 Add TUI PTY integration coverage (#85485)
* test: add TUI PTY integration coverage

* test: stabilize TUI PTY CI

* test: speed up TUI PTY coverage

* test: bound TUI PTY local waits

* ci: keep TUI PTY gate fast

* test: route TUI PTY project in full suite

* ci: run TUI PTY on routing edits
2026-05-22 13:42:58 -07:00
Sebastien Tardif
7bc4a333aa fix(security): escape entry.id in HTML export to prevent attribute XSS (#83104)
* fix(security): escape entry.id in HTML export to prevent attribute XSS

Apply escapeHtmlAttr to entry.id in renderEntry and renderCopyLinkButton
to prevent attribute injection via crafted entry IDs in HTML exports.

Signed-off-by: Sebastien Tardif <sebtardif@ncf.ca>

* chore: remove proof helper scripts from branch

ClawSweeper P2: committed proof scripts can provide false-positive
validation. Proof output is in the PR body instead.

Signed-off-by: Sebastien Tardif <sebtardif@ncf.ca>

---------

Signed-off-by: Sebastien Tardif <sebtardif@ncf.ca>
2026-05-22 21:27:14 +01:00
Logan Ye
76a025c2fd fix: guard openai-completions tool payload with supportsTools compat flag (#74738)
* fix: guard openai-completions tool payload with supportsTools compat flag (#74664)

* docs(changelog): note OpenAI completions tool compat fix

* test(agents): use real tool history fixtures
2026-05-22 21:27:06 +01:00
Gio Della-Libera
c85feace54 Policy: add secret and auth conformance checks (#81974)
* feat(policy): add secrets auth conformance

* fix(policy): include sandbox ssh secret data

* fix(policy): complete secret input provenance

* fix(policy): cover media request secrets

* fix(policy): satisfy policy lint

* fix(policy): narrow secret conformance evidence

* fix(policy): cover request bearer token secrets
2026-05-22 12:48:14 -07:00
Sebastien Tardif
f75789f803 fix(delivery): log failDelivery errors instead of silently swallowing (#84449)
Replace empty .catch(() => {}) on two failDelivery calls with
log.warn() so delivery queue mark-failed errors leave a diagnostic
trail instead of being silently discarded.

Signed-off-by: Sebastien Tardif <sebtardif@ncf.ca>
2026-05-22 20:45:26 +01:00
Jayesh Betala
5c866a17d7 fix(cli): validate debug proxy numeric options (#84260) 2026-05-22 20:45:17 +01:00
Andy Tien
501e74ddf3 fix(daemon): use exit code instead of localized text for schtasks fallback (#85347)
* fix(daemon): use exit code instead of localized text for schtasks fallback

Problem:
- shouldFallbackToStartupEntry() only matched English/Spanish error messages
  ("access is denied" / "acceso denegado"), causing silent fallback failure
  on non-English Windows systems (Chinese, Japanese, French, German, etc.)

Fix:
- Replace regex matching with exit code check (params.code === 1)
- schtasks returns exit code 1 for access denied / generic failure
  regardless of system locale

Fixes: #85255

* test(daemon): cover localized schtasks fallback

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-05-22 20:43:40 +01:00
infracore
5c614de29a fix(auto-reply): enforce word boundary in slash command prefix match (#84634)
`parseSlashCommandActionArgs` used a naive `startsWith` against the
configured slash prefix. When a skill name shares a prefix with a
built-in command (e.g. a skill named `config-check` vs the built-in
`/config`), the longer name was captured by the shorter built-in
handler and surfaced as an invalid action:

  ⚠️  /config is disabled. Set commands.config=true to enable.

Any skill whose name starts with a built-in command prefix
(`config-*`, `debug-*`, `models-*`, etc.) was unreachable via slash
invocation from any channel.

Fix: after the prefix match, require that the next character is
whitespace, a colon, or end-of-string. Otherwise the prefix
collided with a longer command name and we return `no-match` so the
longer handler — or the skill router — gets a chance to claim it.

Adds a regression test file `commands-slash-parse.test.ts` covering:
- `/config-check <args>` returns null (the reported case)
- `/configfoo` (no separator) returns null
- `/modelsy` returns null for the `/models` prefix
- `/config:json` still matches (colon is a valid boundary)
- `/config show enabled` still parses cleanly (whitespace boundary)
- empty body still returns the default action

Fixes #84572.

Co-authored-by: infracore <infracore@users.noreply.github.com>
2026-05-22 20:42:22 +01:00
zhang-guiping
63545693a0 fix(message-tool): normalize send body aliases (#84102) 2026-05-22 20:38:08 +01:00
Peter Steinberger
e0fda55cf7 docs: absorb maintainer docs sweep
Co-authored-by: Bob Du <i@bobdu.cc>
Co-authored-by: alitariksahin <alitariksah@gmail.com>
Co-authored-by: Jefsky <hwj3344@hotmail.com>
Co-authored-by: Musaab Hasan <m9.3b@Hotmail.com>
Co-authored-by: Intern Dev <dev@wukongai.io>
Co-authored-by: majin.nathan <majin.nathan@bytedance.com>
2026-05-22 20:29:10 +01:00
Peter Steinberger
d946a02a13 fix(gateway): coalesce provider auth rewarms
Coalesce provider auth-state rewarms after auth-profile failures and include event-loop delay in provider auth warm logs.
2026-05-22 20:28:13 +01:00
吴杨帆
88f50e8cd1 docs(config): quote bracket config paths (#83058) 2026-05-22 20:20:10 +01:00
Dallin Romney
b741ddb66f fix(tui): dismiss watchdog notice when response actually arrives (#77375)
* fix(tui): dismiss watchdog notice when response actually arrives

The streaming watchdog renders 'This response is taking longer than
expected. Send another message to continue.' after 30s without a chat
delta. If a delta or final then arrives — common for runs that are slow
but not stuck — the notice stays in the log alongside the recovered
response and contradicts what the user sees.

Track the notice by runId in the chat log via a new `addPendingSystem`
+ `dismissPendingSystem` pair (mirroring the existing pendingUsers
pattern) and dismiss it from `handleChatEvent` whenever any further chat
event for that run is processed. The watchdog's internal cleanup
(`activeChatRunId` reset, status idle, history reload) is unchanged.

Refs #67052, #69081 (closed). Prior attempt #69026 raised the threshold
and suppressed the notice entirely; this is the narrower fix that keeps
the warning useful for genuinely stuck runs.

* fix(tui): adapt pending notice to repeatable system entries

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-05-22 20:02:36 +01:00
Sebastien Tardif
99e44f623e fix(gateway): add .catch() to SIGTERM/SIGUSR1 signal handlers (#83131)
The SIGTERM handler's fire-and-forget IIFE can reject if the graceful
drain or tunnel-teardown throws. Without a catch, this becomes an
unhandled promise rejection. Add .catch() that logs the error and
falls back to a hard stop request. Same treatment for SIGUSR1.

Signed-off-by: Sebastien Tardif <sebtardif@ncf.ca>
2026-05-22 19:47:09 +01:00