Commit Graph

754 Commits

Author SHA1 Message Date
Vincent Koc 5f3b8b4100 fix(plugins): harden inspector runtime capture 2026-04-28 02:19:56 -07:00
Vincent Koc 4c72e605cd fix(feishu): recover mojibake filenames from Content-Disposition (#72388) 2026-04-27 22:23:16 -07:00
Shakker 97016fbf02 perf: mark channel plugins startup lazy 2026-04-28 04:33:47 +01:00
Peter Steinberger e1acb61317 refactor: expose SDK test helper subpaths 2026-04-28 03:28:17 +01:00
Peter Steinberger 632b0fd580 chore: update workspace dependencies 2026-04-28 03:09:44 +01:00
Peter Steinberger 947aae5a99 refactor(models): move suppressions to manifests 2026-04-28 02:38:31 +01:00
Vincent Koc d93e6f6158 fix(feishu): repair WebSocket reconnect and heartbeat config (#72411) 2026-04-27 17:32:36 -07:00
Peter Steinberger f34b41f198 refactor: split plugin sdk test helpers 2026-04-28 01:14:19 +01:00
Peter Steinberger 8057561cee refactor: promote plugin test helpers to sdk 2026-04-28 00:55:11 +01:00
Peter Steinberger 90b6665ded refactor: move plugin api test helper to sdk 2026-04-28 00:24:54 +01:00
Peter Steinberger d74c8423c7 test: fix plugin runtime env test types 2026-04-28 00:11:47 +01:00
Peter Steinberger 0df6e5a473 refactor: expose plugin test helpers via sdk 2026-04-27 23:45:26 +01:00
Peter Steinberger 8599fdda4a test: keep extension mocks on sdk seams 2026-04-27 22:55:09 +01:00
Peter Steinberger 18ef83c0da fix(feishu): preserve disabled group policy for explicit groups 2026-04-27 21:55:33 +01:00
MoerAI 01e153986a fix(feishu): admit groups explicitly listed under channels.feishu.groups (#67687)
Feishu config defaults groupPolicy to 'allowlist'. Inbound group handling read groupAllowFrom and called isFeishuGroupAllowed before resolveFeishuReplyPolicy was reached, so a config that only set channels.feishu.groups.<chat_id>.requireMention=false (with no groupAllowFrom) was rejected with 'group not in groupAllowFrom' before per-group requireMention could take effect. Treat the explicit presence of a group entry under channels.feishu.groups as the operator's allowlist signal: if groupConfig is defined, skip the empty-allowlist rejection. resolveFeishuReplyPolicy still owns mention gating, and existing groupConfig.enabled=false / groupAllowFrom-driven rejections are preserved. Adds a regression test that exercises the reporter's exact config shape and confirms inbound text reaches finalize/dispatch.
2026-04-27 21:19:49 +01:00
Peter Steinberger e9b1fbb8c4 refactor: pin remaining extension api surfaces 2026-04-27 21:02:53 +01:00
Vincent Koc 2161b46032 fix(feishu): support native interactive card payload sends (#72667)
* fix(feishu): support native interactive card payload sends

* fix(clownfish): address review for ghcrawl-156608-autonomous-smoke (1)

* fix(feishu): harden native card payload rendering
2026-04-27 11:02:15 -07:00
Peter Steinberger 9090457da7 test(plugin-sdk): use narrow config runtime mocks 2026-04-27 15:14:02 +01:00
Peter Steinberger 4336a7f3a9 refactor(plugin-sdk): narrow config runtime imports 2026-04-27 14:58:32 +01:00
Peter Steinberger 0141471dd5 refactor: move shared helpers off reserved sdk seams 2026-04-27 13:07:54 +01:00
Peter Steinberger 7f3f108521 refactor(config): migrate plugin config access 2026-04-27 12:35:58 +01:00
Vincent Koc b642ebece9 fix(feishu): do not treat @all as a bot mention (#72658)
* fix(feishu): do not treat @all as a bot mention

* fix(feishu): do not treat @all as a bot mention
2026-04-27 02:10:17 -07:00
jnuyao 2a08848dd1 feat(feishu): display group names in session labels
Resolve Feishu group chat labels through getChatInfo so session labels prefer human-readable group names over raw chat IDs.\n\nPreserve topic/thread label priority and defer the lookup until after broadcast dedup claims to avoid duplicate account API calls.\n\nValidation:\n- pnpm test extensions/feishu/src/bot-group-name.test.ts extensions/feishu/src/bot.broadcast.test.ts\n- pnpm check:changed\n- GitHub CI green on c154dc0a41fd715dce95ef1fb5d0c269533b8c22\n\nCloses #35675
2026-04-26 22:22:51 -05:00
Vincent Koc c6cf37068c fix(feishu): repair interactive card content extraction (#72397) 2026-04-26 15:26:53 -07:00
Peter Steinberger 30aa1b5223 fix(release): stabilize beta validation lanes 2026-04-26 16:22:12 +01:00
Peter Steinberger 67b9167b80 test(extensions): restore transformed dynamic imports 2026-04-26 13:16:05 +01:00
Peter Steinberger bc49fb1cdf test: fix extension dynamic imports 2026-04-26 11:15:45 +01:00
Peter Steinberger 9a529ca78b chore: update dependencies 2026-04-26 10:54:58 +01:00
Peter Steinberger d419fb561d feat(tts): resolve channel account config generically 2026-04-26 08:10:36 +01:00
Peter Steinberger d613c8e29b refactor(tts): resolve voice delivery from channel capabilities 2026-04-26 07:03:25 +01:00
Peter Steinberger 6a67f65568 fix(voice): reuse preflight transcripts across channels 2026-04-26 05:42:04 +01:00
Peter Steinberger 29741f696a fix(feishu): transcribe inbound voice notes 2026-04-26 04:47:45 +01:00
Peter Steinberger 77d04a39d8 fix(feishu): separate synthetic ids from reply targets 2026-04-26 00:57:38 +01:00
Peter Steinberger a1090b6043 fix(feishu): accept v2 card action callbacks 2026-04-26 00:41:16 +01:00
Peter Steinberger f1b1c3dc99 chore: update workspace dependencies 2026-04-25 22:48:44 +01:00
Vincent Koc 84a22a64be fix(feishu): finish streaming card closeout 2026-04-25 04:04:03 -07:00
Vincent Koc 455eba7f94 fix(feishu): coalesce streaming card final delivery 2026-04-25 03:06:38 -07:00
Peter Steinberger 7fcefd56b7 chore: bump version to 2026.4.25 2026-04-25 10:31:52 +01:00
Peter Steinberger b0c55eb659 fix(feishu): transcode voice TTS audio 2026-04-25 09:26:42 +01:00
wzp 845040214e fix: recover subagent waits after transport drops
Fix subagent recovery and session state reconciliation.

Thanks @ZiPengWei.
2026-04-25 08:12:20 +01:00
Peter Steinberger bb5e278f63 fix(feishu): stabilize topic group session keys 2026-04-25 07:53:05 +01:00
Vincent Koc 4df0e10623 fix(feishu): back off failed streaming card starts 2026-04-24 23:41:01 -07:00
ToToKr 2aa313cd90 fix(feishu): prevent duplicate message after streaming card close (#67791) (#68491)
* fix(feishu): prevent duplicate message after streaming card close (#67791)

When onIdle closed the streaming card before the final delivery arrived, the streamed text was not tracked in deliveredFinalTexts. The subsequent final payload bypassed the streaming?.isActive() guard (already closed) and fell through to the non-streaming path, sending the same content as a redundant text/card message. Track raw streamText in deliveredFinalTexts when closeStreaming finalizes the card so the duplicate-final check catches it.

* test(feishu): cover idle streaming final dedupe

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-04-24 23:18:10 -07:00
Peter Steinberger 460720d0a1 perf(feishu): avoid unconditional lifecycle waits 2026-04-25 03:41:18 +01:00
Peter Steinberger 27c61ed0d4 chore(deps): update workspace dependencies 2026-04-24 16:55:08 +01:00
Peter Steinberger 68b9ad4205 test: slim feishu monitor handler imports 2026-04-24 12:36:50 +01:00
Peter Steinberger c7ee5d8ecf perf: narrow inbound debounce sdk imports 2026-04-24 05:07:28 +01:00
Peter Steinberger 3361593442 perf: reduce feishu monitor import drag 2026-04-24 02:55:09 +01:00
Peter Steinberger e0072ef91a chore: bump version to 2026.4.24 2026-04-24 02:13:50 +01:00
Peter Steinberger 27b8aa1ddf perf: consolidate extension test entrypoints 2026-04-24 02:03:00 +01:00