Commit Graph

35 Commits

Author SHA1 Message Date
Vincent Koc 21a767639f fix(plugins): unify HTTP route conflict handling (#118203)
* fix(plugins): unify HTTP route conflict handling

* fix(plugins): preserve source-less route replacement

* test(line): type webhook route source
2026-08-04 02:15:00 +08:00
Peter Steinberger 4c66ed5615 feat(channels): lifecycle wave 2 — fifteen more channels publish recorded lifecycle (#118298)
* feat(channels): publish lifecycle from existing status sinks

* feat(channels): thread lifecycle through provider monitors

* fix(mattermost): keep lifecycle status helper private

* fix(matrix): preserve terminal lifecycle during startup cleanup

* fix(matrix): reject invalid tokens during startup

* test(mattermost): drop unused vi import
2026-08-02 17:30:56 -07:00
Peter Steinberger cb8351604e fix(line): mark durably accepted webhook deliveries (#115796)
Emit the established OpenClaw durable-delivery response marker only after an authenticated, non-empty LINE webhook event has been persisted. Verify the production gateway route with signed real HTTP requests covering verification, delayed admission, invalid signatures, and storage failures.

Co-authored-by: 許元豪 <146086744+edenfunf@users.noreply.github.com>
2026-07-29 05:17:15 -04:00
sunlit-deng b4e246be01 fix(line): preserve webhook object error details (#113606)
* fix(line): preserve webhook object error details

* fix(line): preserve structured errors on the live webhook route

* test(line): provide the complete typed runtime to webhook proof

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-27 22:46:21 -04:00
Eden 8365383391 fix(line): deliver rich replies on the reply token instead of the push quota (#109011)
* fix(line): deliver rich replies on the reply token instead of the push quota

A reply token carries five messages for free, while push spends the account's
monthly quota. Text rode the token and the rich/media bubbles were pushed after
it, so an extracted table vanished with a 429 once that quota was gone. Bundle
both onto the token and push only the overflow.

Quick replies now ride the trailing message instead of the last reply-token
slot: LINE hides them as soon as a newer message arrives, so an overflowing
batch pushed its bubbles after the buttons and wiped them.

* refactor(line): unify auto-reply batching

* test(line): remove unused token fixture

* refactor(line): delete legacy reply chunk path

* fix(line): recover text from rejected mixed batches

* test(line): split auto-reply recovery coverage

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-18 19:41:43 -07:00
Peter Steinberger 5199bfafea fix(line): preserve webhook events through dispatch failures (#109655)
* test(line): remove obsolete replay-cache coverage

* fix(line): durably spool webhook events

Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com>

* test(line): tighten webhook spool lifecycle proof

* fix(line): use canonical turn adoption lifecycle

Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com>

* refactor(line): keep spool types private

Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com>

---------

Co-authored-by: NianJiuZst <180004567+NianJiuZst@users.noreply.github.com>
2026-07-16 22:13:26 -07:00
Eden d572c5cb2d fix(line): run post-ack webhook processing on its own admitted work root (#107734)
* fix(line): run post-ack webhook processing on its own admitted work root

LINE acks the webhook and dispatches event processing fire-and-forget on
the same async chain. The HTTP request admission that chain inherited is
released as soon as the route handler returns, and a released admission
refuses subordinate queue work - so every LINE inbound agent turn fails
with "GatewayDrainingError: Gateway is draining; new tasks are not
accepted" even though the gateway is healthy. DMs, group mentions, and
postbacks are all affected; the user-visible symptom is the bot replying
"Sorry, I encountered an error processing your message." to everything.

Add runDetachedWebhookWork to the plugin-sdk webhook-request-guards
surface (a thin wrapper over the gateway independent-root continuation,
the same shape core uses in gateway/server/hooks.ts) and route all three
LINE ack-first dispatch sites through it: the gateway monitor handler
(the live path), and the createLineNodeWebhookHandler / Express
middleware handlers (public webhook building blocks an embedder can
register under the gateway). #65375 unified these three into one ack-first
pattern; keeping the detach consistent avoids re-introducing the same
latent defect in the two that are not on the live gateway path today.

The continuation is reserved synchronously while the request is still
admitted, so the detached processing stays accepted and a real restart
drain can wait for it instead of stranding it mid-turn.

Tests pin every layer: the guards suite proves detached post-ack work is
admitted after the request admission is released (and that the inherited
chain without the helper is refused); the monitor lifecycle suite and the
webhook-node suite assert each dispatch site goes through the detached
root. Red/green verified: reverting any dispatch fails its test.

* fix(plugin-sdk): account for runDetachedWebhookWork in public surface budget

* fix(channels): track detached webhook processing

Co-authored-by: 許元豪 <146086744+edenfunf@users.noreply.github.com>

* docs: refresh generated docs map

* chore(plugin-sdk): refresh API baseline

* fix(webhooks): preserve post-ack ordering

* test(plugin-sdk): satisfy detached work lint

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 03:39:02 -07:00
Peter Steinberger 75cd0efb04 refactor(line): remove dead exports (#107231) 2026-07-13 23:54:12 -07:00
Vincent Koc 3952ac9585 fix(line): mark running after startup succeeds 2026-06-17 17:53:07 +02:00
openclaw-clownfish[bot] 994f4f99fe fix(line): canonicalize trailing-slash webhook paths (#91649)
* fix(line): canonicalize trailing-slash webhook paths

* fix(clownfish): address review for clawsweeper-commit-openclaw-openclaw-4cf228466770 (1)

---------

Co-authored-by: openclaw-clownfish[bot] <280122609+openclaw-clownfish[bot]@users.noreply.github.com>
2026-06-09 16:26:16 +09:00
Peter Steinberger 6868cde4d4 docs: document large extension sources 2026-06-04 21:40:44 -04:00
Peter Steinberger 22cb7fb6b7 chore(lint): enable no-promise-executor-return 2026-05-31 23:06:13 +01:00
Peter Steinberger 2df95c0b10 chore(lint): enable no-misused-promises 2026-05-31 20:42:13 +01:00
Peter Steinberger 1507a9701b refactor: centralize inbound supplemental context
* refactor: centralize inbound supplemental context

* refactor: trim supplemental finalizer typing

* docs: clarify supplemental context projection

* refactor: move inbound finalization into core

* refactor: simplify channel inbound facts

* refactor: fold supplemental media into inbound finalizer

* refactor: migrate channel inbound callers to builder

* docs: mark inbound finalizer compat types deprecated

* refactor: wire runtime turn context builder

* refactor: replace channel turn runtime API

* fix: respect discord quote visibility

* fix: avoid deprecated line dispatch helper

* refactor: deprecate channel message SDK seams

* docs: trim channel outbound SDK page

* test: migrate irc inbound assertion

* refactor: deprecate outbound SDK facades

* refactor: deprecate channel helper SDK facades

* refactor: deprecate channel streaming SDK facade

* refactor: move direct dm helpers into inbound SDK

* chore: mark legacy test-utils SDK alias deprecated

* refactor: remove unused allow-from read helper

* refactor: route remaining channel dispatch through core

* refactor: enforce modern extension SDK imports

* test: give slow image root tests more time

* ci: support node fallback on windows

* fix: add transcripts tool display metadata

* refactor: trim legacy channel test seams

* fix: preserve channel compat after rebase

* fix: keep deprecated channel inbound aliases

* fix: preserve discord thread context visibility

* fix: clean final rebase conflicts

* fix: preserve channel message dispatch aliases

* fix: sync channel refactor after rebase

* fix: sync channel refactor after latest main

* fix: dedupe memory-core subagent mock

* test: align clickclack inbound dispatch assertions

* fix: sync plugin sdk api hash after rebase

* fix: sync channel refactor after latest main

* fix: sync plugin sdk api hash after rebase

* fix: sync plugin sdk api hash after latest main

* test: remove stale inbound context awaits
2026-05-27 09:26:06 +01:00
Peter Steinberger 4780e69352 fix(line): acknowledge webhooks before agent processing 2026-05-15 15:49:36 +01:00
Peter Steinberger 33655ee290 test: dedupe line lifecycle mock read 2026-05-13 09:32:43 +01:00
Peter Steinberger b3ded351e3 test: guard extension provider mock calls 2026-05-12 10:04:45 +01:00
Shakker a0fea67293 test: clear line lifecycle broad matchers 2026-05-10 16:20:44 +01:00
Peter Steinberger 827b0de0ce refactor: reduce plugin sdk surface 2026-05-10 12:37:10 +01:00
Peter Steinberger a4b17d65a8 refactor: consolidate message delivery API 2026-05-09 07:04:04 +01:00
Peter Steinberger 9ef37d1907 test: tighten assertions and harness coverage 2026-05-08 05:28:12 +01:00
Peter Steinberger 1ef85c7d4c test: make suites safe without isolation (#78834)
* test: make suites safe without isolation

* fix: narrow auth profile credential types

* test: inject channel module loader factory locally
2026-05-07 08:43:29 +01:00
Peter Steinberger 05eda57b3c refactor: migrate bundled plugins to message lifecycle 2026-05-06 01:46:42 +01:00
jesse-merhi 4cf2284667 fix: preserve plugin route ownership 2026-04-29 13:51:42 +10:00
Peter Steinberger 4336a7f3a9 refactor(plugin-sdk): narrow config runtime imports 2026-04-27 14:58:32 +01:00
Peter Steinberger 9437c24764 test: speed up line monitor lifecycle coverage 2026-04-07 11:18:09 +01:00
Tak Hoffman 7c25af83e4 fix: honor line monitor default account 2026-04-03 13:55:44 -05:00
Peter Steinberger 8be2dea382 test: trim more extension partial mocks 2026-04-03 19:31:32 +01:00
Peter Steinberger 709668ccd1 test: trim line/twitch setup validations 2026-04-01 07:46:25 +01:00
Vincent Koc 57c47d8c7f fix(line): bound preverify webhook concurrency (#58199)
* fix(line): bound preverify webhook concurrency

* test(line): cover preauth release timing

* fix(line): release webhook preauth slots earlier
2026-03-31 19:34:25 +09:00
Peter Steinberger f7285e0a9e test: speed up extension suites 2026-03-31 02:25:02 +01:00
Peter Steinberger cb76ba2406 test: collapse line channel suites 2026-03-25 04:25:02 +00:00
Peter Steinberger 3725b38335 fix: restore ci gates 2026-03-23 14:32:10 +00:00
Vincent Koc ac7b7f5536 fix(line): narrow plugin-sdk seams after refactor 2026-03-22 19:44:30 -07:00
Vincent Koc 2131981230 refactor(plugins): move remaining channel and provider ownership out of src 2026-03-22 19:13:25 -07:00