Commit graph

220 commits

Author SHA1 Message Date
xmanrui
9d1dc71794 fix(feishu): harden interactive card flows 2026-08-24 18:49:32 +08:00
xiemanR
5b33249599
Merge pull request #35 from C3H3-AI/feishu-card-system
feat(feishu): redesign interactive menu with dropdowns, settings panel, and steer input
2026-08-24 18:49:16 +08:00
C3H3-AI
1ee03254aa merge: resolve v2.0.1 lib conflict by keeping our build 2026-08-24 12:35:20 +08:00
xmanrui
dea9a8f2d1 chore: release v2.0.1 2026-08-24 11:46:38 +08:00
xmanrui
596848ffcb fix: isolate channel activation failures 2026-08-24 11:43:35 +08:00
xmanrui
4989491dc8 fix: wrap localized card actions 2026-08-24 11:26:12 +08:00
C3H3-AI
bcda00d7e7 chore: add menu card screenshot for PR review 2026-08-24 09:56:29 +08:00
C3H3-AI
45f55f73eb fix(feishu): streamline menu card layout and update help card
- Move preset/model/archive controls from settings card to main menu
- Arrange 4 dropdowns in 2x2 grid with external icons
- Align steer and archive side by side
- Replace #showSettingsCard with #sendMenuCard for preset/model/archive updates
- Add #sendMenuCard after 'new' button action for consistency
- Update help card to reflect current menu layout (12 items)
- Clean up duplicate sessionlist entries in menuHelpText
- Add missing English dictionary entries
2026-08-24 09:46:32 +08:00
C3H3-AI
044ab74c28 merge: integrate upstream v2.0.0 (files, images, i18n) into feishu-card-system
- Resolve conflicts in feishu-cards.mjs / bridge.mjs / control-command.mjs / lib
- Keep card-system enhancements: menuCard/settingsCard/presetCard/modelCard, /m newCard, card form submit, model select
- Adopt upstream i18n t() wrapping + file/image delivery + inbound files
- Add missing English dictionary entries for new feishu card strings
- Rebuild lib (package now 2.0.0)
2026-08-24 07:22:50 +08:00
xmanrui
e577e66a93 chore: release v2.0.0 2026-08-24 04:12:18 +08:00
xmanrui
d4b8666495 fix: harden host language switching 2026-08-24 03:55:55 +08:00
xmanrui
3741dd8fd9 Merge pull request #46 from zaakirio/feat/host-i18n-en
feat(i18n): add English support for host-side chat messages
2026-08-24 03:51:43 +08:00
xmanrui
1f2c7f1310 docs: record native channel merge validation 2026-08-24 03:49:33 +08:00
xmanrui
a5c516a61c merge: add native Telegram rich delivery
# Conflicts:
#	lib/index.js
2026-08-24 03:44:19 +08:00
xmanrui
37992b148a merge: add native Discord threads 2026-08-24 03:43:54 +08:00
xmanrui
fde088e381 fix(delivery): surface failed semantic finals 2026-08-24 03:41:53 +08:00
xmanrui
19480a26fb docs(discord): document native thread requirements 2026-08-24 03:39:05 +08:00
xmanrui
d7f4cf03ab feat(telegram): deliver native rich messages 2026-08-24 03:33:30 +08:00
xmanrui
dd66f5cbe1 feat(delivery): preserve text format intent 2026-08-24 03:32:33 +08:00
Zaakir
dcd7cd64d8 feat(i18n): add English support for host-side chat messages
Wrap all user-facing chat text in src/channels with a host-side t()
translator (Chinese is the identity default, so untranslated text is
always sent verbatim in Chinese). English is selected via the host
plugin config `language: en` or the DSH_IM_LANGUAGE environment
variable, and the settings UI keeps following the DSH web locale.

- add src/channels/shared/i18n.mjs with setImHostLanguage/t() and a
  Chinese-key -> English dictionary split by area (shared + channels)
- complete the English dictionary for every t() key in src/channels,
  including the feishu channel (welcome/help, repair flow, interactive
  cards, watch flow) and the shared command/approval/stream text
- wrap previously untranslated chat-facing strings in feishu bridge,
  feishu runtime, editable-message-stream, harness-client,
  connection-test and image-prompt
- dedupe dictionary entries that existed in multiple channel files and
  canonicalize conflicting translations into the shared dictionaries
- extend the i18n unit test to decode string-literal escapes so keys
  containing \n are checked correctly
- document the language switch in README.md, README.en.md and
  CHANGELOG.md, and rebuild lib/index.js

