Commit Graph
5641 Commits
Author SHA1 Message Date
0ef32210df chore(deps): pin langbot-plugin 0.7.21 (#2862)
Picks up the shared Plugin Runtime fix that nests nsjail worker cgroups
under the Runtime's own cgroup so the Pod memory limit bounds every
sandbox (LANG-287, langbot-app/langbot-plugin-sdk#207).

Co-authored-by: Claude Opus 5.5 <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-11-04 12:41:50 +08:00
db17132728 fix(web): add missing ASR/TTS model tab labels to es/ru/th/vi locales (#2859)
#2857 added models.asrTab and models.ttsTab to en-US, ja-JP and zh-*,
which broke the i18n key check on master.

Co-authored-by: Claude Opus 5.5 <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-11-04 01:29:31 +08:00
c62f79f9d7 fix(agent): pass execution context when resolving model context window (#2858)
RunnerContextBuilder called ModelManager.get_model_by_uuid(model_uuid)
without the required tenant context. The TypeError was swallowed at debug
level, so runtime.metadata.model_context_window_tokens was always missing.
Thread the run's ExecutionContext through build_context_from_event.

Co-authored-by: Claude Opus 5.5 <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-11-04 01:13:39 +08:00
RockChinQandmultica-agent 63cb2bc460 feat(models): synchronize Space TTS and ASR models (#2857)
Co-authored-by: multica-agent <[email protected]>
2026-11-04 01:06:34 +08:00
532b8ce204 feat(agent): add cross-platform interactive cards for QQ, WeCom, Feishu and DingTalk (#2787)
* feat(agent): add cross-platform interactive card tool

* fix(agent): create pipelines with selected runner defaults

* fix(agent): enable reliable cross-platform card interactions

* feat(dingtalk): deliver A2UI cards and restore agent replies

* Fix DingTalk A2UI form submissions and agent replies

* Restore LangBot branding on DingTalk A2UI cards

* Use compatible Markdown link in DingTalk A2UI branding

* Place LangBot branding above DingTalk card content

* Stream DingTalk replies without a source message

* Move DingTalk branding into compact card footer

* fix(wecombot): handle native select card callbacks

* fix(wecombot): stream replies after HITL cards

* fix(dingtalk): show submitted HITL choices in cards

* fix(lark): stream replies after HITL submissions

* fix(plugins): refresh LocalAgent source hashes

* fix(dify): merge HITL resume streaming into in-tree plugin

* feat(interactions): resume runner in place after card submission

* fix(interactions): respect live adapter APIs and preserve deadlines

* fix(ci): lock blocking interaction SDK for dependent checks

* test(runner): keep legacy SDK probe importable

* fix(interactions): align adapter manifests and close timed-out streams

* fix(agent): avoid duplicate replies and enable LocalAgent cards

* chore(plugins): sync LocalAgent catalog version

* refactor(agent): unify blocking interaction callbacks and adapters

* chore(deps): pin blocking interaction SDK revision

* test(agent): remove obsolete async fixture mark

* test(interaction): update legacy admission assertions

* fix(qqofficial): keep card callbacks responsive

* fix(runner): keep blocking card interactions alive

* ci(plugins): expect SDK 0.7.20 in Runner workflows

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-authored-by: multica-agent <[email protected]>

* ci(plugins): test coding Runners against SDK 0.7.20

Claude Code and Codex now call ctx.request_interaction, first released in 0.7.20.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-authored-by: multica-agent <[email protected]>

* fix(discord): deliver guild interaction cards to the originating channel

Pipeline group conversations are keyed by guild id, so send_interaction
targeted the guild and Discord returned Unknown Channel. Resolve the channel
from the message being answered, edit cards in that channel, and report the
card's conversation on callbacks so the Host scope check matches.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-authored-by: multica-agent <[email protected]>

---------

Co-authored-by: RockChinQ <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-11-03 21:45:49 +08:00
huanghuoguoguo 990f766661 Merge pull request #2846 from langbot-app/fix/memory-fact-integrity
feat(LongTermMemory): add temporal recall and reviewed semantic memory
2026-11-03 10:22:37 +08:00
43c0ba7e44 feat(speech): implement TTS and STT model layer and pipeline stages (LANG-251) (#2839)
* feat(speech): implement TTS and STT model layer and pipeline stages (LANG-251)

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

* fix(speech): fix invoke signatures and provider lookup in speech stages and model testing

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

* feat(speech): rename STT to ASR, improve TTS voice parameter handling and failure recovery

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

* fix(persistence, lint, web): fix migration revision id, legacy table check, ruff duplicates, and frontend types

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

* fix(speech): restore migration and CI contracts

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

* fix(pipeline,ui): fix select dropdown width gap, add speech to guided tour, and configure show_if for speech options

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

* feat(speech,openclaw): support silk audio transcoding, graceful fallback, duration estimation, and multi-lang deploy docs

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

* fix(audio): enhance ffmpeg executable detection via venv and imageio_ffmpeg

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

* fix(provider): improve LiteLLM error classification and avoid falling back to Unknown error

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

* fix(openclaw): serialize voice_item attributes and improve transcoding fallback logging

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

* fix(audio,openclaw): handle transient TMPDIR deletion and add size attribute to voice_item

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

* fix(openclaw): download and convert inbound voice messages and align voice sending protocol

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

* fix(models): redesign add model popover tabs layout and include ASR/TTS models in provider counts and scanning

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

* fix(audio): decrypt and transcode wecombot voice to mp3, align openclaw weixin voice delivery

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

* fix(wecombot): transcode outbound voice to silk and support voice_delivery mode

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

* fix(discord,web): map audio attachments to voice for ASR, prefer base64 voice in webui

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

* fix(telegram): deliver voice replies in streaming and non-streaming modes with quote origin

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

* feat(dingtalk): route voice messages through pipeline ASR and send TTS replies as voice

Inbound DingTalk audio now arrives as a Voice component with its duration,
so the pipeline speech recognition switch decides how it is transcribed.
DingTalk's own recognition text is used only when the audio cannot be
downloaded.

Outbound Voice components are transcoded to ogg/opus, uploaded as voice
media and sent as native sampleAudio messages in both the omni and legacy
adapters. Audio over 60 seconds, or audio that cannot be transcoded or is
rejected as a voice message, is sent as a file instead. Voice parts no longer
leak into the reply text as "[Voice]".

Also estimate ogg durations from the granule position and ignore non-audio
MIME hints when extracting voice bytes, so ffmpeg can probe the input.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-authored-by: multica-agent <[email protected]>

* fix(ci): include speech model counts in provider responses and fix lint/image build

- Copy every count returned by get_provider_model_counts into the provider
  payload instead of indexing asr_count/tts_count, and update the test fakes
  to return the speech model counts.
- Install libc6-dev in the runtime image so the pilk audio extra can compile.
- Apply ruff and prettier formatting required by the lint jobs.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-authored-by: multica-agent <[email protected]>

* test(e2e): expect the speech step in the pipeline setup guide

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-authored-by: multica-agent <[email protected]>

---------

Co-authored-by: multica-agent <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>
2026-11-02 23:51:22 +08:00
huanghuoguoguo d666e1f5cf fix(LongTermMemory): enforce stored context budgets before publication 2026-11-02 22:17:33 +08:00
huanghuoguoguo 7355a23eed Merge remote-tracking branch 'origin/master' into fix/memory-fact-integrity 2026-11-02 21:13:10 +08:00
huanghuoguoguo 5627a3b9bc fix(LongTermMemory): reject summaries that cannot fit recall context 2026-11-02 21:13:10 +08:00
huanghuoguoguo dd95ff9796 fix(LongTermMemory): clear derived memory across document and KB deletion 2026-11-02 21:11:14 +08:00
huanghuoguoguo 1d81e1dcc7 fix(LongTermMemory): validate integrated temporal and summary boundaries 2026-11-02 21:10:04 +08:00
huanghuoguoguo f207965e68 feat(LongTermMemory): review consolidation proposals in Memory Console 2026-11-02 20:52:56 +08:00
huanghuoguoguo 8a3657430c feat(LongTermMemory): publish reviewed summaries with scoped source lineage 2026-11-02 20:50:01 +08:00
huanghuoguoguo 34ac1a8ee5 fix(LongTermMemory): preserve temporal precision and complete evidence spans 2026-11-02 20:45:19 +08:00
huanghuoguoguo 7cd90087b1 feat(LongTermMemory): retain fact provenance and review model-selected evidence 2026-11-02 20:45:14 +08:00
huanghuoguoguo 7d1f217350 fix(LongTermMemory): unify bounded current and historical recall 2026-11-02 20:41:33 +08:00
Martin 4623148817 fix(core): 收紧 event-first 会话身份传播 (#2832) 2026-11-02 20:33:17 +08:00
huanghuoguoguo 2cbe686a57 fix(LongTermMemory): preserve facts during correction and archival 2026-11-02 20:11:51 +08:00
huanghuoguoguo 558ded2b7a fix(LongTermMemory): support memory tools in Agent processors (#2843)
* fix(LongTermMemory): support memory tools in Agent processors

* docs(LongTermMemory): clarify tool and Pipeline lifecycle access

* test(LongTermMemory): isolate persistent Chroma clients across fixtures
2026-11-02 20:11:23 +08:00
huanghuoguoguo 1a344aeb9f fix(agent): prepare plugin execution identity at context creation (#2842)
* fix(tools): propagate current execution identity to plugin calls

* fix(agent): construct complete execution identity before tool dispatch
2026-11-02 19:44:35 +08:00
RockChinQ 97886eac94 Merge pull request #2844 from langbot-app/agent/mika/49dceac9ee97
ci: build the dev image only on master and manual dispatch
2026-11-02 17:06:28 +08:00
Mikaandmultica-agent f8487471cd ci: build the dev image only on master and manual dispatch
Every branch push published a permanent rockchin/langbot:sha-<sha> tag plus a
branch-name tag, leaving 678 live Docker Hub tags across 265 branches. Restrict
push triggers to master; other branches stay buildable via workflow_dispatch.

Co-authored-by: multica-agent <[email protected]>
2026-11-02 08:59:58 +00:00
Guanchao Wang 8e304c9359 Merge pull request #2837 from jry21223/fix/wecom-heartbeat-send-failure-reconnect
fix(wecombot): reconnect when heartbeat send fails
2026-11-02 03:36:26 +00:00
d6bd73aee6 ci(platform): notify maintainers when PRs change platform adapter files
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-authored-by: multica-agent <[email protected]>
2026-11-01 15:55:12 +00:00
JERRY 485992c6fd fix(wecombot): close WebSocket after heartbeat send failure 2026-11-01 22:38:06 +08:00
huanghuoguoguo 8ee321f8c1 test(n8n): exercise latest DefaultRunner in daily regression (#2830)
* fix(n8n): validate runner timeout values

* fix(n8n): validate runner timeout values

* test(n8n): add latest DefaultRunner regression

* test(n8n): add latest DefaultRunner regression

* test(n8n): add latest DefaultRunner regression

* test(n8n): fix latest Runner response assertion
2026-10-31 22:24:22 +08:00
Martin 5aa1b0f5ae 完善 ACPAgentRunner 会话管理与权限边界 (#2822)
* feat(acp-agent-runner): add ACP session commands

* fix(acp-agent-runner): 收紧会话管理契约

* fix(acp-agent-runner): 修复 event-first 会话身份与切换能力校验
2026-10-31 21:53:46 +08:00
Martin 5be3b03e77 完善 Core Runner 取消与群聊控制命令 (#2821)
* feat(core): add generic runner cancellation control

* fix(core): 完善 Runner 取消与群聊控制命令

* fix(core): 支持多并发会话及时停止任务
2026-10-31 21:52:25 +08:00
huanghuoguoguo f750bb96ac test(ci): add daily Dify Cloud Agent regression
Add daily Dify Cloud Agent regression via Runner
2026-10-31 15:35:55 +08:00
ShryukGrandhi a6ed298f2a fix(logs): keep newline between log pages in get_log_by_pointer (#2826)
Signed-off-by: ShryukGrandhi <[email protected]>
2026-10-31 15:16:10 +08:00
huanghuoguoguo 7ff04002a2 refactor(tools): organize regression harness packages (#2828)
Reorganize regression tools into explicit packages and update all repository references.
2026-10-31 12:17:04 +08:00
huanghuoguoguo 306e154256 fix(regression): confirm Box removal before skipping inspect errors
Confirm Box container removal before tolerating docker inspect races.
2026-10-31 09:47:02 +08:00
RockChinQandmultica-agent 566952c0f7 feat(provider): preserve MiniMax thinking history and refresh discovery (#2824)
Co-authored-by: multica-agent <[email protected]>
2026-10-31 02:45:08 +08:00
Pratik GandhiandRockChinQ a1dda4ac80 docs(agent-runner): fix links to AGENT_RUNNER_QA_GUIDE.md (#2726)
Ten links in dev-docs/agent-runner-pluginization/ pointed to the non-existent ./RUNNER_QA_GUIDE.md; point them to AGENT_RUNNER_QA_GUIDE.md. Rebased onto the docs/ -> dev-docs/ move.

Co-authored-by: RockChinQ <[email protected]>
2026-10-31 02:15:08 +08:00
Martin fe6f279d24 chore(docker): drop obsolete compose version and expose ACP daemon port (#2789) 2026-10-31 02:05:48 +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
huanghuoguoguo 292fe43731 test(plugins): use in-tree sources without hash pins
Use the in-tree plugins directly for consumer contracts and avoid per-edit hash refreshes.
2026-10-30 11:11:31 +08:00
huanghuoguoguo 70fb56e274 fix(agent): keep reset generation out of external conversation ID (#2818)
Fixes #2814

After a session reset, keep the reset generation marker out of provider-facing external conversation state so Runner plugins start a new remote conversation.
2026-10-30 10:21:33 +08:00
huanghuoguoguo 98a242320b test(cli): add compatibility job with semantic assertions (#2813)
Squash merge after rebasing onto the merged companion suites and passing all required checks.
2026-10-30 09:33:00 +08:00
huanghuoguoguo 7119cc94ba test(regression): add plugin lifecycle recovery job (#2812)
Squash merge after resolving companion-suite conflicts and passing all required checks.
2026-10-30 09:20:37 +08:00
huanghuoguoguo 21ff044df1 test(regression): add concurrent conversation isolation job (#2811)
Squash merge after conflict resolution and all required checks passed.
2026-10-30 09:06:07 +08:00
huanghuoguoguo 52b07cb01f fix(regression): tolerate sandbox removal during resource sampling
Squash merge after all required checks passed.
2026-10-30 08:53:23 +08:00
huanghuoguoguo 687fc52b36 Merge pull request #2810 from langbot-app/test/state-lifecycle-job
test(regression): add durable state lifecycle job
2026-10-30 08:35:09 +08:00
Chin Rockandmultica-agent 75e1630550 fix(localagent): keep the SDK constraint installable across 0.7.x
LocalAgent declared langbot-plugin>=0.7.18, and the published 0.2.2 artifact
pinned langbot-plugin==0.7.16. The plugin runtime rejects any SDK requirement
its own SDK version does not satisfy, so both directions were dead ends: 4.11.4
(SDK 0.7.19) could not install the published build, and a 0.7.18 floor would
have locked out 4.11.2/4.11.3 (SDK 0.7.16) from the next one.

Use a bounded range from the 4.11.2 baseline instead, matching every other
official Runner and KnowledgeEngine plugin. Verified on SDK 0.7.16 and 0.7.19:
327 tests pass on both, including the runtime dependency admission contract.

Co-authored-by: multica-agent <[email protected]>
2026-10-29 15:48:06 +00:00
Chin Rockandmultica-agent 3ac4eef3ec chore(release): bump version to 4.11.4
Co-authored-by: multica-agent <[email protected]>
v4.11.4
2026-10-29 13:40:29 +00:00
Chin Rockandmultica-agent a9ad6ac00b ci(plugins): build plugin packages with the current SDK CLI
The packaging job pinned langbot-plugin 0.7.18 while Core runs 0.7.19, so it
would validate archives with a CLI that no longer matches the SDK contracts the
plugins are shipped against. Follow the Core pin.

Co-authored-by: multica-agent <[email protected]>
2026-10-29 13:40:29 +00:00
Chin Rockandmultica-agent 1f81966606 fix(persistence): make resource URL catalog downgrade work standalone
0041_resource_urls could not be rolled back through the supported entry point
(`python -m langbot.pkg.persistence.alembic_runner downgrade`):

- SQLite failed with `no such function: langbot_expand_resource_urls`. The UDF
  is registered by an Engine `connect` hook that only runs when the application
  installs the catalog, so a standalone migration process held a connection
  without it.
- Both backends failed with `AttributeError: 'Engine' object has no attribute
  '_langbot_resource_aliases'`, because `uninstall()` assumed `install()` had
  already run on that engine.

Register the expansion UDF on the migration connection for SQLite, and let
`uninstall()` skip the alias cache when the engine never installed it. The
downgrade still rewrites retained payloads back to literal URLs and drops the
catalog; only the missing hooks were at fault.

Co-authored-by: multica-agent <[email protected]>
2026-10-29 12:30:28 +00:00
leonoxoandleonoxo c1284be8fc fix(line): decouple webhook processing lifecycle and use Push API for proactive sends (#2721)
- webhook handler: run listener in a tracked background task so the
  HTTP ACK is not coupled to the Agent run lifetime (prevents in-flight
  cancellation when the request scope ends); exceptions are logged
- send_message: implement LINE Push API path (text + image) instead of
  the empty stub, separated from the reply-token path

Verified in production on a self-hosted v4.11.0 deployment (LangBot
community edition, rootless Docker).

Co-authored-by: leonoxo <[email protected]>
2026-10-29 14:54:31 +08:00
huanghuoguoguo 31bcd673e7 Merge pull request #2806 from langbot-app/ci/daily-api-contract
ci(daily): add API contract regression job
2026-10-29 11:10:46 +08:00