@tyhld/conductor 0.12.67 → 0.12.68
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/dist/headless.js +10 -4
- package/package.json +1 -1
package/dist/headless.js
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
*/
|
|
17
17
|
import { execFileSync, spawn } from 'node:child_process';
|
|
18
18
|
import { createInterface } from 'node:readline';
|
|
19
|
-
import { createWriteStream, existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from 'node:fs';
|
|
19
|
+
import { createWriteStream, existsSync, mkdirSync, readFileSync, readdirSync, unlinkSync, writeFileSync } from 'node:fs';
|
|
20
20
|
import path from 'node:path';
|
|
21
21
|
import os from 'node:os';
|
|
22
22
|
import { RELAY_DELIVER_MAX, RELAY_FETCH_TIMEOUT_MS, RELAY_HEARTBEAT_INTERVAL_MS, RELAY_PENDING_TIMEOUT_MS, RELAY_RESTORE_ORPHANS_ENABLED, buildAnchor, buildSendText, canDeliver, completeWithReport, createRelayState, deliveryReport, fetchCommand, fetchCommandStatus, fetchControl, fetchOrphans, isTerminalCommandStatus, kindOf, markDelivered, noteCentralDown, noteCentralUp, noteReadiness, patchStatus, reconnectDelayMs, selectOrphanToRestore, sendHeartbeat, } from './relay.js';
|
|
@@ -190,7 +190,6 @@ function claudeBinCandidates() {
|
|
|
190
190
|
// nvm の各 node 版の bin(新しい版から)
|
|
191
191
|
const nvmDir = path.join(h, '.nvm', 'versions', 'node');
|
|
192
192
|
try {
|
|
193
|
-
const { readdirSync } = require('node:fs');
|
|
194
193
|
const versions = readdirSync(nvmDir)
|
|
195
194
|
.filter((v) => v.startsWith('v'))
|
|
196
195
|
.sort((a, b) => {
|
|
@@ -207,8 +206,11 @@ function claudeBinCandidates() {
|
|
|
207
206
|
candidates.push(path.join(nvmDir, v, 'bin', 'claude'));
|
|
208
207
|
}
|
|
209
208
|
}
|
|
210
|
-
catch {
|
|
211
|
-
// nvm
|
|
209
|
+
catch (e) {
|
|
210
|
+
// nvm が無い(ENOENT)は正常。それ以外は探索の失敗として記録する。
|
|
211
|
+
if (e?.code !== 'ENOENT') {
|
|
212
|
+
console.error('[conductor] nvm claude exploration failed:', e);
|
|
213
|
+
}
|
|
212
214
|
}
|
|
213
215
|
// その他の既知の場所
|
|
214
216
|
candidates.push(path.join(h, '.local', 'bin', 'claude'), path.join(h, '.claude', 'local', 'claude'), '/usr/local/bin/claude', '/usr/bin/claude');
|
|
@@ -823,6 +825,7 @@ export async function restoreHeadlessOrphans(cfg, state) {
|
|
|
823
825
|
const cmd = { id: pick.id, body: pick.body };
|
|
824
826
|
const job = spawnClaudeProcess(cfg, cmd, sessionId, attempt, true);
|
|
825
827
|
if (job === null) {
|
|
828
|
+
await patchStatus(cfg, pick.id, 'failed', 'claude が見つかりません(手元の孤児復元を中止)');
|
|
826
829
|
state.relay.abandoned.add(pick.id);
|
|
827
830
|
log(`ERROR site=${cfg.site} id=${pick.id} 手元の孤児復元: claude が見つからない → 放棄`);
|
|
828
831
|
return;
|
|
@@ -880,6 +883,7 @@ export async function restoreHeadlessOrphans(cfg, state) {
|
|
|
880
883
|
const cmd = { id: pick.id, body: pick.body };
|
|
881
884
|
const job = spawnClaudeProcess(cfg, cmd, sessionId, attempt, true);
|
|
882
885
|
if (job === null) {
|
|
886
|
+
await patchStatus(cfg, pick.id, 'failed', 'claude が見つかりません(孤児復元を中止)');
|
|
883
887
|
await sendCommandEvents(cfg, pick.id, [{
|
|
884
888
|
type: 'error',
|
|
885
889
|
text: 'claude が見つかりません(孤児復元を中止)',
|
|
@@ -973,6 +977,7 @@ export async function headlessTick(cfg, state, hooks) {
|
|
|
973
977
|
: sessionIdForCommand(retry.cmd.id, retry.attempt);
|
|
974
978
|
const job = spawnClaudeProcess(cfg, retry.cmd, sessionId, retry.attempt, isResume);
|
|
975
979
|
if (job === null) {
|
|
980
|
+
await patchStatus(cfg, retry.cmd.id, 'failed', 'claude が見つかりません(自動再開を中止)');
|
|
976
981
|
await sendCommandEvents(cfg, retry.cmd.id, [{
|
|
977
982
|
type: 'error',
|
|
978
983
|
text: 'claude が見つかりません(自動再開を中止)',
|
|
@@ -1029,6 +1034,7 @@ export async function headlessTick(cfg, state, hooks) {
|
|
|
1029
1034
|
const job = spawnClaudeProcess(cfg, cmd, sessionId, attempt, isResume);
|
|
1030
1035
|
if (job === null) {
|
|
1031
1036
|
// ★起動失敗を管制へ知らせる(「起動しました」とは言わない)
|
|
1037
|
+
await patchStatus(cfg, cmd.id, 'failed', 'claude が見つかりません(起動できませんでした)');
|
|
1032
1038
|
await sendCommandEvents(cfg, cmd.id, [{
|
|
1033
1039
|
type: 'error',
|
|
1034
1040
|
text: 'claude が見つかりません(起動できませんでした)',
|