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
Ayaan Zaidi
e6a5d5784c
feat(gateway): allow notifications.list for android nodes
2026-02-26 14:33:14 +05:30
Gustavo Madeira Santana
39a1c13635
chore(ci): fix cross-platform symlink path assertions in agents file tests
2026-02-26 00:39:18 -05:00
Peter Steinberger
1e7ec8bfd2
fix(routing): preserve explicit cron account and bound message defaults
...
Co-authored-by: lbo728 <72309817+lbo728@users.noreply.github.com >
Co-authored-by: stakeswky <64798754+stakeswky@users.noreply.github.com >
2026-02-26 02:56:03 +00:00
Peter Steinberger
92eb3dfc9d
refactor(security): unify exec approval request matching
2026-02-26 03:54:37 +01:00
Peter Steinberger
03e689fc89
fix(security): bind system.run approvals to argv identity
2026-02-26 03:41:31 +01:00
Peter Steinberger
0cc3e8137c
refactor(gateway): centralize trusted-proxy control-ui bypass policy
2026-02-26 02:26:52 +01:00
Peter Steinberger
8c701ba1ff
test(gateway): add hooks bind-host hardening coverage
2026-02-26 00:54:39 +00:00
Peter Steinberger
ec45c317f5
fix(gateway): block trusted-proxy control-ui node bypass
2026-02-26 01:54:19 +01:00
Peter Steinberger
70e31c6f68
fix(gateway): harden hooks URL parsing ( #26864 )
2026-02-26 00:47:35 +00:00
Peter Steinberger
f312222159
test: preserve config exports in agent handler mock
2026-02-26 00:42:51 +00:00
Peter Steinberger
aaeed3c4ea
test(agents): add missing announce delivery regressions
2026-02-26 00:38:34 +00:00
Peter Steinberger
20c2db2103
refactor(gateway): split browser auth hardening paths
2026-02-26 01:37:00 +01:00
Peter Steinberger
4258a3307f
refactor(agents): unify subagent announce delivery pipeline
...
Co-authored-by: Smith Labs <SmithLabsLLC@users.noreply.github.com >
Co-authored-by: Do Cao Hieu <docaohieu2808@users.noreply.github.com >
2026-02-26 00:30:44 +00:00
Peter Steinberger
c736f11a16
fix(gateway): harden browser websocket auth chain
2026-02-26 01:22:49 +01:00
Peter Steinberger
8d1481cb4a
fix(gateway): require pairing for unpaired operator device auth
2026-02-26 00:52:50 +01:00
Peter Steinberger
2011edc9e5
fix(gateway): preserve agentId through gateway send path
...
Landed from #23249 by @Sid-Qin.
Includes extra regression tests for agentId precedence + blank fallback.
Co-authored-by: Sid <201593046+Sid-Qin@users.noreply.github.com >
2026-02-25 23:31:35 +00:00
Peter Steinberger
125f4071bc
fix(gateway): block agents.files symlink escapes
2026-02-26 00:31:08 +01:00
byungsker
177386ed73
fix(tui): resolve wrong provider prefix when session has model without modelProvider ( #25874 )
...
Merged via /review-pr -> /prepare-pr -> /merge-pr.
Prepared head SHA: f0953a7284
Co-authored-by: lbo728 <72309817+lbo728@users.noreply.github.com >
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com >
Reviewed-by: @gumadeiras
2026-02-25 00:36:27 -05:00
Peter Steinberger
146c92069b
fix: stabilize live docker test handling
2026-02-25 04:35:05 +00:00
Peter Steinberger
7c59b78aee
test: cap docker live model sweeps and harden timeouts
2026-02-25 02:48:34 +00:00
Peter Steinberger
885452f5c1
fix: fail-closed shared-session reply routing ( #24571 ) (thanks @brandonwise)
2026-02-25 02:11:34 +00:00
Vincent Koc
5509bf2c75
Gateway tests: include synthetic allowlist models in models.list
2026-02-24 19:16:02 -05:00
Vincent Koc
f7cf3d0dad
Gateway tests: accept allowlisted refs absent from catalog
2026-02-24 19:16:02 -05:00
Vincent Koc
83f586b93b
Gateway tests: cover exact do not do that stop matching
2026-02-24 18:50:53 -05:00
Peter Steinberger
53f9b7d4e7
fix(automation): harden announce delivery + cron coding profile ( #25813 #25821 #25822 )
...
Co-authored-by: Shawn <shenghuikevin@shenghuideMac-mini.local >
Co-authored-by: 不做了睡大觉 <user@example.com >
Co-authored-by: Marcus Widing <widing.marcus@gmail.com >
2026-02-24 23:49:34 +00:00
Brian Mendonca
5a64f6d766
Gateway/Security: protect /api/channels plugin root
2026-02-24 23:44:32 +00:00
Nimrod Gutman
d58f71571a
feat(talk): add provider-agnostic config with legacy compatibility
2026-02-24 15:02:52 +00:00
SidQin-cyber
20523b918a
fix(gateway): allow trusted-proxy control-ui auth to skip device pairing
...
Control UI connections authenticated via gateway.auth.mode=trusted-proxy were
still forced through device pairing because pairing bypass only considered
shared token/password auth (sharedAuthOk). In trusted-proxy deployments,
this produced persistent "pairing required" failures despite valid trusted
proxy headers.
Treat authenticated trusted-proxy control-ui connections as pairing-bypass
eligible and allow missing device identity in that mode.
Fixes #25293
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-02-24 14:17:54 +00:00
Vincent Koc
4b316c33db
Auto-reply: normalize stop matching and add multilingual triggers ( #25103 )
...
* Auto-reply tests: cover multilingual abort triggers
* Auto-reply: normalize multilingual abort triggers
* Gateway: route chat stop matching through abort parser
* Gateway tests: cover chat stop parsing variants
* Auto-reply tests: cover Russian and German stop words
* Auto-reply: add Russian and German abort triggers
* Gateway tests: include Russian and German stop forms
* Telegram tests: route Russian and German stop forms to control lane
* Changelog: note multilingual abort stop coverage
* Changelog: add shared credit for abort shortcut update
2026-02-24 01:07:25 -05:00
Marco Di Dionisio
83689fc838
fix: include trusted-proxy in sharedAuthOk check
...
In trusted-proxy mode, sharedAuthResult is null because hasSharedAuth
only triggers for token/password in connectParams.auth. But the primary
auth (authResult) already validated the trusted-proxy — the connection
came from a CIDR in trustedProxies with a valid userHeader. This IS
shared auth semantically (the proxy vouches for identity), so operator
connections should be able to skip device identity.
Without this fix, trusted-proxy operator connections are rejected with
"device identity required" because roleCanSkipDeviceIdentity() sees
sharedAuthOk=false.
(cherry picked from commit e87048a6a6 )
2026-02-24 04:33:51 +00:00
Brian Mendonca
d51a4695f0
Deny cron tool on /tools/invoke by default
...
(cherry picked from commit 816a6b3a4d )
2026-02-24 04:33:50 +00:00
Peter Steinberger
803e02d8df
fix: adapt landed fixups to current type and approval constraints
2026-02-24 04:20:30 +00:00
Brian Mendonca
3f5e7f8156
fix(gateway): consume allow-once approvals to prevent replay
...
(cherry picked from commit 6adacd447c )
2026-02-24 04:20:30 +00:00
Sahil Satralkar
8796c78b3d
Gateway: propagate message target and thread headers into tools invoke context
2026-02-24 04:12:25 +00:00
Sahil Satralkar
28d658e178
Tests: verify tools invoke propagates route headers for subagent spawn context
2026-02-24 04:12:25 +00:00
Ian Eaves
3129d1c489
fix(gateway): start browser HTTP control server module
2026-02-24 04:06:03 +00:00
Peter Steinberger
6c1ed9493c
fix: harden queue retry debounce and add regression tests
2026-02-24 03:52:49 +00:00
Sid
c1fe688d40
fix(gateway): safely extract text from content arrays in prompt builder ( #24946 )
...
* fix(gateway): safely extract text from message content arrays in prompt builder
When HistoryEntry.body is a content array (e.g. [{type:"text",
text:"hello"}]) rather than a plain string, template literal
interpolation produces "[object Object]" instead of the actual message
text. This affects users whose session messages were stored with array
content format.
Add a safeBody helper that detects non-string body values and uses
extractTextFromChatContent to extract the text, preventing the
[object Object] serialization in both the current-message return path
and the history formatting path.
Fixes openclaw#24688
Co-authored-by: Cursor <cursoragent@cursor.com >
* fix: format gateway agent prompt helper (#24946 )
---------
Co-authored-by: Cursor <cursoragent@cursor.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-02-24 03:33:37 +00:00
青雲
52ac7634db
fix: persist reasoningLevel 'off' instead of deleting it ( #24406 ) ( #24559 )
...
When a user runs /reasoning off, the session patch handler deleted
the reasoningLevel field from the session entry. This caused
get-reply-directives to treat reasoning as 'not explicitly set',
which triggered resolveDefaultReasoningLevel() to re-enable
reasoning for capable models (e.g. Claude Opus).
The fix persists 'off' explicitly, matching how directive-handling.persist.ts
already handles the inline /reasoning off command.
Fixes #24406
Fixes #24411
Co-authored-by: echoVic <AkiraVic@outlook.com >
2026-02-24 03:33:30 +00:00
David Murray
e2e10b3da4
fix(slack): map threadId to replyToId for restart sentinel notifications ( #24885 )
...
The restart sentinel wake path passes threadId to deliverOutboundPayloads,
but Slack requires replyToId (mapped to thread_ts) for threading. The agent
reply path already does this conversion but the sentinel path did not,
causing post-restart notifications to land as top-level DMs.
Fixes #17716
2026-02-24 03:22:45 +00:00
Peter Steinberger
4a3f8438e5
fix(gateway): bind node exec approvals to nodeId
2026-02-24 03:05:58 +00:00
Peter Steinberger
223d7dc23d
feat(gateway)!: require explicit non-loopback control-ui origins
2026-02-24 01:57:11 +00:00
Peter Steinberger
e5931554bf
test: tighten slow test timeouts and cleanup
2026-02-24 01:16:53 +00:00
Peter Steinberger
6c43d0a08e
test(gateway): move sessions_send error paths to unit tests
2026-02-24 01:16:53 +00:00
Peter Steinberger
0cc327546b
test(gateway): speed up slow e2e test setup
2026-02-24 00:59:52 +00:00
Vincent Koc
30c622554f
Providers: disable developer role for DashScope-compatible endpoints ( #24675 )
...
* Agents: disable developer role for DashScope-compatible endpoints
* Agents: test DashScope developer-role compatibility
* Gateway: test allowlisted sessions.patch model selection
* Changelog: add DashScope role-compat fix note
2026-02-23 19:51:16 -05:00
Peter Steinberger
f58c1ef34e
test(gateway): speed up contract and polling suites
2026-02-24 00:31:58 +00:00
Peter Steinberger
f52a0228ca
test: optimize auth and audit test runtime
2026-02-23 23:31:52 +00:00
Peter Steinberger
ddb7ec99a8
test: speed up cron test polling and waits
2026-02-23 22:42:23 +00:00