squadrant 0.11.3 → 0.12.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.
- package/dist/index.js +1264 -1011
- package/dist/index.js.map +1 -1
- package/dist/squadrantd.js +136 -99
- package/dist/squadrantd.js.map +1 -1
- package/package.json +1 -1
- package/scripts/gen-codex-types.sh +2 -10
package/dist/squadrantd.js
CHANGED
|
@@ -56,9 +56,9 @@ var init_snapshot = __esm({
|
|
|
56
56
|
}
|
|
57
57
|
});
|
|
58
58
|
|
|
59
|
-
// packages/cli/src/
|
|
60
|
-
import { join as
|
|
61
|
-
import { homedir as
|
|
59
|
+
// packages/cli/src/squadrantd.ts
|
|
60
|
+
import { join as join15, dirname as dirname5 } from "path";
|
|
61
|
+
import { homedir as homedir10 } from "os";
|
|
62
62
|
import { fileURLToPath as fileURLToPath3 } from "url";
|
|
63
63
|
import { readFileSync as readFileSync9 } from "fs";
|
|
64
64
|
|
|
@@ -89,14 +89,14 @@ function getDefaultConfig() {
|
|
|
89
89
|
models: {
|
|
90
90
|
command: "opus",
|
|
91
91
|
captain: "opus",
|
|
92
|
-
crew: "
|
|
92
|
+
crew: "sonnet",
|
|
93
93
|
exploration: "haiku",
|
|
94
94
|
review: "opus"
|
|
95
95
|
},
|
|
96
96
|
roles: {
|
|
97
97
|
command: { agent: "claude", model: "opus" },
|
|
98
98
|
captain: { agent: "claude", model: "opus" },
|
|
99
|
-
crew: { agent: "claude", model: "
|
|
99
|
+
crew: { agent: "claude", model: "sonnet" },
|
|
100
100
|
exploration: { agent: "claude", model: "haiku" },
|
|
101
101
|
side: { agent: "claude", model: "opus" }
|
|
102
102
|
},
|
|
@@ -227,22 +227,22 @@ var MINIMAL_TEMPLATE = [
|
|
|
227
227
|
``
|
|
228
228
|
].join("\n");
|
|
229
229
|
function ensureSocketAutomation(opts = {}) {
|
|
230
|
-
const
|
|
231
|
-
if (!existsSync(
|
|
232
|
-
mkdirSync(dirname(
|
|
233
|
-
writeFileSync(
|
|
234
|
-
return { path:
|
|
230
|
+
const path17 = opts.path ?? defaultCmuxConfigPath();
|
|
231
|
+
if (!existsSync(path17)) {
|
|
232
|
+
mkdirSync(dirname(path17), { recursive: true });
|
|
233
|
+
writeFileSync(path17, MINIMAL_TEMPLATE);
|
|
234
|
+
return { path: path17, changed: true, alreadySet: false };
|
|
235
235
|
}
|
|
236
|
-
const text = readFileSync(
|
|
236
|
+
const text = readFileSync(path17, "utf-8");
|
|
237
237
|
const current = parse(text)?.automation?.socketControlMode;
|
|
238
238
|
if (current === AUTOMATION_MODE) {
|
|
239
|
-
return { path:
|
|
239
|
+
return { path: path17, changed: false, alreadySet: true };
|
|
240
240
|
}
|
|
241
241
|
const edits = modify(text, [...SOCKET_CONTROL_MODE_PATH], AUTOMATION_MODE, {
|
|
242
242
|
formattingOptions: { insertSpaces: true, tabSize: 2 }
|
|
243
243
|
});
|
|
244
|
-
writeFileSync(
|
|
245
|
-
return { path:
|
|
244
|
+
writeFileSync(path17, applyEdits(text, edits));
|
|
245
|
+
return { path: path17, changed: true, alreadySet: false };
|
|
246
246
|
}
|
|
247
247
|
|
|
248
248
|
// packages/shared/dist/lib/cmux-probe.js
|
|
@@ -364,9 +364,9 @@ function sleep(ms) {
|
|
|
364
364
|
function defaultStatePath() {
|
|
365
365
|
return join4(homedir3(), ".config", "squadrant", "state", "cmux-autoconfig.json");
|
|
366
366
|
}
|
|
367
|
-
function readState(
|
|
367
|
+
function readState(path17) {
|
|
368
368
|
try {
|
|
369
|
-
return JSON.parse(readFileSync4(
|
|
369
|
+
return JSON.parse(readFileSync4(path17, "utf-8"));
|
|
370
370
|
} catch {
|
|
371
371
|
return {};
|
|
372
372
|
}
|
|
@@ -577,7 +577,7 @@ function recoverStall(rec, now) {
|
|
|
577
577
|
return { ...rec, state: "working", lastHeartbeat: now, lastEvent: "watchdog.recover", pendingTool: void 0 };
|
|
578
578
|
}
|
|
579
579
|
|
|
580
|
-
// packages/core/dist/daemon.js
|
|
580
|
+
// packages/core/dist/daemon/reduce.js
|
|
581
581
|
var DEFAULT_TASK_TIMEOUT_MS = 8 * 60 * 60 * 1e3;
|
|
582
582
|
var TERMINAL_RECORD_TTL_MS = 7 * 24 * 60 * 60 * 1e3;
|
|
583
583
|
var ATTENTION_STATES = /* @__PURE__ */ new Set(["done", "blocked", "failed", "stalled", "awaiting-input"]);
|
|
@@ -1913,7 +1913,7 @@ var CaptainDelivery = class {
|
|
|
1913
1913
|
}
|
|
1914
1914
|
};
|
|
1915
1915
|
|
|
1916
|
-
// packages/core/dist/daemon/delivery.js
|
|
1916
|
+
// packages/core/dist/daemon/delivery-loop.js
|
|
1917
1917
|
var CURSOR_SUBSCRIBER = "captain";
|
|
1918
1918
|
var CAPTAIN_GONE_STREAK_K = 3;
|
|
1919
1919
|
function discoverCaptainSurface(surfaces, captainTitle) {
|
|
@@ -2120,10 +2120,10 @@ function distBuiltAt() {
|
|
|
2120
2120
|
return 0;
|
|
2121
2121
|
}
|
|
2122
2122
|
}
|
|
2123
|
-
function gatherLogStats(
|
|
2123
|
+
function gatherLogStats(path17, now, windowMs) {
|
|
2124
2124
|
let sizeBytes = 0;
|
|
2125
2125
|
try {
|
|
2126
|
-
sizeBytes = statSync2(
|
|
2126
|
+
sizeBytes = statSync2(path17).size;
|
|
2127
2127
|
} catch {
|
|
2128
2128
|
return { errorCount: 0, sizeBytes: 0, windowMs };
|
|
2129
2129
|
}
|
|
@@ -2134,7 +2134,7 @@ function gatherLogStats(path16, now, windowMs) {
|
|
|
2134
2134
|
const len = sizeBytes - start;
|
|
2135
2135
|
let text = "";
|
|
2136
2136
|
try {
|
|
2137
|
-
const fd = openSync2(
|
|
2137
|
+
const fd = openSync2(path17, "r");
|
|
2138
2138
|
try {
|
|
2139
2139
|
const buf = Buffer.alloc(len);
|
|
2140
2140
|
readSync(fd, buf, 0, len, start);
|
|
@@ -2575,6 +2575,53 @@ function parseCommand(text) {
|
|
|
2575
2575
|
return entry.build(args);
|
|
2576
2576
|
}
|
|
2577
2577
|
|
|
2578
|
+
// packages/core/dist/telegram/control.js
|
|
2579
|
+
import { execFile } from "child_process";
|
|
2580
|
+
import { promisify } from "util";
|
|
2581
|
+
var pExecFile = promisify(execFile);
|
|
2582
|
+
var MAX_OUTPUT = 3500;
|
|
2583
|
+
function capOutput(stdout, stderr, max = MAX_OUTPUT) {
|
|
2584
|
+
const out = stdout.trim();
|
|
2585
|
+
const err = stderr.trim();
|
|
2586
|
+
let combined = out;
|
|
2587
|
+
if (err)
|
|
2588
|
+
combined = combined ? `${combined}
|
|
2589
|
+
[stderr] ${err}` : `[stderr] ${err}`;
|
|
2590
|
+
if (!combined)
|
|
2591
|
+
combined = "(no output)";
|
|
2592
|
+
if (combined.length > max)
|
|
2593
|
+
combined = combined.slice(0, max) + "\n\u2026[truncated]";
|
|
2594
|
+
return combined;
|
|
2595
|
+
}
|
|
2596
|
+
var COMMAND_TIMEOUT_MS = 6e4;
|
|
2597
|
+
function createRunCommand(cliBin) {
|
|
2598
|
+
return async (argv) => {
|
|
2599
|
+
try {
|
|
2600
|
+
const { stdout, stderr } = await pExecFile(process.execPath, [cliBin, ...argv], { timeout: COMMAND_TIMEOUT_MS, maxBuffer: 4 * 1024 * 1024 });
|
|
2601
|
+
return capOutput(stdout ?? "", stderr ?? "");
|
|
2602
|
+
} catch (e) {
|
|
2603
|
+
const err = e;
|
|
2604
|
+
return capOutput(err.stdout ?? "", err.stderr ?? err.message ?? "command failed");
|
|
2605
|
+
}
|
|
2606
|
+
};
|
|
2607
|
+
}
|
|
2608
|
+
function createIsCaptainAlive(sock) {
|
|
2609
|
+
return async (project) => {
|
|
2610
|
+
try {
|
|
2611
|
+
const health = await sendRequest(sock, { kind: "health", project }, 5e3);
|
|
2612
|
+
const captain = health?.find((h) => h.kind === "captain" && h.project === project);
|
|
2613
|
+
return captain != null && captain.state !== "gone" && captain.state !== "unknown";
|
|
2614
|
+
} catch {
|
|
2615
|
+
return false;
|
|
2616
|
+
}
|
|
2617
|
+
};
|
|
2618
|
+
}
|
|
2619
|
+
function createLaunch(cliBin) {
|
|
2620
|
+
return async (project) => {
|
|
2621
|
+
await pExecFile(process.execPath, [cliBin, "launch", project], { timeout: 3e4 });
|
|
2622
|
+
};
|
|
2623
|
+
}
|
|
2624
|
+
|
|
2578
2625
|
// packages/core/dist/telegram/ensure-captain.js
|
|
2579
2626
|
var DEFAULT_WARMUP_TIMEOUT_MS = 12e4;
|
|
2580
2627
|
var DEFAULT_POLL_MS = 1e3;
|
|
@@ -2746,6 +2793,12 @@ function createTelegramClient(opts) {
|
|
|
2746
2793
|
},
|
|
2747
2794
|
async setMyCommands(commands) {
|
|
2748
2795
|
await call("setMyCommands", { commands });
|
|
2796
|
+
},
|
|
2797
|
+
async sendChatAction(chatId, threadId, action) {
|
|
2798
|
+
const body = { chat_id: chatId, action };
|
|
2799
|
+
if (threadId !== void 0)
|
|
2800
|
+
body.message_thread_id = threadId;
|
|
2801
|
+
await call("sendChatAction", body);
|
|
2749
2802
|
}
|
|
2750
2803
|
};
|
|
2751
2804
|
}
|
|
@@ -3098,6 +3151,9 @@ function createTelegramBridge(opts) {
|
|
|
3098
3151
|
await runChannelCommand(text, fromId, threadId);
|
|
3099
3152
|
return;
|
|
3100
3153
|
}
|
|
3154
|
+
void client.sendChatAction(cfg.supergroupId, threadId, "typing").catch((e) => {
|
|
3155
|
+
log(`telegram sendChatAction failed: ${e.message}`);
|
|
3156
|
+
});
|
|
3101
3157
|
setNotify(stateRoot, resolved.project, true);
|
|
3102
3158
|
if (ensureCaptainAlive && isControlEnabled(cfg) && isAuthorized(fromId, cfg)) {
|
|
3103
3159
|
try {
|
|
@@ -3183,53 +3239,28 @@ function createTelegramBridge(opts) {
|
|
|
3183
3239
|
// packages/core/dist/telegram/setup.js
|
|
3184
3240
|
import fs10 from "fs";
|
|
3185
3241
|
|
|
3186
|
-
// packages/
|
|
3187
|
-
import {
|
|
3188
|
-
import {
|
|
3189
|
-
|
|
3190
|
-
|
|
3191
|
-
|
|
3192
|
-
|
|
3193
|
-
|
|
3194
|
-
|
|
3195
|
-
|
|
3196
|
-
|
|
3197
|
-
|
|
3198
|
-
|
|
3199
|
-
|
|
3200
|
-
|
|
3201
|
-
|
|
3202
|
-
|
|
3203
|
-
|
|
3204
|
-
|
|
3205
|
-
|
|
3206
|
-
|
|
3207
|
-
|
|
3208
|
-
{ timeout: COMMAND_TIMEOUT_MS, maxBuffer: 4 * 1024 * 1024 }
|
|
3209
|
-
);
|
|
3210
|
-
return capOutput(stdout ?? "", stderr ?? "");
|
|
3211
|
-
} catch (e) {
|
|
3212
|
-
const err = e;
|
|
3213
|
-
return capOutput(err.stdout ?? "", err.stderr ?? err.message ?? "command failed");
|
|
3214
|
-
}
|
|
3215
|
-
};
|
|
3216
|
-
}
|
|
3217
|
-
function createIsCaptainAlive(sock) {
|
|
3218
|
-
return async (project) => {
|
|
3219
|
-
try {
|
|
3220
|
-
const health = await sendRequest(sock, { kind: "health", project }, 5e3);
|
|
3221
|
-
const captain = health?.find((h) => h.kind === "captain" && h.project === project);
|
|
3222
|
-
return captain != null && captain.state !== "gone" && captain.state !== "unknown";
|
|
3223
|
-
} catch {
|
|
3224
|
-
return false;
|
|
3225
|
-
}
|
|
3226
|
-
};
|
|
3227
|
-
}
|
|
3228
|
-
function createLaunch(cliBin) {
|
|
3229
|
-
return async (project) => {
|
|
3230
|
-
await pExecFile(process.execPath, [cliBin, "launch", project], { timeout: 3e4 });
|
|
3231
|
-
};
|
|
3232
|
-
}
|
|
3242
|
+
// packages/core/dist/restart-daemon.js
|
|
3243
|
+
import { execFileSync as execFileSync4 } from "child_process";
|
|
3244
|
+
import { existsSync as existsSync8 } from "fs";
|
|
3245
|
+
import { homedir as homedir6 } from "os";
|
|
3246
|
+
import { join as join11 } from "path";
|
|
3247
|
+
var DEFAULT_SOCK_PATH = join11(homedir6(), ".config", "squadrant", "squadrant.sock");
|
|
3248
|
+
|
|
3249
|
+
// packages/core/dist/group-dispatch.js
|
|
3250
|
+
import { randomUUID as randomUUID3 } from "crypto";
|
|
3251
|
+
import { homedir as homedir7 } from "os";
|
|
3252
|
+
import { join as join12 } from "path";
|
|
3253
|
+
var DEFAULT_SOCK_PATH2 = join12(homedir7(), ".config", "squadrant", "squadrant.sock");
|
|
3254
|
+
|
|
3255
|
+
// packages/core/dist/side-session.js
|
|
3256
|
+
import fs11 from "fs";
|
|
3257
|
+
|
|
3258
|
+
// packages/core/dist/crew-spawn.js
|
|
3259
|
+
import fs12 from "fs";
|
|
3260
|
+
import os4 from "os";
|
|
3261
|
+
import path10 from "path";
|
|
3262
|
+
var TEMPLATES_DIR = path10.join(os4.homedir(), ".config", "squadrant", "templates");
|
|
3263
|
+
var STATE_ROOT = path10.join(os4.homedir(), ".config", "squadrant", "state");
|
|
3233
3264
|
|
|
3234
3265
|
// packages/agents/dist/drivers/claude.js
|
|
3235
3266
|
import { execSync as execSync2 } from "child_process";
|
|
@@ -3244,28 +3275,28 @@ import { execSync as execSync4 } from "child_process";
|
|
|
3244
3275
|
import { execSync as execSync5 } from "child_process";
|
|
3245
3276
|
|
|
3246
3277
|
// packages/agents/dist/drivers/launch-cmd.js
|
|
3247
|
-
import
|
|
3248
|
-
import
|
|
3278
|
+
import fs13 from "fs";
|
|
3279
|
+
import path11 from "path";
|
|
3249
3280
|
|
|
3250
3281
|
// packages/agents/dist/projection/cursor.js
|
|
3251
3282
|
import { mkdir, readFile, writeFile } from "fs/promises";
|
|
3252
|
-
import
|
|
3253
|
-
import
|
|
3283
|
+
import path12 from "path";
|
|
3284
|
+
import os5 from "os";
|
|
3254
3285
|
|
|
3255
3286
|
// packages/agents/dist/projection/codex.js
|
|
3256
3287
|
import { mkdir as mkdir2, readFile as readFile2, writeFile as writeFile2 } from "fs/promises";
|
|
3257
|
-
import
|
|
3258
|
-
import
|
|
3288
|
+
import path13 from "path";
|
|
3289
|
+
import os6 from "os";
|
|
3259
3290
|
|
|
3260
3291
|
// packages/agents/dist/projection/gemini.js
|
|
3261
3292
|
import { mkdir as mkdir3, readFile as readFile3, writeFile as writeFile3 } from "fs/promises";
|
|
3262
|
-
import
|
|
3263
|
-
import
|
|
3293
|
+
import path14 from "path";
|
|
3294
|
+
import os7 from "os";
|
|
3264
3295
|
|
|
3265
3296
|
// packages/agents/dist/projection/opencode.js
|
|
3266
3297
|
import { mkdir as mkdir4, readFile as readFile4, writeFile as writeFile4 } from "fs/promises";
|
|
3267
|
-
import
|
|
3268
|
-
import
|
|
3298
|
+
import path15 from "path";
|
|
3299
|
+
import os8 from "os";
|
|
3269
3300
|
|
|
3270
3301
|
// packages/agents/dist/codex/app-server-client.js
|
|
3271
3302
|
import { EventEmitter } from "events";
|
|
@@ -3451,11 +3482,11 @@ function defaultSpawn() {
|
|
|
3451
3482
|
|
|
3452
3483
|
// packages/agents/dist/codex/config.js
|
|
3453
3484
|
import { readFile as readFile5 } from "fs/promises";
|
|
3454
|
-
import { homedir as
|
|
3455
|
-
import { join as
|
|
3485
|
+
import { homedir as homedir8 } from "os";
|
|
3486
|
+
import { join as join13 } from "path";
|
|
3456
3487
|
async function resolveCodexModel() {
|
|
3457
|
-
const home = process.env["CODEX_HOME"] ??
|
|
3458
|
-
const configPath =
|
|
3488
|
+
const home = process.env["CODEX_HOME"] ?? join13(homedir8(), ".codex");
|
|
3489
|
+
const configPath = join13(home, "config.toml");
|
|
3459
3490
|
let text;
|
|
3460
3491
|
try {
|
|
3461
3492
|
text = await readFile5(configPath, "utf8");
|
|
@@ -3945,8 +3976,8 @@ var OpencodeSseBridge = class {
|
|
|
3945
3976
|
// packages/agents/dist/interactive/claude.js
|
|
3946
3977
|
import { execSync as execSync6 } from "child_process";
|
|
3947
3978
|
import { readFileSync as readFileSync8 } from "fs";
|
|
3948
|
-
import { homedir as
|
|
3949
|
-
import { join as
|
|
3979
|
+
import { homedir as homedir9 } from "os";
|
|
3980
|
+
import { join as join14 } from "path";
|
|
3950
3981
|
|
|
3951
3982
|
// packages/agents/dist/headless/types.js
|
|
3952
3983
|
var HEADLESS_ERROR_TAIL = 2e3;
|
|
@@ -4109,7 +4140,7 @@ function runHeadless(opts) {
|
|
|
4109
4140
|
}
|
|
4110
4141
|
|
|
4111
4142
|
// packages/workspaces/dist/runtimes/cmux.js
|
|
4112
|
-
import { execFile as execFile2, execFileSync as
|
|
4143
|
+
import { execFile as execFile2, execFileSync as execFileSync5 } from "child_process";
|
|
4113
4144
|
var CMUX_TIMEOUT = 15e3;
|
|
4114
4145
|
var CmuxTimeoutError = class extends Error {
|
|
4115
4146
|
constructor(cmd) {
|
|
@@ -4363,8 +4394,14 @@ function createCmuxDriver() {
|
|
|
4363
4394
|
}
|
|
4364
4395
|
},
|
|
4365
4396
|
async sendToPane(pane, message) {
|
|
4366
|
-
await
|
|
4367
|
-
await
|
|
4397
|
+
await this.pasteToPane(pane, message);
|
|
4398
|
+
await this.sendKeyToPane(pane, "Enter");
|
|
4399
|
+
},
|
|
4400
|
+
async pasteToPane(pane, text) {
|
|
4401
|
+
await cmux(["send", "--workspace", pane.workspaceId, "--surface", pane.surfaceId, sanitizeForCmuxSend(text)]);
|
|
4402
|
+
},
|
|
4403
|
+
async sendKeyToPane(pane, key) {
|
|
4404
|
+
await cmux(["send-key", "--workspace", pane.workspaceId, "--surface", pane.surfaceId, key]);
|
|
4368
4405
|
},
|
|
4369
4406
|
async readPaneScreen(pane) {
|
|
4370
4407
|
try {
|
|
@@ -4478,14 +4515,14 @@ function createCmuxDriver() {
|
|
|
4478
4515
|
}
|
|
4479
4516
|
|
|
4480
4517
|
// packages/workspaces/dist/notifiers/cmux.js
|
|
4481
|
-
import { execFileSync as
|
|
4518
|
+
import { execFileSync as execFileSync6, execSync as execSync7 } from "child_process";
|
|
4482
4519
|
|
|
4483
4520
|
// packages/workspaces/dist/workspaces/obsidian.js
|
|
4484
|
-
import
|
|
4485
|
-
import { existsSync as
|
|
4486
|
-
import
|
|
4521
|
+
import fs14 from "fs/promises";
|
|
4522
|
+
import { existsSync as existsSync9 } from "fs";
|
|
4523
|
+
import path16 from "path";
|
|
4487
4524
|
|
|
4488
|
-
// packages/workspaces/dist/cmux/events-bridge.js
|
|
4525
|
+
// packages/workspaces/dist/cmux-daemon/events-bridge.js
|
|
4489
4526
|
import { spawn as nodeSpawn2 } from "child_process";
|
|
4490
4527
|
function deriveRunState(eventName) {
|
|
4491
4528
|
switch (eventName) {
|
|
@@ -4619,7 +4656,7 @@ var CmuxEventsBridge = class {
|
|
|
4619
4656
|
}
|
|
4620
4657
|
};
|
|
4621
4658
|
|
|
4622
|
-
// packages/workspaces/dist/cmux/daemon-cmux.js
|
|
4659
|
+
// packages/workspaces/dist/cmux-daemon/daemon-cmux.js
|
|
4623
4660
|
var DaemonCmux = class {
|
|
4624
4661
|
driver;
|
|
4625
4662
|
constructor(driver) {
|
|
@@ -4675,13 +4712,13 @@ var DaemonCmux = class {
|
|
|
4675
4712
|
// packages/workspaces/dist/crew-pane.js
|
|
4676
4713
|
import net from "net";
|
|
4677
4714
|
|
|
4678
|
-
// packages/cli/src/
|
|
4715
|
+
// packages/cli/src/squadrantd.ts
|
|
4679
4716
|
var SELF_PATH2 = fileURLToPath3(import.meta.url);
|
|
4680
|
-
var CLI_BIN =
|
|
4681
|
-
var DAEMON_SOCK =
|
|
4717
|
+
var CLI_BIN = join15(dirname5(SELF_PATH2), "index.js");
|
|
4718
|
+
var DAEMON_SOCK = join15(homedir10(), ".config", "squadrant", "squadrant.sock");
|
|
4682
4719
|
function readPkgVersion() {
|
|
4683
4720
|
try {
|
|
4684
|
-
const pkgPath =
|
|
4721
|
+
const pkgPath = join15(dirname5(SELF_PATH2), "..", "package.json");
|
|
4685
4722
|
return JSON.parse(readFileSync9(pkgPath, "utf-8")).version ?? "unknown";
|
|
4686
4723
|
} catch {
|
|
4687
4724
|
return "unknown";
|
|
@@ -4763,7 +4800,7 @@ function startSquadrantd(opts = {}) {
|
|
|
4763
4800
|
(r) => r.mode === "interactive" && !TERMINAL_STATES.has(r.state) && r.cwd === hook.cwd
|
|
4764
4801
|
);
|
|
4765
4802
|
},
|
|
4766
|
-
cursorFile:
|
|
4803
|
+
cursorFile: join15(stateRoot, "cmux-events.seq"),
|
|
4767
4804
|
log
|
|
4768
4805
|
});
|
|
4769
4806
|
ctx.codexDriver = codexDriver;
|
|
@@ -4802,7 +4839,7 @@ if (process.argv[1] && process.argv[1].endsWith("squadrantd.js")) {
|
|
|
4802
4839
|
process.stdout.write("squadrantd: launchd-managed daemon entry (no CLI args). Use `squadrant` for commands.\n");
|
|
4803
4840
|
process.exit(0);
|
|
4804
4841
|
}
|
|
4805
|
-
const sock =
|
|
4842
|
+
const sock = join15(homedir10(), ".config", "squadrant", "squadrant.sock");
|
|
4806
4843
|
if (await isDaemonSocketLive(sock)) {
|
|
4807
4844
|
process.stderr.write(`[squadrantd] refusing to start: a live daemon already owns ${sock}
|
|
4808
4845
|
`);
|