Commit Graph

4023 Commits

Author SHA1 Message Date
Hyu be0214cf4d feat(storage): group usage by application and runtimes 2026-09-03 00:11:05 +08:00
Hyu 380bdfeca6 fix(web): contain nested scrolling without blocking forms 2026-09-01 17:29:59 +08:00
Hyu a87c814dae feat(web): improve marketplace install workflows 2026-09-01 16:43:50 +08:00
Hyu 982d660236 fix(web): harden agent runner marketplace flows 2026-09-01 12:46:16 +08:00
Hyu e5e62c8fe9 fix(plugin): keep status responsive during installation 2026-09-01 12:46:16 +08:00
Hyu 91e09af76a fix(web): complete pluginized agent onboarding flows 2026-09-01 10:41:29 +08:00
Hyu 7e51044a87 Merge fix/box-reconnect-skill-context into dev/4.11.x 2026-08-31 19:18:34 +08:00
Hyu b4980ab536 fix(box): reload workspace-scoped skills after reconnect 2026-08-31 19:18:19 +08:00
Hyu fde04e64f6 Merge remote-tracking branch 'origin/master' into dev/4.11.x
# Conflicts:
#	src/langbot/pkg/api/http/controller/groups/pipelines/pipelines.py
#	src/langbot/pkg/api/http/service/bot.py
#	src/langbot/pkg/provider/runners/localagent.py
#	src/langbot/templates/metadata/pipeline/ai.yaml
#	tests/unit_tests/api/service/test_bot_service.py
#	tests/unit_tests/provider/runners/test_difysvapi_runner.py
#	tests/unit_tests/utils/test_safe_regex.py
#	web/src/app/infra/entities/adapter-categories.ts
#	web/src/app/wizard/page.tsx
#	web/src/i18n/locales/en-US.ts
#	web/src/i18n/locales/ja-JP.ts
#	web/src/i18n/locales/zh-Hans.ts
#	web/tests/e2e/plugin-page-auth.spec.ts
2026-08-31 17:17:47 +08:00
RockChinQ 1b7ae791b3 fix(plugin): return not found after removal (#2483)
Co-authored-by: Hyu <chenhyu@proton.me>
2026-08-31 13:40:03 +08:00
Neos e69a80f5e9 Windows 兼容性修复 + Dify API 适配 + 企微 WS 加载优化 (#2470)
* fix: Windows fsync requires write access to file descriptor

- _fsync_file: os.O_RDONLY -> os.O_RDWR (Windows _commit() requires write access)
- _fsync_directory: tolerate OSError on fsync and os.open (chmod 0o700 blocks access on Windows)

* fix: Dify SSE empty data lines and upload response format mismatch

- Skip malformed/flushed SSE data lines (JSONDecodeError)
- Accept HTTP 200 besides 201 for file upload response
- Unwrap data wrapper in upload response (resp.get('data', resp))

* feat: WeCom WS mode sends empty initial stream frame for loading spinner

Send an empty reply_stream frame immediately after stream session
creation so the WeCom client shows its built-in loading indicator
while the pipeline processes the message (e.g. RAG retrieval).

* fix(compat): harden Windows, Dify, and WeCom changes

* fix(migration): clean interrupted SQLite temp files

---------

Co-authored-by: Hyu <chenhyu@proton.me>
2026-08-29 22:34:10 +08:00
Hyu bafdaf0033 fix(monitoring): restore SQLite token statistics (#2479)
* fix(monitoring): restore SQLite token statistics

Allow the monitored SQLite strftime bucket expression through the tenant SQL guard and preserve structured backend errors in the token dashboard. Add persistence and frontend regressions.\n\nVerified-by: independent-review

* test(runtime): accept reconcile timeout in capacity stub

Keep the PostgreSQL capacity probe aligned with the runtime handler contract and assert the bounded reconcile timeout.

---------

Co-authored-by: dadachann <185672915+dadachann@users.noreply.github.com>
2026-08-28 11:41:42 +08:00
RockChinQ aeff8d7e30 fix(i18n): complete wizard locale keys 2026-08-28 01:37:45 +08:00
Dongchuan Fu be3734ffda feat(wizard): rework agent onboarding flow (#2471)
* feat(wizard): rework agent onboarding flow

* fix(web): support LAN development access

* fix(wizard): parse ranked model selection entries

* feat(wizard): add inbound bot verification

* feat(wizard): add floating page bot verification

* fix(wizard): repair HTTP bot inbound test setup

* feat(wizard): streamline custom model onboarding

* feat(wizard): label page bot test preview

* style(space): apply ruff formatting

* fix(wizard): polish AI engine onboarding

* fix(wizard): clarify local account message test

* feat(wizard): animate AI engine transitions

* fix(wizard): align AI engine setup headers

---------

Co-authored-by: langbot-dev <langbot@users.noreply.github.com>
Co-authored-by: RockChinQ <rockchinq@gmail.com>
2026-08-28 01:30:30 +08:00
leonoxo 855ae2bdba fix(line): map LINE mentions to At elements so the at-bot rule works (#2478)
The LINE adapter passed text through as a single Plain component,
ignoring the mention payload (mentions[].index/length/isSelf) that the
Line Messaging API includes in the webhook. As a result:

- At(target=bot_account_id) never appeared in the message chain, so the
  'at-bot' group respond rule silently dropped every @bot mention.
- The bot only replied when the message happened to match the prefix
  rule (e.g. starting with 'ai').

Now LINEMessageConverter reads message.message.mention and builds the
chain per mention position:

- Bot mention (isSelf) -> At(target=bot_account_id) so AtBotRule matches
  the same way as other adapters (dingtalk/lark etc.).
- Other mentions -> At(target=<line user id>, display=<mention text>).
  At.__str__ already prepends '@', so the display text carries no
  double '@' and the rendered text (prefix/regexp rules, quotes,
  session context) is byte-identical to before.
- Missing/out-of-bounds mentions are skipped defensively.

target2yiri becomes an instance method (like wechatpad/aiocqhttp) so
the converters can hold bot_account_id; LINEAdapter passes it in from
its own config.
2026-08-27 18:38:27 +08:00
fishzjp b66db86bff fix(provider): stringify MCP tool results for OpenAI-compatible APIs (#2476)
execute_func_call returns list[ContentElement] for MCP tools, but the
runner assigned that list directly to the tool-message content. The
OpenAI chat-completions spec requires tool-message content to be a
string, so OpenAI-compatible endpoints return HTTP 500 when the raw
list is sent.

Serialize the list to a string before building the tool message, using
ContentElement.__str__ which returns the text payload for text elements
and a human-readable placeholder for images and files. Fixes #2457.
2026-08-27 18:19:04 +08:00
fishzjp 95b8736e93 fix(provider): tolerate trimmed image parts in litellm message conversion (#2475)
SessionManager clears image_base64 on past turns to save memory, and
exclude_none serialization drops the hollowed field entirely, so a
replayed history part can arrive as {'type': 'image_base64'} with no
payload. The converter accessed the missing key unconditionally and
raised KeyError on every turn after an image was sent.

Prefer the base64 payload when present, fall back to an image_url that
survived on the same element, and drop hollow parts otherwise (same
strategy as the existing file-part handling). Fixes #2469.
2026-08-27 18:07:43 +08:00
Yang cabde423a1 Fix wecomcs open_kfid msgid (#2449)
* Update wecomcs.py

fix bug wecomcs send_message open_kfid
event.receiver_id  is open_kfid

* Update wecomcs.py

fix bug msgid exceeds the 32-byte limit

* test(wecomcs): cover bounded message IDs and images

---------

Co-authored-by: dadachann <185672915+dadachann@users.noreply.github.com>
2026-08-27 17:30:49 +08:00
RockChinQ 4b888ad390 copy(agents): explain the pipeline message flow 2026-08-27 16:03:56 +08:00
RockChinQ 7d9bdf0562 copy(agents): simplify pipeline type description 2026-08-27 15:59:28 +08:00
RockChinQ 5e144ac7c8 fix(i18n): localize pipeline processor type 2026-08-27 15:57:31 +08:00
RockChinQ 21ffaf9a14 refactor(agents): move debug event picker to input area 2026-08-27 15:52:59 +08:00
RockChinQ f3c1887e92 refactor(pipelines): clarify log view switching 2026-08-27 15:49:55 +08:00
RockChinQ 7671aefed7 fix(agents): improve diagram contrast in dark mode 2026-08-27 15:32:35 +08:00
RockChinQ e6f6789e8b fix(agents): make pipeline flow animation seamless 2026-08-27 15:28:43 +08:00
RockChinQ 05fe93e108 style(agents): animate processor diagram connections 2026-08-27 15:18:34 +08:00
RockChinQ e20a73c83a style(agents): distinguish agent capabilities from events 2026-08-27 15:14:53 +08:00
RockChinQ fde31d590e style(agents): clarify agent event direction 2026-08-27 15:11:13 +08:00
RockChinQ af03dbe958 style(agents): align pipeline diagram with agent 2026-08-27 15:08:33 +08:00
RockChinQ bd7aeab53d copy(agents): clarify processor use cases 2026-08-27 15:03:43 +08:00
RockChinQ 91f484e0ce copy(agents): expand processor type descriptions 2026-08-27 15:02:02 +08:00
RockChinQ a9b24e59ec refactor(agents): use shadcn processor type toggle 2026-08-27 14:55:59 +08:00
RockChinQ 139494cd63 style(agents): apply LangBot colors to processor diagrams 2026-08-27 14:49:04 +08:00
RockChinQ b4d9659ffe refactor(agents): remove decorative agent icon 2026-08-27 14:44:51 +08:00
RockChinQ 3f0ca13d6d refactor(agents): simplify processor diagrams 2026-08-27 14:43:32 +08:00
RockChinQ 6b40c2cf66 refactor(agents): polish processor creation layout 2026-08-27 14:39:56 +08:00
RockChinQ 847bfc8df5 feat(agents): improve processor creation choice 2026-08-27 14:31:37 +08:00
RockChinQ 823feac7e0 fix(bots): clarify adapter test prerequisites 2026-08-26 23:14:42 +08:00
RockChinQ a7badf6258 fix(bots): move adapter debugger to configuration 2026-08-26 23:07:02 +08:00
RockChinQ 3d692fa8db feat(bots): add platform event debugger 2026-08-26 19:46:59 +08:00
RockChinQ 7990d36c78 fix(bots): align route event selector 2026-08-26 19:32:39 +08:00
RockChinQ 600a173918 refactor(bots): remove route execution test 2026-08-26 14:28:30 +08:00
RockChinQ 8b63cc0281 fix(events): show raw codes in test selectors 2026-08-26 14:12:52 +08:00
RockChinQ 4787799cd8 fix(agents): align debug event selection 2026-08-26 14:06:09 +08:00
RockChinQ 47f5515fa9 fix(pipelines): retain debug chat image history 2026-08-26 00:32:03 +08:00
RockChinQ 94fd3d274c refactor(pipelines): simplify connection status copy 2026-08-26 00:24:37 +08:00
RockChinQ 8380bfc7d4 refactor(pipelines): soften chat session selection 2026-08-26 00:22:22 +08:00
RockChinQ a936734efa fix(pipelines): move chat reset action to footer 2026-08-26 00:20:16 +08:00
RockChinQ 0c5656d0d0 refactor(pipelines): streamline debug chat controls 2026-08-26 00:18:46 +08:00
RockChinQ 532d1b73d2 refactor(bots): group event route creation menu 2026-08-26 00:10:51 +08:00