Peter Steinberger
ab8b8dae70
refactor(agents): dedupe model and tool test helpers
2026-03-02 21:31:36 +00:00
Vincent Koc
a19a7f5e6e
feat(security): Harden Docker browser container chromium flags ( #23889 ) ( #31504 )
...
* Gateway: honor OPENCLAW_GATEWAY_URL override for remote/local calls
* Agents: fix sandbox sessionKey usage for PI embedded subagent calls
* Sandbox: tighten browser container Chromium runtime flags
* fix: add sandbox browser defaults for container hardening
* docs: expand sandbox browser default flags list
* fix: make sandbox browser flags optional and preserve gateway env auth overrides
* docs: scope PR 31504 changelog entry
* style: format gateway call override handling
* fix: dedupe sandbox browser chrome args
* fix: preserve remote tls fingerprint for env gateway override
* fix: enforce auth for env gateway URL override
* chore: document gateway override auth security expectations
2026-03-02 11:28:27 -08:00
Peter Steinberger
7e29d604ba
test(agents): dedupe agent and cron test scaffolds
2026-03-02 07:13:10 +00:00
Charles Dusek
92199ac129
fix(agents): unblock gpt-5.3-codex API-key routing and replay ( #31083 )
...
* fix(agents): unblock gpt-5.3-codex API-key replay path
* fix(agents): scope OpenAI replay ID rewrites per turn
* test: fix nodes-tool mock typing and reformat telegram accounts
2026-03-02 03:45:12 +00:00
不做了睡大觉
e482da6682
fix(ollama): prioritize provider baseUrl for embedded runner ( #30964 )
...
* fix(ollama): honor provider baseUrl in embedded runner
* Embedded Ollama: clarify provider baseUrl precedence comment
* Changelog: note embedded Ollama baseUrl precedence fix
* Telegram: apply required formatter update in accounts config merge
* Revert "Telegram: apply required formatter update in accounts config merge"
This reverts commit d372b26975 .
* Update CHANGELOG.md
---------
Co-authored-by: User <user@example.com >
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-03-01 18:38:42 -08:00
Jose E Velez
0c8fa63b93
feat: lightweight bootstrap context mode for heartbeat/cron runs (openclaw#26064) thanks @jose-velez
...
Verified:
- pnpm build
- pnpm check (fails on pre-existing unrelated repo issues in extensions/diffs and src/agents/tools/nodes-tool.test.ts)
- pnpm vitest run src/agents/bootstrap-files.test.ts src/infra/heartbeat-runner.model-override.test.ts src/cli/cron-cli.test.ts
- pnpm test:macmini (fails on pre-existing extensions/diffs import errors; touched suites pass)
Co-authored-by: jose-velez <10926182+jose-velez@users.noreply.github.com >
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com >
2026-03-01 20:13:24 -06:00
Peter Steinberger
c823a85302
fix: harden sandbox media reads against TOCTOU escapes
2026-03-02 01:04:01 +00:00
Peter Steinberger
ee03ade0d6
fix(agents): harden tool-name normalization and transcript repair
...
Landed from contributor PRs #30620 and #30735 by @Sid-Qin, plus #30881 by @liuxiaopai-ai.
Co-authored-by: SidQin-cyber <sidqin0410@gmail.com >
Co-authored-by: liuxiaopai-ai <73659136+liuxiaopai-ai@users.noreply.github.com >
2026-03-01 23:51:54 +00:00
Peter Steinberger
7ced38b5ef
feat(agents): make openai responses websocket-first with fallback
2026-03-01 22:32:37 +00:00
Vincent Koc
f16ecd1dac
fix(ollama): unify context window handling across discovery, merge, and OpenAI-compat transport ( #29205 )
...
* fix(ollama): inject num_ctx for OpenAI-compatible transport
* fix(ollama): discover per-model context and preserve higher limits
* fix(agents): prefer matching provider model for fallback limits
* fix(types): require numeric token limits in provider model merge
* fix(types): accept unknown payload in ollama num_ctx wrapper
* fix(types): simplify ollama settled-result extraction
* config(models): add provider flag for Ollama OpenAI num_ctx injection
* config(schema): allow provider num_ctx injection flag
* config(labels): label provider num_ctx injection flag
* config(help): document provider num_ctx injection flag
* agents(ollama): gate OpenAI num_ctx injection with provider config
* tests(ollama): cover provider num_ctx injection flag behavior
* docs(config): list provider num_ctx injection option
* docs(ollama): document OpenAI num_ctx injection toggle
* docs(config): clarify merge token-limit precedence
* config(help): note merge uses higher model token limits
* fix(ollama): cap /api/show discovery concurrency
* fix(ollama): restrict num_ctx injection to OpenAI compat
* tests(ollama): cover ipv6 and compat num_ctx gating
* fix(ollama): detect remote compat endpoints for ollama-labeled providers
* fix(ollama): cap per-model /api/show lookups to bound discovery load
2026-02-27 17:20:47 -08:00
wangchunyue
6b317b1f17
fix(agents): normalize whitespace-padded tool call names before dispatch ( #27094 )
...
Fix tool-call lookup failures when models emit whitespace-padded names by normalizing
both transcript history and live streamed embedded-runner tool calls before dispatch.
Co-authored-by: wangchunyue <80630709+openperf@users.noreply.github.com >
Co-authored-by: Sid <sidqin0410@gmail.com >
Co-authored-by: Philipp Spiess <hello@philippspiess.com >
2026-02-27 11:26:37 +01:00
Peter Steinberger
611dff985d
fix(agents): harden embedded pi project settings loading
2026-02-26 21:46:39 +01:00
Peter Steinberger
0ec7711bc2
fix(agents): harden compaction and reset safety
...
Co-authored-by: jaden-clovervnd <91520439+jaden-clovervnd@users.noreply.github.com >
Co-authored-by: Sid <201593046+Sid-Qin@users.noreply.github.com >
Co-authored-by: Marcus Widing <245375637+widingmarcus-cyber@users.noreply.github.com >
2026-02-26 17:41:24 +01:00
Peter Steinberger
1708b11fab
refactor(pi): simplify image reference detection
2026-02-26 16:52:13 +01:00
Peter Steinberger
75ed72e807
refactor(pi): extract history image prune helpers
2026-02-26 16:44:52 +01:00
Peter Steinberger
c81e9866ff
fix(pi): stop history image reinjection token blowup
2026-02-26 16:38:20 +01:00
Peter Steinberger
5c0255477c
fix: tolerate missing pi-coding-agent backend export
2026-02-26 16:11:37 +01:00
Onur Solmaz
a7d56e3554
feat: ACP thread-bound agents ( #23580 )
...
* docs: add ACP thread-bound agents plan doc
* docs: expand ACP implementation specification
* feat(acp): route ACP sessions through core dispatch and lifecycle cleanup
* feat(acp): add /acp commands and Discord spawn gate
* ACP: add acpx runtime plugin backend
* fix(subagents): defer transient lifecycle errors before announce
* Agents: harden ACP sessions_spawn and tighten spawn guidance
* Agents: require explicit ACP target for runtime spawns
* docs: expand ACP control-plane implementation plan
* ACP: harden metadata seeding and spawn guidance
* ACP: centralize runtime control-plane manager and fail-closed dispatch
* ACP: harden runtime manager and unify spawn helpers
* Commands: route ACP sessions through ACP runtime in agent command
* ACP: require persisted metadata for runtime spawns
* Sessions: preserve ACP metadata when updating entries
* Plugins: harden ACP backend registry across loaders
* ACPX: make availability probe compatible with adapters
* E2E: add manual Discord ACP plain-language smoke script
* ACPX: preserve streamed spacing across Discord delivery
* Docs: add ACP Discord streaming strategy
* ACP: harden Discord stream buffering for thread replies
* ACP: reuse shared block reply pipeline for projector
* ACP: unify streaming config and adopt coalesceIdleMs
* Docs: add temporary ACP production hardening plan
* Docs: trim temporary ACP hardening plan goals
* Docs: gate ACP thread controls by backend capabilities
* ACP: add capability-gated runtime controls and /acp operator commands
* Docs: remove temporary ACP hardening plan
* ACP: fix spawn target validation and close cache cleanup
* ACP: harden runtime dispatch and recovery paths
* ACP: split ACP command/runtime internals and centralize policy
* ACP: harden runtime lifecycle, validation, and observability
* ACP: surface runtime and backend session IDs in thread bindings
* docs: add temp plan for binding-service migration
* ACP: migrate thread binding flows to SessionBindingService
* ACP: address review feedback and preserve prompt wording
* ACPX plugin: pin runtime dependency and prefer bundled CLI
* Discord: complete binding-service migration cleanup and restore ACP plan
* Docs: add standalone ACP agents guide
* ACP: route harness intents to thread-bound ACP sessions
* ACP: fix spawn thread routing and queue-owner stall
* ACP: harden startup reconciliation and command bypass handling
* ACP: fix dispatch bypass type narrowing
* ACP: align runtime metadata to agentSessionId
* ACP: normalize session identifier handling and labels
* ACP: mark thread banner session ids provisional until first reply
* ACP: stabilize session identity mapping and startup reconciliation
* ACP: add resolved session-id notices and cwd in thread intros
* Discord: prefix thread meta notices consistently
* Discord: unify ACP/thread meta notices with gear prefix
* Discord: split thread persona naming from meta formatting
* Extensions: bump acpx plugin dependency to 0.1.9
* Agents: gate ACP prompt guidance behind acp.enabled
* Docs: remove temp experiment plan docs
* Docs: scope streaming plan to holy grail refactor
* Docs: refactor ACP agents guide for human-first flow
* Docs/Skill: add ACP feature-flag guidance and direct acpx telephone-game flow
* Docs/Skill: add OpenCode and Pi to ACP harness lists
* Docs/Skill: align ACP harness list with current acpx registry
* Dev/Test: move ACP plain-language smoke script and mark as keep
* Docs/Skill: reorder ACP harness lists with Pi first
* ACP: split control-plane manager into core/types/utils modules
* Docs: refresh ACP thread-bound agents plan
* ACP: extract dispatch lane and split manager domains
* ACP: centralize binding context and remove reverse deps
* Infra: unify system message formatting
* ACP: centralize error boundaries and session id rendering
* ACP: enforce init concurrency cap and strict meta clear
* Tests: fix ACP dispatch binding mock typing
* Tests: fix Discord thread-binding mock drift and ACP request id
* ACP: gate slash bypass and persist cleared overrides
* ACPX: await pre-abort cancel before runTurn return
* Extension: pin acpx runtime dependency to 0.1.11
* Docs: add pinned acpx install strategy for ACP extension
* Extensions/acpx: enforce strict local pinned startup
* Extensions/acpx: tighten acp-router install guidance
* ACPX: retry runtime test temp-dir cleanup
* Extensions/acpx: require proactive ACPX repair for thread spawns
* Extensions/acpx: require restart offer after acpx reinstall
* extensions/acpx: remove workspace protocol devDependency
* extensions/acpx: bump pinned acpx to 0.1.13
* extensions/acpx: sync lockfile after dependency bump
* ACPX: make runtime spawn Windows-safe
* fix: align doctor-config-flow repair tests with default-account migration (#23580 ) (thanks @osolmaz)
2026-02-26 11:00:09 +01:00
Peter Steinberger
878b4e0ed7
refactor: unify tools.fs workspaceOnly resolution
2026-02-24 15:14:05 +00:00
Peter Steinberger
370d115549
fix: enforce workspaceOnly for native prompt image autoload
2026-02-24 14:47:59 +00:00
Peter Steinberger
d427d09b5e
fix: align reasoning payload typing for #24991 (thanks @stakeswky)
2026-02-24 04:34:49 +00:00
User
7d76c241f8
fix: suppress reasoning payloads from generic channel dispatch path
...
When reasoningLevel is 'on', reasoning content was being sent as a
visible message to WhatsApp and other non-Telegram channels via two
paths:
1. Block reply: emitted via onBlockReply in handleMessageEnd
2. Final payloads: added to replyItems in buildEmbeddedRunPayloads
Telegram has its own dispatch path (bot-message-dispatch.ts) that
splits reasoning into a dedicated lane and handles suppression.
The generic dispatch-from-config.ts path used by WhatsApp, web, etc.
had no such filtering.
Fix:
- Add isReasoning?: boolean flag to ReplyPayload
- Tag reasoning payloads at both emission points
- Filter isReasoning payloads in dispatch-from-config.ts for both
block reply and final reply paths
Telegram is unaffected: it uses its own deliver callback that detects
reasoning via the 'Reasoning:\n' prefix and routes to a separate lane.
Fixes #24954
2026-02-24 04:34:49 +00:00
Peter Steinberger
6c1ed9493c
fix: harden queue retry debounce and add regression tests
2026-02-24 03:52:49 +00:00
Peter Steinberger
dd145f1346
fix: suppress sessions_send warning leakage coverage ( #24740 ) (thanks @Glucksberg)
2026-02-24 03:49:52 +00:00
Glucksberg
947883d2e0
fix: suppress sessions_send error warnings from leaking to chat ( #23989 )
...
sessions_send timeout/error results were being surfaced as raw warning
messages in Telegram chats because the tool is classified as mutating,
which forces error warnings to always be shown. However, sessions_send
failures are transient inter-session communication issues where the
message may still have been delivered, so they should not leak to users.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-24 03:49:52 +00:00
Sid
d95ee859f8
fix(cron): use full prompt mode for isolated cron sessions to include skills ( #24944 )
...
Isolated cron sessions (agentTurn) were grouped with subagent sessions
under the "minimal" prompt mode, which causes buildSkillsSection to
return an empty array. This meant <available_skills> was never included
in the system prompt for isolated cron runs.
Subagent sessions legitimately need minimal prompts (reduced context),
but isolated cron sessions are full agent turns that should have access
to all configured skills, matching the behavior of normal chat sessions
and non-isolated cron runs.
Remove isCronSessionKey from the minimal prompt condition so only
subagent sessions use "minimal" mode.
Fixes openclaw#24888
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-24 03:33:54 +00:00
Peter Steinberger
160bd61fff
feat(agents): add per-agent stream params overrides for cache tuning ( #17470 ) (thanks @rrenamed)
2026-02-23 18:46:40 +00:00
LI SHANXIN
c1b75ab8e2
fix(telegram): make reaction handling soft-fail and message-id resilient ( #20236 )
...
* Telegram: soft-fail reactions and fallback to inbound message id
* Telegram: soft-fail missing reaction message id
* Update CHANGELOG.md
---------
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-02-23 10:25:14 -05:00
Peter Steinberger
382fe8009a
refactor!: remove google-antigravity provider support
2026-02-23 05:20:14 +01:00
yinghaosang
a66b98a9da
fix(plugins): hook systemPrompt gets collected then thrown away ( #14583 ) ( #14602 )
...
* fix(plugins): apply before_agent_start hook systemPrompt to session (#14583 )
* fix(plugins): apply legacy systemPrompt override and add changelog credit
---------
Co-authored-by: yinghaosang <yinghaosang@users.noreply.github.com >
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-02-22 18:58:21 -05:00
Peter Steinberger
f79e3d5f03
fix(agents): remove synthetic done fallback reply
2026-02-23 00:50:00 +01:00
Peter Steinberger
394a1af70f
fix(exec): apply per-agent exec defaults for opaque session keys
...
Co-authored-by: brin-tapcart <brin-tapcart@users.noreply.github.com >
2026-02-22 23:33:14 +01:00
Vignesh Natarajan
d75b594e07
Agents/Replies: scope done fallback to direct sessions
2026-02-22 13:30:30 -08:00
青雲
3dfee78d72
fix: sanitize tool call IDs in agent loop for Mistral strict9 format ( #23595 ) ( #23698 )
...
* fix: sanitize tool call IDs in agent loop for Mistral strict9 format (#23595 )
Mistral requires tool call IDs to be exactly 9 alphanumeric characters
([a-zA-Z0-9]{9}). The existing sanitizeToolCallIdsForCloudCodeAssist
mechanism only ran on historical messages at attempt start via
sanitizeSessionHistory, but the pi-agent-core agent loop's internal
tool call → tool result cycles bypassed that path entirely.
Changes:
- Wrap streamFn (like dropThinkingBlocks) so every outbound request
sees sanitized tool call IDs when the transcript policy requires it
- Replace call_${Date.now()} in pendingToolCalls with a 9-char hex ID
generated from crypto.randomBytes
- Add Mistral tool call ID error pattern to ERROR_PATTERNS.format so
the error is correctly classified for retry/rotation
* Changelog: document Mistral strict9 tool-call ID fix
---------
Co-authored-by: echoVic <AkiraVic@outlook.com >
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-02-22 13:37:12 -05:00
Robby
99cfb3dab2
fix(openrouter): pass reasoning.effort based on thinking level ( #14664 ) ( #17236 )
...
* fix(openrouter): pass reasoning.effort to OpenRouter API (#14664 )
* Agents: pass thinkLevel to extra-params wrapper
* Changelog: note fix/openrouter-reasoning-effort-14664 OpenRouter fix
* Changelog: fix OpenRouter entry text
---------
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-02-22 12:14:12 -05:00
Peter Steinberger
4c355a28a3
refactor: centralize tool-error visibility policy
2026-02-22 15:30:53 +01:00
Peter Steinberger
835be4392e
fix: gate tool error details behind verbose
2026-02-22 15:26:47 +01:00
Peter Steinberger
d116bcfb14
refactor(runtime): consolidate followup, gateway, and provider dedupe paths
2026-02-22 14:08:51 +00:00
Peter Steinberger
5b23159c4c
test: create homedir before sandbox image mkdtemp
2026-02-22 12:35:38 +00:00
Peter Steinberger
fcb86408fd
test: move embedded and tool agent suites out of e2e
2026-02-22 11:17:47 +00:00
Peter Steinberger
713e2928b2
test: move duplicate local scenario suites out of agents e2e
2026-02-22 10:56:58 +00:00
Peter Steinberger
c99e7696e6
fix: decouple owner display secret from gateway auth token
2026-02-22 09:35:07 +01:00
Vignesh Natarajan
6ceadaa41f
Agents: add fallback reply for tool-only completions
2026-02-22 00:23:31 -08:00
Vignesh Natarajan
cdfe45eeb8
Agents: validate persisted tool-call names
2026-02-21 23:06:44 -08:00
Vignesh Natarajan
542fc169d2
Plugins/Hooks: avoid duplicate before_agent_start executions
2026-02-21 22:31:51 -08:00
Vincent Koc
9abab6a2c9
Add explicit ownerDisplaySecret for owner ID hash obfuscation ( #22520 )
...
* feat(config): add owner display secret setting
* feat(prompt): add explicit owner hash secret to obfuscation path
* test(prompt): assert owner hash secret mode behavior
* Update src/agents/system-prompt.ts
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
---------
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-02-21 03:13:56 -05:00
Glucksberg
1410d15c5e
fix: compaction safeguard extension not loading in production builds (openclaw#22349) thanks @Glucksberg
...
Verified:
- pnpm build
- pnpm check
- pnpm test:macmini (local run had unrelated baseline failures; Tak approved proceed)
Co-authored-by: Glucksberg <80581902+Glucksberg@users.noreply.github.com >
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com >
2026-02-20 21:21:09 -06:00
jackheuberger
feccac6723
fix: sanitize thinking blocks for GitHub Copilot Claude models (openclaw#19459) thanks @jackheuberger
...
Verified:
- pnpm build
- pnpm check
- pnpm test:macmini
Co-authored-by: jackheuberger <12731288+jackheuberger@users.noreply.github.com >
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com >
2026-02-20 19:48:09 -06:00
Tak Hoffman
c1ac37a641
Config: expose Pi compaction tuning values (openclaw#21568) thanks @Takhoffman
...
Verified:
- pnpm install --frozen-lockfile
- pnpm build
- pnpm check
- pnpm test:macmini
Co-authored-by: Takhoffman <781889+Takhoffman@users.noreply.github.com >
2026-02-19 21:41:09 -06:00
Peter Steinberger
b41fd20741
test(agents): share assistant error message test fixture
2026-02-19 08:55:33 +00:00