Commit graph

39 commits

Author SHA1 Message Date
xmanrui
fde088e381 fix(delivery): surface failed semantic finals 2026-08-24 03:41:53 +08:00
xmanrui
dd66f5cbe1 feat(delivery): preserve text format intent 2026-08-24 03:32:33 +08:00
xmanrui
3ec5f1eca7 feat: add native image delivery across channels 2026-08-24 03:25:38 +08:00
xmanrui
ade50210f0 fix(qq): prevent turn feed message spam 2026-08-24 00:48:21 +08:00
jonah.fu
46acf5a425 Merge upstream/main: inbound files across channels + v1.3.0
Resolve qq-bridge.mjs by keeping the inbound-file support (hasFiles,
files passthrough) and dropping the upstream stream session, which
this branch replaces with the discrete turn-feed notices.
2026-08-23 22:46:44 +08:00
jonah.fu
e1bc9dd0d0 feat(qq): stream the full turn feed as discrete messages
Show what the agent is actually doing during a turn, the way Claude
Code does: interim explanation text, every Tool call, and the error
detail when a tool fails, each as its own pushed message before the
final markdown answer.

- HarnessReplyTracker.consume now returns every frame of a polling
  batch in order (same-batch text frames collapse to the latest)
  instead of dropping all but the last event, which silently ate
  tool-call frames that shared a batch with their result
- tool frames carry callId; status frames carry the correlated
  toolName and a flattened error text parsed from the tool/result
  error payload (message, or name: code)
- the QQ bridge holds interim step text until the next tool call
  (or the end of the turn) pushes it, emits 'Tool call <name>' per
  call, emits 'Tool call <name>\nError: <reason>' for failures, and
  skips re-sending interim text that already equals the final answer

Other channels keep their existing behaviour: the status frame still
reads '正在整理结果…' and they ignore the new optional fields.
2026-08-23 22:39:29 +08:00
xmanrui
0a26d7df92 feat: support inbound files across all channels 2026-08-23 22:39:26 +08:00
xmanrui
d472dd5a75 feat: add native result-file delivery 2026-08-23 20:02:06 +08:00
xmanrui
dc10cb22c8 fix(weixin): distinguish loopback Harness denial 2026-08-22 22:59:24 +08:00
xmanrui
83ee0d63a7 fix(weixin): refine Harness access errors 2026-08-22 18:56:49 +08:00
xmanrui
eb21b14f60 fix(weixin): classify Harness health failures 2026-08-22 04:21:00 +08:00
xmanrui
eea29fe296 feat: add agent preset chat commands 2026-08-22 04:04:44 +08:00
xmanrui
01576f65c6 fix: complete per-bot agent preset lifecycle 2026-08-22 00:20:23 +08:00
iamyaojie
a1bdf2c1f8 Merge remote-tracking branch 'upstream/main' into feat/per-bot-agent-preset
Co-authored-by: Cursor <cursoragent@cursor.com>

# Conflicts:
#	lib/index.js
2026-08-21 22:34:11 +08:00
iamyaojie
3161816cc4 feat: 按机器人选择 Agent Preset
在九个渠道的设置页卡片上选择 Host 已有预设;未选则跟随默认,只影响之后新建的会话。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-21 19:19:45 +08:00
xmanrui
5e5c7e46c5 fix(channels): clarify unsupported image model errors 2026-08-21 19:07:18 +08:00
xmanrui
a199c65356 fix(feishu): make watch completion delivery reliable 2026-08-21 16:29:45 +08:00
liuwenbo00
beb269dc0e feat(feishu): persistent session watches and completion pushes
- /watch resolves the target READ-ONLY: sessions are validated against
  registered workspace listings (current or any other) without binding the
  conversation or switching workspaces. /unwatch and /watchlist round out
  the command set; the watchlist card supports button and number-reply
  unwatching.
- Watches persist in the state store (sessionId + title + chatId + lastSeq)
  and resume at runtime start: the bridge starts the global event-mux
  watcher in its constructor when the harness supports it.
