Commit Graph

152 Commits

Author SHA1 Message Date
Peter Steinberger fd75d214f2
style(extensions): format channel integration updates 2026-04-04 06:02:37 +01:00
Vincent Koc 2687a49575 refactor(line): lazy-load channel runtime seams 2026-04-04 12:26:20 +09:00
Vincent Koc 0737816010 refactor(line): narrow channel runtime imports 2026-04-04 11:59:38 +09:00
Peter Steinberger ab318de8b7
test(plugins): finish moving contract coverage 2026-04-04 00:11:39 +01:00
Peter Steinberger e4b5027c5e
refactor(plugins): move extension seams into extensions 2026-04-04 00:10:16 +01:00
Peter Steinberger 40ae49effa
fix(ci): normalize line default-account setup checks 2026-04-03 21:39:01 +01:00
Tak Hoffman 183601c347
fix: honor line default setup status 2026-04-03 15:32:44 -05:00
Tak Hoffman 7c25af83e4
fix: honor line monitor default account 2026-04-03 13:55:44 -05:00
Tak Hoffman 961d8eb095
fix: honor line default runtime account 2026-04-03 13:54:01 -05:00
Peter Steinberger 8be2dea382
test: trim more extension partial mocks 2026-04-03 19:31:32 +01:00
Peter Steinberger 6eca4e0136
test: trim extension partial mocks 2026-04-03 19:28:19 +01:00
Peter Steinberger ab96520bba
refactor(plugins): move channel behavior into plugins 2026-04-03 19:09:20 +01:00
Tak Hoffman 4edf6a2c7d
fix: honor line default account setup policy 2026-04-03 12:42:18 -05:00
Tak Hoffman 51f6bc4940
fix: honor selected account in setup status 2026-04-03 11:50:09 -05:00
Tak Hoffman 27ced5c1d3
fix: honor line setup dm policy accounts 2026-04-03 10:52:03 -05:00
Vincent Koc 0ecf84524d fix(ci): restore line runtime seams 2026-04-03 23:19:39 +09:00
Vincent Koc efeee6f921 fix(ci): use plugin registry test bridges 2026-04-03 23:03:15 +09:00
Vincent Koc 9b83e462cf test(channels): use narrow active registries in sticky tests 2026-04-03 22:57:16 +09:00
Vincent Koc 3b358414d3 test(channels): use direct contract helper imports 2026-04-03 22:46:58 +09:00
Peter Steinberger f59d0eac68
refactor(plugin-runtime): remove plugin-specific core seams 2026-04-03 13:08:39 +01:00
Peter Steinberger 2766c27b2a
refactor(plugin-sdk): genericize web channel runtime seams 2026-04-03 11:17:28 +01:00
Peter Steinberger 847faa3d04
test: trim extension test import churn 2026-04-03 04:41:08 +01:00
Vincent Koc 19724340f8 perf(test): narrow line reply context import 2026-04-02 00:16:03 +09:00
Peter Steinberger 035028208f
test: trim line webhook/slack setup prompts 2026-04-01 08:02:26 +01:00
Peter Steinberger 709668ccd1
test: trim line/twitch setup validations 2026-04-01 07:46:25 +01:00
Peter Steinberger 1f97f907b2
test: centralize registry-backed channel contracts 2026-04-01 01:53:23 +01:00
Peter Steinberger b910cc5869
test: remove extension manifest and core-extension wrappers 2026-04-01 01:44:43 +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 8861cdbb6f
refactor(plugin-sdk): untangle extension test seams 2026-03-29 23:43:53 +01:00
Peter Steinberger 8e0ab35b0e
refactor(plugins): decouple bundled plugin runtime loading 2026-03-29 09:10:38 +01:00
Peter Steinberger c48e0f8e6a
style: normalize import order and formatting 2026-03-29 16:33:22 +09:00
Jackjin a0407c7254
fix(line): preserve underscores inside words in stripMarkdown (#47465)
Fixes #46185.

Verified:
- pnpm install --frozen-lockfile
- pnpm build
- pnpm test -- extensions/line/src/markdown-to-line.test.ts src/tts/prepare-text.test.ts

Note: `pnpm check` currently fails on unchanged `extensions/microsoft/speech-provider.test.ts` lines 108 and 139 on the rebased base, outside this PR diff.
2026-03-28 21:31:09 -05:00
Tak Hoffman f1970b8aef
fix(line): normalize canonical ACP targets (#56713) 2026-03-28 21:05:34 -05:00
Tak Hoffman 6f7ff545dd
fix(line): add ACP binding parity (#56700)
* fix(line): support ACP current-conversation binding

* fix(line): add ACP binding routing parity

* docs(changelog): note LINE ACP parity

* fix(line): accept canonical ACP binding targets
2026-03-28 20:52:31 -05:00
Masato Hoshino 9449e54f4f
feat(line): add outbound media support for image, video, and audio
pnpm install --frozen-lockfile
pnpm build
pnpm check
pnpm vitest run extensions/line/src/channel.sendPayload.test.ts extensions/line/src/send.test.ts extensions/line/src/outbound-media.test.ts

Co-authored-by: masatohoshino <246810661+masatohoshino@users.noreply.github.com>
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>
2026-03-28 20:51:16 -05:00
Peter Steinberger 148a65fe90 refactor: share webhook channel status helpers 2026-03-29 02:11:22 +01:00
karesansui acbdafc4f4 fix: propagate webhook mode to health monitor snapshot
Webhook channels (LINE, Zalo, Nextcloud Talk, BlueBubbles) are
incorrectly flagged as stale-socket during quiet periods because
snapshot.mode is always undefined, making the mode !== "webhook"
guard in evaluateChannelHealth dead code.

Add mode: "webhook" to each webhook plugin's describeAccount and
propagate described.mode in getRuntimeSnapshot.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-29 02:01:25 +01:00
Peter Steinberger acca306665 fix: polish LINE status snapshot checks (#45701) (thanks @tamaosamu) 2026-03-29 00:57:04 +00:00
劉超 03941e2dbf fix(line): use configured field in collectStatusIssues instead of raw token
collectStatusIssues previously checked account.channelAccessToken directly,
but this field is stripped by projectSafeChannelAccountSnapshotFields for
security. This caused 'openclaw status' to always report WARN even when the
token is valid and the LINE provider starts successfully.

Use account.configured instead, which is already computed by
buildChannelAccountSnapshot and correctly reflects whether credentials
are present. This is consistent with how other channels (e.g. Telegram)
implement their status checks.

Fixes #45693
2026-03-29 00:57:04 +00:00
Peter Steinberger fcc9fd1623 fix: land LINE timing-safe signature validation (#55663) (thanks @gavyngong) 2026-03-29 00:43:17 +00:00
gavyngong 7626d18c64 fix(line): eliminate timing side-channel in HMAC signature validation
Pad both buffers to equal length before constant-time comparison.

Key fix: call timingSafeEqual unconditionally and store the result
before the && length check, ensuring the constant-time comparison
always runs regardless of buffer lengths. This avoids JavaScript's
&& short-circuit evaluation which would skip timingSafeEqual on
length mismatches, preserving the timing side-channel.

Changes:
- Pad hash and signature buffers to maxLen before comparison
- Store timingSafeEqual result before combining with length check
- Add explanatory comment about the short-circuit avoidance
2026-03-29 00:43:17 +00:00
Peter Steinberger 838013c87a refactor: expose webhook request guard sdk seam 2026-03-28 05:17:19 +00:00
Tak Hoffman b9415ca24b
fix(regression): preserve line pairing account context 2026-03-27 23:09:05 -05:00
Peter Steinberger 0d0d46f5e9 refactor: route line media temp paths through temp-path sdk 2026-03-28 03:57:46 +00:00
Peter Steinberger 491969efb0 refactor: route channel activity through channel runtime 2026-03-28 02:53:03 +00:00
Peter Steinberger 05719648a1 test(line): isolate status probe fallback import state 2026-03-28 02:31:39 +00:00
Peter Steinberger 4031bb1914 refactor: trim secret and ssrf helper runtime seams 2026-03-28 02:25:28 +00:00
Tak Hoffman b9b84f2572
fix(regression): restore line cold-runtime status probing 2026-03-27 20:33:09 -05:00
Peter Steinberger 992b30604d refactor: move extension-owned tests to extensions 2026-03-27 21:37:09 +00:00