@tianshu-ai/tianshu 0.3.43 → 0.3.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tianshu-ai/tianshu",
3
- "version": "0.3.43",
3
+ "version": "0.3.44",
4
4
  "description": "An open AI agent platform with a sidecar browser. Built in public.",
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://github.com/tianshu-ai/tianshu",
@@ -81,13 +81,25 @@ async function dispatch(envelope, deps) {
81
81
  type: "channel_session_changed",
82
82
  channelId: envelope.channelId,
83
83
  });
84
- // Collect runPrompt's stream output into a final reply text.
85
- // We prefer stream_end's `message.text` (the canonical rendered
86
- // body) but fall back to the concatenated stream_delta deltas
87
- // when the agent finished with an unusual shape (tool-only turn,
88
- // streaming aborted, etc.).
89
- const deltaChunks = [];
90
- let finalText = "";
84
+ // Forward every assistant text chunk the agent emits, not just
85
+ // the last one. A single agent turn can produce multiple
86
+ // assistant messages (tool call result explanation
87
+ // continuation final answer), and we want the user to see all
88
+ // of them on wechat the same way they would in the webchat
89
+ // pane.
90
+ //
91
+ // Strategy: each stream_end is a complete assistant message
92
+ // (delta chunks already concatenated server-side into
93
+ // `message.text`). We queue every non-empty body in
94
+ // `assistantQueue` and ship them out sequentially after
95
+ // runPrompt resolves. Sequential matters for two reasons:
96
+ // - context_token is per-user, shared across our outbound
97
+ // calls; parallel sends would race on Tencent's side
98
+ // - wechat preserves message order by send time, so users see
99
+ // thinking → tool result → final answer in the order the
100
+ // agent produced them
101
+ let deltaChunks = [];
102
+ const assistantQueue = [];
91
103
  let errorReason = "";
92
104
  const sink = (msg) => {
93
105
  // Rebroadcast persisted-row events scoped to this channel
@@ -105,7 +117,10 @@ async function dispatch(envelope, deps) {
105
117
  }
106
118
  else if (msg.type === "stream_end") {
107
119
  const wireText = msg.message?.text?.trim() ?? "";
108
- finalText = wireText || deltaChunks.join("").trim();
120
+ const text = wireText || deltaChunks.join("").trim();
121
+ deltaChunks = [];
122
+ if (text.length > 0)
123
+ assistantQueue.push(text);
109
124
  }
110
125
  else if (msg.type === "stream_error") {
111
126
  errorReason = msg.reason || "unknown";
@@ -128,19 +143,18 @@ async function dispatch(envelope, deps) {
128
143
  catch (err) {
129
144
  errorReason = err instanceof Error ? err.message : String(err);
130
145
  }
146
+ // Sequential delivery preserves order on the user's wechat
147
+ // thread + avoids racing the per-user context_token.
148
+ for (const body of assistantQueue) {
149
+ await safeSend(envelope.bindingId, envelope.chatId, body);
150
+ }
131
151
  if (errorReason.length > 0) {
132
- // Surface an error to the user so the chat doesn't stay silent.
133
- // We deliberately keep this terse channel platforms have
134
- // small message budgets and exposing internal failure detail
135
- // would be noisy.
152
+ // Surface the error after every successful message landed.
153
+ // Channel platforms have small message budgets and exposing
154
+ // internal failure detail would be noisy; keep it terse.
136
155
  await safeSend(envelope.bindingId, envelope.chatId, `⚠️ agent error: ${errorReason}`);
137
- return;
138
- }
139
- if (finalText.length > 0) {
140
- await safeSend(envelope.bindingId, envelope.chatId, finalText);
141
156
  }
142
- // Tool-only turn: agent did real work but no user-facing text.
143
- // We stay silent; the next user message reopens the loop.
157
+ // Tool-only turn: assistantQueue is empty, nothing more to ship.
144
158
  }
145
159
  async function safeSend(bindingId, target, text) {
146
160
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/channels/router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/channels/router.ts"],"names":[],"mappings":"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"}