Added English support for bot chat messages across all nine IM
channels and AI Office without changing any Chinese output.
2026-08-24 00:32:30 +05:00
xmanrui
5b3db16097 fix(discord): close thread recovery races 2026-08-24 03:32:06 +08:00
xmanrui
2609ae20e8 fix(discord): request managed thread message content 2026-08-24 03:32:01 +08:00
xmanrui
47cf028914 feat(discord): route guild conversations into threads 2026-08-24 03:31:58 +08:00
xmanrui
73f262711b test(telegram): lock plain delivery baseline 2026-08-24 03:31:43 +08:00
xmanrui
54496f9ba4 test(discord): lock channel addressing baseline 2026-08-24 03:31:41 +08:00
xmanrui
3ff8c2a519 chore: release v1.5.0 2026-08-24 03:28:19 +08:00
xmanrui
3ec5f1eca7 feat: add native image delivery across channels 2026-08-24 03:25:38 +08:00
xmanrui
dbc0a4b730 update md 2026-08-24 02:18:43 +08:00
xmanrui
6fcb12c90f update md 2026-08-24 02:18:24 +08:00
xmanrui
1d7f6a5a0a chore: release v1.4.0 2026-08-24 01:22:11 +08:00
xiemanR
01f0f3aaef
Merge pull request #45 from xmanrui/codex/fix-pr44-qq-delivery
fix(qq): prevent turn feed message spam
2026-08-24 00:48:57 +08:00
xmanrui
ade50210f0 fix(qq): prevent turn feed message spam 2026-08-24 00:48:21 +08:00
xiemanR
6ea048b277
Merge pull request #44 from ferocknew/feat/qqbot-turn-feed
Feat/qqbot turn feed
2026-08-24 00:37:48 +08:00
jonah.fu
81b9535ed5 fix(qq): drop per-tool notices, keep errors and interim text
Real agent turns invoke tools constantly; one 'Tool call X' message
per call flooded the chat with near-zero information. Tool frames now
only flush the pending interim explanation text; successful tool
results stay silent, and failures still push the tool name with the
error detail.
2026-08-23 23:00:38 +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
xmanrui
26417d3666 chore: release v1.3.0 2026-08-23 22:42:18 +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
jonah.fu
6171ec0dc1 feat(qq): push progress and answers as separate messages
Replace the in-place streaming reply (openStream replace-mode frames)
with discrete pushed messages, so the chat no longer flickers while
the turn is running:

- each tool call pushes one notice message (正在使用X…); status frames
  such as '正在整理结果…' and per-token text frames are not pushed
- the final answer arrives as one new markdown message
- a stopped turn still announces '已停止。'; no stream session is
  created, so there is nothing to cancel or finalize
2026-08-23 22:31:19 +08:00
jonah.fu
6b176d9053 fix(qq): stop flashing the status frame during tool runs
The shared Harness client emits a '正在整理结果…' status update after
every tool/result. Pushing each one into the QQ stream message made
multi-tool turns repeatedly flash that notice instead of showing real
progress. Skip status frames in the QQ onUpdate handler so the stream
keeps the last meaningful frame (tool name or generated text), which
matches the official dsh-qqbot behaviour of not pushing tool-noise.
2026-08-23 22:27:02 +08:00
jonah.fu
81884173df feat(qq): render answers as markdown
Deliver final Harness answers to QQ as msg_type=2 markdown so bold,
headings, code blocks, lists, and tables render natively in QQ.

- add markdown-reply.mjs: chunk long answers at code-fence/table
  boundaries (4500-char limit) and send each chunk with a unique
  msg_seq to avoid passive-reply dedup (40054005)
- fall back to plain text per chunk when the platform rejects
  markdown, so bots without markdown capability keep working
- route the non-stream final answer path in qq-bridge through the
  markdown sender; streaming replies already use markdown content
  type, and command/notice texts stay plain
2026-08-23 21:59:06 +08:00
xmanrui
29bcb67a64 chore: release v1.2.0 2026-08-23 21:36:05 +08:00
xmanrui
9b65dd3d6b feat(whatsapp): add access modes 2026-08-23 21:28:50 +08:00
xmanrui
b0e2c266c5 docs: make changelog bilingual 2026-08-23 20:32:39 +08:00
xmanrui
3224128bbc docs: add changelog for tagged releases 2026-08-23 20:16:01 +08:00
xmanrui
908941f303 release: prepare dsh-im 1.1.0 2026-08-23 20:10:02 +08:00
xmanrui
d472dd5a75 feat: add native result-file delivery 2026-08-23 20:02:06 +08:00
C3H3-AI
caa9e5eec2 fix(feishu): ensure /m sends a new card while other actions keep in-place updates 2026-08-23 11:13:03 +08:00
C3H3-AI
7a6e84cb89 fix(feishu): align menu number-fallback test with emoji label and bind-flows
The menu card renders the repair fallback as **5**<emoji>修复, so the two assertions that matched **5**修复 are broadened to tolerate the marker emoji. The number-reply on a later session page now reads the last text confirmation instead of assuming the last outgoing message is text, since #bindSession refreshes the menu card after binding. Rebuild bundle.
2026-08-23 09:41:38 +08:00
C3H3-AI
722a2f8c58 ci: use Node 24 in CI to fix mock timer cancellations on Node 22 2026-08-23 07:34:27 +08:00