Josh Avant
72cf9253fc
Gateway: add SecretRef support for gateway.auth.token with auth-mode guardrails ( #35094 )
2026-03-05 12:53:56 -06:00
Gustavo Madeira Santana
76bfd9b5e6
Agents: add generic poll-vote action support
2026-03-04 11:36:14 -05:00
Ayaan Zaidi
7b5e64ef2e
fix: preserve raw media invoke for HTTP tool clients ( #34365 )
2026-03-04 17:17:39 +05:30
Ayaan Zaidi
ef4fa43df8
fix: prevent nodes media base64 context bloat ( #34332 )
2026-03-04 16:53:30 +05:30
Bob
257e2f5338
fix: relay ACP sessions_spawn parent streaming ( #34310 ) (thanks @vincentkoc) ( #34310 )
...
Co-authored-by: Onur Solmaz <2453968+osolmaz@users.noreply.github.com >
2026-03-04 11:44:20 +01:00
Josh Avant
646817dd80
fix(outbound): unify resolved cfg threading across send paths ( #33987 )
2026-03-04 00:20:44 -06:00
Kesku
230fea1ca6
feat(web-search): switch Perplexity to native Search API ( #33822 )
...
* feat: Add Perplexity Search API as web_search provider
* docs fixes
* domain_filter validation
* address comments
* provider-specific options in cache key
* add validation for unsupported date filters
* legacy fields
* unsupported_language guard
* cache key matches the request's precedence order
* conflicting_time_filters guard
* unsupported_country guard
* invalid_date_range guard
* pplx validate for ISO 639-1 format
* docs: add Perplexity Search API changelog entry
* unsupported_domain_filter guard
---------
Co-authored-by: Shadow <hi@shadowing.dev >
2026-03-03 22:57:19 -06:00
Ayaan Zaidi
6962d2d79f
fix: harden sessions_spawn attachment schema landing ( #33648 ) (thanks @anisoptera)
2026-03-04 10:05:41 +05:30
Isis Anisoptera
965ce31d84
fix(sessions-spawn): remove maxLength from attachment content schema to fix llama.cpp GBNF grammar overflow
2026-03-04 10:05:41 +05:30
Josh Avant
806803b7ef
feat(secrets): expand SecretRef coverage across user-supplied credentials ( #29580 )
...
* feat(secrets): expand secret target coverage and gateway tooling
* docs(secrets): align gateway and CLI secret docs
* chore(protocol): regenerate swift gateway models for secrets methods
* fix(config): restore talk apiKey fallback and stabilize runner test
* ci(windows): reduce test worker count for shard stability
* ci(windows): raise node heap for test shard stability
* test(feishu): make proxy env precedence assertion windows-safe
* fix(gateway): resolve auth password SecretInput refs for clients
* fix(gateway): resolve remote SecretInput credentials for clients
* fix(secrets): skip inactive refs in command snapshot assignments
* fix(secrets): scope gateway.remote refs to effective auth surfaces
* fix(secrets): ignore memory defaults when enabled agents disable search
* fix(secrets): honor Google Chat serviceAccountRef inheritance
* fix(secrets): address tsgo errors in command and gateway collectors
* fix(secrets): avoid auth-store load in providers-only configure
* fix(gateway): defer local password ref resolution by precedence
* fix(secrets): gate telegram webhook secret refs by webhook mode
* fix(secrets): gate slack signing secret refs to http mode
* fix(secrets): skip telegram botToken refs when tokenFile is set
* fix(secrets): gate discord pluralkit refs by enabled flag
* fix(secrets): gate discord voice tts refs by voice enabled
* test(secrets): make runtime fixture modes explicit
* fix(cli): resolve local qr password secret refs
* fix(cli): fail when gateway leaves command refs unresolved
* fix(gateway): fail when local password SecretRef is unresolved
* fix(gateway): fail when required remote SecretRefs are unresolved
* fix(gateway): resolve local password refs only when password can win
* fix(cli): skip local password SecretRef resolution on qr token override
* test(gateway): cast SecretRef fixtures to OpenClawConfig
* test(secrets): activate mode-gated targets in runtime coverage fixture
* fix(cron): support SecretInput webhook tokens safely
* fix(bluebubbles): support SecretInput passwords across config paths
* fix(msteams): make appPassword SecretInput-safe in onboarding/token paths
* fix(bluebubbles): align SecretInput schema helper typing
* fix(cli): clarify secrets.resolve version-skew errors
* refactor(secrets): return structured inactive paths from secrets.resolve
* refactor(gateway): type onboarding secret writes as SecretInput
* chore(protocol): regenerate swift models for secrets.resolve
* feat(secrets): expand extension credential secretref support
* fix(secrets): gate web-search refs by active provider
* fix(onboarding): detect SecretRef credentials in extension status
* fix(onboarding): allow keeping existing ref in secret prompt
* fix(onboarding): resolve gateway password SecretRefs for probe and tui
* fix(onboarding): honor secret-input-mode for local gateway auth
* fix(acp): resolve gateway SecretInput credentials
* fix(secrets): gate gateway.remote refs to remote surfaces
* test(secrets): cover pattern matching and inactive array refs
* docs(secrets): clarify secrets.resolve and remote active surfaces
* fix(bluebubbles): keep existing SecretRef during onboarding
* fix(tests): resolve CI type errors in new SecretRef coverage
* fix(extensions): replace raw fetch with SSRF-guarded fetch
* test(secrets): mark gateway remote targets active in runtime coverage
* test(infra): normalize home-prefix expectation across platforms
* fix(cli): only resolve local qr password refs in password mode
* test(cli): cover local qr token mode with unresolved password ref
* docs(cli): clarify local qr password ref resolution behavior
* refactor(extensions): reuse sdk SecretInput helpers
* fix(wizard): resolve onboarding env-template secrets before plaintext
* fix(cli): surface secrets.resolve diagnostics in memory and qr
* test(secrets): repair post-rebase runtime and fixtures
* fix(gateway): skip remote password ref resolution when token wins
* fix(secrets): treat tailscale remote gateway refs as active
* fix(gateway): allow remote password fallback when token ref is unresolved
* fix(gateway): ignore stale local password refs for none and trusted-proxy
* fix(gateway): skip remote secret ref resolution on local call paths
* test(cli): cover qr remote tailscale secret ref resolution
* fix(secrets): align gateway password active-surface with auth inference
* fix(cli): resolve inferred local gateway password refs in qr
* fix(gateway): prefer resolvable remote password over token ref pre-resolution
* test(gateway): cover none and trusted-proxy stale password refs
* docs(secrets): sync qr and gateway active-surface behavior
* fix: restore stability blockers from pre-release audit
* Secrets: fix collector/runtime precedence contradictions
* docs: align secrets and web credential docs
* fix(rebase): resolve integration regressions after main rebase
* fix(node-host): resolve gateway secret refs for auth
* fix(secrets): harden secretinput runtime readers
* gateway: skip inactive auth secretref resolution
* cli: avoid gateway preflight for inactive secret refs
* extensions: allow unresolved refs in onboarding status
* tests: fix qr-cli module mock hoist ordering
* Security: align audit checks with SecretInput resolution
* Gateway: resolve local-mode remote fallback secret refs
* Node host: avoid resolving inactive password secret refs
* Secrets runtime: mark Slack appToken inactive for HTTP mode
* secrets: keep inactive gateway remote refs non-blocking
* cli: include agent memory secret targets in runtime resolution
* docs(secrets): sync docs with active-surface and web search behavior
* fix(secrets): keep telegram top-level token refs active for blank account tokens
* fix(daemon): resolve gateway password secret refs for probe auth
* fix(secrets): skip IRC NickServ ref resolution when NickServ is disabled
* fix(secrets): align token inheritance and exec timeout defaults
* docs(secrets): clarify active-surface notes in cli docs
* cli: require secrets.resolve gateway capability
* gateway: log auth secret surface diagnostics
* secrets: remove dead provider resolver module
* fix(secrets): restore gateway auth precedence and fallback resolution
* fix(tests): align plugin runtime mock typings
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-03-03 02:58:20 +00:00
Peter Steinberger
6b6af1a64f
refactor(tests): dedupe web fetch and embedded tool hook fixtures
2026-03-03 01:37:12 +00:00
Peter Steinberger
c1b37f29f0
refactor(tests): dedupe browser and telegram tool test fixtures
2026-03-03 01:37:12 +00:00
Peter Steinberger
a48a3dbdda
refactor(tests): dedupe tool, projector, and delivery fixtures
2026-03-03 01:06:00 +00:00
Peter Steinberger
fd3ca8a34c
refactor: dedupe agent and browser cli helpers
2026-03-03 00:15:00 +00:00
Peter Steinberger
6b85ec3022
docs: tighten subscription guidance and update MiniMax M2.5 refs
2026-03-03 00:02:37 +00:00
Peter Steinberger
bb60687b89
refactor(nodes): dedupe camera payload and node resolve helpers
2026-03-02 23:32:41 +00:00
Peter Steinberger
3bf19d6f40
fix(security): fail-close node camera URL downloads
2026-03-02 23:23:39 +00:00
dunamismax
d9fdec12ab
fix(signal): fall back to toolContext.currentMessageId for reactions
...
Signal reactions required an explicit messageId parameter, unlike
Telegram which already fell back to toolContext.currentMessageId.
This made agent-initiated reactions fail on Signal because the
inbound message ID was available in tool context but never used.
- Destructure toolContext in Signal action handler
- Fall back to toolContext.currentMessageId when messageId omitted
- Update reaction schema descriptions (not Telegram-specific)
- Add tests for fallback and missing-messageId rejection
Closes #17651
2026-03-02 22:53:04 +00:00
Bob
ac11f0af73
Security: enforce ACP sandbox inheritance for sessions_spawn ( #32254 )
...
* Security: enforce ACP sandbox inheritance in sessions_spawn
* fix: add changelog attribution for ACP sandbox inheritance (#32254 ) (thanks @dutifulbob)
---------
Co-authored-by: Onur <2453968+osolmaz@users.noreply.github.com >
2026-03-02 23:50:38 +01:00
Peter Steinberger
ab8b8dae70
refactor(agents): dedupe model and tool test helpers
2026-03-02 21:31:36 +00:00
Peter Steinberger
4b50018406
fix: restore helper imports and plugin hook test exports
2026-03-02 19:57:33 +00:00
Peter Steinberger
7003615972
fix: resolve rebase conflict markers
2026-03-02 19:57:33 +00:00
Peter Steinberger
9617ac9dd5
refactor: dedupe agent and reply runtimes
2026-03-02 19:57:33 +00:00
justinhuangcode
14baadda2c
fix(tools): honor fsPolicy.workspaceOnly in image/pdf tool localRoots
...
PR #28822 fixed the Write/Edit tools to respect `tools.fs.workspaceOnly`,
but the image and PDF tools still unconditionally include default local
roots (`~/.openclaw/media`, `~/.openclaw/agents`, etc.) when computing
the `localRoots` allowlist for non-sandbox mode.
When `fsPolicy.workspaceOnly` is true, restrict `localRoots` to only the
workspace directory so that files outside the workspace are rejected by
`assertLocalMediaAllowed()`.
Relates to #31716
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-02 19:24:33 +00:00
Peter Steinberger
c973b053a5
refactor(net): unify proxy env checks and guarded fetch modes
2026-03-02 16:24:26 +00:00
Peter Steinberger
17c434f2f3
refactor: split browser context/actions and unify CDP timeout policy
2026-03-02 16:02:39 +00:00
Peter Steinberger
345abf0b20
fix: preserve dns pinning for strict web SSRF fetches
2026-03-02 15:54:46 +00:00
Peter Steinberger
663c1858b8
refactor(browser): split server context and unify CDP transport
2026-03-02 15:43:05 +00:00
SidQin-cyber
732c4f3921
fix(browser): retry chrome act when target tab is stale
...
When a Chrome relay targetId becomes stale between snapshot and action,
the browser tool now retries once without targetId so the relay falls
back to the currently attached tab.
Drop the unknown recovered field from the test mock return value
to satisfy tsc strict checking against BrowserActResponse.
2026-03-02 13:49:33 +00:00
Vincent Koc
29c3ce9454
[AI-assisted] test: fix typing and test fixture issues ( #31444 )
...
* test: fix typing and test fixture issues
* Fix type-test harness issues from session routing and mock typing
* Add routing regression test for session.mainKey precedence
2026-03-02 00:41:21 -08:00
Vincent Koc
e055afd000
fix(browser): accept legacy flattened act params ( #31359 )
...
* fix(browser-tool): accept flattened act params
* schema(browser-tool): add flattened act fields
* test(browser-tool): cover flattened act compatibility
* changelog: note browser act compatibility fix
* fix(schema): align browser act request fields
2026-03-01 23:21:07 -08:00
Peter Steinberger
c00d5837d3
style(agents): format pdf tool test after rebase
2026-03-02 07:13:11 +00:00
Peter Steinberger
45d77cac16
test(agents): dedupe remaining tool and lock test scaffolds
2026-03-02 07:13:11 +00:00
Peter Steinberger
c3948800f4
refactor(agents): extract shared tool model helpers
2026-03-02 07:13:11 +00:00
Peter Steinberger
7e29d604ba
test(agents): dedupe agent and cron test scaffolds
2026-03-02 07:13:10 +00:00
Tyler Yust
f918b336d1
fix: agent-only announce path, BB message IDs, sender identity, SSRF allowlist ( #23970 )
...
* fix(agents): defer announces until descendant cleanup settles
* fix(bluebubbles): harden message metadata extraction
* feat(contributors): rank by composite score (commits, PRs, LOC, tenure)
* refactor(control-ui): move method guard after path checks to improve request handling
* fix subagent completion announce when only current run is pending
* fix(subagents): keep orchestrator runs active until descendants finish
* fix: prepare PR feedback follow-ups (#23970 ) (thanks @tyler6204)
2026-03-01 22:52:11 -08:00
Peter Steinberger
cfba64c9db
test: fix pdf-tool fetch/model config mock typings
2026-03-02 06:48:01 +00:00
Tyler Yust
d0ac1b0195
feat: add PDF analysis tool with native provider support ( #31319 )
...
* feat: add PDF analysis tool with native provider support
New `pdf` tool for analyzing PDF documents with model-powered analysis.
Architecture:
- Native PDF path: sends raw PDF bytes directly to providers that support
inline document input (Anthropic via DocumentBlockParam, Google Gemini
via inlineData with application/pdf MIME type)
- Extraction fallback: for providers without native PDF support, extracts
text via pdfjs-dist and rasterizes pages to images via @napi-rs/canvas,
then sends through the standard vision/text completion path
Key features:
- Single PDF (`pdf` param) or multiple PDFs (`pdfs` array, up to 10)
- Page range selection (`pages` param, e.g. "1-5", "1,3,7-9")
- Model override (`model` param) and file size limits (`maxBytesMb`)
- Auto-detects provider capability and falls back gracefully
- Same security patterns as image tool (SSRF guards, sandbox support,
local path roots, workspace-only policy)
Config (agents.defaults):
- pdfModel: primary/fallbacks (defaults to imageModel, then session model)
- pdfMaxBytesMb: max PDF file size (default: 10)
- pdfMaxPages: max pages to process (default: 20)
Model catalog:
- Extended ModelInputType to include "document" alongside "text"/"image"
- Added modelSupportsDocument() capability check
Files:
- src/agents/tools/pdf-tool.ts - main tool factory
- src/agents/tools/pdf-tool.helpers.ts - helpers (page range, config, etc.)
- src/agents/tools/pdf-native-providers.ts - direct API calls for Anthropic/Google
- src/agents/tools/pdf-tool.test.ts - 43 tests covering all paths
- Modified: model-catalog.ts, openclaw-tools.ts, config schema/types/labels/help
* fix: prepare pdf tool for merge (#31319 ) (thanks @tyler6204)
2026-03-01 22:39:12 -08:00
Nikolay Petrov
a9f1188785
sessions_spawn: inline attachments with redaction, lifecycle cleanup, and docs ( #16761 )
...
Add inline file attachment support for sessions_spawn (subagent runtime only):
- Schema: attachments[] (name, content, encoding, mimeType) and attachAs.mountPath hint
- Materialization: files written to .openclaw/attachments/<uuid>/ with manifest.json
- Validation: strict base64 decode, filename checks, size limits, duplicate detection
- Transcript redaction: sanitizeToolCallInputs redacts attachment content from persisted transcripts
- Lifecycle cleanup: safeRemoveAttachmentsDir with symlink-safe path containment check
- Config: tools.sessions_spawn.attachments (enabled, maxFiles, maxFileBytes, maxTotalBytes, retainOnSessionKeep)
- Registry: attachmentsDir/attachmentsRootDir/retainAttachmentsOnKeep on SubagentRunRecord
- ACP rejection: attachments rejected for runtime=acp with clear error message
- Docs: updated tools/index.md, concepts/session-tool.md, configuration-reference.md
- Tests: 85 new/updated tests across 5 test files
Fixes:
- Guard fs.rm in materialization catch block with try/catch (review concern #1 )
- Remove unreachable fallback in safeRemoveAttachmentsDir (review concern #7 )
- Move attachment cleanup out of retry path to avoid timing issues with announce loop
Co-authored-by: Tyler Yust <TYTYYUST@YAHOO.COM >
Co-authored-by: napetrov <napetrov@users.noreply.github.com >
2026-03-01 21:33:51 -08:00
Peter Steinberger
264599cc1d
refactor(core): share JSON utf8 byte counting helper
2026-03-02 05:20:19 +00:00
Peter Steinberger
e1bf9591c3
fix(web-tools): land #31176 allow RFC2544 trusted fetch range (@sunkinux)
...
Landed from contributor PR #31176 by @sunkinux.
Co-authored-by: sunkinux <sunkinux@users.noreply.github.com >
2026-03-02 03:43:25 +00:00
Brian Le
f64d25bd3e
fix(telegram): scope DM topic thread keys by chat id ( #31064 )
...
* fix(telegram): scope DM topic thread keys by chat id
* test(telegram): update dm topic session-key expectation
* fix(telegram): parse scoped dm thread ids in outbound recovery
* chore(telegram): format accounts config merge block
* test(nodes): simplify mocked exports for ts tuple spreads
2026-03-02 02:54:45 +00:00
Peter Steinberger
b0c7f1ebe2
fix: harden sessions_spawn delivery params and telegram account routing ( #31000 , #31110 )
2026-03-02 02:35:48 +00:00
Peter Steinberger
40fda40aa7
fix(slack): scope download-file to channel and thread context
2026-03-02 02:23:22 +00:00
Pushkar Kathayat
7f4d1b7531
fix(discord): support applied_tags parameter for forum thread creation
...
Forum channels that require tags fail with "A tag is required" when
creating threads because there was no way to pass tag IDs. Add
appliedTags parameter to the thread-create action so forum posts can
include required tags from the channel's available_tags list.
2026-03-02 02:05:11 +00:00
Peter Steinberger
e70fc5eb62
fix(nodes): cap screen_record duration to 5 minutes (land #31106 by @BlueBirdBack)
...
Landed-from: #31106
Contributor: @BlueBirdBack
Co-authored-by: BlueBirdBack <126304167+BlueBirdBack@users.noreply.github.com >
2026-03-02 01:53:20 +00:00
charo
757e09fe43
fix(cron): recover flat patch params for update action and fix schema (openclaw#23221) thanks @charojo
...
Verified:
- pnpm build
- pnpm check
- pnpm test:macmini
Co-authored-by: charojo <4084797+charojo@users.noreply.github.com >
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com >
2026-03-01 19:50:51 -06:00
Peter Steinberger
bfeadb80b6
feat(agents): add sessions_spawn sandbox require mode
2026-03-02 01:27:34 +00:00
Peter Steinberger
e7cd4bf1bd
refactor(web): split trusted and strict web tool fetch paths
2026-03-02 01:14:06 +00:00
Peter Steinberger
155118751f
refactor!: remove versioned system-run approval contract
2026-03-02 01:12:53 +00:00