@meetquinn/animactl 0.1.14-canary.499.1.fa0a014 → 0.1.14

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.
@@ -435,6 +435,8 @@ function isRetryableClaudeProviderError(input) {
435
435
  return input.status === 408 || input.status >= 500;
436
436
  if (/\b(socket|connection|timeout|timed out|network|fetch)\b/i.test(input.message))
437
437
  return true;
438
+ if (/\bresponse stalled mid-stream\b/i.test(input.message))
439
+ return true;
438
440
  return input.subtype === 'error_during_execution';
439
441
  }
440
442
  function textFromClaudeAssistantEvent(value) {
@@ -416,7 +416,7 @@ test('claude-code runtime does not retry non-transient provider protocol errors'
416
416
  await rm(stateDir, { force: true, recursive: true });
417
417
  }
418
418
  });
419
- test('claude-code runtime resumes after transient provider errors when tool use already started', async () => {
419
+ test('claude-code runtime resumes after a stalled mid-stream response when tool use already started', async () => {
420
420
  const stateDir = await mkdtemp(join(tmpdir(), 'anima-runtime-test-'));
421
421
  try {
422
422
  await withAnimaHome(stateDir, async () => {
@@ -434,7 +434,7 @@ test('claude-code runtime resumes after transient provider errors when tool use
434
434
  " console.log(JSON.stringify({ type: 'system', subtype: 'init', session_id: 'claude-error-session', cwd: process.cwd(), claude_code_version: 'test' }));",
435
435
  " if (count === 1) {",
436
436
  " console.log(JSON.stringify({ type: 'assistant', message: { content: [{ type: 'tool_use', id: 'toolu_side_effect', name: 'Bash', input: { command: 'touch /tmp/anima-side-effect' } }] }, session_id: 'claude-error-session' }));",
437
- " console.log(JSON.stringify({ type: 'result', subtype: 'success', is_error: true, api_error_status: 503, result: 'API Error: The socket connection was closed unexpectedly', session_id: 'claude-error-session', usage: { input_tokens: 0, output_tokens: 0 }, terminal_reason: 'completed' }));",
437
+ " console.log(JSON.stringify({ type: 'result', subtype: 'success', is_error: true, result: 'API Error: Response stalled mid-stream. The response above may be incomplete.', session_id: 'claude-error-session', usage: { input_tokens: 0, output_tokens: 0 }, terminal_reason: 'api_error' }));",
438
438
  " return;",
439
439
  " }",
440
440
  " console.log(JSON.stringify({ type: 'assistant', message: { content: [{ type: 'text', text: 'continued safely after provider error' }] }, session_id: 'claude-error-session' }));",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meetquinn/animactl",
3
- "version": "0.1.14-canary.499.1.fa0a014",
3
+ "version": "0.1.14",
4
4
  "license": "Apache-2.0",
5
5
  "private": false,
6
6
  "description": "Operator CLI for installing and running Anima.",