Commit Graph

3532 Commits

Author SHA1 Message Date
Tak Hoffman 9f0305420a
docs: add beta blocker contributor guidance (#55199)
* docs: add beta blocker contributor guidance

* fix: tighten beta blocker labeling and flaky config test
2026-03-26 09:31:59 -05:00
Shakker e3660f265c
docs: sync config baseline 2026-03-26 13:35:48 +00:00
Tak Hoffman 68c6abe32b
docs: add beta release testing guidance 2026-03-26 07:34:08 -05:00
Tyler Yust 4c85fd8569
BlueBubbles: enrich group participants with local Contacts names (#54984)
* BlueBubbles: enrich group participants with Contacts names

* BlueBubbles: gate contact enrichment behind opt in config
2026-03-26 18:38:37 +09:00
Jacob Tomlinson f92c92515b
fix(extensions): route fetch calls through fetchWithSsrFGuard (#53929)
* fix(extensions): route fetch calls through fetchWithSsrFGuard

Replace raw fetch() with fetchWithSsrFGuard in BlueBubbles, Mattermost,
Nextcloud Talk, and Thread Ownership extensions so outbound requests go
through the shared DNS-pinning and network-policy layer.

BlueBubbles: thread allowPrivateNetwork from account config through all
fetch call sites (send, chat, reactions, history, probe, attachments,
multipart). Add _setFetchGuardForTesting hook for test overrides.

Mattermost: add guardedFetchImpl wrapper in createMattermostClient that
buffers the response body before releasing the dispatcher. Handle
null-body status codes (204/304).

Nextcloud Talk: wrap both sendMessage and sendReaction with
fetchWithSsrFGuard and try/finally release.

Thread Ownership: add fetchWithSsrFGuard and ssrfPolicyFromAllowPrivateNetwork
to the plugin SDK surface; use allowPrivateNetwork:true for the
Docker-internal forwarder.

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

* fix(extensions): improve null-body handling and test harness cleanup

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

* fix(bluebubbles): default to strict SSRF policy when allowPrivateNetwork is unset

Callers that omit allowPrivateNetwork previously got undefined policy,
which caused blueBubblesFetchWithTimeout to fall through to raw fetch
and bypass the SSRF guard entirely.

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

* fix(bluebubbles): thread allowPrivateNetwork through action and monitor call sites

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

* fix(mattermost,nextcloud-talk): add allowPrivateNetwork config for self-hosted/LAN deployments

* fix: regenerate config docs baseline for new allowPrivateNetwork fields

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 02:04:54 -07:00
pomelo dad68d319b
Remove Qwen OAuth integration (qwen-portal-auth) (#52709)
* Remove Qwen OAuth integration (qwen-portal-auth)

Qwen OAuth via portal.qwen.ai is being deprecated by the Qwen team due
to traffic impact on their primary Qwen Code user base. Users should
migrate to the officially supported Model Studio (Alibaba Cloud Coding
Plan) provider instead.

Ref: https://github.com/openclaw/openclaw/issues/49557

- Delete extensions/qwen-portal-auth/ plugin entirely
- Remove qwen-portal from onboarding auth choices, provider aliases,
  auto-enable list, bundled plugin defaults, and pricing cache
- Remove Qwen CLI credential sync (external-cli-sync, cli-credentials)
- Remove QWEN_OAUTH_MARKER from model auth markers
- Update docs/providers/qwen.md to redirect to Model Studio
- Update model-providers docs (EN + zh-CN) to remove Qwen OAuth section
- Regenerate config and plugin-sdk baselines
- Update all affected tests

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>

* Clean up residual qwen-portal references after OAuth removal

* Add migration hint for deprecated qwen-portal OAuth provider

* fix: finish qwen oauth removal follow-up

---------

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Co-authored-by: Frank Yang <frank.ekn@gmail.com>
2026-03-26 16:32:34 +08:00
Ayaan Zaidi 83e6c12f15
build: update plugin sdk api baseline 2026-03-26 13:52:52 +05:30
kevinlin-openai 432d5f863c
fix: add slack upload-file action (#54987) (thanks @kevinlin-openai)
* feat(slack): add upload-file action

Co-authored-by: Codex <noreply@openai.com>

* fix(slack): guard upload-file routing

Co-authored-by: Codex <noreply@openai.com>

* fix(slack): tighten upload-file validation

---------

Co-authored-by: kevinlin-openai <kevin@dendron.so>
Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-03-26 13:37:58 +05:30
Ayaan Zaidi 78584413ec
docs: refresh config baseline for microsoft foundry 2026-03-26 12:45:47 +05:30
wenmeng zhou 143275687a
Docs: rename modelstudio.md to qwen_modelstudio.md, add Standard API endpoints (#54407)
* Docs: rename modelstudio.md to qwen_modelstudio.md, add Standard API endpoints

* refine docs

* Docs: fix broken link in providers/index.md after modelstudio rename

* Docs: add redirect from /providers/modelstudio to /providers/qwen_modelstudio

* Docs: adjust the order in index.md

* docs: rename modelstudio to qwen_modelstudio, add Standard API endpoints (#54407) (thanks @wenmengzhou)

---------

Co-authored-by: George Zhang <georgezhangtj97@gmail.com>
2026-03-26 00:11:28 -07:00
George Zhang 6cbd2d36f8
Revert "feat: add video generation core infrastructure and extend image generation parameters (#53681)" (#54943)
This reverts commit 4cb8dde894.
2026-03-25 23:00:14 -07:00
Ted Li 4f297a094a
docs: add WeChat channel via official Tencent iLink Bot plugin (#52131) (thanks @MonkeyLeeT)
* docs: add WeChat channel via official Tencent iLink Bot plugin

Add WeChat to the README channel lists and setup section.

Uses the official Tencent-published plugin @tencent-weixin/openclaw-weixin
which connects via the iLink Bot API (QR code login, long-poll).
Requires WeChat 8.0.70+ with the ClawBot plugin enabled; the plugin
is being rolled out gradually by Tencent.

Covers: setup steps, capabilities (DM-only, media up to 100 MB,
multi-account, pairing authorization, typing indicators, config path),
and the context token restart caveat.

* docs: update WeChat plugin install for v2.0 compatibility

- Add version compatibility note (v2.x requires OpenClaw >= 2026.3.22,
  @legacy tag for older hosts)
- Add plugins.allow step (required since plugins.allow was introduced)

* docs: drop manual plugins.allow/enable steps (handled by plugins install)

* docs: fix multi-account instruction to require explicit --account id

* docs: trim WeChat section to match neighboring channels, fix pairing link

* docs: sync WeChat channel docs

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-03-26 09:07:01 +05:30
xieyongliang 4cb8dde894
feat: add video generation core infrastructure and extend image generation parameters (#53681)
* feat: add video generation core infrastructure and extend image generation parameters

Add full video generation capability to OpenClaw core:

- New `video_generate` agent tool with support for prompt, duration, aspect ratio,
  resolution, seed, watermark, I2V (first/last frame), camerafixed, and draft mode
- New `VideoGenerationProvider` plugin SDK type and `registerVideoGenerationProvider` API
- New `src/video-generation/` module (types, runtime with fallback, provider registry)
- New `openclaw/plugin-sdk/video-generation` export for external plugins
- 200MB max file size for generated videos (vs default 5MB for images)

Extend image generation with additional parameters:
- `seed`, `watermark`, `guidanceScale`, `optimizePrompt`, `providerOptions`
- New `readBooleanParam()` helper in tool common utilities

Update plugin registry, contracts, and all test mocks to include
`videoGenerationProviders` and `videoGenerationProviderIds`.

Made-with: Cursor

* fix: validate aspect ratio against target provider when model override is set

* cleanup: remove redundant ?? undefined from video/image generate tools

* chore: regenerate plugin SDK API baseline after video generation additions

---------

Co-authored-by: yongliang.xie <yongliang.xie@bytedance.com>
2026-03-25 18:45:06 -07:00
gumclaw 208ff68298
fix: allow msteams feedback and welcome config keys (#54679)
Merged via squash.

Prepared head SHA: f56a15ddea
Co-authored-by: gumclaw <265388744+gumclaw@users.noreply.github.com>
Co-authored-by: altaywtf <9790196+altaywtf@users.noreply.github.com>
Reviewed-by: @altaywtf
2026-03-26 03:00:52 +03:00
adzendo 19d91aaa8f
fix: make buttons schema optional in message tool (#54418)
Merged via squash.

Prepared head SHA: 0805c095e9
Co-authored-by: adzendo <246828680+adzendo@users.noreply.github.com>
Co-authored-by: altaywtf <9790196+altaywtf@users.noreply.github.com>
Reviewed-by: @altaywtf
2026-03-26 02:43:15 +03:00
Erhhung Yuan b6f631e045
fix(schema): tools.web.fetch.maxResponseBytes #53397 (#53401)
Merged via squash.

Prepared head SHA: 5d10a98bdb
Co-authored-by: erhhung <5808864+erhhung@users.noreply.github.com>
Co-authored-by: altaywtf <9790196+altaywtf@users.noreply.github.com>
Reviewed-by: @altaywtf
2026-03-26 02:40:00 +03:00
Mikhail Beliakov fd934a566b
feat(cli): add json schema to cli tool (#54523)
Merged via squash.

Prepared head SHA: 39c15ee70d
Co-authored-by: kvokka <15954013+kvokka@users.noreply.github.com>
Co-authored-by: altaywtf <9790196+altaywtf@users.noreply.github.com>
Reviewed-by: @altaywtf
2026-03-26 02:30:32 +03:00
Devin Robison b7d70ade3b
Fix/telegram writeback admin scope gate (#54561)
* fix(telegram): require operator.admin for legacy target writeback persistence

* Address claude feedback

* Update extensions/telegram/src/target-writeback.ts

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Remove stray brace

* Add updated docs

* Add missing test file, address codex concerns

* Fix test formatting error

* Address comments, fix tests

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-03-25 12:12:09 -06:00
M1a0 7847e67f8a
plugin-runtime: expose runHeartbeatOnce in system API (#40299)
* plugin-runtime: expose runHeartbeatOnce in system API

Plugins that enqueue system events and need the agent to deliver
responses to the originating channel currently have no way to
override the default `heartbeat.target: "none"` behaviour.

Expose `runHeartbeatOnce` in the plugin runtime `system` namespace
so plugins can trigger a single heartbeat cycle with an explicit
`heartbeat: { target: "last" }` override — the same pattern the
cron service already uses (see #28508).

Changes:
- Add `RunHeartbeatOnceOptions` type and `runHeartbeatOnce` to
  `PluginRuntimeCore.system` (types-core.ts)
- Wire the function through a thin wrapper in runtime-system.ts
- Update the test-utils plugin-runtime mock

Made-with: Cursor

* feat(plugins): expose runHeartbeatOnce in system API (#40299) (thanks @loveyana)

---------

Co-authored-by: George Zhang <georgezhangtj97@gmail.com>
2026-03-25 10:47:01 -07:00
liyuan97 e2e9f979ca
feat(minimax): add image generation provider and trim model catalog to M2.7 (#54487)
* feat(minimax): add image generation and TTS providers, trim TUI model list

Register MiniMax image-01 and speech-2.8 models as plugin providers for
the image_generate and TTS tools. Both resolve CN/global base URLs from
the configured model endpoint origin.

- Image generation: base64 response, aspect-ratio support, image-to-image
  via subject_reference, registered for minimax and minimax-portal
- TTS: speech-2.8-turbo (default) and speech-2.8-hd, hex-encoded audio,
  voice listing via get_voice API, telephony PCM support
- Add MiniMax to TTS auto-detection cascade (after ElevenLabs, before
  Microsoft) and TTS config section
- Remove MiniMax-VL-01, M2, M2.1, M2.5 and variants from TUI picker;
  keep M2.7 and M2.7-highspeed only (backend routing unchanged)

* feat(minimax): trim legacy model catalog to M2.7 only

Cherry-picked from temp/feat/minimax-trim-legacy-models (949ed28).
Removes MiniMax-VL-01, M2, M2.1, M2.5 and variants from the model
catalog, model order, modern model matchers, OAuth config, docs, and
tests. Keeps only M2.7 and M2.7-highspeed.

Conflicts resolved:
- provider-catalog.ts: removed MINIMAX_TUI_MODELS filter (no longer
  needed since source array is now M2.7-only)
- index.ts: kept image generation + speech provider registrations
  (added by this branch), moved media understanding registrations
  earlier (as intended by the cherry-picked commit)

* fix(minimax): update discovery contract test to reflect M2.7-only catalog

Cherry-picked from temp/feat/minimax-trim-legacy-models (2c750cb).

* feat(minimax): add web search provider and register in plugin entry

* fix(minimax): resolve OAuth credentials for TTS speech provider

* MiniMax: remove web search and TTS providers

* fix(minimax): throw on empty images array after generation failure

* feat(minimax): add image generation provider and trim catalog to M2.7 (#54487) (thanks @liyuan97)

---------

Co-authored-by: tars90percent <tars@minimaxi.com>
Co-authored-by: George Zhang <georgezhangtj97@gmail.com>
2026-03-25 09:29:35 -07:00
Peter Steinberger ea08f2eb8c
fix(runtime): support Node 22.14 installs 2026-03-25 06:22:18 -07:00
Peter Steinberger 39ad51426c
test: add Open WebUI docker smoke 2026-03-25 05:28:51 -07:00
Peter Steinberger d874f3970a
build: prepare 2026.3.24-beta.1 2026-03-25 04:41:26 -07:00
Gracie Gould 3e2e9bc238
fix: isolate session:patch hook payload (#53880) (thanks @graciegould)
* gateway: make session:patch hook typed and non-blocking

* gateway(test): add session:patch hook coverage

* docs(gateway): clarify session:patch security note

* fix: address review feedback on session:patch hook

Remove unused createInternalHookEvent import and fix doc example
to use inline event.type check matching existing hook examples.

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

* fix: isolate hook payload to prevent mutation leaking into response

Shallow-copy sessionEntry and patch in the session:patch hook event
so fire-and-forget handlers cannot mutate objects used by the
response path.

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

* fix: isolate session:patch hook payload (#53880) (thanks @graciegould)

---------

Co-authored-by: “graciegould” <“graciegould5@gmail.com”>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-03-25 15:59:38 +05:30
Peter Steinberger 2566d6b300 fix: finish feishu open-group docs and baselines (#54058) (thanks @byungsker) 2026-03-24 23:09:04 -07:00
Jealous 2c3cf4f387 chore(tts): rename VOICE_BUBBLE identifiers to OPUS and update docs 2026-03-25 10:49:21 +05:30
Josh Avant 10161c2d79
Plugins: enforce terminal hook decision semantics for tool/message guards (#54241)
* Plugins: enforce terminal hook decision policies

* Tests: assert terminal hook behavior in integration paths

* Docs: clarify terminal hook decision semantics

* Docs: add hook guard semantics to plugin guides

* Tests: isolate outbound format label expectations

* changelog

Signed-off-by: joshavant <830519+joshavant@users.noreply.github.com>

---------

Signed-off-by: joshavant <830519+joshavant@users.noreply.github.com>
2026-03-25 00:11:13 -05:00
Tak Hoffman 9c7823350b
feat: add /tools runtime availability view (#54088)
* test(memory): lock qmd status counts regression

* feat: make /tools show what the agent can use right now

* fix: sync web ui slash commands with the shared registry

* feat: add profile and unavailable counts to /tools

* refine: keep /tools focused on available tools

* fix: resolve /tools review regressions

* fix: honor model compat in /tools inventory

* fix: sync generated protocol models for /tools

* fix: restore canonical slash command names

* fix: avoid ci lint drift in google helper exports

* perf: stop computing unused /tools unavailable counts

* docs: clarify /tools runtime behavior
2026-03-24 21:09:51 -05:00
Vincent Koc d10669629d feat(gateway): make openai compatibility agent-first 2026-03-24 18:06:24 -07:00
Peter Steinberger 3a1b517581 fix: repair CI regression checks 2026-03-25 00:20:24 +00:00
Vincent Koc eaad4ad1be
feat(gateway): add missing OpenAI-compatible endpoints (models and embeddings) (#53992)
* feat(gateway): add OpenAI-compatible models and embeddings

* docs(gateway): clarify model list and agent routing

* Update index.md

* fix(gateway): harden embeddings HTTP provider selection

* fix(gateway): validate compat model overrides

* fix(gateway): harden embeddings and response continuity

* fix(gateway): restore compat model id handling
2026-03-24 16:53:51 -07:00
Peter Steinberger 33e9e485b8
refactor: clarify docker setup cli phases 2026-03-24 16:46:12 -07:00
Vincent Koc 783cbd1e9d fix(ci): refresh plugin sdk baseline and formatting 2026-03-24 11:45:37 -07:00
David Guttman aa91000a5d
feat(discord): add autoThreadName 'generated' strategy (#43366)
* feat(discord): add autoThreadName 'generated' strategy

Adds async thread title generation for auto-created threads:
- autoThread: boolean - enables/disables auto-threading
- autoThreadName: 'message' | 'generated' - naming strategy
- 'generated' uses LLM to create concise 3-6 word titles
- Includes channel name/description context for better titles
- 10s timeout with graceful fallback

* Discord: support non-key auth for generated thread titles

* Discord: skip fallback auto-thread rename

* Discord: normalize generated thread title first content line

* Discord: split thread title generation helpers

* Discord: tidy thread title generation constants and order

* Discord: use runtime fallback model resolution for thread titles

* Discord: resolve thread-title model aliases

* Discord: fallback thread-title model selection to runtime defaults

* Agents: centralize simple completion runtime

* fix(discord): pass apiKey to complete() for thread title generation

The setRuntimeApiKey approach only works for full agent runs that use
authStorage.getApiKey(). The pi-ai complete() function expects apiKey
directly in options or falls back to env vars — it doesn't read from
authStorage.runtimeOverrides.

Fixes thread title generation for Claude/Anthropic users.

* fix(agents): return exchanged Copilot token from prepareSimpleCompletionModel

The recent thread-title fix (3346ba6) passes prepared.auth.apiKey to
complete(). For github-copilot, this was still the raw GitHub token
rather than the exchanged runtime token, causing auth failures.

Now setRuntimeApiKeyForCompletion returns the resolved token and
prepareSimpleCompletionModel includes it in auth.apiKey, so both the
authStorage path and direct apiKey pass-through work correctly.

* fix(agents): catch auth lookup exceptions in completion model prep

getApiKeyForModel can throw for credential issues (missing profile, etc).
Wrap in try/catch to return { error } for fail-soft handling rather than
propagating rejected promises to callers like thread title generation.

* Discord: strip markdown wrappers from generated thread titles

* Discord/agents: align thread-title model and local no-auth completion headers

* Tests: import fresh modules for mocked thread-title/simple-completion suites

* Agents: apply exchanged Copilot baseUrl in simple completions

* Discord: route thread runtime imports through plugin SDK

* Lockfile: add Discord pi-ai runtime dependency

* Lockfile: regenerate Discord pi-ai runtime dependency entries

* Agents: use published Copilot token runtime module

* Discord: refresh config baseline and lockfile

* Tests: split extension runs by isolation

* Discord: add changelog for generated thread titles (#43366) (thanks @davidguttman)

---------

Co-authored-by: Onur Solmaz <onur@textcortex.com>
Co-authored-by: Onur Solmaz <2453968+osolmaz@users.noreply.github.com>
2026-03-24 16:27:19 +01:00
HollyChou c84c630b4c
fix(docs): correct json55 typo to json5 in IRC channel docs (#50831) (#50842)
Merged via squash.

Prepared head SHA: 0f743bf472
Co-authored-by: Hollychou924 <128659251+Hollychou924@users.noreply.github.com>
Co-authored-by: altaywtf <9790196+altaywtf@users.noreply.github.com>
Reviewed-by: @altaywtf
2026-03-24 16:20:49 +03:00
Sid Uppal cd90130877
msteams: implement Teams AI agent UX best practices (#51808)
Migrates the Teams extension from @microsoft/agents-hosting to the official Teams SDK (@microsoft/teams.apps + @microsoft/teams.api) and implements Microsoft's AI UX best practices for Teams agents.

- AI-generated label on all bot messages (Teams native badge + thumbs up/down)
- Streaming responses in 1:1 chats via Teams streaminfo protocol
- Welcome card with configurable prompt starters on bot install
- Feedback with reflective learning (negative feedback triggers background reflection)
- Typing indicators for personal + group chats (disabled for channels)
- Informative status updates (progress bar while LLM processes)
- JWT validation via Teams SDK createServiceTokenValidator
- User-Agent: teams.ts[apps]/<sdk-version> OpenClaw/<version> on outbound requests
- Fix copy-pasted image downloads (smba.trafficmanager.net auth allowlist)
- Pre-parse auth gate (reject unauthenticated requests before body parsing)
- Reflection dispatcher lifecycle fix (prevent leaked dispatchers)
- Colon-safe session filenames (Windows compatibility)
- Cooldown cache eviction (prevent unbounded memory growth)

Closes #51806
2026-03-23 22:03:39 -07:00
Tak Hoffman 8c89d0e7cd
tests: add boundary coverage for media delivery (#53361)
* tests: add boundary coverage for media delivery

* tests: isolate telegram outbound adapter transport

* tests: harden telegram webhook certificate assertion

* tests: fix guardrail false positives on rebased branch
2026-03-23 23:37:34 -05:00
Peter Steinberger ce49d8bca9
fix: verify global npm correction installs 2026-03-23 21:04:08 -07:00
Peter Steinberger dd2361a4c4 docs: refresh plugin-sdk api baseline 2026-03-24 03:20:51 +00:00
Peter Steinberger 630f1479c4
build: prepare 2026.3.23-2 2026-03-23 20:04:42 -07:00
Peter Steinberger 0cbf6d5fed fix: land cron tz one-shot handling and prerelease config warnings (#53224) (thanks @RolfHegr) 2026-03-23 19:38:04 -07:00
Peter Steinberger 9334015262
fix: ship bundled plugin runtime sidecars 2026-03-23 17:38:08 -07:00
Peter Steinberger ffd722bc2c
build: harden local release verification 2026-03-23 17:38:08 -07:00
Vincent Koc 19295994f3 fix(ci): stabilize whatsapp extension checks 2026-03-23 15:50:19 -07:00
George Zhang ade0182ae0
feat(modelstudio): add standard (pay-as-you-go) DashScope endpoints for Qwen (#43878)
Add Standard API Key auth methods for China (dashscope.aliyuncs.com)
and Global/Intl (dashscope-intl.aliyuncs.com) pay-as-you-go endpoints
alongside the existing Coding Plan (subscription) endpoints.

Also updates group label to 'Qwen (Alibaba Cloud Model Studio)' and
fixes glm-4.7 -> glm-5 in Coding Plan note messages.

Co-authored-by: wenmeng zhou <wenmengzhou@users.noreply.github.com>
2026-03-23 14:35:19 -07:00
betoblair 1c7e98de16
docs(feishu): replace botName with name in config examples (#52753)
Merged via squash.

Prepared head SHA: 5237726c9c
Co-authored-by: haroldfabla2-hue <229189334+haroldfabla2-hue@users.noreply.github.com>
Co-authored-by: altaywtf <9790196+altaywtf@users.noreply.github.com>
Reviewed-by: @altaywtf
2026-03-23 23:48:33 +03:00
Peter Steinberger 80bd5ba728
fix(release): fail empty control ui tarballs 2026-03-23 11:03:14 -07:00
Vincent Koc 3fe2f0a550 docs: fix CLI command tree, SDK import path, and tool group listing
- Remove non-existent 'secrets migrate' from CLI command tree
- Add actual secrets subcommands: audit, configure, apply
- Add missing plugin subcommands: inspect, uninstall, update, marketplace list
- Fix plugins info -> inspect (actual command name)
- Add message send and broadcast subcommands to command tree
- Remove misleading deprecated import from sdk-overview
- Add sessions_yield and subagents to group:sessions tool group docs
- Fix formatting
2026-03-23 10:40:41 -07:00
Vincent Koc d1c95c84b5 docs: fix nav ordering, missing pages, and stale model references
- Sort providers alphabetically in docs.json nav
- Sort channels alphabetically in docs.json nav (slack before synology-chat)
- Add install/migrating-matrix to Maintenance nav section (was orphaned)
- Remove zh-CN/plugins/architecture from nav (file does not exist)
- Add Voice Call to channels index page
- Add missing providers to providers index (DeepSeek, GitHub Copilot, OpenCode Go, Synthetic)
- Sort providers index alphabetically
- Update stale claude-3-5-sonnet model reference to claude-sonnet-4-6 in webhook docs
2026-03-23 10:20:15 -07:00
Onur Solmaz 8ed33c2aff
release: automate macOS publishing (#52853)
* release: automate macOS publishing

* release: keep mac appcast in openclaw repo

* release: add preflight-only release workflow runs

* release: keep appcast updates manual

* release: generate signed appcast as workflow artifact

* release: require preflight before publish

* release: require mac app for every release

* docs: clarify every release ships mac app

* release: document Sparkle feed and SHA rules

* release: keep publish flow tag-based

* release: stabilize mac appcast flow

* release: document local mac fallback
2026-03-23 16:04:53 +01:00
Peter Steinberger b2bf508dc5 docs: refresh generated config baseline 2026-03-23 14:38:57 +00:00
Peter Steinberger 9f2330363e fix: refactor deepseek bundled plugin (#48762) (thanks @07akioni) 2026-03-23 05:06:07 -07:00
Peter Steinberger 9516c72618 docs: sync generated release baselines 2026-03-23 09:19:05 +00:00
RichardCao a835c200f3
fix(status): recompute fallback context window (#51795)
* fix(status): recompute fallback context window

* fix(status): keep live context token caps on fallback

* fix(status): preserve fallback runtime context windows

* fix(status): preserve configured fallback context caps

* fix(status): keep provider-aware transcript context lookups

* fix(status): preserve explicit fallback context caps

* fix(status): clamp fallback configured context caps

* fix(status): keep raw runtime slash ids

* fix(status): refresh plugin-sdk api baseline

* fix(status): preserve fallback context lookup

* test(status): refresh plugin-sdk api baseline

* fix(status): keep runtime slash-id context lookup

---------

Co-authored-by: create <create@createdeMacBook-Pro.local>
Co-authored-by: Frank Yang <frank.ekn@gmail.com>
Co-authored-by: RichardCao <RichardCao@users.noreply.github.com>
2026-03-23 17:08:48 +08:00
Peter Steinberger d44a399ae0
fix: alphabetize web search provider listings 2026-03-23 01:46:47 -07:00
Peter Steinberger eac93507c3
fix(browser): enforce node browser proxy allowProfiles 2026-03-23 00:56:44 -07:00
Peter Steinberger 3fd5d13315 test: fix ci docs drift and bun qr exit handling 2026-03-23 07:41:23 +00:00
Peter Steinberger ff54c02b7d test: narrow live transcript scaffolding strip 2026-03-23 07:41:18 +00:00
Peter Steinberger abbd1b6b8a
feat: add slash plugin installs 2026-03-23 00:29:20 -07:00
Peter Steinberger 4a26f10f68
docs: sync minimax m2.7 references 2026-03-23 00:02:35 -07:00
Peter Steinberger ebc2b711ea
docs(synology-chat): clarify multi-account webhook paths 2026-03-23 00:01:29 -07:00
Peter Steinberger 47186c50a2 fix(ci): restore stale guardrails and baselines 2026-03-23 06:50:23 +00:00
ruochen b62fed0ea7 Docs: align MiniMax examples with M2.7 2026-03-22 23:44:11 -07:00
Peter Steinberger 202b588db5
fix: harden plugin docker e2e 2026-03-22 23:42:34 -07:00
Peter Steinberger 980940aa58
fix(synology-chat): fail closed shared webhook paths 2026-03-22 23:34:21 -07:00
Peter Steinberger 651dc7450b
fix(voice-call): harden webhook pre-auth guards 2026-03-22 23:33:30 -07:00
scoootscooob 6c1ea41472 Docs: refresh config baseline for Synology Chat 2026-03-22 23:32:03 -07:00
Peter Steinberger f3de580ca1 test: trim docker live auth mounts 2026-03-23 06:31:41 +00:00
Peter Steinberger 97abc6db55
docs: clarify sessions_spawn ACP vs subagent policies 2026-03-22 23:08:06 -07:00
Peter Steinberger 7ade3553b7
fix: gate synology chat reply name matching 2026-03-22 23:06:38 -07:00
Peter Steinberger c036e4d176
fix: restrict remote marketplace plugin sources 2026-03-22 22:47:08 -07:00
Peter Steinberger 5822892fee docs: refresh plugin-sdk api baseline 2026-03-23 05:35:51 +00:00
Peter Steinberger a55f371cc5 fix(ci): skip docs-only preflight pnpm audit 2026-03-23 05:29:27 +00:00
Peter Steinberger 6b9915a106
refactor!: drop legacy CLAWDBOT env compatibility 2026-03-22 22:13:39 -07:00
Vincent Koc 91f2c92960 docs(tools): soften DDG wording (scrapes -> pulls/gathers) 2026-03-22 22:10:56 -07:00
Vincent Koc 5730865f08 docs(tools): update DuckDuckGo Search for landed plugin code
- Mark as experimental (not just unofficial)
- Add region and safeSearch tool parameters (from DDG schema)
- Add plugin config example for region/safeSearch defaults
- Document auto-detection order (100 = last)
- Note SafeSearch defaults to moderate
- Verified against extensions/duckduckgo/src/
2026-03-22 22:09:47 -07:00
Vincent Koc c6ca11e5a5
feat(web-search): add DuckDuckGo bundled plugin (#52629)
* feat(web-search): add DuckDuckGo bundled plugin

* chore(changelog): restore main changelog

* fix(web-search): harden DuckDuckGo challenge detection
2026-03-22 22:05:33 -07:00
Peter Steinberger 827c441902 fix(test): isolate flaky extension lanes 2026-03-23 05:02:07 +00:00
Peter Steinberger 46a455d9e3 perf: enable vitest fs module cache by default 2026-03-23 04:48:31 +00:00
Peter Steinberger 7909236bd1 perf: add vitest test perf workflows 2026-03-23 04:41:38 +00:00
Vincent Koc 1c60e00a34 docs(tools): update Exa Search notes for current API behavior
Add notes about default highlights contents, highlightScores/summary
preservation from responses, description resolution order, and
100-result cap.
2026-03-22 21:39:33 -07:00
Vincent Koc df3f9bb555 docs(tools): add Exa Search page, align all search provider docs
New page: tools/exa-search.md
- Neural/keyword/hybrid search modes with content extraction
- Tool parameters including contents (highlights, text, summary)
- Search mode reference table

Rewritten: tools/duckduckgo-search.md
- Aligned to consistent template (Setup, Config, Tool parameters, Notes, Related)
- Simplified from previous version

Aligned across all providers:
- Every search page now ends with a consistent ## Related section
- Replaced 'See [Web tools]' with proper Related links
- Added Exa + DuckDuckGo to web.md overview CardGroup and comparison table
- Added Exa to docs.json nav and redirects
2026-03-22 21:27:24 -07:00
Vincent Koc 0a8eb7fdf0 docs(tools): add DuckDuckGo Search provider page
New page: tools/duckduckgo-search.md
- Key-free fallback provider, no API key needed
- Clear Warning about unofficial HTML-based integration
- Limitations section covering bot-challenge risk and reliability
- CardGroup showing good-for vs not-recommended-for use cases

Updated: tools/web.md with DuckDuckGo in CardGroup and comparison table
Updated: docs.json nav and redirect
2026-03-22 21:17:11 -07:00
Vincent Koc ee749b520e fix(exa): align freshness typing and config docs 2026-03-22 21:10:49 -07:00
Vincent Koc 1354f37c88
fix(plugins): route keyed queue imports through core (#52608) 2026-03-22 20:35:28 -07:00
Vincent Koc 828afd39ec docs(config): refresh generated baseline 2026-03-22 20:04:28 -07:00
Vincent Koc 28f48a2dfd style(docs): format sdk entrypoints doc 2026-03-22 20:03:17 -07:00
Vincent Koc afb4b1173b fix(docs): remove duplicate '### Options' headings (MD024) 2026-03-22 19:58:35 -07:00
Vincent Koc ac0fd26e16 fix(ci): resync generated baselines and line runtime seam 2026-03-22 19:53:26 -07:00
Vincent Koc a9f4cb7544 fix(docs): rename 'Channel Options' to 'Options' in sdk-entrypoints
This heading labels definePluginEntry options (generic, not channel-specific).
Another agent reverted the previous fix during a merge.
2026-03-22 19:44:07 -07:00
Peter Steinberger 462d7ad9c0
perf: default channel vitest lanes to threads 2026-03-22 19:10:43 -07:00
Peter Steinberger 3ccf1bee2c
test: default scoped vitest configs to no-isolate 2026-03-22 19:09:32 -07:00
Vincent Koc 05055e200a fix(docs): remaining code audit fixes
- sdk-entrypoints.md: fix mislabeled 'Channel entry options' heading
  (should be 'Options' — these are definePluginEntry options, not
  channel-specific)
- sdk-overview.md: add 4 missing API object fields (version, description,
  source, rootDir) from OpenClawPluginApi type
2026-03-22 18:59:03 -07:00
Vincent Koc 16de5a7b41 fix(docs): code-verified fixes from deep reference audit
- sdk-runtime.md: add missing required params (runId, timeoutMs) to
  runEmbeddedPiAgent example
- sdk-provider-plugins.md: add missing onModelSelected hook (#22),
  clarify capabilities is data not callable, drop misleading '21' count
2026-03-22 18:56:51 -07:00
Peter Steinberger 5c8ea0a175 refactor: share channel setup status helpers 2026-03-23 01:56:01 +00:00
Peter Steinberger 583bea001c refactor: share parsed channel allowlist prompts 2026-03-23 01:56:01 +00:00
Peter Steinberger 7d032ed38c refactor: add provider onboarding preset appliers 2026-03-23 01:56:00 +00:00
Peter Steinberger 956fe72b39 refactor: extract single-provider plugin entry helper 2026-03-23 01:56:00 +00:00
Vincent Koc 94f36bf373 docs(image): remove duplicate typical values bullet 2026-03-22 18:42:18 -07:00
Vincent Koc 654089320b fix(image): deprecate legacy skill and clarify auth 2026-03-22 18:42:18 -07:00
Vincent Koc 4f0bb7594b fix(plugins): allow media-understanding package suffix 2026-03-22 18:30:40 -07:00
Peter Steinberger 639470c52c fix(ci): restore main gate 2026-03-23 01:30:07 +00:00
Vincent Koc 0a329b2c9f Revert "style(format): fix check drift in provider tests"
This reverts commit 2619f5fe55.
2026-03-22 18:25:07 -07:00
Vincent Koc 2619f5fe55 style(format): fix check drift in provider tests 2026-03-22 18:24:40 -07:00
Vincent Koc fe867c2467 fix(ci): refresh plugin sdk baseline 2026-03-22 18:19:49 -07:00
Vincent Koc cbf9cd0acb fix(ci): repair main checks 2026-03-22 18:13:14 -07:00
Peter Steinberger 841add8414 build: refresh plugin-sdk api baseline (#52428) 2026-03-22 16:56:19 -07:00
Peter Steinberger d0f5e7cb2d
test: simplify vitest runner pools 2026-03-22 16:22:09 -07:00
Vincent Koc ca3165a3e7 fix(docs): deduplicate titles across 9 pages
Differentiate titles that were identical across multiple pages:
- Platform pages: add '(Platform)' suffix to distinguish from install guides
- Legacy root-level pages: add '(legacy path)' suffix for files that
  redirect to canonical tools/ paths
- Logging: 'Logging' -> 'Logging Overview' (root) and 'Gateway Logging'
- building-extensions: add '(redirect)' suffix
2026-03-22 16:02:28 -07:00
Vincent Koc f1603314f0 fix(docs): add missing title frontmatter to 7 template files 2026-03-22 15:56:26 -07:00
Vincent Koc a89d9f491b fix(docs): broken anchor links across 4 more files
- sandboxing.md: remove stale '-opt-in' suffix from Docker accordion anchor
- troubleshooting.md: remove #troubleshooting anchor (matrix has no such section)
- docker.md: drop unpredictable security heading anchor with parens/dots
- faq.md: fix SSL error accordion anchor slug
2026-03-22 15:50:56 -07:00
Vincent Koc ed6b894873 fix(docs): correct sandbox config anchor slug in 5 files
Mintlify strips dots from backtick headings when generating anchors.
`agents.defaults.sandbox` -> #agentsdefaultssandbox (not #agents-defaults-sandbox)
2026-03-22 15:47:11 -07:00
Jacob Tomlinson bdd35a6239
docs: remove SETUP_PASSWORD and /setup wizard from Northflank and Railway docs 2026-03-22 22:44:42 +00:00
Vincent Koc b863e1c315 fix(docs): update remaining npm-spec references for ClawHub-first default
- cli/plugins.md: rewrite install synopsis with ClawHub-first order
- cli/hooks.md: update hook pack install examples
- help/troubleshooting.md: <npm-spec> -> <package>
- gateway/security/index.md: drop npm-specific framing
2026-03-22 15:43:15 -07:00
Vincent Koc 9653c47133 fix(docs): remove apostrophes from headings (breaks Mintlify anchors)
- azure.md: "What you'll do" -> "What you will do"
- standing-orders.md: "Don't" -> "Avoid"

Per CLAUDE.md: avoid em dashes and apostrophes in headings because
they break Mintlify anchor links.
2026-03-22 15:41:08 -07:00
Vincent Koc b93a045a96 docs(agents): update steering semantics 2026-03-22 15:40:56 -07:00
Jacob Tomlinson 2e2f7c844f
docs: update pi package versions to 0.61.1 2026-03-22 22:39:55 +00:00
Peter Steinberger 77cbbae81b test: fix ci drift after main rebase 2026-03-22 22:38:27 +00:00
Vincent Koc 196c07cac6 fix(docs): broken FAQ anchor #how-does-openclaw-load-environment-variables
Correct anchor is #env-vars-and-env-loading (matching the actual
heading '## Env vars and .env loading' in help/faq.md).

Fixed in: tools/web.md, tools/perplexity-search.md, perplexity.md
2026-03-22 15:28:29 -07:00
Peter Steinberger d907ebffc5
perf: trim vitest thread overrides 2026-03-22 15:25:58 -07:00
Vincent Koc ad01465318 fix(docs): update stale 'Web tools' link text to 'Web Search' 2026-03-22 15:24:08 -07:00
Jacob Tomlinson d6c63163b4
docs: fix memory loading, WhatsApp media caps, and Signal reaction mode docs 2026-03-22 22:20:55 +00:00
Vincent Koc d1ad48cb50 fix(docs): align frontmatter titles with H1 headings
- sdk-runtime: 'Plugin SDK Runtime' -> 'Plugin Runtime Helpers'
- sdk-testing: 'SDK Testing' -> 'Plugin Testing'
- sdk-setup: 'Plugin SDK Setup' -> 'Plugin Setup and Config'
2026-03-22 15:20:46 -07:00
Jacob Tomlinson 6a228d9145
docs(render): fix port env var, remove nonexistent setup wizard 2026-03-22 22:10:28 +00:00
Vincent Koc bb3e565487 docs(tools): restructure web tools IA and rewrite web.md
Navigation restructure:
- "Browser" group -> "Web Browser"
- New "Web Tools" group containing Web Fetch, Web Search, and all
  7 search provider sub-pages
- Other tools (btw, diffs, etc.) stay at top level

New page:
- tools/web-fetch.md: dedicated web_fetch reference with Steps,
  config, Firecrawl fallback, limits

Rewritten page:
- tools/web.md: now "Web Search" -- focused search overview with
  Steps quick-start, CardGroup provider picker, Tabs for key storage,
  provider comparison table, auto-detection, parameters, examples.
  Removed all inline provider setup (lives in sub-pages) and web_fetch
  content (now in dedicated page).

Final sidebar:
  Tools
  ├── Web Browser (browser, login, troubleshooting)
  ├── Web Tools
  │   ├── Web Fetch
  │   ├── Web Search
  │   └── Brave / Firecrawl / Gemini / Grok / Kimi / Perplexity / Tavily
  ├── btw, diffs, exec, ...
2026-03-22 15:01:09 -07:00
Jacob Tomlinson 77bdb33735
docs: fix channel lists, pairing channels, and discord step title 2026-03-22 21:43:29 +00:00
Peter Steinberger dcd5473283 refactor: adopt shared chat plugin builder 2026-03-22 21:37:32 +00:00
Peter Steinberger 29c0e783b1
refactor: rename vitest behavior lanes 2026-03-22 14:36:57 -07:00
Vincent Koc a8e10d9dc4 fix(docs): broken link /configuration -> /gateway/configuration in manifest.md 2026-03-22 14:36:41 -07:00
Vincent Koc 9e0d298a08 docs(nav): move Web Tools above Web Search group 2026-03-22 14:34:58 -07:00
Vincent Koc 78399c67e9 docs(tools): restructure web search into nested group with provider sub-pages
Restructure "Web and search" into a "Web Search" nested group
(matching Browser pattern) with provider sub-pages:

New pages:
- tools/gemini-search: Gemini with Google Search grounding setup
- tools/grok-search: Grok/xAI web-grounded search setup
- tools/kimi-search: Kimi/Moonshot web search setup

Existing pages (Brave, Firecrawl, Perplexity, Tavily) already exist.

Changes to tools/web.md (overview page):
- Simplify provider table with links to sub-pages
- Replace inline Gemini section with link to dedicated page
- Replace inline Brave/Perplexity setup with CardGroup linking all 7 providers
- Keep auto-detection, web_search, web_fetch reference sections

Navigation: "Web and search" -> "Web Search" with all 8 pages
(overview + 7 providers alphabetical)
2026-03-22 14:25:16 -07:00
Jacob Tomlinson 2e246b47b9
docs: fix hook load order, command event payload, and session-memory confirmation 2026-03-22 21:09:36 +00:00
Peter Steinberger 7babb4583b test: stream live vitest console output 2026-03-22 21:09:09 +00:00
Peter Steinberger 1efda3d041 test: improve live test progress feedback 2026-03-22 20:57:04 +00:00
Jacob Tomlinson 11c66b36fd
docs: add irc/googlechat/line channels, fix hook os field, cron add, BOOTSTRAP.md 2026-03-22 20:49:09 +00:00
Jacob Tomlinson 773fb9cead
docs: update hooks load order, session-memory reset event, and bootstrap allowlists 2026-03-22 20:38:54 +00:00
Jacob Tomlinson 43ee9fff48
docs: fix message hook context fields and session-memory example output 2026-03-22 20:01:30 +00:00
Vincent Koc 4bd90f24d1
perf(ci): gate install smoke on changed-smoke (#52458) 2026-03-22 12:58:08 -07:00
Onur Solmaz b369397b43
ACP: revert acpx-plugin package naming (#52456)
* ACP: revert acpx-plugin package naming

* Test: format acp install hints expectations
2026-03-22 20:55:48 +01:00
Peter Steinberger 0329412af2
docs: note extension vitest threads default 2026-03-22 12:38:42 -07:00
Vincent Koc 5f723ecd7f
fix(doctor): explain discord streaming opt-in (#52450) 2026-03-22 12:37:03 -07:00
Peter Steinberger c26655d397 fix: stabilize plugin sdk api baselines 2026-03-22 19:32:29 +00:00
Peter Steinberger 5b2ff17d3c chore: refresh plugin sdk api baselines 2026-03-22 19:30:15 +00:00
Peter Steinberger 26d400bea6
docs: note unit vitest threads default 2026-03-22 12:25:51 -07:00
Peter Steinberger aef2c60aa5
test: fix no-isolate canvas and timer regressions 2026-03-22 12:10:08 -07:00
Vincent Koc 2ef4d472f2 fix(install): restore memory-core workspace link 2026-03-22 12:06:44 -07:00
Peter Steinberger 412a3eb1ac
build: bump version to 2026.3.22 2026-03-22 11:58:33 -07:00
Vincent Koc dbf3dd6559 docs: update plugin install references for ClawHub-first default
OpenClaw now tries ClawHub before npm for bare plugin specs.
Update install examples and guidance across:
- building-plugins.md: intro and publish step
- sdk-setup.md: publishing section with clawhub:/npm: prefix examples
- tools/plugin.md: CLI reference table
- community.md: submission guidance and quality bar
2026-03-22 11:58:11 -07:00
Vincent Koc 6d9d9319b2 fix(docs): resolve markdownlint regressions 2026-03-22 11:56:06 -07:00
Vincent Koc 1f93a99f47 docs(plugins): overhaul SDK pages with Mintlify components and IA restructure
- Rewrite building-plugins.md as focused quick-start with CardGroup routing
- Rewrite sdk-channel-plugins.md with Steps, CodeGroup, Accordion walkthrough
- Move SDK Migration under Building Plugins nav, rename to "Migrate to SDK"
- Fix code examples and use valid Lucide icons for Mintlify Cards
2026-03-22 11:51:09 -07:00