doubao-cli 0.2.3 → 0.2.4

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": "doubao-cli",
3
- "version": "0.2.3",
3
+ "version": "0.2.4",
4
4
  "description": "Programmatic control for local Doubao desktop sessions on macOS",
5
5
  "type": "module",
6
6
  "bin": {
@@ -46,6 +46,14 @@ async function readFromClient(client) {
46
46
  return await client.evaluate(READ_MESSAGES_EXPRESSION) || [];
47
47
  }
48
48
 
49
+ export function replyAfterLastUserMessage(messages, message) {
50
+ for (let index = messages.length - 1; index >= 0; index -= 1) {
51
+ if (messages[index].role !== 'user' || messages[index].text !== message) continue;
52
+ return messages.slice(index + 1).find((item) => item.role === 'assistant' && item.text) || null;
53
+ }
54
+ return null;
55
+ }
56
+
49
57
  export async function readConversation(id, options = {}) {
50
58
  const timeoutMs = options.timeoutMs || 10_000;
51
59
  openConversation(id);
@@ -66,7 +74,6 @@ export async function sendMessage(id, message, options = {}) {
66
74
  return withChatClient(async (client) => {
67
75
  await waitForConversation(client, id, Math.min(timeoutMs, 15_000));
68
76
  const before = await readFromClient(client);
69
- const assistantCountBefore = before.filter((item) => item.role === 'assistant').length;
70
77
  const matchingUserCountBefore = before.filter((item) => item.role === 'user' && item.text === message).length;
71
78
  const encodedMessage = JSON.stringify(message);
72
79
 
@@ -103,8 +110,7 @@ export async function sendMessage(id, message, options = {}) {
103
110
  let stablePolls = 0;
104
111
  while (Date.now() < deadline) {
105
112
  messages = await readFromClient(client);
106
- const assistantMessages = messages.filter((item) => item.role === 'assistant');
107
- const reply = assistantMessages.length > assistantCountBefore ? assistantMessages.at(-1) : null;
113
+ const reply = replyAfterLastUserMessage(messages, message);
108
114
  const generating = await client.evaluate(`[
109
115
  ...document.querySelectorAll('[data-testid="chat_input_local_break_button"], [data-testid="chat_input_end_button"]'),
110
116
  ].some((element) => {