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
|
-
|
|
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
|
-
|
|
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',
|
|
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;
|