Commit Graph

66940 Commits

Author SHA1 Message Date
wm0018
fcb135dfc1 docs(onboard): document 11 missing non-interactive CLI flags (#97753)
* docs(onboard): document 11 missing non-interactive CLI flags

* docs: correct token profile default wording

* docs: update generated docs map

---------

Co-authored-by: Vincent Koc <25068+vincentkoc@users.noreply.github.com>
2026-07-01 02:49:42 -07:00
wm0018
8a519a9abe docs(matrix): document missing streaming.progress mode, progress sub-fields, and mentionPatterns config (#98318)
* docs(matrix): document missing streaming.progress mode, progress sub-fields, and mentionPatterns config

* docs: clarify Matrix progress labels

---------

Co-authored-by: Vincent Koc <25068+vincentkoc@users.noreply.github.com>
2026-07-01 02:49:23 -07:00
Omar Shahine
c92c33d108 feat(imessage): native poll support — create, read, vote (#98421)
* feat(imessage): add native poll action

Wire the imsg CLI 'poll send' bridge command into the iMessage channel
message-tool action surface, mirroring the existing Discord poll action.
Adds the 'poll' action (gate: polls), a sendPoll runtime, selector-gated
capability advertisement (pollPayloadMessage), config type + zod schema,
regenerated channel metadata, docs, and tests.

* feat(imessage): read inbound polls, vote, and suppress vote echo

Builds on the native poll send action:

- Inbound polls now render to the agent as a readable line (question +
  numbered options + tallies) instead of the raw 0xFFFD balloon placeholder,
  so a received poll no longer reads as an empty message.
- New `poll-vote` action casts a vote via `imsg poll vote`, resolving a
  1-based option index / text / UUID to the poll's option identifier.
- message_tool_only echo guard: the model tends to narrate its choice in a
  text reply right after voting ("Blue."), which is redundant since the vote
  shows on the poll. A new `poll_vote_echo` suppression reason (alongside
  inbound_metadata_echo / internal_runtime_context_echo) drops a send/reply
  that exactly restates the just-cast vote, using the option label imsg
  returns. Extra content passes through untouched.

* fix(imessage): gate poll-vote on imsg poll.vote rpc capability

Released imsg carries the pollPayloadMessage selector (poll create) but
predates the poll.vote CLI/RPC. Gating both poll and poll-vote on that
selector alone would advertise a vote action the released CLI rejects.
Gate poll-vote additionally on the advertised poll.vote rpc method so this
plugin can ship ahead of the imsg release.

* fix(imessage): enforce poll.vote capability at execution, not just discovery

Codex review flagged the discovery gate as bypassable: a caller that already
knows action=poll-vote skips describeMessageTool and reaches handleAction
directly. Add the same imessageRpcSupportsMethod(status, 'poll.vote') check in
the poll-vote execution path (after assertPrivateApiEnabled), so a direct
dispatch on released imsg fails closed with a clear message instead of an
opaque CLI rejection. Adds a negative handleAction test.

* fix(imessage): harden native poll support

* fix(message): validate targets before channel discovery

* fix(message): validate targets before channel discovery

---------

Co-authored-by: Omar Shahine <lobster@users.noreply.github.com>
Co-authored-by: Omar Shahine <10343873+omarshahine@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-01 10:48:32 +01:00
Peter Steinberger
aae1189d90 test: repair hosted CI baseline assertions (#98533) 2026-07-01 10:34:23 +01:00
solodmd
cf2efbe5d5 docs(gateway): fix Telegram streaming default in config-channels.md (#98453)
The config example in docs/gateway/config-channels.md incorrectly
listed streaming default as "off". The actual runtime default is
"partial", as confirmed by the Telegram plugin's default resolver.

docs/channels/telegram.md already correctly documents the default
as "partial".

Co-authored-by: Claude <noreply@anthropic.com>
2026-07-01 02:33:24 -07:00
Nikhil Patel
2d9aa92d7e docs(config-agents): correct built-in alias table for opus and gpt (#96375)
The built-in alias shorthands table listed stale model ids that no longer
match src/config/defaults.ts (DEFAULT_MODEL_ALIASES):

  opus: anthropic/claude-opus-4-6 -> anthropic/claude-opus-4-8
  gpt:  openai/gpt-5.5            -> openai/gpt-5.4

These now match defaults.ts and the help/faq-models alias table, and resolve
an internal contradiction on this same page (its runtime-policy example already
uses anthropic/claude-opus-4-8).
2026-07-01 02:32:14 -07:00
Chris Anderson
f3ac874fd2 Recover archived (.reset) session transcripts in memory hook + session-logs skill (#71537)
* fix(session-memory): recover archived reset transcripts

* docs(session-logs): include archived transcripts in skill examples

Plain .jsonl globs miss .jsonl.reset.*Z and .jsonl.deleted.*Z files,
which still contain real transcript content. Add explicit guidance and
a list_session_transcripts helper so searches can opt in to full
history when needed.

Pairs with the session-memory recover-from-archive fix in the same
branch.

* docs(session-logs): scope nullglob and use while-read in helper

Address Greptile review feedback on PR #71537:

* nullglob is now saved and restored inside list_session_transcripts so
  the helper does not change the caller shell environment when sourced.
* Replace 'for f in $(list_session_transcripts)' tip with a 'while
  IFS= read -r' loop so paths with spaces or other IFS characters are
  handled correctly. Include a worked example using the same date+size
  listing the surrounding section already documents.

Doc only, no runtime behavior change.
2026-07-01 02:07:58 -07:00
Josh Avant
ba5244c189 fix: advertise route-aware LAN Control UI links (#98482)
* Route LAN pairing URLs by default route

* Advertise route-aware LAN Control UI links

* Fix route-aware LAN test mocks

* Narrow advertised LAN SDK export
2026-07-01 04:02:12 -05:00
Yzx
39898fe91b test(memory): cover live manager after CLI reindex (#96094) 2026-07-01 01:59:20 -07:00
ooiuuii
b334fbf129 fix: hide expired pairing QR cards in Control UI (#98049)
* Hide expired pairing QR codes

* Schedule pairing QR expiry refresh
2026-07-01 01:59:14 -07:00
xydt-tanshanshan
5f80f12a95 [AI] fix(feishu): guard partial channelRuntime in monitor startup (#94013)
* [AI] fix(feishu): guard partial channelRuntime in monitor startup

When the gateway passes a partial channelRuntime (ChannelRuntimeSurface
with only runtimeContexts but no inbound/debounce), the ?? operator in
monitor.account.ts selects it over the full local runtime, causing
monitor startup to crash on channelRuntime.debounce access.

Mirror the same ?.inbound guard pattern from bot.ts:739 (PR #93466)
to monitor.account.ts:487. When the runtime lacks inbound, fall back
to getFeishuRuntime().channel which always has the full surface.

No test: the guard mirrors an already-merged pattern (#93466) and only
affects the partial-runtime edge case that requires a gateway context.

Related to #92595

* [AI] test(feishu): add channelRuntime guard tests for monitorSingleAccount

Three test cases for the channelRuntime guard at
monitor.account.ts:489:
1. Partial channelRuntime (no inbound) → falls back to local runtime
2. Full channelRuntime with inbound → uses provided runtime
3. No channelRuntime (undefined) → falls back to local runtime

Related to #92595
2026-07-01 01:58:58 -07:00
tayoun
5bbd74266d fix(memory): skip raw snippets during promotion (#94636) 2026-07-01 01:57:27 -07:00
sunlit-deng
9bf338f3a1 fix(copilot): guard against undefined runtime.state during cli-metadata registration (#95229)
Co-authored-by: sunlit-deng <sunlit.deng@example.com>
2026-07-01 01:56:51 -07:00
NIO
7391024106 fix(config): warn when permission hardening fails during recovery (#95348)
Surface chmod failures during config backup restore, last-known-good
promotion/recovery, and prefix recovery instead of swallowing them silently.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-01 01:56:37 -07:00
lsr911
4a96c06615 fix(minimax): bound OAuth JSON response via shared provider reader (#96322)
Use readProviderJsonResponse (shared 16 MiB default cap) instead of
unbounded response.json() for MiniMax OAuth authorization code endpoint.

Signed-off-by: lsr911 <liao.shirong@xydigit.com>
Co-authored-by: Claude <noreply@anthropic.com>
2026-07-01 01:54:42 -07:00
NIO
0ba41effeb fix docs-list-mdx-pages (#95230) 2026-07-01 01:51:50 -07:00
Josh Avant
f55abc0606 Fix Android QR scan pairing flow (#98483) 2026-07-01 03:27:02 -05:00
Peter Lee
b9ae0a76fa test: prefer shared temp dir helpers in config, gateway, cron, crestodian, and state tests (#96711)
* fix: add temp dir cleanup to 14 P0 test files (Group A)

* fix: restore os import and fix fs.rmSync call in temp dir cleanup

* fix: use shared temp dir helpers in config, gateway, cron, crestodian, and state tests

* fix(test): rename underscore-prefixed temp dir vars and remove unused imports

* fix(test): remove unused path import in crestodian audit test

* fix(test): reorder expected plans to match buildVitestRunPlans output after rebase
2026-07-01 01:24:21 -07:00
dwc1997
dff572d78d test(agents): add unit tests for thinking block detection (#98370) 2026-07-01 01:23:30 -07:00
Yzx
7b8f50d229 fix: report codex chatgpt status auth (#91240) 2026-07-01 01:23:21 -07:00
Vincent Koc
ab754ceb38 docs(skills): parameterize landable bug sweeps (#98494) 2026-07-01 01:18:57 -07:00
sunlit-deng
95aced10b0 fix(agents): recover thinking errors from provider body (#98411) 2026-07-01 01:13:24 -07:00
dwc1997
d18b843a47 test(shared): add unit tests for account enabled guard (#98395) 2026-07-01 01:10:57 -07:00
Yuval Dinodia
7c5ce40598 fix(cron): keep provider-owned CLI sessions across the daily default reset (#98356)
The provider-owned CLI session exemption added for the gateway agent.run path
in #97931 was not applied to the non-gateway session resolvers. Scheduled
isolated-agent cron jobs run through runCronIsolatedAgentTurn ->
resolveCronSession, and the local openclaw command runs through resolveSession;
both called evaluateSessionFreshness directly with no provider-owned guard.

Under the default reset config a persistent-target cron job on a CLI runtime
(claude-cli, codex, gemini-cli) therefore rotated its session after the daily
boundary, minting a new sessionId and dropping the cliSessionBindings, so the
agent silently lost its underlying CLI conversation every morning and the
transcript was split. Because resolveCronSession also backs the heartbeat
runner, that surface was affected too.

Route both resolvers through the same
resetPolicy.configured !== true && hasProviderOwnedSession(entry) skip the
gateway and inbound paths already use. Explicit session.reset and configured
resets still rotate these sessions, and the command path still rotates when the
terminal main transcript is newer than the registry.
2026-07-01 01:10:21 -07:00
lizeyu
15bb4874bf fix(ports): validate lsof PID parsing before assignment (#98371)
* fix(ports): validate lsof PID parsing before assignment

Add Number.isFinite guard on lsof 'p' line PID parsing in
parseLsofOutput, consistent with the netstat branch in the same
function which already validates with Number.isNaN.

While the downstream if (current.pid) truthiness check catches
NaN (falsy), adding validation at the parse site is defense-in-
depth and eliminates an inconsistency within the same function.

* test(ports): add edge case tests for parseLsofOutput

Add test coverage for malformed lsof 'p' lines (empty PID, non-numeric
suffix), zero PID, and empty input to verify the Number.isFinite guard
correctly filters invalid entries.
2026-07-01 01:08:20 -07:00
Sahibzada
7cf3a56ade fix(agents): warn on cron announce skip (#90566)
* fix(agents): warn on cron announce skip

* fix(agents): gate cron announce skip warnings
2026-07-01 01:08:11 -07:00
pick-cat
302524bbd0 fix(infra): guard delivery queue inflate against corrupted entry_json (#98354)
* fix(infra): guard delivery queue inflate against corrupted entry_json

* fix(infra): use toSorted in delivery queue test
2026-07-01 01:07:44 -07:00
Harjoth Khara
de50acd749 fix(ui): collapse duplicate assistant groups during segmented streaming (#92063)
Fold a contiguous run of in-flight stream/reading-indicator items into one
assistant group (one avatar/footer, segments stacked as bubbles) so a segmented
streaming reply no longer flashes a separate avatar+footer per segment.
Render-layer only: the shared ChatItem types and build-chat-items.ts are
untouched, and a message/group/divider breaks the run so interleaved tool calls
keep their own groups.

Refs #63956

AI-assisted (Claude Code).

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 01:05:51 -07:00
ooiuuii
53557f9618 Fix extension exec process-tree termination (#98340) 2026-07-01 01:05:41 -07:00
joshavant
491a6c846d fix(android): hide status bar in release screenshots 2026-07-01 03:04:52 -05:00
dwc1997
cc8a454d7e test(infra): add unit tests for SQLite user_version pragma helper (#98369)
* test(infra): add unit tests for SQLite user_version pragma helper

* ci: trigger re-review
2026-07-01 01:04:29 -07:00
TUARAN
fadf76d05f fix(gateway): hint missing external plugin for web login (#90517)
* fix(gateway): hint missing official plugin for web login

* fix(gateway): keep missing web login hints actionable
2026-07-01 01:04:09 -07:00
Masato Hoshino
76f9b6d837 fix(gateway): surface systemd start-limit exhaustion (#98291)
* fix(gateway): surface systemd start-limit exhaustion

* fix(gateway): avoid start-limit false positive for exit 78
2026-07-01 01:01:15 -07:00
Spencer Fuller
a9945d1e7d Fix active-memory stale ops summaries (#95888)
Co-authored-by: costaff <costaff-lapclaw-001@efiducian.com>
2026-07-01 00:59:47 -07:00
Sergio Cadavid
1f754189b4 fix(agents): preserve runtime settings overrides (#92237) 2026-07-01 00:59:05 -07:00
Vincent Koc
6f908262cc Merge branch 'main' of https://github.com/openclaw/openclaw
* 'main' of https://github.com/openclaw/openclaw:
  fix(status): surface unregistered memory embedding providers (#97968)
2026-07-01 00:53:07 -07:00
Vincent Koc
8516018956 refactor(sessions): centralize export transcript parsing 2026-07-01 00:48:20 -07:00
Vincent Koc
7b313e4cc1 refactor(security): centralize safe-bin config normalization 2026-07-01 00:48:20 -07:00
Vincent Koc
e731d4078f refactor(agents): reuse process stdin writer 2026-07-01 00:47:54 -07:00
Vincent Koc
10d1af6867 refactor(sessions): centralize scoped store path resolution 2026-07-01 00:47:54 -07:00
Masato Hoshino
0a9708ed0f fix(status): surface unregistered memory embedding providers (#97968) 2026-07-01 00:46:49 -07:00
snowzlmbot
b63e06f68a fix(llm): preserve structured tool result replay
Preserve structured tool-result replay text across provider transports while keeping provider-facing redaction and Anthropic media ordering intact.

Thanks @snowzlmbot!
2026-06-30 23:44:02 -07:00
Peter Steinberger
b2355ef6a2 fix(ios): improve light and dark appearance contrast (#98443) 2026-07-01 07:31:42 +01:00
Josh Avant
6495358f17 fix: Android setup codes accept local mDNS gateway hosts (#98439)
* Fix Android mDNS setup-code cleartext policy

* Align Android gateway diagnostics cleartext guidance
2026-07-01 01:18:49 -05:00
Josh Avant
0c7bac34ae fix(ios): classify TLS fingerprint timeouts (#98429)
* fix(ios): classify gateway TLS fingerprint timeouts

* Add discovered TLS trust regression test
2026-07-01 01:06:13 -05:00
Ayaan Zaidi
fc5ba0e58b test(gateway): remove cron redaction casts 2026-06-30 22:52:26 -07:00
snowzlmbot
a68f7200d8 fix(cron): strip nested job diagnostics from webhook payloads 2026-06-30 22:52:26 -07:00
snowzlmbot
94e949f46d fix(cron): preserve action-required command output 2026-06-30 22:52:26 -07:00
Peter Steinberger
c52583a022 feat(openai): add GPT-5.6 series support (#98333)
* feat(openai): add GPT-5.6 series support

* docs: refresh map for GPT-5.6

* fix(openai): preserve GPT-5.6 thinking metadata

* fix(codex): sync managed app server version

* fix(codex): sync managed app server version

* fix(openai): account for GPT-5.6 cache writes

---------

Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-01 06:48:57 +01:00
Masato Hoshino
2c7e989686 fix(doctor): recover legacy cron archive across devices (#98217)
* fix(doctor): recover legacy cron archive across devices

* fix(doctor): harden legacy cron archive retries

* fix(doctor): canonicalize shipped cron retry shape

* fix(doctor): persist legacy cron migration receipts

---------

Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-01 06:39:11 +01:00