@workermill/agent 0.7.0 → 0.7.1

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.
Files changed (2) hide show
  1. package/dist/planner.js +58 -11
  2. package/package.json +1 -1
package/dist/planner.js CHANGED
@@ -154,10 +154,45 @@ function runClaudeCli(claudePath, model, prompt, env, taskId, startTime) {
154
154
  continue;
155
155
  try {
156
156
  const event = JSON.parse(trimmed);
157
- if (event.type === "content_block_delta" && event.delta?.text) {
157
+ // Claude CLI stream-json wraps content in assistant message events
158
+ if (event.type === "assistant" && event.message?.content) {
159
+ const content = event.message.content;
160
+ if (Array.isArray(content)) {
161
+ for (const block of content) {
162
+ if (block.type === "text" && block.text) {
163
+ fullText += block.text;
164
+ charsReceived += block.text.length;
165
+ if (!firstTextSeen) {
166
+ firstTextSeen = true;
167
+ if (toolCallCount > 0 && !milestoneSent.analyzing) {
168
+ transitionPhase("analyzing");
169
+ milestoneSent.analyzing = true;
170
+ }
171
+ }
172
+ if (charsReceived > 500 && !milestoneSent.generating) {
173
+ transitionPhase("generating_plan");
174
+ milestoneSent.generating = true;
175
+ lastProgressLogAt = Math.round((Date.now() - startTime) / 1000);
176
+ }
177
+ }
178
+ else if (block.type === "tool_use") {
179
+ toolCallCount++;
180
+ if (!milestoneSent.reading) {
181
+ transitionPhase("reading_repo");
182
+ milestoneSent.reading = true;
183
+ }
184
+ }
185
+ }
186
+ }
187
+ else if (typeof content === "string" && content) {
188
+ fullText += content;
189
+ charsReceived += content.length;
190
+ }
191
+ }
192
+ else if (event.type === "content_block_delta" && event.delta?.text) {
193
+ // Fallback: raw API streaming format
158
194
  fullText += event.delta.text;
159
195
  charsReceived += event.delta.text.length;
160
- // Phase: first text after tool calls → analyzing
161
196
  if (!firstTextSeen) {
162
197
  firstTextSeen = true;
163
198
  if (toolCallCount > 0 && !milestoneSent.analyzing) {
@@ -165,7 +200,6 @@ function runClaudeCli(claudePath, model, prompt, env, taskId, startTime) {
165
200
  milestoneSent.analyzing = true;
166
201
  }
167
202
  }
168
- // Phase: substantial text → generating_plan
169
203
  if (charsReceived > 500 && !milestoneSent.generating) {
170
204
  transitionPhase("generating_plan");
171
205
  milestoneSent.generating = true;
@@ -179,13 +213,6 @@ function runClaudeCli(claudePath, model, prompt, env, taskId, startTime) {
179
213
  milestoneSent.reading = true;
180
214
  }
181
215
  }
182
- else if (event.type === "assistant" && event.message?.content) {
183
- const text = typeof event.message.content === "string" ? event.message.content : "";
184
- if (text) {
185
- fullText += text;
186
- charsReceived += text.length;
187
- }
188
- }
189
216
  else if (event.type === "result" && event.result) {
190
217
  resultText = typeof event.result === "string" ? event.result : "";
191
218
  }
@@ -340,7 +367,27 @@ function runAnalyst(name, claudePath, model, prompt, repoPath, env, timeoutMs =
340
367
  continue;
341
368
  try {
342
369
  const event = JSON.parse(trimmed);
343
- if (event.type === "content_block_delta" && event.delta?.text) {
370
+ // Claude CLI stream-json wraps content in assistant message events
371
+ if (event.type === "assistant" && event.message?.content) {
372
+ const content = event.message.content;
373
+ if (Array.isArray(content)) {
374
+ for (const block of content) {
375
+ if (block.type === "text" && block.text) {
376
+ fullText += block.text;
377
+ }
378
+ else if (block.type === "tool_use") {
379
+ toolCalls++;
380
+ const toolName = block.name || "unknown";
381
+ console.log(`${ts()} ${label} ${chalk.dim(`Tool: ${toolName}`)} (${toolCalls} total)`);
382
+ }
383
+ }
384
+ }
385
+ else if (typeof content === "string") {
386
+ fullText += content;
387
+ }
388
+ }
389
+ else if (event.type === "content_block_delta" && event.delta?.text) {
390
+ // Fallback: raw API streaming format (may appear in some CLI versions)
344
391
  fullText += event.delta.text;
345
392
  }
346
393
  else if (event.type === "content_block_start" && event.content_block?.type === "tool_use") {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@workermill/agent",
3
- "version": "0.7.0",
3
+ "version": "0.7.1",
4
4
  "description": "WorkerMill Remote Agent - Run AI workers locally with your Claude Max subscription",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",