orchestrix-yuri 4.6.0 → 4.6.2

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.
@@ -299,7 +299,10 @@ function runClaude(args, cwd, timeout) {
299
299
  log.warn('Claude CLI timed out');
300
300
  return resolve({ reply: '⏱ Response timed out.', raw: '' });
301
301
  }
302
- if (err) {
302
+ // Claude CLI may return non-zero exit code even with valid JSON output
303
+ // (e.g., stderr "Warning: no stdin data received" causes exit code 1).
304
+ // Always try to parse stdout first before treating as error.
305
+ if (err && !stdout.trim()) {
303
306
  log.error(`Claude CLI error: ${err.message.slice(0, 200)}`);
304
307
  if (stderr) log.info(`stderr: ${stderr.slice(0, 200)}`);
305
308
  return resolve({ reply: `❌ Claude CLI error: ${err.message.slice(0, 200)}`, raw: stderr });
@@ -374,10 +377,14 @@ async function callClaude(opts) {
374
377
  // Build args
375
378
  const args = ['-p', '--output-format', 'json', '--dangerously-skip-permissions'];
376
379
 
380
+ let systemPromptFile = null;
377
381
  if (_sessionId) {
378
382
  args.push('--resume', _sessionId);
379
383
  } else {
380
- args.push('--system-prompt', buildSystemPrompt());
384
+ // Write system prompt to temp file — too large for CLI argument
385
+ systemPromptFile = path.join(os.tmpdir(), `yuri-sp-${Date.now()}.txt`);
386
+ fs.writeFileSync(systemPromptFile, buildSystemPrompt());
387
+ args.push('--system-prompt-file', systemPromptFile);
381
388
  }
382
389
 
383
390
  args.push(prompt);
@@ -385,6 +392,11 @@ async function callClaude(opts) {
385
392
  // Execute
386
393
  const result = await runClaude(args, cwd, callTimeout);
387
394
 
395
+ // Cleanup system prompt temp file
396
+ if (systemPromptFile) {
397
+ try { fs.unlinkSync(systemPromptFile); } catch { /* ok */ }
398
+ }
399
+
388
400
  // Store session ID for subsequent calls
389
401
  if (result.sessionId) {
390
402
  _sessionId = result.sessionId;
@@ -400,12 +412,15 @@ async function callClaude(opts) {
400
412
  log.warn('Session may have expired, retrying with fresh session...');
401
413
  clearSessionState();
402
414
 
415
+ const freshSpFile = path.join(os.tmpdir(), `yuri-sp-fresh-${Date.now()}.txt`);
416
+ fs.writeFileSync(freshSpFile, buildSystemPrompt());
403
417
  const freshArgs = [
404
418
  '-p', '--output-format', 'json', '--dangerously-skip-permissions',
405
- '--system-prompt', buildSystemPrompt(),
419
+ '--system-prompt-file', freshSpFile,
406
420
  prompt,
407
421
  ];
408
422
  const freshResult = await runClaude(freshArgs, cwd, callTimeout);
423
+ try { fs.unlinkSync(freshSpFile); } catch { /* ok */ }
409
424
  if (freshResult.sessionId) {
410
425
  _sessionId = freshResult.sessionId;
411
426
  _messageCount = 1;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "orchestrix-yuri",
3
- "version": "4.6.0",
3
+ "version": "4.6.2",
4
4
  "description": "Yuri — Meta-Orchestrator for Orchestrix. Drive your entire project lifecycle with natural language.",
5
5
  "main": "lib/installer.js",
6
6
  "bin": {