Keenan
050e928985
[codex] Fix main-session web UI reply routing to Telegram (openclaw#29328) thanks @BeeSting50
...
Verified:
- pnpm test src/auto-reply/reply/dispatch-from-config.test.ts src/gateway/server-methods/chat.directive-tags.test.ts
- pnpm exec oxfmt --check src/auto-reply/reply/dispatch-from-config.test.ts src/gateway/server-methods/chat.directive-tags.test.ts src/auto-reply/reply/dispatch-from-config.ts src/gateway/server-methods/chat.ts CHANGELOG.md
- CI note: non-required check "check" failed on unrelated src/slack/monitor/events/messages.ts TS errors outside this PR scope.
Co-authored-by: BeeSting50 <85285887+BeeSting50@users.noreply.github.com>
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>
2026-03-02 07:54:16 -06:00
Peter Steinberger
264599cc1d
refactor(core): share JSON utf8 byte counting helper
2026-03-02 05:20:19 +00:00
Mark L
0f2dce0483
fix(agents): prioritize per-model thinking defaults ( #30439 )
...
* fix(agents): honor per-model thinking defaults
* fix(agents): preserve thinking fallback with model defaults
---------
Co-authored-by: Mark L <73659136+markliuyuxiang@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-03-02 04:00:02 +00:00
Vignesh Natarajan
a10ec2607f
Gateway/Chat UI: sanitize untrusted wrapper markup in final payloads
2026-02-22 16:53:54 -08:00
Peter Steinberger
142c0a7f7d
refactor: extract gateway transcript append helper
2026-02-22 14:44:19 +00:00
Peter Steinberger
78c3c2a542
fix: stabilize flaky tests and sanitize directive-only chat tags
2026-02-22 12:19:33 +01:00
SidQin-cyber
e6490732cd
fix(gateway): strip directive tags from non-streaming webchat broadcasts
...
Closes #23053
The streaming path already strips [[reply_to_current]] and other
directive tags via stripInlineDirectiveTagsForDisplay, but the
non-streaming broadcastChatFinal path and the chat.inject path
sent raw message content to webchat clients, causing tags to
appear in rendered messages after streaming completes.
2026-02-22 11:31:23 +01:00
Peter Steinberger
f9108120c2
fix(gateway): strip inline directive tags from displayed text
2026-02-21 20:08:55 +01:00
Xinhe Hu
b62bd290cb
fix: remove hardcoded disableBlockStreaming to honor agent config for TUI ( #19693 )
...
Merged via /review-pr -> /prepare-pr -> /merge-pr.
Prepared head SHA: 710d4490800a6380f052a257884fa237f6c66992
Co-authored-by: neipor <191749196+neipor@users.noreply.github.com>
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Reviewed-by: @gumadeiras
2026-02-18 16:25:59 -05:00
Peter Steinberger
b8b43175c5
style: align formatting with oxfmt 0.33
2026-02-18 01:34:35 +00:00
Peter Steinberger
31f9be126c
style: run oxfmt and fix gate failures
2026-02-18 01:29:02 +00:00
cpojer
d0cb8c19b2
chore: wtf.
2026-02-17 13:36:48 +09:00
Sebastian
ed11e93cf2
chore(format)
2026-02-16 23:20:16 -05:00
cpojer
6b8c0bc697
chore: Format files.
2026-02-17 12:00:38 +09:00
Sebastian
81fd771cb9
fix(gateway): preserve chat.history context under hard caps
2026-02-16 21:50:01 -05:00
cpojer
90ef2d6bdf
chore: Update formatting.
2026-02-17 09:18:40 +09:00
Rick Qian
5d9a026a9e
gateway: hard-cap chat.history oversized payloads
2026-02-16 23:56:05 +01:00
brandonwise
095d522099
fix(security): create session transcript files with 0o600 permissions ( #18066 )
...
Merged via /review-pr -> /prepare-pr -> /merge-pr.
Prepared head SHA: 962f497d242c5affa9b610f38f3dc7844426198d
Co-authored-by: brandonwise <21148772+brandonwise@users.noreply.github.com>
Co-authored-by: sebslight <19554889+sebslight@users.noreply.github.com>
Reviewed-by: @sebslight
2026-02-16 08:33:40 -05:00
Peter Steinberger
07be14c02d
refactor(gateway): dedupe chat session abort flow
2026-02-16 01:39:39 +00:00
Advait Paliwal
14fb2c05b1
Gateway/Control UI: preserve partial output on abort ( #15026 )
...
* Gateway/Control UI: preserve partial output on abort
* fix: finalize abort partial handling and tests (#15026 ) (thanks @advaitpaliwal)
---------
Co-authored-by: Tyler Yust <TYTYYUST@YAHOO.COM>
2026-02-15 16:55:28 -08:00
Peter Steinberger
9f9978635c
refactor(gateway): share rpc attachment normalization
2026-02-15 13:30:42 +00:00
Vignesh Natarajan
a2fe3b6610
fix (gateway): harden chat.send message input sanitization
2026-02-14 21:09:16 -08:00
Vignesh Natarajan
fc8f59261a
Gateway: bound agent run sequence tracking
2026-02-14 17:50:49 -08:00
Robby
cab0abf52a
fix(sessions): resolve transcript paths with explicit agent context ( #16288 )
...
Merged via /review-pr -> /prepare-pr -> /merge-pr.
Prepared head SHA: 7cbe9deca9b7fc9efa5d2320acb058bc9fbea48c
Co-authored-by: robbyczgw-cla <239660374+robbyczgw-cla@users.noreply.github.com>
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Reviewed-by: @gumadeiras
2026-02-14 13:44:51 -05:00
Peter Steinberger
d5e25e0ad8
refactor: centralize dispatcher lifecycle ownership
2026-02-14 00:41:37 +01:00
Peter Steinberger
ad57e561c6
refactor: unify gateway restart deferral and dispatcher cleanup
2026-02-14 00:38:18 +01:00
Peter Steinberger
4199f9889f
fix: harden session transcript path resolution
2026-02-13 01:28:17 +01:00
Nate
2b02e8a7a8
feat(gateway): stream thinking events and decouple tool events from verbose level ( #10568 )
2026-02-10 19:17:21 -06:00
Tak Hoffman
0cf93b8fa7
Gateway: fix post-compaction amnesia for injected messages ( #12283 )
...
* Gateway: preserve Pi transcript parentId for injected messages
Thread: unknown
When: 2026-02-08 20:08 CST
Repo: https://github.com/openclaw/openclaw.git
Branch: codex/wip/2026-02-09/compact-post-compaction-parentid-fix
Problem
- Post-compaction turns sometimes lost the compaction summary + kept suffix in the *next* provider request.
- Root cause was session graph corruption: gateway appended "stopReason: injected" transcript lines via raw JSONL writes without `parentId`.
- Pi's `SessionManager.buildSessionContext()` walks the `parentId` chain from the current leaf; missing `parentId` can sever the active branch and hide the compaction entry.
Fix
- Use `SessionManager.appendMessage(...)` for injected assistant transcript writes so `parentId` is set to the current leaf.
- Route `chat.inject` through the same helper to avoid duplicating the broken raw JSONL append logic.
Why This Matters
- The compaction algorithm may be correct, but if the leaf chain is broken right after compaction, the provider payload cannot include the summary/suffix "shape" Pi expects.
Testing
- pnpm test src/agents/pi-embedded-helpers.post-compaction-shape.test.ts src/agents/pi-embedded-runner/run.overflow-compaction.post-context.test.ts
- pnpm build
Notes
- This is provider-shape agnostic: it fixes transcript structure so Anthropic/Gemini/etc all see the same post-compaction context.
Resume
- If post-compaction looks wrong again, inspect the session transcript for entries missing `parentId` immediately after `type: compaction`.
* Gateway: guardrail test for transcript parentId (chat.inject)
* Gateway: guardrail against raw transcript appends (chat.ts)
* Gateway: add local AGENTS.md note to preserve Pi transcript parentId chain
* Changelog: note gateway post-compaction amnesia fix
* Gateway: store injected transcript messages with valid stopReason
* Gateway: use valid stopReason in injected fallback
2026-02-08 23:07:31 -06:00
Mariano Belinky
730f86dd5c
Gateway/Plugins: device pairing + phone control plugins ( #11755 )
2026-02-08 18:07:13 +01:00
Gustavo Madeira Santana
38e6da1fe0
TUI/Gateway: fix pi streaming + tool routing + model display + msg updating ( #8432 )
...
* TUI/Gateway: fix pi streaming + tool routing
* Tests: clarify verbose tool output expectation
* fix: avoid seq gaps for targeted tool events (#8432 ) (thanks @gumadeiras)
2026-02-04 17:12:16 -05:00
mudrii
5d82c82313
feat: per-channel responsePrefix override ( #9001 )
...
* feat: per-channel responsePrefix override
Add responsePrefix field to all channel config types and Zod schemas,
enabling per-channel and per-account outbound response prefix overrides.
Resolution cascade (most specific wins):
L1: channels.<ch>.accounts.<id>.responsePrefix
L2: channels.<ch>.responsePrefix
L3: (reserved for channels.defaults)
L4: messages.responsePrefix (existing global)
Semantics:
- undefined -> inherit from parent level
- empty string -> explicitly no prefix (stops cascade)
- "auto" -> derive [identity.name] from routed agent
Changes:
- Core logic: resolveResponsePrefix() in identity.ts accepts
optional channel/accountId and walks the cascade
- resolveEffectiveMessagesConfig() passes channel context through
- Types: responsePrefix added to WhatsApp, Telegram, Discord, Slack,
Signal, iMessage, Google Chat, MS Teams, Feishu, BlueBubbles configs
- Zod schemas: responsePrefix added for config validation
- All channel handlers wired: telegram, discord, slack, signal,
imessage, line, heartbeat runner, route-reply, native commands
- 23 new tests covering backward compat, channel/account levels,
full cascade, auto keyword, empty string stops, unknown fallthrough
Fully backward compatible - no existing config is affected.
Fixes #8857
* fix: address CI lint + review feedback
- Replace Record<string, any> with proper typed helpers (no-explicit-any)
- Add curly braces to single-line if returns (eslint curly)
- Fix JSDoc: 'Per-channel' → 'channel/account' on shared config types
- Extract getChannelConfig() helper for type-safe dynamic key access
* fix: finish responsePrefix overrides (#9001 ) (thanks @mudrii)
* fix: normalize prefix wiring and types (#9001 ) (thanks @mudrii)
---------
Co-authored-by: Gustavo Madeira Santana <gumadeiras@gmail.com>
2026-02-04 16:16:34 -05:00
Armin Ronacher
efe2a464af
fix(approvals): gate /approve by gateway scopes
2026-02-03 16:18:49 -08:00
cpojer
f06dd8df06
chore: Enable "experimentalSortImports" in Oxfmt and reformat all imorts.
2026-02-01 10:03:47 +09:00
Conroy Whitney
bbf2205640
feat(gateway): inject timestamps into chat.send (webchat/TUI)
...
The chat.send handler (used by webchat and TUI) is a separate path
from the agent handler. Inject timestamp into BodyForAgent (what the
model sees) while keeping Body raw for UI display.
This completes timestamp coverage for all non-channel paths:
- agent handler: spawned subagents, sessions_send, heartbeats
- chat.send: webchat, TUI
2026-01-31 09:47:27 -06:00
cpojer
5ceff756e1
chore: Enable "curly" rule to avoid single-statement if confusion/errors.
2026-01-31 16:19:20 +09:00
Peter Steinberger
6859e1e6a6
fix(webchat): support image-only sends
2026-01-26 05:33:36 +00:00
Peter Steinberger
2e0a835e07
fix: unify inbound dispatch pipeline
2026-01-23 22:58:54 +00:00
Peter Steinberger
6fba598eaf
fix: handle gateway slash command replies in TUI
2026-01-23 19:48:22 +00:00
Peter Steinberger
86a341be62
test: speed up history and cron suites
2026-01-23 07:34:57 +00:00
Peter Steinberger
44c61a77c5
fix: strip envelopes in chat history
2026-01-19 22:52:00 +00:00
Peter Steinberger
2f8206862a
refactor: remove bridge protocol
2026-01-19 10:08:29 +00:00
Peter Steinberger
744d1329cb
feat: make inbound envelopes configurable
...
Co-authored-by: Shiva Prasad <shiv19@users.noreply.github.com>
2026-01-18 18:50:37 +00:00
Peter Steinberger
de3b68740a
feat(acp): add experimental ACP support
...
Co-authored-by: Jonathan Taylor <visionik@pobox.com>
2026-01-18 08:03:36 +00:00
Peter Steinberger
a5d8f89b53
feat(browser): prefer Chrome default + add Brave/Edge fallbacks
...
Co-authored-by: Christoph Nakazawa <christoph.pojer@gmail.com>
2026-01-16 03:28:56 +00:00
Peter Steinberger
a4b347b454
feat: refine subagents + add chat.inject
...
Co-authored-by: Tyler Yust <tyler6204@users.noreply.github.com>
2026-01-15 23:44:31 +00:00
Peter Steinberger
c379191f80
chore: migrate to oxlint and oxfmt
...
Co-authored-by: Christoph Nakazawa <christoph.pojer@gmail.com>
2026-01-14 15:02:19 +00:00
Peter Steinberger
90342a4f3a
refactor!: rename chat providers to channels
2026-01-13 08:40:39 +00:00
Peter Steinberger
f504bfdde8
refactor(gateway): use canonical session store keys
2026-01-12 02:06:43 +00:00
Peter Steinberger
9877733748
fix(gateway): canonicalize main session aliases
2026-01-12 01:05:43 +00:00