Commit Graph

809 Commits

Author SHA1 Message Date
Jamil Zakirov 52267a6b75 fix(auto-reply): run message_sending before inbound delivery
Run inbound auto-reply delivery through message_sending hooks before sending replies.

Co-authored-by: Jamil Zakirov <15848838+jzakirov@users.noreply.github.com>
2026-04-25 10:07:35 +05:30
Peter Steinberger 70fd1c91aa fix(channels): harden tool progress previews 2026-04-25 04:54:29 +01:00
Peter Steinberger f29e15c05d fix(telegram): bound tool progress preview formatting
Co-authored-by: Neerav Makwana <261249544+neeravmakwana@users.noreply.github.com>
2026-04-25 03:19:01 +01:00
Neerav Makwana e54a37a91e fix(telegram): harden progress preview rendering 2026-04-25 03:19:01 +01:00
Neerav Makwana c4a8b80dfa fix(telegram): hide tool progress by default 2026-04-25 03:19:01 +01:00
Peter Steinberger e68b2269b9 test(telegram): avoid current marker in model display regression (#71016) (thanks @iskim77) 2026-04-25 02:38:14 +01:00
Peter Steinberger a9c46d5b1a test(telegram): cover model picker display names (#71016) (thanks @iskim77) 2026-04-25 02:38:14 +01:00
Atlas Bot d1386ada5a fix(telegram): pass modelNames to buildModelsKeyboard in button-click callback
When navigating the /models picker via provider button click, the model
list showed raw model IDs (e.g. gemini-3.1-pro-preview) instead of
configured display names (e.g. Gemini 3.1 Pro (Bridge)).

Root cause: the button-click callback handler destructured modelData as
{ byProvider, providers } omitting modelNames, then called
buildModelsKeyboard() without it. buildModelsKeyboard falls back to the
raw model ID via modelNames?.get(...) ?? model when modelNames is absent.

The text-command path (/models <provider>) already passes modelNames
correctly through buildTelegramModelsListChannelData, confirming the fix.

Fix: destructure modelNames from modelData and forward it to
buildModelsKeyboard in the button-click callback handler.

Closes #70560
2026-04-25 02:38:14 +01:00
Peter Steinberger ae57a7998e fix(telegram): persist accepted update offsets 2026-04-25 01:35:05 +01:00
Peter Steinberger bbef1c5557 fix(release): harden subagent completion delivery
(cherry picked from commit 855872986e)
2026-04-24 18:22:24 +01:00
Tak Hoffman 59e2825274 fix: deprecate models add command (#71175) 2026-04-24 12:20:59 -05:00
EVA c138368040 feat: add Codex harness extension seams
Co-authored-by: Eva <100yenadmin@users.noreply.github.com>
2026-04-24 09:32:27 +01:00
Peter Steinberger d85dc46e37 perf: narrow telegram reply imports 2026-04-24 09:31:47 +01:00
Peter Steinberger f03252aaf9 fix: keep telegram dispatch eager 2026-04-24 09:17:33 +01:00
Peter Steinberger 447105a278 perf: slim telegram bot imports 2026-04-24 09:12:28 +01:00
Peter Steinberger c7ee5d8ecf perf: narrow inbound debounce sdk imports 2026-04-24 05:07:28 +01:00
Peter Steinberger 9ac52e0737 test: remove duplicate telegram retry tests 2026-04-24 04:26:31 +01:00
Peter Steinberger 60956ba6ac perf: narrow telegram bot test imports 2026-04-24 04:09:13 +01:00
Peter Steinberger 754acc4478 perf: reduce telegram test import drag 2026-04-24 02:28:38 +01:00
Peter Steinberger cc295fb8c9 perf: dedupe telegram dispatch tests 2026-04-24 00:59:44 +01:00
Peter Steinberger 1e24bee879 perf: slim telegram target normalization import 2026-04-24 00:24:56 +01:00
Peter Steinberger 697fc38d1a perf: remove telegram dispatch polling waits 2026-04-24 00:21:12 +01:00
Peter Steinberger 28484c71bb perf: trim telegram dispatch test imports 2026-04-23 23:29:20 +01:00
Peter Steinberger 68cb054d20 perf: slim telegram sticker tests 2026-04-23 22:48:47 +01:00
Vincent Koc 527d7211e0 fix(approvals): require explicit chat exec enablement 2026-04-23 11:51:17 -07:00
Peter Steinberger d1ff0caecb test(telegram): reduce reply runtime imports 2026-04-23 10:20:53 +01:00
Peter Steinberger 0a7668595c test(telegram): reset forum metadata cache 2026-04-23 10:11:12 +01:00
Ayaan Zaidi 8a078acaa6 perf(telegram): bound forum metadata cache 2026-04-23 14:33:17 +05:30
Ayaan Zaidi 50e6c0a3b2 perf(telegram): cache forum metadata lookup 2026-04-23 14:33:17 +05:30
Peter Steinberger 1263d4278e fix(sessions): preserve active route updates during maintenance 2026-04-23 09:10:51 +01:00
Peter Steinberger 60341689fe test(telegram): keep session support inside package 2026-04-23 09:04:57 +01:00
Peter Steinberger 4100bea888 test(telegram): hide split message context files 2026-04-23 08:54:09 +01:00
Peter Steinberger 40b40752be test(telegram): coalesce message context cases 2026-04-23 08:54:09 +01:00
Vincent Koc 02da7350ad test(telegram): pin outbound hook routing fields 2026-04-22 23:47:06 -07:00
Peter Steinberger 0b0662b1c9 chore: apply extension lint cleanups 2026-04-23 05:30:49 +01:00
Peter Steinberger b2472d6560 build: migrate schema deps to typebox 2026-04-23 04:59:42 +01:00
Peter Steinberger 6b41ef311f fix: isolate external direct-message runtime policy 2026-04-23 01:39:56 +01:00
Peter Steinberger bee491f439 test(telegram): cover debounce topic keys at seam 2026-04-22 23:57:08 +01:00
Peter Steinberger c87c9742ed fix(telegram): isolate direct chat sandbox sessions 2026-04-22 23:46:34 +01:00
Peter Steinberger f88da75ed9 refactor(channels): centralize runtime binding routes 2026-04-22 23:16:57 +01:00
Val Alexander 9ea5484fa1 fix: normalize opus 4.7 context window
Normalize Anthropic-owned Opus 4.7 context reporting to 1M while keeping inferred and bare discovery paths conservative.

- normalize Anthropic and claude-cli Opus 4.7 runtime/status context metadata to 1M
- keep inferred-provider and bare discovery ids on discovered conservative limits
- add regression coverage for provider, lookup, status, and discovery-cache paths
- keep the Telegram abort-signal wrapper typing narrow so changed-scope validation stays green
2026-04-22 14:58:16 -05:00
Peter Steinberger e6a9e9a700 test: cover Telegram webhook timeout reply continuation 2026-04-22 20:23:53 +01:00
Peter Steinberger 4c5394d0ba fix: lower Telegram webhook callback timeout (#70146) (thanks @friday-james) 2026-04-22 20:19:12 +01:00
friday-james 43fc38e46c fix(telegram): lower webhook callback timeout to 5s
#16763 added `onTimeout: "return"` with `timeoutMilliseconds: 10_000`
(grammY default). In practice, Telegram's webhook servers abort the
read well before 10s when handler latency is LLM-bound: `getWebhookInfo`
reports `last_error_message: "Read timeout expired"` and pending updates
pile up, cascading into multi-minute reply lag.

Reproducible A/B on identical infra (same region, same bot token):
- Minimal Python echo bot: 5 back-to-back webhook RTTs 341-642ms, clean.
- OpenClaw current main: intermittent Read timeout expired, 1-5 min lag.

The handler still runs to completion; only the Telegram-facing ack is
sooner. grammY's deployment guide suggests 5s for long-running handlers.

No new config surface; minimal one-line change to the existing constant
and its test assertion. If a configurable timeout is wanted, that can be
a follow-up (see stale #7754).
2026-04-22 20:19:12 +01:00
Peter Steinberger 67e5cca7a4 test: tighten Telegram polling conflict coverage (#69873) (thanks @hclsys) 2026-04-22 20:16:14 +01:00
HCL 3a11435c7d test(telegram): update monitor test for #69787 transport rebuild on 409
Sibling test in monitor.test.ts asserted the pre-fix behavior (single
transport reused across cycles on 409). My #69787 change rebuilds the
transport on 409 so Telegram sees a fresh TCP socket — update the
assertion to match.

Two transports are now expected: the initial one plus the rebuild
after the conflict.
2026-04-22 20:16:14 +01:00
HCL 83a906c95c fix(telegram): mark polling transport dirty on 409 conflict (#69787)
When getUpdates returns 409 Conflict (e.g.
'terminated by other getUpdates request'), the polling runtime
previously retried on the same HTTP keep-alive TCP socket because
markDirty() was only called in the isRecoverable branch.

Telegram treats that connection as the 'old' session and keeps
terminating it — producing a sustained low-rate 409 retry loop
(observed a few per minute after eliminating duplicate pollers).

Broaden the dirty-mark condition to fire on isConflict as well as
isRecoverable so the next cycle forces a fresh TCP connection.

Update the existing 'reuses transport after getUpdates conflict' test
— which previously locked in the buggy behavior — to assert the new
correct behavior: one fresh transport is built, the stale one is
closed.
2026-04-22 20:16:14 +01:00
Vincent Koc e593122465 fix(hooks): standardize outbound routing metadata 2026-04-22 10:53:44 -07:00
Devin Robison 5b32c3138c telegram: align model picker callback auth (#70235)
* telegram: align model picker callback auth

* docs(changelog): note telegram model callback auth fix

* fix(telegram): use runtime config for model callback auth
2026-04-22 11:06:01 -06:00
Tak Hoffman f328c21046 feat: Add /models add hot-reload model registration (#70211)
* feat(models): add chat model registration with hot reload

* docs(changelog): add models entry for pr 70211

* fix(models): harden add flow follow-ups

* fix models add review follow-ups

* harden models add config writes

* tighten plugin boundary invariant

* move models add adapters behind sdk facades

* avoid ollama-specific core facade
2026-04-22 12:00:30 -05:00