Vincent Koc
9fed9f1302
fix(session): tighten direct-session webchat routing matching ( #37867 )
...
* fix(session): require strict direct key routing shapes
* test(session): cover direct route poisoning cases
2026-03-06 08:53:16 -05:00
Frank Yang
5fdcef7cbe
fix(session): prefer webchat routes for direct ui turns ( #37135 )
2026-03-06 01:14:13 -05:00
Octane
777af476cb
Respect source channel for agent event surfacing ( #36030 )
2026-03-06 01:14:00 -05:00
Vincent Koc
6c39616ecd
Fix Control UI duplicate iMessage replies for internal webchat turns ( #36151 )
...
* Auto-reply: avoid routing external replies from internal webchat turns
* Auto-reply tests: cover internal webchat non-routing with external origin metadata
* Changelog: add Control UI iMessage duplicate-reply fix note
* Auto-reply context: track explicit deliver routes
* Gateway chat: mark explicit external deliver routes in context
* Auto-reply: preserve explicit deliver routes for internal webchat turns
* Auto-reply tests: cover explicit deliver routes from internal webchat turns
* Gateway chat tests: assert explicit deliver route context tagging
2026-03-06 00:47:57 -05:00
dorukardahan
5d4b04040d
feat(openai): add gpt-5.4 support for API and Codex OAuth ( #36590 )
...
* feat(openai): add gpt-5.4 support and priority processing
* feat(openai-codex): add gpt-5.4 oauth support
* fix(openai): preserve provider overrides in gpt-5.4 fallback
* fix(openai-codex): keep xhigh for gpt-5.4 default
* fix(models): preserve configured overrides in list output
* fix(models): close gpt-5.4 integration gaps
* fix(openai): scope service tier to public api
* fix(openai): complete prep followups for gpt-5.4 support (#36590 ) (thanks @dorukardahan)
---------
Co-authored-by: Tyler Yust <TYTYYUST@YAHOO.COM >
2026-03-05 21:01:37 -08:00
Vignesh Natarajan
d45353f95b
fix(agents): honor explicit rate-limit cooldown probes in fallback runs
2026-03-05 20:03:06 -08:00
Tyler Yust
81b93b9ce0
fix(subagents): announce delivery with descendant gating, frozen result refresh, and cron retry ( #35080 )
...
Thanks @tyler6204
2026-03-05 19:20:24 -08:00
dunamismax
1efa7a88c4
fix(slack): thread channel ID through inbound context for reactions ( #34831 )
...
Slack reaction/thread context routing fixes via canonical synthesis of #34831 .
Co-authored-by: Tak <tak@users.noreply.github.com >
2026-03-05 20:47:31 -06:00
zerone0x
94fdee2eac
fix(memory-flush): ban timestamped variant files in default flush prompt ( #34951 )
...
Merged via squash.
Prepared head SHA: efadda4988
Co-authored-by: zerone0x <39543393+zerone0x@users.noreply.github.com >
Co-authored-by: jalehman <550978+jalehman@users.noreply.github.com >
Reviewed-by: @jalehman
2026-03-05 18:15:13 -08:00
Harold Hunt
d58dafae88
feat(telegram/acp): Topic Binding, Pin Binding Message, Fix Spawn Param Parsing ( #36683 )
...
* fix(acp): normalize unicode flags and Telegram topic binding
* feat(telegram/acp): restore topic-bound ACP and session bindings
* fix(acpx): clarify permission-denied guidance
* feat(telegram/acp): pin spawn bind notice in topics
* docs(telegram): document ACP topic thread binding behavior
* refactor(reply): share Telegram conversation-id resolver
* fix(telegram/acp): preserve bound session routing semantics
* fix(telegram): respect binding persistence and expiry reporting
* refactor(telegram): simplify binding lifecycle persistence
* fix(telegram): bind acp spawns in direct messages
* fix: document telegram ACP topic binding changelog (#36683 ) (thanks @huntharo)
---------
Co-authored-by: Onur <2453968+osolmaz@users.noreply.github.com >
2026-03-06 02:17:50 +01:00
Sid
60d33637d9
fix(auth): grant senderIsOwner for internal channels with operator.admin scope (openclaw#35704)
...
Verified:
- pnpm install --frozen-lockfile
- pnpm build
- pnpm check
- pnpm test:macmini
Co-authored-by: Naylenv <45486779+Naylenv@users.noreply.github.com >
Co-authored-by: Octane0411 <88922959+Octane0411@users.noreply.github.com >
Co-authored-by: Sid-Qin <201593046+Sid-Qin@users.noreply.github.com >
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com >
2026-03-05 16:32:42 -06:00
Jacob Riff
aad372e15f
feat: append UTC time alongside local time in shared Current time lines ( #32423 )
...
Merged via squash.
Prepared head SHA: 9e8ec13933
Co-authored-by: jriff <50276+jriff@users.noreply.github.com >
Co-authored-by: altaywtf <9790196+altaywtf@users.noreply.github.com >
Reviewed-by: @altaywtf
2026-03-06 01:26:34 +03:00
Byungsker
709dc671e4
fix(session): archive old transcript on daily/scheduled reset to prevent orphaned files ( #35493 )
...
Merged via squash.
Prepared head SHA: 0d95549d75
Co-authored-by: byungsker <72309817+byungsker@users.noreply.github.com >
Co-authored-by: jalehman <550978+jalehman@users.noreply.github.com >
Reviewed-by: @jalehman
2026-03-05 11:52:23 -08:00
Bob
6a705a37f2
ACP: add persistent Discord channel and Telegram topic bindings ( #34873 )
...
* docs: add ACP persistent binding experiment plan
* docs: align ACP persistent binding spec to channel-local config
* docs: scope Telegram ACP bindings to forum topics only
* docs: lock bound /new and /reset behavior to in-place ACP reset
* ACP: add persistent discord/telegram conversation bindings
* ACP: fix persistent binding reuse and discord thread parent context
* docs: document channel-specific persistent ACP bindings
* ACP: split persistent bindings and share conversation id helpers
* ACP: defer configured binding init until preflight passes
* ACP: fix discord thread parent fallback and explicit disable inheritance
* ACP: keep bound /new and /reset in-place
* ACP: honor configured bindings in native command flows
* ACP: avoid configured fallback after runtime bind failure
* docs: refine ACP bindings experiment config examples
* acp: cut over to typed top-level persistent bindings
* ACP bindings: harden reset recovery and native command auth
* Docs: add ACP bound command auth proposal
* Tests: normalize i18n registry zh-CN assertion encoding
* ACP bindings: address review findings for reset and fallback routing
* ACP reset: gate hooks on success and preserve /new arguments
* ACP bindings: fix auth and binding-priority review findings
* Telegram ACP: gate ensure on auth and accepted messages
* ACP bindings: fix session-key precedence and unavailable handling
* ACP reset/native commands: honor fallback targets and abort on bootstrap failure
* Config schema: validate ACP binding channel and Telegram topic IDs
* Discord ACP: apply configured DM bindings to native commands
* ACP reset tails: dispatch through ACP after command handling
* ACP tails/native reset auth: fix target dispatch and restore full auth
* ACP reset detection: fallback to active ACP keys for DM contexts
* Tests: type runTurn mock input in ACP dispatch test
* ACP: dedup binding route bootstrap and reset target resolution
* reply: align ACP reset hooks with bound session key
* docs: replace personal discord ids with placeholders
* fix: add changelog entry for ACP persistent bindings (#34873 ) (thanks @dutifulbob)
---------
Co-authored-by: Onur <2453968+osolmaz@users.noreply.github.com >
2026-03-05 09:38:12 +01:00
Shakker
b5a94d274b
style(skills): align formatting cleanup for dedupe changes
2026-03-05 05:11:06 +00:00
Shivam
fb4f52b710
style: fix formatting in skill-commands.test.ts and provider.ts
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-05 05:11:06 +00:00
Shivam
48decefbf4
fix(skills): deduplicate slash commands by skillName across all interfaces
...
Move skill-command deduplication by skillName from the Discord-only
`dedupeSkillCommandsForDiscord` into `listSkillCommandsForAgents` so
every interface (TUI, Slack, text) consistently sees a clean command
list without platform-specific workarounds.
When multiple agents share a skill with the same name the old code
emitted `github` + `github_2` and relied on Discord to collapse them.
Now `listSkillCommandsForAgents` returns only the first registration
per skillName, and the Discord-specific wrapper is removed.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-05 05:11:06 +00:00
Isis Anisoptera
432e0222dd
fix: restore auto-reply system events timeline ( #34794 ) (thanks @anisoptera) ( #34794 )
...
Co-authored-by: Ayaan Zaidi <zaidi@uplause.io >
2026-03-05 07:56:14 +05:30
青雲
96021a2b17
fix: align AGENTS.md template section names with post-compaction extraction ( #25029 ) ( #25098 )
...
Merged via squash.
Prepared head SHA: 8cd6cc8049
Co-authored-by: echoVic <16428813+echoVic@users.noreply.github.com >
Co-authored-by: jalehman <550978+jalehman@users.noreply.github.com >
Reviewed-by: @jalehman
2026-03-04 12:16:00 -08:00
Tak Hoffman
7f2708a8c3
fix(routing): unify session delivery invariants for duplicate suppression ( #33786 )
...
* Routing: unify session delivery invariants
* Routing: address PR review feedback
* Routing: tighten topic and session-scope suppression
* fix(chat): inherit routes for per-account channel-peer sessions
2026-03-03 21:40:38 -06:00
Josh Avant
1c200ca7ae
follow-up: align ingress, atomic paths, and channel tests with credential semantics ( #33733 )
...
Merged via squash.
Prepared head SHA: c290c2ab6a
Co-authored-by: joshavant <830519+joshavant@users.noreply.github.com >
Co-authored-by: joshavant <830519+joshavant@users.noreply.github.com >
Reviewed-by: @joshavant
2026-03-03 20:29:46 -06:00
Gustavo Madeira Santana
21e8d88c1d
build: fix ineffective dynamic imports with lazy boundaries ( #33690 )
...
Merged via squash.
Prepared head SHA: 38b3c23d6f
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com >
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com >
Reviewed-by: @gumadeiras
2026-03-03 20:14:41 -05:00
Gustavo Madeira Santana
0d97101665
Agents: preserve bootstrap warning dedupe across followup runs
2026-03-03 18:56:11 -05:00
Gustavo Madeira Santana
e4b4486a96
Agent: unify bootstrap truncation warning handling ( #32769 )
...
Merged via squash.
Prepared head SHA: 5d6d4ddfa6
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com >
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com >
Reviewed-by: @gumadeiras
2026-03-03 16:28:38 -05:00
Shadow
b8b1eeb052
fix(discord): harden slash command routing
2026-03-03 11:32:05 -06:00
Ayaan Zaidi
3d998828b9
fix: stabilize Telegram draft boundaries and suppress NO_REPLY lead leaks ( #33169 )
...
* fix: stabilize telegram draft stream message boundaries
* fix: suppress NO_REPLY lead-fragment leaks
* fix: keep underscore guard for non-NO_REPLY prefixes
* fix: skip assistant-start rotation only after real lane rotation
* fix: preserve finalized state when pre-rotation does not force
* fix: reset finalized preview state on message-start boundary
* fix: document Telegram draft boundary + NO_REPLY reliability updates (#33169 ) (thanks @obviyus)
2026-03-03 22:49:33 +05:30
Shadow
66d06beec6
fix(discord): stop typing after silent runs
2026-03-03 10:22:27 -06:00
Shadow
4abf398a17
fix: Discord acp inline actions + bound-thread filter ( #33136 ) (thanks @thewilloftheshadow) ( #33136 )
2026-03-03 09:30:21 -06:00
chengzhichao-xydt
53727c72f4
fix: substitute YYYY-MM-DD at session startup and post-compaction ( #32363 ) ( #32381 )
...
Merged via squash.
Prepared head SHA: aee998a2c1
Co-authored-by: chengzhichao-xydt <264300353+chengzhichao-xydt@users.noreply.github.com >
Co-authored-by: jalehman <550978+jalehman@users.noreply.github.com >
Reviewed-by: @jalehman
2026-03-03 06:21:26 -08:00
Peter Steinberger
884ca65dc7
refactor(acp): dedupe runtime option command plumbing
2026-03-03 02:53:13 +00:00
Peter Steinberger
fa4ff5f3d2
refactor(acp): extract install hint resolver
2026-03-03 02:51:24 +00:00
Ayaan Zaidi
87977d7a19
fix: unblock build type errors
2026-03-03 08:11:51 +05:30
Peter Steinberger
8ee357fc76
refactor: extract session init helpers
2026-03-03 02:37:23 +00:00
john
04ac688dff
fix(acp): use publishable acpx install hint
2026-03-03 02:34:07 +00:00
Peter Steinberger
0fd77c9856
refactor: modularize plugin runtime and test hooks
2026-03-03 02:06:58 +00:00
Peter Steinberger
c0715db3c8
fix: add session hook context regression tests ( #26394 ) (thanks @tempeste)
2026-03-03 01:48:46 +00:00
tempeste
20c15ccc63
Plugins: add sessionKey to session lifecycle hooks
2026-03-03 01:48:46 +00:00
David Rudduck
11e1363d2d
feat(hooks): add trigger and channelId to plugin hook agent context ( #28623 )
...
* feat(hooks): add trigger and channelId to plugin hook agent context
Adds `trigger` and `channelId` fields to `PluginHookAgentContext` so
plugins can determine what initiated the agent run and which channel
it originated from, without session-key parsing or Redis bridging.
trigger values: "user", "heartbeat", "cron", "memory"
channelId values: "telegram", "discord", "whatsapp", etc.
Both fields are threaded through run.ts and attempt.ts hookCtx so all
hook phases receive them (before_model_resolve, before_prompt_build,
before_agent_start, llm_input, llm_output, agent_end).
channelId falls back from messageChannel to messageProvider when the
former is not set. followup-runner passes originatingChannel so queued
followup runs also carry channel context.
* docs(changelog): note hook context parity fix for #28623
---------
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-03-02 17:39:20 -08:00
Peter Steinberger
666073ee46
test: fix tsgo baseline test compatibility
2026-03-03 01:24:20 +00:00
Peter Steinberger
a48a3dbdda
refactor(tests): dedupe tool, projector, and delivery fixtures
2026-03-03 01:06:00 +00:00
hcl
503d395780
fix(memoryFlush): guard transcript-size forced flush against repeated runs ( #32358 )
...
The `forceFlushTranscriptBytes` path (introduced in d729ab21 ) bypasses the
`memoryFlushCompactionCount` guard that prevents repeated flushes within the
same compaction cycle. Once the session transcript exceeds 2 MB, memory flush
fires on every single message — even when token count is well under the
compaction threshold.
Extract `hasAlreadyFlushedForCurrentCompaction()` from the inline guard in
`shouldRunMemoryFlush` and apply it to both the token-based and the
transcript-size trigger paths.
Fixes #32317
Signed-off-by: HCL <chenglunhu@gmail.com >
2026-03-03 01:00:18 +00:00
Peter Steinberger
47083460ea
refactor: unify inbound debounce policy and split gateway/models helpers
2026-03-03 00:54:33 +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
d3dc4e54f7
perf(runtime): trim hot-path allocations and cache channel plugin lookups
2026-03-02 23:56:30 +00:00
Peter Steinberger
32ecd6f579
refactor(auto-reply,telegram,config): extract guard and forum helpers
2026-03-02 23:48:11 +00:00
Peter Steinberger
73e08ed7b0
test: expand reminder guard fail-closed coverage ( #32255 ) (thanks @scoootscooob)
2026-03-02 23:35:14 +00:00
scoootscooob
5868344ade
fix(reminder): do not suppress note when sessionKey is unavailable
...
Address Greptile review: when sessionKey is undefined the fallback
matched any enabled cron job, which could silently suppress the guard
note due to jobs from unrelated sessions. Return false instead so the
note always appears when session scoping is not possible.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-02 23:35:14 +00:00
scoootscooob
abb0252a1a
fix(reply): suppress unscheduled-reminder note when session already has active cron
...
Before appending the "I did not schedule a reminder" guard note, check the
cron store for enabled jobs matching the current session key. This prevents
false positives when the agent references an existing cron created in a
prior turn (e.g. "I'll ping you when it's done" while a monitoring cron is
already running).
The check only fires on the rare path where the text matches commitment
patterns AND no cron was added in the current turn, so the added I/O is
negligible.
Closes #32228
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-02 23:35:14 +00:00
Peter Steinberger
7066d5e192
refactor: extract shared sandbox and gateway plumbing
2026-03-02 23:16:47 +00:00