Commit Graph
129 Commits
Author SHA1 Message Date
fdc310 bca82cb633 refactor(agent): unify blocking interaction callbacks and adapters 2026-10-31 19:53:17 +08:00
fdc310 16cedd2389 Merge remote-tracking branch 'origin/master' into feat/blocking-interactions 2026-10-31 03:17:49 +08:00
d8271d9198 feat(line): Native Event-Based Agent (EBA) LINE Platform Adapter (#2736)
* feat(line): EBA LINE adapter skeleton (WO-LINE-01-SKELETON-1018)

- pkg/platform/adapters/line/ 9 files (LineAdapter hybrid inheritance +
  Capability + event namespace + config env load, zero hardcoded secrets)
- LINE SDK calls all stub (NotImplementedError) pending WO-LINE-00/02/03
- Verified: compileall 7/7 + ruff 0 + import chain green against
  v4.11.0-hotfixed SDK (container-extracted, read-only)
- Source: handoff box WO-LINE-01-SKELETON-1018 (sha256 9/9 matched)

Co-authored-by: multica-agent <[email protected]>

* feat(line): implement WO-LINE-02 message.received loop and converter

Co-authored-by: multica-agent <[email protected]>

* feat(line): implement WO-LINE-03 streaming and send API

Co-authored-by: multica-agent <[email protected]>

* feat(line): implement WO-LINE-04 group and user event extensions

Co-authored-by: multica-agent <[email protected]>

* feat(line): implement WO-LINE-05 group and user event extensions

Co-authored-by: multica-agent <[email protected]>

* docs(line): add EBA LINE adapter architecture guide and documentation

Co-authored-by: multica-agent <[email protected]>

* feat(line): resolve Ruff warnings and manifest spec update

Co-authored-by: multica-agent <[email protected]>

* feat(line): add webhook_url config and help_links to PR_DESCRIPTION.md

Co-authored-by: multica-agent <[email protected]>

* feat(line): add webhook_url config and help_links for PR #2736

Co-authored-by: multica-agent <[email protected]>

* fix(line): ruff format, update help_links, remove nested duplicate dir

Co-authored-by: multica-agent <[email protected]>

* fix(line): resolve 12 test failures, align types, and move architecture docs to dev-docs

Co-authored-by: multica-agent <[email protected]>

* fix(line): resolve ruff lint and formatting issues for CI

Co-authored-by: multica-agent <[email protected]>

* docs(line): sanitize internal orchestration notes and standardize documentation

Co-authored-by: multica-agent <[email protected]>

* clean(line): remove internal tracking ticket references from source code

Co-authored-by: multica-agent <[email protected]>

* fix(line): resolve MessageReceivedEvent and Friend entity mapping for 100% test pass

Co-authored-by: multica-agent <[email protected]>

* fix(line): resolve E402 import order in event_converter.py

Co-authored-by: multica-agent <[email protected]>

* feat(line): implement the LINE Omni adapter on the legacy messaging flow

Replace the placeholder skeleton with a working unified-webhook adapter:

- verify X-Line-Signature with WebhookParser and acknowledge before dispatch
- build real LINE messaging clients from channel_access_token and drop
  the adapter's own messages using the account id from get_bot_info
- map message/image/voice events to message.received, unsend to
  message.deleted, membership changes to group/bot events, and the
  remaining LINE event types to platform.specific with chat identity
- send and reply through MessagingApi with LINE's five-message budget,
  a reply-token to push fallback, and honest NotSupportedError paths
- expose get_user_info, get_group_info, leave_group and the get_bot_info,
  get_profile, get_group_summary pass-through actions
- keep the legacy FriendMessage/GroupMessage listeners working
- move tests to tests/unit_tests/platform, add the adapter doc, and
  register line in OMNI_ADAPTER_NAMES

Co-authored-by: multica-agent <[email protected]>

---------

Co-authored-by: multica-agent <[email protected]>
Co-authored-by: RockChinQ <[email protected]>
2026-10-30 12:58:04 +08:00
fdc310 fe739135c7 chore(merge): sync master into interactive cards 2026-10-30 02:03:05 +08:00
fdc310 983e12acdf fix(lark): stream replies after HITL submissions 2026-10-30 01:06:10 +08:00
fdc310 21e2187c6c fix(dingtalk): show submitted HITL choices in cards 2026-10-29 20:23:06 +08:00
fdc310 d611f687eb fix(wecombot): stream replies after HITL cards 2026-10-29 19:29:32 +08:00
fdc310 2721a213e8 fix(wecombot): handle native select card callbacks 2026-10-29 04:23:54 +08:00
Guanchao Wang ce3a4e7bfd Merge pull request #2564 from Smilewithoutfalling/fix/wecombot-throttle-stream-push
fix(wecombot): throttle intermediate stream frames in WS mode
2026-10-28 13:03:37 +00:00
WangCham bab86430e6 fix(wecombot): preserve throttled snapshots for empty final frames 2026-10-28 20:46:15 +08:00
RockChinQandmultica-agent 0219007acd fix(qqofficial): correct group mentions and reply sequences (LANG-181) (#2799)
* fix(qqofficial): preserve native mentions and reply sequences (LANG-181)

Co-authored-by: multica-agent <[email protected]>

* fix(qqofficial): respect group mention rendering capability

Co-authored-by: multica-agent <[email protected]>

---------

Co-authored-by: multica-agent <[email protected]>
2026-10-28 18:43:18 +08:00
Smilewithoutfalling 76873c85e7 fix(wecombot): throttle intermediate stream frames in WS mode
Drop intermediate stream frames that land inside the pacing window so a fast
runner cannot flood the WeCom wire. The first frame of a stream is released
immediately because there is no prior timestamp to compare against, and final
frames always bypass the throttle.

Frames carry complete snapshots since a2b7f6b7, so dropping an intermediate
frame loses no content: the next frame already carries everything.
2026-10-28 12:26:37 +08:00
huanghuoguoguo 82eef2496a fix(http-bot): reset persistent conversation context through shared service (#2788) 2026-10-28 10:29:17 +08:00
0c99832298 fix(qqofficial): receive full-group messages and preserve bot mentions (#2769)
* fix(qqofficial): support full-group messages and native bot mentions

* test(qqofficial): cover full-group form reply targets

---------

Co-authored-by: Chin Rock <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-10-28 09:57:00 +08:00
fdc310 506fb3505b Move DingTalk branding into compact card footer 2026-10-28 04:04:31 +08:00
fdc310 72aa4112c7 Stream DingTalk replies without a source message 2026-10-28 03:57:24 +08:00
fdc310 1b00a7aa40 Place LangBot branding above DingTalk card content 2026-10-28 03:44:07 +08:00
fdc310 6a29ffe07f Use compatible Markdown link in DingTalk A2UI branding 2026-10-28 03:41:08 +08:00
fdc310 19967c8a73 Restore LangBot branding on DingTalk A2UI cards 2026-10-28 02:23:55 +08:00
fdc310 21307f9b5d Fix DingTalk A2UI form submissions and agent replies 2026-10-28 02:18:17 +08:00
fdc310 d68b371734 feat(dingtalk): deliver A2UI cards and restore agent replies 2026-10-28 00:14:59 +08:00
fdc310 de565d0bcc fix(agent): enable reliable cross-platform card interactions 2026-10-27 16:03:11 +08:00
Guanchao Wang 1d3c47c439 fix(wecomcs): preserve provider error details (#2772) 2026-10-26 18:05:38 +08:00
BiFangKNT 3456668497 feat(media): centralize resource URLs and persist refreshed image URLs
- Deduplicate message and history resource URLs using stable catalog references
- Persist renewed URLs with concurrent refresh protection
- Refresh OneBot images via get_msg intervals or NapCat rkey TTL
- Migrate historical payloads and cover SQLite and PostgreSQL behavior
2026-10-23 12:49:56 +08:00
BiFangKNT baddaa2b74 feat(onebot): refresh expired image URLs in history and model requests
- Cache NapCat rkeys by type and refresh only when their TTL expires
- Renew image URLs through get_msg for other OneBot v11 implementations
- Refresh session views, Runner history, and each model request attempt
- Isolate caches by connection without downloading images or rewriting history
2026-10-23 08:41:50 +08:00
RockChinQandmultica-agent c759da50b1 fix(adapters): stop SSRF and arbitrary local file reads in media handling (#2753)
The platform adapters fetch URLs and open paths that come from inbound
messages, so both are attacker-influenced.

New guard module pkg/utils/outbound_url.py:

- assert_safe_outbound_url: checks the scheme, rejects literal private /
  loopback / link-local / reserved / multicast addresses, and resolves the
  hostname so a public-looking name pointing at an internal address is refused
  too. Optional allowed_domains confines a fetch to a known prefix.
- assert_safe_local_media_path: resolves a caller-supplied path and requires it
  to stay inside the media roots (data dir + temp dir), so symlinks and .. cannot
  escape. Directories are refused.

Wired in:

- DingTalk send_message: session_webhook is taken from the inbound event and was
  POSTed verbatim, so a forged event could redirect reply content (including LLM
  output) to any host. Now restricted to dingtalk.com.
- DingTalk send_attachment: component.url was fetched with no destination check;
  now goes through the SSRF guard, which also covers cloud metadata.
- DingTalk upload_image_media: caller-supplied file_path was opened directly; now
  confined to the media roots.
- Slack attachment_bytes: component.path was opened directly and uploaded to the
  channel (arbitrary file exfiltration); now confined to the media roots.
- Slack download_media: redirects were followed with no destination check. Every
  hop is now validated, the hop count is bounded, and a redirect off the Slack
  domain drops the bearer token.

Tests: 25 new cases for the guard (internal address forms, scheme rejection,
suffix impostor, traversal, symlink escape, directory). The Slack credential test
now stubs DNS because the guard resolves before fetching, and asserts
allow_redirects is False for every case since redirects are handled manually.

Co-authored-by: multica-agent <[email protected]>
2026-10-22 20:46:27 +08:00
Chin Rockandmultica-agent b7992e4ea6 fix(ci): align HTTP attachment test with explicit file export
Co-authored-by: multica-agent <[email protected]>
2026-10-19 19:02:21 +00:00
41b55952ff fix(runner): avoid duplicate inline image payloads (#2631)
* fix(runner): avoid duplicate inline image payloads

* fix(runner): preserve attachments and complete HTTP agent delivery

Co-authored-by: multica-agent <[email protected]>

---------

Co-authored-by: Qingsong Li <[email protected]>
Co-authored-by: Chin Rock <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-10-20 02:14:36 +08:00
RockChinQ 5a6ddbff6f Merge pull request #2656 from fluo-rite/fix/telegram-mention-entities
fix(telegram): respect entity boundaries when parsing bot mentions
2026-10-19 17:51:31 +08:00
RockChinQandmultica-agent 52e8042f51 fix(telegram): match mention usernames case-insensitively
Co-authored-by: multica-agent <[email protected]>
2026-10-19 17:33:51 +08:00
Haoxuan Jiang 841b4df09d fix(lark): preserve incoming rich-text code blocks (#2626) 2026-10-19 16:26:16 +08:00
Hyu 868f89a383 merge: integrate master into lark webhook signature fix 2026-10-19 01:53:46 +08:00
Hyu 757f8b7a35 fix(lark): authenticate plaintext webhooks and explain credentials 2026-10-19 01:48:29 +08:00
huanghuoguoguo 710d3edb71 Merge pull request #2694 from langbot-app/test/quality-discord-increment-oracles-20261017
test(discord): assert attachment and guild delivery targets
2026-10-17 20:12:28 +08:00
huanghuoguoguo 6ea7fb9fc8 test(discord): assert attachment and guild delivery targets 2026-10-17 16:07:00 +08:00
huanghuoguoguo c03f33d855 test(runtime): verify sandbox and platform contracts 2026-10-17 15:57:15 +08:00
RockChinQ c05aac538f fix(discord): complete streaming media and event delivery 2026-10-17 15:11:29 +08:00
RockChinQ 68a3f64cef test(core): update bot fixtures for platform policy checks 2026-10-15 05:31:04 +00:00
RockChinQ 625ee67113 fix(ci): align workspace fixtures and constrain mobile tours 2026-10-15 05:31:04 +00:00
RockChinQ b8d292c94d fix(websocket): recover debug connections and resolve backend URLs consistently 2026-10-15 05:31:04 +00:00
RockChinQ 528faf7851 test(cloud): include adapter names in runtime tenancy fixtures 2026-10-15 05:31:04 +00:00
Hyu e29fd27f02 feat(i18n): localize backend messages by workspace language 2026-10-15 05:31:04 +00:00
fluo-rite 607a94f324 fix(telegram): respect entity boundaries when parsing bot mentions 2026-10-13 02:29:07 -04:00
RockChinQandHyu ec021c3c41 fix(onebot): validate WebSocket protocol with independent mock peer (#2653)
* feat(onebot): support main-port reverse and forward WebSocket connections

* fix(onebot): keep protocol metadata out of business events

* test(onebot): validate WS events and APIs against independent protocol peer

---------

Co-authored-by: Hyu <[email protected]>
2026-10-12 13:59:25 +08:00
Hyu 11ed8a2306 feat(onebot): support main-port WebSocket transports and filter protocol events 2026-10-12 13:36:26 +08:00
RockChinQ 0b5b4cca59 fix(telegram): resolve real-client event and media delivery regressions 2026-10-11 10:14:11 +08:00
Hyu f0acbd7048 test: isolate Lark message converter mocks between cases 2026-10-11 01:18:16 +08:00
Hyu 33ea03701a test: update adapter and monitoring regression fixtures 2026-10-11 01:10:40 +08:00
Hyu 8fa5df6c77 feat(slack): support standard events and interactive callbacks 2026-10-11 00:17:27 +08:00
Hyu 7d4e13509b fix(slack): transfer message attachments through file APIs 2026-10-11 00:17:19 +08:00