- Completion pushes fire on turn/end, deduped by sessionId + turn id, with
  the seq watermark persisted per watch. After a mux reconnect the bridge
  replays each watched session's recent history (session.history) through
  the normal handler, so missed turn/end events are compensated without
  duplicates.
- Bound-session push targets are persisted (chatTargets) instead of living
  only in memory, and refresh on every accepted message.
- Watch failures map to safe user-facing messages.
2026-08-21 16:01:33 +08:00
liuwenbo00
6366404c42 feat(feishu): interactive card menus and session/workspace list cards
- /m (or /menu) opens a card menu; /sessionlist and /workspacelist render
  cards with bind/switch buttons; number replies stay usable as a fallback
  when the app does not subscribe card.action.trigger.
- card.action.trigger callbacks validate the operator's open_id against the
  allowed senders: group members outside the allowlist can never drive
  binding, workspace switches or other card actions.
- Session-list pagination uses page numbers everywhere (buttons carry
  sessions:<page>), fixing the previous double page-size scaling that
  skipped pages past 20 sessions.
- Bind/workspace failures map to safe user-facing messages instead of raw
  error details.
- Apps registered after this change subscribe card.action.trigger during
  the scan flow.
2026-08-21 10:03:23 +08:00
xmanrui
24e690498b fix: preserve Telegram compatibility and stabilize Office 2026-08-21 01:37:21 +08:00
xmanrui
8121557460 feat: support numbered model selection 2026-08-20 03:11:20 +08:00
xmanrui
99ce38e9a4 feat: add model and turn control commands 2026-08-20 01:28:51 +08:00
xmanrui
7e96c9ce55 merge: honor Harness default agent preset 2026-08-19 11:29:44 +08:00
xmanrui
3ac70a7c65 fix: remember direct recipients for connection tests 2026-08-19 11:24:50 +08:00
xmanrui
fb61c4235f feat: send test messages during bot connection checks 2026-08-19 03:52:52 +08:00
xmanrui
8a64f2bc8c fix: honor Harness default agent preset for IM sessions 2026-08-19 03:26:02 +08:00
xmanrui
65c842c045 feat: support image prompts across IM channels 2026-08-19 02:56:14 +08:00
xmanrui
1cc7a26f30 feat: support compact command across IM channels 2026-08-18 23:20:05 +08:00
xmanrui
33d1cd43a7 fix: clarify session index binding scope 2026-08-18 22:17:39 +08:00
C3H3-AI
55ed947d9a Merge remote-tracking branch 'upstream/main' 2026-08-18 19:46:22 +08:00
C3H3-AI
3bc642bb82 feat: IM session list relative time + /session N index binding
Local UX enhancements on top of upstream ce8b9e8:
- harness-client.mjs: add toEpochMs/sessionTimeMs, attach time to sessions
- workspace-command.mjs: /sessionlist relative time, /session N index binding
2026-08-18 19:46:16 +08:00
xmanrui
66bdad6299 fix: support Harness approvals across IM channels 2026-08-18 16:45:25 +08:00
xmanrui
cd8175d341 fix: support Harness interactions across IM channels 2026-08-18 14:13:10 +08:00
xmanrui
3e7e1dcdd7 fix: support Harness interactions in DingTalk and Feishu 2026-08-18 13:03:15 +08:00
xmanrui
1af8610cd5 feat: bind bot chats to existing harness sessions 2026-08-18 02:59:29 +08:00
xmanrui
28381468b3 feat: add workspace session list command 2026-08-18 01:38:18 +08:00
xmanrui
1fe6180813 feat: add workspace list command 2026-08-18 00:39:16 +08:00
xmanrui
44dd50216a feat: support per-bot workspace switching 2026-08-17 23:56:27 +08:00
xmanrui
cb74e1c4c7 Add Telegram and Discord IM channels 2026-08-16 14:47:16 +08:00